From 6c3948ec2e4d41aa60bf2bd47b7185467edd609c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 16 Apr 2021 11:47:59 -0400 Subject: [PATCH 001/708] Upversion to 0.78.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d1117e35..dd9b9ccf7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.77.0", + "version": "0.78.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e1ddeff87..a72ec9da9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.77.0", + "version": "0.78.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From b7cc684818f2c3fe29bf300150cece8ad8568123 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 16 Apr 2021 11:33:37 -0400 Subject: [PATCH 002/708] Remove 'container environments' term. - The default memory options passed to the JVM help for desktop environments as well, so let's make the description less confusing Signed-off-by: Roland Grunberg --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a72ec9da9..b5a49d156 100644 --- a/package.json +++ b/package.json @@ -150,7 +150,7 @@ "null" ], "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m", - "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m ` to optimize memory usage for container environments with the parallel garbage collector", + "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m ` to optimize memory usage with the parallel garbage collector", "scope": "window" }, "java.errors.incompleteClasspath.severity": { From 40b19c3ef2c19548a1deb0b16de65f63688bea3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Apr 2021 23:28:48 +0000 Subject: [PATCH 003/708] Bump ssri from 6.0.1 to 6.0.2 Bumps [ssri](https://github.com/npm/ssri) from 6.0.1 to 6.0.2. - [Release notes](https://github.com/npm/ssri/releases) - [Changelog](https://github.com/npm/ssri/blob/v6.0.2/CHANGELOG.md) - [Commits](https://github.com/npm/ssri/compare/v6.0.1...v6.0.2) Signed-off-by: dependabot[bot] --- package-lock.json | 90 ++++++++++++++++++----------------------------- 1 file changed, 35 insertions(+), 55 deletions(-) diff --git a/package-lock.json b/package-lock.json index dd9b9ccf7..47ff5b6ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1784,7 +1784,7 @@ }, "readable-stream": { "version": "1.1.14", - "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { @@ -2910,9 +2910,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true } @@ -5244,29 +5244,21 @@ "dev": true }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -6662,9 +6654,9 @@ } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { "figgy-pudding": "^3.5.1" @@ -7904,6 +7896,12 @@ "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -8137,21 +8135,13 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } } } @@ -8367,26 +8357,16 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "5.0.0-security.0" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, "yargs-unparser": { @@ -8523,9 +8503,9 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", + "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", "dev": true, "requires": { "camelcase": "^5.0.0", From 62ebab2cc6e0ac0b8298408fbaa61c85d887dd18 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 19 Apr 2021 13:57:19 -0400 Subject: [PATCH 004/708] Add support for Java 16. This reverts commit 81cc52c254889cf781849422da1ebf9874253a81. Signed-off-by: Roland Grunberg --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index fc373cc2f..2114d2807 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 15 +* Supports code from Java 1.5 to Java 16 * Maven pom.xml project support * Basic Gradle Java project support (Android not supported) * Standalone Java files support @@ -76,8 +76,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-15", - "path": "/path/to/jdk-15", + "name": "JavaSE-16", + "path": "/path/to/jdk-16", "default": true }, ] diff --git a/package.json b/package.json index b5a49d156..e18036126 100644 --- a/package.json +++ b/package.json @@ -610,7 +610,8 @@ "JavaSE-12", "JavaSE-13", "JavaSE-14", - "JavaSE-15" + "JavaSE-15", + "JavaSE-16" ], "description": "Java Execution Environment name. Must be unique." }, From 90f20430a2d89b434885d8e03e16e8dbf6223738 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Wed, 24 Mar 2021 12:03:59 +0300 Subject: [PATCH 005/708] Add new contribution point that allows other extension to register the build file pattern. Close https://github.com/redhat-developer/vscode-java/issues/1825 Signed-off-by: Siarhei Leanavets siarhei_leanavets1@epam.com Signed-off-by: Siarhei Leanavets --- schemas/package.schema.json | 8 ++++++++ src/standardLanguageClient.ts | 15 ++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/schemas/package.schema.json b/schemas/package.schema.json index 5e7bedbab..2d79c14cb 100644 --- a/schemas/package.schema.json +++ b/schemas/package.schema.json @@ -13,6 +13,14 @@ "type": "string", "description": "Relative path to a Java language server extension JAR file" } + }, + "javaBuildFilePatterns": { + "type": "array", + "markdownDescription": "Java build file patterns", + "items": { + "type": "string", + "description": "Specific build file patterns" + } } } } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index e5a761a82..1af361107 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -28,6 +28,7 @@ import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvider"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; +import * as vscode from "vscode"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -465,7 +466,19 @@ function projectConfigurationUpdate(languageClient: LanguageClient, uri?: Uri) { } function isJavaConfigFile(path: String) { - return path.endsWith('pom.xml') || path.endsWith('.gradle'); + return path.endsWith('pom.xml') || path.endsWith('.gradle') + || isBuildFilePattern(path); +} + +function isBuildFilePattern(fileName: String): boolean { + return vscode + .extensions + .all + .filter(extension => extension.packageJSON['contributes'] && Array.isArray(extension.packageJSON['contributes']['javaBuildFilePatterns'])) + .map(extension => extension.packageJSON['contributes']['javaBuildFilePatterns']) + .reduce((acc, val) => acc.concat(val), []) + .filter((pattern: String) => fileName.toLowerCase().endsWith(pattern.toLowerCase())) + .length > 0; } function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { From 43c13ebe7dff63adae892f0c4a0704deba520dd9 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Tue, 30 Mar 2021 23:25:34 +0300 Subject: [PATCH 006/708] Cache all the available patterns Signed-off-by: Siarhei Leanavets --- package.json | 3 ++ src/plugin.ts | 55 +++++++++++++++++++++++++++++++++++ src/standardLanguageClient.ts | 21 ++++--------- 3 files changed, 64 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e18036126..2f9c44611 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,9 @@ ], "main": "./dist/extension", "contributes": { + "javaBuildFilePatterns": [ + "pom.xml", ".gradle" + ], "semanticTokenTypes": [ { "id": "annotation", diff --git a/src/plugin.ts b/src/plugin.ts index af947ca3b..13339c76e 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -5,6 +5,7 @@ import * as path from 'path'; import { Commands } from './commands'; let existingExtensions: Array; +let existingBuildFilePatterns: Array; export function collectJavaExtensions(extensions: readonly vscode.Extension[]): string[] { const result = []; @@ -26,7 +27,31 @@ export function collectJavaExtensions(extensions: readonly vscode.Extension return result; } +export function collectBuildFilePattern(extensions: readonly vscode.Extension[]) { + const result = []; + if (extensions && extensions.length) { + for (const extension of extensions) { + const contributesSection = extension.packageJSON['contributes']; + if (contributesSection) { + const buildFilePatterns = contributesSection['javaBuildFilePatterns']; + if (Array.isArray(buildFilePatterns) && buildFilePatterns.length) { + result.push(...buildFilePatterns); + } + } + } + } + // Make a copy of build file patterns: + existingBuildFilePatterns = result.slice(); + return result; +} + export function onExtensionChange(extensions: readonly vscode.Extension[]) { + updateExistingExtensions(extensions); + updateExistinguildFilePatterns(extensions); + +} + +function updateExistingExtensions(extensions: readonly vscode.Extension[]) { if (!existingExtensions) { return; } @@ -52,4 +77,34 @@ export function onExtensionChange(extensions: readonly vscode.Extension[]) } }); } + +} + +function updateExistinguildFilePatterns(extensions: readonly vscode.Extension[]) { + if (!existingBuildFilePatterns) { + return; + } + const oldPatterns = new Set(existingBuildFilePatterns.slice()); + const newPatterns = collectBuildFilePattern(extensions); + let hasChanged = ( oldPatterns.size !== newPatterns.length); + if (!hasChanged) { + for (const newPattern of newPatterns) { + if (!oldPatterns.has(newPattern)) { + hasChanged = true; + break; + } + } + } + + if (hasChanged) { + const msg = `Java build file patterns changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; + const action = 'Reload'; + const restartId = Commands.RELOAD_WINDOW; + vscode.window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + vscode.commands.executeCommand(restartId); + } + }); + } + } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 1af361107..05bc5b992 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -8,7 +8,7 @@ import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { StreamInfo, LanguageClient, LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; -import { onExtensionChange } from "./plugin"; +import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { serverTaskPresenter } from "./serverTaskPresenter"; import { RequirementsData } from "./requirements"; import * as net from 'net'; @@ -28,10 +28,10 @@ import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvider"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; -import * as vscode from "vscode"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; +let buildFilePatterns: Array; export class StandardLanguageClient { @@ -203,6 +203,8 @@ export class StandardLanguageClient { this.registerCommandsForStandardServer(context, jdtEventEmitter); fileEventHandler.registerFileEventHandlers(this.languageClient, context); + buildFilePatterns = collectBuildFilePattern(extensions.all); + this.status = ClientStatus.Initialized; } @@ -466,19 +468,8 @@ function projectConfigurationUpdate(languageClient: LanguageClient, uri?: Uri) { } function isJavaConfigFile(path: String) { - return path.endsWith('pom.xml') || path.endsWith('.gradle') - || isBuildFilePattern(path); -} - -function isBuildFilePattern(fileName: String): boolean { - return vscode - .extensions - .all - .filter(extension => extension.packageJSON['contributes'] && Array.isArray(extension.packageJSON['contributes']['javaBuildFilePatterns'])) - .map(extension => extension.packageJSON['contributes']['javaBuildFilePatterns']) - .reduce((acc, val) => acc.concat(val), []) - .filter((pattern: String) => fileName.toLowerCase().endsWith(pattern.toLowerCase())) - .length > 0; + return buildFilePatterns.filter((pattern: String) => path.toLowerCase().endsWith(pattern.toLowerCase())) + .length > 0; } function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { From 1a13ed84630f618ac9d169fddd4e665233e25afa Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Mon, 5 Apr 2021 22:58:08 +0300 Subject: [PATCH 007/708] Make one pop-up dialog asking for reload. Use regular expression to check java build file names. Signed-off-by: Siarhei Leanavets Signed-off-by: Siarhei Leanavets --- package.json | 2 +- schemas/package.schema.json | 2 +- src/plugin.ts | 55 ++++++++++-------------------- src/standardLanguageClient.ts | 7 ++-- test/resources/packageExample.json | 3 ++ 5 files changed, 27 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 2f9c44611..7c82ace3d 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "main": "./dist/extension", "contributes": { "javaBuildFilePatterns": [ - "pom.xml", ".gradle" + "^pom.xml$", ".*\\.gradle$" ], "semanticTokenTypes": [ { diff --git a/schemas/package.schema.json b/schemas/package.schema.json index 2d79c14cb..a147e2d3a 100644 --- a/schemas/package.schema.json +++ b/schemas/package.schema.json @@ -19,7 +19,7 @@ "markdownDescription": "Java build file patterns", "items": { "type": "string", - "description": "Specific build file patterns" + "description": "Regular expressions for specifying build file" } } } diff --git a/src/plugin.ts b/src/plugin.ts index 13339c76e..164e9213b 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -46,65 +46,46 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension[]) { - updateExistingExtensions(extensions); - updateExistinguildFilePatterns(extensions); - + if (isExistingExtensionsUpdated(extensions) || isExistingBuildFilePatternsUpdated(extensions)) { + const msg = `Java Extension Contributions changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; + const action = 'Reload'; + const restartId = Commands.RELOAD_WINDOW; + vscode.window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + vscode.commands.executeCommand(restartId); + } + }); + } } -function updateExistingExtensions(extensions: readonly vscode.Extension[]) { +function isExistingExtensionsUpdated(extensions: readonly vscode.Extension[]) { if (!existingExtensions) { - return; + return false; } const oldExtensions = new Set(existingExtensions.slice()); const newExtensions = collectJavaExtensions(extensions); - let hasChanged = ( oldExtensions.size !== newExtensions.length); + const hasChanged = ( oldExtensions.size !== newExtensions.length); if (!hasChanged) { for (const newExtension of newExtensions) { if (!oldExtensions.has(newExtension)) { - hasChanged = true; - break; + return true; } } } - - if (hasChanged) { - const msg = `Extensions to the Java Language Server changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; - const action = 'Reload'; - const restartId = Commands.RELOAD_WINDOW; - vscode.window.showWarningMessage(msg, action).then((selection) => { - if (action === selection) { - vscode.commands.executeCommand(restartId); - } - }); - } - } -function updateExistinguildFilePatterns(extensions: readonly vscode.Extension[]) { +function isExistingBuildFilePatternsUpdated(extensions: readonly vscode.Extension[]) { if (!existingBuildFilePatterns) { - return; + return false; } const oldPatterns = new Set(existingBuildFilePatterns.slice()); const newPatterns = collectBuildFilePattern(extensions); - let hasChanged = ( oldPatterns.size !== newPatterns.length); + const hasChanged = ( oldPatterns.size !== newPatterns.length); if (!hasChanged) { for (const newPattern of newPatterns) { if (!oldPatterns.has(newPattern)) { - hasChanged = true; - break; + return true; } } } - - if (hasChanged) { - const msg = `Java build file patterns changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; - const action = 'Reload'; - const restartId = Commands.RELOAD_WINDOW; - vscode.window.showWarningMessage(msg, action).then((selection) => { - if (action === selection) { - vscode.commands.executeCommand(restartId); - } - }); - } - } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 05bc5b992..d41979d67 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -467,9 +467,10 @@ function projectConfigurationUpdate(languageClient: LanguageClient, uri?: Uri) { } } -function isJavaConfigFile(path: String) { - return buildFilePatterns.filter((pattern: String) => path.toLowerCase().endsWith(pattern.toLowerCase())) - .length > 0; +function isJavaConfigFile(path: string) { + const fileName = require("path").basename(path); + const regEx = new RegExp(buildFilePatterns.map(r => `(${r})`).join('|'), 'i'); + return regEx.test(fileName); } function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { diff --git a/test/resources/packageExample.json b/test/resources/packageExample.json index d1513f145..93db329e3 100644 --- a/test/resources/packageExample.json +++ b/test/resources/packageExample.json @@ -14,6 +14,9 @@ "contributes": { "javaExtensions": [ "./bin/java.extend.jar" + ], + "javaBuildFilePatterns": [ + "^pom.xml$", ".*\\.gradle$" ] }, "extensionDependencies": [ From 2d7c2362d51fe6829e01058667aeb3bbd7722dd0 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Tue, 6 Apr 2021 15:54:39 +0300 Subject: [PATCH 008/708] Use one place for storage build file patterns Bug fix: Extension change message is not displayed Signed-off-by: Siarhei Leanavets --- src/plugin.ts | 10 +++++----- src/standardLanguageClient.ts | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 164e9213b..21f7a5c20 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -3,9 +3,9 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { Commands } from './commands'; +import { buildFilePatterns } from './standardLanguageClient'; let existingExtensions: Array; -let existingBuildFilePatterns: Array; export function collectJavaExtensions(extensions: readonly vscode.Extension[]): string[] { const result = []; @@ -40,8 +40,6 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension[ } } } + return hasChanged; } function isExistingBuildFilePatternsUpdated(extensions: readonly vscode.Extension[]) { - if (!existingBuildFilePatterns) { + if (!buildFilePatterns) { return false; } - const oldPatterns = new Set(existingBuildFilePatterns.slice()); + const oldPatterns = new Set(buildFilePatterns.slice()); const newPatterns = collectBuildFilePattern(extensions); const hasChanged = ( oldPatterns.size !== newPatterns.length); if (!hasChanged) { @@ -88,4 +87,5 @@ function isExistingBuildFilePatternsUpdated(extensions: readonly vscode.Extensio } } } + return hasChanged; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index d41979d67..208933e6f 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -31,7 +31,7 @@ import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/proto const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; -let buildFilePatterns: Array; +export let buildFilePatterns: Array; export class StandardLanguageClient { From c9e18a95235f55e145f0a65777cff119375daf5e Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Wed, 7 Apr 2021 23:18:01 +0300 Subject: [PATCH 009/708] Refactoring Signed-off-by: Siarhei Leanavets --- src/plugin.ts | 29 ++++++----------------------- src/standardLanguageClient.ts | 4 ++-- 2 files changed, 8 insertions(+), 25 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 21f7a5c20..89742248f 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -44,7 +44,7 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension[]) { - if (isExistingExtensionsUpdated(extensions) || isExistingBuildFilePatternsUpdated(extensions)) { + if (isContributedPartUpdated(collectJavaExtensions(extensions), existingExtensions) || isContributedPartUpdated(collectBuildFilePattern(extensions), buildFilePatterns)) { const msg = `Java Extension Contributions changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; @@ -56,13 +56,13 @@ export function onExtensionChange(extensions: readonly vscode.Extension[]) } } -function isExistingExtensionsUpdated(extensions: readonly vscode.Extension[]) { - if (!existingExtensions) { +function isContributedPartUpdated(newContributedPart: Array, oldContributedPart: Array) { + if (!oldContributedPart) { return false; } - const oldExtensions = new Set(existingExtensions.slice()); - const newExtensions = collectJavaExtensions(extensions); - const hasChanged = ( oldExtensions.size !== newExtensions.length); + const oldExtensions = new Set(oldContributedPart.slice()); + const newExtensions = newContributedPart; + const hasChanged = (oldExtensions.size !== newExtensions.length); if (!hasChanged) { for (const newExtension of newExtensions) { if (!oldExtensions.has(newExtension)) { @@ -72,20 +72,3 @@ function isExistingExtensionsUpdated(extensions: readonly vscode.Extension[ } return hasChanged; } - -function isExistingBuildFilePatternsUpdated(extensions: readonly vscode.Extension[]) { - if (!buildFilePatterns) { - return false; - } - const oldPatterns = new Set(buildFilePatterns.slice()); - const newPatterns = collectBuildFilePattern(extensions); - const hasChanged = ( oldPatterns.size !== newPatterns.length); - if (!hasChanged) { - for (const newPattern of newPatterns) { - if (!oldPatterns.has(newPattern)) { - return true; - } - } - } - return hasChanged; -} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 208933e6f..61a1f3e51 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -467,8 +467,8 @@ function projectConfigurationUpdate(languageClient: LanguageClient, uri?: Uri) { } } -function isJavaConfigFile(path: string) { - const fileName = require("path").basename(path); +function isJavaConfigFile(filePath: string) { + const fileName = path.basename(filePath); const regEx = new RegExp(buildFilePatterns.map(r => `(${r})`).join('|'), 'i'); return regEx.test(fileName); } From 8c030f7198a719f8d6a8d1bd49a0485dbb436b51 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Fri, 9 Apr 2021 17:43:10 +0300 Subject: [PATCH 010/708] Add collecting build file patterns test Refactoring Signed-off-by: Siarhei Leanavets --- src/plugin.ts | 13 +++++++------ src/standardLanguageClient.ts | 4 ++-- test/standard-mode-suite/extension.test.ts | 20 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 89742248f..43e65f4b1 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -3,9 +3,9 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { Commands } from './commands'; -import { buildFilePatterns } from './standardLanguageClient'; let existingExtensions: Array; +export let buildFilePatterns: Array; export function collectJavaExtensions(extensions: readonly vscode.Extension[]): string[] { const result = []; @@ -40,6 +40,7 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension, oldContribu if (!oldContributedPart) { return false; } - const oldExtensions = new Set(oldContributedPart.slice()); - const newExtensions = newContributedPart; - const hasChanged = (oldExtensions.size !== newExtensions.length); + const oldContribution = new Set(oldContributedPart.slice()); + const newContribution = newContributedPart; + const hasChanged = (oldContribution.size !== newContribution.length); if (!hasChanged) { - for (const newExtension of newExtensions) { - if (!oldExtensions.has(newExtension)) { + for (const newExtension of newContribution) { + if (!oldContribution.has(newExtension)) { return true; } } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 61a1f3e51..c755df3b0 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -28,10 +28,10 @@ import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvider"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; +import { buildFilePatterns } from './plugin'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; -export let buildFilePatterns: Array; export class StandardLanguageClient { @@ -203,7 +203,7 @@ export class StandardLanguageClient { this.registerCommandsForStandardServer(context, jdtEventEmitter); fileEventHandler.registerFileEventHandlers(this.languageClient, context); - buildFilePatterns = collectBuildFilePattern(extensions.all); + collectBuildFilePattern(extensions.all); this.status = ClientStatus.Initialized; } diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index c9585449c..834da1cce 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -104,6 +104,26 @@ suite('Java Language Extension - Standard', () => { assert.equal(vmArgs[2], '-Dfoo=Some "crazy" stuff'); }); + test('should collect build file pattenrs extensions', () => { + const packageJSON = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../test/resources/packageExample.json'), 'utf8')); + const fakedExtension = { + id: 'test', + extensionUri: null, + extensionPath: '', + isActive: true, + packageJSON, + exports: '', + activate: null, + extensionKind: vscode.ExtensionKind.Workspace + }; + + const extensions = [fakedExtension]; + const result = plugin.collectBuildFilePattern(extensions); + assert(result.length === 2); + assert(result[0].endsWith("^pom.xml$")); + assert(result[1].endsWith(".*\\.gradle$")); + }); + test('should collect java extensions', () => { const packageJSON = JSON.parse(fs.readFileSync(path.join(__dirname, '../../../test/resources/packageExample.json'), 'utf8')); const fakedExtension = { From a8fef5089e61f4840672931d72b50b1664418098 Mon Sep 17 00:00:00 2001 From: Siarhei Leanavets Date: Fri, 16 Apr 2021 09:57:00 +0300 Subject: [PATCH 011/708] Fix cache buildFilePatterns and existingExtensions bug Signed-off-by: Siarhei Leanavets --- src/plugin.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 43e65f4b1..26e4bb63a 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -45,7 +45,7 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension[]) { - if (isContributedPartUpdated(collectJavaExtensions(extensions), existingExtensions) || isContributedPartUpdated(collectBuildFilePattern(extensions), buildFilePatterns)) { + if (isContributedPartUpdated(existingExtensions, collectJavaExtensions(extensions)) || isContributedPartUpdated(buildFilePatterns, collectBuildFilePattern(extensions))) { const msg = `Java Extension Contributions changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; @@ -57,7 +57,7 @@ export function onExtensionChange(extensions: readonly vscode.Extension[]) } } -function isContributedPartUpdated(newContributedPart: Array, oldContributedPart: Array) { +function isContributedPartUpdated(oldContributedPart: Array, newContributedPart: Array) { if (!oldContributedPart) { return false; } From c1af12a9277de054d59117692d8fd3f26e6b02a8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 20 Apr 2021 15:03:17 -0400 Subject: [PATCH 012/708] Enable SKIP_COMMANDS_TEST due to failures. - Related #1892 - Temporarily disable 'should register all java commands' tests due to intermitent failures Signed-off-by: Roland Grunberg --- .travis.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.travis.yml b/.travis.yml index 80f5bae04..c81128947 100644 --- a/.travis.yml +++ b/.travis.yml @@ -21,6 +21,9 @@ before_install: fi - npm install -g typescript +env: +- SKIP_COMMANDS_TEST="true" + install: - wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - mkdir server From f911f00b87253447d34aefe2e4c1bb99863c800c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 31 Mar 2021 10:36:27 -0400 Subject: [PATCH 013/708] Fix vulnerabilities with 'npm audit fix' - Update webpack & webpack-cli - Add eamodio.tsl-problem-matcher extension - Set nodejs to 12.22 for all platforms. Signed-off-by: Roland Grunberg --- .travis.yml | 1 + .vscode/extensions.json | 5 +- .vscode/tasks.json | 20 +- package-lock.json | 2486 ++++++++++----------------------------- package.json | 9 +- 5 files changed, 660 insertions(+), 1861 deletions(-) diff --git a/.travis.yml b/.travis.yml index c81128947..07b949593 100644 --- a/.travis.yml +++ b/.travis.yml @@ -19,6 +19,7 @@ before_install: - if [ $TRAVIS_OS_NAME == "linux" ]; then export CXX="g++-4.9" CC="gcc-4.9"; fi +- nvm install 12.22; - npm install -g typescript env: diff --git a/.vscode/extensions.json b/.vscode/extensions.json index c81530615..a6514529b 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -4,6 +4,7 @@ "recommendations": [ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp "ms-vscode.vscode-typescript-tslint-plugin", - "EditorConfig.EditorConfig" + "EditorConfig.EditorConfig", + "eamodio.tsl-problem-matcher" ] -} \ No newline at end of file +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json index a1d34969c..b040cddde 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -6,22 +6,10 @@ { "type": "npm", "script": "watch", - "problemMatcher": { - "owner": "typescript", - "pattern":[ - { - "regexp": "\\[tsl\\] ERROR", - "file": 1, - "location": 2, - "message": 3 - } - ], - "background": { - "activeOnStart": true, - "beginsPattern": "Compilation \\w+ starting…", - "endsPattern": "Compilation\\s+finished" - } - }, + "problemMatcher": [ + "$ts-webpack-watch", + "$tslint-webpack-watch" + ], "isBackground": true, "presentation": { "reveal": "never" diff --git a/package-lock.json b/package-lock.json index 47ff5b6ee..a6c9ade72 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,38 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@discoveryjs/json-ext": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", + "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "dev": true + }, + "@types/eslint": { + "version": "7.2.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", + "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/eslint-scope": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", + "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "dev": true, + "requires": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "0.0.47", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", + "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "dev": true + }, "@types/fs-extra": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", @@ -23,6 +55,12 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, "@types/lodash": { "version": "4.14.146", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.146.tgz", @@ -78,180 +116,172 @@ } }, "@webassemblyjs/ast": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", - "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", + "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", "dev": true, "requires": { - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0" + "@webassemblyjs/helper-numbers": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", - "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", + "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", - "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", + "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", - "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", - "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.0" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", - "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", + "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", "dev": true }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", - "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "@webassemblyjs/helper-numbers": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", + "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0" + "@webassemblyjs/floating-point-hex-parser": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", - "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", + "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", - "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", + "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0" } }, "@webassemblyjs/ieee754": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", - "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", + "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", - "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", + "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", - "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", + "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", - "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", + "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/helper-wasm-section": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-opt": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "@webassemblyjs/wast-printer": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/helper-wasm-section": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-opt": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "@webassemblyjs/wast-printer": "1.11.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", - "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", + "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", - "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", + "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-buffer": "1.9.0", - "@webassemblyjs/wasm-gen": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-buffer": "1.11.0", + "@webassemblyjs/wasm-gen": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", - "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", + "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-wasm-bytecode": "1.9.0", - "@webassemblyjs/ieee754": "1.9.0", - "@webassemblyjs/leb128": "1.9.0", - "@webassemblyjs/utf8": "1.9.0" + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/helper-wasm-bytecode": "1.11.0", + "@webassemblyjs/ieee754": "1.11.0", + "@webassemblyjs/leb128": "1.11.0", + "@webassemblyjs/utf8": "1.11.0" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", - "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "@webassemblyjs/wast-printer": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", + "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/floating-point-hex-parser": "1.9.0", - "@webassemblyjs/helper-api-error": "1.9.0", - "@webassemblyjs/helper-code-frame": "1.9.0", - "@webassemblyjs/helper-fsm": "1.9.0", + "@webassemblyjs/ast": "1.11.0", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", - "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "@webpack-cli/configtest": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", + "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", + "dev": true + }, + "@webpack-cli/info": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", + "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/wast-parser": "1.9.0", - "@xtuc/long": "4.2.2" + "envinfo": "^7.7.3" } }, + "@webpack-cli/serve": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", + "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", + "dev": true + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -265,9 +295,9 @@ "dev": true }, "acorn": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", - "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz", + "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", "dev": true }, "agent-base": { @@ -291,12 +321,6 @@ "uri-js": "^4.2.2" } }, - "ajv-errors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", - "dev": true - }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -358,12 +382,6 @@ "buffer-equal": "^1.0.0" } }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true - }, "archive-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", @@ -529,53 +547,6 @@ "safer-buffer": "~2.1.0" } }, - "asn1.js": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", - "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0", - "safer-buffer": "^2.1.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "assert": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", - "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", - "dev": true, - "requires": { - "object-assign": "^4.1.1", - "util": "0.10.3" - }, - "dependencies": { - "inherits": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", - "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", - "dev": true - }, - "util": { - "version": "0.10.3", - "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", - "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", - "dev": true, - "requires": { - "inherits": "2.0.1" - } - } - } - }, "assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", @@ -778,18 +749,6 @@ "safe-buffer": "^5.1.1" } }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true - }, - "bn.js": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.3.tgz", - "integrity": "sha512-GkTiFpjFtUzU9CbMeJ5iazkCzGL3jrhzerzZIuqLABjbwRaFt33I9tUdSNryIptM+RxDet6OKm2WnLXzW51KsQ==", - "dev": true - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -828,114 +787,23 @@ } } }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true - }, "browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "browserify-cipher": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", - "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", - "dev": true, - "requires": { - "browserify-aes": "^1.0.4", - "browserify-des": "^1.0.0", - "evp_bytestokey": "^1.0.0" - } - }, - "browserify-des": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", - "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "des.js": "^1.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "browserify-rsa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", - "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", - "dev": true, - "requires": { - "bn.js": "^5.0.0", - "randombytes": "^2.0.1" - } - }, - "browserify-sign": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", - "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", - "dev": true, - "requires": { - "bn.js": "^5.1.1", - "browserify-rsa": "^4.0.1", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "elliptic": "^6.5.3", - "inherits": "^2.0.4", - "parse-asn1": "^5.1.5", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "browserify-zlib": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", - "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "browserslist": { + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", + "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", "dev": true, "requires": { - "pako": "~1.0.5" + "caniuse-lite": "^1.0.30001208", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.712", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" } }, "buffer": { @@ -988,69 +856,12 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", - "dev": true - }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", "dev": true }, - "builtin-status-codes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", - "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", - "dev": true - }, - "cacache": { - "version": "12.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", - "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", - "dev": true, - "requires": { - "bluebird": "^3.5.5", - "chownr": "^1.1.1", - "figgy-pudding": "^3.5.1", - "glob": "^7.1.4", - "graceful-fs": "^4.1.15", - "infer-owner": "^1.0.3", - "lru-cache": "^5.1.1", - "mississippi": "^3.0.0", - "mkdirp": "^0.5.1", - "move-concurrently": "^1.0.1", - "promise-inflight": "^1.0.1", - "rimraf": "^2.6.3", - "ssri": "^6.0.1", - "unique-filename": "^1.1.1", - "y18n": "^4.0.0" - }, - "dependencies": { - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - } - } - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1074,6 +885,12 @@ "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", "dev": true }, + "caniuse-lite": { + "version": "1.0.30001214", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", + "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==", + "dev": true + }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -1121,30 +938,11 @@ } } }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true }, "class-utils": { "version": "0.3.6", @@ -1192,6 +990,17 @@ "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", "dev": true }, + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + } + }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", @@ -1273,6 +1082,12 @@ "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, "colornames": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", @@ -1307,12 +1122,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, "component-emitter": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", @@ -1336,18 +1145,6 @@ "typedarray": "^0.0.6" } }, - "console-browserify": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", - "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", - "dev": true - }, - "constants-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", - "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", - "dev": true - }, "convert-source-map": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", @@ -1357,20 +1154,6 @@ "safe-buffer": "~5.1.1" } }, - "copy-concurrently": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", - "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "fs-write-stream-atomic": "^1.0.8", - "iferr": "^0.1.5", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.0" - } - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -1392,68 +1175,21 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "create-ecdh": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", - "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "elliptic": "^6.5.3" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "dependencies": { "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" @@ -1461,36 +1197,11 @@ } } }, - "crypto-browserify": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", - "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", - "dev": true, - "requires": { - "browserify-cipher": "^1.0.0", - "browserify-sign": "^4.0.0", - "create-ecdh": "^4.0.0", - "create-hash": "^1.1.0", - "create-hmac": "^1.1.0", - "diffie-hellman": "^5.0.0", - "inherits": "^2.0.1", - "pbkdf2": "^3.0.3", - "public-encrypt": "^4.0.0", - "randombytes": "^2.0.0", - "randomfill": "^1.0.3" - } - }, "cycle": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" }, - "cyclist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", - "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", - "dev": true - }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -1710,16 +1421,6 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, - "des.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", - "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "minimalistic-assert": "^1.0.0" - } - }, "detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", @@ -1742,31 +1443,6 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, - "diffie-hellman": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", - "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "miller-rabin": "^4.0.0", - "randombytes": "^2.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, - "domain-browser": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", - "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", - "dev": true - }, "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", @@ -1834,34 +1510,11 @@ "safer-buffer": "^2.1.0" } }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - } - } + "electron-to-chromium": { + "version": "1.3.717", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", + "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", + "dev": true }, "emoji-regex": { "version": "7.0.3", @@ -1903,12 +1556,35 @@ "tapable": "^1.0.0" } }, - "env-variable": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", - "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" - }, - "errno": { + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + }, + "dependencies": { + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + } + } + }, + "env-variable": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", + "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" + }, + "envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true + }, + "errno": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", @@ -1994,6 +1670,12 @@ } } }, + "es-module-lexer": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", + "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "dev": true + }, "es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -2064,6 +1746,12 @@ "es6-symbol": "^3.1.1" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -2071,12 +1759,12 @@ "dev": true }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "esrecurse": "^4.1.0", + "esrecurse": "^4.3.0", "estraverse": "^4.1.1" } }, @@ -2116,54 +1804,39 @@ "dev": true }, "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "dev": true, - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" }, "dependencies": { "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true } } }, @@ -2366,6 +2039,12 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" }, + "fastest-levenshtein": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", + "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", + "dev": true + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -2380,12 +2059,6 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, - "figgy-pudding": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", - "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", - "dev": true - }, "file-stream-rotator": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz", @@ -2423,35 +2096,6 @@ } } }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } - } - }, "find-java-home": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-java-home/-/find-java-home-1.1.0.tgz", @@ -2589,16 +2233,6 @@ "map-cache": "^0.2.2" } }, - "from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -2632,18 +2266,6 @@ "through2": "^2.0.3" } }, - "fs-write-stream-atomic": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", - "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "iferr": "^0.1.5", - "imurmurhash": "^0.1.4", - "readable-stream": "1 || 2" - } - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -2910,9 +2532,9 @@ }, "dependencies": { "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true, "optional": true } @@ -3295,6 +2917,12 @@ "unique-stream": "^2.0.2" } }, + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, "glob-watcher": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", @@ -3641,69 +3269,12 @@ } } }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "dependencies": { - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - } - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, "homedir-polyfill": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", @@ -3751,12 +3322,6 @@ "sshpk": "^1.7.0" } }, - "https-browserify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", - "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", - "dev": true - }, "https-proxy-agent": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", @@ -3784,40 +3349,28 @@ } } }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, "ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, - "iferr": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", - "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", - "dev": true - }, "import-local": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", - "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, "requires": { - "pkg-dir": "^3.0.0", - "resolve-cwd": "^2.0.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3913,6 +3466,15 @@ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", "dev": true }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, "is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", @@ -4134,12 +3696,6 @@ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", "dev": true }, - "is-wsl": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", - "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", - "dev": true - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4179,6 +3735,34 @@ "iterate-iterator": "^1.0.1" } }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "js-tokens": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", @@ -4344,9 +3928,9 @@ } }, "loader-runner": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz", - "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", + "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, "loader-utils": { @@ -4563,15 +4147,6 @@ } } }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -4598,15 +4173,6 @@ "kind-of": "^6.0.2" } }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4657,28 +4223,6 @@ } } }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", @@ -4689,6 +4233,12 @@ "readable-stream": "^2.0.1" } }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -4710,24 +4260,6 @@ "to-regex": "^3.0.2" } }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, "mime-db": { "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", @@ -4749,18 +4281,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true - }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -4775,36 +4295,6 @@ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", "dev": true }, - "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "^1.5.0", - "duplexify": "^3.4.2", - "end-of-stream": "^1.1.0", - "flush-write-stream": "^1.0.0", - "from2": "^2.1.0", - "parallel-transform": "^1.1.0", - "pump": "^3.0.0", - "pumpify": "^1.3.3", - "stream-each": "^1.1.0", - "through2": "^2.0.0" - }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } - } - }, "mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -4826,23 +4316,6 @@ } } }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, "mocha": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", @@ -5186,9 +4659,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -5244,21 +4717,29 @@ "dev": true }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } } } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -5282,20 +4763,6 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" }, - "move-concurrently": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", - "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", - "dev": true, - "requires": { - "aproba": "^1.1.1", - "copy-concurrently": "^1.0.0", - "fs-write-stream-atomic": "^1.0.8", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.4", - "run-queue": "^1.0.3" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5355,62 +4822,12 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "node-releases": { + "version": "1.1.71", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", + "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", "dev": true }, - "node-libs-browser": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", - "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", - "dev": true, - "requires": { - "assert": "^1.1.1", - "browserify-zlib": "^0.2.0", - "buffer": "^4.3.0", - "console-browserify": "^1.1.0", - "constants-browserify": "^1.0.0", - "crypto-browserify": "^3.11.0", - "domain-browser": "^1.1.1", - "events": "^3.0.0", - "https-browserify": "^1.0.0", - "os-browserify": "^0.3.0", - "path-browserify": "0.0.1", - "process": "^0.11.10", - "punycode": "^1.2.4", - "querystring-es3": "^0.2.0", - "readable-stream": "^2.3.3", - "stream-browserify": "^2.0.1", - "stream-http": "^2.7.2", - "string_decoder": "^1.0.0", - "timers-browserify": "^2.0.4", - "tty-browserify": "0.0.0", - "url": "^0.11.0", - "util": "^0.11.0", - "vm-browserify": "^1.0.1" - }, - "dependencies": { - "buffer": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", - "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", - "dev": true, - "requires": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4", - "isarray": "^1.0.0" - } - }, - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -5453,12 +4870,12 @@ } }, "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, "requires": { - "path-key": "^2.0.0" + "path-key": "^3.0.0" } }, "number-is-nan": { @@ -5602,6 +5019,15 @@ "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -5611,12 +5037,6 @@ "readable-stream": "^2.0.1" } }, - "os-browserify": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", - "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", - "dev": true - }, "os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", @@ -5626,24 +5046,6 @@ "lcid": "^1.0.0" } }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", - "dev": true - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", - "dev": true - }, "p-limit": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", @@ -5668,36 +5070,6 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", - "dev": true - }, - "parallel-transform": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", - "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", - "dev": true, - "requires": { - "cyclist": "^1.0.1", - "inherits": "^2.0.3", - "readable-stream": "^2.1.5" - } - }, - "parse-asn1": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", - "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", - "dev": true, - "requires": { - "asn1.js": "^5.2.0", - "browserify-aes": "^1.0.0", - "evp_bytestokey": "^1.0.0", - "pbkdf2": "^3.0.3", - "safe-buffer": "^5.1.1" - } - }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -5736,12 +5108,6 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-browserify": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", - "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", - "dev": true - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -5760,9 +5126,9 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true }, "path-parse": { @@ -5797,19 +5163,6 @@ "pinkie-promise": "^2.0.0" } }, - "pbkdf2": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz", - "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, "pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", @@ -5850,22 +5203,56 @@ } }, "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "find-up": "^3.0.0" + "find-up": "^4.0.0" }, "dependencies": { "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "locate-path": "^3.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true } } }, @@ -5893,24 +5280,12 @@ "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "dev": true }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", - "dev": true - }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "dev": true - }, "promise.allsettled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", @@ -5936,28 +5311,6 @@ "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", "dev": true }, - "public-encrypt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", - "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", - "dev": true, - "requires": { - "bn.js": "^4.1.0", - "browserify-rsa": "^4.0.0", - "create-hash": "^1.1.0", - "parse-asn1": "^5.0.0", - "randombytes": "^2.0.1", - "safe-buffer": "^5.1.2" - }, - "dependencies": { - "bn.js": { - "version": "4.11.9", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz", - "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==", - "dev": true - } - } - }, "pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", @@ -5991,18 +5344,6 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", - "dev": true - }, - "querystring-es3": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", - "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", - "dev": true - }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6012,16 +5353,6 @@ "safe-buffer": "^5.1.0" } }, - "randomfill": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", - "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", - "dev": true, - "requires": { - "randombytes": "^2.0.5", - "safe-buffer": "^5.1.0" - } - }, "read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", @@ -6209,12 +5540,12 @@ } }, "resolve-cwd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", - "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "resolve-from": "^3.0.0" + "resolve-from": "^5.0.0" } }, "resolve-dir": { @@ -6228,9 +5559,9 @@ } }, "resolve-from": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", - "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, "resolve-options": { @@ -6263,25 +5594,6 @@ "glob": "^7.1.3" } }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "run-queue": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", - "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", - "dev": true, - "requires": { - "aproba": "^1.1.1" - } - }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -6303,14 +5615,34 @@ "dev": true }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", + "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", "dev": true, "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "@types/json-schema": "^7.0.6", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + } } }, "seek-bzip": { @@ -6375,35 +5707,28 @@ } } }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "kind-of": "^6.0.2" } }, "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "shebang-regex": "^3.0.0" } }, "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, "signal-exit": { @@ -6653,15 +5978,6 @@ "tweetnacl": "~0.14.0" } }, - "ssri": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", - "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", - "dev": true, - "requires": { - "figgy-pudding": "^3.5.1" - } - }, "stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -6688,45 +6004,12 @@ } } }, - "stream-browserify": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", - "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", - "dev": true, - "requires": { - "inherits": "~2.0.1", - "readable-stream": "^2.0.2" - } - }, - "stream-each": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", - "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "stream-shift": "^1.0.0" - } - }, "stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "stream-http": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", - "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", - "dev": true, - "requires": { - "builtin-status-codes": "^3.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.3.6", - "to-arraybuffer": "^1.0.0", - "xtend": "^4.0.0" - } - }, "stream-shift": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", @@ -6799,10 +6082,10 @@ "is-natural-number": "^4.0.1" } }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true }, "strip-json-comments": { @@ -6849,41 +6132,56 @@ } }, "terser": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz", - "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { "commander": "^2.20.0", - "source-map": "~0.6.1", - "source-map-support": "~0.5.12" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "dependencies": { "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } }, "terser-webpack-plugin": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", - "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", "dev": true, "requires": { - "cacache": "^12.0.2", - "find-cache-dir": "^2.1.0", - "is-wsl": "^1.1.0", - "schema-utils": "^1.0.0", - "serialize-javascript": "^4.0.0", + "jest-worker": "^26.6.2", + "p-limit": "^3.1.0", + "schema-utils": "^3.0.0", + "serialize-javascript": "^5.0.1", "source-map": "^0.6.1", - "terser": "^4.1.2", - "webpack-sources": "^1.4.0", - "worker-farm": "^1.7.0" + "terser": "^5.5.1" }, "dependencies": { + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "serialize-javascript": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", + "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -6935,15 +6233,6 @@ "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", "dev": true }, - "timers-browserify": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", - "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", - "dev": true, - "requires": { - "setimmediate": "^1.0.4" - } - }, "to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", @@ -6954,12 +6243,6 @@ "is-negated-glob": "^1.0.0" } }, - "to-arraybuffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", - "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", - "dev": true - }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", @@ -7156,12 +6439,6 @@ "tslib": "^1.8.1" } }, - "tty-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", - "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", - "dev": true - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -7258,24 +6535,6 @@ "set-value": "^2.0.1" } }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "dev": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, "unique-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", @@ -7352,39 +6611,12 @@ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", "dev": true }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", - "dev": true - } - } - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, - "util": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/util/-/util-0.11.1.tgz", - "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", - "dev": true, - "requires": { - "inherits": "2.0.3" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7397,9 +6629,9 @@ "dev": true }, "v8-compile-cache": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz", - "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, "v8flags": { @@ -7492,12 +6724,6 @@ "vinyl": "^2.0.0" } }, - "vm-browserify": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", - "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", - "dev": true - }, "vscode-jsonrpc": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", @@ -7587,583 +6813,158 @@ "dev": true }, "watchpack": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", - "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", + "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", "dev": true, "requires": { - "chokidar": "^3.4.1", - "graceful-fs": "^4.1.2", - "neo-async": "^2.5.0", - "watchpack-chokidar2": "^2.0.1" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + } + }, + "webpack": { + "version": "5.34.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.34.0.tgz", + "integrity": "sha512-+WiFMgaZqhu7zKN64LQ7z0Ml4WWI+9RwG6zmS0wJDQXiCeg3hpN8fYFNJ+6WlosDT55yVxTfK7XHUAOVR4rLyA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.0", + "@types/estree": "^0.0.47", + "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/wasm-edit": "1.11.0", + "@webassemblyjs/wasm-parser": "1.11.0", + "acorn": "^8.0.4", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.8.0", + "es-module-lexer": "^0.4.0", + "eslint-scope": "^5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.4", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.1.1", + "watchpack": "^2.0.0", + "webpack-sources": "^2.1.1" }, "dependencies": { - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "enhanced-resolve": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.0.tgz", + "integrity": "sha512-Sl3KRpJA8OpprrtaIswVki3cWPiPKxXuFxJXBp+zNb6s6VwNWwFRUdtmzd2ReUut8n+sCPx7QCtQ7w5wfJhSgQ==", "dev": true, - "optional": true, "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" } }, - "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", - "dev": true, - "optional": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "optional": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.3.tgz", - "integrity": "sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ==", - "dev": true, - "optional": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.5.0" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "optional": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", - "dev": true, - "optional": true - }, - "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", - "dev": true, - "optional": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "optional": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "dev": true, - "optional": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "optional": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "optional": true - }, - "readdirp": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", - "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", - "dev": true, - "optional": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "optional": true, - "requires": { - "is-number": "^7.0.0" - } - } - } - }, - "watchpack-chokidar2": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", - "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", - "dev": true, - "optional": true, - "requires": { - "chokidar": "^2.1.8" - } - }, - "webpack": { - "version": "4.44.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.44.2.tgz", - "integrity": "sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.0", - "@webassemblyjs/helper-module-context": "1.9.0", - "@webassemblyjs/wasm-edit": "1.9.0", - "@webassemblyjs/wasm-parser": "1.9.0", - "acorn": "^6.4.1", - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^4.3.0", - "eslint-scope": "^4.0.3", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^2.4.0", - "loader-utils": "^1.2.3", - "memory-fs": "^0.4.1", - "micromatch": "^3.1.10", - "mkdirp": "^0.5.3", - "neo-async": "^2.6.1", - "node-libs-browser": "^2.2.1", - "schema-utils": "^1.0.0", - "tapable": "^1.1.3", - "terser-webpack-plugin": "^1.4.3", - "watchpack": "^1.7.4", - "webpack-sources": "^1.4.1" - }, - "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "emojis-list": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", - "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", "dev": true }, - "enhanced-resolve": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", - "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.5.0", - "tapable": "^1.0.0" - }, - "dependencies": { - "memory-fs": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", - "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - } - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", "dev": true }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", "dev": true, "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "loader-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", - "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^1.0.1" + "mime-db": "1.47.0" } }, "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", + "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", "dev": true } } }, "webpack-cli": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.11.tgz", - "integrity": "sha512-dXlfuml7xvAFwYUPsrtQAA9e4DOe58gnzSxhgrO/ZM/gyXTBowrsYeubyN4mqGhYdpXMFNyQ6emjJS9M7OBd4g==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "enhanced-resolve": "4.1.0", - "findup-sync": "3.0.0", - "global-modules": "2.0.0", - "import-local": "2.0.0", - "interpret": "1.2.0", - "loader-utils": "1.2.3", - "supports-color": "6.1.0", - "v8-compile-cache": "2.0.3", - "yargs": "13.2.4" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", + "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.0.2", + "@webpack-cli/info": "^1.2.3", + "@webpack-cli/serve": "^1.3.1", + "colorette": "^1.2.1", + "commander": "^7.0.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "v8-compile-cache": "^2.2.0", + "webpack-merge": "^5.7.3" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true }, - "global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "requires": { - "global-prefix": "^3.0.0" - } - }, - "global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "requires": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - } - }, "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", - "dev": true, - "requires": { - "minimist": "^1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } - } - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "^2.0.0" - } - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", - "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" - } - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "resolve": "^1.9.0" } }, - "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", - "dev": true - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - }, - "dependencies": { - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "decamelize": "^1.2.0" + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" } } } }, + "webpack-merge": { + "version": "5.7.3", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", + "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "dev": true, + "requires": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + } + }, "webpack-sources": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", - "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", + "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", "dev": true, "requires": { - "source-list-map": "^2.0.0", - "source-map": "~0.6.1" + "source-list-map": "^2.0.1", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -8194,6 +6995,12 @@ "string-width": "^1.0.2 || 2" } }, + "wildcard": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", + "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", + "dev": true + }, "winreg": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.4.tgz", @@ -8290,15 +7097,6 @@ "triple-beam": "^1.2.0" } }, - "worker-farm": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", - "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", - "dev": true, - "requires": { - "errno": "~0.1.7" - } - }, "workerpool": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", @@ -8327,15 +7125,9 @@ "dev": true }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, "yargs": { @@ -8357,16 +7149,26 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "5.0.0-security.0" - } - }, - "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + } } }, "yargs-unparser": { @@ -8478,9 +7280,9 @@ } }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -8503,9 +7305,9 @@ }, "dependencies": { "yargs-parser": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.1.tgz", - "integrity": "sha512-0OAMV2mAZQrs3FkNpDQcBk1x5HXb8X4twADss4S0Iuk+2dGnLOE/fRHrsYm542GduMveyA77OF4wrNJuanRCWw==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -8534,6 +7336,12 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true } } } diff --git a/package.json b/package.json index 7c82ace3d..facd4a811 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,8 @@ "main": "./dist/extension", "contributes": { "javaBuildFilePatterns": [ - "^pom.xml$", ".*\\.gradle$" + "^pom.xml$", + ".*\\.gradle$" ], "semanticTokenTypes": [ { @@ -1033,7 +1034,7 @@ "preinstall": "npx npm-force-resolutions", "vscode:prepublish": "webpack --mode production", "compile": "tsc -p ./&webpack --mode development", - "watch": "webpack --mode development --watch --info-verbosity verbose", + "watch": "webpack --mode development --watch", "pretest": "npm run compile", "test": "node ./out/test/runtest.js", "build-server": "./node_modules/.bin/gulp build_server", @@ -1061,8 +1062,8 @@ "typescript": "^3.7.3", "typescript-tslint-plugin": "^0.3.1", "vscode-test": "^1.4.0", - "webpack": "^4.44.1", - "webpack-cli": "^3.3.11" + "webpack": "^5.28.0", + "webpack-cli": "^4.6.0" }, "dependencies": { "expand-home-dir": "^0.0.3", From 2e472bc163ed65d9638e7a840984628c704d733c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Apr 2021 17:08:24 -0400 Subject: [PATCH 014/708] Add setting to control method declaration lookups in source files. - Add java.symbols.includeSourceMethodDeclarations, defaulting to false Signed-off-by: Roland Grunberg --- README.md | 5 +++-- package.json | 6 ++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 2114d2807..98becf73c 100644 --- a/README.md +++ b/README.md @@ -181,8 +181,6 @@ The following settings are supported: * `java.configuration.maven.globalSettings` : Path to Maven's global settings.xml. * `java.eclipse.downloadSources` : Enable/disable download of Maven source artifacts for Eclipse projects. * `java.recommendations.dependency.analytics.show` : Show the recommended Dependency Analytics extension. - -New in 0.77.0: * `java.references.includeDecompiledSources` : Include the decompiled sources when finding references. Default to true. * `java.project.sourcePaths`: Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project. * `java.typeHierarchy.lazyLoad`: Enable/disable lazy loading the content in type hierarchy. Lazy loading could save a lot of loading time but every type should be expanded manually to load its content. @@ -192,6 +190,9 @@ New in 0.77.0: - `lastMember`: Insert the generated code as the last member of the target type. * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) +New in 0.78.0: +* `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) is controlled by the `java.semanticHighlighting.enabled` preference. When enabled, it fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience different small issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. diff --git a/package.json b/package.json index facd4a811..efc700222 100644 --- a/package.json +++ b/package.json @@ -765,6 +765,12 @@ "markdownDescription": "Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences)", "default": null, "scope": "window" + }, + "java.symbols.includeSourceMethodDeclarations": { + "type": "boolean", + "markdownDescription": "Include method declarations from source files in symbol search.", + "default": false, + "scope": "window" } } }, From b81c75296cef29f9cc055bffbc691c21f3a44298 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 28 Apr 2021 12:13:00 -0400 Subject: [PATCH 015/708] Continue to support VS Code 1.50 - Undo our update of the VS Code engine requirement to ^1.53.2, moving it down to ^1.50.0 - Allow those basing their language client off of VS Code 1.50.0 to continue to use this version and not be forced to install an earlier version - Guard the 'api' field (which holds the reference view) if using a version that does not support it Signed-off-by: Roland Grunberg --- package.json | 4 ++-- src/typeHierarchy/typeHierarchyTree.ts | 9 +++++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index efc700222..7b6a58a19 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "preview": true, "enableProposedApi": false, "engines": { - "vscode": "^1.53.2" + "vscode": "^1.50.0" }, "repository": { "type": "git", @@ -1053,7 +1053,7 @@ "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", - "@types/vscode": "^1.53.0", + "@types/vscode": "^1.50.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "gulp": "^4.0.2", diff --git a/src/typeHierarchy/typeHierarchyTree.ts b/src/typeHierarchy/typeHierarchyTree.ts index a47f62133..d250f9b78 100644 --- a/src/typeHierarchy/typeHierarchyTree.ts +++ b/src/typeHierarchy/typeHierarchyTree.ts @@ -31,6 +31,9 @@ export class TypeHierarchyTree { if (!this.initialized) { await this.initialize(); } + if (!this.api) { + return; + } if (this.cancelTokenSource) { this.cancelTokenSource.cancel(); } @@ -65,6 +68,9 @@ export class TypeHierarchyTree { } public changeDirection(direction: TypeHierarchyDirection): void { + if (!this.api) { + return; + } if (this.cancelTokenSource) { this.cancelTokenSource.cancel(); } @@ -77,6 +83,9 @@ export class TypeHierarchyTree { } public async changeBaseItem(item: TypeHierarchyItem): Promise { + if (!this.api) { + return; + } if (this.cancelTokenSource) { this.cancelTokenSource.cancel(); } From 1c5a357b57488f4bf6f93bf0913cf0523c813120 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 27 Apr 2021 21:41:29 -0400 Subject: [PATCH 016/708] Add changelog for 0.78.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 85c205e26..a6aacce9c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 0.78.0 (April 29th, 2021) + * enhancement - Add Java 16 Support. See [#1891](https://github.com/redhat-developer/vscode-java/pull/1891). + * enhancement - java.project.referencedLibraries should resolve paths leading with ~. See [JLS#1735](https://github.com/eclipse/eclipse.jdt.ls/issues/1735). + * enhancement - Provide support for 3rd party build types (Bazel). See [#1825](https://github.com/redhat-developer/vscode-java/issues/1825). + * enhancement - Add setting to control method declaration lookups in source files. See [#1887](https://github.com/redhat-developer/vscode-java/pull/1887). + * bug fix - Changes to Formatter profiles don‘t take effect in real time. See [JLS#1736](https://github.com/eclipse/eclipse.jdt.ls/issues/1736). + * bug fix - Javadoc overriding methods not inheriting param descriptions. See [JLS#1732](https://github.com/eclipse/eclipse.jdt.ls/issues/1732). + * bug fix - NPE in NewCUProposal.createChange(NewCUProposal.java:277). See [JLS#1723](https://github.com/eclipse/eclipse.jdt.ls/issues/1723). + * bug fix - java.settings.url does not override default java settings. See [JLS#1741](https://github.com/eclipse/eclipse.jdt.ls/issues/1741). + * bug fix - workspaceEdit textDocument version is always 0. See [JLS#1695](https://github.com/eclipse/eclipse.jdt.ls/issues/1695). + * build - Bump ssri from 6.0.1 to 6.0.2. See [#1889](https://github.com/redhat-developer/vscode-java/pull/1889). + ## 0.77.0 (April 15th, 2021) * enhancement - Refactor when moving files. See [#641](https://github.com/redhat-developer/vscode-java/issues/641). * enhancement - Support Type Hierarchy. See [#1790](https://github.com/redhat-developer/vscode-java/pull/1790). @@ -9,15 +21,15 @@ * enhancement - Add more options to query project settings. See [#1828](https://github.com/redhat-developer/vscode-java/pull/1828). * enhancement - Writing Java in VS CODE shows way too much warnings! See [#1657](https://github.com/redhat-developer/vscode-java/issues/1657). * enhancement - Enhanced IBuildSupport usage to support other build tools such as bazel. See [JLS#1694](https://github.com/eclipse/eclipse.jdt.ls/pull/1694). - * bug - External tool file modifications not registered. See [JLS#1650](https://github.com/eclipse/eclipse.jdt.ls/issues/1650). - * bug - Enhance the condition of inline constant. See [JLS#1672](https://github.com/eclipse/eclipse.jdt.ls/pull/1672). - * bug - Java code formatter rules is ignored. See [#1640](https://github.com/redhat-developer/vscode-java/issues/1640). - * bug - java.format.settings.url no longer loads project .xml file. See [#1827](https://github.com/redhat-developer/vscode-java/issues/1827). - * bug - Typo When Trying to Add Folder to Java Source Path That Is Already Included By Parent. See [#1833](https://github.com/redhat-developer/vscode-java/issues/1833). - * bug - Set minimum for threshold settings. See [#1868](https://github.com/redhat-developer/vscode-java/pull/1868). - * bug - Invisible project forgets source paths on classpath update. See [JLS#1647](https://github.com/eclipse/eclipse.jdt.ls/issues/1647). - * bug - Keep getting "Couldn't start client Language Support for Java" when opening a Java file in vscode. See [#1813](https://github.com/redhat-developer/vscode-java/issues/1813). - * bug - Disable console.log for lsp trace due to performance issue. See [#1824](https://github.com/redhat-developer/vscode-java/pull/1824). + * bug fix - External tool file modifications not registered. See [JLS#1650](https://github.com/eclipse/eclipse.jdt.ls/issues/1650). + * bug fix - Enhance the condition of inline constant. See [JLS#1672](https://github.com/eclipse/eclipse.jdt.ls/pull/1672). + * bug fix - Java code formatter rules is ignored. See [#1640](https://github.com/redhat-developer/vscode-java/issues/1640). + * bug fix - java.format.settings.url no longer loads project .xml file. See [#1827](https://github.com/redhat-developer/vscode-java/issues/1827). + * bug fix - Typo When Trying to Add Folder to Java Source Path That Is Already Included By Parent. See [#1833](https://github.com/redhat-developer/vscode-java/issues/1833). + * bug fix - Set minimum for threshold settings. See [#1868](https://github.com/redhat-developer/vscode-java/pull/1868). + * bug fix - Invisible project forgets source paths on classpath update. See [JLS#1647](https://github.com/eclipse/eclipse.jdt.ls/issues/1647). + * bug fix - Keep getting "Couldn't start client Language Support for Java" when opening a Java file in vscode. See [#1813](https://github.com/redhat-developer/vscode-java/issues/1813). + * bug fix - Disable console.log for lsp trace due to performance issue. See [#1824](https://github.com/redhat-developer/vscode-java/pull/1824). * build - Update Target Platform to 2021-03 Release. See [JLS#1691](https://github.com/eclipse/eclipse.jdt.ls/pull/1691). * build - Update lsp4j to 0.11.0. See [JLS#1700](https://github.com/eclipse/eclipse.jdt.ls/pull/1700). * debt - Build Fails Due to Tests. See [JLS#1646](https://github.com/eclipse/eclipse.jdt.ls/issues/1646). From deef715ebaef57c548e6be22e0ef1820c36eb16d Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 29 Apr 2021 15:45:11 +0800 Subject: [PATCH 017/708] Change icons to eclipse ones for temporary use Signed-off-by: Shi Chen --- icons/dark/subtypehierarchy.png | Bin 0 -> 651 bytes icons/dark/supertypehierarchy.png | Bin 0 -> 686 bytes icons/dark/typehierarchy.png | Bin 0 -> 544 bytes icons/light/subtypehierarchy.png | Bin 0 -> 645 bytes icons/light/supertypehierarchy.png | Bin 0 -> 677 bytes icons/light/typehierarchy.png | Bin 0 -> 540 bytes package.json | 15 ++++++++++++--- 7 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 icons/dark/subtypehierarchy.png create mode 100644 icons/dark/supertypehierarchy.png create mode 100644 icons/dark/typehierarchy.png create mode 100644 icons/light/subtypehierarchy.png create mode 100644 icons/light/supertypehierarchy.png create mode 100644 icons/light/typehierarchy.png diff --git a/icons/dark/subtypehierarchy.png b/icons/dark/subtypehierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..fe1ceeeccc9aeada43005df2b422cdcd197bab35 GIT binary patch literal 651 zcmV;60(AX}P)j1l6 zvHur9Q55cORaI}j-v_I}KMz1D{R!aVN}ye*)9FX%+Sb@~S^-KaZ{g~YWtnTc4zMZ| zi^cd-GMVJFrfGb>Gk{<)$OW_6ET0>V2A^}e++ixP`YljZ)v^VOqSynld%ZU8Q&n}% zgaED;MY$UjZcEgyCUjbXqXRh3fnu@9O;oK`_ln}3bD&Ttd<5|7w$d@iKG$ls+|50U zRyodra=Cmm8jZdHIJbgej9u!w{;b(->UIG3%7J`7e_z-2D?&(U1>%P&il_B@{ns{g zEuQb41DQ8$4HW- lmyEF!P18Q@a&o(S{{k!KO)wpQu-X6s002ovPDHLkV1oC6C^i59 literal 0 HcmV?d00001 diff --git a/icons/dark/supertypehierarchy.png b/icons/dark/supertypehierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..4247b932ad414b69aa935e979c2525522145463f GIT binary patch literal 686 zcmV;f0#W^mP)W zh8EhbZm%E+E>ff-2>Ld8Xoo^7w+ zwOZW^Rw|Xu4b|&)$2?n5Q517Qu~;-4HX04{JsORU0w|ZuX1!Xi<_$oWWyd2BMRB7* zrBX5T+!S!jvr);id;$=hV!cxL_07A%j060&l(~wG~HUt<92GH$xjaZvf`q=Rok(+6@zh<}dr_(7g z#vq%`nmb>AjCi}As=7>3_7(ZQ`!oJ1-P(#b^}wEsiox^$4%KVaz4t%b%vkikX76Z{VaJ9g4eQgrAh zLP3hN-jy6xYLl4MG?tcTIY{pAeeV0dy!R3O@I!uBA8P={*b9KePe8Af(t{u&KLQ9l zAxdeWQL+G(N+rqB?RMq3Hvq#hWCSXeiWF`%8gi^wtNV$7uIsib&@{~!pj)i@dUIXZZHrLTG)oauN(}%P4nmiVv0JYYmebX0H5rL|y>5GQ zN~tMqsH!UR`8-Ld(^xK-7>~yo3 z{l59G$rwBH1z@+>Jn3{gMI;hIu~-BloBTou^m;vW=@Vn@I4}TJRguYLEc=@P!{N{$ zfEzWXRHh&vk0Tn5ZcLxg=a|iA{!-upKo(&r6cULTzlEaoU^mbt&9l3iCK)C^E*XR^j52N=T+Pnz)Hl;H{4)$j=--0aO*Py zj{swAYoGCL08Y8iX0!5>Q=btyKq{4z08V|zw*ffao^E}{J^;4%8G!@*`@p{s{CyvA itMb5ozyrWmA9w?z>ku$C7LZT?0000SMs$0 literal 0 HcmV?d00001 diff --git a/icons/light/subtypehierarchy.png b/icons/light/subtypehierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..158ebddc57c2683597618f7789575cf07f586288 GIT binary patch literal 645 zcmV;00($+4P)%jJ3p z055gOABgx#mgOrap$!3eo_~*sA^^Cz#SrnMEXyC9g4hAjcYcM4?pQ1ap->1A5r)Gd z^!t5SE|>K8Yp0yp0Z1m3-vQtv5{W=K9NyUIXf%ReuSc(`tyb%m6D}A5{04w0@pv5E z?#&7iLZH*>Fh>G`fT4c1TD8>JdjaU~snGhM0E5Bc=m4w)UauEC9?u5Ad_ITSY-U)3 zTrNlG4ciW^H=*C}2cOT!Ag0qPjK^cpG|jLH9Rr|Z`Y|jU6?xw=bQFLJTMZ(|0jwUe z{}&*i&$I5XR4VtL@1r^J&jW~}_!9s&Vv`VZTPzlzQD+avrdco6Tm|tT(}8hG9I~E&2xlE>u;W+=qw+faAEN zrfD~b_|#GH??fVTF>)tZ^4Wv)Q~w#K(?_cRbHO3}RS85aOfJsE>#*_rzb*H2p#l zgf02s1<-1>46lhi&j(VA@K$$h{tu~o>?3Iy!~kpqO) z2aZ-C>^^WbK-hiY6o63sz|jC@)_CXuyUM>KV!Ti&KsK8NilSh#SipEZhV6C>P19hr*@UwN`v5ExlCPmm zCIjho+Ejupyjrb5*Y$8rc*rZeWBAc41`$6=lGOO`W9VnrppEDs3pq_N3UjnH00000 LNkvXXu0mjfD+w*o literal 0 HcmV?d00001 diff --git a/icons/light/typehierarchy.png b/icons/light/typehierarchy.png new file mode 100644 index 0000000000000000000000000000000000000000..c6797ca2bd9d67dd6a7dbbf2bcff59f3fa8a7e1f GIT binary patch literal 540 zcmV+%0^|LOP)|prBwUp$NJ-b{6C2UW86{$}Xf^itU=kwfGOX=nAddJGt0weS$1tgP1DwzP?Dr30My)sh^VgX`lDBfwdktVs*{OU ztK}Mbxm>OhQIj!7*=!b5sT5e21*6djhQlGv=W`1Y3!L+JFAzHeNRng#z-2C%gG3^+ zqG3Y}1_MCEXU_SpF95ff?MTPtF@(cm$mjF6(8@L2&I^1R{V%6CxtT<8h2eqhLoqnM}YmO(G(HO(+7e z*9D*9y{_x3mvihrd%N7ih=}O=TkHi9pSs=di&t@901FY3Z-`*_&cL4m5X~8ZXFyfe zt#ih~05;V+lgT(so92wb0g}n21F&h%I2gdDzo%% Date: Thu, 29 Apr 2021 16:48:02 +0200 Subject: [PATCH 018/708] Upversion to 0.79.0 Signed-off-by: Fred Bricon --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index a6c9ade72..a82b3d419 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.78.0", + "version": "0.79.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index a28c0d182..da9326139 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.78.0", + "version": "0.79.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 6f1827d6ce3a843b43e8bc43bfa7b0e1b65f82eb Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 29 Apr 2021 16:55:33 +0200 Subject: [PATCH 019/708] Update minimum vscode engine requirement to 1.53.2 Signed-off-by: Fred Bricon --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index da9326139..483130a90 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "preview": true, "enableProposedApi": false, "engines": { - "vscode": "^1.50.0" + "vscode": "^1.53.2" }, "repository": { "type": "git", @@ -1062,7 +1062,7 @@ "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", - "@types/vscode": "^1.50.0", + "@types/vscode": "^1.53.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "gulp": "^4.0.2", From 8b0d36150eccac72af76d3c05fcdf8fef6cb4e80 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 29 Apr 2021 16:48:22 +0200 Subject: [PATCH 020/708] Revert "Change icons to eclipse ones for temporary use" This reverts commit deef715ebaef57c548e6be22e0ef1820c36eb16d. --- icons/dark/subtypehierarchy.png | Bin 651 -> 0 bytes icons/dark/supertypehierarchy.png | Bin 686 -> 0 bytes icons/dark/typehierarchy.png | Bin 544 -> 0 bytes icons/light/subtypehierarchy.png | Bin 645 -> 0 bytes icons/light/supertypehierarchy.png | Bin 677 -> 0 bytes icons/light/typehierarchy.png | Bin 540 -> 0 bytes package.json | 15 +++------------ 7 files changed, 3 insertions(+), 12 deletions(-) delete mode 100644 icons/dark/subtypehierarchy.png delete mode 100644 icons/dark/supertypehierarchy.png delete mode 100644 icons/dark/typehierarchy.png delete mode 100644 icons/light/subtypehierarchy.png delete mode 100644 icons/light/supertypehierarchy.png delete mode 100644 icons/light/typehierarchy.png diff --git a/icons/dark/subtypehierarchy.png b/icons/dark/subtypehierarchy.png deleted file mode 100644 index fe1ceeeccc9aeada43005df2b422cdcd197bab35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 651 zcmV;60(AX}P)j1l6 zvHur9Q55cORaI}j-v_I}KMz1D{R!aVN}ye*)9FX%+Sb@~S^-KaZ{g~YWtnTc4zMZ| zi^cd-GMVJFrfGb>Gk{<)$OW_6ET0>V2A^}e++ixP`YljZ)v^VOqSynld%ZU8Q&n}% zgaED;MY$UjZcEgyCUjbXqXRh3fnu@9O;oK`_ln}3bD&Ttd<5|7w$d@iKG$ls+|50U zRyodra=Cmm8jZdHIJbgej9u!w{;b(->UIG3%7J`7e_z-2D?&(U1>%P&il_B@{ns{g zEuQb41DQ8$4HW- lmyEF!P18Q@a&o(S{{k!KO)wpQu-X6s002ovPDHLkV1oC6C^i59 diff --git a/icons/dark/supertypehierarchy.png b/icons/dark/supertypehierarchy.png deleted file mode 100644 index 4247b932ad414b69aa935e979c2525522145463f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmV;f0#W^mP)W zh8EhbZm%E+E>ff-2>Ld8Xoo^7w+ zwOZW^Rw|Xu4b|&)$2?n5Q517Qu~;-4HX04{JsORU0w|ZuX1!Xi<_$oWWyd2BMRB7* zrBX5T+!S!jvr);id;$=hV!cxL_07A%j060&l(~wG~HUt<92GH$xjaZvf`q=Rok(+6@zh<}dr_(7g z#vq%`nmb>AjCi}As=7>3_7(ZQ`!oJ1-P(#b^}wEsiox^$4%KVaz4t%b%vkikX76Z{VaJ9g4eQgrAh zLP3hN-jy6xYLl4MG?tcTIY{pAeeV0dy!R3O@I!uBA8P={*b9KePe8Af(t{u&KLQ9l zAxdeWQL+G(N+rqB?RMq3Hvq#hWCSXeiWF`%8gi^wtNV$7uIsib&@{~!pj)i@dUIXZZHrLTG)oauN(}%P4nmiVv0JYYmebX0H5rL|y>5GQ zN~tMqsH!UR`8-Ld(^xK-7>~yo3 z{l59G$rwBH1z@+>Jn3{gMI;hIu~-BloBTou^m;vW=@Vn@I4}TJRguYLEc=@P!{N{$ zfEzWXRHh&vk0Tn5ZcLxg=a|iA{!-upKo(&r6cULTzlEaoU^mbt&9l3iCK)C^E*XR^j52N=T+Pnz)Hl;H{4)$j=--0aO*Py zj{swAYoGCL08Y8iX0!5>Q=btyKq{4z08V|zw*ffao^E}{J^;4%8G!@*`@p{s{CyvA itMb5ozyrWmA9w?z>ku$C7LZT?0000SMs$0 diff --git a/icons/light/subtypehierarchy.png b/icons/light/subtypehierarchy.png deleted file mode 100644 index 158ebddc57c2683597618f7789575cf07f586288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 645 zcmV;00($+4P)%jJ3p z055gOABgx#mgOrap$!3eo_~*sA^^Cz#SrnMEXyC9g4hAjcYcM4?pQ1ap->1A5r)Gd z^!t5SE|>K8Yp0yp0Z1m3-vQtv5{W=K9NyUIXf%ReuSc(`tyb%m6D}A5{04w0@pv5E z?#&7iLZH*>Fh>G`fT4c1TD8>JdjaU~snGhM0E5Bc=m4w)UauEC9?u5Ad_ITSY-U)3 zTrNlG4ciW^H=*C}2cOT!Ag0qPjK^cpG|jLH9Rr|Z`Y|jU6?xw=bQFLJTMZ(|0jwUe z{}&*i&$I5XR4VtL@1r^J&jW~}_!9s&Vv`VZTPzlzQD+avrdco6Tm|tT(}8hG9I~E&2xlE>u;W+=qw+faAEN zrfD~b_|#GH??fVTF>)tZ^4Wv)Q~w#K(?_cRbHO3}RS85aOfJsE>#*_rzb*H2p#l zgf02s1<-1>46lhi&j(VA@K$$h{tu~o>?3Iy!~kpqO) z2aZ-C>^^WbK-hiY6o63sz|jC@)_CXuyUM>KV!Ti&KsK8NilSh#SipEZhV6C>P19hr*@UwN`v5ExlCPmm zCIjho+Ejupyjrb5*Y$8rc*rZeWBAc41`$6=lGOO`W9VnrppEDs3pq_N3UjnH00000 LNkvXXu0mjfD+w*o diff --git a/icons/light/typehierarchy.png b/icons/light/typehierarchy.png deleted file mode 100644 index c6797ca2bd9d67dd6a7dbbf2bcff59f3fa8a7e1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 540 zcmV+%0^|LOP)|prBwUp$NJ-b{6C2UW86{$}Xf^itU=kwfGOX=nAddJGt0weS$1tgP1DwzP?Dr30My)sh^VgX`lDBfwdktVs*{OU ztK}Mbxm>OhQIj!7*=!b5sT5e21*6djhQlGv=W`1Y3!L+JFAzHeNRng#z-2C%gG3^+ zqG3Y}1_MCEXU_SpF95ff?MTPtF@(cm$mjF6(8@L2&I^1R{V%6CxtT<8h2eqhLoqnM}YmO(G(HO(+7e z*9D*9y{_x3mvihrd%N7ih=}O=TkHi9pSs=di&t@901FY3Z-`*_&cL4m5X~8ZXFyfe zt#ih~05;V+lgT(so92wb0g}n21F&h%I2gdDzo%% Date: Thu, 29 Apr 2021 17:00:39 +0200 Subject: [PATCH 021/708] Update changelog for 0.79.0 release Signed-off-by: Fred Bricon --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a6aacce9c..75a33560d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 0.79.0 (April 29th, 2021) +* enhancement - Update language client to 7.0.0 to adopt LSP 3.16 features (enables lazy code action resolution). See [#1894](https://github.com/redhat-developer/vscode-java/pull/1894). + ## 0.78.0 (April 29th, 2021) * enhancement - Add Java 16 Support. See [#1891](https://github.com/redhat-developer/vscode-java/pull/1891). * enhancement - java.project.referencedLibraries should resolve paths leading with ~. See [JLS#1735](https://github.com/eclipse/eclipse.jdt.ls/issues/1735). From 9f32875a67352487f5c414bb7fef04c9b00af89d Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 23 Apr 2021 15:42:44 +0800 Subject: [PATCH 022/708] Update language client to 7.0.0 to adopt LSP 3.16 features Signed-off-by: Jinbo Wang --- package-lock.json | 61 ++++++++++++------- package.json | 4 +- src/documentSymbols.ts | 2 +- src/extension.ts | 3 +- src/fileEventHandler.ts | 2 +- src/goToDefinition.ts | 4 +- src/hoverAction.ts | 3 +- src/javaServerStarter.ts | 2 +- src/pasteAction.ts | 3 +- src/protocol.ts | 58 +++++++++--------- src/providerDispatcher.ts | 3 +- src/refactorAction.ts | 3 +- src/settings.ts | 1 - src/sourceAction.ts | 3 +- src/standardLanguageClient.ts | 3 +- src/syntaxLanguageClient.ts | 3 +- src/typeHierarchy/model.ts | 2 +- src/typeHierarchy/typeHierarchyTree.ts | 3 +- src/typeHierarchy/util.ts | 2 +- test/lightweight-mode-suite/publicApi.test.ts | 3 +- test/standard-mode-suite/publicApi.test.ts | 5 +- 21 files changed, 100 insertions(+), 73 deletions(-) diff --git a/package-lock.json b/package-lock.json index a82b3d419..b5aa26d38 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4147,6 +4147,14 @@ } } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -6467,9 +6475,9 @@ "dev": true }, "typescript": { - "version": "3.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", - "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, "typescript-tslint-plugin": { @@ -6731,18 +6739,22 @@ "dev": true }, "vscode-languageclient": { - "version": "6.0.0-next.9", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.0.0-next.9.tgz", - "integrity": "sha512-NEpeeFM9FKrrRqlBHXGfwpkhtnjruDz3zfFBP+Cymr10qigAEtE/JsODJsIG/ErGqjh3/JXxu8SUOVTGu5oK+w==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", + "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", "requires": { - "semver": "^6.3.0", - "vscode-languageserver-protocol": "^3.15.0-next.14" + "minimatch": "^3.0.4", + "semver": "^7.3.4", + "vscode-languageserver-protocol": "3.16.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -6775,25 +6787,25 @@ } }, "vscode-languageserver-protocol": { - "version": "3.15.0-next.14", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.15.0-next.14.tgz", - "integrity": "sha512-xUwwno6Q6RFd2Z2EWV9D3dQlsKPnHyiZMNWq+EC7JJdp2WH1gRlD+KPX4UGRCnJK0WI5omqHV313IESPwRY5xA==", + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", + "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", "requires": { - "vscode-jsonrpc": "^5.0.0-next.5", - "vscode-languageserver-types": "^3.15.0-next.9" + "vscode-jsonrpc": "6.0.0", + "vscode-languageserver-types": "3.16.0" }, "dependencies": { "vscode-jsonrpc": { - "version": "5.0.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-5.0.0-next.5.tgz", - "integrity": "sha512-k9akfglxWgr0dtLNscq2uBq48XJwnhf4EaDxn05KQowRwR0DkNML0zeYqFRLtXZe6x5vpL5ppyu4o6GqL+23YQ==" + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", + "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" } } }, "vscode-languageserver-types": { - "version": "3.15.0-next.9", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.15.0-next.9.tgz", - "integrity": "sha512-Rl/8qJ6932nrHCdPn+9y0x08uLVQaSLRG+U4JzhyKpWU4eJbVaDRoAcz1Llj7CErJGbPr6kdBvShPy5fRfR+Uw==" + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "vscode-test": { "version": "1.4.0", @@ -7130,6 +7142,11 @@ "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "yargs": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", diff --git a/package.json b/package.json index 91e7e4ec2..8307df42e 100644 --- a/package.json +++ b/package.json @@ -1065,7 +1065,7 @@ "mocha": "^8.1.1", "ts-loader": "^5.3.1", "tslint": "^5.11.0", - "typescript": "^3.7.3", + "typescript": "^4.2.4", "typescript-tslint-plugin": "^0.3.1", "vscode-test": "^1.4.0", "webpack": "^5.28.0", @@ -1077,7 +1077,7 @@ "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "vscode-languageclient": "6.0.0-next.9", + "vscode-languageclient": "7.0.0", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/documentSymbols.ts b/src/documentSymbols.ts index 1719bf743..be6e3c4c3 100644 --- a/src/documentSymbols.ts +++ b/src/documentSymbols.ts @@ -5,9 +5,9 @@ import { DocumentSymbol, DocumentSymbolParams, DocumentSymbolRequest, - LanguageClient, SymbolInformation } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; import { getActiveLanguageClient } from "./extension"; type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null; diff --git a/src/extension.ts b/src/extension.ts index 7a0d08b62..94e79fbc7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,8 @@ import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, Selection, Position, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind } from 'vscode'; -import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClient, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient'; +import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions } from './plugin'; import { prepareExecutable } from './javaServerStarter'; import * as requirements from './requirements'; diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 948786dd0..fca00b2f3 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -3,7 +3,7 @@ import { lstatSync } from 'fs-extra'; import * as path from 'path'; import { workspace, FileCreateEvent, ExtensionContext, window, TextDocument, SnippetString, commands, Uri, FileRenameEvent, ProgressLocation, WorkspaceEdit as CodeWorkspaceEdit, FileWillRenameEvent, Position, FileType, ConfigurationTarget, Disposable } from 'vscode'; -import { LanguageClient, WorkspaceEdit as LsWorkspaceEdit } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; import { ListCommandResult } from './buildpath'; import { Commands } from './commands'; import { WillRenameFiles } from './protocol'; diff --git a/src/goToDefinition.ts b/src/goToDefinition.ts index 3cb53c369..03f5920df 100644 --- a/src/goToDefinition.ts +++ b/src/goToDefinition.ts @@ -5,9 +5,9 @@ import { Location, LocationLink, DefinitionParams, - DefinitionRequest, - LanguageClient, + DefinitionRequest } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; import { getActiveLanguageClient } from './extension'; type GoToDefinitionResponse = Location | Location[] | LocationLink[] | null; diff --git a/src/hoverAction.ts b/src/hoverAction.ts index 9e0a9ba89..6cfca3c42 100644 --- a/src/hoverAction.ts +++ b/src/hoverAction.ts @@ -1,7 +1,8 @@ 'use strict'; import { HoverProvider, CancellationToken, Hover, Position, TextDocument, MarkdownString, MarkedString, Command } from "vscode"; -import { LanguageClient, TextDocumentPositionParams, HoverRequest } from "vscode-languageclient"; +import { TextDocumentPositionParams, HoverRequest } from "vscode-languageclient"; +import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from "./commands"; import { FindLinks } from "./protocol"; import { provideHoverCommandFn } from "./extension.api"; diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 9f22549d1..0f1d3976b 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -4,7 +4,7 @@ import * as net from 'net'; import * as glob from 'glob'; import * as os from 'os'; import * as fs from 'fs'; -import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient'; +import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient/node'; import { RequirementsData } from './requirements'; import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag } from './settings'; import { logger } from './log'; diff --git a/src/pasteAction.ts b/src/pasteAction.ts index a7970091e..c500f0f3e 100644 --- a/src/pasteAction.ts +++ b/src/pasteAction.ts @@ -1,7 +1,8 @@ 'use strict'; import { commands, env, ExtensionContext, Range, TextEditor, window } from 'vscode'; -import { LanguageClient } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; + import { Commands } from './commands'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { diff --git a/src/protocol.ts b/src/protocol.ts index 4ddd13270..54e439f28 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -95,39 +95,39 @@ export interface EventNotification { } export namespace StatusNotification { - export const type = new NotificationType('language/status'); + export const type = new NotificationType('language/status'); } export namespace ProgressReportNotification { - export const type = new NotificationType('language/progressReport'); + export const type = new NotificationType('language/progressReport'); } export namespace ClassFileContentsRequest { - export const type = new RequestType ('java/classFileContents'); + export const type = new RequestType ('java/classFileContents'); } export namespace ProjectConfigurationUpdateRequest { - export const type = new NotificationType ('java/projectConfigurationUpdate'); + export const type = new NotificationType ('java/projectConfigurationUpdate'); } export namespace ActionableNotification { - export const type = new NotificationType('language/actionableNotification'); + export const type = new NotificationType('language/actionableNotification'); } export namespace EventNotification { - export const type = new NotificationType('language/eventNotification'); + export const type = new NotificationType('language/eventNotification'); } export namespace CompileWorkspaceRequest { - export const type = new RequestType('java/buildWorkspace'); + export const type = new RequestType('java/buildWorkspace'); } export namespace ExecuteClientCommandRequest { - export const type = new RequestType('workspace/executeClientCommand'); + export const type = new RequestType('workspace/executeClientCommand'); } export namespace ServerNotification { - export const type = new NotificationType('workspace/notify'); + export const type = new NotificationType('workspace/notify'); } export interface SourceAttachmentRequest { @@ -162,7 +162,7 @@ export interface OverridableMethodsResponse { } export namespace ListOverridableMethodsRequest { - export const type = new RequestType('java/listOverridableMethods'); + export const type = new RequestType('java/listOverridableMethods'); } export interface AddOverridableMethodParams { @@ -171,7 +171,7 @@ export interface AddOverridableMethodParams { } export namespace AddOverridableMethodsRequest { - export const type = new RequestType('java/addOverridableMethods'); + export const type = new RequestType('java/addOverridableMethods'); } export interface VariableBinding { @@ -188,7 +188,7 @@ export interface CheckHashCodeEqualsResponse { } export namespace CheckHashCodeEqualsStatusRequest { - export const type = new RequestType('java/checkHashCodeEqualsStatus'); + export const type = new RequestType('java/checkHashCodeEqualsStatus'); } export interface GenerateHashCodeEqualsParams { @@ -198,11 +198,11 @@ export interface GenerateHashCodeEqualsParams { } export namespace GenerateHashCodeEqualsRequest { - export const type = new RequestType('java/generateHashCodeEquals'); + export const type = new RequestType('java/generateHashCodeEquals'); } export namespace OrganizeImportsRequest { - export const type = new RequestType('java/organizeImports'); + export const type = new RequestType('java/organizeImports'); } export interface ImportCandidate { @@ -222,7 +222,7 @@ export interface CheckToStringResponse { } export namespace CheckToStringStatusRequest { - export const type = new RequestType('java/checkToStringStatus'); + export const type = new RequestType('java/checkToStringStatus'); } export interface GenerateToStringParams { @@ -231,7 +231,7 @@ export interface GenerateToStringParams { } export namespace GenerateToStringRequest { - export const type = new RequestType('java/generateToString'); + export const type = new RequestType('java/generateToString'); } export interface AccessorField { @@ -242,7 +242,7 @@ export interface AccessorField { } export namespace ResolveUnimplementedAccessorsRequest { - export const type = new RequestType('java/resolveUnimplementedAccessors'); + export const type = new RequestType('java/resolveUnimplementedAccessors'); } export interface GenerateAccessorsParams { @@ -251,7 +251,7 @@ export interface GenerateAccessorsParams { } export namespace GenerateAccessorsRequest { - export const type = new RequestType('java/generateAccessors'); + export const type = new RequestType('java/generateAccessors'); } export interface MethodBinding { @@ -266,7 +266,7 @@ export interface CheckConstructorsResponse { } export namespace CheckConstructorStatusRequest { - export const type = new RequestType('java/checkConstructorsStatus'); + export const type = new RequestType('java/checkConstructorsStatus'); } export interface GenerateConstructorsParams { @@ -276,7 +276,7 @@ export interface GenerateConstructorsParams { } export namespace GenerateConstructorsRequest { - export const type = new RequestType('java/generateConstructors'); + export const type = new RequestType('java/generateConstructors'); } export interface DelegateField { @@ -289,7 +289,7 @@ export interface CheckDelegateMethodsResponse { } export namespace CheckDelegateMethodsStatusRequest { - export const type = new RequestType('java/checkDelegateMethodsStatus'); + export const type = new RequestType('java/checkDelegateMethodsStatus'); } export interface DelegateEntry { @@ -303,7 +303,7 @@ export interface GenerateDelegateMethodsParams { } export namespace GenerateDelegateMethodsRequest { - export const type = new RequestType('java/generateDelegateMethods'); + export const type = new RequestType('java/generateDelegateMethods'); } export interface RenamePosition { @@ -326,7 +326,7 @@ export interface GetRefactorEditParams { } export namespace GetRefactorEditRequest { - export const type = new RequestType('java/getRefactorEdit'); + export const type = new RequestType('java/getRefactorEdit'); } export interface SelectionInfo { @@ -342,7 +342,7 @@ export interface InferSelectionParams { } export namespace InferSelectionRequest { - export const type = new RequestType('java/inferSelection'); + export const type = new RequestType('java/inferSelection'); } export interface PackageNode { @@ -368,11 +368,11 @@ export interface MoveDestinationsResponse { } export namespace GetMoveDestinationsRequest { - export const type = new RequestType('java/getMoveDestinations'); + export const type = new RequestType('java/getMoveDestinations'); } export namespace MoveRequest { - export const type = new RequestType('java/move'); + export const type = new RequestType('java/move'); } export interface SearchSymbolParams extends WorkspaceSymbolParams { @@ -382,7 +382,7 @@ export interface SearchSymbolParams extends WorkspaceSymbolParams { } export namespace SearchSymbols { - export const type = new RequestType('java/searchSymbols'); + export const type = new RequestType('java/searchSymbols'); } export interface FindLinksParams { @@ -396,7 +396,7 @@ export interface LinkLocation extends Location { } export namespace FindLinks { - export const type = new RequestType('java/findLinks'); + export const type = new RequestType('java/findLinks'); } export interface RenameFilesParams { @@ -404,5 +404,5 @@ export interface RenameFilesParams { } export namespace WillRenameFiles { - export const type = new RequestType('workspace/willRenameFiles'); + export const type = new RequestType('workspace/willRenameFiles'); } diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 06b89bdf8..740b00acb 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -1,6 +1,7 @@ 'use strict'; -import { LanguageClient, DocumentSymbolRequest, SymbolInformation as clientSymbolInformation, DocumentSymbol as clientDocumentSymbol, HoverRequest } from "vscode-languageclient"; +import { DocumentSymbolRequest, SymbolInformation as clientSymbolInformation, DocumentSymbol as clientDocumentSymbol, HoverRequest } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; import { ExtensionContext, languages, DocumentSymbolProvider, TextDocument, CancellationToken, SymbolInformation, DocumentSymbol, TextDocumentContentProvider, workspace, Uri, Event, HoverProvider, Position, Hover } from "vscode"; import { ClassFileContentsRequest } from "./protocol"; import { createClientHoverProvider } from "./hoverAction"; diff --git a/src/refactorAction.ts b/src/refactorAction.ts index 90c40ba5b..69c4f47c2 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -3,7 +3,8 @@ import { existsSync } from 'fs'; import * as path from 'path'; import { commands, ExtensionContext, Position, QuickPickItem, TextDocument, Uri, window, workspace } from 'vscode'; -import { FormattingOptions, LanguageClient, WorkspaceEdit, CreateFile, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; +import { FormattingOptions, WorkspaceEdit, CreateFile, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest } from './protocol'; diff --git a/src/settings.ts b/src/settings.ts index 05cc290ca..c3351324b 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,7 +2,6 @@ import * as path from 'path'; import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable } from 'vscode'; -import { LanguageClient } from 'vscode-languageclient'; import { Commands } from './commands'; import { getJavaConfiguration } from './utils'; diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 62580e3fe..f8dcf1d72 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -1,7 +1,8 @@ 'use strict'; import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable } from 'vscode'; -import { CodeActionParams, LanguageClient } from 'vscode-languageclient'; +import { CodeActionParams } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; import { Commands } from './commands'; import { applyWorkspaceEdit } from './extension'; import { ListOverridableMethodsRequest, AddOverridableMethodsRequest, CheckHashCodeEqualsStatusRequest, GenerateHashCodeEqualsRequest, diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index c755df3b0..81003303e 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -5,7 +5,8 @@ import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; import { getJavaConfig, applyWorkspaceEdit } from "./extension"; -import { StreamInfo, LanguageClient, LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; +import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; +import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index a062b6b4a..354a8726f 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -1,7 +1,8 @@ 'use strict'; import * as net from "net"; -import { LanguageClientOptions, StreamInfo, LanguageClient, ServerOptions, DidChangeConfigurationNotification } from "vscode-languageclient"; +import { LanguageClientOptions, DidChangeConfigurationNotification } from "vscode-languageclient"; +import { LanguageClient, StreamInfo, ServerOptions } from "vscode-languageclient/node"; import { OutputInfoCollector, ClientErrorHandler, getJavaConfig } from "./extension"; import { logger } from "./log"; import { ServerMode } from "./settings"; diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index 1b8a86db3..f200751ca 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -2,7 +2,7 @@ import * as vscode from "vscode"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./protocol"; import { SymbolItemNavigation, SymbolTreeInput, SymbolTreeModel } from "./references-view"; import { getActiveLanguageClient } from "../extension"; -import { LanguageClient } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; import { getRootItem, resolveTypeHierarchy, typeHierarchyDirectionToContextString } from "./util"; import { CancellationToken, commands, workspace } from "vscode"; diff --git a/src/typeHierarchy/typeHierarchyTree.ts b/src/typeHierarchy/typeHierarchyTree.ts index d250f9b78..5e1e252ee 100644 --- a/src/typeHierarchy/typeHierarchyTree.ts +++ b/src/typeHierarchy/typeHierarchyTree.ts @@ -1,5 +1,6 @@ import * as vscode from "vscode"; -import { LanguageClient, Position, TextDocumentIdentifier, TextDocumentPositionParams } from "vscode-languageclient"; +import { Position, TextDocumentIdentifier, TextDocumentPositionParams } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; import { Commands } from "../commands"; import { getActiveLanguageClient } from "../extension"; import { showNoLocationFound } from "../standardLanguageClient"; diff --git a/src/typeHierarchy/util.ts b/src/typeHierarchy/util.ts index 921cf693e..67135ad4d 100644 --- a/src/typeHierarchy/util.ts +++ b/src/typeHierarchy/util.ts @@ -1,5 +1,5 @@ import { CancellationToken, commands, SymbolKind } from "vscode"; -import { LanguageClient } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; import { Commands } from "../commands"; import { LSPTypeHierarchyItem, TypeHierarchyDirection, TypeHierarchyItem } from "./protocol"; diff --git a/test/lightweight-mode-suite/publicApi.test.ts b/test/lightweight-mode-suite/publicApi.test.ts index e3ebcda4c..e8f852790 100644 --- a/test/lightweight-mode-suite/publicApi.test.ts +++ b/test/lightweight-mode-suite/publicApi.test.ts @@ -54,6 +54,7 @@ suite('Public APIs - LightWeight', () => { continue; } symbolDetected = true; + // @ts-ignore assert.equal((symbol as DocumentSymbol).children.length, 4); } if (!symbolDetected) { @@ -129,7 +130,7 @@ suite('Public APIs - LightWeight', () => { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; let onDidChangeServerModeCount: number = 0; - await new Promise(async (resolve) => { + await new Promise(async (resolve) => { api.onDidServerModeChange((mode) => { onDidChangeServerModeCount++; diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index 9f6c0ff27..8f1f4b79f 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -58,6 +58,7 @@ suite('Public APIs - Standard', () => { continue; } symbolDetected = true; + // @ts-ignore assert.equal((symbol as DocumentSymbol).children.length, 4); } if (!symbolDetected) { @@ -99,7 +100,7 @@ suite('Public APIs - Standard', () => { const pomContent: string = await fse.readFile(pomPath, 'utf-8'); const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - await new Promise(async (resolve) => { + await new Promise(async (resolve) => { api.onDidClasspathUpdate((uri) => { assert.equal(path.relative(uri.fsPath, constants.projectFsPath), ''); return resolve(); @@ -149,7 +150,7 @@ suite('Public APIs - Standard', () => { await fse.ensureDir(gradleTestFolder); await fse.createFile(path.join(gradleTestFolder, 'build.gradle')); - await new Promise(async (resolve) => { + await new Promise(async (resolve) => { api.onDidProjectsImport(() => { return resolve(); }); From 6236a56ee5490a0a3f574f3fbcd0edff890e9849 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 30 Apr 2021 09:36:43 -0400 Subject: [PATCH 023/708] Upversion to 0.80.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5aa26d38..4701fa7da 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.79.0", + "version": "0.80.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8307df42e..e41a3b174 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.79.0", + "version": "0.80.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 5e56cd69c2c394e7e0f48a4ccb0dedfc87319e64 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 3 May 2021 15:43:22 -0400 Subject: [PATCH 024/708] Change to 0.79.1 for service release. - Add Changelog Signed-off-by: Roland Grunberg --- CHANGELOG.md | 3 +++ README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75a33560d..105d19189 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 0.79.1 (May 3rd, 2021) +* bug fix - Formatter doesn't load format config after update. See [#1917](https://github.com/redhat-developer/vscode-java/issues/1917). + ## 0.79.0 (April 29th, 2021) * enhancement - Update language client to 7.0.0 to adopt LSP 3.16 features (enables lazy code action resolution). See [#1894](https://github.com/redhat-developer/vscode-java/pull/1894). diff --git a/README.md b/README.md index 98becf73c..0334d13d1 100644 --- a/README.md +++ b/README.md @@ -189,8 +189,6 @@ The following settings are supported: - `beforeCursor`: Insert the generated code before the member where the cursor is located. - `lastMember`: Insert the generated code as the last member of the target type. * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) - -New in 0.78.0: * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 4701fa7da..15d45a1b2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.80.0", + "version": "0.79.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e41a3b174..004b6e7e7 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.80.0", + "version": "0.79.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 43630da66e9ae6fa33aff31fc158d18ad8e596fd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 4 May 2021 13:28:23 -0400 Subject: [PATCH 025/708] Upversion to 0.79.2 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 15d45a1b2..ac9436d17 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.79.1", + "version": "0.79.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 004b6e7e7..8f6c0659c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.79.1", + "version": "0.79.2", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 206b82a8c0ceb2d601574aae748454359271dbaa Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 6 May 2021 18:46:56 -0400 Subject: [PATCH 026/708] Update lodash dependency. Signed-off-by: Roland Grunberg --- package-lock.json | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index ac9436d17..91611da91 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3955,9 +3955,9 @@ } }, "lodash": { - "version": "4.17.19", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz", - "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash._basecopy": { "version": "3.0.1", @@ -4732,14 +4732,6 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } } } From 8e00ed347ade84d8c4459047f44f2660ae1bae36 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 10 May 2021 13:22:01 -0400 Subject: [PATCH 027/708] Update hosted-git-info dependency - https://npmjs.com/advisories/1677 Signed-off-by: Roland Grunberg --- package-lock.json | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91611da91..2568c5107 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3285,9 +3285,9 @@ } }, "hosted-git-info": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", - "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==", + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "http-proxy-agent": { @@ -4732,6 +4732,14 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } } } From 67eae26e39896ff36165450f3fff9a8081f37462 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 17 May 2021 20:07:47 -0400 Subject: [PATCH 028/708] Add Changelog for 0.79.2 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 105d19189..98d0db67d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 0.79.2 (May 19th, 2021) + * bug fix - Package name not recognized when opening standalone java files. See [JLS#1764](https://github.com/eclipse/eclipse.jdt.ls/issues/1764). + * bug fix - Force Java Compilation returns error. See [#1929](https://github.com/redhat-developer/vscode-java/issues/1929). + * bug fix - Invalid formatter profile name setting causes errors. See [JLS#1761](https://github.com/eclipse/eclipse.jdt.ls/issues/1761). + * bug fix - Formatter doesn't load format config after update. See [#1917](https://github.com/redhat-developer/vscode-java/issues/1917). + * bug fix - Improve handling of exported settings files. See [#1939](https://github.com/redhat-developer/vscode-java/issues/1939). + * bug fix - A 'keyword' semantic token will sometimes appear when typing an expression. See [#1921](https://github.com/redhat-developer/vscode-java/issues/1921). + * other - Update hosted-git-info dependency. See [#1940](https://github.com/redhat-developer/vscode-java/pull/1940). + * other - Update lodash dependency.. See [#1934](https://github.com/redhat-developer/vscode-java/pull/1934). + ## 0.79.1 (May 3rd, 2021) * bug fix - Formatter doesn't load format config after update. See [#1917](https://github.com/redhat-developer/vscode-java/issues/1917). From 4b391f9afb918852bf0202bd63f67b13ba8c72b8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 20 May 2021 00:06:53 -0400 Subject: [PATCH 029/708] Upversion back to 0.80.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2568c5107..43c39cb1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.79.2", + "version": "0.80.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8f6c0659c..e41a3b174 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.79.2", + "version": "0.80.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 5e481eece05ad75d763c42871bfc600fe387af7a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 May 2021 16:41:16 -0400 Subject: [PATCH 030/708] Bump browserslist from 4.16.4 to 4.16.6 - Use npm audit fix Signed-off-by: Roland Grunberg --- package-lock.json | 36 ++++++++++++++---------------------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/package-lock.json b/package-lock.json index 43c39cb1c..1783297bd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -794,14 +794,14 @@ "dev": true }, "browserslist": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.4.tgz", - "integrity": "sha512-d7rCxYV8I9kj41RH8UKYnvDYCRENUlHRgyXy/Rhr/1BaeLGfiCptEdFE8MIrvGfWbBFNjVYx76SQWvNX1j+/cQ==", + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001208", + "caniuse-lite": "^1.0.30001219", "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.712", + "electron-to-chromium": "^1.3.723", "escalade": "^3.1.1", "node-releases": "^1.1.71" } @@ -886,9 +886,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001214", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001214.tgz", - "integrity": "sha512-O2/SCpuaU3eASWVaesQirZv1MSjUNOvmugaD8zNSJqw6Vv5SGwoOpA9LJs3pNPfM745nxqPvfZY3MQKY4AKHYg==", + "version": "1.0.30001230", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", + "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", "dev": true }, "caseless": { @@ -1511,9 +1511,9 @@ } }, "electron-to-chromium": { - "version": "1.3.717", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.717.tgz", - "integrity": "sha512-OfzVPIqD1MkJ7fX+yTl2nKyOE4FReeVfMCzzxQS+Kp43hZYwHwThlGP+EGIZRXJsxCM7dqo8Y65NOX/HP12iXQ==", + "version": "1.3.740", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.740.tgz", + "integrity": "sha512-Mi2m55JrX2BFbNZGKYR+2ItcGnR4O5HhrvgoRRyZQlaMGQULqDhoGkLWHzJoshSzi7k1PUofxcDbNhlFrDZNhg==", "dev": true }, "emoji-regex": { @@ -4732,14 +4732,6 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } } } @@ -4831,9 +4823,9 @@ "dev": true }, "node-releases": { - "version": "1.1.71", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.71.tgz", - "integrity": "sha512-zR6HoT6LrLCRBwukmrVbHv0EpEQjksO6GmFcZQQuCAy139BEsoVKPYnf3jongYW83fAa1torLGYwxxky/p28sg==", + "version": "1.1.72", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", + "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", "dev": true }, "normalize-package-data": { From 9e208a272e5dfb922b067560c24b604d7b737d33 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 May 2021 16:27:54 -0400 Subject: [PATCH 031/708] Introduce syntaxServerExitsOnShutdown as an extended capability. - Fixes #1928 - In languageclient 7.x, the client fails to send the necessary exit() once a shutdown() response is received from the language server - When client defines syntaxServerExitsOnShutdown as true, the language server will exit immediately after the shutdown request Signed-off-by: Roland Grunberg --- src/extension.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 94e79fbc7..381d05712 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -185,7 +185,8 @@ export function activate(context: ExtensionContext): Promise { gradleChecksumWrapperPromptSupport: true, resolveAdditionalTextEditsSupport: true, advancedIntroduceParameterRefactoringSupport: true, - actionableRuntimeNotificationSupport: true + actionableRuntimeNotificationSupport: true, + syntaxServerExitsOnShutdown: true }, triggerFiles, }, From 6fb91c3954d75657a64d0967c08ea5c5d47b28c3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 15 Jun 2021 21:56:01 -0400 Subject: [PATCH 032/708] Adjust .vscodeignore filters due to vsce@1.92 update. Signed-off-by: Roland Grunberg --- .vscodeignore | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.vscodeignore b/.vscodeignore index 747f4951d..b06821d22 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -12,9 +12,8 @@ vsc-extension-quickstart.md undefined/** CONTRIBUTING.md .vscode-test/** -**/**.vsix -**/**.tar.gz -dist/**/*.map +**/*.vsix +**/*.tar.gz webpack.*.json node_modules .editorconfig From d058e4e8a59f76bfaf6c99deebd1ab0d0032b869 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Fri, 18 Jun 2021 14:42:07 +0800 Subject: [PATCH 033/708] launch lightweight LS in untrusted workspaces (#1975) Signed-off-by: Yan Zhang --- package-lock.json | 22 +++++++++++++++------- package.json | 9 +++++++++ src/apiManager.ts | 6 +++--- src/extension.ts | 27 +++++++++++++++++++++++++-- 4 files changed, 52 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1783297bd..f464d890f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1266,7 +1266,7 @@ "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { "file-type": "^5.2.0", @@ -1285,7 +1285,7 @@ "decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { "decompress-tar": "^4.1.0", @@ -1298,7 +1298,7 @@ "file-type": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true } } @@ -1306,7 +1306,7 @@ "decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { "decompress-tar": "^4.1.1", @@ -1472,7 +1472,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -4732,6 +4732,14 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } } } @@ -6049,7 +6057,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -6076,7 +6084,7 @@ "strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { "is-natural-number": "^4.0.1" diff --git a/package.json b/package.json index e41a3b174..dd525e2f8 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,15 @@ "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, "enableProposedApi": false, + "capabilities": { + "untrustedWorkspaces": { + "supported": "limited", + "restrictedConfigurations": [ + "java.home", + "java.jdt.ls.vmargs" + ] + } + }, "engines": { "vscode": "^1.53.2" }, diff --git a/src/apiManager.ts b/src/apiManager.ts index a84cd785a..994ed43f4 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -7,7 +7,7 @@ import { goToDefinitionCommand, goToDefinitionProvider } from "./goToDefinition" import { commands, Uri } from "vscode"; import { Commands } from "./commands"; import { Emitter } from "vscode-languageclient"; -import { ServerMode, getJavaServerMode } from "./settings"; +import { ServerMode } from "./settings"; import { registerHoverCommand } from "./hoverAction"; class ApiManager { @@ -17,7 +17,7 @@ class ApiManager { private onDidServerModeChangeEmitter: Emitter = new Emitter(); private onDidProjectsImportEmitter: Emitter = new Emitter(); - public initialize(requirements: RequirementsData): void { + public initialize(requirements: RequirementsData, serverMode: ServerMode): void { const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider(); const goToDefinition: goToDefinitionCommand = goToDefinitionProvider(); @@ -48,7 +48,7 @@ class ApiManager { getClasspaths, isTestFile, onDidClasspathUpdate, - serverMode: getJavaServerMode(), + serverMode, onDidServerModeChange, onDidProjectsImport, }; diff --git a/src/extension.ts b/src/extension.ts index 381d05712..fdf40ed1c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -146,7 +146,11 @@ export function activate(context: ExtensionContext): Promise { const workspacePath = path.resolve(storagePath + '/jdt_ws'); const syntaxServerWorkspacePath = path.resolve(storagePath + '/ss_ws'); - const serverMode = getJavaServerMode(); + let serverMode = getJavaServerMode(); + const isWorkspaceTrusted = (workspace as any).isTrusted; // TODO: use workspace.isTrusted directly when other clients catch up to adopt 1.56.0 + if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 + serverMode = ServerMode.LIGHTWEIGHT; + } commands.executeCommand('setContext', 'java:serverMode', serverMode); const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; const requireSyntaxServer = (serverMode !== ServerMode.STANDARD) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); @@ -211,7 +215,7 @@ export function activate(context: ExtensionContext): Promise { outputChannelName: extensionName }; - apiManager.initialize(requirements); + apiManager.initialize(requirements, serverMode); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { @@ -274,6 +278,16 @@ export function activate(context: ExtensionContext): Promise { * @param force force to switch server mode without asking */ commands.registerCommand(Commands.SWITCH_SERVER_MODE, async (switchTo: ServerMode, force: boolean = false) => { + const isWorkspaceTrusted = (workspace as any).isTrusted; + if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 + const button = "Manage Workspace Trust"; + const choice = await window.showInformationMessage("For security concern, Java language server cannot be switched to Standard mode in untrusted workspaces.", button); + if (choice === button) { + commands.executeCommand("workbench.action.manageTrust"); + } + return; + } + const clientStatus: ClientStatus = standardClient.getClientStatus(); if (clientStatus === ClientStatus.Starting || clientStatus === ClientStatus.Started) { return; @@ -333,6 +347,15 @@ export function activate(context: ExtensionContext): Promise { if (requireStandardServer) { startStandardServer(context, requirements, clientOptions, workspacePath, resolve); } + + const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; + if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 + context.subscriptions.push(onDidGrantWorkspaceTrust(() => { + if (getJavaServerMode() !== ServerMode.LIGHTWEIGHT) { + commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.STANDARD, true); + } + })); + } }); }); } From 7ac2be5fba4b436e9a49f7b205cbace275bf26f4 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 24 Jun 2021 09:19:36 +0800 Subject: [PATCH 034/708] Provide fix suggestions for not covered Maven plugin execution in project build lifecycle (#1949) * Provide fix suggestions for not covered Maven plugin execution in project build lifecycle Signed-off-by: Jinbo Wang --- document/_java.notCoveredExecution.md | 111 ++++++++++++++++++++++++++ package.json | 11 +++ src/commands.ts | 2 + src/extension.ts | 3 + src/pom/pomCodeActionProvider.ts | 98 +++++++++++++++++++++++ src/standardLanguageClient.ts | 7 ++ 6 files changed, 232 insertions(+) create mode 100644 document/_java.notCoveredExecution.md create mode 100644 src/pom/pomCodeActionProvider.ts diff --git a/document/_java.notCoveredExecution.md b/document/_java.notCoveredExecution.md new file mode 100644 index 000000000..fdfc1c038 --- /dev/null +++ b/document/_java.notCoveredExecution.md @@ -0,0 +1,111 @@ +# Not Covered Maven Plugin Execution + +## Background +Some Maven projects use 3rd party Maven plugins to generate sources or resources, and you may find that the generated code is not picked up by the project classpath, or the Maven goals are not executed by Java extension. This is a known technical issue with `m2e`, the underlying Maven integration tool for Java extension. The reason is that the Maven tooling `m2e` doesn't know if it's safe to run your Maven plugin automatically during a workspace build, so it does not run them by default and requires explicit instructions on how to handle them. Learn more about this issue from the wiki about [Execution Not Covered](https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html). + +## Workaround +- Option 1: The best thing is still to request the Maven plugin authors to provide native integration with m2e. Here is a guideline on [how to make Maven plugins compatible with m2e](https://www.eclipse.org/m2e/documentation/m2e-making-maven-plugins-compat.html). + +- Option 2: Use [build-helper-maven-plugin](http://www.mojohaus.org/build-helper-maven-plugin/usage.html) to explicitly add the unrecognized source folder to classpath. + +```xml + + ... + + + + org.codehaus.mojo + build-helper-maven-plugin + 3.2.0 + + + add-source + generate-sources + + add-source + + + + some directory + ... + + + + + + + + +``` + +- Option 3: Configure a lifecycle mapping metadata in pom.xml that explicitly tells m2e what to do with your plugin. + +For example, add [a processing instruction in the pom.xml](https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata) like `` to execute it on every project configuration udpate. + +You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Update Project"`. + +```xml + + ... + + + + ro.isdc.wro4j + wro4j-maven-plugin + 1.8.0 + + + + generate-resources + + run + + + + + + + +``` + +If you have multiple Maven plugins that need to configure the lifecycle mapping metadata, you can also configure them together in a dedicated `pluginManagement` section. + +```xml + + ... + + + + + + org.eclipse.m2e + lifecycle-mapping + 1.0.0 + + + + + + ro.isdc.wro4j + wro4j-maven-plugin + [1.8.0,) + + run + + + + + true + + + + + + + + + + + +``` diff --git a/package.json b/package.json index dd525e2f8..704b576fa 100644 --- a/package.json +++ b/package.json @@ -318,6 +318,17 @@ "description": "Path to Maven's global settings.xml", "scope": "window" }, + "java.configuration.maven.notCoveredPluginExecutionSeverity": { + "type": "string", + "enum": [ + "ignore", + "warning", + "error" + ], + "default": "warning", + "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", + "scope": "window" + }, "java.format.enabled": { "type": "boolean", "default": true, diff --git a/src/commands.ts b/src/commands.ts index 9448b87f0..8fe8e8988 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -247,5 +247,7 @@ export namespace Commands { export const TEMPLATE_VARIABLES = '_java.templateVariables'; + export const NOT_COVERED_EXECUTION = '_java.notCoveredExecution'; + export const RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open'; } diff --git a/src/extension.ts b/src/extension.ts index fdf40ed1c..3f5bd786d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -119,6 +119,9 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.TEMPLATE_VARIABLES, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.TEMPLATE_VARIABLES}.md`)), 'Predefined Variables', "", context); })); + context.subscriptions.push(commands.registerCommand(Commands.NOT_COVERED_EXECUTION, async () => { + markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.notCoveredExecution.md`)), 'Not Covered Maven Plugin Execution', "", context); + })); let storagePath = context.storagePath; if (!storagePath) { diff --git a/src/pom/pomCodeActionProvider.ts b/src/pom/pomCodeActionProvider.ts new file mode 100644 index 000000000..1ed67893d --- /dev/null +++ b/src/pom/pomCodeActionProvider.ts @@ -0,0 +1,98 @@ +'use strict'; + +import { CodeActionProvider, CodeAction, TextDocument, Range, Selection, CodeActionContext, CancellationToken, ProviderResult, Command, CodeActionKind, Diagnostic, WorkspaceEdit, EndOfLine, ExtensionContext, commands, CodeActionProviderMetadata, workspace, Uri, window, TextEditor } from "vscode"; +import { Commands } from "../commands"; + +export class PomCodeActionProvider implements CodeActionProvider { + constructor(context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand("_java.projectConfiguration.saveAndUpdate", async (uri: Uri) => { + const document: TextDocument = await workspace.openTextDocument(uri); + await document.save(); + commands.executeCommand(Commands.CONFIGURATION_UPDATE, uri); + })); + } + + provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | CodeAction)[]> { + if (context?.diagnostics?.length && context.diagnostics[0].source === "Java") { + return this.collectCodeActionsForNotCoveredExecutions(document, context.diagnostics); + } + + return undefined; + } + + private collectCodeActionsForNotCoveredExecutions(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction[] { + const codeActions: CodeAction[] = []; + for (const diagnostic of diagnostics) { + if (diagnostic.message?.startsWith("Plugin execution not covered by lifecycle configuration")) { + const indentation = this.getNewTextIndentation(document, diagnostic); + const saveAndUpdateConfigCommand: Command = { + title: "Save and update project configuration", + command: "_java.projectConfiguration.saveAndUpdate", + arguments: [ document.uri ], + }; + + const action1 = new CodeAction("Enable this execution in project configuration phase", CodeActionKind.QuickFix.append("pom")); + action1.edit = new WorkspaceEdit(); + action1.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action1.command = saveAndUpdateConfigCommand; + codeActions.push(action1); + + const action2 = new CodeAction("Enable this execution in project build phase", CodeActionKind.QuickFix.append("pom")); + action2.edit = new WorkspaceEdit(); + action2.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action2.command = saveAndUpdateConfigCommand; + codeActions.push(action2); + + const action3 = new CodeAction("Mark this execution as ignored in pom.xml", CodeActionKind.QuickFix.append("pom")); + action3.edit = new WorkspaceEdit(); + action3.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action3.command = saveAndUpdateConfigCommand; + codeActions.push(action3); + } + } + + return codeActions; + } + + private getNewTextIndentation(document: TextDocument, diagnostic: Diagnostic): string { + const textline = document.lineAt(diagnostic.range.end.line); + if (textline.text.lastIndexOf("") > diagnostic.range.end.character) { + return ""; + } + + let tabSize: number = 2; // default value + let insertSpaces: boolean = true; // default value + const activeEditor: TextEditor | undefined = window.activeTextEditor; + if (activeEditor && activeEditor.document.uri.toString() === document.uri.toString()) { + tabSize = Number(activeEditor.options.tabSize); + insertSpaces = Boolean(activeEditor.options.insertSpaces); + } + + const lineSeparator = document.eol === EndOfLine.LF ? "\r" : "\r\n"; + let newIndentation = lineSeparator + textline.text.substring(0, textline.firstNonWhitespaceCharacterIndex); + if (insertSpaces) { + for (let i = 0; i < tabSize; i++) { + newIndentation += ' '; // insert a space char. + } + } else { + newIndentation += ' '; // insert a tab char. + } + + return newIndentation; + } +} + +export const pomCodeActionMetadata: CodeActionProviderMetadata = { + providedCodeActionKinds: [ + CodeActionKind.QuickFix.append("pom") + ], + documentation: [ + { + kind: CodeActionKind.QuickFix.append("pom"), + command: { + title: "Learn more about not covered Maven execution", + command: Commands.NOT_COVERED_EXECUTION + } + } + ], +}; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 81003303e..60dc9efdb 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -30,6 +30,7 @@ import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvide import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { buildFilePatterns } from './plugin'; +import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -410,6 +411,12 @@ export class StandardLanguageClient { const sectionId: string = javaRefactorKinds.get(kind) || ''; markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_REFACTORING}.md`)), 'Java Refactoring', sectionId, context); })); + + languages.registerCodeActionsProvider({ + language: "xml", + scheme: "file", + pattern: "**/pom.xml" + }, new PomCodeActionProvider(context), pomCodeActionMetadata); }); } From 28fe0e6d0dbc71e57cf4dc5c25f8936efdf92b2f Mon Sep 17 00:00:00 2001 From: shuyaqian <717749594@qq.com> Date: Fri, 25 Jun 2021 14:43:47 +0800 Subject: [PATCH 035/708] replace sync icon to refresh Signef-off-by: shuyaqian 717749594@qq.com Signed-off-by: shuyaqian <717749594@qq.com> --- src/serverStatusBarProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 8ab6ee23a..63d576133 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -57,7 +57,7 @@ class ServerStatusBarProvider implements Disposable { enum StatusIcon { LightWeight = "$(rocket)", - Busy = "$(sync~spin)", + Busy = "$(refresh~spin)", Ready = "$(thumbsup)", Error = "$(thumbsdown)" } From 3b491e48032235c845df1cfce4f565d52099e69b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 28 Jun 2021 09:52:29 +0800 Subject: [PATCH 036/708] Recollect Java bundles when granting workspace trust (#1995) * Recollect Java bundles when granting workspace trust Signed-off-by: Jinbo Wang --- src/extension.ts | 16 ++++++++++++++-- src/plugin.ts | 2 +- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 3f5bd786d..925136c2f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,7 +7,7 @@ import * as fse from 'fs-extra'; import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, Selection, Position, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; -import { collectJavaExtensions } from './plugin'; +import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; import { prepareExecutable } from './javaServerStarter'; import * as requirements from './requirements'; import { initialize as initializeRecommendation } from './recommendation'; @@ -355,7 +355,19 @@ export function activate(context: ExtensionContext): Promise { if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 context.subscriptions.push(onDidGrantWorkspaceTrust(() => { if (getJavaServerMode() !== ServerMode.LIGHTWEIGHT) { - commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.STANDARD, true); + // See the issue https://github.com/redhat-developer/vscode-java/issues/1994 + // Need to recollect the Java bundles before starting standard mode. + let pollingCount: number = 0; + // Poll every ~100ms (timeout after 1s) and check whether contributing javaExtensions have changed. + const intervalId = setInterval(() => { + const existingJavaExtensions = clientOptions.initializationOptions.bundles; + clientOptions.initializationOptions.bundles = collectJavaExtensions(extensions.all); + if (++pollingCount >= 10 || isContributedPartUpdated(existingJavaExtensions, clientOptions.initializationOptions.bundles)) { + clearInterval(intervalId); + commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.STANDARD, true); + return; + } + }, 100); } })); } diff --git a/src/plugin.ts b/src/plugin.ts index 26e4bb63a..59f48633c 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -57,7 +57,7 @@ export function onExtensionChange(extensions: readonly vscode.Extension[]) } } -function isContributedPartUpdated(oldContributedPart: Array, newContributedPart: Array) { +export function isContributedPartUpdated(oldContributedPart: Array, newContributedPart: Array) { if (!oldContributedPart) { return false; } From fa09bf260bd31aa3c05b7b633ee212af42e85a48 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 28 Jun 2021 15:26:06 -0400 Subject: [PATCH 037/708] Revert "replace sync icon to refresh Signef-off-by: shuyaqian 717749594@qq.com" This reverts commit 28fe0e6d0dbc71e57cf4dc5c25f8936efdf92b2f. --- src/serverStatusBarProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 63d576133..8ab6ee23a 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -57,7 +57,7 @@ class ServerStatusBarProvider implements Disposable { enum StatusIcon { LightWeight = "$(rocket)", - Busy = "$(refresh~spin)", + Busy = "$(sync~spin)", Ready = "$(thumbsup)", Error = "$(thumbsdown)" } From a9f210d381e107560ad2426da4e832b1f954d1b1 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 28 Jun 2021 15:33:13 -0400 Subject: [PATCH 038/708] Rename to shouldLanguageServerExitOnShutdown extended capability. - syntaxServerExitsOnShutdown -> shouldLanguageServerExitOnShutdown - Standard language server should also exit on shutdown - Related #1928 Signed-off-by: Roland Grunberg --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 925136c2f..c54446e4b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -193,7 +193,7 @@ export function activate(context: ExtensionContext): Promise { resolveAdditionalTextEditsSupport: true, advancedIntroduceParameterRefactoringSupport: true, actionableRuntimeNotificationSupport: true, - syntaxServerExitsOnShutdown: true + shouldLanguageServerExitOnShutdown: true }, triggerFiles, }, From 48aa2f130a55f4dd13d5ca2562da6616fcf26b21 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 28 Jun 2021 22:35:33 -0400 Subject: [PATCH 039/708] Add Changelog for 0.80.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 98d0db67d..befda3592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log +## 0.80.0 (June 30th, 2021) + * enhancement - Allow folding `static` blocks. See [JLS#1777](https://github.com/eclipse/eclipse.jdt.ls/issues/1777). + * enhancement - Add deprecated property to CompletionItem and SymbolInformation. See [JLS#695](https://github.com/eclipse/eclipse.jdt.ls/issues/695). + * enhancement - deprecated is not populated in textDocument/documentSymbol. See [JLS#1301](https://github.com/eclipse/eclipse.jdt.ls/issues/1301). + * enhancement - Support Workspace Trust. See [#1926](https://github.com/redhat-developer/vscode-java/issues/1926). + * enhancement - Add option to ignore all proxies. See [#1947](https://github.com/redhat-developer/vscode-java/issues/1947). + * enhancement - Provide fix suggestions for not covered Maven plugin execution in project build lifecycle. See [#1949](https://github.com/redhat-developer/vscode-java/pull/1949). + * bug fix - Cannot make a static reference to the non-static type T. See [JLS#1781](https://github.com/eclipse/eclipse.jdt.ls/issues/1781). + * bug fix - extract method does not seem to like var nor method references. See [#1956](https://github.com/redhat-developer/vscode-java/issues/1956). + * bug fix - "Problem" The method methodName(ParamType) in the type ClassName is not applicable for the arguments () in lightweight syntax only mode. See [#1931](https://github.com/redhat-developer/vscode-java/issues/1931). + * bug fix - Rename to shouldLanguageServerExitOnShutdown extended capability. See [#2008](https://github.com/redhat-developer/vscode-java/pull/2008). + * bug fix - Syntax server no longer exits once JDT server is initialized. See [#1928](https://github.com/redhat-developer/vscode-java/issues/1928). + * bug fix - File contents would be strange when renaming java file name (with lombok). See [JLS#1775](https://github.com/eclipse/eclipse.jdt.ls/issues/1775). + * bug fix - Changes on the profile have no effect if there are backslashes (\\) in the format.settings.url. See [#1944](https://github.com/redhat-developer/vscode-java/issues/1944). + * bug fix - java.project.sourcePaths doesn't refresh diagnostics. See [JLS#1769](https://github.com/eclipse/eclipse.jdt.ls/issues/1769). + * bug fix - wrong status in 'language/progressReport' notification when processing call hierarchy requests. See [JLS#1722](https://github.com/eclipse/eclipse.jdt.ls/issues/1722). + * build - Adjust .vscodeignore filters due to vsce@1.92 update. See [#1983](https://github.com/redhat-developer/vscode-java/pull/1983). + * other - Bump browserslist from 4.16.4 to 4.16.6. See [#1961](https://github.com/redhat-developer/vscode-java/pull/1961). + ## 0.79.2 (May 19th, 2021) * bug fix - Package name not recognized when opening standalone java files. See [JLS#1764](https://github.com/eclipse/eclipse.jdt.ls/issues/1764). * bug fix - Force Java Compilation returns error. See [#1929](https://github.com/redhat-developer/vscode-java/issues/1929). From 84d2985555251eaffd22dcb33f711a0e01f28b68 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 30 Jun 2021 10:37:07 +0200 Subject: [PATCH 040/708] Remove duplicate feature from changelog Signed-off-by: Fred Bricon --- CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index befda3592..9a3d8efa7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,6 @@ ## 0.80.0 (June 30th, 2021) * enhancement - Allow folding `static` blocks. See [JLS#1777](https://github.com/eclipse/eclipse.jdt.ls/issues/1777). * enhancement - Add deprecated property to CompletionItem and SymbolInformation. See [JLS#695](https://github.com/eclipse/eclipse.jdt.ls/issues/695). - * enhancement - deprecated is not populated in textDocument/documentSymbol. See [JLS#1301](https://github.com/eclipse/eclipse.jdt.ls/issues/1301). * enhancement - Support Workspace Trust. See [#1926](https://github.com/redhat-developer/vscode-java/issues/1926). * enhancement - Add option to ignore all proxies. See [#1947](https://github.com/redhat-developer/vscode-java/issues/1947). * enhancement - Provide fix suggestions for not covered Maven plugin execution in project build lifecycle. See [#1949](https://github.com/redhat-developer/vscode-java/pull/1949). From dd89e83becbae0dc69b87601f91284f504b47326 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 30 Jun 2021 20:24:54 -0400 Subject: [PATCH 041/708] Upversion to 0.81.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index f464d890f..dab6b5afa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.80.0", + "version": "0.81.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 704b576fa..b464b33c1 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.80.0", + "version": "0.81.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 079bb7093cd5c09b942c316bd503f69e5fcf32c4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 7 Jul 2021 12:44:32 -0400 Subject: [PATCH 042/708] Add link to Github Discussions page in Feedback section. Signed-off-by: Roland Grunberg --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0334d13d1..01adf9176 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,7 @@ Also, you can contribute your own VSCode extension to enhance the existing featu Feedback =============== +* Have a question? Start a discussion on [GitHub Discussions](https://github.com/redhat-developer/vscode-java/discussions), * File a bug in [GitHub Issues](https://github.com/redhat-developer/vscode-java/issues), * Chat with us on [Gitter](https://gitter.im/redhat-developer/vscode-java), * [Tweet us](https://twitter.com/VSCodeJava/) with other feedback. From 35abddd71b21001ecb32f262020308b64b9dd389 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 8 Jul 2021 09:08:07 +0800 Subject: [PATCH 043/708] Change the default value of the setting 'java.project.importOnFirstTimeStartup' to 'automatic' Signed-off-by: Sheng Chen --- CHANGELOG.md | 3 +++ README.md | 2 +- package.json | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9a3d8efa7..e669a4689 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 0.81.0 +* other - Change the default value of the setting `java.project.importOnFirstTimeStartup` to `automatic`. See [#2016](https://github.com/redhat-developer/vscode-java/pull/2016) + ## 0.80.0 (June 30th, 2021) * enhancement - Allow folding `static` blocks. See [JLS#1777](https://github.com/eclipse/eclipse.jdt.ls/issues/1777). * enhancement - Add deprecated property to CompletionItem and SymbolInformation. See [JLS#695](https://github.com/eclipse/eclipse.jdt.ls/issues/695). diff --git a/README.md b/README.md index 01adf9176..46abfbdbb 100644 --- a/README.md +++ b/README.md @@ -171,7 +171,7 @@ The following settings are supported: * `java.sources.organizeImports.staticStarThreshold`: Specifies the number of static imports added before a star-import declaration is used, default is 99. * `java.semanticHighlighting.enabled`: Enable/disable [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) for Java files. Defaults to `true`. * `java.imports.gradle.wrapper.checksums`: Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers. -* `java.project.importOnFirstTimeStartup`: Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time. Supported values are `disabled` (never imports), `interactive` (asks to import or not), `automatic` (always imports). Default to `interactive`. +* `java.project.importOnFirstTimeStartup`: Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time. Supported values are `disabled` (never imports), `interactive` (asks to import or not), `automatic` (always imports). Default to `automatic`. * `java.project.importHint`: Enable/disable the server-mode switch information, when Java projects import is skipped on startup. Defaults to `true`. * `java.import.gradle.java.home`: Specifies the location to the JVM used to run the Gradle daemon. * `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules",".git"] will exclude all files and folders named 'node_modules' or '.git'. Defaults to ["node_modules",".git"]. diff --git a/package.json b/package.json index b464b33c1..901375d94 100644 --- a/package.json +++ b/package.json @@ -731,7 +731,7 @@ "interactive", "automatic" ], - "default": "interactive", + "default": "automatic", "description": "Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time.", "scope": "application" }, From 8542c61c70bc078a1b0557345a114e9b1cb39ecb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 24 Jun 2021 01:20:10 +0000 Subject: [PATCH 044/708] Update some npm dependencies - Bump color-string from 1.5.3 to 1.5.5 - Bump glob-parent from 5.1.1 to 5.1.2 for mocha Signed-off-by: Roland Grunberg --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index dab6b5afa..fff05a1dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1068,9 +1068,9 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", + "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -4498,9 +4498,9 @@ } }, "glob-parent": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", - "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { "is-glob": "^4.0.1" From 9e3f9cc15b9034a2af20ae77fc3fc0a16e83a11a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 14 Jul 2021 17:14:38 -0400 Subject: [PATCH 045/708] Disable Workspace Trust in tests runtime - Since VS Code 1.58.1, Workspace Trust will negatively affect tests requiring the standard server so we should disable the feature Signed-off-by: Roland Grunberg --- test/runtest.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/test/runtest.ts b/test/runtest.ts index 80c36566c..68c840563 100644 --- a/test/runtest.ts +++ b/test/runtest.ts @@ -25,6 +25,7 @@ async function main() { launchArgs: [ testProjectPath, '--disable-extensions', + '--disable-workspace-trust' ] }); @@ -41,6 +42,7 @@ async function main() { launchArgs: [ testProjectPath, '--disable-extensions', + '--disable-workspace-trust' ] }); } catch (err) { From 453716f17244cdeb2aefb115c1aba3135737bfe6 Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Sat, 17 Jul 2021 15:15:56 +0200 Subject: [PATCH 046/708] typo: typo in notcoveredexecution.md Signed-off-by: Seth Falco --- document/_java.notCoveredExecution.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/document/_java.notCoveredExecution.md b/document/_java.notCoveredExecution.md index fdfc1c038..bcfd8e5ac 100644 --- a/document/_java.notCoveredExecution.md +++ b/document/_java.notCoveredExecution.md @@ -4,7 +4,7 @@ Some Maven projects use 3rd party Maven plugins to generate sources or resources, and you may find that the generated code is not picked up by the project classpath, or the Maven goals are not executed by Java extension. This is a known technical issue with `m2e`, the underlying Maven integration tool for Java extension. The reason is that the Maven tooling `m2e` doesn't know if it's safe to run your Maven plugin automatically during a workspace build, so it does not run them by default and requires explicit instructions on how to handle them. Learn more about this issue from the wiki about [Execution Not Covered](https://www.eclipse.org/m2e/documentation/m2e-execution-not-covered.html). ## Workaround -- Option 1: The best thing is still to request the Maven plugin authors to provide native integration with m2e. Here is a guideline on [how to make Maven plugins compatible with m2e](https://www.eclipse.org/m2e/documentation/m2e-making-maven-plugins-compat.html). +- Option 1: The best thing is still to request the Maven plugin authors to provide native integration with m2e. Here is a guideline on [how to make Maven plugins compatible with m2e](https://www.eclipse.org/m2e/documentation/m2e-making-maven-plugins-compat.html). - Option 2: Use [build-helper-maven-plugin](http://www.mojohaus.org/build-helper-maven-plugin/usage.html) to explicitly add the unrecognized source folder to classpath. @@ -40,7 +40,7 @@ Some Maven projects use 3rd party Maven plugins to generate sources or resources - Option 3: Configure a lifecycle mapping metadata in pom.xml that explicitly tells m2e what to do with your plugin. -For example, add [a processing instruction in the pom.xml](https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata) like `` to execute it on every project configuration udpate. +For example, add [a processing instruction in the pom.xml](https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata) like `` to execute it on every project configuration update. You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Update Project"`. From b9032f1b319e6077f5c3e7783e9c58362114dd67 Mon Sep 17 00:00:00 2001 From: fvclaus Date: Tue, 27 Jul 2021 09:18:26 +0200 Subject: [PATCH 047/708] Make code action commands wait for applyEdit Signed-off-by: clausfr Co-authored-by: clausfr --- src/extension.ts | 6 ++++-- src/sourceAction.ts | 14 +++++++------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index c54446e4b..6d92a5d04 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -718,10 +718,12 @@ async function addFormatter(extensionPath, formatterUrl, defaultFormatter, relat }); } -export function applyWorkspaceEdit(obj, languageClient) { +export function applyWorkspaceEdit(obj, languageClient): Thenable { const edit = languageClient.protocol2CodeConverter.asWorkspaceEdit(obj); if (edit) { - workspace.applyEdit(edit); + return workspace.applyEdit(edit); + } else { + return Promise.resolve(true); } } diff --git a/src/sourceAction.ts b/src/sourceAction.ts index f8dcf1d72..4a931e40a 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -62,7 +62,7 @@ function registerOverrideMethodsCommand(languageClient: LanguageClient, context: context: params, overridableMethods: selectedItems.map((item) => item.originalMethod), }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -105,14 +105,14 @@ function registerHashCodeEqualsCommand(languageClient: LanguageClient, context: fields: selectedFields.map((item) => item.originalField), regenerate }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } function registerOrganizeImportsCommand(languageClient: LanguageClient, context: ExtensionContext): void { context.subscriptions.push(commands.registerCommand(Commands.ORGANIZE_IMPORTS, async (params: CodeActionParams) => { const workspaceEdit = await languageClient.sendRequest(OrganizeImportsRequest.type, params); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -203,7 +203,7 @@ function registerGenerateToStringCommand(languageClient: LanguageClient, context context: params, fields, }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -240,7 +240,7 @@ function registerGenerateAccessorsCommand(languageClient: LanguageClient, contex context: params, accessors: selectedAccessors.map((item) => item.originalField), }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -294,7 +294,7 @@ function registerGenerateConstructorsCommand(languageClient: LanguageClient, con constructors: selectedConstructors, fields: selectedFields, }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -355,6 +355,6 @@ function registerGenerateDelegateMethodsCommand(languageClient: LanguageClient, context: params, delegateEntries, }); - applyWorkspaceEdit(workspaceEdit, languageClient); + await applyWorkspaceEdit(workspaceEdit, languageClient); })); } From 18e98216397f2881786af59924a84cb40ca36844 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 6 Aug 2021 12:26:32 +0800 Subject: [PATCH 048/708] Explicitly show import progress (#2022) * Reuse 'java.showBuildStatusOnStart.enabled' to control the appearance of the progress notification Signed-off-by: Sheng Chen --- CHANGELOG.md | 1 + README.md | 6 +++- package.json | 18 ++++++++++-- src/serverTaskPresenter.ts | 55 ++++++++++++++++++++++++++++++++--- src/standardLanguageClient.ts | 24 +++++++++++++-- 5 files changed, 95 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e669a4689..c82df15b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ # Change Log ## 0.81.0 +* enhancement - Show job status via progress notification on start. See [#2022](https://github.com/redhat-developer/vscode-java/pull/2022) * other - Change the default value of the setting `java.project.importOnFirstTimeStartup` to `automatic`. See [#2016](https://github.com/redhat-developer/vscode-java/pull/2016) ## 0.80.0 (June 30th, 2021) diff --git a/README.md b/README.md index 46abfbdbb..b154b5536 100644 --- a/README.md +++ b/README.md @@ -156,7 +156,11 @@ The following settings are supported: * `java.codeGeneration.toString.listArrayContents`: List contents of arrays instead of using native toString(). Defaults to `true`. * `java.codeGeneration.toString.limitElements`: Limit number of items in arrays/collections/maps to list, if 0 then list all. Defaults to `0`. * `java.selectionRange.enabled`: Enable/disable Smart Selection support for Java. Disabling this option will not affect the VS Code built-in word-based and bracket-based smart selection. -* `java.showBuildStatusOnStart.enabled`: Automatically show build status on startup. Defaults to `false`. +* `java.showBuildStatusOnStart.enabled`: Automatically show build status on startup, defaults to `notification`. + - `notification`: Show the build status via progress notification. + - `terminal`: Show the build status via terminal. + - `off`: Do not show any build status. + > For backward compatibility, this setting also accepts boolean value, where `true` has the same meaning as `notification` and `false` has the same meaning as `off`. * `java.project.outputPath`: A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project. * `java.project.referencedLibraries`: Configure glob patterns for referencing local libraries to a Java project. * `java.completion.maxResults`: Maximum number of completion results (not including snippets). `0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit.. diff --git a/package.json b/package.json index 901375d94..554338404 100644 --- a/package.json +++ b/package.json @@ -605,9 +605,23 @@ "scope": "window" }, "java.showBuildStatusOnStart.enabled": { - "type": "boolean", + "anyOf": [ + { + "enum": [ + "notification", + "terminal", + "off" + ], + "enumDescriptions": [ + "Show the build status via progress notification on start", + "Show the build status via terminal on start", + "Do not show any build status on start" + ] + }, + "boolean" + ], "description": "Automatically show build status on startup.", - "default": false, + "default": "notification", "scope": "window" }, "java.configuration.runtimes": { diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 3b366842c..7758a31aa 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -1,19 +1,21 @@ -import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions } from "vscode"; -import * as vscode from "vscode"; +import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions, window, ProgressLocation, Progress } from "vscode"; import { serverTasks } from "./serverTasks"; import { Disposable } from "vscode-languageclient"; import { ProgressReport } from "./protocol"; +import { Commands } from "./commands"; +import { getJavaConfiguration } from "./utils"; const JAVA_SERVER_TASK_PRESENTER_TASK_NAME = "Java Build Status"; export namespace serverTaskPresenter { export async function presentServerTaskView() { const execution = await getPresenterTaskExecution(); - const terminals = vscode.window.terminals; + const terminals = window.terminals; const presenterTerminals = terminals.filter(terminal => terminal.name.indexOf(execution.task.name) >= 0); if (presenterTerminals.length > 0) { presenterTerminals[0].show(); } + activationProgressNotification.hide(); } } @@ -57,7 +59,7 @@ async function killExistingExecutions() { execs.forEach(exec => exec.terminate()); await new Promise(resolve => setTimeout(resolve, 0)); - let terminals = vscode.window.terminals; + let terminals = window.terminals; terminals = terminals.filter(terminal => terminal.name.indexOf(JAVA_SERVER_TASK_PRESENTER_TASK_NAME) >= 0); terminals.forEach(terminal => terminal.dispose()); await new Promise(resolve => setTimeout(resolve, 0)); @@ -112,3 +114,48 @@ class ServerTaskTerminal implements Pseudoterminal { serverTasks.suggestTaskEntrySize(dimensions.rows - 1); } } + +export class ActivationProgressNotification { + private hideEmitter = new EventEmitter(); + private onHide = this.hideEmitter.event; + private disposables: Disposable[] = []; + private lastJobId: string; + + public showProgress() { + const showBuildStatusEnabled = getJavaConfiguration().get("showBuildStatusOnStart.enabled"); + if (typeof showBuildStatusEnabled === "string" || showBuildStatusEnabled instanceof String) { + if (showBuildStatusEnabled !== "notification") { + return; + } + } else if (!showBuildStatusEnabled) { + return; + } + const isProgressReportEnabled: boolean = getJavaConfiguration().get("progressReports.enabled"); + const title = isProgressReportEnabled ? "Opening Java Projects" : "Opening Java Projects..."; + window.withProgress({ + location: ProgressLocation.Notification, + title, + cancellable: false, + }, (progress: Progress<{ message?: string; increment?: number }>) => { + return new Promise((resolve) => { + if (isProgressReportEnabled) { + progress.report({ + message: `[check details](command:${Commands.SHOW_SERVER_TASK_STATUS})` + }); + } + this.onHide(() => { + for (const disposable of this.disposables) { + disposable.dispose(); + } + return resolve(); + }); + }); + }); + } + + public hide() { + this.hideEmitter.fire(); + } +} + +export const activationProgressNotification = new ActivationProgressNotification(); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 60dc9efdb..fc7ef58ac 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -10,7 +10,7 @@ import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; -import { serverTaskPresenter } from "./serverTaskPresenter"; +import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; import { RequirementsData } from "./requirements"; import * as net from 'net'; import * as path from 'path'; @@ -45,7 +45,7 @@ export class StandardLanguageClient { return; } - if (workspace.getConfiguration().get("java.showBuildStatusOnStart.enabled")) { + if (workspace.getConfiguration().get("java.showBuildStatusOnStart.enabled") === "terminal") { commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS); } @@ -90,11 +90,14 @@ export class StandardLanguageClient { this.languageClient.registerProposedFeatures(); this.languageClient.onReady().then(() => { + activationProgressNotification.showProgress(); this.languageClient.onNotification(StatusNotification.type, (report) => { switch (report.type) { case 'ServiceReady': apiManager.updateServerMode(ServerMode.STANDARD); apiManager.fireDidServerModeChange(ServerMode.STANDARD); + activationProgressNotification.hide(); + showImportFinishNotification(context); break; case 'Started': this.status = ClientStatus.Started; @@ -443,6 +446,23 @@ export class StandardLanguageClient { } } +function showImportFinishNotification(context: ExtensionContext) { + const showNotification: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); + if (!showNotification) { + const options = ["Don't show again"]; + if (extensions.getExtension("vscjava.vscode-java-dependency")) { + options.unshift("View projects"); + } + window.showInformationMessage("Projects are imported into workspace.", ...options).then((choice) => { + if (choice === "Don't show again") { + context.globalState.update("java.neverShowImportFinishNotification", true); + } else if (choice === "View projects") { + commands.executeCommand("javaProjectExplorer.focus"); + } + }); + } +} + function logNotification(message: string) { return new Promise(() => { logger.verbose(message); From c86f4f470d9d8ff9c9294e250395ebdd2d20189f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Jul 2021 13:43:28 -0400 Subject: [PATCH 049/708] Move pull request verification job to GitHub Actions - Migrate away from Travis CI and to GitHub Actions Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 42 ++++++++++++++++++++++ .travis.yml | 42 ---------------------- test/standard-mode-suite/publicApi.test.ts | 5 +++ 3 files changed, 47 insertions(+), 42 deletions(-) create mode 100644 .github/workflows/pr-verify.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml new file mode 100644 index 000000000..f4af33b0c --- /dev/null +++ b/.github/workflows/pr-verify.yml @@ -0,0 +1,42 @@ +name: pr-verify + +on: [push, pull_request] + +jobs: + pr-verify-job: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [macos-latest, ubuntu-latest] + steps: + - name: Check Out Code + uses: actions/checkout@v2 + - name: Set Up NodeJS + uses: actions/setup-node@v2 + with: + node-version: '12.22.1' + - name: Set Up Java + uses: actions/setup-java@v2 + with: + java-version: '11' + distribution: 'adopt' + - run: npm install -g typescript vsce + - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz + - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz + - run: npm install + - run: npm run compile + - run: npm run vscode:prepublish + - run: vsce package + - run: ls -ll java-*vsix + - run: npm run tslint + - name: Run Tests + if: runner.os == 'Linux' + env: + SKIP_COMMANDS_TEST: true + run: $(echo "xvfb-run --auto-servernum") npm run test --silent + - name: Run Tests + if: runner.os != 'Linux' + env: + SKIP_COMMANDS_TEST: true + SKIP_CLASSPATH_TEST: true + run: npm run test --silent diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 07b949593..000000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -sudo: false - -language: java - -matrix: - include: - - os: linux - dist: bionic - services: - - xvfb - jdk: openjdk11 - env: - - JDK_HOME=~/openjdk11 # force launching JLS using JDK11 - - os: osx - osx_image: xcode10.1 - jdk: oraclejdk11 - -before_install: -- if [ $TRAVIS_OS_NAME == "linux" ]; then - export CXX="g++-4.9" CC="gcc-4.9"; - fi -- nvm install 12.22; -- npm install -g typescript - -env: -- SKIP_COMMANDS_TEST="true" - -install: -- wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz -- mkdir server -- tar -xvzf jdt-language-server-latest.tar.gz -C ./server -- rm jdt-language-server-latest.tar.gz -- npm install -- npm run compile -- npm run vscode:prepublish -- npm install -g vsce -- vsce package -- ls -ll java-*vsix - -script: -- npm run tslint -- npm test --silent diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index 8f1f4b79f..e5f38eb4f 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -9,6 +9,7 @@ import * as fse from 'fs-extra'; import { getJavaConfiguration } from '../../src/utils'; import { Commands } from '../../src/commands'; import { constants } from '../common'; +import { env } from 'process'; const pomPath: string = path.join(constants.projectFsPath, 'pom.xml'); const gradleTestFolder: string = path.join(constants.projectFsPath, 'testGradle'); @@ -97,6 +98,10 @@ suite('Public APIs - Standard', () => { }); test('onDidClasspathUpdate should work', async function () { + if (env['SKIP_CLASSPATH_TEST'] === 'true') { + console.log('Skipping "onDidClasspathUpdate should work"'); + return; + } const pomContent: string = await fse.readFile(pomPath, 'utf-8'); const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; From cf26b9b0297f11823974271f8958d094e3384ae1 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Tue, 10 Aug 2021 15:51:31 +0800 Subject: [PATCH 050/708] Do not show the import notification when no projects available Signed-off-by: Sheng Chen --- src/serverTaskPresenter.ts | 6 ++++-- src/standardLanguageClient.ts | 11 ++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 7758a31aa..87f814093 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -1,4 +1,4 @@ -import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions, window, ProgressLocation, Progress } from "vscode"; +import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions, window, ProgressLocation, Progress, workspace } from "vscode"; import { serverTasks } from "./serverTasks"; import { Disposable } from "vscode-languageclient"; import { ProgressReport } from "./protocol"; @@ -119,9 +119,11 @@ export class ActivationProgressNotification { private hideEmitter = new EventEmitter(); private onHide = this.hideEmitter.event; private disposables: Disposable[] = []; - private lastJobId: string; public showProgress() { + if (!workspace.workspaceFolders) { + return; + } const showBuildStatusEnabled = getJavaConfiguration().get("showBuildStatusOnStart.enabled"); if (typeof showBuildStatusEnabled === "string" || showBuildStatusEnabled instanceof String) { if (showBuildStatusEnabled !== "notification") { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index fc7ef58ac..9a5fa70ef 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -446,9 +446,14 @@ export class StandardLanguageClient { } } -function showImportFinishNotification(context: ExtensionContext) { - const showNotification: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); - if (!showNotification) { +async function showImportFinishNotification(context: ExtensionContext) { + const neverShow: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); + if (!neverShow) { + const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + if (projectUris.length === 0 || (projectUris.length === 1 && projectUris[0].includes("jdt.ls-java-project"))) { + return; + } + const options = ["Don't show again"]; if (extensions.getExtension("vscjava.vscode-java-dependency")) { options.unshift("View projects"); From 076455e9f9d4392886e5fb858a88d7b1a2353bb8 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 12 Aug 2021 01:22:02 +0800 Subject: [PATCH 051/708] Can select build tool when there is a conflict (#2037) Can select build tool when there is a conflict Signed-off-by: Sheng Chen --- src/extension.ts | 86 ++++++++++++++++++++++++-- src/settings.ts | 1 + src/utils.ts | 2 +- test/standard-mode-suite/utils.test.ts | 2 +- 4 files changed, 84 insertions(+), 7 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 6d92a5d04..4b4e74ea6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, Selection, Position, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind } from 'vscode'; +import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; @@ -14,7 +14,7 @@ import { initialize as initializeRecommendation } from './recommendation'; import { Commands } from './commands'; import { ExtensionAPI, ClientStatus } from './extension.api'; import { getJavaConfiguration, deleteDirectory, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, convertToGlob, getExclusionBlob } from './utils'; -import { onConfigurationChange, getJavaServerMode, ServerMode } from './settings'; +import { onConfigurationChange, getJavaServerMode, ServerMode, ACTIVE_BUILD_TOOL_STATE } from './settings'; import { logger, initializeLogFile } from './log'; import glob = require('glob'); import { SyntaxLanguageClient } from './syntaxLanguageClient'; @@ -309,7 +309,7 @@ export function activate(context: ExtensionContext): Promise { } if (choice === "Yes") { - startStandardServer(context, requirements, clientOptions, workspacePath, resolve); + await startStandardServer(context, requirements, clientOptions, workspacePath, resolve); } }); @@ -348,7 +348,7 @@ export function activate(context: ExtensionContext): Promise { } if (requireStandardServer) { - startStandardServer(context, requirements, clientOptions, workspacePath, resolve); + await startStandardServer(context, requirements, clientOptions, workspacePath, resolve); } const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; @@ -375,10 +375,16 @@ export function activate(context: ExtensionContext): Promise { }); } -function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, resolve: (value?: ExtensionAPI | PromiseLike) => void) { +async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, resolve: (value?: ExtensionAPI | PromiseLike) => void) { if (standardClient.getClientStatus() !== ClientStatus.Uninitialized) { return; } + + const checkConflicts: boolean = await ensureNoBuildToolConflicts(context, clientOptions); + if (!checkConflicts) { + return; + } + if (apiManager.getApiInstance().serverMode === ServerMode.LIGHTWEIGHT) { // Before standard server is ready, we are in hybrid. apiManager.getApiInstance().serverMode = ServerMode.HYBRID; @@ -409,6 +415,76 @@ async function workspaceContainsBuildFiles(): Promise { return false; } +async function ensureNoBuildToolConflicts(context: ExtensionContext, clientOptions: LanguageClientOptions): Promise { + const isMavenEnabled: boolean = getJavaConfiguration().get("import.maven.enabled"); + const isGradleEnabled: boolean = getJavaConfiguration().get("import.gradle.enabled"); + if (isMavenEnabled && isGradleEnabled) { + let activeBuildTool: string | undefined = context.workspaceState.get(ACTIVE_BUILD_TOOL_STATE); + if (!activeBuildTool) { + if (!await hasBuildToolConflicts()) { + return true; + } + activeBuildTool = await window.showInformationMessage("Build tool conflicts are detected in workspace. Which one would you like to use?", "Use Maven", "Use Gradle"); + } + + if (!activeBuildTool) { + return false; // user cancels + } else if (activeBuildTool.toLocaleLowerCase().includes("maven")) { + // Here we do not persist it in the settings to avoid generating/updating files in user's workspace + // Later if user want to change the active build tool, just directly set the related settings. + clientOptions.initializationOptions.settings.java.import.gradle.enabled = false; + context.workspaceState.update(ACTIVE_BUILD_TOOL_STATE, "maven"); + } else if (activeBuildTool.toLocaleLowerCase().includes("gradle")) { + clientOptions.initializationOptions.settings.java.import.maven.enabled = false; + context.workspaceState.update(ACTIVE_BUILD_TOOL_STATE, "gradle"); + } else { + throw new Error ("Unknown build tool: " + activeBuildTool); // unreachable + } + } + + return true; +} + +async function hasBuildToolConflicts(): Promise { + const projectConfigurationUris: Uri[] = await getBuildFilesInWorkspace(); + const projectConfigurationFsPaths: string[] = projectConfigurationUris.map((uri) => uri.fsPath); + const eclipseDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, [], ".project"); + // ignore the folders that already has .project file (already imported before) + const gradleDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle"); + const mavenDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, "pom.xml"); + return gradleDirectories.some((gradleDir) => { + return mavenDirectories.includes(gradleDir); + }); +} + +async function getBuildFilesInWorkspace(): Promise { + const buildFiles: Uri[] = []; + const inclusionFilePatterns: string[] = getBuildFilePatterns(); + inclusionFilePatterns.push("**/.project"); + const inclusionFolderPatterns: string[] = getInclusionPatternsFromNegatedExclusion(); + // Since VS Code API does not support put negated exclusion pattern in findFiles(), + // here we first parse the negated exclusion to inclusion and do the search. + if (inclusionFilePatterns.length > 0 && inclusionFolderPatterns.length > 0) { + buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /*force not use default exclusion*/)); + } + + const inclusionBlob: string = convertToGlob(inclusionFilePatterns); + const exclusionBlob: string = getExclusionBlob(); + if (inclusionBlob) { + buildFiles.push(...await workspace.findFiles(inclusionBlob, exclusionBlob)); + } + + return buildFiles; +} + +function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], fileName: string): string[] { + return inclusions.filter((fsPath) => fsPath.endsWith(fileName)).map((fsPath) => { + return path.dirname(fsPath); + }).filter((inclusion) => { + return !exclusions.includes(inclusion); + }); +} + async function promptUserForStandardServer(config: WorkspaceConfiguration): Promise { const choice: string = await window.showInformationMessage("The workspace contains Java projects. Would you like to import them?", "Yes", "Always", "Later"); switch (choice) { diff --git a/src/settings.ts b/src/settings.ts index c3351324b..b53367a69 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -9,6 +9,7 @@ const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.set export const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; export const IS_WORKSPACE_VMARGS_ALLOWED = "java.ls.isVmargsAllowed"; const extensionName = 'Language Support for Java'; +export const ACTIVE_BUILD_TOOL_STATE = "java.activeBuildTool"; const changeItem = { global: 'Exclude globally', diff --git a/src/utils.ts b/src/utils.ts index ebac10cef..d0a2d7426 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -55,7 +55,7 @@ export function getBuildFilePatterns(): string[] { patterns.push("**/pom.xml"); } if (isGradleImporterEnabled) { - patterns.push("**/build.gradle"); + patterns.push("**/*.gradle"); } return patterns; diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index 77af783bd..8d90435f7 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -37,7 +37,7 @@ suite('Utils Test', () => { const result: string[] = getBuildFilePatterns(); - assert.deepEqual(result, ["**/pom.xml", "**/build.gradle"]); + assert.deepEqual(result, ["**/pom.xml", "**/*.gradle"]); }); test('getBuildFilePatterns() - no importers is enabled', async function () { From 4190edd3e69ac868206864aa0051decd0175720b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 12 Aug 2021 22:42:07 -0400 Subject: [PATCH 052/708] Add Changelog for 0.81.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c82df15b9..c33783496 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,8 +1,25 @@ # Change Log -## 0.81.0 -* enhancement - Show job status via progress notification on start. See [#2022](https://github.com/redhat-developer/vscode-java/pull/2022) -* other - Change the default value of the setting `java.project.importOnFirstTimeStartup` to `automatic`. See [#2016](https://github.com/redhat-developer/vscode-java/pull/2016) +## 0.81.0 (August 17th, 2021) + * enhancement - 'Create method' code action for method reference. See [JLS#1464](https://github.com/eclipse/eclipse.jdt.ls/issues/1464). + * enhancement - Show job status via progress notification on start. See [#2022](https://github.com/redhat-developer/vscode-java/pull/2022) + * enhancement - New setting entry to choose project type (Maven or Gradle) when ambiguous. See [#600](https://github.com/redhat-developer/vscode-java/issues/600). + * performance - Avoid displaying (expensive) constant values in completion items. See [JLS#1835](https://github.com/eclipse/eclipse.jdt.ls/issues/1835). + * performance - toURI is expensive on Windows for completions. See [JLS#1831](https://github.com/eclipse/eclipse.jdt.ls/issues/1831). + * bug fix - Go to definition doesn't compute/find results on methods inside an anonymous class. See [JLS#1813](https://github.com/eclipse/eclipse.jdt.ls/issues/1813). + * bug fix - quickfix not available where cursor lands by default on annotations. See [#1992](https://github.com/redhat-developer/vscode-java/issues/1992). + * bug fix - Fix content assist for multiline strings. See [#1811](https://github.com/redhat-developer/vscode-java/issues/1811). + * bug fix - Language server freezes when importing Maven project. See [#2020](https://github.com/redhat-developer/vscode-java/issues/2020). + * bug fix - Suggest correct import quick fix in anonymous classes. See [#2034](https://github.com/redhat-developer/vscode-java/issues/2034). + * bug fix - Organize imports generates duplicate static import statement. See [#2012](https://github.com/redhat-developer/vscode-java/issues/2012). + * bug fix - Do not show the import notification when no projects available. See [#2056](https://github.com/redhat-developer/vscode-java/pull/2056). + * bug fix - Make commands wait for applyEdit. See [#2042](https://github.com/redhat-developer/vscode-java/pull/2042). + * build - Move pull request verification job to GitHub Actions. See [#2031](https://github.com/redhat-developer/vscode-java/pull/2031). + * debt - Update eclipse-jarsigner-plugin to 1.3.2. See [JLS#1829](https://github.com/eclipse/eclipse.jdt.ls/pull/1829). + * debt - Language server distro contains 2 Guava jars. See [JLS#1706](https://github.com/eclipse/eclipse.jdt.ls/issues/1706). + * other - Change the default value of the setting `java.project.importOnFirstTimeStartup` to `automatic`. See [#2014](https://github.com/redhat-developer/vscode-java/issues/2014) + * other - Disable Workspace Trust in test suite runtime. See [#2026](https://github.com/redhat-developer/vscode-java/pull/2026). + * other - Typo in notcoveredexecution.md. See [#2033](https://github.com/redhat-developer/vscode-java/pull/2033). ## 0.80.0 (June 30th, 2021) * enhancement - Allow folding `static` blocks. See [JLS#1777](https://github.com/eclipse/eclipse.jdt.ls/issues/1777). From c3f18c34949a9cbfdb3604fa1e3a1a43e9eebe35 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Tue, 17 Aug 2021 21:24:45 +0800 Subject: [PATCH 053/708] Only show the import notification for the first time (#2065) Signed-off-by: Sheng Chen --- src/extension.ts | 2 +- src/standardLanguageClient.ts | 9 +++++++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 4b4e74ea6..efd739198 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -390,7 +390,7 @@ async function startStandardServer(context: ExtensionContext, requirements: requ apiManager.getApiInstance().serverMode = ServerMode.HYBRID; apiManager.fireDidServerModeChange(ServerMode.HYBRID); } - standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter, resolve); + await standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter, resolve); standardClient.start(); serverStatusBarProvider.showStandardStatus(); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 9a5fa70ef..41ead2690 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -13,6 +13,7 @@ import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; import { RequirementsData } from "./requirements"; import * as net from 'net'; +import * as fse from 'fs-extra'; import * as path from 'path'; import { getJavaConfiguration } from "./utils"; import { logger } from "./log"; @@ -40,11 +41,13 @@ export class StandardLanguageClient { private languageClient: LanguageClient; private status: ClientStatus = ClientStatus.Uninitialized; - public initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter, resolve: (value: ExtensionAPI) => void): void { + public async initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter, resolve: (value: ExtensionAPI) => void): Promise { if (this.status !== ClientStatus.Uninitialized) { return; } + const hasImported: boolean = await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins")); + if (workspace.getConfiguration().get("java.showBuildStatusOnStart.enabled") === "terminal") { commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS); } @@ -97,7 +100,9 @@ export class StandardLanguageClient { apiManager.updateServerMode(ServerMode.STANDARD); apiManager.fireDidServerModeChange(ServerMode.STANDARD); activationProgressNotification.hide(); - showImportFinishNotification(context); + if (!hasImported) { + showImportFinishNotification(context); + } break; case 'Started': this.status = ClientStatus.Started; From 3a99a91d916e9d585cbc32c1df328d918bf3f35d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 17 Aug 2021 15:00:58 -0400 Subject: [PATCH 054/708] Upversion to 0.82.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index fff05a1dd..feb1c8fe5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.81.0", + "version": "0.82.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 554338404..2f56babd3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.81.0", + "version": "0.82.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From d83e15c78a6431862d8649b149b4856456f801c8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 19 Aug 2021 21:57:25 -0400 Subject: [PATCH 055/708] Use npm audit fix - Update path-parse 1.0.6 -> 1.0.7 Signed-off-by: Roland Grunberg --- package-lock.json | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index feb1c8fe5..4d81ca23d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4732,14 +4732,6 @@ "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } } } } @@ -5140,9 +5132,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-root": { From 6460ad8e97d403aa402443e19421f857d8628122 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 18 Aug 2021 20:06:12 -0400 Subject: [PATCH 056/708] Add "shortmonth" date option and fix existing month/date variables - Adjust 0-based month values & use day-of-month for date - Adjust documentation - Fixes #1987 Signed-off-by: Roland Grunberg --- document/_java.templateVariables.md | 1 + src/fileEventHandler.ts | 7 ++++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/document/_java.templateVariables.md b/document/_java.templateVariables.md index 912901012..f3f78c5d0 100644 --- a/document/_java.templateVariables.md +++ b/document/_java.templateVariables.md @@ -9,6 +9,7 @@ Below are the predefined variables you could use in the template settings such a - `${time}` - current system time - `${year}` - current year - `${month}` - current month +- `${shortmonth}` - short form representation of current month - `${day}` - current day of the month - `${hour}` - current hour - `${minute}` - current minute diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index fca00b2f3..b9f5160fb 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -67,11 +67,12 @@ async function handleNewJavaFiles(e: FileCreateEvent) { package_name: "", type_name: typeName, user: userInfo().username, - date: date.toLocaleDateString(), + date: date.toLocaleDateString(undefined, {month: "short", day: "2-digit", year: "numeric"}), time: date.toLocaleTimeString(), year: date.getFullYear(), - month: formatNumber(date.getMonth()), - day: formatNumber(date.getDay()), + month: formatNumber(date.getMonth() + 1), + shortmonth: date.toLocaleDateString(undefined, {month: "short"}), + day: formatNumber(date.getDate()), hour: formatNumber(date.getHours()), minute: formatNumber(date.getMinutes()), }; From 351f206d73dde626908a0580447b770a50f4d281 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Wed, 25 Aug 2021 05:50:30 +0200 Subject: [PATCH 057/708] Add *.gradle.kts support (#2077) * [WIP] Add *.gradle.kts support Signed-off-by: Fred Bricon * Polish *.gradle.kts support Signed-off-by: Snjezana Peco Co-authored-by: Fred Bricon --- package-lock.json | 14 +++++++------- package.json | 11 +++++++---- src/extension.ts | 2 ++ src/utils.ts | 1 + test/resources/packageExample.json | 2 +- test/standard-mode-suite/extension.test.ts | 2 +- test/standard-mode-suite/utils.test.ts | 2 +- 7 files changed, 20 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4d81ca23d..217ddf389 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1266,7 +1266,7 @@ "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", "dev": true, "requires": { "file-type": "^5.2.0", @@ -1285,7 +1285,7 @@ "decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", "dev": true, "requires": { "decompress-tar": "^4.1.0", @@ -1298,7 +1298,7 @@ "file-type": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", "dev": true } } @@ -1306,7 +1306,7 @@ "decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", "dev": true, "requires": { "decompress-tar": "^4.1.1", @@ -1472,7 +1472,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -6049,7 +6049,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -6076,7 +6076,7 @@ "strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", "dev": true, "requires": { "is-natural-number": "^4.0.1" diff --git a/package.json b/package.json index 2f56babd3..f939220e7 100644 --- a/package.json +++ b/package.json @@ -39,14 +39,17 @@ "onLanguage:java", "workspaceContains:pom.xml", "workspaceContains:build.gradle", + "workspaceContains:settings.gradle", + "workspaceContains:build.gradle.kts", + "workspaceContains:settings.gradle.kts", "workspaceContains:.classpath", "onCommand:_java.templateVariables" ], "main": "./dist/extension", "contributes": { "javaBuildFilePatterns": [ - "^pom.xml$", - ".*\\.gradle$" + "^pom\\.xml$", + ".*\\.gradle(\\.kts)?$" ], "semanticTokenTypes": [ { @@ -942,7 +945,7 @@ "explorer/context": [ { "command": "java.projectConfiguration.update", - "when": "resourceFilename =~ /(.*\\.gradle)|(pom.xml)$/", + "when": "resourceFilename =~ /(.*\\.gradle)|(.*\\.gradle\\.kts)|(pom\\.xml)$/", "group": "1_javaactions" }, { @@ -964,7 +967,7 @@ }, { "command": "java.projectConfiguration.update", - "when": "resourceFilename =~ /(.*\\.gradle)|(pom.xml)$/", + "when": "resourceFilename =~ /(.*\\.gradle)|(.*\\.gradle\\.kts)|(pom\\.xml)$/", "group": "1_javaactions" }, { diff --git a/src/extension.ts b/src/extension.ts index efd739198..f9e591722 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -451,6 +451,8 @@ async function hasBuildToolConflicts(): Promise { const eclipseDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, [], ".project"); // ignore the folders that already has .project file (already imported before) const gradleDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle"); + const gradleDirectoriesKts = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle.kts"); + gradleDirectories.concat(gradleDirectoriesKts); const mavenDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, "pom.xml"); return gradleDirectories.some((gradleDir) => { return mavenDirectories.includes(gradleDir); diff --git a/src/utils.ts b/src/utils.ts index d0a2d7426..805004d3a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -56,6 +56,7 @@ export function getBuildFilePatterns(): string[] { } if (isGradleImporterEnabled) { patterns.push("**/*.gradle"); + patterns.push("**/*.gradle.kts"); } return patterns; diff --git a/test/resources/packageExample.json b/test/resources/packageExample.json index 93db329e3..f392367bc 100644 --- a/test/resources/packageExample.json +++ b/test/resources/packageExample.json @@ -16,7 +16,7 @@ "./bin/java.extend.jar" ], "javaBuildFilePatterns": [ - "^pom.xml$", ".*\\.gradle$" + "^pom.xml$", ".*\\.gradle(\\.kts)?$" ] }, "extensionDependencies": [ diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 834da1cce..5a6f044c7 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -121,7 +121,7 @@ suite('Java Language Extension - Standard', () => { const result = plugin.collectBuildFilePattern(extensions); assert(result.length === 2); assert(result[0].endsWith("^pom.xml$")); - assert(result[1].endsWith(".*\\.gradle$")); + assert(result[1].endsWith(".*\\.gradle(\\.kts)?$")); }); test('should collect java extensions', () => { diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index 8d90435f7..f62b6c079 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -37,7 +37,7 @@ suite('Utils Test', () => { const result: string[] = getBuildFilePatterns(); - assert.deepEqual(result, ["**/pom.xml", "**/*.gradle"]); + assert.deepEqual(result, ["**/pom.xml", "**/*.gradle", "**/*.gradle.kts"]); }); test('getBuildFilePatterns() - no importers is enabled', async function () { From 0819f46a026206dd33bdc9b54f0c547288c6606b Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Thu, 15 Jul 2021 11:01:44 +0800 Subject: [PATCH 058/708] i18n: support Chinese Signed-off-by: Yan Zhang --- package.json | 40 ++++++++++++++++++++-------------------- package.nls.json | 22 ++++++++++++++++++++++ package.nls.zh.json | 22 ++++++++++++++++++++++ 3 files changed, 64 insertions(+), 20 deletions(-) create mode 100644 package.nls.json create mode 100644 package.nls.zh.json diff --git a/package.json b/package.json index f939220e7..a37170fe9 100644 --- a/package.json +++ b/package.json @@ -819,108 +819,108 @@ "commands": [ { "command": "java.server.mode.switch", - "title": "Switch to Standard Mode", + "title": "%java.server.mode.switch%", "category": "Java" }, { "command": "java.projectConfiguration.update", - "title": "Update Project", + "title": "%java.projectConfiguration.update%", "category": "Java" }, { "command": "java.project.import", - "title": "Import Java Projects into Workspace", + "title": "%java.project.import%", "category": "Java" }, { "command": "java.open.serverLog", - "title": "Open Java Language Server Log File", + "title": "%java.open.serverLog%", "category": "Java" }, { "command": "java.open.clientLog", - "title": "Open Java Extension Log File", + "title": "%java.open.clientLog%", "category": "Java" }, { "command": "java.open.logs", - "title": "Open All Log Files", + "title": "%java.open.logs%", "category": "Java" }, { "command": "java.workspace.compile", - "title": "Force Java Compilation", + "title": "%java.workspace.compile%", "category": "Java" }, { "command": "java.open.formatter.settings", - "title": "Open Java Formatter Settings", + "title": "%java.open.formatter.settings%", "category": "Java" }, { "command": "java.clean.workspace", - "title": "Clean Java Language Server Workspace", + "title": "%java.clean.workspace%", "category": "Java" }, { "command": "java.project.updateSourceAttachment", - "title": "Attach Source", + "title": "%java.project.updateSourceAttachment%", "category": "Java" }, { "command": "java.project.addToSourcePath", - "title": "Add Folder to Java Source Path", + "title": "%java.project.addToSourcePath%", "category": "Java" }, { "command": "java.project.removeFromSourcePath", - "title": "Remove Folder from Java Source Path", + "title": "%java.project.removeFromSourcePath%", "category": "Java" }, { "command": "java.project.listSourcePaths", - "title": "List All Java Source Paths", + "title": "%java.project.listSourcePaths%", "category": "Java" }, { "command": "java.show.server.task.status", - "title": "Show Build Job Status", + "title": "%java.show.server.task.status%", "category": "Java" }, { "command": "java.action.navigateToSuperImplementation", - "title": "Go to Super Implementation", + "title": "%java.action.navigateToSuperImplementation%", "category": "Java" }, { "command": "java.action.showTypeHierarchy", - "title": "Show Type Hierarchy", + "title": "%java.action.showTypeHierarchy%", "category": "Java" }, { "command": "java.action.showClassHierarchy", - "title": "Show Class Hierarchy", + "title": "%java.action.showClassHierarchy%", "icon": "$(type-hierarchy)", "enablement": "typeHierarchyDirection != both && typeHierarchySymbolKind != 10", "category": "Java" }, { "command": "java.action.showSupertypeHierarchy", - "title": "Show Supertype Hierarchy", + "title": "%java.action.showSupertypeHierarchy%", "icon": "$(type-hierarchy-super)", "enablement": "typeHierarchyDirection != parents", "category": "Java" }, { "command": "java.action.showSubtypeHierarchy", - "title": "Show Subtype Hierarchy", + "title": "%java.action.showSubtypeHierarchy%", "icon": "$(type-hierarchy-sub)", "enablement": "typeHierarchyDirection != children", "category": "Java" }, { "command": "java.action.changeBaseType", - "title": "Base on this Type", + "title": "%java.action.changeBaseType%", "category": "Java" } ], diff --git a/package.nls.json b/package.nls.json new file mode 100644 index 000000000..622212e44 --- /dev/null +++ b/package.nls.json @@ -0,0 +1,22 @@ +{ + "java.server.mode.switch": "Switch to Standard Mode", + "java.projectConfiguration.update": "Update Project", + "java.project.import": "Import Java Projects into Workspace", + "java.open.serverLog": "Open Java Language Server Log File", + "java.open.clientLog": "Open Java Extension Log File", + "java.open.logs": "Open All Log Files", + "java.workspace.compile": "Force Java Compilation", + "java.open.formatter.settings": "Open Java Formatter Settings", + "java.clean.workspace": "Clean Java Language Server Workspace", + "java.project.updateSourceAttachment": "Attach Source", + "java.project.addToSourcePath": "Add Folder to Java Source Path", + "java.project.removeFromSourcePath": "Remove Folder from Java Source Path", + "java.project.listSourcePaths": "List All Java Source Paths", + "java.show.server.task.status": "Show Build Job Status", + "java.action.navigateToSuperImplementation": "Go to Super Implementation", + "java.action.showTypeHierarchy": "Show Type Hierarchy", + "java.action.showClassHierarchy": "Show Class Hierarchy", + "java.action.showSupertypeHierarchy": "Show Supertype Hierarchy", + "java.action.showSubtypeHierarchy": "Show Subtype Hierarchy", + "java.action.changeBaseType": "Base on this Type" +} \ No newline at end of file diff --git a/package.nls.zh.json b/package.nls.zh.json new file mode 100644 index 000000000..90a57d32d --- /dev/null +++ b/package.nls.zh.json @@ -0,0 +1,22 @@ +{ + "java.server.mode.switch": "切换到标准模式", + "java.projectConfiguration.update": "更新项目", + "java.project.import": "将 Java 项目导入工作区", + "java.open.serverLog": "打开 Java 语言服务器日志文件", + "java.open.clientLog": "打开 Java 插件日志文件", + "java.open.logs": "打开所有日志文件", + "java.workspace.compile": "强制编译", + "java.open.formatter.settings": "打开 Java 格式设置", + "java.clean.workspace": "清理 Java 语言服务器工作区", + "java.project.updateSourceAttachment": "附加源代码", + "java.project.addToSourcePath": "将文件夹加入 Java 源代码路径", + "java.project.removeFromSourcePath": "将文件夹从 Java 源代码路径中删除", + "java.project.listSourcePaths": "列出所有 Java 源代码路径", + "java.show.server.task.status": "显示工作状态", + "java.action.navigateToSuperImplementation": "转到父类实现", + "java.action.showTypeHierarchy": "显示类型层次结构", + "java.action.showClassHierarchy": "显示类的继承关系", + "java.action.showSupertypeHierarchy": "显示父类层次结构", + "java.action.showSubtypeHierarchy": "显示子类层次结构", + "java.action.changeBaseType": "基于此类型" +} \ No newline at end of file From 8c4fa79ab492d3b784135ccd6cf8a3aaec7ed565 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Wed, 12 May 2021 17:34:52 +0800 Subject: [PATCH 059/708] Disable extension in virtual workspaces Signed-off-by: Yan Zhang --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index a37170fe9..52efe9dd2 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "java.home", "java.jdt.ls.vmargs" ] - } + }, + "virtualWorkspaces": false }, "engines": { "vscode": "^1.53.2" From 0375939ce858d4ec6ff785f05f4a4bac15d09767 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 26 Aug 2021 20:30:09 -0400 Subject: [PATCH 060/708] Permit usage of javaagent (no prompt) if resource not in workspace - Fixes #1965 Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 7 ++++--- src/settings.ts | 11 ++++++++--- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 0f1d3976b..aeb33c11f 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -6,7 +6,7 @@ import * as os from 'os'; import * as fs from 'fs'; import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient/node'; import { RequirementsData } from './requirements'; -import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag } from './settings'; +import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag, isInWorkspaceFolder } from './settings'; import { logger } from './log'; import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils'; import { workspace, ExtensionContext } from 'vscode'; @@ -65,11 +65,12 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp } let vmargsCheck = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue; if (vmargsCheck !== undefined) { + const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0 const agentFlag = getJavaagentFlag(vmargsCheck); - if (agentFlag !== null) { + if (agentFlag !== null && (isWorkspaceTrusted === undefined || !isWorkspaceTrusted)) { const keyVmargs = getKey(IS_WORKSPACE_VMARGS_ALLOWED, context.storagePath, vmargsCheck); const key = context.globalState.get(keyVmargs); - if (key !== true) { + if (key !== true && (workspace.workspaceFolders && isInWorkspaceFolder(agentFlag, workspace.workspaceFolders))) { vmargsCheck = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').globalValue; } } diff --git a/src/settings.ts b/src/settings.ts index b53367a69..ccc3719b7 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,7 +1,7 @@ 'use strict'; import * as path from 'path'; -import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable } from 'vscode'; +import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; import { getJavaConfiguration } from './utils'; @@ -141,11 +141,12 @@ export async function checkJavaPreferences(context: ExtensionContext) { } const vmargs = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue; if (vmargs !== undefined) { + const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0 const agentFlag = getJavaagentFlag(vmargs); - if (agentFlag !== null) { + if (agentFlag !== null && (isWorkspaceTrusted === undefined || !isWorkspaceTrusted)) { const keyVmargs = getKey(IS_WORKSPACE_VMARGS_ALLOWED, context.storagePath, vmargs); const vmargsVerified = globalState.get(keyVmargs); - if (vmargsVerified === undefined || vmargsVerified === null) { + if ((vmargsVerified === undefined || vmargsVerified === null) && (workspace.workspaceFolders && isInWorkspaceFolder(agentFlag, workspace.workspaceFolders))) { await window.showErrorMessage(`Security Warning! The java.jdt.ls.vmargs variable defined in ${env.appName} settings includes the (${agentFlag}) javagent preference. Do you allow it to be used?`, disallow, allow).then(async selection => { if (selection === allow) { globalState.update(keyVmargs, true); @@ -187,6 +188,10 @@ export function getJavaagentFlag(vmargs) { return agentFlag; } +export function isInWorkspaceFolder(loc: string, workspaceFolders: readonly WorkspaceFolder[]) { + return !path.isAbsolute(loc) || workspaceFolders.some(dir => loc.startsWith(dir.uri.fsPath)); +} + export enum ServerMode { STANDARD = 'Standard', LIGHTWEIGHT = 'LightWeight', From a4078860ca06d410707f679a881b429a36f14fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Aur=C3=A9lien=20Pupier?= Date: Mon, 6 Sep 2021 10:28:40 +0200 Subject: [PATCH 061/708] Remove redundant use of `await` on a return value.sonarlint(typescript:S4326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Aurélien Pupier --- src/findJavaRuntimes.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/findJavaRuntimes.ts b/src/findJavaRuntimes.ts index 9e9a011b8..0100b849d 100644 --- a/src/findJavaRuntimes.ts +++ b/src/findJavaRuntimes.ts @@ -275,7 +275,7 @@ async function findLinkedFile(file: string): Promise { if (!await fse.pathExists(file) || !(await fse.lstat(file)).isSymbolicLink()) { return file; } - return await findLinkedFile(await fse.readlink(file)); + return findLinkedFile(await fse.readlink(file)); } export async function getJavaVersion(javaHome: string): Promise { From 83eff2123238105925be569af1bb5b9e0d34f276 Mon Sep 17 00:00:00 2001 From: 0dinD Date: Mon, 6 Sep 2021 18:20:33 +0200 Subject: [PATCH 062/708] Move semantic tokens to LSP implementation Signed-off-by: 0dinD --- README.md | 3 +- package-lock.json | 34 +++++------ package.json | 8 +-- src/commands.ts | 8 --- src/extension.ts | 3 - src/semanticTokenProvider.ts | 111 ---------------------------------- src/standardLanguageClient.ts | 1 - src/utils.ts | 13 ---- 8 files changed, 19 insertions(+), 162 deletions(-) delete mode 100644 src/semanticTokenProvider.ts diff --git a/README.md b/README.md index b154b5536..656573177 100644 --- a/README.md +++ b/README.md @@ -173,7 +173,6 @@ The following settings are supported: Default launch mode is `Hybrid`. Legacy mode is `Standard` * `java.sources.organizeImports.starThreshold`: Specifies the number of imports added before a star-import declaration is used, default is 99. * `java.sources.organizeImports.staticStarThreshold`: Specifies the number of static imports added before a star-import declaration is used, default is 99. -* `java.semanticHighlighting.enabled`: Enable/disable [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) for Java files. Defaults to `true`. * `java.imports.gradle.wrapper.checksums`: Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers. * `java.project.importOnFirstTimeStartup`: Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time. Supported values are `disabled` (never imports), `interactive` (asks to import or not), `automatic` (always imports). Default to `automatic`. * `java.project.importHint`: Enable/disable the server-mode switch information, when Java projects import is skipped on startup. Defaults to `true`. @@ -197,7 +196,7 @@ The following settings are supported: Semantic Highlighting =============== -[Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) is controlled by the `java.semanticHighlighting.enabled` preference. When enabled, it fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience different small issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. +[Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). Troubleshooting =============== diff --git a/package-lock.json b/package-lock.json index 217ddf389..dfc3f01f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2528,7 +2528,7 @@ "dev": true, "optional": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.5" }, "dependencies": { "minimist": { @@ -2676,7 +2676,7 @@ "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", - "minimist": "^1.2.0", + "minimist": "^1.2.5", "strip-json-comments": "~2.0.1" }, "dependencies": { @@ -6731,13 +6731,13 @@ "dev": true }, "vscode-languageclient": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.0.0.tgz", - "integrity": "sha512-P9AXdAPlsCgslpP9pRxYPqkNYV7Xq8300/aZDpO35j1fJm/ncize8iGswzYlcvFw5DQUx4eVk+KvfXdL0rehNg==", + "version": "7.1.0-next.5", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.1.0-next.5.tgz", + "integrity": "sha512-TpzpAhpdCNJHaLzptFRs54xsU6xTmaiVPCse0W0rRB5jJBPjOBKilrFPMMm/sJA0y8Yxa9sOvZaNu6WPg3dYAw==", "requires": { "minimatch": "^3.0.4", "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.16.0" + "vscode-languageserver-protocol": "3.17.0-next.6" }, "dependencies": { "semver": { @@ -6779,25 +6779,25 @@ } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.0-next.6", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.6.tgz", + "integrity": "sha512-f1kGsoOpISB5jSqQNeMDl2446enxVahyux2e5vZap6pu/TC+2UlvPT4DCR0gPph95KOQZweL9zq1SzLoPdqhuA==", "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "7.0.0-next.1", + "vscode-languageserver-types": "3.17.0-next.2" }, "dependencies": { "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "version": "7.0.0-next.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-7.0.0-next.1.tgz", + "integrity": "sha512-dEmliPZGbSyIcEeKRGzosCy7y7zsc8FXg1l5BBOGgMUbemlo3vUnsa2GFqpILJwJvlbvkRcF2QASNwIlKe9J7g==" } } }, "vscode-languageserver-types": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", - "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + "version": "3.17.0-next.2", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", + "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" }, "vscode-test": { "version": "1.4.0", diff --git a/package.json b/package.json index 52efe9dd2..fe863ad9f 100644 --- a/package.json +++ b/package.json @@ -710,12 +710,6 @@ "scope": "window", "minimum": 1 }, - "java.semanticHighlighting.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the semantic highlighting.", - "scope": "window" - }, "java.imports.gradle.wrapper.checksums": { "type": "array", "items": { @@ -1115,7 +1109,7 @@ "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "vscode-languageclient": "7.0.0", + "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/commands.ts b/src/commands.ts index 8fe8e8988..2bbc5ac2a 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -230,14 +230,6 @@ export namespace Commands { * Get all java projects root path in URI format */ export const GET_ALL_JAVA_PROJECTS = 'java.project.getAll'; - /** - * Temporary command for Semantic Highlighting. To remove when LSP v3.16 is ready. - */ - export const PROVIDE_SEMANTIC_TOKENS = 'java.project.provideSemanticTokens'; - /** - * Temporary command to fetch Semantic Tokens Legend. To remove when LSP v3.16 is ready. - */ - export const GET_SEMANTIC_TOKENS_LEGEND = 'java.project.getSemanticTokensLegend'; /** * Command to switch between standard mode and lightweight mode. */ diff --git a/src/extension.ts b/src/extension.ts index f9e591722..08c5795ad 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -24,7 +24,6 @@ import { StandardLanguageClient } from './standardLanguageClient'; import { apiManager } from './apiManager'; import { SnippetCompletionProvider } from './snippetCompletionProvider'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; -import { registerSemanticTokensProvider } from './semanticTokenProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -325,8 +324,6 @@ export function activate(context: ExtensionContext): Promise { syntaxClient.stop(); fileEventHandler.setServerStatus(true); runtimeStatusBarProvider.initialize(context.storagePath); - // temporary implementation Semantic Highlighting before it is part of LSP - registerSemanticTokensProvider(context); } commands.executeCommand('setContext', 'java:serverMode', event); }); diff --git a/src/semanticTokenProvider.ts b/src/semanticTokenProvider.ts deleted file mode 100644 index 6469b6ffd..000000000 --- a/src/semanticTokenProvider.ts +++ /dev/null @@ -1,111 +0,0 @@ -import * as vscode from 'vscode'; -import { Commands } from './commands'; -import { getJavaConfiguration, waitForDocumentChangesToEnd } from './utils'; - -export function registerSemanticTokensProvider(context: vscode.ExtensionContext): void { - if (!vscode.languages.registerDocumentSemanticTokensProvider) { // in case Theia doesn't support this API - return; - } - - context.subscriptions.push(semanticTokensProvider); - context.subscriptions.push(vscode.workspace.onDidChangeConfiguration((e) => { - if (e.affectsConfiguration('java.semanticHighlighting.enabled')) { - if (isSemanticHighlightingEnabled()) { - semanticTokensProvider.enable(); - } - else { - semanticTokensProvider.disable(); - } - } - })); - - if (isSemanticHighlightingEnabled()) { - semanticTokensProvider.enable(); - } -} - -function isSemanticHighlightingEnabled(): boolean { - const config = getJavaConfiguration(); - const section = 'semanticHighlighting.enabled'; - return config.get(section); -} - -class SemanticTokensProvider implements vscode.DocumentSemanticTokensProvider, vscode.Disposable { - - private disposable?: vscode.Disposable; - private tokensChangedEmitter?: vscode.EventEmitter; - private shouldClearTokens: boolean = false; - - public get onDidChangeSemanticTokens(): vscode.Event { - return this.tokensChangedEmitter?.event; - } - - public async provideDocumentSemanticTokens(document: vscode.TextDocument, token: vscode.CancellationToken): Promise { - if (this.shouldClearTokens) { - // We can return early here to skip the request, but just to be - // safe we should also check this case after requesting tokens, - // in case the provider was disbled during the request itself. - this.disable(true); - return undefined; - } - - const versionBeforeRequest: number = document.version; - const response = await vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.PROVIDE_SEMANTIC_TOKENS, document.uri.toString()); - const versionAfterRequest: number = document.version; - - if (this.shouldClearTokens) { - this.disable(true); - return undefined; - } - if (versionBeforeRequest !== versionAfterRequest) { - await waitForDocumentChangesToEnd(document); - throw new Error("busy"); - } - if (token.isCancellationRequested) { - return undefined; - } - if (!response || !response.data) { - return undefined; - } - return new vscode.SemanticTokens(new Uint32Array(response.data), response.resultId); - } - - public async enable(): Promise { - this.shouldClearTokens = false; - this.tokensChangedEmitter = new vscode.EventEmitter(); - this.disposable = vscode.languages.registerDocumentSemanticTokensProvider( - [ - { language: 'java', scheme: 'file' }, - { language: 'java', scheme: 'jdt' } - ], - this, - await this.getSemanticTokensLegend() - ); - } - - public disable(tokensAreCleared?: boolean): void { - if (tokensAreCleared) { - this.disposable?.dispose(); - this.tokensChangedEmitter?.dispose(); - } - else { - this.shouldClearTokens = true; - this.tokensChangedEmitter?.fire(); - } - } - - public dispose(): void { - this.disable(); - } - - private async getSemanticTokensLegend(): Promise { - const response = await vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_SEMANTIC_TOKENS_LEGEND) as vscode.SemanticTokensLegend; - if (response && response.tokenModifiers !== undefined && response.tokenTypes !== undefined) { - return new vscode.SemanticTokensLegend(response.tokenTypes, response.tokenModifiers); - } - return undefined; - } - -} - -const semanticTokensProvider = new SemanticTokensProvider(); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 41ead2690..fab25460a 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -90,7 +90,6 @@ export class StandardLanguageClient { // Create the language client and start the client. this.languageClient = new LanguageClient('java', extensionName, serverOptions, clientOptions); - this.languageClient.registerProposedFeatures(); this.languageClient.onReady().then(() => { activationProgressNotification.showProgress(); diff --git a/src/utils.ts b/src/utils.ts index 805004d3a..1cbac47ac 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -113,16 +113,3 @@ function parseToStringGlob(patterns: string[]): string { return `{${patterns.join(",")}}`; } - -export async function waitForDocumentChangesToEnd(document: TextDocument): Promise { - let version = document.version; - return new Promise((resolve) => { - const iv = setInterval(() => { - if (document.version === version) { - clearInterval(iv); - resolve(); - } - version = document.version; - }, 400); - }); -} From af081b987ba4f2eb715607d3b928965f1a2bb33f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Sep 2021 10:42:20 +0000 Subject: [PATCH 063/708] Bump ini from 1.3.5 to 1.3.8 Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.8. - [Release notes](https://github.com/isaacs/ini/releases) - [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.8) Signed-off-by: dependabot[bot] --- package-lock.json | 62 +++++++++++++++++++++-------------------------- 1 file changed, 27 insertions(+), 35 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfc3f01f3..cbbe1ee81 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2468,12 +2468,6 @@ "dev": true, "optional": true }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, "is-fullwidth-code-point": { "version": "1.0.0", "bundled": true, @@ -4725,21 +4719,29 @@ "dev": true }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -7158,26 +7160,16 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "5.0.0-security.0" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } + } + }, + "yargs-parser": { + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, "yargs-unparser": { @@ -7314,9 +7306,9 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "15.0.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", + "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", "dev": true, "requires": { "camelcase": "^5.0.0", From 8a464dd3af382ebed17ed78c00022402256a612f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 15 Sep 2021 21:10:30 -0400 Subject: [PATCH 064/708] Add Changelog for 0.82.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index c33783496..5bfedbb41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## 0.82.0 (September 16th, 2021) + * performance - completion: optimize the performance of SnippetCompletionProposal. See [JLS#1838](https://github.com/eclipse/eclipse.jdt.ls/issues/1838). + * performance - completion: listing constructors is slow. See [JLS#1836](https://github.com/eclipse/eclipse.jdt.ls/issues/1836). + * enhancement - Support Kotlin Gradle files. See [#632](https://github.com/redhat-developer/vscode-java/issues/632) & [JLS#449](https://github.com/eclipse/eclipse.jdt.ls/issues/449). + * enhancement - "Open Call Hierarchy" does not jump to the reference where it is invoked at. See [#2044](https://github.com/redhat-developer/vscode-java/issues/2044). + * enhancement - Semantic highlighting is not available in lightweight mode. See [#1999](https://github.com/redhat-developer/vscode-java/issues/1999). + * enhancement - Add additional variables for java.template snippets. See [#1987](https://github.com/redhat-developer/vscode-java/issues/1987). + * enhancement - Add 'hashCode()' and 'equals()' to Show Fixes for type declaration. See [JLS#1842](https://github.com/eclipse/eclipse.jdt.ls/pull/1842). + * enhancement - Permit usage of javaagent when resource is not in workspace. See [#1965](https://github.com/redhat-developer/vscode-java/issues/1965). + * enhancement - Add functionality to exclude files that will not be tracked for changes. See [JLS#1847](https://github.com/eclipse/eclipse.jdt.ls/issues/1847). + * bug fix - Some typeComment variables can't be parsed. See [#2052](https://github.com/redhat-developer/vscode-java/issues/2052). + * bug fix - Generate Getters source action is broken from within a record. See [JLS#1392](https://github.com/eclipse/eclipse.jdt.ls/issues/1392). + * bug fix - Java LS sometimes hangs while loading a gradle project. See [#2088](https://github.com/redhat-developer/vscode-java/issues/2088). + * bug fix - java.project.exclusion is not working as expected. See [#2075](https://github.com/redhat-developer/vscode-java/issues/2075). + * bug fix - Fix regression for Gradle project compilation. See [#2071](https://github.com/redhat-developer/vscode-java/issues/2071). + * bug fix - Get correct Java project in multi-module case. See [JLS#1865](https://github.com/eclipse/eclipse.jdt.ls/pull/1865). + * debt - Update target platform to 2021-09 (4.21) Release. See [JLS#1880](https://github.com/eclipse/eclipse.jdt.ls/pull/1880). + * other - Support import from configuration files. See [JLS#1840](https://github.com/eclipse/eclipse.jdt.ls/pull/1840). + * other - Support 3.16 semantic tokens. See [JLS#1678](https://github.com/eclipse/eclipse.jdt.ls/issues/1678). + * other - Remove redundant use of `await` on a return. See [#2100](https://github.com/redhat-developer/vscode-java/pull/2100). + * other - Disable extension in virtual workspaces. See [#1942](https://github.com/redhat-developer/vscode-java/pull/1942). + ## 0.81.0 (August 17th, 2021) * enhancement - 'Create method' code action for method reference. See [JLS#1464](https://github.com/eclipse/eclipse.jdt.ls/issues/1464). * enhancement - Show job status via progress notification on start. See [#2022](https://github.com/redhat-developer/vscode-java/pull/2022) From 0c0272c34eac311f1181463f44761ba195d60d6a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 17 Sep 2021 09:53:40 -0400 Subject: [PATCH 065/708] Upversion to 0.83.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index cbbe1ee81..e0ea71bbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.82.0", + "version": "0.83.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index fe863ad9f..14f999b5b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.82.0", + "version": "0.83.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": true, From 53664df6e51d8c682699806bde6c711a7d0e164f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 10 Sep 2021 17:45:17 -0400 Subject: [PATCH 066/708] Fix watch_server & dev_server tasks - Fixes #230 - Update watch_server task to comply with Gulp v4 Signed-off-by: Roland Grunberg --- gulpfile.js | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 1eb1cf823..7a871e917 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -3,6 +3,7 @@ const gulp = require('gulp'); const cp = require('child_process'); const decompress = require('gulp-decompress'); const download = require('gulp-download'); +const glob = require('glob'); const fse = require('fs-extra'); const path = require('path'); const server_dir = '../eclipse.jdt.ls'; @@ -27,26 +28,22 @@ gulp.task('build_server', function(done) { }); gulp.task('dev_server', function(done) { - let command = mvnw() +' -Pserver-distro,fast -o clean package '; - if(isLinux()){ - command +='-Denvironment.os=linux -Denvironment.ws=gtk -Denvironment.arch=x86_64'; - } - else if(isMac()){ - command += '-Denvironment.os=macosx -Denvironment.ws=cocoa -Denvironment.arch=x86_64'; - } - else if(isWin()){ - command += '-Denvironment.os=win32 -Denvironment.ws=win32 -Denvironment.arch=x86_64'; - } + let command = mvnw() +' -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package'; console.log('executing '+command); cp.execSync(command, {cwd:server_dir, stdio:[0,1,2]} ); - gulp.src(server_dir +'/org.eclipse.jdt.ls.product/distro/*.tar.gz') - .pipe(decompress()) - .pipe(gulp.dest('./server')) + glob.Glob(server_dir +'/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar', + (_error, sources) => { + glob.Glob('./server/plugins/org.eclipse.jdt.ls.core_*.jar', + (_error, targets) => { + console.log('Copying '+sources[0]+ ' to '+targets[0]); + fse.copy(sources[0], targets[0]); + }); + }); done(); }); gulp.task('watch_server',function(done) { - gulp.watch(server_dir+'/org.eclipse.jdt.ls.core/**/*.java',['dev_server']); + gulp.watch(server_dir+'/org.eclipse.jdt.ls.core/**/*.java', gulp.series('dev_server')); done(); }); From f5d03c4d31425b13b631b691e7d027409e53181d Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 9 Sep 2021 00:29:44 +0200 Subject: [PATCH 067/708] Support Java 17 Signed-off-by: Snjezana Peco --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 656573177..1ae186a62 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 16 +* Supports code from Java 1.5 to Java 17 * Maven pom.xml project support * Basic Gradle Java project support (Android not supported) * Standalone Java files support @@ -76,8 +76,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-16", - "path": "/path/to/jdk-16", + "name": "JavaSE-17", + "path": "/path/to/jdk-17", "default": true }, ] diff --git a/package.json b/package.json index 14f999b5b..c18c24e47 100644 --- a/package.json +++ b/package.json @@ -653,7 +653,8 @@ "JavaSE-13", "JavaSE-14", "JavaSE-15", - "JavaSE-16" + "JavaSE-16", + "JavaSE-17" ], "description": "Java Execution Environment name. Must be unique." }, From 816dc9b58f87004849ba8811b0a55a0cfa3b2010 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 30 Sep 2021 18:43:21 +0200 Subject: [PATCH 068/708] Fix Open Java Formatter Settings Signed-off-by: Snjezana Peco --- src/extension.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 08c5795ad..1b21371c9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -673,7 +673,7 @@ async function openFormatter(extensionPath) { const formatterUrl: string = getJavaConfiguration().get('format.settings.url'); if (formatterUrl && formatterUrl.length > 0) { if (isRemote(formatterUrl)) { - commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(formatterUrl)); + return commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(formatterUrl)); } else { const document = getPath(formatterUrl); if (document && fs.existsSync(document)) { @@ -742,7 +742,7 @@ function openDocument(extensionPath, formatterUrl, defaultFormatter, relativePat } function isRemote(f) { - return f !== null && f.startsWith('http:/') || f.startsWith('https:/'); + return f !== null && f.startsWith('http:/') || f.startsWith('https:/') || f.startsWith('file:/'); } async function addFormatter(extensionPath, formatterUrl, defaultFormatter, relativePath) { From c24cd6461feb00fc1f69dde6081a7bc8f3d1c3af Mon Sep 17 00:00:00 2001 From: 0dinD Date: Fri, 8 Oct 2021 14:14:25 +0200 Subject: [PATCH 069/708] Remove embedded TextMate grammar Signed-off-by: 0dinD --- package.json | 7 - syntaxes/java.tmLanguage.json | 1853 --------------------------------- 2 files changed, 1860 deletions(-) delete mode 100644 syntaxes/java.tmLanguage.json diff --git a/package.json b/package.json index c18c24e47..eb84a9135 100644 --- a/package.json +++ b/package.json @@ -135,13 +135,6 @@ "path": "./snippets/java.json" } ], - "grammars": [ - { - "language": "java", - "scopeName": "source.java", - "path": "./syntaxes/java.tmLanguage.json" - } - ], "jsonValidation": [ { "fileMatch": "package.json", diff --git a/syntaxes/java.tmLanguage.json b/syntaxes/java.tmLanguage.json deleted file mode 100644 index a55b5d43a..000000000 --- a/syntaxes/java.tmLanguage.json +++ /dev/null @@ -1,1853 +0,0 @@ -{ - "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-java/blob/master/grammars/java.cson", - "If you want to provide a fix or improvement, please create a pull request against the original repository.", - "Once accepted there, we are happy to receive an update request." - ], - "version": "https://github.com/atom/language-java/commit/57c3371a69f7d903c88e5b20dfa039420ed8172c", - "scopeName": "source.java", - "name": "Java", - "fileTypes": [ - "java", - "bsh" - ], - "patterns": [ - { - "begin": "\\b(package)\\b\\s*", - "beginCaptures": { - "1": { - "name": "keyword.other.package.java" - } - }, - "end": "\\s*(;)", - "endCaptures": { - "1": { - "name": "punctuation.terminator.java" - } - }, - "name": "meta.package.java", - "contentName": "storage.modifier.package.java", - "patterns": [ - { - "include": "#comments" - }, - { - "match": "(?<=\\.)\\s*\\.|\\.(?=\\s*;)", - "name": "invalid.illegal.character_not_allowed_here.java" - }, - { - "match": "(?", - "endCaptures": { - "0": { - "name": "punctuation.bracket.angle.java" - } - }, - "patterns": [ - { - "match": "\\b(extends|super)\\b", - "name": "storage.modifier.$1.java" - }, - { - "match": "(?>>?|~|\\^)", - "name": "keyword.operator.bitwise.java" - }, - { - "match": "((&|\\^|\\||<<|>>>?)=)", - "name": "keyword.operator.assignment.bitwise.java" - }, - { - "match": "(===?|!=|<=|>=|<>|<|>)", - "name": "keyword.operator.comparison.java" - }, - { - "match": "([+*/%-]=)", - "name": "keyword.operator.assignment.arithmetic.java" - }, - { - "match": "(=)", - "name": "keyword.operator.assignment.java" - }, - { - "match": "(\\-\\-|\\+\\+)", - "name": "keyword.operator.increment-decrement.java" - }, - { - "match": "(\\-|\\+|\\*|\\/|%)", - "name": "keyword.operator.arithmetic.java" - }, - { - "match": "(!|&&|\\|\\|)", - "name": "keyword.operator.logical.java" - }, - { - "match": "(\\||&)", - "name": "keyword.operator.bitwise.java" - }, - { - "match": "\\b(const|goto)\\b", - "name": "keyword.reserved.java" - } - ] - }, - "lambda-expression": { - "patterns": [ - { - "match": "->", - "name": "storage.type.function.arrow.java" - } - ] - }, - "member-variables": { - "begin": "(?=private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)", - "end": "(?=\\=|;)", - "patterns": [ - { - "include": "#storage-modifiers" - }, - { - "include": "#variables" - }, - { - "include": "#primitive-arrays" - }, - { - "include": "#object-types" - } - ] - }, - "method-call": { - "begin": "(\\.)\\s*([A-Za-z_$][\\w$]*)\\s*(\\()", - "beginCaptures": { - "1": { - "name": "punctuation.separator.period.java" - }, - "2": { - "name": "entity.name.function.java" - }, - "3": { - "name": "punctuation.definition.parameters.begin.bracket.round.java" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.definition.parameters.end.bracket.round.java" - } - }, - "name": "meta.method-call.java", - "patterns": [ - { - "include": "#code" - } - ] - }, - "methods": { - "begin": "(?!new)(?=[\\w<].*\\s+)(?=([^=/]|/(?!/))+\\()", - "end": "(})|(?=;)", - "endCaptures": { - "1": { - "name": "punctuation.section.method.end.bracket.curly.java" - } - }, - "name": "meta.method.java", - "patterns": [ - { - "include": "#storage-modifiers" - }, - { - "begin": "(\\w+)\\s*(\\()", - "beginCaptures": { - "1": { - "name": "entity.name.function.java" - }, - "2": { - "name": "punctuation.definition.parameters.begin.bracket.round.java" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.definition.parameters.end.bracket.round.java" - } - }, - "name": "meta.method.identifier.java", - "patterns": [ - { - "include": "#parameters" - }, - { - "include": "#parens" - }, - { - "include": "#comments" - } - ] - }, - { - "include": "#generics" - }, - { - "begin": "(?=\\w.*\\s+\\w+\\s*\\()", - "end": "(?=\\s+\\w+\\s*\\()", - "name": "meta.method.return-type.java", - "patterns": [ - { - "include": "#all-types" - }, - { - "include": "#parens" - }, - { - "include": "#comments" - } - ] - }, - { - "include": "#throws" - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.method.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.method.body.java", - "patterns": [ - { - "include": "#code" - } - ] - }, - { - "include": "#comments" - } - ] - }, - "module": { - "begin": "((open)\\s)?(module)\\s+(\\w+)", - "end": "}", - "beginCaptures": { - "1": { - "name": "storage.modifier.java" - }, - "3": { - "name": "storage.modifier.java" - }, - "4": { - "name": "entity.name.type.module.java" - } - }, - "endCaptures": { - "0": { - "name": "punctuation.section.module.end.bracket.curly.java" - } - }, - "name": "meta.module.java", - "patterns": [ - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.module.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.module.body.java", - "patterns": [ - { - "match": "\\b(requires|transitive|exports|opens|to|uses|provides|with)\\b", - "name": "keyword.module.java" - } - ] - } - ] - }, - "numbers": { - "patterns": [ - { - "match": "(?x)\n\\b(?)?(\\()", - "beginCaptures": { - "1": { - "name": "storage.modifier.java" - }, - "2": { - "name": "entity.name.type.record.java" - }, - "3": { - "patterns": [ - { - "include": "#generics" - } - ] - }, - "4": { - "name": "punctuation.definition.parameters.begin.bracket.round.java" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.definition.parameters.end.bracket.round.java" - } - }, - "name": "meta.record.identifier.java", - "patterns": [ - { - "include": "#code" - } - ] - }, - { - "begin": "(implements)\\s", - "beginCaptures": { - "1": { - "name": "storage.modifier.implements.java" - } - }, - "end": "(?=\\s*\\{)", - "name": "meta.definition.class.implemented.interfaces.java", - "patterns": [ - { - "include": "#object-types-inherited" - }, - { - "include": "#comments" - } - ] - }, - { - "include": "#record-body" - } - ] - }, - "record-body": { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.class.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "name": "meta.record.body.java", - "patterns": [ - { - "include": "#record-constructor" - }, - { - "include": "#class-body" - } - ] - }, - "record-constructor": { - "begin": "(?!new)(?=[\\w<].*\\s+)(?=([^\\(=/]|/(?!/))+(?={))", - "end": "(})|(?=;)", - "endCaptures": { - "1": { - "name": "punctuation.section.method.end.bracket.curly.java" - } - }, - "name": "meta.method.java", - "patterns": [ - { - "include": "#storage-modifiers" - }, - { - "begin": "(\\w+)", - "beginCaptures": { - "1": { - "name": "entity.name.function.java" - } - }, - "end": "(?=\\s*{)", - "name": "meta.method.identifier.java", - "patterns": [ - { - "include": "#comments" - } - ] - }, - { - "include": "#comments" - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.method.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.method.body.java", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - }, - "static-initializer": { - "patterns": [ - { - "include": "#anonymous-block-and-instance-initializer" - }, - { - "match": "static", - "name": "storage.modifier.java" - } - ] - }, - "storage-modifiers": { - "match": "\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|volatile|default|strictfp|sealed|non-sealed)\\b", - "name": "storage.modifier.java" - }, - "strings": { - "patterns": [ - { - "begin": "\"", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.java" - } - }, - "end": "\"", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.java" - } - }, - "name": "string.quoted.double.java", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.java" - } - ] - }, - { - "begin": "'", - "beginCaptures": { - "0": { - "name": "punctuation.definition.string.begin.java" - } - }, - "end": "'", - "endCaptures": { - "0": { - "name": "punctuation.definition.string.end.java" - } - }, - "name": "string.quoted.single.java", - "patterns": [ - { - "match": "\\\\.", - "name": "constant.character.escape.java" - } - ] - } - ] - }, - "throws": { - "begin": "throws", - "beginCaptures": { - "0": { - "name": "storage.modifier.java" - } - }, - "end": "(?={|;)", - "name": "meta.throwables.java", - "patterns": [ - { - "match": ",", - "name": "punctuation.separator.delimiter.java" - }, - { - "match": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*", - "name": "storage.type.java" - } - ] - }, - "try-catch-finally": { - "patterns": [ - { - "begin": "\\btry\\b", - "beginCaptures": { - "0": { - "name": "keyword.control.try.java" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.try.end.bracket.curly.java" - } - }, - "name": "meta.try.java", - "patterns": [ - { - "begin": "\\(", - "beginCaptures": { - "0": { - "name": "punctuation.section.try.resources.begin.bracket.round.java" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.section.try.resources.end.bracket.round.java" - } - }, - "name": "meta.try.resources.java", - "patterns": [ - { - "include": "#code" - } - ] - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.try.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.try.body.java", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - }, - { - "begin": "\\b(catch)\\b", - "beginCaptures": { - "1": { - "name": "keyword.control.catch.java" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.catch.end.bracket.curly.java" - } - }, - "name": "meta.catch.java", - "patterns": [ - { - "include": "#comments" - }, - { - "begin": "\\(", - "beginCaptures": { - "0": { - "name": "punctuation.definition.parameters.begin.bracket.round.java" - } - }, - "end": "\\)", - "endCaptures": { - "0": { - "name": "punctuation.definition.parameters.end.bracket.round.java" - } - }, - "contentName": "meta.catch.parameters.java", - "patterns": [ - { - "include": "#comments" - }, - { - "include": "#storage-modifiers" - }, - { - "begin": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*", - "beginCaptures": { - "0": { - "name": "storage.type.java" - } - }, - "end": "(\\|)|(?=\\))", - "endCaptures": { - "1": { - "name": "punctuation.catch.separator.java" - } - }, - "patterns": [ - { - "include": "#comments" - }, - { - "match": "\\w+", - "captures": { - "0": { - "name": "variable.parameter.java" - } - } - } - ] - } - ] - }, - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.catch.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.catch.body.java", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - }, - { - "begin": "\\bfinally\\b", - "beginCaptures": { - "0": { - "name": "keyword.control.finally.java" - } - }, - "end": "}", - "endCaptures": { - "0": { - "name": "punctuation.section.finally.end.bracket.curly.java" - } - }, - "name": "meta.finally.java", - "patterns": [ - { - "begin": "{", - "beginCaptures": { - "0": { - "name": "punctuation.section.finally.begin.bracket.curly.java" - } - }, - "end": "(?=})", - "contentName": "meta.finally.body.java", - "patterns": [ - { - "include": "#code" - } - ] - } - ] - } - ] - }, - "variables": { - "begin": "(?x)\n(?=\n \\b\n (\n (void|boolean|byte|char|short|int|float|long|double)\n |\n (?>(\\w+\\.)*[A-Z_]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n \\b\n \\s*\n (\n <[\\w<>,\\.?\\s\\[\\]]*> # e.g. `HashMap`, or `List`\n )?\n \\s*\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|:|;)\n)", - "end": "(?=\\=|:|;)", - "name": "meta.definition.variable.java", - "patterns": [ - { - "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(;|:|=|,))", - "captures": { - "1": { - "name": "variable.other.definition.java" - } - } - }, - { - "include": "#all-types" - }, - { - "include": "#code" - } - ] - }, - "variables-local": { - "begin": "(?=\\b(var)\\b\\s+[A-Za-z_$][\\w$]*\\s*(=|:|;))", - "end": "(?=\\=|:|;)", - "name": "meta.definition.variable.local.java", - "patterns": [ - { - "match": "\\bvar\\b", - "name": "storage.type.local.java" - }, - { - "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(=|:|;))", - "captures": { - "1": { - "name": "variable.other.definition.java" - } - } - }, - { - "include": "#code" - } - ] - } - } -} From a312fc74352ac454c61b829ca132f342c502b40c Mon Sep 17 00:00:00 2001 From: 0dinD Date: Sun, 3 Oct 2021 16:44:40 +0200 Subject: [PATCH 070/708] Add semantic tokens for records and constructors Signed-off-by: 0dinD --- package.json | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index eb84a9135..dcfd09a0d 100644 --- a/package.json +++ b/package.json @@ -60,13 +60,23 @@ }, { "id": "annotationMember", - "superType": "function", + "superType": "method", "description": "Style for annotation members." }, { "id": "modifier", "superType": "keyword", "description": "Style for modifier keywords." + }, + { + "id": "record", + "superType": "class", + "description": "Style for records." + }, + { + "id": "recordComponent", + "superType": "parameter", + "description": "Style for record components." } ], "semanticTokenModifiers": [ @@ -97,6 +107,10 @@ { "id": "importDeclaration", "description": "Style for symbols that are part of an import declaration." + }, + { + "id": "constructor", + "description": "Style for symbols that are constructors." } ], "semanticTokenScopes": [ @@ -115,6 +129,9 @@ ], "keyword.documentation": [ "keyword.other.documentation.javadoc.java" + ], + "*.constructor": [ + "entity.name.function.java" ] } } From 05ebcab14ad167445b7c63c944eaeb056ccfb93e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 13 Oct 2021 11:12:31 +0200 Subject: [PATCH 071/708] Fix recommended tsl-problem-matcher id Signed-off-by: Fred Bricon --- .vscode/extensions.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index a6514529b..013d72ed7 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,6 @@ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp "ms-vscode.vscode-typescript-tslint-plugin", "EditorConfig.EditorConfig", - "eamodio.tsl-problem-matcher" + "amodio.tsl-problem-matcher" ] } From 828bc4423e62469f2e86f067fc0aa926ad19dd1e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 13 Oct 2021 11:32:11 +0200 Subject: [PATCH 072/708] Exclude jdk.*, org.graalvm.* and io.micrometer.shaded.* from completion Signed-off-by: Fred Bricon --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index dcfd09a0d..498826916 100644 --- a/package.json +++ b/package.json @@ -481,7 +481,10 @@ "default": [ "java.awt.*", "com.sun.*", - "sun.*" + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*" ], "scope": "window" }, From b3cb840c4634e1e99258e9fe94d4954ac37a704a Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 13 Oct 2021 18:58:23 +0200 Subject: [PATCH 073/708] Speedup local jdt.ls build - deletes existing ./server folder - avoid downloading gradle checksums when not needed Signed-off-by: Fred Bricon --- CONTRIBUTING.md | 12 ++++++------ gulpfile.js | 6 ++++-- package.json | 1 + 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 809ebce8e..74edcb553 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -79,7 +79,7 @@ This assumes that you are starting on the `vscode-java` directory ``` **\*Optional:** -You can run faster server builds during development by calling `./node_modules/.bin/gulp dev_server` script instead, this will build server binaries that are required by your host OS only. You can also use `npm run watch-server` which will build and place them on the extension for Java changes. These commands run Maven in offline mode, so you might need to run `build-server` at least once, to fetch all the dependencies. +You can run faster server builds during development by calling `npm run fast-build-server` script instead, this will build server binaries that are required by your host OS only. You can also use `npm run watch-server` which will build and place them on the extension for Java changes. These commands run Maven in offline mode, so you might need to run `build-server` at least once, to fetch all the dependencies. This will build and place the binaries under the `server` folder. Alternately you can download and use the latest snapshot build from [Eclipse ™ JDT Language Server](https://github.com/eclipse/eclipse.jdt.ls) project with the following @@ -93,7 +93,7 @@ Below are the details about how to set up the JDT Language Server in different I ### B-1) Setting up the JDT Language Server in VS Code 1) Please install [Eclipse PDE support](https://marketplace.visualstudio.com/items?itemName=yaozheng.vscode-pde) extension in your VS Code first. The PDE extension's home page provides more usage details about _Reload Target Platform_, _Run JUnit Plug-in Test_, _Run Eclipse Application_. -2) Open VS Code on the `eclipse.jdt.ls` folder. The PDE extension will work with Java extension together to automatically load the eclipse.jdt.ls project. Check the status of the language tools on the lower right corner. It should show ready (thumbs up) as the image below. +2) Open VS Code on the `eclipse.jdt.ls` folder. The PDE extension will work with Java extension together to automatically load the eclipse.jdt.ls project. Check the status of the language tools on the lower right corner. It should show ready (thumbs up) as the image below. ![status indicator](images/statusMarker.png) ### B-2) Setting up the JDT Language Server in Eclipse @@ -140,7 +140,7 @@ While developing the language server and the extension, you don't need to deploy 1. Open VSCode on the `vscode-java` folder -2. In the debug viewlet, run the launch _Launch Extension - Remote Server_ +2. In the debug viewlet, run the launch _Launch Extension - Remote Server_ ![Remote Server](images/changelog/RemoteServer.png) 3. The extension will open a socket on port 3333 and will wait for the JDT language server to connect @@ -148,10 +148,10 @@ While developing the language server and the extension, you don't need to deploy ### b) _Launch Debug Server - Server Side_ - With the client side **(vscode-java) running**, you can start the remote server in your preferred IDE. - - Start the remote server via VS Code. + - Start the remote server via VS Code. ![Remote Server In VS Code](images/changelog/RemoteServerInVSCode.png) - - Start the remote server via Eclipse. + - Start the remote server via Eclipse. ![Remote Server In Eclipse](images/changelog/DebugRemoteServer.png) - In the debug console of VSCode you can see if the connection was successful. @@ -160,7 +160,7 @@ While developing the language server and the extension, you don't need to deploy - Modify `SERVER_PORT` to specify the port the JDT LS server should connect to. ## C-2) The language server opens the connection first, and waits the extension to connect to it. -- Start the language server via `jdt.ls.socket-stream` launch configuration in VS Code or Eclipse +- Start the language server via `jdt.ls.socket-stream` launch configuration in VS Code or Eclipse ![Socket Steam in VS Code](images/changelog/SocketSteamInVSCode.png) - Start the extenion via _Launch Extension - JDTLS Client_ in VS Code diff --git a/gulpfile.js b/gulpfile.js index 7a871e917..0dabd7a08 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -13,6 +13,7 @@ const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); //... gulp.task('download_server', function(done) { + fse.removeSync('./server'); download("http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz") .pipe(decompress()) .pipe(gulp.dest('./server')); @@ -20,7 +21,8 @@ gulp.task('download_server', function(done) { }); gulp.task('build_server', function(done) { - cp.execSync(mvnw()+ ' -Pserver-distro clean package', {cwd:server_dir, stdio:[0,1,2]} ); + fse.removeSync('./server'); + cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') .pipe(decompress()) .pipe(gulp.dest('./server')); @@ -28,7 +30,7 @@ gulp.task('build_server', function(done) { }); gulp.task('dev_server', function(done) { - let command = mvnw() +' -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package'; + let command = mvnw() + ' -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package -Declipse.jdt.ls.skipGradleChecksums'; console.log('executing '+command); cp.execSync(command, {cwd:server_dir, stdio:[0,1,2]} ); glob.Glob(server_dir +'/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar', diff --git a/package.json b/package.json index 498826916..d13bb70f4 100644 --- a/package.json +++ b/package.json @@ -1090,6 +1090,7 @@ "pretest": "npm run compile", "test": "node ./out/test/runtest.js", "build-server": "./node_modules/.bin/gulp build_server", + "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", "tslint": "tslint -p ." }, From 3eaac3a257d6f36cae89b11d2c0394a1610cb4af Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Tue, 19 Oct 2021 09:50:59 +0800 Subject: [PATCH 074/708] Adopt new createStatusBarItem API Signed-off-by: Sheng Chen --- package-lock.json | 82 ++++++++++++++++++++++++--------- package.json | 2 + src/runtimeStatusBarProvider.ts | 15 +++++- src/serverStatusBarProvider.ts | 19 +++++++- 4 files changed, 91 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index e0ea71bbe..20001efae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -94,6 +94,12 @@ "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", "dev": true }, + "@types/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==", + "dev": true + }, "@types/vscode": { "version": "1.53.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz", @@ -4719,9 +4725,9 @@ "dev": true }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -4739,9 +4745,9 @@ } }, "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", @@ -4850,6 +4856,12 @@ "requires": { "path-parse": "^1.0.6" } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true } } }, @@ -5657,10 +5669,12 @@ } }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } }, "semver-greatest-satisfied-range": { "version": "1.1.0", @@ -6358,6 +6372,12 @@ "supports-color": "^5.3.0" } }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -6421,6 +6441,12 @@ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", "dev": true }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -7160,16 +7186,26 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "5.0.0-security.0" - } - }, - "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + } } }, "yargs-unparser": { @@ -7306,9 +7342,9 @@ }, "dependencies": { "yargs-parser": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", - "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { "camelcase": "^5.0.0", diff --git a/package.json b/package.json index d13bb70f4..955c0c7fa 100644 --- a/package.json +++ b/package.json @@ -1100,6 +1100,7 @@ "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", + "@types/semver": "^7.3.8", "@types/vscode": "^1.53.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", @@ -1125,6 +1126,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "vscode-languageclient": "7.1.0-next.5", + "semver": "^7.3.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index 34b57bd46..a682bfae3 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -1,10 +1,11 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, Event, workspace } from "vscode"; +import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import * as path from "path"; import { apiManager } from "./apiManager"; +import * as semver from "semver"; class RuntimeStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; @@ -12,11 +13,15 @@ class RuntimeStatusBarProvider implements Disposable { private fileProjectMapping: Map; private storagePath: string | undefined; private disposables: Disposable[]; + // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. + // See: https://github.com/redhat-developer/vscode-java/issues/1982 + private isAdvancedStatusBarItem: boolean; constructor() { this.javaProjects = new Map(); this.fileProjectMapping = new Map(); this.disposables = []; + this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); } public async initialize(storagePath?: string): Promise { @@ -25,7 +30,13 @@ class RuntimeStatusBarProvider implements Disposable { this.storagePath = Uri.file(path.join(storagePath, "..", "..")).fsPath; } - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = (window.createStatusBarItem as any)("java.runtimeStatus", StatusBarAlignment.Right, 0); + (this.statusBarItem as any).name = "Java Runtime Configuration"; + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); + } + let projectUriStrings: string[]; try { projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 8ab6ee23a..7a7a41159 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -1,18 +1,30 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment } from "vscode"; +import { StatusBarItem, window, StatusBarAlignment, version } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import { ServerMode } from "./settings"; +import * as semver from "semver"; class ServerStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; + // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. + // See: https://github.com/redhat-developer/vscode-java/issues/1982 + private isAdvancedStatusBarItem: boolean; constructor() { - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); + this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = (window.createStatusBarItem as any)("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); + } } public showLightWeightStatus(): void { + if (this.isAdvancedStatusBarItem) { + (this.statusBarItem as any).name = "Java Server Mode"; + } this.statusBarItem.text = StatusIcon.LightWeight; this.statusBarItem.command = { title: "Switch to Standard mode", @@ -24,6 +36,9 @@ class ServerStatusBarProvider implements Disposable { } public showStandardStatus(): void { + if (this.isAdvancedStatusBarItem) { + (this.statusBarItem as any).name = "Java Server Status"; + } this.statusBarItem.text = StatusIcon.Busy; this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; this.statusBarItem.tooltip = ""; From 481aab26c07c76a0cc7b2e78da5dc6444e658db6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 18 Oct 2021 16:10:56 -0400 Subject: [PATCH 075/708] Add Changelog for 1.0.0 - Bump version to 1.0.0 and turn off "preview" flag Signed-off-by: Roland Grunberg --- CHANGELOG.md | 24 ++++++++++++++++++++++++ package-lock.json | 2 +- package.json | 4 ++-- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bfedbb41..a5254c80b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 1.0.0 (October 19th, 2021) + * performance - completion: optimize the index engine for the scenario "complete on type name". See [JLS#1846](https://github.com/eclipse/eclipse.jdt.ls/issues/1846). + * enhancement - Support Java 17. See [#2102](https://github.com/redhat-developer/vscode-java/pull/2102). + * enhancement - Add semantic token types for Records. See [#2125](https://github.com/redhat-developer/vscode-java/issues/2125). + * enhancement - Support highlight for constructor call. See [#2124](https://github.com/redhat-developer/vscode-java/issues/2124). + * enhancement - Add Getter and Setter to Show Fixes for type declaration. See [JLS#1883](https://github.com/eclipse/eclipse.jdt.ls/pull/1883). + * enhancement - Add `toString()` to Show Fixes for type declaration. See [JLS#1903](https://github.com/eclipse/eclipse.jdt.ls/pull/1903). + * enhancement - Add a `codeAction` to generate the `serialVersionUID` field. See [JLS#1892](https://github.com/eclipse/eclipse.jdt.ls/issues/1892). + * enhancement - i18n: support Chinese. See [#2027](https://github.com/redhat-developer/vscode-java/pull/2027). + * enhancement - Adopt new createStatusBarItem API. See [#2083](https://github.com/redhat-developer/vscode-java/pull/2083). + * bug fix - Missing space in anonymous type completion proposal. See [#2147](https://github.com/redhat-developer/vscode-java/issues/2147). + * bug fix - Packages are not filtered from completion despite the `java.completion.filteredTypes` configuration. See [JLS#1904](https://github.com/eclipse/eclipse.jdt.ls/issues/1904). + * bug fix - Exclude `jdk.*`, `org.graalvm.*` and `io.micrometer.shaded.*` from completion. See [#2164](https://github.com/redhat-developer/vscode-java/pull/2164). + * bug fix - "Project Configuration Update" is broken due to `JDTUtils.isExcludedFile()` is not working. See [JLS#1909](https://github.com/eclipse/eclipse.jdt.ls/issues/1909). + * bug fix - NPE on `::new` method refs (Cannot invoke `org.eclipse.jdt.core.dom.IMethodBinding.isSynthetic()` because "functionalMethod" is null). See [JLS#1885](https://github.com/eclipse/eclipse.jdt.ls/issues/1885). + * bug fix - Go to definition doesn't compute/find results on methods inside an anonymous class. See [JLS#1813](https://github.com/eclipse/eclipse.jdt.ls/issues/1813). + * bug fix - Assign all to fields generates wrong field names in some corner cases. See [JLS#1031](https://github.com/eclipse/eclipse.jdt.ls/issues/1031). + * bug fix - Import quickfix disappear on save. See [#2127](https://github.com/redhat-developer/vscode-java/issues/2127). + * bug fix - Module descriptor syntax coloring should be improved. See [#1384](https://github.com/redhat-developer/vscode-java/issues/1384). + * bug fix - Fix Open Java Formatter Settings. See [#2138](https://github.com/redhat-developer/vscode-java/pull/2138). + * bug fix - Code is compiled with preview features for no reason, causing the project not to run. See [#1971](https://github.com/redhat-developer/vscode-java/issues/1971). + * build - npm run watch fails with unresolved dependencies. See [#230](https://github.com/redhat-developer/vscode-java/issues/230). + * debt - Update org.jsoup 1.9.2 to 1.14.2. See [JLS#1884](https://github.com/eclipse/eclipse.jdt.ls/pull/1884). + ## 0.82.0 (September 16th, 2021) * performance - completion: optimize the performance of SnippetCompletionProposal. See [JLS#1838](https://github.com/eclipse/eclipse.jdt.ls/issues/1838). * performance - completion: listing constructors is slow. See [JLS#1836](https://github.com/eclipse/eclipse.jdt.ls/issues/1836). diff --git a/package-lock.json b/package-lock.json index 20001efae..96e4f4c70 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "0.83.0", + "version": "1.0.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 955c0c7fa..edf0c186e 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,10 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "0.83.0", + "version": "1.0.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", - "preview": true, + "preview": false, "enableProposedApi": false, "capabilities": { "untrustedWorkspaces": { From 204c0ad10677d12ac7f20b9b35df14f33181402e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 19 Oct 2021 19:23:42 -0400 Subject: [PATCH 076/708] Upversion to 1.1.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 96e4f4c70..80a2e6323 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.0.0", + "version": "1.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index edf0c186e..2b06f22ee 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.0.0", + "version": "1.1.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 2be3381aad67d0ff4a8d4703e39b41f121d5b29d Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Wed, 27 Oct 2021 21:01:19 +0200 Subject: [PATCH 077/708] Set o.e.j.c.formatter.join_wrapped_lines/join_lines_in_comments=false by default Signed-off-by: Snjezana Peco --- formatters/eclipse-formatter.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/formatters/eclipse-formatter.xml b/formatters/eclipse-formatter.xml index 93ee48d1b..786c72e9d 100644 --- a/formatters/eclipse-formatter.xml +++ b/formatters/eclipse-formatter.xml @@ -280,8 +280,8 @@ - - + + From 7b06273165fac1494fa7b444843edbae9ed562e6 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 28 Oct 2021 01:32:06 +0200 Subject: [PATCH 078/708] Set o.e.j.c.formatter.indent_switchstatements_compare_to_switch=true by default Signed-off-by: Snjezana Peco --- formatters/eclipse-formatter.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/formatters/eclipse-formatter.xml b/formatters/eclipse-formatter.xml index 786c72e9d..7f8c57d13 100644 --- a/formatters/eclipse-formatter.xml +++ b/formatters/eclipse-formatter.xml @@ -94,7 +94,7 @@ - + @@ -304,7 +304,7 @@ - + From 247b7db39dfd1e70e9b87d71f034479d5645f9cf Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 28 Oct 2021 20:51:44 +0200 Subject: [PATCH 079/708] Creating the formatter file fails silently if parent folder doesn't exist Signed-off-by: Snjezana Peco --- src/extension.ts | 25 ++++++++++++------------- src/utils.ts | 6 ++++-- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 1b21371c9..d9d35c6eb 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -13,7 +13,7 @@ import * as requirements from './requirements'; import { initialize as initializeRecommendation } from './recommendation'; import { Commands } from './commands'; import { ExtensionAPI, ClientStatus } from './extension.api'; -import { getJavaConfiguration, deleteDirectory, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, convertToGlob, getExclusionBlob } from './utils'; +import { getJavaConfiguration, deleteDirectory, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, convertToGlob, getExclusionBlob, ensureExists } from './utils'; import { onConfigurationChange, getJavaServerMode, ServerMode, ACTIVE_BUILD_TOOL_STATE } from './settings'; import { logger, initializeLogFile } from './log'; import glob = require('glob'); @@ -610,9 +610,7 @@ async function cleanWorkspace(workspacePath) { const doIt = 'Restart and delete'; window.showWarningMessage('Are you sure you want to clean the Java language server workspace?', 'Cancel', doIt).then(selection => { if (selection === doIt) { - if (!fs.existsSync(workspacePath)) { - fs.mkdirSync(workspacePath); - } + ensureExists(workspacePath); const file = path.join(workspacePath, cleanWorkspaceFileName); fs.closeSync(fs.openSync(file, 'w')); commands.executeCommand(Commands.RELOAD_WINDOW); @@ -690,9 +688,7 @@ async function openFormatter(extensionPath) { relativePath = fileName; } else { const root = path.join(extensionPath, '..', 'redhat.java'); - if (!fs.existsSync(root)) { - fs.mkdirSync(root); - } + ensureExists(root); file = path.join(root, fileName); } if (!fs.existsSync(file)) { @@ -765,9 +761,7 @@ async function addFormatter(extensionPath, formatterUrl, defaultFormatter, relat relativePath = fileName; } else { const root = path.join(extensionPath, '..', 'redhat.java'); - if (!fs.existsSync(root)) { - fs.mkdirSync(root); - } + ensureExists(root); f = path.join(root, fileName); } } else { @@ -780,9 +774,14 @@ async function addFormatter(extensionPath, formatterUrl, defaultFormatter, relat const action = 'Yes'; window.showWarningMessage(msg, action, 'No').then((selection) => { if (action === selection) { - fs.createReadStream(defaultFormatter) - .pipe(fs.createWriteStream(f)) - .on('finish', () => openDocument(extensionPath, f, defaultFormatter, relativePath)); + try { + ensureExists(path.dirname(f)); + fs.createReadStream(defaultFormatter) + .pipe(fs.createWriteStream(f)) + .on('finish', () => openDocument(extensionPath, f, defaultFormatter, relativePath)); + } catch (error) { + window.showErrorMessage(`Failed to create ${f}: ${error}`); + } } }); } else { diff --git a/src/utils.ts b/src/utils.ts index 1cbac47ac..a4b4898bb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -41,9 +41,11 @@ export function getTimestamp(file) { } export function ensureExists(folder) { - if (!fs.existsSync(folder)) { - fs.mkdirSync(folder); + if (fs.existsSync(folder)) { + return; } + ensureExists(path.dirname(folder)); + fs.mkdirSync(folder); } export function getBuildFilePatterns(): string[] { From e7f33b2c18f206733857c8c7b4d5d2eb5af2ca70 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 29 Oct 2021 09:56:42 -0400 Subject: [PATCH 080/708] Update mocha from 8.1.1 to 9.1.3 Signed-off-by: Roland Grunberg --- package-lock.json | 960 ++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 279 insertions(+), 683 deletions(-) diff --git a/package-lock.json b/package-lock.json index 80a2e6323..586533466 100644 --- a/package-lock.json +++ b/package-lock.json @@ -121,6 +121,12 @@ "winston": "*" } }, + "@ungap/promise-all-settled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", + "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", + "dev": true + }, "@webassemblyjs/ast": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", @@ -532,18 +538,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "array.prototype.map": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz", - "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.4" - } - }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -1245,7 +1239,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true }, "decode-uri-component": { "version": "0.2.0", @@ -1272,7 +1267,7 @@ "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", + "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, "requires": { "file-type": "^5.2.0", @@ -1291,7 +1286,7 @@ "decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", + "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, "requires": { "decompress-tar": "^4.1.0", @@ -1304,7 +1299,7 @@ "file-type": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", + "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true } } @@ -1312,7 +1307,7 @@ "decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", + "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, "requires": { "decompress-tar": "^4.1.1", @@ -1478,7 +1473,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -1523,9 +1518,9 @@ "dev": true }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "emojis-list": { @@ -1608,91 +1603,12 @@ "is-arrayish": "^0.2.1" } }, - "es-abstract": { - "version": "1.17.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz", - "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==", - "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.0", - "is-regex": "^1.1.0", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimend": "^1.0.1", - "string.prototype.trimstart": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - } - } - }, - "es-array-method-boxes-properly": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true - }, - "es-get-iterator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz", - "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==", - "dev": true, - "requires": { - "es-abstract": "^1.17.4", - "has-symbols": "^1.0.1", - "is-arguments": "^1.0.4", - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-string": "^1.0.5", - "isarray": "^2.0.5" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - }, - "isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - } - } - }, "es-module-lexer": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", "dev": true }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, "es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", @@ -2164,21 +2080,10 @@ "dev": true }, "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - }, - "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } - } + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true }, "flush-write-stream": { "version": "1.0.3", @@ -2528,7 +2433,7 @@ "dev": true, "optional": true, "requires": { - "minimist": "^1.2.5" + "minimist": "0.0.8" }, "dependencies": { "minimist": { @@ -2676,7 +2581,7 @@ "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", - "minimist": "^1.2.5", + "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" }, "dependencies": { @@ -3433,12 +3338,6 @@ } } }, - "is-arguments": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz", - "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -3460,12 +3359,6 @@ "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "is-callable": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz", - "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==", - "dev": true - }, "is-core-module": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", @@ -3495,12 +3388,6 @@ } } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true - }, "is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", @@ -3550,12 +3437,6 @@ "is-extglob": "^2.1.1" } }, - "is-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz", - "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==", - "dev": true - }, "is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", @@ -3589,9 +3470,9 @@ } }, "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true }, "is-plain-object": { @@ -3603,23 +3484,6 @@ "isobject": "^3.0.1" } }, - "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, "is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", @@ -3629,40 +3493,11 @@ "is-unc-path": "^1.0.0" } }, - "is-set": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz", - "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==", - "dev": true - }, "is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, - "is-string": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz", - "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==", - "dev": true - }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } - } - }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3678,6 +3513,12 @@ "unc-path-regex": "^0.1.2" } }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -3719,22 +3560,6 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "iterate-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz", - "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==", - "dev": true - }, - "iterate-value": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz", - "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==", - "dev": true, - "requires": { - "es-get-iterator": "^1.0.2", - "iterate-iterator": "^1.0.1" - } - }, "jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -3945,13 +3770,12 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "p-locate": "^5.0.0" } }, "lodash": { @@ -4089,41 +3913,62 @@ } }, "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "chalk": "^2.4.2" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" } } } @@ -4325,36 +4170,35 @@ } }, "mocha": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.1.1.tgz", - "integrity": "sha512-p7FuGlYH8t7gaiodlFreseLxEmxTgvyG9RgPHODFPySNhwUehu8NIb0vdSt3WFckSneswZ0Un5typYcWElk7HQ==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", + "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", "dev": true, "requires": { + "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.3.1", - "debug": "3.2.6", - "diff": "4.0.2", - "escape-string-regexp": "1.0.5", - "find-up": "4.1.0", - "glob": "7.1.6", + "chokidar": "3.5.2", + "debug": "4.3.2", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.1.7", "growl": "1.10.5", "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", "minimatch": "3.0.4", - "ms": "2.1.2", - "object.assign": "4.1.0", - "promise.allsettled": "1.0.2", - "serialize-javascript": "4.0.0", - "strip-json-comments": "3.0.1", - "supports-color": "7.1.0", + "ms": "2.1.3", + "nanoid": "3.1.25", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", "which": "2.0.2", - "wide-align": "1.1.3", - "workerpool": "6.0.0", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.1" + "workerpool": "6.1.5", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" }, "dependencies": { "ansi-colors": { @@ -4364,34 +4208,40 @@ "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "binary-extensions": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz", - "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, "braces": { @@ -4403,52 +4253,75 @@ "fill-range": "^7.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chokidar": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz", - "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==", + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", "dev": true, "requires": { - "anymatch": "~3.1.1", + "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.1.2", - "glob-parent": "~5.1.0", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", - "readdirp": "~3.3.0" + "readdirp": "~3.6.0" } }, "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dev": true, "requires": { - "ms": "^2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, "fill-range": { @@ -4461,19 +4334,19 @@ } }, "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "locate-path": "^5.0.0", + "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "fsevents": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", - "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, "optional": true }, @@ -4484,9 +4357,9 @@ "dev": true }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4522,15 +4395,15 @@ } }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4542,19 +4415,19 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, "requires": { - "p-locate": "^4.1.0" + "argparse": "^2.0.1" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, "normalize-path": { @@ -4563,69 +4436,39 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, "readdirp": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz", - "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "picomatch": "^2.0.7" + "picomatch": "^2.2.1" } }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^4.1.0" + "ansi-regex": "^5.0.1" } }, "supports-color": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz", - "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4649,109 +4492,36 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" } } } @@ -4799,6 +4569,12 @@ "dev": true, "optional": true }, + "nanoid": { + "version": "3.1.25", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", + "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "dev": true + }, "nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", @@ -4946,12 +4722,6 @@ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, - "object-inspect": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz", - "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==", - "dev": true - }, "object-keys": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", @@ -5061,21 +4831,21 @@ } }, "p-limit": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", - "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "p-try": "^2.0.0" + "yocto-queue": "^0.1.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "p-limit": "^3.0.2" } }, "p-try": { @@ -5129,9 +4899,9 @@ "dev": true }, "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true }, "path-is-absolute": { @@ -5190,9 +4960,9 @@ "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", "dev": true }, "pify": { @@ -5300,19 +5070,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "promise.allsettled": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz", - "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==", - "dev": true, - "requires": { - "array.prototype.map": "^1.0.1", - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1", - "function-bind": "^1.1.1", - "iterate-value": "^1.0.0" - } - }, "prr": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", @@ -5686,9 +5443,9 @@ } }, "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, "requires": { "randombytes": "^2.1.0" @@ -6043,29 +5800,9 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trimend": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", - "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, - "string.prototype.trimstart": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", - "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.5" - } - }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -6092,7 +5829,7 @@ "strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", + "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, "requires": { "is-natural-number": "^4.0.1" @@ -6105,9 +5842,9 @@ "dev": true }, "strip-json-comments": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", - "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true }, "supports-color": { @@ -7018,15 +6755,6 @@ "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, "wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -7130,9 +6858,9 @@ } }, "workerpool": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz", - "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", + "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", "dev": true }, "wrap-ansi": { @@ -7189,178 +6917,46 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "version": "5.0.0-security.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", + "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } } } }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, "yargs-unparser": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.1.tgz", - "integrity": "sha512-qZV14lK9MWsGCmcr7u5oXGH0dbGqZAIxTDrWXZDo5zUr6b6iUmelNKO6x6R1dQT24AH3LgRxJpr8meWy2unolA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, "requires": { - "camelcase": "^5.3.1", - "decamelize": "^1.2.0", - "flat": "^4.1.0", - "is-plain-obj": "^1.1.0", - "yargs": "^14.2.3" + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", + "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", "dev": true }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true - }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } } } }, diff --git a/package.json b/package.json index 2b06f22ee..9dc5fc2f7 100644 --- a/package.json +++ b/package.json @@ -1110,7 +1110,7 @@ "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", "minimist": ">=1.2.5", - "mocha": "^8.1.1", + "mocha": "^9.1.3", "ts-loader": "^5.3.1", "tslint": "^5.11.0", "typescript": "^4.2.4", From 2ac8f733e1ad299be88620b0c3b8b09a93055553 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 29 Oct 2021 09:59:35 -0400 Subject: [PATCH 081/708] Update ts-loader from 5.3.1 to 9.2.6 Signed-off-by: Roland Grunberg --- package-lock.json | 193 ++++++++++++++++++++++++---------------------- package.json | 2 +- 2 files changed, 102 insertions(+), 93 deletions(-) diff --git a/package-lock.json b/package-lock.json index 586533466..c8ad8a08f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -727,12 +727,6 @@ "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", "dev": true }, - "big.js": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", - "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", - "dev": true - }, "binary-extensions": { "version": "1.12.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", @@ -1523,12 +1517,6 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, "enabled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", @@ -1547,14 +1535,21 @@ } }, "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", + "integrity": "sha512-EGAbGvH7j7Xt2nc0E7D99La1OiEs8LnyimkRgwExpUMScN6O+3x9tIWs7PLQZVNx4YD+00skHXPXi1yQHpAmZA==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", + "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", + "dev": true + } } }, "enquirer": { @@ -1585,15 +1580,6 @@ "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", "dev": true }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2437,9 +2423,9 @@ }, "dependencies": { "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", "dev": true, "optional": true } @@ -3640,12 +3626,6 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json5": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", - "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", - "dev": true - }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -3758,17 +3738,6 @@ "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", "dev": true }, - "loader-utils": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", - "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", - "dev": true, - "requires": { - "big.js": "^3.1.3", - "emojis-list": "^2.0.0", - "json5": "^0.5.0" - } - }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4076,16 +4045,6 @@ } } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" - } - }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -5070,12 +5029,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", - "dev": true - }, "psl": { "version": "1.1.29", "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", @@ -5864,9 +5817,9 @@ } }, "tapable": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.1.tgz", - "integrity": "sha512-9I2ydhj8Z9veORCw5PRm4u9uebCn0mcCa6scWoNcbZ6dAtoo2618u9UUzxgmsCOreJpqDDuv61LvwofW7hLcBA==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, "tar-stream": { @@ -6077,51 +6030,107 @@ "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, "ts-loader": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.3.1.tgz", - "integrity": "sha512-fDDgpBH3SR8xlt2MasLdz3Yy611PQ/UY/KGyo7TgXhTRU/6sS8uGG0nJYnU1OdFBNKcoYbId1UTNaAOUn+i41g==", + "version": "9.2.6", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.2.6.tgz", + "integrity": "sha512-QMTC4UFzHmu9wU2VHZEmWWE9cUajjfcdcws+Gh7FhiO+Dy0RnR1bNz0YCHqhI0yRowCE9arVnNxYHqELOy9Hjw==", "dev": true, "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" }, "dependencies": { "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "color-convert": "^1.9.0" + "color-convert": "^2.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" } } } diff --git a/package.json b/package.json index 9dc5fc2f7..b3add245a 100644 --- a/package.json +++ b/package.json @@ -1111,7 +1111,7 @@ "lodash.template": ">=4.5.0", "minimist": ">=1.2.5", "mocha": "^9.1.3", - "ts-loader": "^5.3.1", + "ts-loader": "^9.2.6", "tslint": "^5.11.0", "typescript": "^4.2.4", "typescript-tslint-plugin": "^0.3.1", From d711d06081eb93d7bdb3151b6c22f965173419f3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 29 Oct 2021 10:27:02 -0400 Subject: [PATCH 082/708] Update to latest compatible dependencies of gulp 4.0.2 Signed-off-by: Roland Grunberg --- package-lock.json | 773 +++++++++------------------------------------- 1 file changed, 140 insertions(+), 633 deletions(-) diff --git a/package-lock.json b/package-lock.json index c8ad8a08f..190a952e8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -436,7 +436,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", "dev": true }, "arr-map": { @@ -580,9 +580,9 @@ } }, "async-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", - "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, "async-settle": { @@ -728,11 +728,21 @@ "dev": true }, "binary-extensions": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.12.0.tgz", - "integrity": "sha512-DYWGk01lDcxeS/K9IHPGWfT8PsJmbXRtRd2Sx72Tnb8pcYZQFF1oSDb8hJtS1vhp212q1Rzi5dUf9+nq0o9UIg==", + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -873,6 +883,16 @@ "unset-value": "^1.0.0" } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -1117,9 +1137,9 @@ "dev": true }, "component-emitter": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", - "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, "concat-map": { @@ -1140,9 +1160,9 @@ } }, "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" @@ -1155,13 +1175,21 @@ "dev": true }, "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", + "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "each-props": "^1.3.2", + "is-plain-object": "^5.0.0" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } } }, "core-util-is": { @@ -1474,9 +1502,9 @@ } }, "duplexify": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.1.tgz", - "integrity": "sha512-vM58DwdnKmty+FSPzT14K9JXb90H+j5emaR4KYbr2KTIz00WHGbWOe5ghQTx233ZCLZtrGDALzKwcjEtSt35mA==", + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { "end-of-stream": "^1.0.0", @@ -1798,18 +1826,18 @@ } }, "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", + "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "dev": true, "requires": { - "type": "^2.0.0" + "type": "^2.5.0" }, "dependencies": { "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", "dev": true } } @@ -1981,6 +2009,13 @@ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -2072,13 +2107,13 @@ "dev": true }, "flush-write-stream": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", - "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.4" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "fmtr": { @@ -2169,554 +2204,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", - "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true, - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "2.6.9", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ms": "2.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true, - "optional": true - } - } - }, - "ms": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.2.4", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "^2.1.2", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.10.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "^1.0.2", - "mkdirp": "^0.5.1", - "needle": "^2.2.1", - "nopt": "^4.0.1", - "npm-packlist": "^1.1.6", - "npmlog": "^4.0.2", - "rc": "^1.2.7", - "rimraf": "^2.6.1", - "semver": "^5.3.0", - "tar": "^4" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.5", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true, - "optional": true - } + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "function-bind": { @@ -2731,6 +2226,17 @@ "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, + "get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, "get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", @@ -3123,9 +2629,9 @@ } }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, "has-value": { @@ -3167,9 +2673,9 @@ "dev": true }, "homedir-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz", - "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", + "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, "requires": { "parse-passwd": "^1.0.0" @@ -3342,7 +2848,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, "is-core-module": { @@ -3415,9 +2921,9 @@ } }, "is-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", - "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -3647,9 +3153,9 @@ } }, "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", + "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", "dev": true }, "kind-of": { @@ -3677,9 +3183,9 @@ } }, "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, "requires": { "readable-stream": "^2.0.5" @@ -4522,9 +4028,9 @@ "dev": true }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", "dev": true, "optional": true }, @@ -4584,11 +4090,12 @@ }, "dependencies": { "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", "dev": true, "requires": { + "is-core-module": "^2.2.0", "path-parse": "^1.0.6" } }, @@ -4682,9 +4189,9 @@ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true }, "object-visit": { @@ -4697,15 +4204,15 @@ } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" } }, "object.defaults": { @@ -5177,9 +4684,9 @@ "dev": true }, "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", "dev": true }, "repeat-string": { @@ -5598,12 +5105,12 @@ "dev": true }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "dev": true, "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -5629,9 +5136,9 @@ } }, "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", "dev": true }, "sparkles": { @@ -5667,9 +5174,9 @@ } }, "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", + "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, "split-string": { @@ -5737,9 +5244,9 @@ "dev": true }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "string-width": { @@ -6905,9 +6412,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", + "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, "requires": { "camelcase": "^3.0.0", @@ -6922,13 +6429,13 @@ "string-width": "^1.0.2", "which-module": "^1.0.0", "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" + "yargs-parser": "^5.0.1" }, "dependencies": { "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { "camelcase": "^3.0.0", From dd6f0065b56c288625f14bad23b6584806791f01 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 4 Nov 2021 17:15:26 -0400 Subject: [PATCH 083/708] Use vsce 1.x since 2.x is not compatible with Node 12.x Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 2 +- Jenkinsfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index f4af33b0c..2af0252e6 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -20,7 +20,7 @@ jobs: with: java-version: '11' distribution: 'adopt' - - run: npm install -g typescript vsce + - run: npm install -g typescript "vsce@<2" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz - run: npm install diff --git a/Jenkinsfile b/Jenkinsfile index f893b401c..dc23d79fa 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ def installBuildRequirements(){ def nodeHome = tool 'nodejs-12.13.1' env.PATH="${env.PATH}:${nodeHome}/bin" sh "npm install -g typescript" - sh "npm install -g vsce" + sh 'npm install -g "vsce@<2"' } def buildVscodeExtension(){ From 78c82941606c1392f56b76491dc8aba87cd47faa Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Mon, 18 Oct 2021 17:30:49 +0200 Subject: [PATCH 084/708] Quickfixes should be available at the line level Signed-off-by: Snjezana Peco --- README.md | 4 ++++ package.json | 10 +++++++++ src/extension.ts | 53 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 65 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1ae186a62..10243ac4f 100644 --- a/README.md +++ b/README.md @@ -194,6 +194,10 @@ The following settings are supported: * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. +New in 1.1.0: + * `java.quickfix.showAt"` : Show quickfixes at the problem or line level. + + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index b3add245a..904b0043a 100644 --- a/package.json +++ b/package.json @@ -817,6 +817,16 @@ "markdownDescription": "Include method declarations from source files in symbol search.", "default": false, "scope": "window" + }, + "java.quickfix.showAt": { + "type": "string", + "enum": [ + "line", + "problem" + ], + "default": "line", + "description": "Show quickfixes at the problem or line level.", + "scope": "window" } } }, diff --git a/src/extension.ts b/src/extension.ts index d9d35c6eb..32f1a2921 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,8 +4,8 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind } from 'vscode'; -import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken } from 'vscode-languageclient'; +import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, Selection, CodeActionContext, Diagnostic } from 'vscode'; +import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; import { prepareExecutable } from './javaServerStarter'; @@ -205,6 +205,55 @@ export function activate(context: ExtensionContext): Promise { } }); } + }, + // https://github.com/redhat-developer/vscode-java/issues/2130 + // include all diagnostics for the current line in the CodeActionContext params for the performance reason + provideCodeActions: (document, range, context, token, next) => { + const client: any = standardClient.getClient(); + const params: CodeActionParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), + range: client.code2ProtocolConverter.asRange(range), + context: client.code2ProtocolConverter.asCodeActionContext(context) + }; + const showAt = getJavaConfiguration().get("quickfix.showAt"); + if (showAt === 'line' && range.start.line === range.end.line && range.start.character === range.end.character) { + const textLine = document.lineAt(params.range.start.line); + if (textLine !== null) { + const diagnostics = client.diagnostics.get(document.uri); + const allDiagnostics: Diagnostic[] = []; + for (const diagnostic of diagnostics) { + if (textLine.range.intersection(diagnostic.range)) { + const newLen = allDiagnostics.push(diagnostic); + if (newLen > 1000) { + break; + } + } + } + const codeActionContext: CodeActionContext = { + diagnostics: allDiagnostics, + only: context.only, + }; + params.context = client.code2ProtocolConverter.asCodeActionContext(codeActionContext); + } + } + return client.sendRequest(CodeActionRequest.type, params, token).then((values) => { + if (values === null) { + return undefined; + } + const result = []; + for (const item of values) { + if (Command.is(item)) { + result.push(client.protocol2CodeConverter.asCommand(item)); + } + else { + result.push(client.protocol2CodeConverter.asCodeAction(item)); + } + } + return result; + }, (error) => { + client.logFailedRequest(CodeActionRequest.type, error); + return Promise.resolve([]); + }); } }, revealOutputChannelOn: RevealOutputChannelOn.Never, From dd1fe09b1e998c26dacead64b4ca8fd86cc9a65c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 1 Nov 2021 12:57:07 -0400 Subject: [PATCH 085/708] Clean unused Java workspace storage folders - Clean unused workspace storage folders on startup - Create setting "java.configuration.workspaceCacheLimit" (disabled by default) to allow users to configure maximum number of days to preserve cached data - Fixes #2110 Signed-off-by: Roland Grunberg --- README.md | 3 ++- package.json | 10 ++++++++++ src/extension.ts | 33 +++++++++++++++++++++++++++++++-- 3 files changed, 43 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 10243ac4f..e2abc355a 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,8 @@ The following settings are supported: * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. New in 1.1.0: - * `java.quickfix.showAt"` : Show quickfixes at the problem or line level. + * `java.quickfix.showAt` : Show quickfixes at the problem or line level. + * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. Semantic Highlighting diff --git a/package.json b/package.json index 904b0043a..ac54ab9a0 100644 --- a/package.json +++ b/package.json @@ -343,6 +343,16 @@ "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", "scope": "window" }, + "java.configuration.workspaceCacheLimit": { + "type": [ + "null", + "integer" + ], + "default": null, + "minimum": 1, + "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", + "scope": "application" + }, "java.format.enabled": { "type": "boolean", "default": true, diff --git a/src/extension.ts b/src/extension.ts index 32f1a2921..d014e2e6d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -32,7 +32,8 @@ const standardClient: StandardLanguageClient = new StandardLanguageClient(); const jdtEventEmitter = new EventEmitter(); const cleanWorkspaceFileName = '.cleanWorkspace'; const extensionName = 'Language Support for Java'; -let clientLogFile; +let storagePath: string; +let clientLogFile: string; export class ClientErrorHandler implements ErrorHandler { private restarts: number[]; @@ -122,7 +123,7 @@ export function activate(context: ExtensionContext): Promise { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.notCoveredExecution.md`)), 'Not Covered Maven Plugin Execution', "", context); })); - let storagePath = context.storagePath; + storagePath = context.storagePath; if (!storagePath) { storagePath = getTempWorkspace(); } @@ -133,6 +134,8 @@ export function activate(context: ExtensionContext): Promise { initializeRecommendation(context); + cleanJavaWorkspaceStorage(); + return requirements.resolveRequirements(context).catch(error => { // show error window.showErrorMessage(error.message, error.label).then((selection) => { @@ -925,3 +928,29 @@ function isPrefix(parentPath: string, childPath: string): boolean { const relative = path.relative(parentPath, childPath); return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative); } +async function cleanJavaWorkspaceStorage() { + const configCacheLimit = getJavaConfiguration().get("configuration.workspaceCacheLimit"); + + if (!storagePath || !configCacheLimit) { + return; + } + + const limit: number = configCacheLimit * 86400000; // days to ms + const currTime = new Date().valueOf(); // ms since Epoch + // storage path is Code/User/workspaceStorage/${id}/redhat.java/ + const wsRoot = path.dirname(path.dirname(storagePath)); + + // find all folders of the form "redhat.java/jdt_ws/" and delete "redhat.java/" + if (fs.existsSync(wsRoot)) { + new glob.Glob(`${wsRoot}/**/jdt_ws`, (_err, matches) => { + for (const javaWSCache of matches) { + const entry = path.dirname(javaWSCache); + const entryModTime = fs.statSync(entry).mtimeMs; + if ((currTime - entryModTime) > limit) { + logger.info(`Removing workspace storage folder : ${entry}`); + deleteDirectory(entry); + } + } + }); + } +} From bdfb03e39e410df8a1b86b6630460db1258ae51b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 25 Aug 2021 14:42:53 -0400 Subject: [PATCH 086/708] Gracefully handle OutOfMemory errors - Detect and report java.lang.OutOfMemory errors - Fixes #1959 - Use -XX:+HeapDumpOnOutOfMemoryError & -XX:HeapDumpPath to generate a heap dump whose existence can notify the client that an OutOfMemory error has occured - Use chokidar library to listen for heap dump files - Once OutOfMemory error is detected, clean up the heap dumps (only if extension configured the location), and offer to increase JVM XmX value Signed-off-by: Roland Grunberg --- package-lock.json | 200 ++++++++------------------------------- package.json | 3 +- src/extension.ts | 60 +++++++++++- src/javaServerStarter.ts | 22 ++++- 4 files changed, 118 insertions(+), 167 deletions(-) diff --git a/package-lock.json b/package-lock.json index 190a952e8..da5628ea0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -379,7 +379,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -421,8 +420,7 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" }, "arr-filter": { "version": "1.1.2", @@ -436,8 +434,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" }, "arr-map": { "version": "2.0.2", @@ -451,8 +448,7 @@ "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, "array-differ": { "version": "1.0.0", @@ -535,8 +531,7 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "asn1": { "version": "0.2.4", @@ -556,8 +551,7 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" }, "async": { "version": "2.6.3", @@ -582,8 +576,7 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" }, "async-settle": { "version": "1.0.0", @@ -603,8 +596,7 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" }, "aws-sign2": { "version": "0.7.0", @@ -655,7 +647,6 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -670,7 +661,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -679,7 +669,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -688,7 +677,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -697,7 +685,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -730,14 +717,12 @@ "binary-extensions": { "version": "1.13.1", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, "bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, "optional": true, "requires": { "file-uri-to-path": "1.0.0" @@ -766,7 +751,6 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -784,7 +768,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -870,7 +853,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -928,7 +910,6 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, "requires": { "anymatch": "^2.0.0", "async-each": "^1.0.1", @@ -947,8 +928,7 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" } } }, @@ -962,7 +942,6 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -974,7 +953,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1053,7 +1031,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1139,8 +1116,7 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" }, "concat-map": { "version": "0.0.1", @@ -1171,8 +1147,7 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-props": { "version": "2.0.5", @@ -1253,7 +1228,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -1267,8 +1241,7 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { "version": "4.2.1", @@ -1401,7 +1374,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1411,7 +1383,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1420,7 +1391,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1429,7 +1399,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1780,7 +1749,6 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -1795,7 +1763,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1804,7 +1771,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1852,7 +1818,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -1862,7 +1827,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -1873,7 +1837,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -1889,7 +1852,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1898,7 +1860,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1907,7 +1868,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1916,7 +1876,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1925,7 +1884,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -2013,14 +1971,12 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, "optional": true }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -2032,7 +1988,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2127,8 +2082,7 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" }, "for-own": { "version": "1.0.0", @@ -2160,7 +2114,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -2207,7 +2160,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, "optional": true, "requires": { "bindings": "^1.5.0", @@ -2250,8 +2202,7 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" }, "getpass": { "version": "0.1.7", @@ -2279,7 +2230,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -2289,7 +2239,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, "requires": { "is-extglob": "^2.1.0" } @@ -2638,7 +2587,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -2649,7 +2597,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -2659,7 +2606,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2814,7 +2760,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2823,7 +2768,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2840,7 +2784,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, "requires": { "binary-extensions": "^1.0.0" } @@ -2848,8 +2791,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-core-module": { "version": "2.2.0", @@ -2864,7 +2806,6 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2873,7 +2814,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2884,7 +2824,6 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -2894,22 +2833,19 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -2924,7 +2860,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -2945,7 +2880,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2954,7 +2888,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2971,7 +2904,6 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -3026,8 +2958,7 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" }, "isarray": { "version": "1.0.0", @@ -3043,8 +2974,7 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" }, "isstream": { "version": "0.1.2", @@ -3161,8 +3091,7 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kuler": { "version": "1.0.1", @@ -3504,14 +3433,12 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -3561,7 +3488,6 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3617,7 +3543,6 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -3627,7 +3552,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -4009,8 +3933,7 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "multipipe": { "version": "0.1.2", @@ -4031,7 +3954,6 @@ "version": "2.15.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "dev": true, "optional": true }, "nanoid": { @@ -4044,7 +3966,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4111,7 +4032,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -4156,7 +4076,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4167,7 +4086,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4176,7 +4094,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4198,7 +4115,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, "requires": { "isobject": "^3.0.0" } @@ -4241,7 +4157,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, "requires": { "isobject": "^3.0.1" } @@ -4355,14 +4270,12 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" }, "path-exists": { "version": "4.0.0", @@ -4521,8 +4434,7 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "pretty-hrtime": { "version": "1.0.3", @@ -4630,7 +4542,6 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, "requires": { "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", @@ -4650,7 +4561,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -4680,20 +4590,17 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { "version": "1.0.1", @@ -4807,14 +4714,12 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" }, "rimraf": { "version": "2.7.1", @@ -4834,7 +4739,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, "requires": { "ret": "~0.1.10" } @@ -4921,7 +4825,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -4933,7 +4836,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4989,7 +4891,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -5005,7 +4906,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5014,7 +4914,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -5025,7 +4924,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -5036,7 +4934,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -5045,7 +4942,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5054,7 +4950,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -5063,7 +4958,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -5076,7 +4970,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -5085,7 +4978,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5101,14 +4993,12 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -5138,8 +5028,7 @@ "source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "dev": true + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" }, "sparkles": { "version": "1.0.1", @@ -5183,7 +5072,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -5220,7 +5108,6 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -5230,7 +5117,6 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5466,7 +5352,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5475,7 +5360,6 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5486,7 +5370,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -5498,7 +5381,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -5808,7 +5690,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -5835,7 +5716,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -5845,7 +5725,6 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -5856,7 +5735,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, "requires": { "isarray": "1.0.0" } @@ -5866,16 +5744,14 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" } } }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" }, "uri-js": { "version": "4.2.2", @@ -5889,14 +5765,12 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" }, "util-deprecate": { "version": "1.0.2", diff --git a/package.json b/package.json index ac54ab9a0..3a40302c5 100644 --- a/package.json +++ b/package.json @@ -1140,13 +1140,14 @@ "webpack-cli": "^4.6.0" }, "dependencies": { + "chokidar": "^2.1.8", "expand-home-dir": "^0.0.3", "find-java-home": "1.1.0", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "vscode-languageclient": "7.1.0-next.5", "semver": "^7.3.5", + "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/extension.ts b/src/extension.ts index d014e2e6d..d5eaa20ac 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,11 +4,11 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, Selection, CodeActionContext, Diagnostic } from 'vscode'; +import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; -import { prepareExecutable } from './javaServerStarter'; +import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; import * as requirements from './requirements'; import { initialize as initializeRecommendation } from './recommendation'; import { Commands } from './commands'; @@ -26,6 +26,7 @@ import { SnippetCompletionProvider } from './snippetCompletionProvider'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { markdownPreviewProvider } from "./markdownPreviewProvider"; +import * as chokidar from 'chokidar'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -78,6 +79,43 @@ export class ClientErrorHandler implements ErrorHandler { } } +/** + * Shows a message about the server crashing due to an out of memory issue + */ +async function showOOMMessage(): Promise { + const CONFIGURE = 'Increase Memory ..'; + const result = await window.showErrorMessage('The Java Language Server encountered an OutOfMemory error. Some language features may not work due to limited memory. ', + CONFIGURE); + if (result === CONFIGURE) { + let jvmArgs: string = getJavaConfiguration().get('jdt.ls.vmargs'); + const results = MAX_HEAP_SIZE_EXTRACTOR.exec(jvmArgs); + if (results && results[0]) { + const maxMemArg: string = results[0]; + const maxMemValue: number = Number(results[1]); + const newMaxMemArg: string = maxMemArg.replace(maxMemValue.toString(), (maxMemValue * 2).toString()); + jvmArgs = jvmArgs.replace(maxMemArg, newMaxMemArg); + await workspace.getConfiguration().update("java.jdt.ls.vmargs", jvmArgs, ConfigurationTarget.Workspace); + } + } +} + +const HEAP_DUMP_FOLDER_EXTRACTOR = new RegExp(`${HEAP_DUMP_LOCATION}(?:'([^']+)'|"([^"]+)"|([^\\s]+))`); +const MAX_HEAP_SIZE_EXTRACTOR = new RegExp(`-Xmx([0-9]+)[kKmMgG]`); + +/** + * Returns the heap dump folder defined in the user's preferences, or undefined if the user does not set the heap dump folder + * + * @returns the heap dump folder defined in the user's preferences, or undefined if the user does not set the heap dump folder + */ +function getHeapDumpFolderFromSettings(): string { + const jvmArgs: string = getJavaConfiguration().get('jdt.ls.vmargs'); + const results = HEAP_DUMP_FOLDER_EXTRACTOR.exec(jvmArgs); + if (!results || !results[0]) { + return undefined; + } + return results[1] || results[2] || results[3]; +} + export class OutputInfoCollector implements OutputChannel { private channel: OutputChannel = null; @@ -134,6 +172,8 @@ export function activate(context: ExtensionContext): Promise { initializeRecommendation(context); + registerOutOfMemoryDetection(storagePath); + cleanJavaWorkspaceStorage(); return requirements.resolveRequirements(context).catch(error => { @@ -928,6 +968,7 @@ function isPrefix(parentPath: string, childPath: string): boolean { const relative = path.relative(parentPath, childPath); return !!relative && !relative.startsWith('..') && !path.isAbsolute(relative); } + async function cleanJavaWorkspaceStorage() { const configCacheLimit = getJavaConfiguration().get("configuration.workspaceCacheLimit"); @@ -954,3 +995,18 @@ async function cleanJavaWorkspaceStorage() { }); } } + +function registerOutOfMemoryDetection(storagePath: string) { + const heapDumpFolder = getHeapDumpFolderFromSettings() || storagePath; + chokidar.watch(`${heapDumpFolder}/java_*.hprof`, { ignoreInitial: true }).on('add', path => { + // Only clean heap dumps that are generated in the default location. + // The default location is the extension global storage + // This means that if users change the folder where the heap dumps are placed, + // then they will be able to read the heap dumps, + // since they aren't immediately deleted. + if (heapDumpFolder === storagePath) { + fse.remove(path); + } + showOOMMessage(); + }); +} diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index aeb33c11f..7a111a135 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -9,11 +9,21 @@ import { RequirementsData } from './requirements'; import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag, isInWorkspaceFolder } from './settings'; import { logger } from './log'; import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils'; -import { workspace, ExtensionContext } from 'vscode'; +import { workspace, ExtensionContext, window } from 'vscode'; declare var v8debug; const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); +/** + * Argument that tells the program where to generate the heap dump that is created when an OutOfMemoryError is raised and `HEAP_DUMP` has been passed + */ + export const HEAP_DUMP_LOCATION = '-XX:HeapDumpPath='; + + /** + * Argument that tells the program to generate a heap dump file when an OutOfMemoryError is raised + */ + export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; + export function prepareExecutable(requirements: RequirementsData, workspacePath, javaConfig, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); @@ -95,6 +105,16 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp } parseVMargs(params, vmargs); + + if (!isSyntaxServer) { + if (vmargs.indexOf(HEAP_DUMP) < 0) { + params.push(HEAP_DUMP); + } + if (vmargs.indexOf(HEAP_DUMP_LOCATION) < 0) { + params.push(`${HEAP_DUMP_LOCATION}${context.storageUri.fsPath}`); + } + } + // "OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify // were deprecated in JDK 13 and will likely be removed in a future release." // so only add -noverify for older versions From b4f8b07d774acb17bee19f3b06f4d0364a72c682 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Mon, 15 Nov 2021 16:20:41 +0800 Subject: [PATCH 087/708] fix: Java build status spinning forever Signed-off-by: Yan Zhang --- src/serverTaskPresenter.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 87f814093..d20f4cf0a 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -39,6 +39,7 @@ async function getPresenterTaskExecution(): Promise { echo: false, focus: false }; + presenterTask.isBackground = true; return presenterTaskExecution = await tasks.executeTask(presenterTask); } From 5d4f8d58b8e919534800ca7bc41e8513c288f573 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 24 Nov 2021 13:12:27 +0800 Subject: [PATCH 088/708] Stop generating metadata files at project's root (#2153) * Stop generating metadata files at project's root Signed-off-by: Sheng Chen --- README.md | 1 + document/_java.metadataFilesGeneration.md | 21 +++++++++++++++++++++ package.json | 9 ++++++++- src/commands.ts | 2 ++ src/extension.ts | 8 ++++++-- src/javaServerStarter.ts | 4 ++++ src/settings.ts | 16 +++++++++++++--- 7 files changed, 55 insertions(+), 6 deletions(-) create mode 100644 document/_java.metadataFilesGeneration.md diff --git a/README.md b/README.md index e2abc355a..d67397054 100644 --- a/README.md +++ b/README.md @@ -197,6 +197,7 @@ The following settings are supported: New in 1.1.0: * `java.quickfix.showAt` : Show quickfixes at the problem or line level. * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. + * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. Semantic Highlighting diff --git a/document/_java.metadataFilesGeneration.md b/document/_java.metadataFilesGeneration.md new file mode 100644 index 000000000..6ab9646db --- /dev/null +++ b/document/_java.metadataFilesGeneration.md @@ -0,0 +1,21 @@ +# Metadata Files Generation + +We use the setting `java.import.generatesMetadataFilesAtProjectRoot` to control where the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated: +- `true`: Metadata files will be generated at the project's root. +- `false`: Metadata files will be generated at the workspace storage. To be specifc, the path will be: `/redhat.java/jdt_ws/.metadata/.plugins/org.eclipse.core.resources/.projects//`. + +By default, the setting is set to `false`. + +> If the metadata files exist in both the project root and the workspace storage, the extension will pick the files in the project root. + +## Change the setting value + +Depending on how you change the setting, some extra steps need to be taken to make the change take effect. + +### Change from `false` to `true` +You need to restart the client. + +### Change from `true` to `false` +1. Close the client. +2. Remove the metadata files in the project by your own. +3. Open the client. diff --git a/package.json b/package.json index 3a40302c5..2431d9e85 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "workspaceContains:build.gradle.kts", "workspaceContains:settings.gradle.kts", "workspaceContains:.classpath", - "onCommand:_java.templateVariables" + "onCommand:_java.templateVariables", + "onCommand:_java.metadataFilesGeneration" ], "main": "./dist/extension", "contributes": { @@ -376,6 +377,12 @@ ], "scope": "window" }, + "java.import.generatesMetadataFilesAtProjectRoot": { + "type": "boolean", + "markdownDescription": "Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Click [HERE](command:_java.metadataFilesGeneration) to learn how to change the setting to make it take effect.", + "default": false, + "scope": "window" + }, "java.project.referencedLibraries": { "type": [ "array", diff --git a/src/commands.ts b/src/commands.ts index 2bbc5ac2a..8cc000ee6 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -241,5 +241,7 @@ export namespace Commands { export const NOT_COVERED_EXECUTION = '_java.notCoveredExecution'; + export const MEATDATA_FILES_GENERATION = '_java.metadataFilesGeneration'; + export const RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open'; } diff --git a/src/extension.ts b/src/extension.ts index d5eaa20ac..e3726aa25 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -31,11 +31,12 @@ import * as chokidar from 'chokidar'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); const jdtEventEmitter = new EventEmitter(); -const cleanWorkspaceFileName = '.cleanWorkspace'; const extensionName = 'Language Support for Java'; let storagePath: string; let clientLogFile: string; +export const cleanWorkspaceFileName = '.cleanWorkspace'; + export class ClientErrorHandler implements ErrorHandler { private restarts: number[]; @@ -162,6 +163,9 @@ export function activate(context: ExtensionContext): Promise { })); storagePath = context.storagePath; + context.subscriptions.push(commands.registerCommand(Commands.MEATDATA_FILES_GENERATION, async () => { + markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.metadataFilesGeneration.md`)), 'Metadata Files Generation', "", context); + })); if (!storagePath) { storagePath = getTempWorkspace(); } @@ -365,7 +369,7 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, () => cleanWorkspace(workspacePath))); - context.subscriptions.push(onConfigurationChange()); + context.subscriptions.push(onConfigurationChange(workspacePath)); /** * Command to switch the server mode. Currently it only supports switch from lightweight to standard. diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 7a111a135..9c76796ce 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -73,6 +73,10 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp if (DEBUG) { params.push('-Dlog.level=ALL'); } + const metadataLocation = workspace.getConfiguration().get('java.import.generatesMetadataFilesAtProjectRoot'); + if (metadataLocation !== undefined) { + params.push(`-Djava.import.generatesMetadataFilesAtProjectRoot=${metadataLocation}`); + } let vmargsCheck = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue; if (vmargsCheck !== undefined) { const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0 diff --git a/src/settings.ts b/src/settings.ts index ccc3719b7..bb18d7eb6 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -1,9 +1,11 @@ 'use strict'; +import * as fs from 'fs'; import * as path from 'path'; import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; -import { getJavaConfiguration } from './utils'; +import { cleanWorkspaceFileName } from './extension'; +import { ensureExists, getJavaConfiguration } from './utils'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; export const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -23,7 +25,7 @@ export const ORGANIZE_IMPORTS_ON_PASTE = 'actionsOnPaste.organizeImports'; // ja let oldConfig: WorkspaceConfiguration = getJavaConfiguration(); const gradleWrapperPromptDialogs = []; -export function onConfigurationChange() { +export function onConfigurationChange(workspacePath: string) { return workspace.onDidChangeConfiguration(params => { if (!params.affectsConfiguration('java')) { return; @@ -32,7 +34,15 @@ export function onConfigurationChange() { if (newConfig.get(EXCLUDE_FILE_CONFIG)) { excludeProjectSettingsFiles(); } - if (hasJavaConfigChanged(oldConfig, newConfig)) { + + const isFsModeChanged: boolean = hasConfigKeyChanged('import.generatesMetadataFilesAtProjectRoot', oldConfig, newConfig); + if (isFsModeChanged) { + // Changing the FS mode needs a clean restart. + ensureExists(workspacePath); + const file = path.join(workspacePath, cleanWorkspaceFileName); + fs.closeSync(fs.openSync(file, 'w')); + } + if (isFsModeChanged || hasJavaConfigChanged(oldConfig, newConfig)) { const msg = `Java Language Server configuration changed, please restart ${env.appName}.`; const action = 'Restart Now'; const restartId = Commands.RELOAD_WINDOW; From 9fae3ecd133524dd8815c9ce7d1f918e76e972ba Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 24 Nov 2021 19:29:10 -0500 Subject: [PATCH 089/708] Add Changelog for 1.1.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a5254c80b..204882f19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## 1.1.0 (November 26th, 2021) + * enhancement - Stop generating metadata files at project's root. See [#618](https://github.com/redhat-developer/vscode-java/issues/618). + * enhancement - Quickfixes should be available at the line level. See [#2130](https://github.com/redhat-developer/vscode-java/issues/2130). + * enhancement - Explicitly report OutOfMemory error to user. See [#1959](https://github.com/redhat-developer/vscode-java/issues/1959). + * enhancement - Add option to clean out cached workspace data that is unused for a specified period of time. See [#2110](https://github.com/redhat-developer/vscode-java/issues/2110). + * enhancement - Add `Generate Constructors` to Show Fixes for type declaration. See [JLS#1937](https://github.com/eclipse/eclipse.jdt.ls/pull/1937). + * enhancement - Add `Override/Implement methods` to Show Fixes for type declaration. See [JLS#1932](https://github.com/eclipse/eclipse.jdt.ls/pull/1932). + * enhancement - Add "Surround With Try-With" code assist proposal. See [#2128](https://github.com/redhat-developer/vscode-java/issues/2128). + * enhancement - Formatter should indent `case` statements within a `switch` statement by default. See [#2185](https://github.com/redhat-developer/vscode-java/issues/2185). + * enhancement - Formatter should not join wrapped lines by default. See [#2181](https://github.com/redhat-developer/vscode-java/issues/2181). + * enhancement - Always show `Organize imports` in Quick Fixes for import declaration. See [JLS#1936](https://github.com/eclipse/eclipse.jdt.ls/pull/1936). + * bug fix - Java server refreshing the workspace (cleaning/building) for each restart. See [#2222](https://github.com/redhat-developer/vscode-java/issues/2222). + * bug fix - Problem messages can get offset by frequent changes to the document. See [#1633](https://github.com/redhat-developer/vscode-java/issues/1633). + * bug fix - Duplicate implement method quick fixes. See [JLS#1942](https://github.com/eclipse/eclipse.jdt.ls/issues/1942). + * bug fix - Malformed semantic tokens in some case. See [JLS#1922](https://github.com/eclipse/eclipse.jdt.ls/issues/1922). + * bug fix - Several errors reported for anonymous Object classes. See [JLS#1915](https://github.com/eclipse/eclipse.jdt.ls/issues/1915). + * bug fix - `if` with `instanceof` pattern match and `&&` breaks completion in nested `if`. See [JLS#1855](https://github.com/eclipse/eclipse.jdt.ls/issues/1855). + * bug fix - Java build status spinning forever. See [#2214](https://github.com/redhat-developer/vscode-java/pull/2214). + * bug fix - Creating the formatter file fails silently if parent folder doesn't exist. See [#2189](https://github.com/redhat-developer/vscode-java/issues/2189). + * debt - Don't use deprecated rangeLength property in handleChanged. See [JLS#1928](https://github.com/eclipse/eclipse.jdt.ls/pull/1928). + ## 1.0.0 (October 19th, 2021) * performance - completion: optimize the index engine for the scenario "complete on type name". See [JLS#1846](https://github.com/eclipse/eclipse.jdt.ls/issues/1846). * enhancement - Support Java 17. See [#2102](https://github.com/redhat-developer/vscode-java/pull/2102). From 244bf260f4197541089bb51f4a80820f19b7b1c8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 26 Nov 2021 16:32:19 -0500 Subject: [PATCH 090/708] Upversion to 1.2.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index da5628ea0..6a8e11594 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.1.0", + "version": "1.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 2431d9e85..709396a27 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.1.0", + "version": "1.2.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 530a3f6e197e2c6fba8f4733b78e8af263153f6c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 29 Nov 2021 11:47:35 -0500 Subject: [PATCH 091/708] Use workspacePath to derive temporary storage location - When no workspace is opened, storageUri will be null, but workspacePath will be within the temporary storage location - Fix #2231 Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 9c76796ce..847b7b81e 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -115,7 +115,7 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp params.push(HEAP_DUMP); } if (vmargs.indexOf(HEAP_DUMP_LOCATION) < 0) { - params.push(`${HEAP_DUMP_LOCATION}${context.storageUri.fsPath}`); + params.push(`${HEAP_DUMP_LOCATION}${path.dirname(workspacePath)}`); } } From c0d043e53057550e3075713f9c2f2d0fdc4902cf Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 10 Dec 2021 13:16:27 +0800 Subject: [PATCH 092/708] Support platform specific extension (#2183) * Support platform specific extension Signed-off-by: Jinbo Wang --- .gitignore | 1 + .vscode/launch.json | 20 +++++++ .vscodeignore | 1 + CONTRIBUTING.md | 6 ++ Jenkinsfile | 59 ++++++++++++++++---- README.md | 15 +++-- gulpfile.js | 104 +++++++++++++++++++++++++++++++++++ package-lock.json | 116 ++++++++++++++++++--------------------- package.json | 6 +- src/javaServerStarter.ts | 17 +++--- src/requirements.ts | 98 +++++++++++++++++++++++++++++---- 11 files changed, 341 insertions(+), 102 deletions(-) diff --git a/.gitignore b/.gitignore index f8bbe2a6f..7b4f85db1 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ node_modules undefined target dist +jre bin/ .settings .classpath diff --git a/.vscode/launch.json b/.vscode/launch.json index 2620f81f0..633056f87 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -110,6 +110,26 @@ "outFiles": ["${workspaceRoot}/out/**/*.js"], "preLaunchTask": "prepareLightweightTest", "postDebugTask": "cleanTestFolder" + }, + { + "args": [ + "${input:gulpTask}" + ], + "name": "Launch Gulp Task", + "program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js", + "request": "launch", + "skipFiles": [ + "/**" + ], + "type": "pwa-node" + } + ], + "inputs": [ + { + "id": "gulpTask", + "type": "promptString", + "description": "Name of the Gulp task to execute", + "default": "download_jre" } ] } diff --git a/.vscodeignore b/.vscodeignore index b06821d22..aabc1e1ae 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -22,3 +22,4 @@ gulpfile.js Jenkinsfile tslint.json webpack.config.js +.DS_Store \ No newline at end of file diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 74edcb553..69fe5e875 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -54,6 +54,12 @@ The following will be a start to finish guide to get the entire language server ```bash $ npm install ``` +5. (**\*Optional**) Build a platform specific JRE: + + ```bash + $ npx gulp download_jre + ``` + You can also use the options `--target` and `--javaVersion` to build the specified JRE version for the specified target architecture. # diff --git a/Jenkinsfile b/Jenkinsfile index dc23d79fa..d36d976bb 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -46,7 +46,8 @@ node('rhel8'){ stage "Package vscode-java" def packageJson = readJSON file: 'package.json' - sh "vsce package -o java-${packageJson.version}-${env.BUILD_NUMBER}.vsix" + env.EXTENSION_VERSION = "${packageJson.version}" + sh "vsce package -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" stage 'Test vscode-java for staging' wrap([$class: 'Xvnc']) { @@ -55,10 +56,28 @@ node('rhel8'){ sh "npm test --silent" } - stage 'Upload vscode-java to staging' def vsix = findFiles(glob: '**.vsix') - sh "rsync -Pzrlt --rsh=ssh --protocol=28 ${vsix[0].path} ${UPLOAD_LOCATION}/jdt.ls/staging" - stash name:'vsix', includes:files[0].path + stash name:'vsix', includes:vsix[0].path + + // Package platform specific versions + stage "Package platform specific vscode-java" + def platforms = ["win32-x64", "linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64"] + def embeddedJRE = 17 + for(platform in platforms){ + sh "npx gulp download_jre --target ${platform} --javaVersion ${embeddedJRE}" + sh "vsce package --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" + } + stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' + + stage 'Upload vscode-java to staging' + def artifacts = findFiles(glob: '**.vsix') + def artifactDir = "java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}" + sh "mkdir ${artifactDir}" + sh "mv *.vsix ${artifactDir}" + + for(artifact in artifacts){ + sh "rsync -Pzrlt --rsh=ssh --protocol=28 --relative ${artifactDir}/${artifact.path} ${UPLOAD_LOCATION}/jdt.ls/staging" + } } node('rhel8'){ @@ -67,24 +86,40 @@ node('rhel8'){ input message:'Approve deployment?', submitter: 'fbricon,rgrunber' } - stage "Publish to Marketplaces" + stage "Publish to Open-vsx Marketplace" unstash 'vsix' def vsix = findFiles(glob: '**.vsix') - // VS Code Marketplace - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - sh 'vsce publish -p ${TOKEN} --packagePath' + " ${vsix[0].path}" - } - // Open-vsx Marketplace sh "npm install -g ovsx" withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${vsix[0].path}" } - archive includes:"**.vsix" + stage "Publish to VS Code Marketplace" + // VS Code Marketplace + withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + // Publish a generic version + sh 'vsce publish -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + + // Publish platform specific versions + unstash 'platformVsix' + def platformVsixes = findFiles(glob: '**.vsix', excludes: vsix[0].path) + for(platformVsix in platformVsixes){ + sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" + } + } stage "Publish to http://download.jboss.org/jbosstools/static/jdt.ls/stable/" + def artifacts = findFiles(glob: '**.vsix') + def artifactDir = "java-${env.EXTENSION_VERSION}" + sh "mkdir ${artifactDir}" + sh "mv *.vsix ${artifactDir}" + + archive includes:"${artifactDir}/**/*.*" + // copy this stable build to Akamai-mirrored /static/ URL, so staging can be cleaned out more easily - sh "rsync -Pzrlt --rsh=ssh --protocol=28 ${vsix[0].path} ${UPLOAD_LOCATION}/static/jdt.ls/stable/" + for(artifact in artifacts){ + sh "rsync -Pzrlt --rsh=ssh --protocol=28 --relative ${artifactDir}/${artifact.path} ${UPLOAD_LOCATION}/static/jdt.ls/stable/" + } }// if publishToMarketPlace } diff --git a/README.md b/README.md index d67397054..cd89beb44 100644 --- a/README.md +++ b/README.md @@ -54,13 +54,16 @@ See the [changelog](CHANGELOG.md) for the latest release. You might also find us Setting the JDK =============== ## Java Tooling JDK -This JDK will be used to launch the Java Language Server. And by default, will also be used to compile your projects. +Now that Java extension will publish platform specific versions, it will embed a JRE for supported platforms such as `win32-x64`, `linux-x64`, `linux-arm64`, `darwin-x64`, `darwin-arm64`. The embedded JRE is used to launch the Language Server for Java. Users are only responsible for configuring [Project JDKs](#project-jdks) to compile your Java projects. -The path to the Java Development Kit can be specified by the `java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. +The following part is only kept for the universal version without embedded JRE. -- the `JDK_HOME` environment variable -- the `JAVA_HOME` environment variable -- on the current system path +>The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects.\ +\ +The path to the Java Development Kit can be specified by the `java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. +>- the `JDK_HOME` environment variable +>- the `JAVA_HOME` environment variable +>- on the current system path ## Project JDKs If you need to compile your projects against a different JDK version, it's recommended you configure the `java.configuration.runtimes` property in your user settings, eg: @@ -107,7 +110,7 @@ Supported VS Code settings ========================== The following settings are supported: -* `java.home` : Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. +* `java.home` : **Deprecated, only used for universal version without embedded JRE.** Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. * `java.jdt.ls.vmargs` : Extra VM arguments used to launch the Java Language Server. Requires VS Code restart. * `java.errors.incompleteClasspath.severity` : Specifies the severity of the message when the classpath is incomplete for a Java file. Supported values are `ignore`, `info`, `warning`, `error`. * `java.trace.server` : Traces the communication between VS Code and the Java language server. diff --git a/gulpfile.js b/gulpfile.js index 0dabd7a08..93c30cceb 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -3,15 +3,119 @@ const gulp = require('gulp'); const cp = require('child_process'); const decompress = require('gulp-decompress'); const download = require('gulp-download'); +const request = require('request'); const glob = require('glob'); const fse = require('fs-extra'); const path = require('path'); +const url = require("url"); +const argv = require('minimist')(process.argv.slice(2)); const server_dir = '../eclipse.jdt.ls'; const originalTestFolder = path.join(__dirname, 'test', 'resources', 'projects', 'maven', 'salut'); const tempTestFolder = path.join(__dirname, 'test-temp'); const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); //... +gulp.task('clean_jre', function(done) { + if (fse.existsSync('./jre')) { + fse.removeSync('./jre'); + } + + done(); +}); + +// Pls update the latest JRE if a new JDK is announced. +const LATEST_JRE = 17; + +/** + * Usage: + * npx gulp download_jre // Download the latest JRE for the platform of the current running machine. + * npx gulp download_jre --target darwin-x64 --javaVersion 17 // Download the specified JRE for the specified platform. + * + * Supported platforms: + * win32-x64, + * linux-x64, + * linux-arm64, + * darwin-x64, + * darwin-arm64 + */ +gulp.task('download_jre', async function(done) { + if (fse.existsSync('./jre')) { + fse.removeSync('./jre'); + } + + const platformMapping = { + "linux-arm64": "linux-aarch64", + "linux-x64": "linux-x86_64", + "darwin-arm64": "macosx-aarch64", + "darwin-x64": "macosx-x86_64", + "win32-x64": "win32-x86_64" + } + + const targetPlatform = argv.target || process.platform + "-" + process.arch; + if (targetPlatform && Object.keys(platformMapping).includes(targetPlatform)) { + const javaVersion = (!argv.javaVersion || argv.javaVersion === "latest") ? LATEST_JRE : argv.javaVersion; + console.log("Downloading justj JRE " + javaVersion + " for the platform " + targetPlatform) + "..."; + + const manifestUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/justj.manifest`; + // Download justj.manifest file + const manifest = await new Promise(function(resolve, reject) { + request.get(manifestUrl, function(err, response, body) { + if(err || response.statusCode >= 400) { + reject(err || `${response.statusCode} returned from ${manifestUrl}`); + } else { + resolve(String(body)); + } + }); + }); + + if (!manifest) { + done(new Error(`Failed to download justj.manifest, please check if the link ${manifestUrl} is valid.`)) + return; + } + + /** + * Here are the contents for a sample justj.manifest file: + * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-linux-aarch64.tar.gz + * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-linux-x86_64.tar.gz + * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-macosx-aarch64.tar.gz + * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-macosx-x86_64.tar.gz + * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-win32-x86_64.tar.gz + */ + const javaPlatform = platformMapping[targetPlatform]; + const list = manifest.split(/\r?\n/); + const jreIdentifier = list.find((value) => { + return value.indexOf("org.eclipse.justj.openjdk.hotspot.jre.full.stripped") >= 0 && value.indexOf(javaPlatform) >= 0; + }); + + if (!jreIdentifier) { + done(new Error(`justj doesn't support the jre ${javaVersion} for the platform ${javaPlatform} (${targetPlatform}), please refer to the link ${manifestUrl} for the supported platforms.`)); + return; + } + + const jreDownloadUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/${jreIdentifier}`; + const parsedDownloadUrl = url.parse(jreDownloadUrl); + const jreFileName = path.basename(parsedDownloadUrl.pathname) + .replace(/[\.7z|\.bz2|\.gz|\.rar|\.tar|\.zip|\.xz]*$/, ""); + const idx = jreFileName.indexOf('-'); + const jreVersionLabel = idx >= 0 ? jreFileName.substring(idx + 1) : jreFileName; + // Download justj JRE. + await new Promise(function(resolve, reject) { + download(jreDownloadUrl) + .on('error', reject) + .pipe(decompress({strip: 0})) + .pipe(gulp.dest('./jre/' + jreVersionLabel)) + .on('end', resolve); + }); + } else { + console.log("[Error] download_jre failed, please specify a valid target platform via --target argument. Here are the supported platform list:"); + for (const platform of Object.keys(platformMapping)) { + console.log(platform); + } + } + + done(); +}); + gulp.task('download_server', function(done) { fse.removeSync('./server'); download("http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz") diff --git a/package-lock.json b/package-lock.json index 6a8e11594..c06e55e31 100644 --- a/package-lock.json +++ b/package-lock.json @@ -322,12 +322,12 @@ } }, "ajv": { - "version": "6.6.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz", - "integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -534,9 +534,9 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" }, "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, "requires": { "safer-buffer": "~2.1.0" @@ -605,9 +605,9 @@ "dev": true }, "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, "babel-code-frame": { @@ -1099,9 +1099,9 @@ } }, "combined-stream": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", - "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "requires": { "delayed-stream": "~1.0.0" @@ -1911,9 +1911,9 @@ } }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-json-stable-stringify": { @@ -2420,7 +2420,7 @@ "dev": true, "requires": { "gulp-util": "^3.0.8", - "request": "^2.88.0", + "request": "^2.88.2", "request-progress": "^3.0.0", "through": "^2.3.8" }, @@ -2535,12 +2535,12 @@ "dev": true }, "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", "dev": true, "requires": { - "ajv": "^6.5.5", + "ajv": "^6.12.3", "har-schema": "^2.0.0" } }, @@ -3039,9 +3039,9 @@ "dev": true }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -3071,14 +3071,14 @@ } }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -3505,18 +3505,18 @@ } }, "mime-db": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", - "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.21", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", - "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "~1.37.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -4449,9 +4449,9 @@ "dev": true }, "psl": { - "version": "1.1.29", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz", - "integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, "pump": { @@ -4620,9 +4620,9 @@ } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { "aws-sign2": "~0.7.0", @@ -4632,7 +4632,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -4642,7 +4642,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } @@ -5083,9 +5083,9 @@ "dev": true }, "sshpk": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz", - "integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==", + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { "asn1": "~0.2.3", @@ -5396,21 +5396,13 @@ } }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "triple-beam": { @@ -5778,9 +5770,9 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", "dev": true }, "v8-compile-cache": { diff --git a/package.json b/package.json index 709396a27..66dd25cc3 100644 --- a/package.json +++ b/package.json @@ -21,7 +21,7 @@ "virtualWorkspaces": false }, "engines": { - "vscode": "^1.53.2" + "vscode": "^1.61.0" }, "repository": { "type": "git", @@ -170,7 +170,8 @@ ], "default": null, "description": "Specifies the folder path to the JDK (11 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk11.0_8\"", - "scope": "machine-overridable" + "scope": "machine-overridable", + "deprecationMessage": "This setting will be deprecated, please use the environment variable 'JAVA_HOME' instead." }, "java.jdt.ls.vmargs": { "type": [ @@ -1138,6 +1139,7 @@ "lodash.template": ">=4.5.0", "minimist": ">=1.2.5", "mocha": "^9.1.3", + "request": "^2.88.2", "ts-loader": "^9.2.6", "tslint": "^5.11.0", "typescript": "^4.2.4", diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 847b7b81e..ed500aafa 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -29,7 +29,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); executable.options = options; - executable.command = path.resolve(requirements.java_home + '/bin/java'); + executable.command = path.resolve(requirements.tooling_jre + '/bin/java'); executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; @@ -59,13 +59,12 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp // suspend=y is the default. Use this form if you need to debug the server startup code: // params.push('-agentlib:jdwp=transport=dt_socket,server=y,address=1044'); } - if (requirements.java_version > 8) { - params.push('--add-modules=ALL-SYSTEM', - '--add-opens', - 'java.base/java.util=ALL-UNNAMED', - '--add-opens', - 'java.base/java.lang=ALL-UNNAMED'); - } + + params.push('--add-modules=ALL-SYSTEM', + '--add-opens', + 'java.base/java.util=ALL-UNNAMED', + '--add-opens', + 'java.base/java.lang=ALL-UNNAMED'); params.push('-Declipse.application=org.eclipse.jdt.ls.core.id1', '-Dosgi.bundles.defaultStartLevel=4', @@ -122,7 +121,7 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp // "OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify // were deprecated in JDK 13 and will likely be removed in a future release." // so only add -noverify for older versions - if (params.indexOf('-noverify') < 0 && params.indexOf('-Xverify:none') < 0 && requirements.java_version < 13) { + if (params.indexOf('-noverify') < 0 && params.indexOf('-Xverify:none') < 0 && requirements.tooling_jre_version < 13) { params.push('-noverify'); } diff --git a/src/requirements.ts b/src/requirements.ts index afec0221a..a46a7e5d4 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -8,14 +8,16 @@ import * as expandHomeDir from 'expand-home-dir'; import findJavaHome = require("find-java-home"); import { Commands } from './commands'; import { checkJavaPreferences } from './settings'; -import { getJavaConfiguration } from './utils'; -import { findJavaHomes, getJavaVersion, JavaRuntime } from './findJavaRuntimes'; +import { findJavaHomes, getJavaVersion, JavaRuntime, verifyJavaHome } from './findJavaRuntimes'; +import { logger } from './log'; const isWindows = process.platform.indexOf('win') === 0; const JAVAC_FILENAME = 'javac' + (isWindows ? '.exe' : ''); const JAVA_FILENAME = 'java' + (isWindows ? '.exe' : ''); const REQUIRED_JDK_VERSION = 11; export interface RequirementsData { + tooling_jre: string; + tooling_jre_version: number; java_home: string; java_version: number; } @@ -34,12 +36,13 @@ interface ErrorData { * */ export async function resolveRequirements(context: ExtensionContext): Promise { + let toolingJre: string = await findEmbeddedJRE(context); + let toolingJreVersion: number = await getJavaVersion(toolingJre); return new Promise(async (resolve, reject) => { let source: string; let javaVersion: number = 0; let javaHome = await checkJavaPreferences(context); - if (javaHome) { - // java.home explictly specified + if (!toolingJre && javaHome) { // "java.home" setting is only used for the universal version. source = `java.home variable defined in ${env.appName} settings`; javaHome = expandHomeDir(javaHome); if (!await fse.pathExists(javaHome)) { @@ -54,25 +57,98 @@ export async function resolveRequirements(context: ExtensionContext): Promise r.version >= REQUIRED_JDK_VERSION); - if (validJdks.length > 0) { - sortJdksBySource(validJdks); - javaHome = validJdks[0].home; - javaVersion = validJdks[0].version; + if (!toolingJre) { // universal version + const validJdks = javaRuntimes.filter(r => r.version >= REQUIRED_JDK_VERSION); + if (validJdks.length > 0) { + sortJdksBySource(validJdks); + javaHome = validJdks[0].home; + javaVersion = validJdks[0].version; + toolingJre = javaHome; + toolingJreVersion = javaVersion; + } + } else { // pick a default project JDK + /** + * For legacy users, we implicitly following the order below to + * set a default project JDK during initialization: + * java.home > env.JDK_HOME > env.JAVA_HOME > env.PATH + * + * We'll keep it for compatibility. + */ + if (javaHome && (javaHome = await verifyJavaHome(javaHome, JAVAC_FILENAME))) { + javaVersion = await getJavaVersion(javaHome); + logger.info("Use the JDK from 'java.home' setting as the initial default project JDK."); + } else if (javaRuntimes.length) { + sortJdksBySource(javaRuntimes); + javaHome = javaRuntimes[0].home; + javaVersion = javaRuntimes[0].version; + logger.info(`Use the JDK from '${javaRuntimes[0].sources}' as the initial default project JDK.`); + } else if (javaHome = await findDefaultJDKFromSettings()) { + javaVersion = await getJavaVersion(javaHome); + logger.info("Use the JDK from 'java.configuration.runtimes' as the initial default project JDK."); + } else { + openJDKDownload(reject, "Please download and install a JDK to compile your project. You can configure your projects with different JDKs by the setting ['java.configuration.runtimes'](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)"); + } } } - if (javaVersion < REQUIRED_JDK_VERSION) { + if (!toolingJre || toolingJreVersion < REQUIRED_JDK_VERSION) { + // For universal version, we still require users to install a qualified JDK to run Java extension. openJDKDownload(reject, `Java ${REQUIRED_JDK_VERSION} or more recent is required to run the Java extension. Please download and install a recent JDK. You can still compile your projects with older JDKs by configuring ['java.configuration.runtimes'](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)`); } - resolve({ java_home: javaHome, java_version: javaVersion }); + resolve({ + tooling_jre: toolingJre, // Used to launch Java extension. + tooling_jre_version: toolingJreVersion, + java_home: javaHome, // Used as default project JDK. + java_version: javaVersion, + }); }); } +async function findEmbeddedJRE(context: ExtensionContext): Promise { + const jreHome = context.asAbsolutePath("jre"); + if (fse.existsSync(jreHome) && fse.statSync(jreHome).isDirectory()) { + const candidates = fse.readdirSync(jreHome); + for (const candidate of candidates) { + if (fse.existsSync(path.join(jreHome, candidate, "bin", JAVA_FILENAME))) { + return path.join(jreHome, candidate); + } + } + } + + return; +} + +async function findDefaultJDKFromSettings(): Promise { + const runtimes = workspace.getConfiguration().get("java.configuration.runtimes"); + if (Array.isArray(runtimes) && runtimes.length) { + let candidate: string; + for (const runtime of runtimes) { + if (!runtime || typeof runtime !== 'object' || !runtime.path) { + continue; + } + + const javaHome = await verifyJavaHome(runtime.path, JAVAC_FILENAME); + if (javaHome) { + candidate = javaHome; + } + + if (runtime.default) { + break; + } + } + + return candidate; + } + + return undefined; +} + function sortJdksBySource(jdks: JavaRuntime[]) { const rankedJdks = jdks as Array; const sources = ["env.JDK_HOME", "env.JAVA_HOME", "env.PATH"]; From 3fe63b502adc2fe20e9e50ccb75ae854b7a44228 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Tue, 14 Dec 2021 09:39:24 +0800 Subject: [PATCH 093/708] use jdk-utils to detect installed runtimes (#2246) Signed-off-by: Yan Zhang --- package-lock.json | 84 ++++++---- package.json | 2 +- src/findJavaRuntimes.ts | 353 ---------------------------------------- src/requirements.ts | 172 +++++--------------- 4 files changed, 94 insertions(+), 517 deletions(-) delete mode 100644 src/findJavaRuntimes.ts diff --git a/package-lock.json b/package-lock.json index c06e55e31..b3e9cd025 100644 --- a/package-lock.json +++ b/package-lock.json @@ -434,7 +434,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" }, "arr-map": { "version": "2.0.2", @@ -1464,7 +1464,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -1994,15 +1994,6 @@ } } }, - "find-java-home": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/find-java-home/-/find-java-home-1.1.0.tgz", - "integrity": "sha512-bSTCKNZ193UM/+ZZoNDzICAEHcVywovkhsWCkZALjCvRXQ+zXTe/XATrrP4CpxkaP6YFhQJOpyRpH0P2U/woDA==", - "requires": { - "which": "~1.0.5", - "winreg": "~1.2.2" - } - }, "find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", @@ -2791,7 +2782,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" }, "is-core-module": { "version": "2.2.0", @@ -2982,6 +2973,11 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "jdk-utils": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.3.1.tgz", + "integrity": "sha512-0a7qkPdlXqltqgJOiXBjawFYfL1w0eRQ4vrjKVRkNgB0U8+P/J5ZMZS5LW/BtQwdM3mBUpodtI0nWklm4pmOSg==" + }, "jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -3642,6 +3638,12 @@ "fill-range": "^7.0.1" } }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", @@ -3911,6 +3913,28 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -5148,7 +5172,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -6126,11 +6150,6 @@ } } }, - "which": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/which/-/which-1.0.9.tgz", - "integrity": "sha1-RgwdoPgQED0DIam2M6+eV15kSG8=" - }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -6143,11 +6162,6 @@ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "winreg": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/winreg/-/winreg-1.2.4.tgz", - "integrity": "sha1-ugZWKbepJRMOFXeRCM9UCZDpjRs=" - }, "winreg-utf8": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/winreg-utf8/-/winreg-utf8-0.1.1.tgz", @@ -6299,23 +6313,25 @@ }, "dependencies": { "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } } } } }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, "yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", diff --git a/package.json b/package.json index 66dd25cc3..c2ed5bd7b 100644 --- a/package.json +++ b/package.json @@ -1151,10 +1151,10 @@ "dependencies": { "chokidar": "^2.1.8", "expand-home-dir": "^0.0.3", - "find-java-home": "1.1.0", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", + "jdk-utils": "^0.3.1", "semver": "^7.3.5", "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", diff --git a/src/findJavaRuntimes.ts b/src/findJavaRuntimes.ts deleted file mode 100644 index 0100b849d..000000000 --- a/src/findJavaRuntimes.ts +++ /dev/null @@ -1,353 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -import * as cp from "child_process"; -import * as fse from "fs-extra"; -import * as _ from "lodash"; -import * as os from "os"; -import * as path from "path"; -const expandHomeDir = require("expand-home-dir"); -const WinReg = require("winreg-utf8"); -const isWindows: boolean = process.platform.indexOf("win") === 0; -const isMac: boolean = process.platform.indexOf("darwin") === 0; -const isLinux: boolean = process.platform.indexOf("linux") === 0; -const JAVAC_FILENAME = "javac" + (isWindows ? ".exe" : ""); -const JAVA_FILENAME = "java" + (isWindows ? ".exe" : ""); - -export interface JavaRuntime { - home: string; - version: number; - sources: string[]; -} - -/** - * return metadata for all installed JDKs. - */ -export async function findJavaHomes(): Promise { - const ret: JavaRuntime[] = []; - const jdkMap = new Map(); - - updateJDKs(jdkMap, await fromEnv("JDK_HOME"), "env.JDK_HOME"); - updateJDKs(jdkMap, await fromEnv("JAVA_HOME"), "env.JAVA_HOME"); - updateJDKs(jdkMap, await fromPath(), "env.PATH"); - updateJDKs(jdkMap, await fromWindowsRegistry(), "WindowsRegistry"); - updateJDKs(jdkMap, await fromCommonPlaces(), "DefaultLocation"); - - for (const elem of jdkMap) { - const home = elem[0]; - const sources = elem[1]; - const version = await getJavaVersion(home); - if (version) { - ret.push({ - home, - sources, - version - }); - } else { - console.warn(`Unknown version of JDK ${home}`); - } - } - return ret; -} - -function updateJDKs(map: Map, newJdks: string[], source: string) { - for (const newJdk of newJdks) { - const sources = map.get(newJdk); - if (sources !== undefined) { - map.set(newJdk, [...sources, source]); - } else { - map.set(newJdk, [source]); - } - } -} - -async function fromEnv(name: string): Promise { - const ret: string[] = []; - if (process.env[name]) { - const javaHome = await verifyJavaHome(process.env[name], JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - } - return ret; -} - -async function fromPath(): Promise { - const ret: string[] = []; - - const paths = process.env.PATH ? process.env.PATH.split(path.delimiter).filter(Boolean) : []; - for (const p of paths) { - const proposed = path.dirname(p); // remove "bin" - const javaHome = await verifyJavaHome(proposed, JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - - if (isMac) { - let dir = expandHomeDir(p); - dir = await findLinkedFile(dir); - // on mac, java install has a utility script called java_home - const macUtility = path.join(dir, "java_home"); - if (await fse.pathExists(macUtility)) { - let buffer; - try { - buffer = cp.execSync(macUtility, { cwd: dir }); - const absoluteJavaHome = "" + buffer.toString().replace(/\n$/, ""); - const verified = await verifyJavaHome(absoluteJavaHome, JAVAC_FILENAME); - if (verified) { - ret.push(absoluteJavaHome); - } - } catch (error) { - // do nothing - } - } - } - } - - if (isMac) { - // Exclude /usr, because in macOS Big Sur /usr/bin/javac is no longer symlink. - // See https://github.com/redhat-developer/vscode-java/issues/1700#issuecomment-729478810 - return ret.filter(item => item !== "/usr"); - } else { - return ret; - } -} - -async function fromWindowsRegistry(): Promise { - if (!isWindows) { - return []; - } - - const keyPaths: string[] = [ - "\\SOFTWARE\\JavaSoft\\JDK", - "\\SOFTWARE\\JavaSoft\\Java Development Kit" - ]; - - const promisifyFindPossibleRegKey = (keyPath: string, regArch: string): Promise => { - return new Promise((resolve) => { - const winreg: Winreg.Registry = new WinReg({ - hive: WinReg.HKLM, - key: keyPath, - arch: regArch - }); - winreg.keys((err, result) => { - if (err) { - return resolve([]); - } - resolve(result); - }); - }); - }; - - const promisifyFindJavaHomeInRegKey = (reg: Winreg.Registry): Promise => { - return new Promise((resolve) => { - reg.get("JavaHome", (err, home) => { - if (err || !home) { - return resolve(null); - } - resolve(home.value); - }); - }); - }; - - const promises = []; - for (const arch of ["x64", "x86"]) { - for (const keyPath of keyPaths) { - promises.push(promisifyFindPossibleRegKey(keyPath, arch)); - } - } - - const keysFoundSegments: Winreg.Registry[][] = await Promise.all(promises); - const keysFound: Winreg.Registry[] = Array.prototype.concat.apply([], keysFoundSegments); - if (!keysFound.length) { - return []; - } - - const sortedKeysFound = keysFound.sort((a, b) => { - const aVer = parseFloat(a.key); - const bVer = parseFloat(b.key); - return bVer - aVer; - }); - - const javaHomes: string[] = []; - for (const key of sortedKeysFound) { - const candidate = await promisifyFindJavaHomeInRegKey(key); - if (candidate) { - javaHomes.push(candidate); - } - } - - const ret: string[] = []; - for (const proposed of javaHomes) { - const javaHome = await verifyJavaHome(proposed, JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - } - return ret; -} - -async function fromCommonPlaces(): Promise { - const ret: string[] = []; - - // common place for mac - if (isMac) { - const jvmStore = "/Library/Java/JavaVirtualMachines"; - const subfolder = "Contents/Home"; - let jvms: string[] = []; - try { - jvms = await fse.readdir(jvmStore); - } catch (error) { - // ignore - } - for (const jvm of jvms) { - const proposed = path.join(jvmStore, jvm, subfolder); - const javaHome = await verifyJavaHome(proposed, JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - } - } - - // common place for Windows - if (isWindows) { - const localAppDataFolder = process.env.LOCALAPPDATA ? process.env.LOCALAPPDATA : path.join(os.homedir(), "AppData", "Local"); - const possibleLocations: string[] = [ - process.env.ProgramFiles && path.join(process.env.ProgramFiles, "Java"), // Oracle JDK per machine - process.env.ProgramW6432 && path.join(process.env.ProgramW6432, "Java"), // Oracle JDK per machine - process.env.ProgramFiles && path.join(process.env.ProgramFiles, "AdoptOpenJDK"), // AdoptOpenJDK per machine - process.env.ProgramW6432 && path.join(process.env.ProgramW6432, "AdoptOpenJDK"), // AdoptOpenJDK per machine - path.join(localAppDataFolder, "Programs", "AdoptOpenJDK"), // AdoptOpenJDK per user - ].filter(Boolean) as string[]; - const jvmStores = _.uniq(possibleLocations); - for (const jvmStore of jvmStores) { - let jvms: string[] = []; - try { - jvms = await fse.readdir(jvmStore); - } catch (error) { - // ignore - } - for (const jvm of jvms) { - const proposed = path.join(jvmStore, jvm); - const javaHome = await verifyJavaHome(proposed, JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - } - } - } - - // common place for Linux - if (isLinux) { - const jvmStore = "/usr/lib/jvm"; - let jvms: string[] = []; - try { - jvms = await fse.readdir(jvmStore); - } catch (error) { - // ignore - } - for (const jvm of jvms) { - const proposed = path.join(jvmStore, jvm); - const javaHome = await verifyJavaHome(proposed, JAVAC_FILENAME); - if (javaHome) { - ret.push(javaHome); - } - } - } - - return ret; -} - -export async function verifyJavaHome(raw: string, javaFilename: string): Promise { - const dir = expandHomeDir(raw); - const targetJavaFile = await findLinkedFile(path.resolve(dir, "bin", javaFilename)); - const proposed = path.dirname(path.dirname(targetJavaFile)); - if (await fse.pathExists(proposed) - && await fse.pathExists(path.resolve(proposed, "bin", javaFilename)) - ) { - return proposed; - } - return undefined; -} - -// iterate through symbolic links until file is found -async function findLinkedFile(file: string): Promise { - if (!await fse.pathExists(file) || !(await fse.lstat(file)).isSymbolicLink()) { - return file; - } - return findLinkedFile(await fse.readlink(file)); -} - -export async function getJavaVersion(javaHome: string): Promise { - let javaVersion = await checkVersionInReleaseFile(javaHome); - if (!javaVersion) { - javaVersion = await checkVersionByCLI(javaHome); - } - return javaVersion; -} - -export function parseMajorVersion(version: string): number { - if (!version) { - return 0; - } - // Ignore '1.' prefix for legacy Java versions - if (version.startsWith("1.")) { - version = version.substring(2); - } - // look into the interesting bits now - const regexp = /\d+/g; - const match = regexp.exec(version); - let javaVersion = 0; - if (match) { - javaVersion = parseInt(match[0]); - } - return javaVersion; -} - -/** - * Get version by checking file JAVA_HOME/release - */ -async function checkVersionInReleaseFile(javaHome: string): Promise { - if (!javaHome) { - return 0; - } - const releaseFile = path.join(javaHome, "release"); - if (!await fse.pathExists(releaseFile)) { - return 0; - } - - try { - const content = await fse.readFile(releaseFile); - const regexp = /^JAVA_VERSION="(.*)"/gm; - const match = regexp.exec(content.toString()); - if (!match) { - return 0; - } - const majorVersion = parseMajorVersion(match[1]); - return majorVersion; - } catch (error) { - // ignore - } - return 0; -} - -/** - * Get version by parsing `JAVA_HOME/bin/java -version` - */ -async function checkVersionByCLI(javaHome: string): Promise { - if (!javaHome) { - return 0; - } - return new Promise((resolve, reject) => { - const javaBin = path.join(javaHome, "bin", JAVA_FILENAME); - cp.execFile(javaBin, ["-version"], {}, (error, stdout, stderr) => { - const regexp = /version "(.*)"/g; - const match = regexp.exec(stderr); - if (!match) { - return resolve(0); - } - const javaVersion = parseMajorVersion(match[1]); - resolve(javaVersion); - }); - }); -} diff --git a/src/requirements.ts b/src/requirements.ts index a46a7e5d4..350565fc3 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -1,19 +1,14 @@ 'use strict'; -import { workspace, Uri, env, window, ConfigurationTarget, commands, ExtensionContext } from 'vscode'; -import * as cp from 'child_process'; -import * as path from 'path'; -import * as fse from 'fs-extra'; import * as expandHomeDir from 'expand-home-dir'; -import findJavaHome = require("find-java-home"); +import * as fse from 'fs-extra'; +import { findRuntimes, getRuntime, getSources, IJavaRuntime, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; +import * as path from 'path'; +import { env, ExtensionContext, Uri, workspace } from 'vscode'; import { Commands } from './commands'; -import { checkJavaPreferences } from './settings'; -import { findJavaHomes, getJavaVersion, JavaRuntime, verifyJavaHome } from './findJavaRuntimes'; import { logger } from './log'; +import { checkJavaPreferences } from './settings'; -const isWindows = process.platform.indexOf('win') === 0; -const JAVAC_FILENAME = 'javac' + (isWindows ? '.exe' : ''); -const JAVA_FILENAME = 'java' + (isWindows ? '.exe' : ''); const REQUIRED_JDK_VERSION = 11; export interface RequirementsData { tooling_jre: string; @@ -37,7 +32,7 @@ interface ErrorData { */ export async function resolveRequirements(context: ExtensionContext): Promise { let toolingJre: string = await findEmbeddedJRE(context); - let toolingJreVersion: number = await getJavaVersion(toolingJre); + let toolingJreVersion: number = await getMajorVersion(toolingJre); return new Promise(async (resolve, reject) => { let source: string; let javaVersion: number = 0; @@ -56,22 +51,24 @@ export async function resolveRequirements(context: ExtensionContext): Promise r.version >= REQUIRED_JDK_VERSION); + // as latest version as possible. + sortJdksByVersion(javaRuntimes); + const validJdks = javaRuntimes.filter(r => r.version.major >= REQUIRED_JDK_VERSION); if (validJdks.length > 0) { sortJdksBySource(validJdks); - javaHome = validJdks[0].home; - javaVersion = validJdks[0].version; + javaHome = validJdks[0].homedir; + javaVersion = validJdks[0].version.major; toolingJre = javaHome; toolingJreVersion = javaVersion; } - } else { // pick a default project JDK + } else { // pick a default project JDK/JRE /** * For legacy users, we implicitly following the order below to * set a default project JDK during initialization: @@ -79,16 +76,18 @@ export async function resolveRequirements(context: ExtensionContext): Promise { +async function findDefaultRuntimeFromSettings(): Promise { const runtimes = workspace.getConfiguration().get("java.configuration.runtimes"); if (Array.isArray(runtimes) && runtimes.length) { let candidate: string; @@ -133,9 +132,9 @@ async function findDefaultJDKFromSettings(): Promise { continue; } - const javaHome = await verifyJavaHome(runtime.path, JAVAC_FILENAME); - if (javaHome) { - candidate = javaHome; + const jr = await getRuntime(runtime.path); + if (jr) { + candidate = jr.homedir; } if (runtime.default) { @@ -149,12 +148,12 @@ async function findDefaultJDKFromSettings(): Promise { return undefined; } -function sortJdksBySource(jdks: JavaRuntime[]) { - const rankedJdks = jdks as Array; - const sources = ["env.JDK_HOME", "env.JAVA_HOME", "env.PATH"]; +function sortJdksBySource(jdks: IJavaRuntime[]) { + const rankedJdks = jdks as Array; + const sources = ["JDK_HOME", "JAVA_HOME", "PATH"]; for (const [index, source] of sources.entries()) { for (const jdk of rankedJdks) { - if (jdk.rank === undefined && jdk.sources.includes(source)) { + if (jdk.rank === undefined && getSources(jdk).includes(source)) { jdk.rank = index; } } @@ -163,104 +162,11 @@ function sortJdksBySource(jdks: JavaRuntime[]) { rankedJdks.sort((a, b) => a.rank - b.rank); } -function checkJavaRuntime(context: ExtensionContext): Promise { - return new Promise(async (resolve, reject) => { - let source: string; - let javaHome = await checkJavaPreferences(context); - if (javaHome) { - source = `java.home variable defined in ${env.appName} settings`; - } else { - javaHome = process.env['JDK_HOME']; - if (javaHome) { - source = 'JDK_HOME environment variable'; - } else { - javaHome = process.env['JAVA_HOME']; - source = 'JAVA_HOME environment variable'; - } - } - if (javaHome) { - javaHome = expandHomeDir(javaHome); - if (!await fse.pathExists(javaHome)) { - invalidJavaHome(reject, `The ${source} points to a missing or inaccessible folder (${javaHome})`); - } else if (!await fse.pathExists(path.resolve(javaHome, 'bin', JAVAC_FILENAME))) { - let msg: string; - if (await fse.pathExists(path.resolve(javaHome, JAVAC_FILENAME))) { - msg = `'bin' should be removed from the ${source} (${javaHome})`; - } else { - msg = `The ${source} (${javaHome}) does not point to a JDK.`; - } - invalidJavaHome(reject, msg); - } - return resolve(javaHome); - } - // No settings, let's try to detect as last resort. - findJavaHome((err, home) => { - if (err) { - openJDKDownload(reject, 'Java runtime (JDK, not JRE) could not be located'); - } - else { - resolve(home); - } - }); - }); -} - -async function checkJavaVersion(javaHome: string): Promise { - let javaVersion = await checkVersionInReleaseFile(javaHome); - if (!javaVersion) { - javaVersion = await checkVersionByCLI(javaHome); - } - return new Promise((resolve, reject) => { - if (javaVersion < 11) { - openJDKDownload(reject, 'Java 11 or more recent is required to run the Java extension. Please download and install a recent JDK. You can still compile your projects with older JDKs by configuring [`java.configuration.runtimes`](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)'); - } - return resolve(javaVersion); - }); -} - -/** - * Get version by checking file JAVA_HOME/release - */ -async function checkVersionInReleaseFile(javaHome: string): Promise { - if (!javaHome) { - return 0; - } - const releaseFile = path.join(javaHome, "release"); - if (!await fse.pathExists(releaseFile)) { - return 0; - } - - try { - const content = await fse.readFile(releaseFile); - const regexp = /^JAVA_VERSION="(.*)"/gm; - const match = regexp.exec(content.toString()); - if (!match) { - return 0; - } - const majorVersion = parseMajorVersion(match[1]); - return majorVersion; - } catch (error) { - // ignore - } - return 0; -} - /** - * Get version by parsing `JAVA_HOME/bin/java -version` + * Sort by major version in descend order. */ -function checkVersionByCLI(javaHome: string): Promise { - return new Promise((resolve, reject) => { - const javaBin = path.join(javaHome, "bin", JAVA_FILENAME); - cp.execFile(javaBin, ['-version'], {}, (error, stdout, stderr) => { - const regexp = /version "(.*)"/g; - const match = regexp.exec(stderr); - if (!match) { - return resolve(0); - } - const javaVersion = parseMajorVersion(match[1]); - resolve(javaVersion); - }); - }); +function sortJdksByVersion(jdks: IJavaRuntime[]) { + jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); } export function parseMajorVersion(version: string): number { @@ -312,3 +218,11 @@ function invalidJavaHome(reject, cause: string) { }); } } + +async function getMajorVersion(javaHome: string): Promise { + if (!javaHome) { + return 0; + } + const runtime = await getRuntime(javaHome, { withVersion: true }); + return runtime?.version?.major || 0; +} \ No newline at end of file From c4cdbed1190fc705c364179dab525645acf03898 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 14 Dec 2021 11:42:54 -0500 Subject: [PATCH 094/708] Add Changelog for 1.2.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 204882f19..238fc8dd3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.2.0 (December 16th, 2021) + * enhancement - Support platform specific extension. See [#2109](https://github.com/redhat-developer/vscode-java/issues/2109). + * enhancement - Make the debounce adaptive for validation job. See [JLS#1973](https://github.com/eclipse/eclipse.jdt.ls/pull/1973). + * bug fix - Fix issue where importing packages showed incorrect result. See [#1422](https://github.com/redhat-developer/vscode-java/issues/1422). + * bug fix - Fix regression in code action for unresolved type. See [JLS#1967](https://github.com/eclipse/eclipse.jdt.ls/pull/1967). + * bug fix - Diagnostics from changes to build configuration not reflected in opened source files. See [JLS#1963](https://github.com/eclipse/eclipse.jdt.ls/issues/1963). + * bug fix - Java extension does not work on standalone java files. See [#2231](https://github.com/redhat-developer/vscode-java/issues/2231). + * debt - Remove unused log4j 1.2.15 from builds. See [JLS#1972](https://github.com/eclipse/eclipse.jdt.ls/pull/1972). + * debt - Use jdk-utils to detect installed runtimes. See [#2246](https://github.com/redhat-developer/vscode-java/pull/2246). + ## 1.1.0 (November 26th, 2021) * enhancement - Stop generating metadata files at project's root. See [#618](https://github.com/redhat-developer/vscode-java/issues/618). * enhancement - Quickfixes should be available at the line level. See [#2130](https://github.com/redhat-developer/vscode-java/issues/2130). From 17f821c40696482f4f8abe59a79aec6a812284c4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 16 Dec 2021 16:22:18 -0500 Subject: [PATCH 095/708] Upversion to 1.3.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index b3e9cd025..21a1cf285 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.2.0", + "version": "1.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c2ed5bd7b..92c1fbf10 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.2.0", + "version": "1.3.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 0208943cc72dc5f4742860d5944c2e6162333b4e Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Wed, 22 Dec 2021 09:47:56 +0800 Subject: [PATCH 096/708] update jdk-utils to detect JDKs installed by Homebrew (#2258) Signed-off-by: Yan Zhang --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 21a1cf285..dfcd3d146 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2974,9 +2974,9 @@ "dev": true }, "jdk-utils": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.3.1.tgz", - "integrity": "sha512-0a7qkPdlXqltqgJOiXBjawFYfL1w0eRQ4vrjKVRkNgB0U8+P/J5ZMZS5LW/BtQwdM3mBUpodtI0nWklm4pmOSg==" + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.2.tgz", + "integrity": "sha512-Xc9KTVXJ048A3EaCyBRAzLRNhDEZQq/awcZHCQCvV9lnYEFMrnLZh7ZzCnFiXLCXWN9JDm9A0BW8MfTbLthA3g==" }, "jest-worker": { "version": "26.6.2", diff --git a/package.json b/package.json index 92c1fbf10..1d59106d7 100644 --- a/package.json +++ b/package.json @@ -1154,7 +1154,7 @@ "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "jdk-utils": "^0.3.1", + "jdk-utils": "^0.4.2", "semver": "^7.3.5", "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", From f68ba7ec11e700592ec24f1d96b5e151e7864fae Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 10 Jan 2022 09:14:39 +0800 Subject: [PATCH 097/708] Fix Jenkinsfile to publish the correct generic version (#2252) Signed-off-by: Jinbo Wang --- Jenkinsfile | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index d36d976bb..adbeca70a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -78,6 +78,8 @@ node('rhel8'){ for(artifact in artifacts){ sh "rsync -Pzrlt --rsh=ssh --protocol=28 --relative ${artifactDir}/${artifact.path} ${UPLOAD_LOCATION}/jdt.ls/staging" } + // Clean up build vsix + sh "rm -rf ${artifactDir}" } node('rhel8'){ @@ -98,6 +100,8 @@ node('rhel8'){ stage "Publish to VS Code Marketplace" // VS Code Marketplace withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + // Clean up embedded jre folder from previous build + sh 'npx gulp clean_jre' // Publish a generic version sh 'vsce publish -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' @@ -111,9 +115,9 @@ node('rhel8'){ stage "Publish to http://download.jboss.org/jbosstools/static/jdt.ls/stable/" def artifacts = findFiles(glob: '**.vsix') - def artifactDir = "java-${env.EXTENSION_VERSION}" - sh "mkdir ${artifactDir}" - sh "mv *.vsix ${artifactDir}" + def artifactDir = "java-${env.EXTENSION_VERSION}" + sh "mkdir ${artifactDir}" + sh "mv *.vsix ${artifactDir}" archive includes:"${artifactDir}/**/*.*" From 7f0cda851a85483abeeaed5c3279040382fc0a6c Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 5 Jan 2022 16:41:11 +0800 Subject: [PATCH 098/708] Add '--add-opens java.base/sun.nio.fs=ALL-UNNAMED' to the JLS jvmargs Signed-off-by: Jinbo Wang --- src/javaServerStarter.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index ed500aafa..58f430e3a 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -64,7 +64,11 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp '--add-opens', 'java.base/java.util=ALL-UNNAMED', '--add-opens', - 'java.base/java.lang=ALL-UNNAMED'); + 'java.base/java.lang=ALL-UNNAMED', + // See https://github.com/redhat-developer/vscode-java/issues/2264 + // It requires the internal API sun.nio.fs.WindowsFileAttributes.isDirectoryLink() to check if a Windows directory is symlink. + '--add-opens', + 'java.base/sun.nio.fs=ALL-UNNAMED'); params.push('-Declipse.application=org.eclipse.jdt.ls.core.id1', '-Dosgi.bundles.defaultStartLevel=4', From 873d0ae0eef15c870ca0eed726fc1351c2f4335b Mon Sep 17 00:00:00 2001 From: nickzhums <56864335+nickzhums@users.noreply.github.com> Date: Fri, 14 Jan 2022 11:19:27 +0800 Subject: [PATCH 099/708] Change minimum JDK requirement since platform specific extension is released (#2275) Signed-off-by: GitHub Co-authored-by: Jinbo Wang --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cd89beb44..b1dcc434c 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Quick Start ============ 1. Install the Extension 2. If you do not have a _Java_ Development Kit correctly [set](#setting-the-jdk) - * Download and install a recent Java Development Kit (latest Java 11 is the current minimum requirement). + * Download and install a Java Development Kit for your project (Java 1.5 or above is supported) 3. Extension is activated when you first access a Java file * Recognizes projects with *Maven* or *Gradle* build files in the directory hierarchy. From 562afa80c0f705613c6ed3148b4d9eac82093b26 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Tue, 18 Jan 2022 11:12:50 +0800 Subject: [PATCH 100/708] Add a setting 'java.jdt.ls.java.home' to manually set up a JDK to start JLS (#2284) * Add a setting 'java.jdt.ls.java.home' to manually set up a JDK to start JLS Signed-off-by: Jinbo Wang --- README.md | 10 ++--- package.json | 12 +++++- src/requirements.ts | 89 ++++++++++++++++++++++----------------------- src/settings.ts | 61 ++++++++++++++++++++++++------- 4 files changed, 108 insertions(+), 64 deletions(-) diff --git a/README.md b/README.md index b1dcc434c..4a279830f 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Quick Start ============ 1. Install the Extension 2. If you do not have a _Java_ Development Kit correctly [set](#setting-the-jdk) - * Download and install a Java Development Kit for your project (Java 1.5 or above is supported) + * Download and install a Java Development Kit for your project (Java 1.5 or above is supported) 3. Extension is activated when you first access a Java file * Recognizes projects with *Maven* or *Gradle* build files in the directory hierarchy. @@ -60,7 +60,7 @@ The following part is only kept for the universal version without embedded JRE. >The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects.\ \ -The path to the Java Development Kit can be specified by the `java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. +The path to the Java Development Kit can be specified by the `java.jdt.ls.java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. >- the `JDK_HOME` environment variable >- the `JAVA_HOME` environment variable >- on the current system path @@ -110,7 +110,7 @@ Supported VS Code settings ========================== The following settings are supported: -* `java.home` : **Deprecated, only used for universal version without embedded JRE.** Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. +* `java.home` : **Deprecated, please use 'java.jdt.ls.java.home' instead.** Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. * `java.jdt.ls.vmargs` : Extra VM arguments used to launch the Java Language Server. Requires VS Code restart. * `java.errors.incompleteClasspath.severity` : Specifies the severity of the message when the classpath is incomplete for a Java file. Supported values are `ignore`, `info`, `warning`, `error`. * `java.trace.server` : Traces the communication between VS Code and the Java language server. @@ -196,12 +196,12 @@ The following settings are supported: - `lastMember`: Insert the generated code as the last member of the target type. * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. - -New in 1.1.0: * `java.quickfix.showAt` : Show quickfixes at the problem or line level. * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. +New in 1.3.0: +* `java.jdt.ls.java.home`: Absolute path to JDK home folder used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. Requires VS Code restart. Semantic Highlighting =============== diff --git a/package.json b/package.json index 1d59106d7..b5d20a824 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ "untrustedWorkspaces": { "supported": "limited", "restrictedConfigurations": [ + "java.jdt.ls.java.home", "java.home", "java.jdt.ls.vmargs" ] @@ -171,7 +172,16 @@ "default": null, "description": "Specifies the folder path to the JDK (11 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk11.0_8\"", "scope": "machine-overridable", - "deprecationMessage": "This setting will be deprecated, please use the environment variable 'JAVA_HOME' instead." + "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead." + }, + "java.jdt.ls.java.home": { + "type": [ + "string", + "null" + ], + "default": null, + "description": "Specifies the folder path to the JDK (11 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk11.0_8\"", + "scope": "machine-overridable" }, "java.jdt.ls.vmargs": { "type": [ diff --git a/src/requirements.ts b/src/requirements.ts index 350565fc3..411dcbdbf 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -34,11 +34,12 @@ export async function resolveRequirements(context: ExtensionContext): Promise { - let source: string; + const javaPreferences = await checkJavaPreferences(context); + const preferenceName = javaPreferences.preference; + let javaHome = javaPreferences.javaHome; let javaVersion: number = 0; - let javaHome = await checkJavaPreferences(context); - if (!toolingJre && javaHome) { // "java.home" setting is only used for the universal version. - source = `java.home variable defined in ${env.appName} settings`; + if (javaHome) { + const source = `${preferenceName} variable defined in ${env.appName} settings`; javaHome = expandHomeDir(javaHome); if (!await fse.pathExists(javaHome)) { invalidJavaHome(reject, `The ${source} points to a missing or inaccessible folder (${javaHome})`); @@ -52,51 +53,49 @@ export async function resolveRequirements(context: ExtensionContext): Promise r.version.major >= REQUIRED_JDK_VERSION); - if (validJdks.length > 0) { - sortJdksBySource(validJdks); - javaHome = validJdks[0].homedir; - javaVersion = validJdks[0].version.major; - toolingJre = javaHome; - toolingJreVersion = javaVersion; - } - } else { // pick a default project JDK/JRE - /** - * For legacy users, we implicitly following the order below to - * set a default project JDK during initialization: - * java.home > env.JDK_HOME > env.JAVA_HOME > env.PATH - * - * We'll keep it for compatibility. - */ - if (javaHome && (await getRuntime(javaHome) !== undefined)) { - const runtime = await getRuntime(javaHome, {withVersion: true}); - javaHome = runtime.homedir; - javaVersion = runtime.version?.major; - logger.info("Use the JDK from 'java.home' setting as the initial default project JDK."); - } else if (javaRuntimes.length) { - sortJdksBySource(javaRuntimes); - javaHome = javaRuntimes[0].homedir; - javaVersion = javaRuntimes[0].version?.major; - logger.info(`Use the JDK from '${getSources(javaRuntimes[0])}' as the initial default project JDK.`); - } else if (javaHome = await findDefaultRuntimeFromSettings()) { - javaVersion = await getMajorVersion(javaHome); - logger.info("Use the JDK from 'java.configuration.runtimes' as the initial default project JDK."); - } else { - openJDKDownload(reject, "Please download and install a JDK to compile your project. You can configure your projects with different JDKs by the setting ['java.configuration.runtimes'](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)"); - } + if (preferenceName === "java.jdt.ls.java.home" || !toolingJre) { + toolingJre = javaHome; + toolingJreVersion = javaVersion; + } + } + + // search valid JDKs from env.JAVA_HOME, env.PATH, SDKMAN, jEnv, jabba, Common directories + const javaRuntimes = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); + if (!toolingJre) { // universal version + // as latest version as possible. + sortJdksByVersion(javaRuntimes); + const validJdks = javaRuntimes.filter(r => r.version.major >= REQUIRED_JDK_VERSION); + if (validJdks.length > 0) { + sortJdksBySource(validJdks); + javaHome = validJdks[0].homedir; + javaVersion = validJdks[0].version.major; + toolingJre = javaHome; + toolingJreVersion = javaVersion; + } + } else { // pick a default project JDK/JRE + /** + * For legacy users, we implicitly following the order below to + * set a default project JDK during initialization: + * java.jdt.ls.java.home > java.home > env.JDK_HOME > env.JAVA_HOME > env.PATH + * + * We'll keep it for compatibility. + */ + if (javaHome) { + logger.info("Use the JDK from 'java.home' setting as the initial default project JDK."); + } else if (javaRuntimes.length) { + sortJdksBySource(javaRuntimes); + javaHome = javaRuntimes[0].homedir; + javaVersion = javaRuntimes[0].version?.major; + logger.info(`Use the JDK from '${getSources(javaRuntimes[0])}' as the initial default project JDK.`); + } else if (javaHome = await findDefaultRuntimeFromSettings()) { + javaVersion = await getMajorVersion(javaHome); + logger.info("Use the JDK from 'java.configuration.runtimes' as the initial default project JDK."); + } else { + openJDKDownload(reject, "Please download and install a JDK to compile your project. You can configure your projects with different JDKs by the setting ['java.configuration.runtimes'](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)"); } } if (!toolingJre || toolingJreVersion < REQUIRED_JDK_VERSION) { - // For universal version, we still require users to install a qualified JDK to run Java extension. openJDKDownload(reject, `Java ${REQUIRED_JDK_VERSION} or more recent is required to run the Java extension. Please download and install a recent JDK. You can still compile your projects with older JDKs by configuring ['java.configuration.runtimes'](https://github.com/redhat-developer/vscode-java/wiki/JDK-Requirements#java.configuration.runtimes)`); } diff --git a/src/settings.ts b/src/settings.ts index bb18d7eb6..0e8e31341 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -8,7 +8,8 @@ import { cleanWorkspaceFileName } from './extension'; import { ensureExists, getJavaConfiguration } from './utils'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; -export const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; +const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; +const IS_WORKSPACE_JLS_JDK_ALLOWED = "java.jdt.ls.java.home.isAllowed"; export const IS_WORKSPACE_VMARGS_ALLOWED = "java.ls.isVmargsAllowed"; const extensionName = 'Language Support for Java'; export const ACTIVE_BUILD_TOOL_STATE = "java.activeBuildTool"; @@ -102,7 +103,8 @@ function excludeProjectSettingsFilesForWorkspace(workspaceUri: Uri) { } function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: WorkspaceConfiguration) { - return hasConfigKeyChanged('home', oldConfig, newConfig) + return hasConfigKeyChanged('jdt.ls.java.home', oldConfig, newConfig) + || hasConfigKeyChanged('home', oldConfig, newConfig) || hasConfigKeyChanged('jdt.ls.vmargs', oldConfig, newConfig) || hasConfigKeyChanged('progressReports.enabled', oldConfig, newConfig) || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig); @@ -125,30 +127,63 @@ export function getJavaEncoding(): string { return javaEncoding; } -export async function checkJavaPreferences(context: ExtensionContext) { +export async function checkJavaPreferences(context: ExtensionContext): Promise<{javaHome?: string, preference: string}> { const allow = 'Allow'; const disallow = 'Disallow'; - let javaHome = workspace.getConfiguration().inspect('java.home').workspaceValue; + let preference: string = 'java.jdt.ls.java.home'; + let javaHome = workspace.getConfiguration().inspect('java.jdt.ls.java.home').workspaceValue; let isVerified = javaHome === undefined || javaHome === null; if (isVerified) { - javaHome = getJavaConfiguration().get('home'); + javaHome = getJavaConfiguration().get('jdt.ls.java.home'); } - const key = getKey(IS_WORKSPACE_JDK_ALLOWED, context.storagePath, javaHome); + const key = getKey(IS_WORKSPACE_JLS_JDK_ALLOWED, context.storagePath, javaHome); const globalState = context.globalState; if (!isVerified) { isVerified = globalState.get(key); if (isVerified === undefined) { - await window.showErrorMessage(`Security Warning! Do you allow this workspace to set the java.home variable? \n java.home: ${javaHome}`, disallow, allow).then(async selection => { + await window.showErrorMessage(`Security Warning! Do you allow this workspace to set the java.jdt.ls.java.home variable? \n java.jdt.ls.java.home: ${javaHome}`, disallow, allow).then(async selection => { if (selection === allow) { globalState.update(key, true); } else if (selection === disallow) { globalState.update(key, false); - await workspace.getConfiguration().update('java.home', undefined, ConfigurationTarget.Workspace); + await workspace.getConfiguration().update('java.jdt.ls.java.home', undefined, ConfigurationTarget.Workspace); } }); isVerified = globalState.get(key); } + if (!isVerified) { // java.jdt.ls.java.home from workspace settings is disallowed. + javaHome = workspace.getConfiguration().inspect('java.jdt.ls.java.home').globalValue; + } + } + + if (!javaHome) { // Read java.home from the deprecated "java.home" setting. + preference = 'java.home'; + javaHome = workspace.getConfiguration().inspect('java.home').workspaceValue; + isVerified = javaHome === undefined || javaHome === null; + if (isVerified) { + javaHome = getJavaConfiguration().get('home'); + } + const key = getKey(IS_WORKSPACE_JDK_ALLOWED, context.storagePath, javaHome); + const globalState = context.globalState; + if (!isVerified) { + isVerified = globalState.get(key); + if (isVerified === undefined) { + await window.showErrorMessage(`Security Warning! Do you allow this workspace to set the java.home variable? \n java.home: ${javaHome}`, disallow, allow).then(async selection => { + if (selection === allow) { + globalState.update(key, true); + } else if (selection === disallow) { + globalState.update(key, false); + await workspace.getConfiguration().update('java.home', undefined, ConfigurationTarget.Workspace); + } + }); + isVerified = globalState.get(key); + } + if (!isVerified) { // java.home from workspace settings is disallowed. + javaHome = workspace.getConfiguration().inspect('java.home').globalValue; + } + } } + const vmargs = workspace.getConfiguration().inspect('java.jdt.ls.vmargs').workspaceValue; if (vmargs !== undefined) { const isWorkspaceTrusted = (workspace as any).isTrusted; // keep compatibility for old engines < 1.56.0 @@ -168,11 +203,11 @@ export async function checkJavaPreferences(context: ExtensionContext) { } } } - if (isVerified) { - return javaHome; - } else { - return workspace.getConfiguration().inspect('java.home').globalValue; - } + + return { + javaHome, + preference + }; } export function getKey(prefix, storagePath, value) { From e8d1c40d212d271f71eb2e9e0991f6bd6b9b1256 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 20 Jan 2022 09:23:50 +0800 Subject: [PATCH 101/708] Show the error status when imported projects having errors (#2244) * Show project status in the status bar Signed-off-by: sheche --- src/serverStatus.ts | 17 ++++++++++++ src/serverStatusBarProvider.ts | 10 +++++++ src/standardLanguageClient.ts | 50 ++++++++++++++++++++++++---------- 3 files changed, 63 insertions(+), 14 deletions(-) diff --git a/src/serverStatus.ts b/src/serverStatus.ts index b71e0472f..639d88b3d 100644 --- a/src/serverStatus.ts +++ b/src/serverStatus.ts @@ -5,6 +5,7 @@ import { serverTasks } from "./serverTasks"; export enum ServerStatusKind { Ready = "Ready", + Warning = "Warning", Error = "Error", Busy = "Busy", } @@ -24,6 +25,8 @@ function fireEvent() { export namespace serverStatus { + let hasError: boolean = false; + export const onServerStatusChanged = _emitter.event; export function initialize() { @@ -38,7 +41,21 @@ export namespace serverStatus { throw new Error("Busy status cannot be set directly."); } + if (status === ServerStatusKind.Error || status === ServerStatusKind.Warning) { + hasError = true; + } else if (hasError) { + return; + } + _status = status; fireEvent(); } + + export function hasErrors() { + return hasError; + } + + export function errorResolved() { + hasError = false; + } } diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 7a7a41159..5c92afff1 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -55,10 +55,19 @@ class ServerStatusBarProvider implements Disposable { public setError(): void { this.statusBarItem.text = StatusIcon.Error; + this.statusBarItem.command = Commands.OPEN_LOGS; + } + + public setWarning(): void { + this.statusBarItem.text = StatusIcon.Warning; + this.statusBarItem.command = "workbench.panel.markers.view.focus"; + this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; } public setReady(): void { this.statusBarItem.text = StatusIcon.Ready; + this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; + this.statusBarItem.tooltip = "ServiceReady"; } public updateTooltip(tooltip: string): void { @@ -74,6 +83,7 @@ enum StatusIcon { LightWeight = "$(rocket)", Busy = "$(sync~spin)", Ready = "$(thumbsup)", + Warning = "$(thumbsdown)", Error = "$(thumbsdown)" } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index fab25460a..0a712f9f4 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -62,6 +62,8 @@ export class StandardLanguageClient { serverStatusBarProvider.setBusy(); } else if (status === ServerStatusKind.Error) { serverStatusBarProvider.setError(); + } else if (status === ServerStatusKind.Warning) { + serverStatusBarProvider.setWarning(); } else { serverStatusBarProvider.setReady(); } @@ -116,12 +118,23 @@ export class StandardLanguageClient { apiManager.updateStatus(ClientStatus.Error); resolve(apiManager.getApiInstance()); break; + case 'ProjectStatus': + if (report.message === "WARNING") { + serverStatus.updateServerStatus(ServerStatusKind.Warning); + } else if (report.message === "OK") { + this.status = ClientStatus.Started; + serverStatus.errorResolved(); + serverStatus.updateServerStatus(ServerStatusKind.Ready); + } + return; case 'Starting': case 'Message': // message goes to progress report instead break; } - serverStatusBarProvider.updateTooltip(report.message); + if (!serverStatus.hasErrors()) { + serverStatusBarProvider.updateTooltip(report.message); + } }); this.languageClient.onNotification(ProgressReportNotification.type, (progress) => { @@ -453,22 +466,31 @@ export class StandardLanguageClient { async function showImportFinishNotification(context: ExtensionContext) { const neverShow: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); if (!neverShow) { - const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); - if (projectUris.length === 0 || (projectUris.length === 1 && projectUris[0].includes("jdt.ls-java-project"))) { - return; + let choice: string | undefined; + const options = ["Don't show again"]; + if (serverStatus.hasErrors()) { + options.unshift("Show errors"); + choice = await window.showWarningMessage("Errors occurred during import of Java projects.", ...options); + } else { + const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + if (projectUris.length === 0 || (projectUris.length === 1 && projectUris[0].includes("jdt.ls-java-project"))) { + return; + } + + if (extensions.getExtension("vscjava.vscode-java-dependency")) { + options.unshift("View projects"); + } + + choice = await window.showInformationMessage("Projects are imported into workspace.", ...options); } - const options = ["Don't show again"]; - if (extensions.getExtension("vscjava.vscode-java-dependency")) { - options.unshift("View projects"); + if (choice === "Don't show again") { + context.globalState.update("java.neverShowImportFinishNotification", true); + } else if (choice === "View projects") { + commands.executeCommand("javaProjectExplorer.focus"); + } else if (choice === "Show errors") { + commands.executeCommand("workbench.panel.markers.view.focus"); } - window.showInformationMessage("Projects are imported into workspace.", ...options).then((choice) => { - if (choice === "Don't show again") { - context.globalState.update("java.neverShowImportFinishNotification", true); - } else if (choice === "View projects") { - commands.executeCommand("javaProjectExplorer.focus"); - } - }); } } From 0d35b0574cc0ade4aa976404d31fa66fd51c2ecb Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 21 Jan 2022 10:44:38 +0800 Subject: [PATCH 102/708] Check Gradle compatibility when importing fails (#2245) Signed-off-by: Shi Chen --- src/protocol.ts | 8 ++++ src/requirements.ts | 6 +-- src/standardLanguageClient.ts | 69 +++++++++++++++++++++++++++++++++-- 3 files changed, 76 insertions(+), 7 deletions(-) diff --git a/src/protocol.ts b/src/protocol.ts index 54e439f28..95dc283b8 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -58,6 +58,7 @@ export enum FeatureStatus { export enum EventType { ClasspathUpdated = 100, ProjectsImported = 200, + IncompatibleGradleJdkIssue = 300, } export enum CompileWorkspaceStatus { @@ -406,3 +407,10 @@ export interface RenameFilesParams { export namespace WillRenameFiles { export const type = new RequestType('workspace/willRenameFiles'); } + +export interface GradleCompatibilityInfo { + projectUri: string; + message: string; + highestJavaVersion: string; + recommendedGradleVersion: string; +} diff --git a/src/requirements.ts b/src/requirements.ts index 411dcbdbf..d0ebb4fef 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -147,7 +147,7 @@ async function findDefaultRuntimeFromSettings(): Promise { return undefined; } -function sortJdksBySource(jdks: IJavaRuntime[]) { +export function sortJdksBySource(jdks: IJavaRuntime[]) { const rankedJdks = jdks as Array; const sources = ["JDK_HOME", "JAVA_HOME", "PATH"]; for (const [index, source] of sources.entries()) { @@ -164,7 +164,7 @@ function sortJdksBySource(jdks: IJavaRuntime[]) { /** * Sort by major version in descend order. */ -function sortJdksByVersion(jdks: IJavaRuntime[]) { +export function sortJdksByVersion(jdks: IJavaRuntime[]) { jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); } @@ -196,7 +196,7 @@ function openJDKDownload(reject, cause) { }); } -function getJdkUrl() { +export function getJdkUrl() { let jdkUrl = 'https://developers.redhat.com/products/openjdk/download/?sc_cid=701f2000000RWTnAAO'; if (process.platform === 'darwin') { jdkUrl = 'https://adoptopenjdk.net/'; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 0a712f9f4..38f4c4d0a 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,17 +1,17 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken } from "vscode"; +import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position } from "vscode"; import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; -import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks } from "./protocol"; +import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; -import { RequirementsData } from "./requirements"; +import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; import * as net from 'net'; import * as fse from 'fs-extra'; import * as path from 'path'; @@ -32,9 +32,15 @@ import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { buildFilePatterns } from './plugin'; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; +import { findRuntimes, IJavaRuntime } from "jdk-utils"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; +const GET_JDK = "Get the Java Development Kit"; +const USE_JAVA = "Use Java "; +const AS_GRADLE_JVM = " as Gradle JVM"; +const UPGRADE_GRADLE = "Upgrade Gradle to "; +const GRADLE_IMPORT_JVM = "java.import.gradle.java.home"; export class StandardLanguageClient { @@ -141,7 +147,7 @@ export class StandardLanguageClient { serverTasks.updateServerTask(progress); }); - this.languageClient.onNotification(EventNotification.type, (notification) => { + this.languageClient.onNotification(EventNotification.type, async (notification) => { switch (notification.eventType) { case EventType.ClasspathUpdated: apiManager.fireDidClasspathUpdate(Uri.parse(notification.data)); @@ -157,6 +163,23 @@ export class StandardLanguageClient { apiManager.fireDidProjectsImport(projectUris); } break; + case EventType.IncompatibleGradleJdkIssue: + const options: string[] = []; + const info = notification.data as GradleCompatibilityInfo; + const highestJavaVersion = Number(info.highestJavaVersion); + let runtimes = await findRuntimes({checkJavac: true, withVersion: true, withTags: true}); + runtimes = runtimes.filter(runtime => { + return runtime.version.major <= highestJavaVersion; + }); + sortJdksByVersion(runtimes); + sortJdksBySource(runtimes); + options.push(UPGRADE_GRADLE + info.recommendedGradleVersion); + if (!runtimes.length) { + options.push(GET_JDK); + } else { + options.push(USE_JAVA + runtimes[0].version.major + AS_GRADLE_JVM); + } + this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, runtimes[0]?.homedir); default: break; } @@ -230,6 +253,44 @@ export class StandardLanguageClient { this.status = ClientStatus.Initialized; } + private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, newJavaHome: string) { + window.showErrorMessage(message + " [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)", ...options).then(async (choice) => { + if (choice === GET_JDK) { + commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(getJdkUrl())); + } else if (choice.startsWith(USE_JAVA)) { + await workspace.getConfiguration().update(GRADLE_IMPORT_JVM, newJavaHome, ConfigurationTarget.Global); + commands.executeCommand("workbench.action.openSettings", GRADLE_IMPORT_JVM); + commands.executeCommand(Commands.IMPORT_PROJECTS); + } else if (choice.startsWith(UPGRADE_GRADLE)) { + const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); + if (!useWrapper) { + await workspace.getConfiguration().update("java.import.gradle.wrapper.enabled", true, ConfigurationTarget.Workspace); + } + const result = await window.withProgress({ + location: ProgressLocation.Notification, + title: "Upgrading Gradle wrapper...", + cancellable: true, + }, (_progress, token) => { + return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, token); + }); + if (result) { + const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); + if (fse.pathExists(propertiesFile)) { + const content = await fse.readFile(propertiesFile); + const offset = content.toString().indexOf("distributionUrl"); + if (offset >= 0) { + const document = await workspace.openTextDocument(propertiesFile); + const position = document.positionAt(offset); + const distributionUrlRange = document.getWordRangeAtPosition(position); + window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); + } + } + commands.executeCommand(Commands.IMPORT_PROJECTS); + } + } + }); + } + private registerCommandsForStandardServer(context: ExtensionContext, jdtEventEmitter: EventEmitter): void { context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS, async () => { return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); From b804089c247d2b2c8c458cce26231c824b2eb594 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 20 Jan 2022 00:03:57 -0500 Subject: [PATCH 103/708] Add Changelog for 1.3.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 238fc8dd3..23982cc6d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Change Log +## 1.3.0 (January 24th, 2022) + * enhancement - Support completion for lambda expressions. See [JLS#1985](https://github.com/eclipse/eclipse.jdt.ls/issues/1985). + * enhancement - Add "Convert to Switch Expression" code assist proposal. See [JLS#1935](https://github.com/eclipse/eclipse.jdt.ls/pull/1935). + * enhancement - Support Gradle compatibility check. See [#2225](https://github.com/redhat-developer/vscode-java/issues/2225). + * bug fix - Fix regression in signature help. See [JLS#1980](https://github.com/eclipse/eclipse.jdt.ls/issues/1980). + * bug fix - Provide a way to disable embedded JRE. See [#2276](https://github.com/redhat-developer/vscode-java/issues/2276). + * bug fix - Projects containing windows symlink directories are not recognized. See [#2264](https://github.com/redhat-developer/vscode-java/issues/2264). + * bug fix - JDK installed via Homebrew is not detected. See [#2254](https://github.com/redhat-developer/vscode-java/issues/2254). + * bug fix - Avoid duplicate quick fixes when showing all quick fixes on a line. See [#2236](https://github.com/redhat-developer/vscode-java/issues/2236). + * bug fix - "Go to References" result contains inaccurate references. See [#2227](https://github.com/redhat-developer/vscode-java/issues/2227). + * bug fix - Ensure gradle wrappers are correctly processed on project import. See [#2218](https://github.com/redhat-developer/vscode-java/issues/2218). + * enhancement - Language server status bar item is not in sync with the real status. See [#2243](https://github.com/redhat-developer/vscode-java/issues/2243). + * build - Fix Jenkinsfile to publish the correct generic extension version. See [#2252](https://github.com/redhat-developer/vscode-java/pull/2252). + * other - Change minimum JDK requirement listed in documentation. See [#2275](https://github.com/redhat-developer/vscode-java/pull/2275). + ## 1.2.0 (December 16th, 2021) * enhancement - Support platform specific extension. See [#2109](https://github.com/redhat-developer/vscode-java/issues/2109). * enhancement - Make the debounce adaptive for validation job. See [JLS#1973](https://github.com/eclipse/eclipse.jdt.ls/pull/1973). From de65a586d36a79034a533d564f470b3a2754c1fe Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 24 Jan 2022 13:53:18 -0500 Subject: [PATCH 104/708] Adjust CHANGELOG entry enhancement to be near top Signed-off-by: Roland Grunberg --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 23982cc6d..eef5dbcff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * enhancement - Support completion for lambda expressions. See [JLS#1985](https://github.com/eclipse/eclipse.jdt.ls/issues/1985). * enhancement - Add "Convert to Switch Expression" code assist proposal. See [JLS#1935](https://github.com/eclipse/eclipse.jdt.ls/pull/1935). * enhancement - Support Gradle compatibility check. See [#2225](https://github.com/redhat-developer/vscode-java/issues/2225). + * enhancement - Language server status bar item is not in sync with the real status. See [#2243](https://github.com/redhat-developer/vscode-java/issues/2243). * bug fix - Fix regression in signature help. See [JLS#1980](https://github.com/eclipse/eclipse.jdt.ls/issues/1980). * bug fix - Provide a way to disable embedded JRE. See [#2276](https://github.com/redhat-developer/vscode-java/issues/2276). * bug fix - Projects containing windows symlink directories are not recognized. See [#2264](https://github.com/redhat-developer/vscode-java/issues/2264). @@ -11,7 +12,6 @@ * bug fix - Avoid duplicate quick fixes when showing all quick fixes on a line. See [#2236](https://github.com/redhat-developer/vscode-java/issues/2236). * bug fix - "Go to References" result contains inaccurate references. See [#2227](https://github.com/redhat-developer/vscode-java/issues/2227). * bug fix - Ensure gradle wrappers are correctly processed on project import. See [#2218](https://github.com/redhat-developer/vscode-java/issues/2218). - * enhancement - Language server status bar item is not in sync with the real status. See [#2243](https://github.com/redhat-developer/vscode-java/issues/2243). * build - Fix Jenkinsfile to publish the correct generic extension version. See [#2252](https://github.com/redhat-developer/vscode-java/pull/2252). * other - Change minimum JDK requirement listed in documentation. See [#2275](https://github.com/redhat-developer/vscode-java/pull/2275). From f4a2639eecc41b8839f82f613dee84bc06b403dd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Jan 2022 16:08:08 -0500 Subject: [PATCH 105/708] Upversion to 1.4.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index dfcd3d146..da6e14c96 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.3.0", + "version": "1.4.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b5d20a824..eb749caca 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.3.0", + "version": "1.4.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 316a662bd6eb46b6f5aa08f6f313a338e5658e2f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 24 Jan 2022 15:48:44 -0500 Subject: [PATCH 106/708] Use ovsx<0.3.0 to ensure we build with Node v12. Signed-off-by: Roland Grunberg --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index adbeca70a..890d77e55 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -92,7 +92,7 @@ node('rhel8'){ unstash 'vsix' def vsix = findFiles(glob: '**.vsix') // Open-vsx Marketplace - sh "npm install -g ovsx" + sh 'npm install -g "ovsx<0.3.0"' withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${vsix[0].path}" } From 8d634665b889d42eb5cdf26a8946c551f2b83c53 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Jan 2022 19:41:16 -0500 Subject: [PATCH 107/708] Update to chokidar 3.5.3 Signed-off-by: Roland Grunberg --- package-lock.json | 434 +++++++++++++++++++++++++++++++--------------- package.json | 2 +- webpack.config.js | 1 + 3 files changed, 298 insertions(+), 139 deletions(-) diff --git a/package-lock.json b/package-lock.json index da6e14c96..47555dde5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -379,6 +379,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, "requires": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" @@ -420,7 +421,8 @@ "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=" + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true }, "arr-filter": { "version": "1.1.2", @@ -434,7 +436,8 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=" + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true }, "arr-map": { "version": "2.0.2", @@ -448,7 +451,8 @@ "arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true }, "array-differ": { "version": "1.0.0", @@ -531,7 +535,8 @@ "array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=" + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true }, "asn1": { "version": "0.2.6", @@ -551,7 +556,8 @@ "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=" + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true }, "async": { "version": "2.6.3", @@ -576,7 +582,8 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true }, "async-settle": { "version": "1.0.0", @@ -596,7 +603,8 @@ "atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true }, "aws-sign2": { "version": "0.7.0", @@ -647,6 +655,7 @@ "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, "requires": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", @@ -661,6 +670,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -669,6 +679,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -677,6 +688,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -685,6 +697,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -715,18 +728,9 @@ "dev": true }, "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" - }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" - } + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, "bl": { "version": "1.2.3", @@ -751,6 +755,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, "requires": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", @@ -768,6 +773,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -853,6 +859,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, "requires": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", @@ -907,28 +914,70 @@ } }, "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "dependencies": { + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } } } }, @@ -942,6 +991,7 @@ "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "define-property": "^0.2.5", @@ -953,6 +1003,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1031,6 +1082,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, "requires": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" @@ -1116,7 +1168,8 @@ "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -1147,7 +1200,8 @@ "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true }, "copy-props": { "version": "2.0.5", @@ -1228,6 +1282,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, "requires": { "ms": "2.0.0" } @@ -1241,7 +1296,8 @@ "decode-uri-component": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true }, "decompress": { "version": "4.2.1", @@ -1374,6 +1430,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, "requires": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" @@ -1383,6 +1440,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1391,6 +1449,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1399,6 +1458,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1464,7 +1524,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -1749,6 +1809,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, "requires": { "debug": "^2.3.3", "define-property": "^0.2.5", @@ -1763,6 +1824,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -1771,6 +1833,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1818,6 +1881,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, "requires": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" @@ -1827,6 +1891,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -1837,6 +1902,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, "requires": { "array-unique": "^0.3.2", "define-property": "^1.0.0", @@ -1852,6 +1918,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -1860,6 +1927,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -1868,6 +1936,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1876,6 +1945,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -1884,6 +1954,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -1967,16 +2038,11 @@ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", "dev": true }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "optional": true - }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", @@ -1988,6 +2054,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -2073,7 +2140,8 @@ "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true }, "for-own": { "version": "1.0.0", @@ -2105,6 +2173,7 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, "requires": { "map-cache": "^0.2.2" } @@ -2148,14 +2217,10 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true }, "function-bind": { "version": "1.1.1", @@ -2193,7 +2258,8 @@ "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=" + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true }, "getpass": { "version": "0.1.7", @@ -2221,6 +2287,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, "requires": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" @@ -2230,6 +2297,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "requires": { "is-extglob": "^2.1.0" } @@ -2275,11 +2343,64 @@ "object.defaults": "^1.1.0" }, "dependencies": { + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } } } }, @@ -2578,6 +2699,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, "requires": { "get-value": "^2.0.6", "has-values": "^1.0.0", @@ -2588,6 +2710,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, "requires": { "is-number": "^3.0.0", "kind-of": "^4.0.0" @@ -2597,6 +2720,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2751,6 +2875,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2759,6 +2884,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2772,17 +2898,18 @@ "dev": true }, "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "requires": { - "binary-extensions": "^1.0.0" + "binary-extensions": "^2.0.0" } }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=" + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true }, "is-core-module": { "version": "2.2.0", @@ -2797,6 +2924,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2805,6 +2933,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2815,6 +2944,7 @@ "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, "requires": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", @@ -2824,14 +2954,16 @@ "kind-of": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true } } }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "2.1.1", @@ -2871,6 +3003,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -2879,6 +3012,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -2895,6 +3029,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -2949,7 +3084,8 @@ "is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true }, "isarray": { "version": "1.0.0", @@ -2965,7 +3101,8 @@ "isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true }, "isstream": { "version": "0.1.2", @@ -3087,7 +3224,8 @@ "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true }, "kuler": { "version": "1.0.1", @@ -3429,12 +3567,14 @@ "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=" + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true }, "map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, "requires": { "object-visit": "^1.0.0" } @@ -3484,6 +3624,7 @@ "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -3539,6 +3680,7 @@ "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, "requires": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" @@ -3548,6 +3690,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "requires": { "is-plain-object": "^2.0.4" } @@ -3638,12 +3781,6 @@ "fill-range": "^7.0.1" } }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "chokidar": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", @@ -3916,26 +4053,18 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -3957,7 +4086,8 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true }, "multipipe": { "version": "0.1.2", @@ -3974,12 +4104,6 @@ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true }, - "nan": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", - "optional": true - }, "nanoid": { "version": "3.1.25", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", @@ -3990,6 +4114,7 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, "requires": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", @@ -4056,6 +4181,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" } @@ -4100,6 +4226,7 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, "requires": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", @@ -4110,6 +4237,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4118,6 +4246,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -4139,6 +4268,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, "requires": { "isobject": "^3.0.0" } @@ -4181,6 +4311,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, "requires": { "isobject": "^3.0.1" } @@ -4294,12 +4425,14 @@ "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=" + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=" + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true }, "path-exists": { "version": "4.0.0", @@ -4365,8 +4498,7 @@ "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", - "dev": true + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" }, "pify": { "version": "2.3.0", @@ -4458,7 +4590,8 @@ "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true }, "pretty-hrtime": { "version": "1.0.3", @@ -4563,13 +4696,11 @@ } }, "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "picomatch": "^2.2.1" } }, "rechoir": { @@ -4585,6 +4716,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" @@ -4614,17 +4746,20 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=" + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true }, "repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==" + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true }, "repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true }, "replace-ext": { "version": "1.0.1", @@ -4738,12 +4873,14 @@ "resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=" + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true }, "ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==" + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true }, "rimraf": { "version": "2.7.1", @@ -4763,6 +4900,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, "requires": { "ret": "~0.1.10" } @@ -4849,6 +4987,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, "requires": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", @@ -4860,6 +4999,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4915,6 +5055,7 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, "requires": { "base": "^0.11.1", "debug": "^2.2.0", @@ -4930,6 +5071,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -4938,6 +5080,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "requires": { "is-extendable": "^0.1.0" } @@ -4948,6 +5091,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, "requires": { "define-property": "^1.0.0", "isobject": "^3.0.0", @@ -4958,6 +5102,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "requires": { "is-descriptor": "^1.0.0" } @@ -4966,6 +5111,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4974,6 +5120,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, "requires": { "kind-of": "^6.0.0" } @@ -4982,6 +5129,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, "requires": { "is-accessor-descriptor": "^1.0.0", "is-data-descriptor": "^1.0.0", @@ -4994,6 +5142,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, "requires": { "kind-of": "^3.2.0" }, @@ -5002,6 +5151,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5017,12 +5167,14 @@ "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true }, "source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, "requires": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", @@ -5052,7 +5204,8 @@ "source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true }, "sparkles": { "version": "1.0.1", @@ -5096,6 +5249,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, "requires": { "extend-shallow": "^3.0.0" } @@ -5132,6 +5286,7 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, "requires": { "define-property": "^0.2.5", "object-copy": "^0.1.0" @@ -5141,6 +5296,7 @@ "version": "0.2.5", "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "requires": { "is-descriptor": "^0.1.0" } @@ -5172,7 +5328,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -5376,6 +5532,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, "requires": { "kind-of": "^3.0.2" }, @@ -5384,6 +5541,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "requires": { "is-buffer": "^1.1.5" } @@ -5394,6 +5552,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, "requires": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", @@ -5405,6 +5564,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, "requires": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" @@ -5706,6 +5866,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", @@ -5732,6 +5893,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, "requires": { "has-value": "^0.3.1", "isobject": "^3.0.0" @@ -5741,6 +5903,7 @@ "version": "0.3.1", "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "requires": { "get-value": "^2.0.3", "has-values": "^0.1.4", @@ -5751,6 +5914,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, "requires": { "isarray": "1.0.0" } @@ -5760,14 +5924,16 @@ "has-values": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=" + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true } } }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true }, "uri-js": { "version": "4.2.2", @@ -5781,12 +5947,14 @@ "urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=" + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==" + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true }, "util-deprecate": { "version": "1.0.2", @@ -6310,26 +6478,16 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "^5.0.1" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, "yargs-unparser": { diff --git a/package.json b/package.json index eb749caca..6814e9a7f 100644 --- a/package.json +++ b/package.json @@ -1159,7 +1159,7 @@ "webpack-cli": "^4.6.0" }, "dependencies": { - "chokidar": "^2.1.8", + "chokidar": "^3.5.3", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", diff --git a/webpack.config.js b/webpack.config.js index 749ce3343..eca05999d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -23,6 +23,7 @@ const config = { }, externals: { vscode: "commonjs vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + fsevents: "require('fsevents')", // https://github.com/yan-foto/electron-reload/issues/71#issuecomment-588988382 }, devtool: 'source-map', resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader From cb39f82a0046f6e2a475c998c370800d2ca9104e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 4 Feb 2022 15:08:50 -0500 Subject: [PATCH 108/708] Update to Mocha 9.2.0 Signed-off-by: Roland Grunberg --- package-lock.json | 186 ++++++++-------------------------------------- package.json | 2 +- 2 files changed, 33 insertions(+), 155 deletions(-) diff --git a/package-lock.json b/package-lock.json index 47555dde5..6fb4f9f4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3698,32 +3698,32 @@ } }, "mocha": { - "version": "9.1.3", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.1.3.tgz", - "integrity": "sha512-Xcpl9FqXOAYqI3j79pEtHBBnQgVXIhpULjGQa7DVb0Po+VzmSIK9kanAiWLHoRR/dbZ2qpdPshuXr8l1VaHCzw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", + "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", - "chokidar": "3.5.2", - "debug": "4.3.2", + "chokidar": "3.5.3", + "debug": "4.3.3", "diff": "5.0.0", "escape-string-regexp": "4.0.0", "find-up": "5.0.0", - "glob": "7.1.7", + "glob": "7.2.0", "growl": "1.10.5", "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", "minimatch": "3.0.4", "ms": "2.1.3", - "nanoid": "3.1.25", + "nanoid": "3.2.0", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", "which": "2.0.2", - "workerpool": "6.1.5", + "workerpool": "6.2.0", "yargs": "16.2.0", "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" @@ -3750,53 +3750,12 @@ "color-convert": "^2.0.1" } }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chokidar": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", - "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3824,9 +3783,9 @@ "dev": true }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -3852,15 +3811,6 @@ "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -3871,13 +3821,6 @@ "path-exists": "^4.0.0" } }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -3885,9 +3828,9 @@ "dev": true }, "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -3898,51 +3841,18 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", @@ -3958,21 +3868,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4002,24 +3897,6 @@ "has-flag": "^4.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -4050,14 +3927,6 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } } }, "yargs-parser": { @@ -4105,9 +3974,9 @@ "dev": true }, "nanoid": { - "version": "3.1.25", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.25.tgz", - "integrity": "sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "nanomatch": { @@ -6318,6 +6187,15 @@ } } }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, "which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", @@ -6422,9 +6300,9 @@ } }, "workerpool": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.1.5.tgz", - "integrity": "sha512-XdKkCK0Zqc6w3iTxLckiuJ81tiD/o5rBE/m+nXpRCB+/Sq4DqkfXZ/x0jW02DG1tGsfUGXbTJyZDP+eu67haSw==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", + "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, "wrap-ansi": { @@ -6503,9 +6381,9 @@ }, "dependencies": { "camelcase": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.2.0.tgz", - "integrity": "sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true }, "decamelize": { diff --git a/package.json b/package.json index 6814e9a7f..94d470e77 100644 --- a/package.json +++ b/package.json @@ -1148,7 +1148,7 @@ "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", "minimist": ">=1.2.5", - "mocha": "^9.1.3", + "mocha": "^9.2.0", "request": "^2.88.2", "ts-loader": "^9.2.6", "tslint": "^5.11.0", From d0f1f1178cce1a198a7547f11bc5aa2015acd70a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 14 Feb 2022 15:36:56 -0500 Subject: [PATCH 109/708] Fix typo in npm-install condition for ovsx installation. Signed-off-by: Roland Grunberg --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index 890d77e55..6540a9f6e 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -92,7 +92,7 @@ node('rhel8'){ unstash 'vsix' def vsix = findFiles(glob: '**.vsix') // Open-vsx Marketplace - sh 'npm install -g "ovsx<0.3.0"' + sh 'npm install -g "ovsx@<0.3.0"' withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${vsix[0].path}" } From 8aadf21949409e82e5d9f89d319750937352fa32 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 16 Feb 2022 10:29:15 +0800 Subject: [PATCH 110/708] Deprecate 'java.configuration.checkProjectSettingsExclusions' (#2311) - If users want to change the place to generate metadata files they can use 'java.import.generatesMetadataFilesAtProjectRoot'. - If users just want to hide the metadata files at the file explorer, they can use 'files.exclude' directly. Signed-off-by: Sheng Chen --- README.md | 2 +- package.json | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4a279830f..ea529d9f2 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ The following settings are supported: * `java.trace.server` : Traces the communication between VS Code and the Java language server. * `java.configuration.updateBuildConfiguration` : Specifies how modifications on build files update the Java classpath/configuration. Supported values are `disabled` (nothing happens), `interactive` (asks about updating on every modification), `automatic` (updating is automatically triggered). * `java.configuration.maven.userSettings` : Path to Maven's user settings.xml. -* `java.configuration.checkProjectSettingsExclusions`: Controls whether to exclude extension-generated project settings files (`.project`, `.classpath`, `.factorypath`, `.settings/`) from the file explorer. Defaults to `true`. +* `java.configuration.checkProjectSettingsExclusions`: **Deprecated, please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.** Controls whether to exclude extension-generated project settings files (`.project`, `.classpath`, `.factorypath`, `.settings/`) from the file explorer. Defaults to `false`. * `java.referencesCodeLens.enabled` : Enable/disable the references code lenses. * `java.implementationsCodeLens.enabled` : Enable/disable the implementations code lenses. * `java.signatureHelp.enabled` : Enable/disable signature help support (triggered on `(`). diff --git a/package.json b/package.json index 94d470e77..9b07e01ef 100644 --- a/package.json +++ b/package.json @@ -207,8 +207,9 @@ "scope": "window" }, "java.configuration.checkProjectSettingsExclusions": { + "deprecationMessage": "Please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.", "type": "boolean", - "default": true, + "default": false, "description": "Controls whether to exclude extension-generated project settings files (.project, .classpath, .factorypath, .settings/) from the file explorer.", "scope": "window" }, From 3ad9749dd8edd63ee4f2e887ec7142a3874e3659 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 18 Feb 2022 09:32:41 +0800 Subject: [PATCH 111/708] Provide more alias for code snippets (#2314) - sysout -> sout - syserr -> serr - main -> psvm - foreach -> iter Signed-off-by: Sheng Chen --- snippets/java.json | 2 +- snippets/server.json | 20 ++++++++++---------- src/snippetCompletionProvider.ts | 24 +++++++++++++++++------- 3 files changed, 28 insertions(+), 18 deletions(-) diff --git a/snippets/java.json b/snippets/java.json index cc939847c..fa66f73cc 100644 --- a/snippets/java.json +++ b/snippets/java.json @@ -1,6 +1,6 @@ { "main": { - "prefix": "main", + "prefix": ["main", "psvm"], "body": [ "public static void main(String[] args) {", "\t$0", diff --git a/snippets/server.json b/snippets/server.json index 6af003926..c7d5493ec 100644 --- a/snippets/server.json +++ b/snippets/server.json @@ -1,20 +1,20 @@ { "sysout": { - "prefix": "sysout", + "prefix": ["sysout", "sout"], "body": [ "System.out.println($0);" ], "description": "Print to standard out" }, "syserr": { - "prefix": "syserr", + "prefix": ["syserr", "serr"], "body": [ "System.err.println($0);" ], "description": "Print to standard err" }, "fori": { - "prefix": "fori", + "prefix": ["fori"], "body": [ "for (${1:int} ${2:i} = ${3:0}; ${2:i} < ${4:max}; ${2:i}++) {", "\t$0", @@ -23,7 +23,7 @@ "description": "Indexed for loop" }, "foreach": { - "prefix": "foreach", + "prefix": ["foreach", "iter"], "body": [ "for (${1:type} ${2:var} : ${3:iterable}) {", "\t$0", @@ -32,7 +32,7 @@ "description": "Enhanced for loop" }, "if": { - "prefix": "if", + "prefix": ["if"], "body": [ "if (${1:condition}) {", "\t$0", @@ -41,7 +41,7 @@ "description": "if statement" }, "ifelse": { - "prefix": "ifelse", + "prefix": ["ifelse"], "body": [ "if (${1:condition}) {", "\t$2", @@ -52,7 +52,7 @@ "description": "if/else statement" }, "ifnull": { - "prefix": "ifnull", + "prefix": ["ifnull"], "body": [ "if (${1:condition} == null) {", "\t$0", @@ -61,7 +61,7 @@ "description": "if statement checking for null" }, "ifnotnull": { - "prefix": "ifnotnull", + "prefix": ["ifnotnull"], "body": [ "if (${1:condition} != null) {", "\t$0", @@ -70,7 +70,7 @@ "description": "if statement checking for not null" }, "While Statement": { - "prefix": "while", + "prefix": ["while"], "body": [ "while (${1:condition}) {", "\t$0", @@ -79,7 +79,7 @@ "description": "While Statement" }, "Do-While Statement": { - "prefix": "dowhile", + "prefix": ["dowhile"], "body": [ "do {", "\t$0", diff --git a/src/snippetCompletionProvider.ts b/src/snippetCompletionProvider.ts index c2cf87b29..a56efb85e 100644 --- a/src/snippetCompletionProvider.ts +++ b/src/snippetCompletionProvider.ts @@ -22,16 +22,26 @@ export class SnippetCompletionProvider implements CompletionItemProvider { const snippetItems: CompletionItem[] = []; for (const label of Object.keys(this.snippets)) { const snippetContent = this.snippets[label]; - const snippetItem: CompletionItem = new CompletionItem(snippetContent.prefix); - snippetItem.kind = CompletionItemKind.Snippet; - snippetItem.detail = snippetContent.description; - const insertText: string = (snippetContent.body as String[]).join('\n'); - snippetItem.insertText = new SnippetString(insertText); - snippetItem.documentation = beautifyDocument(insertText); - snippetItems.push(snippetItem); + if (Array.isArray(snippetContent.prefix)) { + for (const prefix of snippetContent.prefix) { + snippetItems.push(this.getCompletionItem(prefix, snippetContent)); + } + } else { + snippetItems.push(this.getCompletionItem(snippetContent.prefix, snippetContent)); + } } return snippetItems; } + + private getCompletionItem(prefix: string, snippetContent: any) { + const snippetItem: CompletionItem = new CompletionItem(prefix); + snippetItem.kind = CompletionItemKind.Snippet; + snippetItem.detail = snippetContent.description; + const insertText: string = (snippetContent.body as String[]).join('\n'); + snippetItem.insertText = new SnippetString(insertText); + snippetItem.documentation = beautifyDocument(insertText); + return snippetItem; + } } export function beautifyDocument(raw: string): MarkdownString { From d8a989b49f74178f80da94c2de12fe938f7feaee Mon Sep 17 00:00:00 2001 From: Quan Zhuo Date: Sun, 20 Feb 2022 19:35:12 +0800 Subject: [PATCH 112/708] Fix issue #2319: Open Java extension log doesn't open latest file Signed-off-by: Quan Zhuo --- src/extension.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index e3726aa25..d713b4651 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -727,7 +727,19 @@ function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Acti // find out the newest one glob(filename + '.*', { cwd: dirname }, (err, files) => { if (!err && files.length > 0) { - files.sort(); + files.sort((a, b) => { + const dateA = a.slice(11, 21), dateB = b.slice(11, 21); + if (dateA === dateB) { + if (a.length > 22 && b.length > 22) { + const extA = a.slice(22), extB = b.slice(22); + return parseInt(extA) - parseInt(extB); + } else { + return a.length - b.length; + } + } else { + return dateA < dateB ? -1 : 1; + } + }); logFile = path.join(dirname, files[files.length - 1]); } From fc4a2dd28759c9453c4fc5044c085b01391ee8f5 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Mon, 14 Feb 2022 18:45:57 +0100 Subject: [PATCH 113/708] Autoclose multiline strings (JEP 368) Signed-off-by: Snjezana Peco --- language-configuration.json | 11 +++++++++++ src/extension.ts | 3 ++- src/settings.ts | 34 +++++++++++++++++++++++++++++++++- 3 files changed, 46 insertions(+), 2 deletions(-) diff --git a/language-configuration.json b/language-configuration.json index bf48f2fc8..ce7d3fee1 100644 --- a/language-configuration.json +++ b/language-configuration.json @@ -18,6 +18,10 @@ [ "(", ")" + ], + [ + "\"\"\"", + "\"\"\"" ] ], "autoClosingPairs": [ @@ -47,6 +51,13 @@ "notIn": [ "string" ] + }, + { + "open": "\"\"\"", + "close": "\"\"\";", + "notIn": [ + "comment" + ] } ], "surroundingPairs": [ diff --git a/src/extension.ts b/src/extension.ts index d713b4651..0eb083c44 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -14,7 +14,7 @@ import { initialize as initializeRecommendation } from './recommendation'; import { Commands } from './commands'; import { ExtensionAPI, ClientStatus } from './extension.api'; import { getJavaConfiguration, deleteDirectory, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, convertToGlob, getExclusionBlob, ensureExists } from './utils'; -import { onConfigurationChange, getJavaServerMode, ServerMode, ACTIVE_BUILD_TOOL_STATE } from './settings'; +import { onConfigurationChange, getJavaServerMode, ServerMode, ACTIVE_BUILD_TOOL_STATE, handleTextBlockClosing } from './settings'; import { logger, initializeLogFile } from './log'; import glob = require('glob'); import { SyntaxLanguageClient } from './syntaxLanguageClient'; @@ -464,6 +464,7 @@ export function activate(context: ExtensionContext): Promise { } })); } + context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextBlockClosing(event.document, event.contentChanges))); }); }); } diff --git a/src/settings.ts b/src/settings.ts index 0e8e31341..05c95ac36 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,7 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; -import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder } from 'vscode'; +import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder, TextDocument, Position, SnippetString, TextLine } from 'vscode'; import { Commands } from './commands'; import { cleanWorkspaceFileName } from './extension'; import { ensureExists, getJavaConfiguration } from './utils'; @@ -287,3 +287,35 @@ function unregisterGradleWrapperPromptDialog(sha256: string) { gradleWrapperPromptDialogs.splice(index, 1); } } + +export function handleTextBlockClosing(document: TextDocument, changes: readonly import("vscode").TextDocumentContentChangeEvent[]): any { + const activeTextEditor = window.activeTextEditor; + const activeDocument = activeTextEditor && activeTextEditor.document; + if (document !== activeDocument || changes.length === 0 || document.languageId !== 'java') { + return; + } + const lastChange = changes[changes.length - 1]; + if (lastChange.text === null || lastChange.text.length <= 0) { + return; + } + if (lastChange.text !== '"""";') { + return; + } + const selection = activeTextEditor.selection.active; + if (selection !== null) { + const start = new Position(selection.line, selection.character - 2); + const end = new Position(selection.line, selection.character + 4); + const range = new Range(start, end); + const activeText = activeDocument.getText(range); + if (activeText === '""""""') { + const tabSize = activeTextEditor.options.tabSize!; + const tabSpaces = activeTextEditor.options.insertSpaces!; + const indentLevel = 2; + const indentSize = tabSpaces ? indentLevel * tabSize : indentLevel; + const repeatChar = tabSpaces ? ' ' : '\t'; + const text = `\n${repeatChar.repeat(indentSize)}\$\{0\}\n${repeatChar.repeat(indentSize)}`; + const position = new Position(selection.line, selection.character + 1); + activeTextEditor.insertSnippet(new SnippetString(text), position); + } + } +} From 93b925823213ca6d53f265e56c06a6ba69f02844 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 23 Feb 2022 10:08:03 -0500 Subject: [PATCH 114/708] Set java.configuration.workspaceCacheLimit default value to 90. - Avoid deleting temporary workspaces as they should have their own policy defined by the operating system - Enable cleaning of cache for workspaces that have been inactive for over 90 days Signed-off-by: Roland Grunberg --- package.json | 2 +- src/extension.ts | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 9b07e01ef..c93ce6e7c 100644 --- a/package.json +++ b/package.json @@ -361,7 +361,7 @@ "null", "integer" ], - "default": null, + "default": 90, "minimum": 1, "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", "scope": "application" diff --git a/src/extension.ts b/src/extension.ts index 0eb083c44..0f522083b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -989,7 +989,8 @@ function isPrefix(parentPath: string, childPath: string): boolean { async function cleanJavaWorkspaceStorage() { const configCacheLimit = getJavaConfiguration().get("configuration.workspaceCacheLimit"); - if (!storagePath || !configCacheLimit) { + // Also leave temporary workspaces alone as they should have their own policy + if (!storagePath || !configCacheLimit || storagePath.includes('vscodesws')) { return; } From 27f730560ae28b1817a0fb6c86ede183edb0f5a6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 28 Feb 2022 11:28:52 -0500 Subject: [PATCH 115/708] Add Changelog for 1.4.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index eef5dbcff..bfc126f56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 1.4.0 (March 3rd, 2022) + * enhancement - Trigger completion after `new` keyword. See [#1666](https://github.com/redhat-developer/vscode-java/issues/1666). + * enhancement - Improve occurrences highlighting. See [JLS#1941](https://github.com/eclipse/eclipse.jdt.ls/pull/1941). + * enhancement - Autoclose multiline strings (JEP 368). See [#1428](https://github.com/redhat-developer/vscode-java/issues/1428). + * enhancement - Provide more aliases for code snippets. See [#2314](https://github.com/redhat-developer/vscode-java/pull/2314). + * bug fix - "Add serial version ID" should not generate empty comments. See [JLS#1899](https://github.com/eclipse/eclipse.jdt.ls/issues/1899). + * bug fix - Convert to static import incorrectly removes import statements. See [JLS#1203](https://github.com/eclipse/eclipse.jdt.ls/issues/1203). + * bug fix - Open Java extension log doesn't open latest file. See [#2319](https://github.com/redhat-developer/vscode-java/issues/2319). + * bug fix - Type mismatch: cannot convert from `Object` to `Map`. See [JLS#1971](https://github.com/eclipse/eclipse.jdt.ls/issues/1971). + * bug fix - Signature help occasionally fails on constructors and qualified method invocations. See [#2097](https://github.com/redhat-developer/vscode-java/issues/2097). + * other - Set `java.configuration.workspaceCacheLimit` default value to 90. See [#2330](https://github.com/redhat-developer/vscode-java/pull/2330). + * other - Deprecate `java.configuration.checkProjectSettingsExclusions`. See [#2311](https://github.com/redhat-developer/vscode-java/pull/2311). + ## 1.3.0 (January 24th, 2022) * enhancement - Support completion for lambda expressions. See [JLS#1985](https://github.com/eclipse/eclipse.jdt.ls/issues/1985). * enhancement - Add "Convert to Switch Expression" code assist proposal. See [JLS#1935](https://github.com/eclipse/eclipse.jdt.ls/pull/1935). From 083f580be70dfe7a6f76b0e92b18554a6f1b8c72 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 3 Mar 2022 16:46:35 -0500 Subject: [PATCH 116/708] Upversion to 1.5.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fb4f9f4b..b4f058628 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.4.0", + "version": "1.5.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c93ce6e7c..afa0a3356 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.4.0", + "version": "1.5.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 49d341da05f62ba099bd0447b2b914b23c03c274 Mon Sep 17 00:00:00 2001 From: fvclaus Date: Tue, 8 Mar 2022 09:40:45 +0100 Subject: [PATCH 117/708] Feature proposal: Navigate to class declaration (#2132) Signed-off-by: Frederik Claus --- src/commands.ts | 2 ++ src/providerDispatcher.ts | 58 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 57 insertions(+), 3 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 8cc000ee6..d8b2b8328 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -244,4 +244,6 @@ export namespace Commands { export const MEATDATA_FILES_GENERATION = '_java.metadataFilesGeneration'; export const RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open'; + + export const RESOLVE_WORKSPACE_SYMBOL = 'java.project.resolveWorkspaceSymbol'; } diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 740b00acb..f9b768dfa 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -1,13 +1,15 @@ 'use strict'; -import { DocumentSymbolRequest, SymbolInformation as clientSymbolInformation, DocumentSymbol as clientDocumentSymbol, HoverRequest } from "vscode-languageclient"; +import { DocumentSymbolRequest, SymbolInformation as clientSymbolInformation, DocumentSymbol as clientDocumentSymbol, HoverRequest, WorkspaceSymbolRequest } from "vscode-languageclient"; import { LanguageClient } from "vscode-languageclient/node"; -import { ExtensionContext, languages, DocumentSymbolProvider, TextDocument, CancellationToken, SymbolInformation, DocumentSymbol, TextDocumentContentProvider, workspace, Uri, Event, HoverProvider, Position, Hover } from "vscode"; -import { ClassFileContentsRequest } from "./protocol"; +import { ExtensionContext, languages, DocumentSymbolProvider, TextDocument, CancellationToken, SymbolInformation, DocumentSymbol, TextDocumentContentProvider, workspace, Uri, Event, HoverProvider, Position, Hover, WorkspaceSymbolProvider, Range, commands, SymbolKind } from "vscode"; +import { ClassFileContentsRequest, StatusNotification } from "./protocol"; import { createClientHoverProvider } from "./hoverAction"; import { getActiveLanguageClient } from "./extension"; import { apiManager } from "./apiManager"; import { ServerMode } from "./settings"; +import { serverStatus, ServerStatusKind } from "./serverStatus"; +import { Commands } from "./commands"; export interface ProviderOptions { contentProviderEvent: Event; @@ -26,6 +28,9 @@ export function registerClientProviders(context: ExtensionContext, options: Prov const jdtProvider = createJDTContentProvider(options); context.subscriptions.push(workspace.registerTextDocumentContentProvider('jdt', jdtProvider)); + + overwriteWorkspaceSymbolProvider(context); + return { handles: [hoverProvider, symbolProvider, jdtProvider] }; @@ -100,3 +105,50 @@ function createDocumentSymbolProvider(): DocumentSymbolProvider { } }; } + +const START_OF_DOCUMENT = new Range(new Position(0, 0), new Position(0, 0)); + +function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: WorkspaceSymbolProvider): WorkspaceSymbolProvider { + return { + provideWorkspaceSymbols: existingWorkspaceSymbolProvider.provideWorkspaceSymbols, + resolveWorkspaceSymbol: async (symbol: SymbolInformation, token: CancellationToken): Promise => { + const range = symbol.location.range; + if (range && !range.isEqual(START_OF_DOCUMENT)) { + return symbol; + } + + const languageClient = await getActiveLanguageClient(); + const serializableSymbol = { + name: symbol.name, + // Cannot serialize SymbolKind as number, because GSON + lsp4j.SymbolKind expect a name. + kind: SymbolKind[symbol.kind], + location: { + uri: languageClient.code2ProtocolConverter.asUri(symbol.location.uri), + range: languageClient.code2ProtocolConverter.asRange(symbol.location.range) + }, + containerName: symbol.containerName + }; + + const response = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.RESOLVE_WORKSPACE_SYMBOL, JSON.stringify(serializableSymbol)); + if (token.isCancellationRequested) { + return undefined; + } + return languageClient.protocol2CodeConverter.asSymbolInformation(response as clientSymbolInformation); + } + }; +} + +function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { + const disposable = apiManager.getApiInstance().onDidServerModeChange( async (mode) => { + if (mode === ServerMode.STANDARD) { + const feature = (await getActiveLanguageClient()).getFeature(WorkspaceSymbolRequest.method); + const providers = feature.getProviders(); + if (providers && providers.length > 0) { + feature.dispose(); + const workspaceSymbolProvider = createWorkspaceSymbolProvider(providers[0]); + context.subscriptions.push(languages.registerWorkspaceSymbolProvider(workspaceSymbolProvider)); + disposable.dispose(); + } + } + }); +} \ No newline at end of file From 8fbc1facf5fc714531505b0bb1b2374e90f61562 Mon Sep 17 00:00:00 2001 From: Parth Thakkar Date: Tue, 8 Mar 2022 16:18:00 -0600 Subject: [PATCH 118/708] Make java.configuration.runtimes machine-overridable (#2337) Make java.configuration.runtimes machine-overridable - Add java.configuration.runtimes to restricted configurations Signed-off-by: Parth Thakkar --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index afa0a3356..81f2bbed5 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,8 @@ "restrictedConfigurations": [ "java.jdt.ls.java.home", "java.home", - "java.jdt.ls.vmargs" + "java.jdt.ls.vmargs", + "java.configuration.runtimes" ] }, "virtualWorkspaces": false @@ -721,7 +722,7 @@ "additionalProperties": false }, "default": [], - "scope": "machine" + "scope": "machine-overridable" }, "java.server.launchMode": { "type": "string", From ca9e8cc41b21fabd761b66f02eadbef8b300e173 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 28 Feb 2022 17:10:05 -0500 Subject: [PATCH 119/708] Ensure that client-side commands do not clash with server-side. - Some client-side commands that call their server-side counterparts via. java.execute.workspaceCommand clash with the same command when it gets registered again via client/registerCapability - Fixes #2331 Signed-off-by: Roland Grunberg --- package.json | 26 +++++++++++----------- src/buildpath.ts | 6 ++--- src/commands.ts | 10 +++++++++ src/fileEventHandler.ts | 2 +- src/standardLanguageClient.ts | 8 +++---- test/standard-mode-suite/extension.test.ts | 10 ++++----- test/standard-mode-suite/publicApi.test.ts | 2 +- 7 files changed, 37 insertions(+), 27 deletions(-) diff --git a/package.json b/package.json index 81f2bbed5..c589da27e 100644 --- a/package.json +++ b/package.json @@ -877,7 +877,7 @@ "category": "Java" }, { - "command": "java.project.import", + "command": "java.project.import.command", "title": "%java.project.import%", "category": "Java" }, @@ -912,22 +912,22 @@ "category": "Java" }, { - "command": "java.project.updateSourceAttachment", + "command": "java.project.updateSourceAttachment.command", "title": "%java.project.updateSourceAttachment%", "category": "Java" }, { - "command": "java.project.addToSourcePath", + "command": "java.project.addToSourcePath.command", "title": "%java.project.addToSourcePath%", "category": "Java" }, { - "command": "java.project.removeFromSourcePath", + "command": "java.project.removeFromSourcePath.command", "title": "%java.project.removeFromSourcePath%", "category": "Java" }, { - "command": "java.project.listSourcePaths", + "command": "java.project.listSourcePaths.command", "title": "%java.project.listSourcePaths%", "category": "Java" }, @@ -999,18 +999,18 @@ }, { "when": "explorerResourceIsFolder&&javaLSReady", - "command": "java.project.addToSourcePath", + "command": "java.project.addToSourcePath.command", "group": "1_javaactions@1" }, { "when": "explorerResourceIsFolder&&javaLSReady", - "command": "java.project.removeFromSourcePath", + "command": "java.project.removeFromSourcePath.command", "group": "1_javaactions@2" } ], "editor/context": [ { - "command": "java.project.updateSourceAttachment", + "command": "java.project.updateSourceAttachment.command", "when": "editorReadonly && editorLangId == java", "group": "1_javaactions" }, @@ -1036,7 +1036,7 @@ "when": "javaLSReady" }, { - "command": "java.project.import", + "command": "java.project.import.command", "when": "javaLSReady" }, { @@ -1048,7 +1048,7 @@ "when": "javaLSReady" }, { - "command": "java.project.listSourcePaths", + "command": "java.project.listSourcePaths.command", "when": "javaLSReady" }, { @@ -1072,15 +1072,15 @@ "when": "false" }, { - "command": "java.project.updateSourceAttachment", + "command": "java.project.updateSourceAttachment.command", "when": "false" }, { - "command": "java.project.addToSourcePath", + "command": "java.project.addToSourcePath.command", "when": "false" }, { - "command": "java.project.removeFromSourcePath", + "command": "java.project.removeFromSourcePath.command", "when": "false" }, { diff --git a/src/buildpath.ts b/src/buildpath.ts index daf7ffbed..a2b9d832c 100644 --- a/src/buildpath.ts +++ b/src/buildpath.ts @@ -21,7 +21,7 @@ export interface ListCommandResult extends Result { } export function registerCommands(context: ExtensionContext) { - context.subscriptions.push(commands.registerCommand(Commands.ADD_TO_SOURCEPATH, async (uri: Uri) => { + context.subscriptions.push(commands.registerCommand(Commands.ADD_TO_SOURCEPATH_CMD, async (uri: Uri) => { const result = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.ADD_TO_SOURCEPATH, uri.toString()); if (result.status) { if (result.sourcePaths) { @@ -33,7 +33,7 @@ export function registerCommands(context: ExtensionContext) { } })); - context.subscriptions.push(commands.registerCommand(Commands.REMOVE_FROM_SOURCEPATH, async (uri: Uri) => { + context.subscriptions.push(commands.registerCommand(Commands.REMOVE_FROM_SOURCEPATH_CMD, async (uri: Uri) => { const result = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.REMOVE_FROM_SOURCEPATH, uri.toString()); if (result.status) { if (result.sourcePaths) { @@ -45,7 +45,7 @@ export function registerCommands(context: ExtensionContext) { } })); - context.subscriptions.push(commands.registerCommand(Commands.LIST_SOURCEPATHS, async() => { + context.subscriptions.push(commands.registerCommand(Commands.LIST_SOURCEPATHS_CMD, async() => { const result: ListCommandResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.LIST_SOURCEPATHS); if (result.status) { if (!result.data || !result.data.length) { diff --git a/src/commands.ts b/src/commands.ts index d8b2b8328..300dcc84d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -104,7 +104,9 @@ export namespace Commands { export const CLEAN_WORKSPACE = 'java.clean.workspace'; /** * Update the source attachment for the selected class file + * client-side & server-side commands */ + export const UPDATE_SOURCE_ATTACHMENT_CMD = 'java.project.updateSourceAttachment.command'; export const UPDATE_SOURCE_ATTACHMENT = 'java.project.updateSourceAttachment'; /** * Resolve the source attachment information for the selected class file @@ -112,19 +114,27 @@ export namespace Commands { export const RESOLVE_SOURCE_ATTACHMENT = 'java.project.resolveSourceAttachment'; /** * Mark the folder as the source root of the closest project. + * client-side & server-side commands */ + export const ADD_TO_SOURCEPATH_CMD = 'java.project.addToSourcePath.command'; export const ADD_TO_SOURCEPATH = 'java.project.addToSourcePath'; /** * Unmark the folder as the source root of the project. + * client-side & server-side commands */ + export const REMOVE_FROM_SOURCEPATH_CMD = 'java.project.removeFromSourcePath.command'; export const REMOVE_FROM_SOURCEPATH = 'java.project.removeFromSourcePath'; /** * List all recognized source roots in the workspace. + * client-side & server-side commands */ + export const LIST_SOURCEPATHS_CMD = 'java.project.listSourcePaths.command'; export const LIST_SOURCEPATHS = 'java.project.listSourcePaths'; /** * Import new projects + * client-side & server-side commands */ + export const IMPORT_PROJECTS_CMD = 'java.project.import.command'; export const IMPORT_PROJECTS = 'java.project.import'; /** * Override or implements the methods from the supertypes. diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index b9f5160fb..ad8daef27 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -50,7 +50,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { let sourcePaths: string[] = []; if (serverReady) { - const result: ListCommandResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.LIST_SOURCEPATHS); + const result: ListCommandResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.LIST_SOURCEPATHS_CMD); if (result && result.data && result.data.length) { sourcePaths = result.data.map((sourcePath) => sourcePath.path).sort((a, b) => b.length - a.length); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 38f4c4d0a..49189b776 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -260,7 +260,7 @@ export class StandardLanguageClient { } else if (choice.startsWith(USE_JAVA)) { await workspace.getConfiguration().update(GRADLE_IMPORT_JVM, newJavaHome, ConfigurationTarget.Global); commands.executeCommand("workbench.action.openSettings", GRADLE_IMPORT_JVM); - commands.executeCommand(Commands.IMPORT_PROJECTS); + commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); } else if (choice.startsWith(UPGRADE_GRADLE)) { const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); if (!useWrapper) { @@ -285,14 +285,14 @@ export class StandardLanguageClient { window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); } } - commands.executeCommand(Commands.IMPORT_PROJECTS); + commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); } } }); } private registerCommandsForStandardServer(context: ExtensionContext, jdtEventEmitter: EventEmitter): void { - context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS, async () => { + context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS_CMD, async () => { return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); })); @@ -432,7 +432,7 @@ export class StandardLanguageClient { }); })); - context.subscriptions.push(commands.registerCommand(Commands.UPDATE_SOURCE_ATTACHMENT, async (classFileUri: Uri): Promise => { + context.subscriptions.push(commands.registerCommand(Commands.UPDATE_SOURCE_ATTACHMENT_CMD, async (classFileUri: Uri): Promise => { const resolveRequest: SourceAttachmentRequest = { classFileUri: classFileUri.toString(), }; diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 5a6f044c7..8d3d741a0 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -30,7 +30,7 @@ suite('Java Language Extension - Standard', () => { return vscode.commands.getCommands(true).then((commands) => { const JAVA_COMMANDS = [ - Commands.ADD_TO_SOURCEPATH, + Commands.ADD_TO_SOURCEPATH_CMD, Commands.APPLY_REFACTORING_COMMAND, Commands.APPLY_WORKSPACE_EDIT, Commands.CHOOSE_IMPORTS, @@ -46,8 +46,8 @@ suite('Java Language Extension - Standard', () => { Commands.HASHCODE_EQUALS_PROMPT, Commands.IGNORE_INCOMPLETE_CLASSPATH, Commands.IGNORE_INCOMPLETE_CLASSPATH_HELP, - Commands.IMPORT_PROJECTS, - Commands.LIST_SOURCEPATHS, + Commands.IMPORT_PROJECTS_CMD, + Commands.LIST_SOURCEPATHS_CMD, Commands.NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND, Commands.OPEN_CLIENT_LOG, Commands.OPEN_FORMATTER, @@ -58,13 +58,13 @@ suite('Java Language Extension - Standard', () => { Commands.ORGANIZE_IMPORTS, Commands.OVERRIDE_METHODS_PROMPT, Commands.PROJECT_CONFIGURATION_STATUS, - Commands.REMOVE_FROM_SOURCEPATH, + Commands.REMOVE_FROM_SOURCEPATH_CMD, Commands.RENAME_COMMAND, Commands.SHOW_JAVA_IMPLEMENTATIONS, Commands.SHOW_JAVA_REFERENCES, Commands.SHOW_SERVER_TASK_STATUS, Commands.SWITCH_SERVER_MODE, - Commands.UPDATE_SOURCE_ATTACHMENT, + Commands.UPDATE_SOURCE_ATTACHMENT_CMD, Commands.RUNTIME_VALIDATION_OPEN, Commands.CHANGE_BASE_TYPE, Commands.SHOW_TYPE_HIERARCHY, diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index e5f38eb4f..0b93c7161 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -159,7 +159,7 @@ suite('Public APIs - Standard', () => { api.onDidProjectsImport(() => { return resolve(); }); - await commands.executeCommand(Commands.IMPORT_PROJECTS); + await commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); }); }); From e11c4e3870fded429758da05030e6444dfbdf621 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Fri, 18 Mar 2022 12:58:53 +0800 Subject: [PATCH 120/708] change max size of client.log (#2356) Signed-off-by: Yan Zhang --- src/log.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/log.ts b/src/log.ts index 743ef131c..ce340c3d9 100644 --- a/src/log.ts +++ b/src/log.ts @@ -5,7 +5,7 @@ export function initializeLogFile(filename: string) { logger.add(new DailyRotateFile({ filename: filename, datePattern: 'YYYY-MM-DD', - maxSize: '100k', // 100k max size per file + maxSize: '1m', // 1MB max size per file maxFiles: '2d' // retain logs of the last two days })); } From 7ed079860ac01d35099021f55d7139718b3fe9fe Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Fri, 18 Mar 2022 14:25:34 +0800 Subject: [PATCH 121/708] update jdk-utils to detect jdk installed by asdf-vm (#2365) Signed-off-by: Yan Zhang --- package-lock.json | 84 ++++++++++++++++++++++++++++++++--------------- package.json | 2 +- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index b4f058628..8171aa46c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -436,7 +436,7 @@ "arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", "dev": true }, "arr-map": { @@ -1318,7 +1318,7 @@ "decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", "dev": true, "requires": { "file-type": "^5.2.0", @@ -1337,7 +1337,7 @@ "decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", "dev": true, "requires": { "decompress-tar": "^4.1.0", @@ -1350,7 +1350,7 @@ "file-type": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", "dev": true } } @@ -1358,7 +1358,7 @@ "decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", "dev": true, "requires": { "decompress-tar": "^4.1.1", @@ -1524,7 +1524,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", "dev": true } @@ -2908,7 +2908,7 @@ "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, "is-core-module": { @@ -3111,9 +3111,9 @@ "dev": true }, "jdk-utils": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.2.tgz", - "integrity": "sha512-Xc9KTVXJ048A3EaCyBRAzLRNhDEZQq/awcZHCQCvV9lnYEFMrnLZh7ZzCnFiXLCXWN9JDm9A0BW8MfTbLthA3g==" + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.3.tgz", + "integrity": "sha512-6d4tEkaBfpbQy32TF8lt+CFYaaWicBQEekWO5HozSzSMY4Y2ufsdNhpUbza0r2cuGEzoScE1r8vd9wkuUgypAA==" }, "jest-worker": { "version": "26.6.2", @@ -3756,6 +3756,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3927,13 +3933,29 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -5197,7 +5219,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" @@ -5224,7 +5246,7 @@ "strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", "dev": true, "requires": { "is-natural-number": "^4.0.1" @@ -6356,16 +6378,26 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "^5.0.1" - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + } } }, "yargs-unparser": { diff --git a/package.json b/package.json index c589da27e..cae8117ad 100644 --- a/package.json +++ b/package.json @@ -1166,7 +1166,7 @@ "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", - "jdk-utils": "^0.4.2", + "jdk-utils": "^0.4.3", "semver": "^7.3.5", "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", From 33888e82f80c4dcc3eb371d7d7eb5b56a8a46ba0 Mon Sep 17 00:00:00 2001 From: fvclaus Date: Tue, 22 Mar 2022 14:49:24 +0100 Subject: [PATCH 122/708] Enable git signoff (#2369) * Convert tabs to spaces Signed-off-by: Frederik Claus --- .vscode/settings.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 03777980a..4012de914 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,11 +1,12 @@ // Place your settings in this file to overwrite default and user settings. { - "files.exclude": { - "out": false // set this to true to hide the "out" folder with the compiled JS files - }, - "search.exclude": { - "out": true // set this to false to include "out" folder in search results - }, + "files.exclude": { + "out": false // set this to true to hide the "out" folder with the compiled JS files + }, + "search.exclude": { + "out": true // set this to false to include "out" folder in search results + }, "typescript.tsdk": "./node_modules/typescript/lib", + "git.alwaysSignOff": true, "vsicons.presets.angular": false // we want to use the TS server from our node_modules folder to control its version } \ No newline at end of file From 43d76694632d3478db1ab9877642ef953eb3f2ab Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 25 Mar 2022 13:38:28 +0800 Subject: [PATCH 123/708] Provide client-side snippet until language server is ready (#2240) * Provide client-side snippet until language server is ready Signed-off-by: sheche --- src/extension.ts | 5 ++--- src/snippetCompletionProvider.ts | 27 ++++++++++++++++++++------- src/standardLanguageClient.ts | 3 +++ src/syntaxLanguageClient.ts | 3 +++ 4 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 0f522083b..3902936e2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -22,7 +22,7 @@ import { registerClientProviders } from './providerDispatcher'; import * as fileEventHandler from './fileEventHandler'; import { StandardLanguageClient } from './standardLanguageClient'; import { apiManager } from './apiManager'; -import { SnippetCompletionProvider } from './snippetCompletionProvider'; +import { snippetCompletionProvider } from './snippetCompletionProvider'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -408,8 +408,7 @@ export function activate(context: ExtensionContext): Promise { } }); - const snippetProvider: SnippetCompletionProvider = new SnippetCompletionProvider(); - context.subscriptions.push(languages.registerCompletionItemProvider({ scheme: 'file', language: 'java' }, snippetProvider)); + context.subscriptions.push(snippetCompletionProvider.initialize()); context.subscriptions.push(serverStatusBarProvider); context.subscriptions.push(runtimeStatusBarProvider); diff --git a/src/snippetCompletionProvider.ts b/src/snippetCompletionProvider.ts index a56efb85e..fda426de3 100644 --- a/src/snippetCompletionProvider.ts +++ b/src/snippetCompletionProvider.ts @@ -1,12 +1,26 @@ 'use strict'; -import { CompletionItemProvider, TextDocument, Position, CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, SnippetString, MarkdownString } from "vscode"; +import { CompletionItemProvider, TextDocument, Position, CancellationToken, CompletionContext, CompletionItem, CompletionItemKind, SnippetString, MarkdownString, languages, Disposable } from "vscode"; import * as fse from 'fs-extra'; import * as path from 'path'; -import { apiManager } from "./apiManager"; -import { ClientStatus } from "./extension.api"; -export class SnippetCompletionProvider implements CompletionItemProvider { +class SnippetCompletionProvider implements Disposable { + + private providerImpl: Disposable; + + public initialize(): SnippetCompletionProvider { + this.providerImpl = languages.registerCompletionItemProvider({ scheme: 'file', language: 'java' }, new SnippetCompletionProviderImpl()); + return this; + } + + public dispose(): void { + if (this.providerImpl) { + this.providerImpl.dispose(); + } + } +} + +class SnippetCompletionProviderImpl implements CompletionItemProvider { private snippets: {}; @@ -15,9 +29,6 @@ export class SnippetCompletionProvider implements CompletionItemProvider { } public async provideCompletionItems(_document: TextDocument, _position: Position, _token: CancellationToken, _context: CompletionContext): Promise { - if (apiManager.getApiInstance().status === ClientStatus.Started) { - return []; - } const snippetItems: CompletionItem[] = []; for (const label of Object.keys(this.snippets)) { @@ -48,3 +59,5 @@ export function beautifyDocument(raw: string): MarkdownString { const escapedString = raw.replace(/\$\{\d:?(.*?)\}/gm, '$1').replace(/\$\d/gm, ''); return new MarkdownString().appendCodeblock(escapedString, "java"); } + +export const snippetCompletionProvider: SnippetCompletionProvider = new SnippetCompletionProvider(); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 49189b776..e2ba98ad6 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -33,6 +33,7 @@ import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/proto import { buildFilePatterns } from './plugin'; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; import { findRuntimes, IJavaRuntime } from "jdk-utils"; +import { snippetCompletionProvider } from "./snippetCompletionProvider"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -110,6 +111,8 @@ export class StandardLanguageClient { if (!hasImported) { showImportFinishNotification(context); } + // Disable the client-side snippet provider since LS is ready. + snippetCompletionProvider.dispose(); break; case 'Started': this.status = ClientStatus.Started; diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 354a8726f..8c886740e 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -9,6 +9,7 @@ import { ServerMode } from "./settings"; import { StatusNotification } from "./protocol"; import { apiManager } from "./apiManager"; import { ExtensionAPI, ClientStatus } from "./extension.api"; +import { snippetCompletionProvider } from "./snippetCompletionProvider"; const extensionName = "Language Support for Java (Syntax Server)"; @@ -61,6 +62,8 @@ export class SyntaxLanguageClient { case 'Started': this.status = ClientStatus.Started; apiManager.updateStatus(ClientStatus.Started); + // Disable the client-side snippet provider since LS is ready. + snippetCompletionProvider.dispose(); break; case 'Error': this.status = ClientStatus.Error; From 998f2f082352e9b63725542c1ea31b2377226a41 Mon Sep 17 00:00:00 2001 From: fvclaus Date: Fri, 25 Mar 2022 06:42:36 +0100 Subject: [PATCH 124/708] Change scope of jvmargs configuration (#2368) Signed-off-by: Frederik Claus --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cae8117ad..6c08f7c0e 100644 --- a/package.json +++ b/package.json @@ -191,7 +191,7 @@ ], "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m", "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m ` to optimize memory usage with the parallel garbage collector", - "scope": "window" + "scope": "machine-overridable" }, "java.errors.incompleteClasspath.severity": { "type": [ From 536d72ac5abcce82fd5f92ce2c85673a78e194bf Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 30 Mar 2022 11:01:52 +0800 Subject: [PATCH 125/708] Support inlay hints for parameter names (#2354) This PR supports inlay hints for parameter names. Meanwhile, a new client setting 'java.inlayHints.parameterNames.enabled' is added to specify how the inlay hints will be displayed in editor, where: - none: disable parameter name hints - literals: enable parameter name hints only for literal arguments - all: enable parameter name hints for literal and non-literal arguments Signed-off-by: sheche --- package-lock.json | 6 +-- package.json | 20 +++++++- src/extension.ts | 8 ++- src/hoverAction.ts | 4 +- src/inlayHintsProvider.ts | 95 +++++++++++++++++++++++++++++++++++ src/standardLanguageClient.ts | 9 ++++ 6 files changed, 134 insertions(+), 8 deletions(-) create mode 100644 src/inlayHintsProvider.ts diff --git a/package-lock.json b/package-lock.json index 8171aa46c..51a893d09 100644 --- a/package-lock.json +++ b/package-lock.json @@ -101,9 +101,9 @@ "dev": true }, "@types/vscode": { - "version": "1.53.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.53.0.tgz", - "integrity": "sha512-XjFWbSPOM0EKIT2XhhYm3D3cx3nn3lshMUcWNy1eqefk+oqRuBq8unVb6BYIZqXy9lQZyeUl7eaBCOZWv+LcXQ==", + "version": "1.65.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", + "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", "dev": true }, "@types/winreg": { diff --git a/package.json b/package.json index 6c08f7c0e..53a424db9 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "virtualWorkspaces": false }, "engines": { - "vscode": "^1.61.0" + "vscode": "^1.65.0" }, "repository": { "type": "git", @@ -857,6 +857,22 @@ "default": "line", "description": "Show quickfixes at the problem or line level.", "scope": "window" + }, + "java.inlayHints.parameterNames.enabled": { + "type": "string", + "enum": [ + "none", + "literals", + "all" + ], + "enumDescriptions": [ + "Disable parameter name hints", + "Enable parameter name hints only for literal arguments", + "Enable parameter name hints for literal and non-literal arguments" + ], + "default": "literals", + "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n", + "scope": "window" } } }, @@ -1141,7 +1157,7 @@ "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", "@types/semver": "^7.3.8", - "@types/vscode": "^1.53.0", + "@types/vscode": "^1.65.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "gulp": "^4.0.2", diff --git a/src/extension.ts b/src/extension.ts index 3902936e2..3fb66889f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic } from 'vscode'; +import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic, CodeActionTriggerKind } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; @@ -134,6 +134,11 @@ export class OutputInfoCollector implements OutputChannel { this.channel.appendLine(value); } + replace(value: string): void { + this.clear(); + this.append(value); + } + clear(): void { this.channel.clear(); } @@ -279,6 +284,7 @@ export function activate(context: ExtensionContext): Promise { const codeActionContext: CodeActionContext = { diagnostics: allDiagnostics, only: context.only, + triggerKind: CodeActionTriggerKind.Invoke, }; params.context = client.code2ProtocolConverter.asCodeActionContext(codeActionContext); } diff --git a/src/hoverAction.ts b/src/hoverAction.ts index 6cfca3c42..1accdea08 100644 --- a/src/hoverAction.ts +++ b/src/hoverAction.ts @@ -75,10 +75,10 @@ class JavaHoverProvider implements HoverProvider { const contributed = new MarkdownString(contributedCommands.map((command) => this.convertCommandToMarkdown(command)).join(' | ')); contributed.isTrusted = true; - let contents: MarkedString[] = [ contributed ]; + let contents: MarkdownString[] = [ contributed ]; let range; if (serverHover && serverHover.contents) { - contents = contents.concat(serverHover.contents); + contents = contents.concat(serverHover.contents as MarkdownString[]); range = serverHover.range; } return new Hover(contents, range); diff --git a/src/inlayHintsProvider.ts b/src/inlayHintsProvider.ts new file mode 100644 index 000000000..ca07027e3 --- /dev/null +++ b/src/inlayHintsProvider.ts @@ -0,0 +1,95 @@ +import { CancellationToken, EventEmitter, InlayHint, InlayHintKind, InlayHintsProvider, Range, TextDocument } from "vscode"; +import * as ls from 'vscode-languageserver-protocol'; +import { LanguageClient, RequestType } from "vscode-languageclient/node"; + +export class JavaInlayHintsProvider implements InlayHintsProvider { + + private onDidChange = new EventEmitter(); + public onDidChangeInlayHints = this.onDidChange.event; + + constructor(private client: LanguageClient) { + this.client.onRequest(InlayHintRefreshRequest.type, async () => { + this.onDidChange.fire(); + }); + } + + public async provideInlayHints(document: TextDocument, range: Range, token: CancellationToken): Promise { + const requestParams: InlayHintParams = { + textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), + range: this.client.code2ProtocolConverter.asRange(range) + }; + try { + const values = await this.client.sendRequest(InlayHintRequest.type, requestParams, token); + if (token.isCancellationRequested) { + return []; + } + return asInlayHints(values, this.client); + } catch (error) { + return this.client.handleFailedRequest(InlayHintRequest.type, token, error, []); + } + } +} + +/** + * A parameter literal used in inlay hints requests. + * + * @since 3.17.0 - proposed state + */ + export type InlayHintParams = /*WorkDoneProgressParams &*/ { + /** + * The text document. + */ + textDocument: ls.TextDocumentIdentifier; + + /** + * The document range for which inlay hints should be computed. + */ + range: ls.Range; +}; + +/** + * Inlay hint information. + * + * @since 3.17.0 - proposed state + */ +export type LSInlayHint = { + + /** + * The position of this hint. + */ + position: ls.Position; + + /** + * The label of this hint. A human readable string or an array of + * InlayHintLabelPart label parts. + * + * *Note* that neither the string nor the label part can be empty. + */ + label: string; // label: string | InlayHintLabelPart[]; +}; + +namespace InlayHintRequest { + export const type: RequestType = new RequestType('textDocument/inlayHint'); +} + +/** + * @since 3.17.0 - proposed state + */ +namespace InlayHintRefreshRequest { + export const type: RequestType = new RequestType('workspace/inlayHint/refresh'); +} + +async function asInlayHints(values: LSInlayHint[] | undefined | null, client: LanguageClient, ): Promise { + if (!Array.isArray(values)) { + return undefined; + } + return values.map(lsHint => asInlayHint(lsHint, client)); +} + +function asInlayHint(value: LSInlayHint, client: LanguageClient): InlayHint { + const label = value.label; + const result = new InlayHint(client.protocol2CodeConverter.asPosition(value.position), label); + result.paddingRight = true; + result.kind = InlayHintKind.Parameter; + return result; +} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index e2ba98ad6..0cc05743c 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -34,6 +34,7 @@ import { buildFilePatterns } from './plugin'; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; import { findRuntimes, IJavaRuntime } from "jdk-utils"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; +import { JavaInlayHintsProvider } from "./inlayHintsProvider"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -501,6 +502,14 @@ export class StandardLanguageClient { scheme: "file", pattern: "**/pom.xml" }, new PomCodeActionProvider(context), pomCodeActionMetadata); + + if (languages.registerInlayHintsProvider) { + context.subscriptions.push(languages.registerInlayHintsProvider([ + { scheme: "file", language: "java", pattern: "**/*.java" }, + { scheme: "jdt", language: "java", pattern: "**/*.class" }, + { scheme: "untitled", language: "java", pattern: "**/*.java" } + ], new JavaInlayHintsProvider(this.languageClient))); + } }); } From 81eafc32475863d88b33411e0994cd0dbfc73045 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Mar 2022 12:47:04 +0800 Subject: [PATCH 126/708] Bump minimist from 1.2.5 to 1.2.6 (#2380) Bumps [minimist](https://github.com/substack/minimist) from 1.2.5 to 1.2.6. - [Release notes](https://github.com/substack/minimist/releases) - [Commits](https://github.com/substack/minimist/compare/1.2.5...1.2.6) --- updated-dependencies: - dependency-name: minimist dependency-type: direct:development ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 66 +++++++++++++++-------------------------------- package.json | 2 +- 2 files changed, 22 insertions(+), 46 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51a893d09..82e3230c9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3671,9 +3671,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "mixin-deep": { @@ -3756,12 +3756,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3936,26 +3930,18 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -6378,26 +6364,16 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "^5.0.1" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, "yargs-unparser": { diff --git a/package.json b/package.json index 53a424db9..34d585d97 100644 --- a/package.json +++ b/package.json @@ -1165,7 +1165,7 @@ "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", - "minimist": ">=1.2.5", + "minimist": ">=1.2.6", "mocha": "^9.2.0", "request": "^2.88.2", "ts-loader": "^9.2.6", From e032c20f0e79b30285bf2568e812a67301e9f41c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 4 Apr 2022 13:52:21 -0400 Subject: [PATCH 127/708] Replace rsync calls with sftp in Jenkinsfile deployment - Upload entire folder recursively rather than iterating through files Signed-off-by: Roland Grunberg --- Jenkinsfile | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6540a9f6e..148ca5046 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -70,14 +70,11 @@ node('rhel8'){ stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' stage 'Upload vscode-java to staging' - def artifacts = findFiles(glob: '**.vsix') def artifactDir = "java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}" sh "mkdir ${artifactDir}" sh "mv *.vsix ${artifactDir}" - for(artifact in artifacts){ - sh "rsync -Pzrlt --rsh=ssh --protocol=28 --relative ${artifactDir}/${artifact.path} ${UPLOAD_LOCATION}/jdt.ls/staging" - } + sh "sftp ${UPLOAD_LOCATION}/jdt.ls/staging <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" // Clean up build vsix sh "rm -rf ${artifactDir}" } @@ -114,7 +111,6 @@ node('rhel8'){ } stage "Publish to http://download.jboss.org/jbosstools/static/jdt.ls/stable/" - def artifacts = findFiles(glob: '**.vsix') def artifactDir = "java-${env.EXTENSION_VERSION}" sh "mkdir ${artifactDir}" sh "mv *.vsix ${artifactDir}" @@ -122,8 +118,6 @@ node('rhel8'){ archive includes:"${artifactDir}/**/*.*" // copy this stable build to Akamai-mirrored /static/ URL, so staging can be cleaned out more easily - for(artifact in artifacts){ - sh "rsync -Pzrlt --rsh=ssh --protocol=28 --relative ${artifactDir}/${artifact.path} ${UPLOAD_LOCATION}/static/jdt.ls/stable/" - } + sh "sftp ${UPLOAD_LOCATION}/static/jdt.ls/stable/ <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" }// if publishToMarketPlace } From 1cb29d27ffc0b732689c84c5e59e86f09abcbacd Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 6 Apr 2022 21:55:03 +0800 Subject: [PATCH 128/708] Show server status via language status item (#2363) * apply language status item Signed-off-by: Shi Chen --- src/extension.ts | 6 +- src/languageStatusItemFactory.ts | 153 +++++++++++++++++++++++++++++++ src/runtimeStatusBarProvider.ts | 135 ++++++++++++++++++++++----- src/serverStatusBarProvider.ts | 100 ++++++++++++-------- 4 files changed, 331 insertions(+), 63 deletions(-) create mode 100644 src/languageStatusItemFactory.ts diff --git a/src/extension.ts b/src/extension.ts index 3fb66889f..70f0694ae 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -185,6 +185,8 @@ export function activate(context: ExtensionContext): Promise { cleanJavaWorkspaceStorage(); + serverStatusBarProvider.initialize(); + return requirements.resolveRequirements(context).catch(error => { // show error window.showErrorMessage(error.message, error.label).then((selection) => { @@ -424,7 +426,7 @@ export function activate(context: ExtensionContext): Promise { if (event === ServerMode.STANDARD) { syntaxClient.stop(); fileEventHandler.setServerStatus(true); - runtimeStatusBarProvider.initialize(context.storagePath); + runtimeStatusBarProvider.initialize(context); } commands.executeCommand('setContext', 'java:serverMode', event); }); @@ -544,7 +546,7 @@ async function ensureNoBuildToolConflicts(context: ExtensionContext, clientOptio return true; } -async function hasBuildToolConflicts(): Promise { +export async function hasBuildToolConflicts(): Promise { const projectConfigurationUris: Uri[] = await getBuildFilesInWorkspace(); const projectConfigurationFsPaths: string[] = projectConfigurationUris.map((uri) => uri.fsPath); const eclipseDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, [], ".project"); diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts new file mode 100644 index 000000000..04a6a5329 --- /dev/null +++ b/src/languageStatusItemFactory.ts @@ -0,0 +1,153 @@ +'use strict'; + +import * as path from "path"; +import * as vscode from "vscode"; +import { Commands } from "./commands"; +import { StatusIcon } from "./serverStatusBarProvider"; + +const languageServerDocumentSelector = [ + { scheme: 'file', language: 'java' }, + { scheme: 'jdt', language: 'java' }, + { scheme: 'untitled', language: 'java' }, + { pattern: '**/pom.xml' }, + { pattern: '**/{build,settings}.gradle'}, + { pattern: '**/{build,settings}.gradle.kts'} +]; + +export function supportsLanguageStatus(): boolean { + return !!vscode.languages.createLanguageStatusItem; +} + +export namespace StatusCommands { + export const switchToStandardCommand = { + title: "Load Projects", + command: Commands.SWITCH_SERVER_MODE, + arguments: ["Standard", true], + tooltip: "LightWeight mode only provides limited features, please load projects to get full feature set" + }; + + export const showServerStatusCommand = { + title: "Show Build Status", + command: Commands.SHOW_SERVER_TASK_STATUS, + tooltip: "Show Build Status" + }; + + export const configureJavaRuntimeCommand = { + title: "Configure Java Runtime", + command: "workbench.action.openSettings", + arguments: ["java.configuration.runtimes"], + tooltip: "Configure Java Runtime" + }; +} + +export namespace ServerStatusItemFactory { + export function create(): any { + if (supportsLanguageStatus()) { + const item = vscode.languages.createLanguageStatusItem("JavaServerStatusItem", languageServerDocumentSelector); + item.name = "Java Language Server Status"; + return item; + } + return undefined; + } + + export function showLightWeightStatus(item: any): void { + item.severity = vscode.LanguageStatusSeverity?.Warning; + item.text = StatusIcon.LightWeight; + item.detail = "Lightweight Mode"; + item.command = StatusCommands.switchToStandardCommand; + } + + export function showStandardStatus(item: any): void { + item.severity = vscode.LanguageStatusSeverity?.Information; + item.command = StatusCommands.showServerStatusCommand; + } + + export function setBusy(item: any): void { + item.text = "Building"; + item.busy = true; + } + + export function setError(item: any): void { + item.busy = false; + item.severity = vscode.LanguageStatusSeverity?.Error; + item.command = { + title: "Open logs", + command: Commands.OPEN_LOGS + }; + item.text = StatusIcon.Error; + item.detail = "Errors occurred in initializing language server"; + } + + export function setWarning(item: any): void { + item.busy = false; + item.severity = vscode.LanguageStatusSeverity?.Error; + item.command = { + title: "Show PROBLEMS Panel", + command: "workbench.panel.markers.view.focus", + tooltip: "Errors occurred in project configurations, click to show the PROBLEMS panel" + }; + item.text = StatusIcon.Warning; + item.detail = "Project Configuration Error"; + } + + export function setReady(item: any): void { + item.busy = false; + item.severity = vscode.LanguageStatusSeverity?.Information; + item.command = StatusCommands.showServerStatusCommand; + item.text = StatusIcon.Ready; + item.detail = ""; + } +} + +export namespace RuntimeStatusItemFactory { + export function create(text: string, vmInstallPath: string): any { + if (supportsLanguageStatus()) { + const item = vscode.languages.createLanguageStatusItem("javaRuntimeStatusItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Java Runtime"; + item.text = text; + item.command = StatusCommands.configureJavaRuntimeCommand; + if (vmInstallPath) { + item.command.tooltip = `Language Level: ${text} <${vmInstallPath}>`; + } + return item; + } + return undefined; + } + + export function update(item: any, text: string, vmInstallPath: string): void { + item.text = text; + item.command.tooltip = vmInstallPath ? `Language Level: ${text} <${vmInstallPath}>` : "Configure Java Runtime"; + } +} + +export namespace BuildFileStatusItemFactory { + export function create(buildFilePath: string): any { + if (supportsLanguageStatus()) { + const fileName = path.basename(buildFilePath); + const item = vscode.languages.createLanguageStatusItem("javaBuildFileStatusItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Java Build File"; + item.text = fileName; + item.command = getOpenBuildFileCommand(buildFilePath); + return item; + } + return undefined; + } + + export function update(item: any, buildFilePath: string): void { + const fileName = path.basename(buildFilePath); + item.text = fileName; + item.command = getOpenBuildFileCommand(buildFilePath); + } + + function getOpenBuildFileCommand(buildFilePath: string): vscode.Command { + const relativePath = vscode.workspace.asRelativePath(buildFilePath); + return { + title: `Open Config File`, + command: Commands.OPEN_BROWSER, + arguments: [vscode.Uri.file(buildFilePath)], + tooltip: `Open ${relativePath}` + }; + } +} diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index a682bfae3..4c4f753b0 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -1,14 +1,21 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version } from "vscode"; +import * as fse from "fs-extra"; +import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version, languages, Command, ExtensionContext } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import * as path from "path"; import { apiManager } from "./apiManager"; import * as semver from "semver"; +import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; +import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; +import { getJavaConfiguration } from "./utils"; +import { hasBuildToolConflicts } from "./extension"; class RuntimeStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; + private runtimeStatusItem: any; + private buildFileStatusItem: any; private javaProjects: Map; private fileProjectMapping: Map; private storagePath: string | undefined; @@ -24,17 +31,20 @@ class RuntimeStatusBarProvider implements Disposable { this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); } - public async initialize(storagePath?: string): Promise { + public async initialize(context: ExtensionContext): Promise { // ignore the hash part to make it compatible in debug mode. + const storagePath = context.storagePath; if (storagePath) { this.storagePath = Uri.file(path.join(storagePath, "..", "..")).fsPath; } - if (this.isAdvancedStatusBarItem) { - this.statusBarItem = (window.createStatusBarItem as any)("java.runtimeStatus", StatusBarAlignment.Right, 0); - (this.statusBarItem as any).name = "Java Runtime Configuration"; - } else { - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); + if (!supportsLanguageStatus()) { + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = (window.createStatusBarItem as any)("java.runtimeStatus", StatusBarAlignment.Right, 0); + (this.statusBarItem as any).name = "Java Runtime Configuration"; + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); + } } let projectUriStrings: string[]; @@ -48,38 +58,48 @@ class RuntimeStatusBarProvider implements Disposable { this.javaProjects.set(Uri.parse(uri).fsPath, undefined); } - this.statusBarItem.command = { - title: "Configure Java Runtime", - command: "workbench.action.openSettings", - arguments: ["java.configuration.runtimes"], - }; + if (!supportsLanguageStatus()) { + this.statusBarItem.command = StatusCommands.configureJavaRuntimeCommand; + } this.disposables.push(window.onDidChangeActiveTextEditor((textEditor) => { - this.updateItem(textEditor); + this.updateItem(context, textEditor); })); this.disposables.push(apiManager.getApiInstance().onDidProjectsImport(async (uris: Uri[]) => { for (const uri of uris) { this.javaProjects.set(uri.fsPath, this.javaProjects.get(uri.fsPath)); } - await this.updateItem(window.activeTextEditor); + await this.updateItem(context, window.activeTextEditor); })); this.disposables.push(apiManager.getApiInstance().onDidClasspathUpdate(async (e: Uri) => { for (const projectPath of this.javaProjects.keys()) { if (path.relative(projectPath, e.fsPath) === '') { this.javaProjects.set(projectPath, undefined); - await this.updateItem(window.activeTextEditor); + await this.updateItem(context, window.activeTextEditor); return; } } })); - await this.updateItem(window.activeTextEditor); + await this.updateItem(context, window.activeTextEditor); + } + + private hideRuntimeStatusItem(): void { + this.runtimeStatusItem?.dispose(); + this.runtimeStatusItem = undefined; + } + + private hideBuildFileStatusItem(): void { + this.buildFileStatusItem?.dispose(); + this.buildFileStatusItem = undefined; } public dispose(): void { - this.statusBarItem.dispose(); + this.statusBarItem?.dispose(); + this.runtimeStatusItem?.dispose(); + this.buildFileStatusItem?.dispose(); for (const disposable of this.disposables) { disposable.dispose(); } @@ -140,28 +160,54 @@ class RuntimeStatusBarProvider implements Disposable { return undefined; } - private async updateItem(textEditor: TextEditor): Promise { - if (!textEditor || path.extname(textEditor.document.fileName) !== ".java") { - this.statusBarItem.hide(); + private async updateItem(context: ExtensionContext, textEditor: TextEditor): Promise { + if (!textEditor || path.extname(textEditor.document.fileName) !== ".java" && !supportsLanguageStatus()) { + this.statusBarItem?.hide(); return; } const uri: Uri = textEditor.document.uri; const projectPath: string = this.findOwnerProject(uri); if (!projectPath) { - this.statusBarItem.hide(); + if (supportsLanguageStatus()) { + this.hideRuntimeStatusItem(); + this.hideBuildFileStatusItem(); + } else { + this.statusBarItem?.hide(); + } return; } const projectInfo: IProjectInfo = await this.getProjectInfo(projectPath); if (!projectInfo) { - this.statusBarItem.hide(); + if (supportsLanguageStatus()) { + this.hideRuntimeStatusItem(); + this.hideBuildFileStatusItem(); + } else { + this.statusBarItem?.hide(); + } return; } - this.statusBarItem.text = this.getJavaRuntimeFromVersion(projectInfo.sourceLevel); - this.statusBarItem.tooltip = projectInfo.vmInstallPath ? `Language Level: ${this.statusBarItem.text} <${projectInfo.vmInstallPath}>` : "Configure Java Runtime"; - this.statusBarItem.show(); + const text = this.getJavaRuntimeFromVersion(projectInfo.sourceLevel); + if (supportsLanguageStatus()) { + const buildFilePath = await this.getBuildFilePath(context, projectPath); + if (!this.runtimeStatusItem) { + this.runtimeStatusItem = RuntimeStatusItemFactory.create(text, projectInfo.vmInstallPath); + if (buildFilePath) { + this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath); + } + } else { + RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath); + if (buildFilePath) { + BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath); + } + } + } else { + this.statusBarItem.text = text; + this.statusBarItem.tooltip = projectInfo.vmInstallPath ? `Language Level: ${this.statusBarItem.text} <${projectInfo.vmInstallPath}>` : "Configure Java Runtime"; + this.statusBarItem.show(); + } } private isDefaultProjectPath(fsPath: string) { @@ -181,6 +227,45 @@ class RuntimeStatusBarProvider implements Disposable { return `JavaSE-${ver}`; } + + private async getBuildFilePath(context: ExtensionContext, projectPath: string): Promise { + const isMavenEnabled: boolean = getJavaConfiguration().get("import.maven.enabled"); + const isGradleEnabled: boolean = getJavaConfiguration().get("import.gradle.enabled"); + if (isMavenEnabled && isGradleEnabled) { + let buildFilePath: string | undefined; + const activeBuildTool: string | undefined = context.workspaceState.get(ACTIVE_BUILD_TOOL_STATE); + if (!activeBuildTool) { + if (!hasBuildToolConflicts()) { + // only one build tool exists in the project + buildFilePath = await this.getBuildFilePathFromNames(projectPath, ["pom.xml", "build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]); + } else { + // the user has not resolved build conflicts yet + return undefined; + } + } else if (activeBuildTool.toLocaleLowerCase().includes("maven")) { + buildFilePath = await this.getBuildFilePathFromNames(projectPath, ["pom.xml"]); + } else if (activeBuildTool.toLocaleLowerCase().includes("gradle")) { + buildFilePath = await this.getBuildFilePathFromNames(projectPath, ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]); + } + return buildFilePath; + } else if (isMavenEnabled) { + return this.getBuildFilePathFromNames(projectPath, ["pom.xml"]); + } else if (isGradleEnabled) { + return this.getBuildFilePathFromNames(projectPath, ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]); + } else { + return undefined; + } + } + + private async getBuildFilePathFromNames(projectPath: string, buildFileNames: string[]): Promise { + for (const buildFileName of buildFileNames) { + const buildFilePath = path.join(projectPath, buildFileName); + if (await fse.pathExists(buildFilePath)) { + return buildFilePath; + } + } + return undefined; + } } interface IProjectInfo { diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 5c92afff1..98a605c72 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -3,83 +3,111 @@ import { StatusBarItem, window, StatusBarAlignment, version } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; -import { ServerMode } from "./settings"; import * as semver from "semver"; +import { ServerStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; class ServerStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; + private languageStatusItem: any; // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. // See: https://github.com/redhat-developer/vscode-java/issues/1982 private isAdvancedStatusBarItem: boolean; constructor() { this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); - if (this.isAdvancedStatusBarItem) { - this.statusBarItem = (window.createStatusBarItem as any)("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + } + + public initialize(): void { + if (supportsLanguageStatus()) { + this.languageStatusItem = ServerStatusItemFactory.create(); } else { - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); + if (this.isAdvancedStatusBarItem) { + this.statusBarItem = (window.createStatusBarItem as any)("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + } else { + this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); + } } } public showLightWeightStatus(): void { - if (this.isAdvancedStatusBarItem) { - (this.statusBarItem as any).name = "Java Server Mode"; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.showLightWeightStatus(this.languageStatusItem); + } else { + if (this.isAdvancedStatusBarItem) { + (this.statusBarItem as any).name = "Java Server Mode"; + } + this.statusBarItem.text = StatusIcon.LightWeight; + this.statusBarItem.command = StatusCommands.switchToStandardCommand; + this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; + this.statusBarItem.show(); } - this.statusBarItem.text = StatusIcon.LightWeight; - this.statusBarItem.command = { - title: "Switch to Standard mode", - command: Commands.SWITCH_SERVER_MODE, - arguments: [ServerMode.STANDARD], - }; - this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; - this.statusBarItem.show(); } public showStandardStatus(): void { - if (this.isAdvancedStatusBarItem) { - (this.statusBarItem as any).name = "Java Server Status"; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.showStandardStatus(this.languageStatusItem); + ServerStatusItemFactory.setBusy(this.languageStatusItem); + } else { + if (this.isAdvancedStatusBarItem) { + (this.statusBarItem as any).name = "Java Server Status"; + } + this.statusBarItem.text = StatusIcon.Busy; + this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; + this.statusBarItem.tooltip = ""; + this.statusBarItem.show(); } - this.statusBarItem.text = StatusIcon.Busy; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = ""; - this.statusBarItem.show(); - } - - public updateText(text: string): void { - this.statusBarItem.text = text; } public setBusy(): void { - this.statusBarItem.text = StatusIcon.Busy; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.setBusy(this.languageStatusItem); + } else { + this.statusBarItem.text = StatusIcon.Busy; + } } public setError(): void { - this.statusBarItem.text = StatusIcon.Error; - this.statusBarItem.command = Commands.OPEN_LOGS; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.setError(this.languageStatusItem); + } else { + this.statusBarItem.text = StatusIcon.Error; + this.statusBarItem.command = Commands.OPEN_LOGS; + } } public setWarning(): void { - this.statusBarItem.text = StatusIcon.Warning; - this.statusBarItem.command = "workbench.panel.markers.view.focus"; - this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.setWarning(this.languageStatusItem); + } else { + this.statusBarItem.text = StatusIcon.Warning; + this.statusBarItem.command = "workbench.panel.markers.view.focus"; + this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; + } } public setReady(): void { - this.statusBarItem.text = StatusIcon.Ready; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = "ServiceReady"; + if (supportsLanguageStatus()) { + ServerStatusItemFactory.setReady(this.languageStatusItem); + } else { + this.statusBarItem.text = StatusIcon.Ready; + this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; + this.statusBarItem.tooltip = "ServiceReady"; + } } public updateTooltip(tooltip: string): void { - this.statusBarItem.tooltip = tooltip; + if (!supportsLanguageStatus()) { + this.statusBarItem.tooltip = tooltip; + } } public dispose(): void { - this.statusBarItem.dispose(); + this.statusBarItem?.dispose(); + this.languageStatusItem?.dispose(); } } -enum StatusIcon { +export enum StatusIcon { LightWeight = "$(rocket)", Busy = "$(sync~spin)", Ready = "$(thumbsup)", From d82211d12904788f6d9c8022e7ff5d66d142b123 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 7 Apr 2022 10:58:55 +0800 Subject: [PATCH 129/708] add await for async function call (#2394) Signed-off-by: Shi Chen --- src/runtimeStatusBarProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index 4c4f753b0..2a287acae 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -235,7 +235,7 @@ class RuntimeStatusBarProvider implements Disposable { let buildFilePath: string | undefined; const activeBuildTool: string | undefined = context.workspaceState.get(ACTIVE_BUILD_TOOL_STATE); if (!activeBuildTool) { - if (!hasBuildToolConflicts()) { + if (!(await hasBuildToolConflicts())) { // only one build tool exists in the project buildFilePath = await this.getBuildFilePathFromNames(projectPath, ["pom.xml", "build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]); } else { From 0604a8a65b0ab0f62f8b67d0ab158a5f61186957 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 17 Mar 2022 22:52:00 +0100 Subject: [PATCH 130/708] Provide Java 18 support Signed-off-by: Snjezana Peco --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ea529d9f2..3e8615373 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 17 +* Supports code from Java 1.5 to Java 18 * Maven pom.xml project support * Basic Gradle Java project support (Android not supported) * Standalone Java files support @@ -79,8 +79,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-17", - "path": "/path/to/jdk-17", + "name": "JavaSE-18", + "path": "/path/to/jdk-18", "default": true }, ] diff --git a/package.json b/package.json index 34d585d97..ffbca60a7 100644 --- a/package.json +++ b/package.json @@ -697,7 +697,8 @@ "JavaSE-14", "JavaSE-15", "JavaSE-16", - "JavaSE-17" + "JavaSE-17", + "JavaSE-18" ], "description": "Java Execution Environment name. Must be unique." }, From 53d1abebc3f2ffc5952520ac5262ca1d9e8a6c9d Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Tue, 12 Apr 2022 16:43:20 +0800 Subject: [PATCH 131/708] fix client.log: wrong default project jdk (#2403) Signed-off-by: Yan Zhang --- src/requirements.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/requirements.ts b/src/requirements.ts index d0ebb4fef..78f220fe5 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -81,7 +81,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise Date: Tue, 12 Apr 2022 16:47:13 +0800 Subject: [PATCH 132/708] expose command to get current workspace path (#2402) Signed-off-by: Yan Zhang --- src/commands.ts | 2 ++ src/extension.ts | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/commands.ts b/src/commands.ts index 300dcc84d..7c095b074 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -256,4 +256,6 @@ export namespace Commands { export const RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open'; export const RESOLVE_WORKSPACE_SYMBOL = 'java.project.resolveWorkspaceSymbol'; + + export const GET_WORKSPACE_PATH = '_java.workspace.path'; } diff --git a/src/extension.ts b/src/extension.ts index 70f0694ae..a8c22ab0f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -377,6 +377,8 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, () => cleanWorkspace(workspacePath))); + context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); + context.subscriptions.push(onConfigurationChange(workspacePath)); /** From 8c21e1ccc8e79a5d6c759d9bdc68e81d9321cd64 Mon Sep 17 00:00:00 2001 From: sheche Date: Tue, 12 Apr 2022 13:35:24 +0800 Subject: [PATCH 133/708] Remove the setting: 'java.completion.overwrite' - Instead, we use 'editor.suggest.insertMode' to control the default completion behavior. Signed-off-by: sheche --- README.md | 9 ++++++--- package.json | 6 ------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 3e8615373..aed7564de 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,6 @@ The following settings are supported: * `java.autobuild.enabled` : Enable/disable the 'auto build'. * `java.maxConcurrentBuilds`: Set max simultaneous project builds. * `java.completion.enabled` : Enable/disable code completion support. -* `java.completion.overwrite` : When set to true, code completion overwrites the current text. When set to false, code is simply added instead. * `java.completion.guessMethodArguments` : When set to true, method arguments are guessed when a method is selected from as list of code assist proposals. * `java.completion.filteredTypes`: Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages. * `java.completion.favoriteStaticMembers` : Defines a list of static members or types with static members. @@ -199,9 +198,13 @@ The following settings are supported: * `java.quickfix.showAt` : Show quickfixes at the problem or line level. * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. + * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(isable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -New in 1.3.0: -* `java.jdt.ls.java.home`: Absolute path to JDK home folder used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. Requires VS Code restart. +New in 1.5.0: +* `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(Disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. + +Removed in 1.5.0: +* `java.completion.overwrite`: Please use `editor.suggest.insertMode` instead. Meanwhile, you can quickly switch to another mode by pressing `Shift` + `Tab` or `Shift` + `Enter` (the shortcut may be different depending on the local keymap settings). Semantic Highlighting =============== diff --git a/package.json b/package.json index ffbca60a7..90fd83cdd 100644 --- a/package.json +++ b/package.json @@ -477,12 +477,6 @@ "description": "Enable/disable code completion support", "scope": "window" }, - "java.completion.overwrite": { - "type": "boolean", - "default": true, - "description": "When set to true, code completion overwrites the current text. When set to false, code is simply added instead.", - "scope": "window" - }, "java.completion.guessMethodArguments": { "type": "boolean", "default": false, From b0ce44238ac8934572a4747131ea535f57c34f37 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 12 Apr 2022 00:34:49 -0400 Subject: [PATCH 134/708] Add Changelog for 1.5.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfc126f56..d4fc87df9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## 1.5.0 (April 13th, 2022) + * performance - Adopt new CompletionProposal API to ignore types before creating certain proposals. See [JLS#2034](https://github.com/eclipse/eclipse.jdt.ls/pull/2034). + * enhancement - Provide Java 18 support. See [#2364](https://github.com/redhat-developer/vscode-java/pull/2364). + * enhancement - Support inlay hints for parameter names. See [#2099](https://github.com/redhat-developer/vscode-java/issues/2099). + * enhancement - Show server status through the language status item. See [#2351](https://github.com/redhat-developer/vscode-java/issues/2351). + * enhancement - Add code action to extract lambda body to method. See [JLS#2027](https://github.com/eclipse/eclipse.jdt.ls/issues/2027). + * enhancement - Navigate to class declaration. See [#2132](https://github.com/redhat-developer/vscode-java/pull/2132). + * enhancement - Support completion insert/replace capability. See [#2343](https://github.com/redhat-developer/vscode-java/pull/2343). + * bug fix - Provide file & type comments for newly created compilation units. See [JLS#2047](https://github.com/eclipse/eclipse.jdt.ls/pull/2047). + * bug fix - Code snippets should be usable even before LS done resolving dependencies. See [#684](https://github.com/redhat-developer/vscode-java/issues/684). + * bug fix - Fix an occurrence of duplicate quick fixes at the line level See [#2339](https://github.com/redhat-developer/vscode-java/issues/2339). + * bug fix - Cannot refactor in static block. See [#2370](https://github.com/redhat-developer/vscode-java/issues/2370). + * bug fix - Make `java.configuration.runtimes` & `java.jdt.ls.vmargs` machine-overridable. See [#2001](https://github.com/redhat-developer/vscode-java/issues/2001), [#2368](https://github.com/redhat-developer/vscode-java/pull/2368). + * bug fix - The number of method signatures cannot be displayed in some cases. See [#2341](https://github.com/redhat-developer/vscode-java/issues/2341). + * bug fix - Ensure that client-side commands do not clash with server-side. See [#2331](https://github.com/redhat-developer/vscode-java/issues/2331). + * bug fix - Fix issue in JDK detection logic. See [#2025](https://github.com/redhat-developer/vscode-java/issues/2025). + * other - Increase the maximum size of client.log file. See [#2356](https://github.com/redhat-developer/vscode-java/pull/2356). + ## 1.4.0 (March 3rd, 2022) * enhancement - Trigger completion after `new` keyword. See [#1666](https://github.com/redhat-developer/vscode-java/issues/1666). * enhancement - Improve occurrences highlighting. See [JLS#1941](https://github.com/eclipse/eclipse.jdt.ls/pull/1941). From a8a1e09fbcc02e5a6ac4dabaa5b212e0978fae6c Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 13 Apr 2022 21:44:33 +0800 Subject: [PATCH 135/708] Bugfix: New java file snippet is broken in 1.5.0 (#2409) Signed-off-by: Jinbo Wang --- src/fileEventHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index ad8daef27..b9f5160fb 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -50,7 +50,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { let sourcePaths: string[] = []; if (serverReady) { - const result: ListCommandResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.LIST_SOURCEPATHS_CMD); + const result: ListCommandResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.LIST_SOURCEPATHS); if (result && result.data && result.data.length) { sourcePaths = result.data.map((sourcePath) => sourcePath.path).sort((a, b) => b.length - a.length); } From 65555712ae404491c3d9cd02ad41c1525aa4fc55 Mon Sep 17 00:00:00 2001 From: sheche Date: Wed, 13 Apr 2022 19:17:42 +0800 Subject: [PATCH 136/708] Revert "Remove 'java.completion.overwrite'" This reverts commit 8c21e1ccc8e79a5d6c759d9bdc68e81d9321cd64 Signed-off-by: sheche --- CHANGELOG.md | 1 - README.md | 4 +--- package.json | 6 ++++++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d4fc87df9..bfda469b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,6 @@ * enhancement - Show server status through the language status item. See [#2351](https://github.com/redhat-developer/vscode-java/issues/2351). * enhancement - Add code action to extract lambda body to method. See [JLS#2027](https://github.com/eclipse/eclipse.jdt.ls/issues/2027). * enhancement - Navigate to class declaration. See [#2132](https://github.com/redhat-developer/vscode-java/pull/2132). - * enhancement - Support completion insert/replace capability. See [#2343](https://github.com/redhat-developer/vscode-java/pull/2343). * bug fix - Provide file & type comments for newly created compilation units. See [JLS#2047](https://github.com/eclipse/eclipse.jdt.ls/pull/2047). * bug fix - Code snippets should be usable even before LS done resolving dependencies. See [#684](https://github.com/redhat-developer/vscode-java/issues/684). * bug fix - Fix an occurrence of duplicate quick fixes at the line level See [#2339](https://github.com/redhat-developer/vscode-java/issues/2339). diff --git a/README.md b/README.md index aed7564de..070d0d35d 100644 --- a/README.md +++ b/README.md @@ -135,6 +135,7 @@ The following settings are supported: * `java.autobuild.enabled` : Enable/disable the 'auto build'. * `java.maxConcurrentBuilds`: Set max simultaneous project builds. * `java.completion.enabled` : Enable/disable code completion support. +* `java.completion.overwrite` : When set to true, code completion overwrites the current text. When set to false, code is simply added instead. * `java.completion.guessMethodArguments` : When set to true, method arguments are guessed when a method is selected from as list of code assist proposals. * `java.completion.filteredTypes`: Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages. * `java.completion.favoriteStaticMembers` : Defines a list of static members or types with static members. @@ -203,9 +204,6 @@ The following settings are supported: New in 1.5.0: * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(Disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -Removed in 1.5.0: -* `java.completion.overwrite`: Please use `editor.suggest.insertMode` instead. Meanwhile, you can quickly switch to another mode by pressing `Shift` + `Tab` or `Shift` + `Enter` (the shortcut may be different depending on the local keymap settings). - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 90fd83cdd..ffbca60a7 100644 --- a/package.json +++ b/package.json @@ -477,6 +477,12 @@ "description": "Enable/disable code completion support", "scope": "window" }, + "java.completion.overwrite": { + "type": "boolean", + "default": true, + "description": "When set to true, code completion overwrites the current text. When set to false, code is simply added instead.", + "scope": "window" + }, "java.completion.guessMethodArguments": { "type": "boolean", "default": false, From 08689430086a437dc6409c60671d244a2eea4d3c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 13 Apr 2022 18:00:20 -0400 Subject: [PATCH 137/708] Upversion to 1.6.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 070d0d35d..7f2e75db1 100644 --- a/README.md +++ b/README.md @@ -201,8 +201,6 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(isable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -New in 1.5.0: -* `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(Disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. Semantic Highlighting =============== diff --git a/package-lock.json b/package-lock.json index 82e3230c9..b53587f11 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.5.0", + "version": "1.6.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index ffbca60a7..8a73986f3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.5.0", + "version": "1.6.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From c3b2b6ef4456155fdbe2404e2069376a839f62ca Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 20 Apr 2022 23:31:06 +0800 Subject: [PATCH 138/708] Add a new setting 'java.signatureHelp.description.enabled' (#2404) * Add 'New' section in README Signed-off-by: sheche --- README.md | 3 +++ package.json | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 7f2e75db1..1c4876e17 100644 --- a/README.md +++ b/README.md @@ -120,6 +120,7 @@ The following settings are supported: * `java.referencesCodeLens.enabled` : Enable/disable the references code lenses. * `java.implementationsCodeLens.enabled` : Enable/disable the implementations code lenses. * `java.signatureHelp.enabled` : Enable/disable signature help support (triggered on `(`). +* `java.signatureHelp.description.enabled` : Enable/disable to show the description in signature help. Defaults to `false`. * `java.contentProvider.preferred` : Preferred content provider (see 3rd party decompilers available in [vscode-java-decompiler](https://github.com/dgileadi/vscode-java-decompiler)). * `java.import.exclusions` : Exclude folders from import via glob patterns. Use `!` to negate patterns to allow subfolders imports. You have to include a parent directory. The order is important. * `java.import.gradle.enabled` : Enable/disable the Gradle importer. @@ -201,6 +202,8 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(isable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. +New in 1.6.0: +* `java.signatureHelp.description.enabled`: Enable/disable to show the description in signature help. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 8a73986f3..29cef975f 100644 --- a/package.json +++ b/package.json @@ -328,6 +328,12 @@ "description": "Enable/disable the signature help.", "scope": "window" }, + "java.signatureHelp.description.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable to show the description in signature help.", + "scope": "window" + }, "java.implementationsCodeLens.enabled": { "type": "boolean", "default": false, From 90545274d884a390e353bc30b46de7aa114e81ed Mon Sep 17 00:00:00 2001 From: Snjeza Date: Wed, 20 Apr 2022 23:31:22 +0200 Subject: [PATCH 139/708] Unexpected 'Project xxx has no explicit encoding set' warnings (#2418) Signed-off-by: Snjezana Peco --- README.md | 8 ++++++-- package.json | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1c4876e17..dfd3422e9 100644 --- a/README.md +++ b/README.md @@ -200,10 +200,14 @@ The following settings are supported: * `java.quickfix.showAt` : Show quickfixes at the problem or line level. * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. - * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(isable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. + * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -New in 1.6.0: +New in 1.6.0 * `java.signatureHelp.description.enabled`: Enable/disable to show the description in signature help. Defaults to `false`. +* `java.project.encoding`: Project encoding settings. + - `ignore`: Ignore project encoding settings (default). + - `warning`: Show warning if a project has no explicit encoding set. + - `setDefault`: Set the default workspace encoding settings. Semantic Highlighting =============== diff --git a/package.json b/package.json index 29cef975f..6ddf0d63f 100644 --- a/package.json +++ b/package.json @@ -880,6 +880,21 @@ "default": "literals", "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n", "scope": "window" + }, + "java.project.encoding": { + "enum": [ + "ignore", + "warning", + "setDefault" + ], + "enumDescriptions": [ + "Ignore project encoding settings", + "Show warning if a project has no explicit encoding set", + "Set the default workspace encoding settings" + ], + "default": "ignore", + "markdownDescription": "Project encoding settings", + "scope": "window" } } }, From ade41783fdaa83ff4770c774b735b29b12867291 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Mon, 25 Apr 2022 14:19:40 +0800 Subject: [PATCH 140/708] correct workspace trust command Signed-off-by: Shi Chen --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index a8c22ab0f..7b684f8c5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -391,7 +391,7 @@ export function activate(context: ExtensionContext): Promise { const button = "Manage Workspace Trust"; const choice = await window.showInformationMessage("For security concern, Java language server cannot be switched to Standard mode in untrusted workspaces.", button); if (choice === button) { - commands.executeCommand("workbench.action.manageTrust"); + commands.executeCommand("workbench.trust.manage"); } return; } From 72633ab76ea979fc43a7205adf5e2005a5af5388 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 27 Apr 2022 09:49:23 +0800 Subject: [PATCH 141/708] Trigger signature help on completion item selected (#2426) Signed-off-by: sheche --- src/extension.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 7b684f8c5..21e9c3cbf 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -246,7 +246,8 @@ export function activate(context: ExtensionContext): Promise { resolveAdditionalTextEditsSupport: true, advancedIntroduceParameterRefactoringSupport: true, actionableRuntimeNotificationSupport: true, - shouldLanguageServerExitOnShutdown: true + shouldLanguageServerExitOnShutdown: true, + onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", }, triggerFiles, }, From 79bbb73111cb1cacfda1f268a732ca5758ee161d Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 27 Apr 2022 09:52:20 +0800 Subject: [PATCH 142/708] Remove the setting: 'java.completion.overwrite' (#2427) - Remove the setting: 'java.completion.overwrite' - Instead, we use 'editor.suggest.insertMode' to control the default completion behavior. Signed-off-by: sheche --- README.md | 4 +++- package.json | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dfd3422e9..035c6549b 100644 --- a/README.md +++ b/README.md @@ -136,7 +136,6 @@ The following settings are supported: * `java.autobuild.enabled` : Enable/disable the 'auto build'. * `java.maxConcurrentBuilds`: Set max simultaneous project builds. * `java.completion.enabled` : Enable/disable code completion support. -* `java.completion.overwrite` : When set to true, code completion overwrites the current text. When set to false, code is simply added instead. * `java.completion.guessMethodArguments` : When set to true, method arguments are guessed when a method is selected from as list of code assist proposals. * `java.completion.filteredTypes`: Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages. * `java.completion.favoriteStaticMembers` : Defines a list of static members or types with static members. @@ -209,6 +208,9 @@ New in 1.6.0 - `warning`: Show warning if a project has no explicit encoding set. - `setDefault`: Set the default workspace encoding settings. +Removed in 1.6.0 +* `java.completion.overwrite`: Please use `editor.suggest.insertMode` instead. You can quickly toggle between `insert` & `replace` modes with `Shift` + `Tab` or `Shift` + `Enter` (default keyboard shortcuts). See `acceptAlternativeSelectedSuggestion` from the keyboard shortcuts menu for further details. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 6ddf0d63f..eb3012a05 100644 --- a/package.json +++ b/package.json @@ -483,12 +483,6 @@ "description": "Enable/disable code completion support", "scope": "window" }, - "java.completion.overwrite": { - "type": "boolean", - "default": true, - "description": "When set to true, code completion overwrites the current text. When set to false, code is simply added instead.", - "scope": "window" - }, "java.completion.guessMethodArguments": { "type": "boolean", "default": false, From 1e8b943dc12dc8b8c83f45cbf5b74095ef642457 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 9 Apr 2022 03:20:00 +0000 Subject: [PATCH 143/708] Bump moment from 2.24.0 to 2.29.2 Bumps [moment](https://github.com/moment/moment) from 2.24.0 to 2.29.2. - [Release notes](https://github.com/moment/moment/releases) - [Changelog](https://github.com/moment/moment/blob/develop/CHANGELOG.md) - [Commits](https://github.com/moment/moment/compare/2.24.0...2.29.2) --- updated-dependencies: - dependency-name: moment dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b53587f11..3f4ceddee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3956,9 +3956,9 @@ } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.29.2", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", + "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" }, "ms": { "version": "2.0.0", From 5e95d94705bcc9676088868b3cdab5b0e470846f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Apr 2022 15:31:43 +0000 Subject: [PATCH 144/708] Bump async from 2.6.3 to 2.6.4 Bumps [async](https://github.com/caolan/async) from 2.6.3 to 2.6.4. - [Release notes](https://github.com/caolan/async/releases) - [Changelog](https://github.com/caolan/async/blob/v2.6.4/CHANGELOG.md) - [Commits](https://github.com/caolan/async/compare/v2.6.3...v2.6.4) --- updated-dependencies: - dependency-name: async dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f4ceddee..2f312a71a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -560,9 +560,9 @@ "dev": true }, "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "requires": { "lodash": "^4.17.14" } From bde3ed765293a7a530631bcb8e95cd4f4c3db5fd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 4 May 2022 00:03:32 -0400 Subject: [PATCH 145/708] Add Changelog for 1.6.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bfda469b0..1bfb5ba4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 1.6.0 (May 5th, 2022) + * enhancement - Trigger signature help on completion item selected. See [#2426](https://github.com/redhat-developer/vscode-java/pull/2426). + * enhancement - Support completion insert/replace capability. Use the setting `editor.suggest.insertMode` to control whether to overwrite words when accepting completions. You can also quickly toggle between insert & replace modes with `Shift + Tab` or `Shift + Enter` (default keyboard shortcuts). See [#2427](https://github.com/redhat-developer/vscode-java/pull/2427). + * enhancement - Add a new preference `java.signatureHelp.description.enabled` to disable/enable signature description. See [#2404](https://github.com/redhat-developer/vscode-java/pull/2404). + * bug fix - Fix the "Manage Workspace Trust" command. See [#2431](https://github.com/redhat-developer/vscode-java/issues/2431). + * bug fix - Improve the signature help feature by handling some special cases. See [JLS#2025](https://github.com/eclipse/eclipse.jdt.ls/issues/2025). + * bug fix - Do not show signature help at the end of an invocation. See [JLS#2079](https://github.com/eclipse/eclipse.jdt.ls/pull/2079). + * bug fix - Show error status when the project is not created. See [JLS#2058](https://github.com/eclipse/eclipse.jdt.ls/issues/2058). + * bug fix - Error during importing an Eclipse project whose sources are at root. See [#2436](https://github.com/redhat-developer/vscode-java/issues/2436). + * bug fix - Fix NPE in isCompletionInsertReplaceSupport check. See [JLS#2070](https://github.com/eclipse/eclipse.jdt.ls/pull/2070). + * bug fix - Unexpected 'Project xxx has no explicit encoding set' warnings. See [#2416](https://github.com/redhat-developer/vscode-java/issues/2416). + * bug fix - Fix issue where JDT-LS's logback configuration was being ignored. See [JLS#2077](https://github.com/eclipse/eclipse.jdt.ls/pull/2077). + ## 1.5.0 (April 13th, 2022) * performance - Adopt new CompletionProposal API to ignore types before creating certain proposals. See [JLS#2034](https://github.com/eclipse/eclipse.jdt.ls/pull/2034). * enhancement - Provide Java 18 support. See [#2364](https://github.com/redhat-developer/vscode-java/pull/2364). From c106d9d3e77dc224a79e9d5a9bd2d62885576a7b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 5 May 2022 23:18:50 -0400 Subject: [PATCH 146/708] Upversion to 1.7.0 Signed-off-by: Roland Grunberg --- README.md | 10 ---------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 035c6549b..253e68301 100644 --- a/README.md +++ b/README.md @@ -201,16 +201,6 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -New in 1.6.0 -* `java.signatureHelp.description.enabled`: Enable/disable to show the description in signature help. Defaults to `false`. -* `java.project.encoding`: Project encoding settings. - - `ignore`: Ignore project encoding settings (default). - - `warning`: Show warning if a project has no explicit encoding set. - - `setDefault`: Set the default workspace encoding settings. - -Removed in 1.6.0 -* `java.completion.overwrite`: Please use `editor.suggest.insertMode` instead. You can quickly toggle between `insert` & `replace` modes with `Shift` + `Tab` or `Shift` + `Enter` (default keyboard shortcuts). See `acceptAlternativeSelectedSuggestion` from the keyboard shortcuts menu for further details. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index 2f312a71a..d5aab3553 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.6.0", + "version": "1.7.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index eb3012a05..8598d2d23 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.6.0", + "version": "1.7.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 20f66ccee4d4647b18cd864c8ee04c8a3ba921b1 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 12 May 2022 21:41:09 +0800 Subject: [PATCH 147/708] Support publishing pre-release versions (#2371) * Use new publishPreRelease parameter to control this setting * Re-structure pipeline for ease of understanding * Move from Node 12 -> 14 for builds * Add pre-release preparation script to gulpfile Signed-off-by: Shi Chen --- Jenkinsfile | 163 ++++++++++++++++++++++++++++++++-------------------- gulpfile.js | 24 ++++++++ 2 files changed, 125 insertions(+), 62 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 148ca5046..995944f1f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,10 +1,10 @@ #!/usr/bin/env groovy def installBuildRequirements(){ - def nodeHome = tool 'nodejs-12.13.1' + def nodeHome = tool 'nodejs-14.19.1' env.PATH="${env.PATH}:${nodeHome}/bin" sh "npm install -g typescript" - sh 'npm install -g "vsce@<2"' + sh 'npm install -g "vsce"' } def buildVscodeExtension(){ @@ -12,75 +12,70 @@ def buildVscodeExtension(){ sh "npm run vscode:prepublish" } -node('rhel8'){ - stage 'Build JDT LS' - - env.JAVA_HOME="${tool 'openjdk-11'}" - env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" - sh 'java -version' - - git url: 'https://github.com/eclipse/eclipse.jdt.ls.git' - sh "./mvnw clean verify -B -U -e -Pserver-distro -Dtycho.disableP2Mirrors=true -DskipTests -P!jboss-maven-repos,!redhat-ga-repository,!redhat-ea-repository" - - def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') - stash name: 'server_distro', includes :files[0].path +def packageSpecificExtensions() { + stage "Package platform specific vscode-java" + def platforms = ["win32-x64", "linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64"] + def embeddedJRE = 17 + for(platform in platforms){ + sh "npx gulp download_jre --target ${platform} --javaVersion ${embeddedJRE}" + if (publishPreRelease.equals('true')) { + sh "vsce package --pre-release --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" + } else { + sh "vsce package --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" + } + } } -node('rhel8'){ - env.JAVA_HOME="${tool 'openjdk-11'}" - env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" - stage 'Checkout vscode-java code' - deleteDir() - git url: 'https://github.com/redhat-developer/vscode-java.git' - - stage 'install vscode-java build requirements' - installBuildRequirements() +def packageExtensions() { + if (publishPreRelease.equals('true')) { + // for pre-release versions we only package platform specific extensions + stage "replace extension version" + sh "npx gulp prepare_pre_release" - stage 'Build vscode-java' - buildVscodeExtension() - unstash 'server_distro' - def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') - sh "rm -rf ./out" - sh "mkdir ./server" - sh "tar -xvzf ${files[0].path} -C ./server" + def packageJson = readJSON file: 'package.json' + env.EXTENSION_VERSION = "${packageJson.version}" - stage "Package vscode-java" - def packageJson = readJSON file: 'package.json' - env.EXTENSION_VERSION = "${packageJson.version}" - sh "vsce package -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" + packageSpecificExtensions() + } else { + stage "package generic version" + def packageJson = readJSON file: 'package.json' + env.EXTENSION_VERSION = "${packageJson.version}" - stage 'Test vscode-java for staging' - wrap([$class: 'Xvnc']) { - sh "npm run compile" //compile the test code too - env.SKIP_COMMANDS_TEST="true" - sh "npm test --silent" - } + sh "vsce package -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - def vsix = findFiles(glob: '**.vsix') - stash name:'vsix', includes:vsix[0].path + def vsix = findFiles(glob: '**.vsix') + stash name:'vsix', includes:vsix[0].path - // Package platform specific versions - stage "Package platform specific vscode-java" - def platforms = ["win32-x64", "linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64"] - def embeddedJRE = 17 - for(platform in platforms){ - sh "npx gulp download_jre --target ${platform} --javaVersion ${embeddedJRE}" - sh "vsce package --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - } - stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' + packageSpecificExtensions() + stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' - stage 'Upload vscode-java to staging' - def artifactDir = "java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}" - sh "mkdir ${artifactDir}" - sh "mv *.vsix ${artifactDir}" + stage 'Upload vscode-java to staging' + def artifactDir = "java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}" + sh "mkdir ${artifactDir}" + sh "mv *.vsix ${artifactDir}" - sh "sftp ${UPLOAD_LOCATION}/jdt.ls/staging <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" - // Clean up build vsix - sh "rm -rf ${artifactDir}" + sh "sftp ${UPLOAD_LOCATION}/jdt.ls/staging <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" + // Clean up build vsix + sh "rm -rf ${artifactDir}" + } } -node('rhel8'){ - if(publishToMarketPlace.equals('true')){ +def publishExtensions() { + if (publishPreRelease.equals('true')) { + stage "publish generic version" + withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + sh 'vsce publish --pre-release -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + } + + stage "publish specific version" + // for pre-release versions, vsixs are not stashed and kept in project folder + withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + def platformVsixes = findFiles(glob: '**.vsix') + for(platformVsix in platformVsixes){ + sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" + } + } + } else if (publishToMarketPlace.equals('true')) { timeout(time:5, unit:'DAYS') { input message:'Approve deployment?', submitter: 'fbricon,rgrunber' } @@ -89,7 +84,7 @@ node('rhel8'){ unstash 'vsix' def vsix = findFiles(glob: '**.vsix') // Open-vsx Marketplace - sh 'npm install -g "ovsx@<0.3.0"' + sh 'npm install -g "ovsx"' withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${vsix[0].path}" } @@ -119,5 +114,49 @@ node('rhel8'){ // copy this stable build to Akamai-mirrored /static/ URL, so staging can be cleaned out more easily sh "sftp ${UPLOAD_LOCATION}/static/jdt.ls/stable/ <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" - }// if publishToMarketPlace + } +} + +node('rhel8'){ + stage 'Build JDT LS' + + env.JAVA_HOME="${tool 'openjdk-11'}" + env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" + sh 'java -version' + + git url: 'https://github.com/eclipse/eclipse.jdt.ls.git' + sh "./mvnw clean verify -B -U -e -Pserver-distro -Dtycho.disableP2Mirrors=true -DskipTests -P!jboss-maven-repos,!redhat-ga-repository,!redhat-ea-repository" + + def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') + stash name: 'server_distro', includes :files[0].path +} + +node('rhel8'){ + env.JAVA_HOME="${tool 'openjdk-11'}" + env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" + stage 'Checkout vscode-java code' + deleteDir() + git url: 'https://github.com/redhat-developer/vscode-java.git' + + stage 'install vscode-java build requirements' + installBuildRequirements() + + stage 'Build vscode-java' + buildVscodeExtension() + unstash 'server_distro' + def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') + sh "rm -rf ./out" + sh "mkdir ./server" + sh "tar -xvzf ${files[0].path} -C ./server" + + stage 'Test vscode-java for staging' + wrap([$class: 'Xvnc']) { + sh "npm run compile" //compile the test code too + env.SKIP_COMMANDS_TEST="true" + sh "npm test --silent" + } + + packageExtensions() + + publishExtensions() } diff --git a/gulpfile.js b/gulpfile.js index 93c30cceb..e1e76a929 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -177,6 +177,23 @@ gulp.task('clean_test_folder', function(done) { done(); }); +gulp.task('prepare_pre_release', function(done) { + const json = JSON.parse(fse.readFileSync("./package.json").toString()); + const stableVersion = json.version.match(/(\d+)\.(\d+)\.(\d+)/); + const major = stableVersion[1]; + const minor = stableVersion[2]; + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hours = date.getHours(); + const patch = `${date.getFullYear()}${prependZero(month)}${prependZero(day)}${prependZero(hours)}`; + const insiderPackageJson = Object.assign(json, { + version: `${major}.${minor}.${patch}`, + }); + fse.writeFileSync("./package.json", JSON.stringify(insiderPackageJson, null, 2)); + done(); +}); + function isWin() { return /^win/.test(process.platform); } @@ -192,3 +209,10 @@ function isLinux() { function mvnw() { return isWin()?"mvnw.cmd":"./mvnw"; } + +function prependZero(number) { + if (number > 99) { + throw "Unexpected value to prepend with zero"; + } + return `${number < 10 ? "0" : ""}${number}`; +} From 3dfc158869b259c0345f43b0a2a47f206cc3ccf4 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Mon, 23 May 2022 11:47:31 +0800 Subject: [PATCH 148/708] Support separate "Generate Getters" and "Generate Setters" (#2450) * support separate getter and setter Signed-off-by: Shi Chen --- src/protocol.ts | 14 +++++- src/sourceAction.ts | 109 ++++++++++++++++++++++++++++++-------------- 2 files changed, 86 insertions(+), 37 deletions(-) diff --git a/src/protocol.ts b/src/protocol.ts index 95dc283b8..0017556fd 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -68,6 +68,12 @@ export enum CompileWorkspaceStatus { CANCELLED = 3, } +export enum AccessorKind { + GETTER = 0, + SETTER = 1, + BOTH = 2 +} + export interface StatusReport { message: string; type: string; @@ -242,8 +248,12 @@ export interface AccessorField { generateSetter: boolean; } -export namespace ResolveUnimplementedAccessorsRequest { - export const type = new RequestType('java/resolveUnimplementedAccessors'); +export interface AccessorCodeActionParams extends CodeActionParams { + kind: AccessorKind; +} + +export namespace AccessorCodeActionRequest { + export const type = new RequestType('java/resolveUnimplementedAccessors'); } export interface GenerateAccessorsParams { diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 4a931e40a..5054717c6 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -1,12 +1,12 @@ 'use strict'; -import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable } from 'vscode'; -import { CodeActionParams } from 'vscode-languageclient'; +import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable, workspace, TextEditorRevealType } from 'vscode'; +import { CodeActionParams, WorkspaceEdit } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands } from './commands'; import { applyWorkspaceEdit } from './extension'; import { ListOverridableMethodsRequest, AddOverridableMethodsRequest, CheckHashCodeEqualsStatusRequest, GenerateHashCodeEqualsRequest, -OrganizeImportsRequest, ImportCandidate, ImportSelection, GenerateToStringRequest, CheckToStringStatusRequest, VariableBinding, ResolveUnimplementedAccessorsRequest, GenerateAccessorsRequest, CheckConstructorStatusRequest, GenerateConstructorsRequest, CheckDelegateMethodsStatusRequest, GenerateDelegateMethodsRequest } from './protocol'; +OrganizeImportsRequest, ImportCandidate, ImportSelection, GenerateToStringRequest, CheckToStringStatusRequest, VariableBinding, GenerateAccessorsRequest, CheckConstructorStatusRequest, GenerateConstructorsRequest, CheckDelegateMethodsStatusRequest, GenerateDelegateMethodsRequest, AccessorKind, AccessorCodeActionRequest, AccessorCodeActionParams } from './protocol'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { registerOverrideMethodsCommand(languageClient, context); @@ -63,6 +63,7 @@ function registerOverrideMethodsCommand(languageClient: LanguageClient, context: overridableMethods: selectedItems.map((item) => item.originalMethod), }); await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -106,6 +107,7 @@ function registerHashCodeEqualsCommand(languageClient: LanguageClient, context: regenerate }); await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -204,44 +206,64 @@ function registerGenerateToStringCommand(languageClient: LanguageClient, context fields, }); await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); })); } function registerGenerateAccessorsCommand(languageClient: LanguageClient, context: ExtensionContext): void { - context.subscriptions.push(commands.registerCommand(Commands.GENERATE_ACCESSORS_PROMPT, async (params: CodeActionParams) => { - const accessors = await languageClient.sendRequest(ResolveUnimplementedAccessorsRequest.type, params); - if (!accessors || !accessors.length) { - return; - } + context.subscriptions.push(commands.registerCommand(Commands.GENERATE_ACCESSORS_PROMPT, async (params: AccessorCodeActionParams) => { + await generateAccessors(languageClient, params); + })); +} - const accessorItems = accessors.map((accessor) => { - const description = []; - if (accessor.generateGetter) { - description.push('getter'); - } - if (accessor.generateSetter) { - description.push('setter'); - } - return { - label: accessor.fieldName, - description: (accessor.isStatic ? 'static ' : '')+ description.join(', '), - originalField: accessor, - }; - }); - const selectedAccessors = await window.showQuickPick(accessorItems, { - canPickMany: true, - placeHolder: 'Select the fields to generate getters and setters.' - }); - if (!selectedAccessors || !selectedAccessors.length) { - return; - } +async function generateAccessors(languageClient: LanguageClient, params: AccessorCodeActionParams): Promise { + const accessors = await languageClient.sendRequest(AccessorCodeActionRequest.type, params); + if (!accessors || !accessors.length) { + return; + } - const workspaceEdit = await languageClient.sendRequest(GenerateAccessorsRequest.type, { - context: params, - accessors: selectedAccessors.map((item) => item.originalField), - }); - await applyWorkspaceEdit(workspaceEdit, languageClient); - })); + const accessorItems = accessors.map((accessor) => { + const description = []; + if (accessor.generateGetter) { + description.push('getter'); + } + if (accessor.generateSetter) { + description.push('setter'); + } + return { + label: accessor.fieldName, + description: (accessor.isStatic ? 'static ' : '')+ description.join(', '), + originalField: accessor, + }; + }); + let accessorsKind: string; + switch (params.kind) { + case AccessorKind.BOTH: + accessorsKind = "getters and setters"; + break; + case AccessorKind.GETTER: + accessorsKind = "getters"; + break; + case AccessorKind.SETTER: + accessorsKind = "setters"; + break; + default: + return; + } + const selectedAccessors = await window.showQuickPick(accessorItems, { + canPickMany: true, + placeHolder: `Select the fields to generate ${accessorsKind}` + }); + if (!selectedAccessors || !selectedAccessors.length) { + return; + } + + const workspaceEdit = await languageClient.sendRequest(GenerateAccessorsRequest.type, { + context: params, + accessors: selectedAccessors.map((item) => item.originalField), + }); + await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); } function registerGenerateConstructorsCommand(languageClient: LanguageClient, context: ExtensionContext): void { @@ -295,6 +317,7 @@ function registerGenerateConstructorsCommand(languageClient: LanguageClient, con fields: selectedFields, }); await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); })); } @@ -356,5 +379,21 @@ function registerGenerateDelegateMethodsCommand(languageClient: LanguageClient, delegateEntries, }); await applyWorkspaceEdit(workspaceEdit, languageClient); + await revealWorkspaceEdit(workspaceEdit, languageClient); })); } + +async function revealWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageClient: LanguageClient): Promise { + const codeWorkspaceEdit = languageClient.protocol2CodeConverter.asWorkspaceEdit(workspaceEdit); + if (!codeWorkspaceEdit) { + return; + } + for (const entry of codeWorkspaceEdit.entries()) { + await workspace.openTextDocument(entry[0]); + if (entry[1].length > 0) { + // reveal first available change of the workspace edit + window.activeTextEditor.revealRange(entry[1][0].range, TextEditorRevealType.InCenter); + break; + } + } +} From 14a81595a8b407c7f82d07caccd62023b55cecf1 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Mon, 23 May 2022 14:36:21 +0800 Subject: [PATCH 149/708] show field type when generating accessors (#2459) Signed-off-by: Shi Chen --- src/protocol.ts | 1 + src/sourceAction.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/protocol.ts b/src/protocol.ts index 0017556fd..37c757b11 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -246,6 +246,7 @@ export interface AccessorField { isStatic: boolean; generateGetter: boolean; generateSetter: boolean; + typeName: string; } export interface AccessorCodeActionParams extends CodeActionParams { diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 5054717c6..2d6558b1b 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -231,7 +231,7 @@ async function generateAccessors(languageClient: LanguageClient, params: Accesso description.push('setter'); } return { - label: accessor.fieldName, + label: `${accessor.fieldName}: ${accessor.typeName}`, description: (accessor.isStatic ? 'static ' : '')+ description.join(', '), originalField: accessor, }; From 34d7bcfe6331a4fcac9f4dcc233dd168a994a865 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Tue, 24 May 2022 15:12:07 +0800 Subject: [PATCH 150/708] Add a new API to wait for standard server ready (#2461) - Add waitForServerReady() which returns a promise. The promise will only be resolved when the standard server is ready. Signed-off-by: sheche --- src/apiManager.ts | 13 +++++++++++++ src/extension.api.ts | 9 ++++++++- src/standardLanguageClient.ts | 1 + test/standard-mode-suite/publicApi.test.ts | 5 +++++ 4 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/apiManager.ts b/src/apiManager.ts index 994ed43f4..388053e47 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -16,6 +16,7 @@ class ApiManager { private onDidClasspathUpdateEmitter: Emitter = new Emitter(); private onDidServerModeChangeEmitter: Emitter = new Emitter(); private onDidProjectsImportEmitter: Emitter = new Emitter(); + private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider(); @@ -37,6 +38,13 @@ class ApiManager { const onDidServerModeChange = this.onDidServerModeChangeEmitter.event; const onDidProjectsImport = this.onDidProjectsImportEmitter.event; + const serverReadyPromise: Promise = new Promise((resolve) => { + this.serverReadyPromiseResolve = resolve; + }); + const waitForServerReady = async () => { + return serverReadyPromise; + }; + this.api = { apiVersion: ExtensionApiVersion, javaRequirement: requirements, @@ -51,6 +59,7 @@ class ApiManager { serverMode, onDidServerModeChange, onDidProjectsImport, + waitForServerReady, }; } @@ -81,6 +90,10 @@ class ApiManager { public updateStatus(status: ClientStatus): void { this.api.status = status; } + + public standardServerReady(): void { + this.serverReadyPromiseResolve(true); + } } export const apiManager: ApiManager = new ApiManager(); diff --git a/src/extension.api.ts b/src/extension.api.ts index 38ef35782..92d13f5b7 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -73,7 +73,7 @@ export enum ClientStatus { Stopping = "Stopping", } -export const ExtensionApiVersion = '0.6'; +export const ExtensionApiVersion = '0.7'; export interface ExtensionAPI { readonly apiVersion: string; @@ -110,4 +110,11 @@ export interface ExtensionAPI { * An event which fires when the server mode has been switched. */ readonly onDidServerModeChange: Event; + + /** + * A promise that will be resolved when the standard language server is ready. + * @since API version 0.7 + * @since extension version 1.7.0 + */ + readonly waitForServerReady: () => Promise; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 0cc05743c..c9a344cf8 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -108,6 +108,7 @@ export class StandardLanguageClient { case 'ServiceReady': apiManager.updateServerMode(ServerMode.STANDARD); apiManager.fireDidServerModeChange(ServerMode.STANDARD); + apiManager.standardServerReady(); activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index 0b93c7161..8ad2e2428 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -163,6 +163,11 @@ suite('Public APIs - Standard', () => { }); }); + test('waitForServerReady() should work', async function () { + const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; + await api.waitForServerReady(); + }); + suiteTeardown(async function() { // revert the pom content const pomContent: string = await fse.readFile(pomPath, 'utf-8'); From 39cacc1aa993c018b17c20946b831b15774668ae Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 25 May 2022 16:22:53 +0800 Subject: [PATCH 151/708] Support Gradle invalid type code error check (#2442) * support gradle invalid type code error check Signed-off-by: Shi Chen --- src/commands.ts | 4 +- src/gradle/gradleCodeActionProvider.ts | 56 ++++++++++++++++++ src/protocol.ts | 7 +++ src/standardLanguageClient.ts | 81 +++++++++++++++++--------- 4 files changed, 119 insertions(+), 29 deletions(-) create mode 100644 src/gradle/gradleCodeActionProvider.ts diff --git a/src/commands.ts b/src/commands.ts index 7c095b074..d295ed8ab 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -257,5 +257,7 @@ export namespace Commands { export const RESOLVE_WORKSPACE_SYMBOL = 'java.project.resolveWorkspaceSymbol'; - export const GET_WORKSPACE_PATH = '_java.workspace.path'; + export const GET_WORKSPACE_PATH = '_java.workspace.path'; + + export const UPGRADE_GRADLE_WRAPPER = '_java.gradle.upgradeWrapper'; } diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts new file mode 100644 index 000000000..952ae6081 --- /dev/null +++ b/src/gradle/gradleCodeActionProvider.ts @@ -0,0 +1,56 @@ +'use strict'; + +import * as fse from "fs-extra"; +import * as path from "path"; +import { CancellationToken, CodeAction, CodeActionContext, CodeActionKind, CodeActionProvider, CodeActionProviderMetadata, Command, commands, Diagnostic, DiagnosticRelatedInformation, ExtensionContext, ProviderResult, Range, Selection, TextDocument, Uri } from "vscode"; +import { Commands } from "../commands"; +import { upgradeGradle } from "../standardLanguageClient"; + +export class GradleCodeActionProvider implements CodeActionProvider { + + private static UPGRADE_GRADLE_WRAPPER_TITLE = "Upgrade Gradle Wrapper"; + private static WRAPPER_PROPERTIES_DESCRIPTOR = "gradle/wrapper/gradle-wrapper.properties"; + private static GRADLE_PROBLEM_ID = 0x00080000; + private static GRADLE_INVALID_TYPE_CODE_ID = GradleCodeActionProvider.GRADLE_PROBLEM_ID + 1; + + constructor(context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string) => { + upgradeGradle(projectUri); + })); + } + + public provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(CodeAction | Command)[]> { + if (context?.diagnostics?.length && context.diagnostics[0].source === "Java") { + return this.provideGradleCodeActions(document, context.diagnostics); + } + return []; + } + + private async provideGradleCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): Promise { + const codeActions = []; + for (const diagnostic of diagnostics) { + const documentUri = document.uri.toString(); + if (documentUri.endsWith(GradleCodeActionProvider.WRAPPER_PROPERTIES_DESCRIPTOR) && diagnostic.code === GradleCodeActionProvider.GRADLE_INVALID_TYPE_CODE_ID.toString()) { + const projectPath = path.resolve(Uri.parse(documentUri).fsPath, "..", "..", "..").normalize(); + if (await fse.pathExists(projectPath)) { + const projectUri = Uri.file(projectPath).toString(); + const upgradeWrapperCommand: Command = { + title: GradleCodeActionProvider.UPGRADE_GRADLE_WRAPPER_TITLE, + command: Commands.UPGRADE_GRADLE_WRAPPER, + arguments: [projectUri] + }; + const codeAction = new CodeAction(GradleCodeActionProvider.UPGRADE_GRADLE_WRAPPER_TITLE, CodeActionKind.QuickFix.append("gradle")); + codeAction.command = upgradeWrapperCommand; + codeActions.push(codeAction); + } + } + } + return codeActions; + } +} + +export const gradleCodeActionMetadata: CodeActionProviderMetadata = { + providedCodeActionKinds: [ + CodeActionKind.QuickFix.append("gradle") + ] +}; diff --git a/src/protocol.ts b/src/protocol.ts index 37c757b11..ed7fc092c 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -59,6 +59,7 @@ export enum EventType { ClasspathUpdated = 100, ProjectsImported = 200, IncompatibleGradleJdkIssue = 300, + UpgradeGradleWrapper = 400, } export enum CompileWorkspaceStatus { @@ -425,3 +426,9 @@ export interface GradleCompatibilityInfo { highestJavaVersion: string; recommendedGradleVersion: string; } + +export interface UpgradeGradleWrapperInfo { + projectUri: string; + message: string; + recommendedGradleVersion: string; +} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index c9a344cf8..4e9cd687b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -7,7 +7,7 @@ import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; -import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo } from "./protocol"; +import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -35,6 +35,7 @@ import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActio import { findRuntimes, IJavaRuntime } from "jdk-utils"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { JavaInlayHintsProvider } from "./inlayHintsProvider"; +import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -184,7 +185,22 @@ export class StandardLanguageClient { } else { options.push(USE_JAVA + runtimes[0].version.major + AS_GRADLE_JVM); } - this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, runtimes[0]?.homedir); + this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, info.recommendedGradleVersion, runtimes[0]?.homedir); + break; + case EventType.UpgradeGradleWrapper: + const neverShow: boolean | undefined = context.globalState.get("java.neverShowUpgradeWrapperNotification"); + if (!neverShow) { + const upgradeInfo = notification.data as UpgradeGradleWrapperInfo; + const option = `Upgrade to ${upgradeInfo.recommendedGradleVersion}`; + window.showWarningMessage(upgradeInfo.message, option, "Don't show again").then(async (choice) => { + if (choice === option) { + await upgradeGradle(upgradeInfo.projectUri, upgradeInfo.recommendedGradleVersion); + } else if (choice === "Don't show again") { + context.globalState.update("java.neverShowUpgradeWrapperNotification", true); + } + }); + } + break; default: break; } @@ -258,7 +274,7 @@ export class StandardLanguageClient { this.status = ClientStatus.Initialized; } - private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, newJavaHome: string) { + private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { window.showErrorMessage(message + " [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)", ...options).then(async (choice) => { if (choice === GET_JDK) { commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(getJdkUrl())); @@ -267,31 +283,7 @@ export class StandardLanguageClient { commands.executeCommand("workbench.action.openSettings", GRADLE_IMPORT_JVM); commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); } else if (choice.startsWith(UPGRADE_GRADLE)) { - const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); - if (!useWrapper) { - await workspace.getConfiguration().update("java.import.gradle.wrapper.enabled", true, ConfigurationTarget.Workspace); - } - const result = await window.withProgress({ - location: ProgressLocation.Notification, - title: "Upgrading Gradle wrapper...", - cancellable: true, - }, (_progress, token) => { - return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, token); - }); - if (result) { - const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); - if (fse.pathExists(propertiesFile)) { - const content = await fse.readFile(propertiesFile); - const offset = content.toString().indexOf("distributionUrl"); - if (offset >= 0) { - const document = await workspace.openTextDocument(propertiesFile); - const position = document.positionAt(offset); - const distributionUrlRange = document.getWordRangeAtPosition(position); - window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); - } - } - commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); - } + await upgradeGradle(projectUri, gradleVersion); } }); } @@ -504,6 +496,11 @@ export class StandardLanguageClient { pattern: "**/pom.xml" }, new PomCodeActionProvider(context), pomCodeActionMetadata); + languages.registerCodeActionsProvider({ + scheme: "file", + pattern: "**/gradle/wrapper/gradle-wrapper.properties" + }, new GradleCodeActionProvider(context), gradleCodeActionMetadata); + if (languages.registerInlayHintsProvider) { context.subscriptions.push(languages.registerInlayHintsProvider([ { scheme: "file", language: "java", pattern: "**/*.java" }, @@ -634,3 +631,31 @@ export function showNoLocationFound(message: string): void { message ); } + +export async function upgradeGradle(projectUri: string, version?: string): Promise { + const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); + if (!useWrapper) { + await workspace.getConfiguration().update("java.import.gradle.wrapper.enabled", true, ConfigurationTarget.Workspace); + } + const result = await window.withProgress({ + location: ProgressLocation.Notification, + title: "Upgrading Gradle wrapper...", + cancellable: true, + }, (_progress, token) => { + return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, version, token); + }); + if (result) { + const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); + if (fse.pathExists(propertiesFile)) { + const content = await fse.readFile(propertiesFile); + const offset = content.toString().indexOf("distributionUrl"); + if (offset >= 0) { + const document = await workspace.openTextDocument(propertiesFile); + const position = document.positionAt(offset); + const distributionUrlRange = document.getWordRangeAtPosition(position); + window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); + } + } + commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); + } +} From 95ae15d5bcf861a4d33cf3579bf43f1318c752a1 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 26 May 2022 16:49:34 +0800 Subject: [PATCH 152/708] Rename 'waitForServerReady()' to 'serverReady()' (#2469) Signed-off-by: sheche --- src/apiManager.ts | 6 +++--- src/extension.api.ts | 3 ++- src/standardLanguageClient.ts | 2 +- test/standard-mode-suite/publicApi.test.ts | 4 ++-- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/apiManager.ts b/src/apiManager.ts index 388053e47..86ecf0d6c 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -41,7 +41,7 @@ class ApiManager { const serverReadyPromise: Promise = new Promise((resolve) => { this.serverReadyPromiseResolve = resolve; }); - const waitForServerReady = async () => { + const serverReady = async () => { return serverReadyPromise; }; @@ -59,7 +59,7 @@ class ApiManager { serverMode, onDidServerModeChange, onDidProjectsImport, - waitForServerReady, + serverReady, }; } @@ -91,7 +91,7 @@ class ApiManager { this.api.status = status; } - public standardServerReady(): void { + public resolveServerReadyPromise(): void { this.serverReadyPromiseResolve(true); } } diff --git a/src/extension.api.ts b/src/extension.api.ts index 92d13f5b7..9ba551c0e 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -113,8 +113,9 @@ export interface ExtensionAPI { /** * A promise that will be resolved when the standard language server is ready. + * Note: The server here denotes for the standard server, not the lightweight. * @since API version 0.7 * @since extension version 1.7.0 */ - readonly waitForServerReady: () => Promise; + readonly serverReady: () => Promise; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 4e9cd687b..92346c0b5 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -109,7 +109,7 @@ export class StandardLanguageClient { case 'ServiceReady': apiManager.updateServerMode(ServerMode.STANDARD); apiManager.fireDidServerModeChange(ServerMode.STANDARD); - apiManager.standardServerReady(); + apiManager.resolveServerReadyPromise(); activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index 8ad2e2428..1c966cad7 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -163,9 +163,9 @@ suite('Public APIs - Standard', () => { }); }); - test('waitForServerReady() should work', async function () { + test('serverReady() should work', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - await api.waitForServerReady(); + await api.serverReady(); }); suiteTeardown(async function() { From 97b29fa68b7b5db8d05e805cbf6cc11b9d33efe5 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Fri, 27 May 2022 03:05:32 +0200 Subject: [PATCH 153/708] VS Code doesn't call shutdown when exiting the standard client (#2472) Signed-off-by: Snjezana Peco --- src/extension.ts | 17 +++++++++++++---- src/standardLanguageClient.ts | 1 - src/syntaxLanguageClient.ts | 1 - 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 21e9c3cbf..63269514b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -427,7 +427,9 @@ export function activate(context: ExtensionContext): Promise { apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { if (event === ServerMode.STANDARD) { - syntaxClient.stop(); + syntaxClient.getClient().stop().then(client => { + syntaxClient.stop(); + }); fileEventHandler.setServerStatus(true); runtimeStatusBarProvider.initialize(context); } @@ -633,9 +635,16 @@ export function getJavaConfig(javaHome: string) { return javaConfig; } -export function deactivate(): void { - standardClient.stop(); - syntaxClient.stop(); +export function deactivate(): Promise { + return getActiveLanguageClient().then(client => { + standardClient.stop(); + syntaxClient.stop(); + if (!client) { + return undefined; + } else { + return client.stop(); + } + }); } export async function getActiveLanguageClient(): Promise { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 92346c0b5..130bc5196 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -520,7 +520,6 @@ export class StandardLanguageClient { public stop() { if (this.languageClient) { - this.languageClient.stop(); this.status = ClientStatus.Stopping; } } diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 8c886740e..f25fdce4d 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -92,7 +92,6 @@ export class SyntaxLanguageClient { public stop() { this.status = ClientStatus.Stopping; if (this.languageClient) { - this.languageClient.stop(); this.languageClient = null; } } From 01d07b9aaa4ae3375a2927042708a62c856bc384 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 27 May 2022 14:58:19 +0800 Subject: [PATCH 154/708] Support exclusion list for inlay hints (#2468) * Support exclusion list for inlay hints Signed-off-by: sheche --- README.md | 8 ++++++++ package.json | 11 ++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 253e68301..21f3d2b85 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,14 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. +New in 1.7.0 +* `java.inlayHints.parameterNames.exclusions`: The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples: + - `java.lang.Math.*` - All the methods from java.lang.Math. + - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'. + - `*.println(*)` - Methods named as 'println'. + - `(from, to)` - Methods with two parameters named as 'from' and 'to'. + - `(arg*)` - Methods with one parameter whose name starts with 'arg'. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 8598d2d23..eefb29bcb 100644 --- a/package.json +++ b/package.json @@ -872,7 +872,16 @@ "Enable parameter name hints for literal and non-literal arguments" ], "default": "literals", - "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n", + "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n `#java.inlayHints.parameterNames.exclusions#` can be used to disable the inlay hints for methods.", + "scope": "window" + }, + "java.inlayHints.parameterNames.exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "markdownDescription": "The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples:\n - `java.lang.Math.*` - All the methods from java.lang.Math.\n - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'.\n - `*.println(*)` - Methods named as 'println'.\n - `(from, to)` - Methods with two parameters named as 'from' and 'to'.\n - `(arg*)` - Methods with one parameter whose name starts with 'arg'.", "scope": "window" }, "java.project.encoding": { From 6711075954fafd498fe16cf2d482b5855bd003fe Mon Sep 17 00:00:00 2001 From: JessicaJHee <73968480+JessicaJHee@users.noreply.github.com> Date: Mon, 30 May 2022 14:30:30 -0400 Subject: [PATCH 155/708] Add completion support for multiline comment blocks (#2484) Signed-off-by: Jessica He --- language-configuration.json | 2 +- src/extension.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/language-configuration.json b/language-configuration.json index ce7d3fee1..884b85d0e 100644 --- a/language-configuration.json +++ b/language-configuration.json @@ -46,7 +46,7 @@ "'" ], { - "open": "/**", + "open": "/*", "close": " */", "notIn": [ "string" diff --git a/src/extension.ts b/src/extension.ts index 63269514b..8cb3960c9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -679,8 +679,8 @@ function enableJavadocSymbols() { wordPattern: /(-?\d*\.\d\w*)|([^\`\~\!\@\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g, onEnterRules: [ { - // e.g. /** | */ - beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, + // e.g. /** | */ or /* | */ + beforeText: /^\s*\/\*\*?(?!\/)([^\*]|\*(?!\/))*$/, afterText: /^\s*\*\/$/, action: { indentAction: IndentAction.IndentOutdent, appendText: ' * ' } }, From 9957f151fa8321e6aa02e0f4b3a8b3f928d09af8 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Tue, 31 May 2022 20:04:19 +0200 Subject: [PATCH 156/708] Fix java.completion.importOrder (#2489) Signed-off-by: Snjezana Peco --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index eefb29bcb..3d723f8f3 100644 --- a/package.json +++ b/package.json @@ -524,8 +524,8 @@ "default": [ "java", "javax", - "com", - "org" + "org", + "com" ], "scope": "window" }, From ca4e210db183b873482b5fa7ba756105edaf09a4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 30 May 2022 23:35:19 -0400 Subject: [PATCH 157/708] Add Changelog for 1.7.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1bfb5ba4a..ee228f10b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 1.7.0 (June 1st, 2022) + * enhancment - Support separate "Generate Getters" and "Generate Setters". See [#2362](https://github.com/redhat-developer/vscode-java/issues/2362). + * enhancement - Show field type when generating accessors. See [#2459](https://github.com/redhat-developer/vscode-java/pull/2459). + * enhancement - Show quick fixes for generating accessors in field declarations. See [JLS#2092](https://github.com/eclipse/eclipse.jdt.ls/pull/2092). + * enhancement - Support exclusion list for inlay hints. See [#2412](https://github.com/redhat-developer/vscode-java/issues/2412). + * enhancement - Support Gradle invalid type code error check. See [#1594](https://github.com/redhat-developer/vscode-java/issues/1594). + * bug fix - Add support to open decompiled symbols through the symbols list. See [JLS#2087](https://github.com/eclipse/eclipse.jdt.ls/issues/2087). + * bug fix - Add completion support for multiline comment blocks. See [#2484](https://github.com/redhat-developer/vscode-java/pull/2484). + * bug fix - Ensure the standard server shuts down immediately after the client. See [#2471](https://github.com/redhat-developer/vscode-java/issues/2471). + * bug fix - Fix `java.completion.importOrder`. See [#2489](https://github.com/redhat-developer/vscode-java/pull/2489). + * other - Add a new API to wait for standard server ready. See [#2461](https://github.com/redhat-developer/vscode-java/pull/2461). + * other - Support publishing pre-release versions. See [#2285](https://github.com/redhat-developer/vscode-java/issues/2285). + ## 1.6.0 (May 5th, 2022) * enhancement - Trigger signature help on completion item selected. See [#2426](https://github.com/redhat-developer/vscode-java/pull/2426). * enhancement - Support completion insert/replace capability. Use the setting `editor.suggest.insertMode` to control whether to overwrite words when accepting completions. You can also quickly toggle between insert & replace modes with `Shift + Tab` or `Shift + Enter` (default keyboard shortcuts). See [#2427](https://github.com/redhat-developer/vscode-java/pull/2427). From 6ec891f313d2ee30f754c80914e9a7e618b942d9 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 1 Jun 2022 13:24:02 -0400 Subject: [PATCH 158/708] Upversion to 1.8.0 Signed-off-by: Roland Grunberg --- README.md | 8 -------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 21f3d2b85..253e68301 100644 --- a/README.md +++ b/README.md @@ -201,14 +201,6 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -New in 1.7.0 -* `java.inlayHints.parameterNames.exclusions`: The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples: - - `java.lang.Math.*` - All the methods from java.lang.Math. - - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'. - - `*.println(*)` - Methods named as 'println'. - - `(from, to)` - Methods with two parameters named as 'from' and 'to'. - - `(arg*)` - Methods with one parameter whose name starts with 'arg'. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index d5aab3553..c937c120e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.7.0", + "version": "1.8.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 3d723f8f3..c4eb7f94b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.7.0", + "version": "1.8.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 1830d4d670a116ecbeed4b8ae20ef5eb8e094787 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Wed, 8 Jun 2022 21:52:41 +0200 Subject: [PATCH 159/708] Move to Java 17 (#2495) Signed-off-by: Snjezana Peco --- .github/workflows/pr-verify.yml | 2 +- .sdkmanrc | 2 +- Jenkinsfile | 4 ++-- package.json | 4 ++-- src/requirements.ts | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 2af0252e6..64bc87ee2 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -18,7 +18,7 @@ jobs: - name: Set Up Java uses: actions/setup-java@v2 with: - java-version: '11' + java-version: '17' distribution: 'adopt' - run: npm install -g typescript "vsce@<2" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz diff --git a/.sdkmanrc b/.sdkmanrc index b6d568751..0f7aaf5a5 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=11.0.7.hs-adpt +java=17.0.3-tem diff --git a/Jenkinsfile b/Jenkinsfile index 995944f1f..a11078cda 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -120,7 +120,7 @@ def publishExtensions() { node('rhel8'){ stage 'Build JDT LS' - env.JAVA_HOME="${tool 'openjdk-11'}" + env.JAVA_HOME="${tool 'openjdk-17'}" env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" sh 'java -version' @@ -132,7 +132,7 @@ node('rhel8'){ } node('rhel8'){ - env.JAVA_HOME="${tool 'openjdk-11'}" + env.JAVA_HOME="${tool 'openjdk-17'}" env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" stage 'Checkout vscode-java code' deleteDir() diff --git a/package.json b/package.json index c4eb7f94b..1492d32ea 100644 --- a/package.json +++ b/package.json @@ -171,7 +171,7 @@ "null" ], "default": null, - "description": "Specifies the folder path to the JDK (11 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk11.0_8\"", + "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", "scope": "machine-overridable", "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead." }, @@ -181,7 +181,7 @@ "null" ], "default": null, - "description": "Specifies the folder path to the JDK (11 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk11.0_8\"", + "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", "scope": "machine-overridable" }, "java.jdt.ls.vmargs": { diff --git a/src/requirements.ts b/src/requirements.ts index 78f220fe5..eecafa11a 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -9,7 +9,7 @@ import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; -const REQUIRED_JDK_VERSION = 11; +const REQUIRED_JDK_VERSION = 17; export interface RequirementsData { tooling_jre: string; tooling_jre_version: number; From 4d954f70dd46aafd219245bf8e38c361492dfbfc Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 10 Jun 2022 14:43:15 +0800 Subject: [PATCH 160/708] Avoid repeatedly setting busy and ready for language server status (#2494) Signed-off-by: Shi Chen --- src/languageStatusItemFactory.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts index 04a6a5329..4604e7d1b 100644 --- a/src/languageStatusItemFactory.ts +++ b/src/languageStatusItemFactory.ts @@ -63,6 +63,9 @@ export namespace ServerStatusItemFactory { } export function setBusy(item: any): void { + if (item.busy === true) { + return; + } item.text = "Building"; item.busy = true; } @@ -91,6 +94,9 @@ export namespace ServerStatusItemFactory { } export function setReady(item: any): void { + if (item.text === StatusIcon.Ready) { + return; + } item.busy = false; item.severity = vscode.LanguageStatusSeverity?.Information; item.command = StatusCommands.showServerStatusCommand; From 9b6046eecc65fd47507f309a3ccc9add45c6d3be Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 13 Jun 2022 15:10:43 +0800 Subject: [PATCH 161/708] Fix moving refactoring not working in standard mode (#2506) * Fix moving refactoring not working in standard mode - return the 'stop()' promise in each 'xxxClient.stop()' method. - return 'Promise.all()' in 'deactivate()' Signed-off-by: sheche --- src/extension.ts | 19 ++++++------------- src/standardLanguageClient.ts | 10 ++++++++-- src/syntaxLanguageClient.ts | 9 +++++++-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 8cb3960c9..1d349273c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -427,9 +427,7 @@ export function activate(context: ExtensionContext): Promise { apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { if (event === ServerMode.STANDARD) { - syntaxClient.getClient().stop().then(client => { - syntaxClient.stop(); - }); + syntaxClient.stop(); fileEventHandler.setServerStatus(true); runtimeStatusBarProvider.initialize(context); } @@ -635,16 +633,11 @@ export function getJavaConfig(javaHome: string) { return javaConfig; } -export function deactivate(): Promise { - return getActiveLanguageClient().then(client => { - standardClient.stop(); - syntaxClient.stop(); - if (!client) { - return undefined; - } else { - return client.stop(); - } - }); +export function deactivate(): Promise { + return Promise.all([ + standardClient.stop(), + syntaxClient.stop(), + ]); } export async function getActiveLanguageClient(): Promise { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 130bc5196..d3afc71c1 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -518,10 +518,16 @@ export class StandardLanguageClient { } } - public stop() { + public stop(): Promise { + this.status = ClientStatus.Stopping; if (this.languageClient) { - this.status = ClientStatus.Stopping; + try { + return this.languageClient.stop(); + } finally { + this.languageClient = null; + } } + return Promise.resolve(); } public getClient(): LanguageClient { diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index f25fdce4d..0d3dbfe77 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -89,11 +89,16 @@ export class SyntaxLanguageClient { } } - public stop() { + public stop(): Promise { this.status = ClientStatus.Stopping; if (this.languageClient) { - this.languageClient = null; + try { + return this.languageClient.stop(); + } finally { + this.languageClient = null; + } } + return Promise.resolve(); } public isAlive(): boolean { From 3cdbb5e11639b061000872caffbaf974638cc170 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 15 Jun 2022 11:41:58 -0400 Subject: [PATCH 162/708] Verify that java.jdt.ls.java.home meets minimum JRE requirement. - java.jdt.ls.java.home should only be used if it meets the minimum JRE requirement - Default to the embedded JRE (if available) otherwise - Display one-time notification message to inform that JVM set within 'java.jdt.ls.java.home' could not be used Signed-off-by: Roland Grunberg --- src/requirements.ts | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/requirements.ts b/src/requirements.ts index eecafa11a..9206ea514 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -4,7 +4,7 @@ import * as expandHomeDir from 'expand-home-dir'; import * as fse from 'fs-extra'; import { findRuntimes, getRuntime, getSources, IJavaRuntime, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; import * as path from 'path'; -import { env, ExtensionContext, Uri, workspace } from 'vscode'; +import { env, ExtensionContext, Uri, window, workspace } from 'vscode'; import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; @@ -54,8 +54,16 @@ export async function resolveRequirements(context: ExtensionContext): Promise= REQUIRED_JDK_VERSION) { + toolingJre = javaHome; + toolingJreVersion = javaVersion; + } else { + const neverShow: boolean | undefined = context.workspaceState.get("java.home.failsMinRequiredFirstTime"); + if (!neverShow) { + context.workspaceState.update("java.home.failsMinRequiredFirstTime", true); + window.showInformationMessage(`The Java runtime set by 'java.jdt.ls.java.home' does not meet the minimum required version of '${REQUIRED_JDK_VERSION}' and will not be used.`); + } + } } } From d95b796f0763df422fd0a42659c398f9dc0bbe7c Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 17 Jun 2022 11:36:49 +0800 Subject: [PATCH 163/708] Allow to clean workspace without pop-up notification Signed-off-by: Jinbo Wang --- src/extension.ts | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 1d349273c..3ac697c22 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -376,7 +376,7 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.OPEN_FORMATTER, async () => openFormatter(context.extensionPath))); - context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, () => cleanWorkspace(workspacePath))); + context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); @@ -715,16 +715,18 @@ function makeRandomHexString(length) { return result; } -async function cleanWorkspace(workspacePath) { - const doIt = 'Restart and delete'; - window.showWarningMessage('Are you sure you want to clean the Java language server workspace?', 'Cancel', doIt).then(selection => { - if (selection === doIt) { - ensureExists(workspacePath); - const file = path.join(workspacePath, cleanWorkspaceFileName); - fs.closeSync(fs.openSync(file, 'w')); - commands.executeCommand(Commands.RELOAD_WINDOW); +async function cleanWorkspace(workspacePath, force?: boolean) { + if (!force) { + const doIt = 'Restart and delete'; + const selection = await window.showWarningMessage('Are you sure you want to clean the Java language server workspace?', 'Cancel', doIt); + if (selection !== doIt) { + return; } - }); + } + ensureExists(workspacePath); + const file = path.join(workspacePath, cleanWorkspaceFileName); + fs.closeSync(fs.openSync(file, 'w')); + commands.executeCommand(Commands.RELOAD_WINDOW); } function openServerLogFile(workspacePath, column: ViewColumn = ViewColumn.Active): Thenable { From def31b42a4ace1d116b4aaa3db8255dbb5fd6261 Mon Sep 17 00:00:00 2001 From: Karl von Randow Date: Thu, 24 Mar 2022 13:30:09 +1300 Subject: [PATCH 164/708] Add commands to view Java Language Server debug and error logs - Open log files in same view column, outside preview-mode for better visibility Resolves #2367 Signed-off-by: Karl von Randow --- package.json | 14 +++++++--- package.nls.json | 2 -- package.nls.zh.json | 2 -- src/commands.ts | 10 +++++++ src/extension.ts | 27 +++++++++++++++++-- test/lightweight-mode-suite/extension.test.ts | 2 ++ test/standard-mode-suite/extension.test.ts | 2 ++ 7 files changed, 49 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 1492d32ea..2461b4fd2 100644 --- a/package.json +++ b/package.json @@ -924,13 +924,19 @@ }, { "command": "java.open.serverLog", - "title": "%java.open.serverLog%", - "category": "Java" + "when": "false" + }, + { + "command": "java.open.serverStdoutLog", + "when": "false" + }, + { + "command": "java.open.serverStderrLog", + "when": "false" }, { "command": "java.open.clientLog", - "title": "%java.open.clientLog%", - "category": "Java" + "when": "false" }, { "command": "java.open.logs", diff --git a/package.nls.json b/package.nls.json index 622212e44..5fbd33cd6 100644 --- a/package.nls.json +++ b/package.nls.json @@ -2,8 +2,6 @@ "java.server.mode.switch": "Switch to Standard Mode", "java.projectConfiguration.update": "Update Project", "java.project.import": "Import Java Projects into Workspace", - "java.open.serverLog": "Open Java Language Server Log File", - "java.open.clientLog": "Open Java Extension Log File", "java.open.logs": "Open All Log Files", "java.workspace.compile": "Force Java Compilation", "java.open.formatter.settings": "Open Java Formatter Settings", diff --git a/package.nls.zh.json b/package.nls.zh.json index 90a57d32d..ce6d50ce8 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -2,8 +2,6 @@ "java.server.mode.switch": "切换到标准模式", "java.projectConfiguration.update": "更新项目", "java.project.import": "将 Java 项目导入工作区", - "java.open.serverLog": "打开 Java 语言服务器日志文件", - "java.open.clientLog": "打开 Java 插件日志文件", "java.open.logs": "打开所有日志文件", "java.workspace.compile": "强制编译", "java.open.formatter.settings": "打开 Java 格式设置", diff --git a/src/commands.ts b/src/commands.ts index d295ed8ab..2032443c4 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -84,6 +84,16 @@ export namespace Commands { */ export const OPEN_SERVER_LOG = 'java.open.serverLog'; + /** + * Open Java Language Service Output Log file + */ + export const OPEN_SERVER_STDOUT_LOG = 'java.open.serverStdoutLog'; + + /** + * Open Java Language Server Error Log file + */ + export const OPEN_SERVER_STDERR_LOG = 'java.open.serverStderrLog'; + /** * Open Java client Log file */ diff --git a/src/extension.ts b/src/extension.ts index 3ac697c22..90ed61e0e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -369,6 +369,8 @@ export function activate(context: ExtensionContext): Promise { // Register commands here to make it available even when the language client fails context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(workspacePath, column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(workspacePath, '.out-jdt.ls', column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(workspacePath, '.error-jdt.ls', column))); context.subscriptions.push(commands.registerCommand(Commands.OPEN_CLIENT_LOG, (column: ViewColumn) => openClientLogFile(clientLogFile, column))); @@ -734,6 +736,25 @@ function openServerLogFile(workspacePath, column: ViewColumn = ViewColumn.Active return openLogFile(serverLogFile, 'Could not open Java Language Server log file', column); } +function openRollingServerLogFile(workspacePath, filename, column: ViewColumn = ViewColumn.Active): Thenable { + return new Promise((resolve) => { + const dirname = path.join(workspacePath, '.metadata'); + + // find out the newest one + glob(filename + '-*', { cwd: dirname }, (err, files) => { + if (!err && files.length > 0) { + files.sort(); + + const logFile = path.join(dirname, files[files.length - 1]); + openLogFile(logFile, `Could not open Java Language Server log file ${filename}`, column).then((result) => resolve(result)); + } else { + window.showWarningMessage(`Could not find Java Language Server log file ${filename} in ${dirname}`); + resolve(false); + } + }); + }); +} + function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Active): Thenable { return new Promise((resolve) => { const filename = path.basename(logFile); @@ -765,7 +786,9 @@ function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Acti async function openLogs() { await commands.executeCommand(Commands.OPEN_CLIENT_LOG, ViewColumn.One); - await commands.executeCommand(Commands.OPEN_SERVER_LOG, ViewColumn.Two); + await commands.executeCommand(Commands.OPEN_SERVER_LOG, ViewColumn.One); + await commands.executeCommand(Commands.OPEN_SERVER_STDOUT_LOG, ViewColumn.One); + await commands.executeCommand(Commands.OPEN_SERVER_STDERR_LOG, ViewColumn.One); } function openLogFile(logFile, openingFailureWarning: string, column: ViewColumn = ViewColumn.Active): Thenable { @@ -778,7 +801,7 @@ function openLogFile(logFile, openingFailureWarning: string, column: ViewColumn if (!doc) { return false; } - return window.showTextDocument(doc, column) + return window.showTextDocument(doc, {viewColumn: column, preview: false}) .then(editor => !!editor); }, () => false) .then(didOpen => { diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 45ad2250e..a7164f234 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -16,6 +16,8 @@ suite('Java Language Extension - LightWeight', () => { const JAVA_COMMANDS = [ Commands.EXECUTE_WORKSPACE_COMMAND, Commands.OPEN_SERVER_LOG, + Commands.OPEN_SERVER_STDOUT_LOG, + Commands.OPEN_SERVER_STDERR_LOG, Commands.OPEN_CLIENT_LOG, Commands.OPEN_LOGS, Commands.OPEN_FORMATTER, diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 8d3d741a0..d5f43d6a7 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -55,6 +55,8 @@ suite('Java Language Extension - Standard', () => { Commands.OPEN_LOGS, Commands.OPEN_OUTPUT, Commands.OPEN_SERVER_LOG, + Commands.OPEN_SERVER_STDOUT_LOG, + Commands.OPEN_SERVER_STDERR_LOG, Commands.ORGANIZE_IMPORTS, Commands.OVERRIDE_METHODS_PROMPT, Commands.PROJECT_CONFIGURATION_STATUS, From eefebb5af3cbb1efa27ebc3a779c7fe591494950 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 22 Jun 2022 09:51:08 +0800 Subject: [PATCH 165/708] Support project update selection (#2513) - If no uri is passed into the projectConfigurationUpdate() function, show a quick pick list and let user select which projects to update. - If there is only one project in the workspace, project update request for that project will directly send to server without asking. Signed-off-by: sheche --- src/protocol.ts | 5 ++ src/standardLanguageClient.ts | 96 +++++++++++++++++++++++++++++++---- 2 files changed, 90 insertions(+), 11 deletions(-) diff --git a/src/protocol.ts b/src/protocol.ts index ed7fc092c..f210daaf4 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -116,6 +116,11 @@ export namespace ClassFileContentsRequest { export namespace ProjectConfigurationUpdateRequest { export const type = new NotificationType ('java/projectConfigurationUpdate'); + export const typeV2 = new NotificationType ('java/projectConfigurationsUpdate'); +} + +export interface ProjectConfigurationsUpdateParam { + identifiers: TextDocumentIdentifier[]; } export namespace ActionableNotification { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index d3afc71c1..61e9da778 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,6 +1,6 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position } from "vscode"; +import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position, QuickPickItem } from "vscode"; import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; @@ -585,23 +585,97 @@ function setIncompleteClasspathSeverity(severity: string) { ); } -function projectConfigurationUpdate(languageClient: LanguageClient, uri?: Uri) { - let resource = uri; - if (!(resource instanceof Uri)) { - if (window.activeTextEditor) { - resource = window.activeTextEditor.document.uri; +async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: Uri | Uri[]) { + let resources = []; + if (!uris) { + resources = await askForProjectToUpdate(); + } else if (uris instanceof Uri) { + resources.push(uris); + } else if (Array.isArray(uris)) { + for (const uri of uris) { + if (uri instanceof Uri) { + resources.push(uri); + } } } - if (!resource) { - return window.showWarningMessage('No Java project to update!').then(() => false); - } - if (isJavaConfigFile(resource.path)) { + if (resources.length === 1) { languageClient.sendNotification(ProjectConfigurationUpdateRequest.type, { - uri: resource.toString() + uri: resources[0].toString(), + }); + } else if (resources.length > 1) { + languageClient.sendNotification(ProjectConfigurationUpdateRequest.typeV2, { + identifiers: resources.map(r => { + return { uri: r.toString() }; + }), }); } } +async function askForProjectToUpdate(): Promise { + let uriCandidate: Uri; + if (window.activeTextEditor) { + uriCandidate = window.activeTextEditor.document.uri; + } + + if (uriCandidate && isJavaConfigFile(uriCandidate.fsPath)) { + return [uriCandidate]; + } + + let projectUriStrings: string[]; + try { + projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + } catch (e) { + return uriCandidate ? [uriCandidate] : []; + } + + const projectPicks: QuickPickItem[] = projectUriStrings.map(uriString => { + const projectPath = Uri.parse(uriString).fsPath; + if (path.basename(projectPath) === "jdt.ls-java-project") { + return undefined; + } + + return { + label: path.basename(projectPath), + detail: projectPath, + }; + }).filter(Boolean); + + if (projectPicks.length === 0) { + return []; + } else if (projectPicks.length === 1) { + return [Uri.file(projectPicks[0].detail)]; + } else { + // pre-select an active project based on the uri candidate. + if (uriCandidate) { + const candidatePath = uriCandidate.fsPath; + let belongingIndex = -1; + for (let i = 0; i < projectPicks.length; i++) { + if (candidatePath.startsWith(projectPicks[i].detail)) { + if (belongingIndex < 0 + || projectPicks[i].detail.length > projectPicks[belongingIndex].detail.length) { + belongingIndex = i; + } + } + } + if (belongingIndex >= 0) { + projectPicks[belongingIndex].picked = true; + } + } + + const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { + matchOnDetail: true, + placeHolder: "Please select the project(s) to update.", + ignoreFocusOut: true, + canPickMany: true, + }); + if (choices && choices.length) { + return choices.map(c => Uri.file(c.detail)); + } + } + + return []; +} + function isJavaConfigFile(filePath: string) { const fileName = path.basename(filePath); const regEx = new RegExp(buildFilePatterns.map(r => `(${r})`).join('|'), 'i'); From d0ded5dcbefefa5bfe6ec19b922202ee39772f39 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 22 Jun 2022 17:00:46 +0200 Subject: [PATCH 166/708] Add DCO documentation --- CONTRIBUTING.md | 7 +++++++ DCO | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 DCO diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 69fe5e875..b54978088 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -193,3 +193,10 @@ If you encounter a problem and know it is caused by eclipse.jdt.ls, then please In doubt, you can report issues in the [vscode-java issue tracker](https://github.com/redhat-developer/vscode-java/issues). Try to collect as much informations as you can to describe the issue and help us reproduce the problem. Head over to the [troubleshooting page](https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting#enable-logging) to see how to collect useful logging informations. + +### Certificate of Origin + +By contributing to this project you agree to the Developer Certificate of +Origin (DCO). This document was created by the Linux Kernel community and is a +simple statement that you, as a contributor, have the legal right to make the +contribution. See the [DCO](DCO) file for details. diff --git a/DCO b/DCO new file mode 100644 index 000000000..8201f9921 --- /dev/null +++ b/DCO @@ -0,0 +1,37 @@ +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +1 Letterman Drive +Suite D4700 +San Francisco, CA, 94129 + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. From 5ec9001ba0d41916b910a9517085414d8aa8c552 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Thu, 23 Jun 2022 15:28:46 +0800 Subject: [PATCH 167/708] adopt change of ref-viewlet's publisher (#2517) Signed-off-by: Yan Zhang --- src/typeHierarchy/typeHierarchyTree.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/typeHierarchy/typeHierarchyTree.ts b/src/typeHierarchy/typeHierarchyTree.ts index 5e1e252ee..38bb846d1 100644 --- a/src/typeHierarchy/typeHierarchyTree.ts +++ b/src/typeHierarchy/typeHierarchyTree.ts @@ -23,7 +23,11 @@ export class TypeHierarchyTree { } public async initialize() { - this.api = await vscode.extensions.getExtension('ms-vscode.references-view').activate(); + // It uses a new publisher id in June 2022 Update, check both old/new id for compatibility + // See https://github.com/microsoft/vscode/pull/152213 + const referencesViewExt = vscode.extensions.getExtension('vscode.references-view') + ?? vscode.extensions.getExtension('ms-vscode.references-view'); + this.api = await referencesViewExt?.activate(); this.client = await getActiveLanguageClient(); this.initialized = true; } From b0ac51e0443bd086f3c100035659a924f84f5ca1 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 22 Jun 2022 11:56:53 -0400 Subject: [PATCH 168/708] Fix issues from the merging of the "Open All Log Files" command. - Make "java.open.serverLog" & "java.open.clientLog" visible again - Properly hide the stdout, stderr Signed-off-by: Roland Grunberg --- package.json | 18 ++++++++++++++---- package.nls.json | 6 +++++- package.nls.zh.json | 6 +++++- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2461b4fd2..b2048ae2c 100644 --- a/package.json +++ b/package.json @@ -924,19 +924,21 @@ }, { "command": "java.open.serverLog", - "when": "false" + "title": "%java.open.serverLog%", + "category": "Java" }, { "command": "java.open.serverStdoutLog", - "when": "false" + "title": "%java.open.serverStdoutLog%" }, { "command": "java.open.serverStderrLog", - "when": "false" + "title": "%java.open.serverStderrLog%" }, { "command": "java.open.clientLog", - "when": "false" + "title": "%java.open.clientLog%", + "category": "Java" }, { "command": "java.open.logs", @@ -1086,6 +1088,14 @@ "command": "java.project.import.command", "when": "javaLSReady" }, + { + "command": "java.open.serverStdoutLog", + "when": "false" + }, + { + "command": "java.open.serverStderrLog", + "when": "false" + }, { "command": "java.action.navigateToSuperImplementation", "when": "javaLSReady && editorLangId == java" diff --git a/package.nls.json b/package.nls.json index 5fbd33cd6..398f987a8 100644 --- a/package.nls.json +++ b/package.nls.json @@ -2,6 +2,10 @@ "java.server.mode.switch": "Switch to Standard Mode", "java.projectConfiguration.update": "Update Project", "java.project.import": "Import Java Projects into Workspace", + "java.open.serverLog": "Open Java Language Server Log File", + "java.open.serverStdoutLog": "Open Java Language Server Output Log File", + "java.open.serverStderrLog": "Open Java Language Server Error Log File", + "java.open.clientLog": "Open Java Extension Log File", "java.open.logs": "Open All Log Files", "java.workspace.compile": "Force Java Compilation", "java.open.formatter.settings": "Open Java Formatter Settings", @@ -17,4 +21,4 @@ "java.action.showSupertypeHierarchy": "Show Supertype Hierarchy", "java.action.showSubtypeHierarchy": "Show Subtype Hierarchy", "java.action.changeBaseType": "Base on this Type" -} \ No newline at end of file +} diff --git a/package.nls.zh.json b/package.nls.zh.json index ce6d50ce8..db1b81b08 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -2,6 +2,10 @@ "java.server.mode.switch": "切换到标准模式", "java.projectConfiguration.update": "更新项目", "java.project.import": "将 Java 项目导入工作区", + "java.open.serverLog": "打开 Java 语言服务器日志文件", + "java.open.serverStdoutLog": "打开 Java 语言服务器输出日志文件", + "java.open.serverStderrLog": "打开 Java 语言服务器错误日志文件", + "java.open.clientLog": "打开 Java 插件日志文件", "java.open.logs": "打开所有日志文件", "java.workspace.compile": "强制编译", "java.open.formatter.settings": "打开 Java 格式设置", @@ -17,4 +21,4 @@ "java.action.showSupertypeHierarchy": "显示父类层次结构", "java.action.showSubtypeHierarchy": "显示子类层次结构", "java.action.changeBaseType": "基于此类型" -} \ No newline at end of file +} From 26598c5117cc5b087245ef4c646ea5a3eb8845d3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Sun, 26 Jun 2022 19:37:27 -0400 Subject: [PATCH 169/708] GH Actions job should use Node.js 14. Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 64bc87ee2..36b6d3674 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -14,13 +14,13 @@ jobs: - name: Set Up NodeJS uses: actions/setup-node@v2 with: - node-version: '12.22.1' + node-version: '14' - name: Set Up Java uses: actions/setup-java@v2 with: java-version: '17' distribution: 'adopt' - - run: npm install -g typescript "vsce@<2" + - run: npm install -g typescript "vsce" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz - run: npm install From cf8b8bcce9b4bf1691fa3dd89bcd40db0ca093bd Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Tue, 28 Jun 2022 14:47:21 +0800 Subject: [PATCH 170/708] Auto select field when generating constructors (#2508) Signed-off-by: Shi Chen --- src/protocol.ts | 1 + src/sourceAction.ts | 1 + 2 files changed, 2 insertions(+) diff --git a/src/protocol.ts b/src/protocol.ts index f210daaf4..518ea6078 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -192,6 +192,7 @@ export interface VariableBinding { name: string; type: string; isField: boolean; + isSelected?: boolean; } export interface CheckHashCodeEqualsResponse { diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 2d6558b1b..054315f9e 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -298,6 +298,7 @@ function registerGenerateConstructorsCommand(languageClient: LanguageClient, con return { label: `${field.name}: ${field.type}`, originalField: field, + picked: field.isSelected }; }); const selectedFieldItems = await window.showQuickPick(fieldItems, { From f8666872cc07d0bbf794e7965ef0533e9716bc14 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 29 Jun 2022 10:33:38 +0800 Subject: [PATCH 171/708] Rename 'Update Project' to 'Reload Project' (#2527) Signed-off-by: Sheng Chen --- README.md | 2 +- document/_java.notCoveredExecution.md | 2 +- package.nls.json | 2 +- package.nls.zh.json | 2 +- src/commands.ts | 2 +- src/pom/pomCodeActionProvider.ts | 4 ++-- 6 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 253e68301..f8276bbd1 100644 --- a/README.md +++ b/README.md @@ -91,7 +91,7 @@ Available commands ========================== The following commands are available: - `Switch to Standard Mode`: switches the Java Language Server to `Standard` mode. This command is only available when the Java Language Server is in `LightWeight` mode. -- `Java: Update Project` (`Shift+Alt+U`): is available when the editor is focused on a Maven pom.xml or a Gradle file. It forces project configuration / classpath updates (eg. dependency changes or Java compilation level), according to the project build descriptor. +- `Java: Reload Project` (`Shift+Alt+U`): It forces project configuration / classpath updates (eg. dependency changes or Java compilation level), according to the project build descriptor. - `Java: Import Java Projects into Workspace`: detects and imports all the Java projects into the Java Language Server workspace. - `Java: Open Java Language Server Log File`: opens the Java Language Server log file, useful for troubleshooting problems. - `Java: Open Java Extension Log File`: opens the Java extension log file, useful for troubleshooting problems. diff --git a/document/_java.notCoveredExecution.md b/document/_java.notCoveredExecution.md index bcfd8e5ac..684011c64 100644 --- a/document/_java.notCoveredExecution.md +++ b/document/_java.notCoveredExecution.md @@ -42,7 +42,7 @@ Some Maven projects use 3rd party Maven plugins to generate sources or resources For example, add [a processing instruction in the pom.xml](https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata) like `` to execute it on every project configuration update. -You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Update Project"`. +You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Reload Project"`. ```xml diff --git a/package.nls.json b/package.nls.json index 398f987a8..216d1ade0 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,6 +1,6 @@ { "java.server.mode.switch": "Switch to Standard Mode", - "java.projectConfiguration.update": "Update Project", + "java.projectConfiguration.update": "Reload Project", "java.project.import": "Import Java Projects into Workspace", "java.open.serverLog": "Open Java Language Server Log File", "java.open.serverStdoutLog": "Open Java Language Server Output Log File", diff --git a/package.nls.zh.json b/package.nls.zh.json index db1b81b08..ae237f893 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -1,6 +1,6 @@ { "java.server.mode.switch": "切换到标准模式", - "java.projectConfiguration.update": "更新项目", + "java.projectConfiguration.update": "重新加载项目", "java.project.import": "将 Java 项目导入工作区", "java.open.serverLog": "打开 Java 语言服务器日志文件", "java.open.serverStdoutLog": "打开 Java 语言服务器输出日志文件", diff --git a/src/commands.ts b/src/commands.ts index 2032443c4..b1684626f 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -40,7 +40,7 @@ export namespace Commands { export const MARKDOWN_API_RENDER = 'markdown.api.render'; /** - * Update project configuration + * Reload project */ export const CONFIGURATION_UPDATE = 'java.projectConfiguration.update'; diff --git a/src/pom/pomCodeActionProvider.ts b/src/pom/pomCodeActionProvider.ts index 1ed67893d..d13e0cf98 100644 --- a/src/pom/pomCodeActionProvider.ts +++ b/src/pom/pomCodeActionProvider.ts @@ -26,9 +26,9 @@ export class PomCodeActionProvider implements CodeActionProvider { if (diagnostic.message?.startsWith("Plugin execution not covered by lifecycle configuration")) { const indentation = this.getNewTextIndentation(document, diagnostic); const saveAndUpdateConfigCommand: Command = { - title: "Save and update project configuration", + title: "Save and reload project", command: "_java.projectConfiguration.saveAndUpdate", - arguments: [ document.uri ], + arguments: [document.uri], }; const action1 = new CodeAction("Enable this execution in project configuration phase", CodeActionKind.QuickFix.append("pom")); From 5d1c8725459b928422c1e7792228703e86842d6b Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 29 Jun 2022 15:14:37 +0800 Subject: [PATCH 172/708] Allow rebuild selected projects (#2526) - Add a new extended LSP request: BuildProjectRequest. - The 'isFullBuild' is set to true by default in the request param. Signed-off-by: sheche --- README.md | 1 + package.json | 9 +++ package.nls.json | 1 + package.nls.zh.json | 1 + src/commands.ts | 5 ++ src/protocol.ts | 9 +++ src/standardLanguageClient.ts | 147 +++++++++++++++++++++++++--------- 7 files changed, 134 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index f8276bbd1..c6c848a0c 100644 --- a/README.md +++ b/README.md @@ -97,6 +97,7 @@ The following commands are available: - `Java: Open Java Extension Log File`: opens the Java extension log file, useful for troubleshooting problems. - `Java: Open All Log Files`: opens both the Java Language Server log file and the Java extension log file. - `Java: Force Java Compilation` (`Shift+Alt+B`): manually triggers compilation of the workspace. +- `Java: Rebuild Projects`: manually triggers a full build of the selected projects. - `Java: Open Java Formatter Settings`: opens the Eclipse formatter settings. Creates a new settings file if none exists. - `Java: Clean Java Language Server Workspace`: cleans the Java language server workspace. - `Java: Attach Source`: attaches a jar/zip source to the currently opened binary class file. This command is only available in the editor context menu. diff --git a/package.json b/package.json index b2048ae2c..b81a1dfcb 100644 --- a/package.json +++ b/package.json @@ -950,6 +950,11 @@ "title": "%java.workspace.compile%", "category": "Java" }, + { + "command": "java.project.build", + "title": "%java.project.build%", + "category": "Java" + }, { "command": "java.open.formatter.settings", "title": "%java.open.formatter.settings%", @@ -1104,6 +1109,10 @@ "command": "java.workspace.compile", "when": "javaLSReady" }, + { + "command": "java.project.build", + "when": "javaLSReady" + }, { "command": "java.project.listSourcePaths.command", "when": "javaLSReady" diff --git a/package.nls.json b/package.nls.json index 216d1ade0..e0c71b3b6 100644 --- a/package.nls.json +++ b/package.nls.json @@ -8,6 +8,7 @@ "java.open.clientLog": "Open Java Extension Log File", "java.open.logs": "Open All Log Files", "java.workspace.compile": "Force Java Compilation", + "java.project.build": "Rebuild Projects", "java.open.formatter.settings": "Open Java Formatter Settings", "java.clean.workspace": "Clean Java Language Server Workspace", "java.project.updateSourceAttachment": "Attach Source", diff --git a/package.nls.zh.json b/package.nls.zh.json index ae237f893..7864cf5e9 100644 --- a/package.nls.zh.json +++ b/package.nls.zh.json @@ -8,6 +8,7 @@ "java.open.clientLog": "打开 Java 插件日志文件", "java.open.logs": "打开所有日志文件", "java.workspace.compile": "强制编译", + "java.project.build": "重新构建项目", "java.open.formatter.settings": "打开 Java 格式设置", "java.clean.workspace": "清理 Java 语言服务器工作区", "java.project.updateSourceAttachment": "附加源代码", diff --git a/src/commands.ts b/src/commands.ts index b1684626f..ea5914d22 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -79,6 +79,11 @@ export namespace Commands { */ export const COMPILE_WORKSPACE = 'java.workspace.compile'; + /** + * Execute build for projects + */ + export const BUILD_PROJECT = 'java.project.build'; + /** * Open Java Language Server Log file */ diff --git a/src/protocol.ts b/src/protocol.ts index 518ea6078..e377ef984 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -135,6 +135,15 @@ export namespace CompileWorkspaceRequest { export const type = new RequestType('java/buildWorkspace'); } +export namespace BuildProjectRequest { + export const type = new RequestType('java/buildProjects'); +} + +export interface BuildProjectParams { + identifiers: TextDocumentIdentifier[]; + isFullBuild: boolean; +} + export namespace ExecuteClientCommandRequest { export const type = new RequestType('workspace/executeClientCommand'); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 61e9da778..aaa1fe4e8 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,13 +1,13 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position, QuickPickItem } from "vscode"; +import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position, QuickPickItem, QuickPickItemKind } from "vscode"; import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; -import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo } from "./protocol"; +import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo, BuildProjectRequest, BuildProjectParams } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -395,6 +395,62 @@ export class StandardLanguageClient { typeHierarchyTree.changeBaseItem(item); })); + context.subscriptions.push(commands.registerCommand(Commands.BUILD_PROJECT, async (uris: Uri[] | Uri, isFullBuild: boolean, token: CancellationToken) => { + let resources: Uri[] = []; + if (uris instanceof Uri) { + resources.push(uris); + } else if (Array.isArray(uris)) { + for (const uri of uris) { + if (uri instanceof Uri) { + resources.push(uri); + } + } + } + + if (!resources.length) { + resources = await askForProjects( + window.activeTextEditor?.document.uri, + "Please select the project(s) to rebuild.", + ); + if (!resources?.length) { + return; + } + } + + const params: BuildProjectParams = { + identifiers: resources.map((u => { + return { uri: u.toString() }; + })), + // we can consider expose 'isFullBuild' according to users' feedback, + // currently set it to true by default. + isFullBuild: isFullBuild === undefined ? true : isFullBuild, + }; + + return window.withProgress({ location: ProgressLocation.Window }, async p => { + p.report({ message: 'Rebuilding projects...' }); + return new Promise(async (resolve, reject) => { + const start = new Date().getTime(); + + let res: CompileWorkspaceStatus; + try { + res = token ? await this.languageClient.sendRequest(BuildProjectRequest.type, params, token) : + await this.languageClient.sendRequest(BuildProjectRequest.type, params); + } catch (error) { + if (error && error.code === -32800) { // Check if the request is cancelled. + res = CompileWorkspaceStatus.CANCELLED; + } + reject(error); + } + + const elapsed = new Date().getTime() - start; + const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; + setTimeout(() => { // set a timeout so user would still see the message when build time is short + resolve(res); + }, humanVisibleDelay); + }); + }); + })); + context.subscriptions.push(commands.registerCommand(Commands.COMPILE_WORKSPACE, (isFullCompile: boolean, token?: CancellationToken) => { return window.withProgress({ location: ProgressLocation.Window }, async p => { if (typeof isFullCompile !== 'boolean') { @@ -588,7 +644,13 @@ function setIncompleteClasspathSeverity(severity: string) { async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: Uri | Uri[]) { let resources = []; if (!uris) { - resources = await askForProjectToUpdate(); + const activeFileUri: Uri | undefined = window.activeTextEditor?.document.uri; + + if (activeFileUri && isJavaConfigFile(activeFileUri.fsPath)) { + resources = [activeFileUri]; + } else { + resources = await askForProjects(activeFileUri, "Please select the project(s) to update."); + } } else if (uris instanceof Uri) { resources.push(uris); } else if (Array.isArray(uris)) { @@ -611,21 +673,44 @@ async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: } } -async function askForProjectToUpdate(): Promise { - let uriCandidate: Uri; - if (window.activeTextEditor) { - uriCandidate = window.activeTextEditor.document.uri; - } +/** + * Ask user to select projects and return the selected projects' uris. + * @param activeFileUri the uri of the active file. + * @param placeHolder message to be shown in quick pick. + */ +async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string): Promise { + const projectPicks: QuickPickItem[] = await generateProjectPicks(activeFileUri); + if (!projectPicks?.length) { + return []; + } else if (projectPicks.length === 1) { + return [Uri.file(projectPicks[0].detail)]; + } else { + const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { + matchOnDetail: true, + placeHolder: placeHolder, + ignoreFocusOut: true, + canPickMany: true, + }); - if (uriCandidate && isJavaConfigFile(uriCandidate.fsPath)) { - return [uriCandidate]; + if (choices?.length) { + return choices.map(c => Uri.file(c.detail)); + } } + return []; +} + +/** + * Generate the quick picks for projects selection. An `undefined` value will be return if + * it's failed to generate picks. + * @param activeFileUri the uri of the active document. + */ +async function generateProjectPicks(activeFileUri: Uri | undefined): Promise { let projectUriStrings: string[]; try { projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); } catch (e) { - return uriCandidate ? [uriCandidate] : []; + return undefined; } const projectPicks: QuickPickItem[] = projectUriStrings.map(uriString => { @@ -640,40 +725,24 @@ async function askForProjectToUpdate(): Promise { }; }).filter(Boolean); - if (projectPicks.length === 0) { - return []; - } else if (projectPicks.length === 1) { - return [Uri.file(projectPicks[0].detail)]; - } else { - // pre-select an active project based on the uri candidate. - if (uriCandidate) { - const candidatePath = uriCandidate.fsPath; - let belongingIndex = -1; - for (let i = 0; i < projectPicks.length; i++) { - if (candidatePath.startsWith(projectPicks[i].detail)) { - if (belongingIndex < 0 - || projectPicks[i].detail.length > projectPicks[belongingIndex].detail.length) { - belongingIndex = i; - } + // pre-select an active project based on the uri candidate. + if (activeFileUri?.scheme === "file") { + const candidatePath = activeFileUri.fsPath; + let belongingIndex = -1; + for (let i = 0; i < projectPicks.length; i++) { + if (candidatePath.startsWith(projectPicks[i].detail)) { + if (belongingIndex < 0 + || projectPicks[i].detail.length > projectPicks[belongingIndex].detail.length) { + belongingIndex = i; } } - if (belongingIndex >= 0) { - projectPicks[belongingIndex].picked = true; - } } - - const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { - matchOnDetail: true, - placeHolder: "Please select the project(s) to update.", - ignoreFocusOut: true, - canPickMany: true, - }); - if (choices && choices.length) { - return choices.map(c => Uri.file(c.detail)); + if (belongingIndex >= 0) { + projectPicks[belongingIndex].picked = true; } } - return []; + return projectPicks; } function isJavaConfigFile(filePath: string) { From 4810edd542cecb654ac1152985b4a9da0f921c08 Mon Sep 17 00:00:00 2001 From: yuhaoxiao <752087942@qq.com> Date: Thu, 30 Jun 2022 03:21:15 +0800 Subject: [PATCH 173/708] Lombok support v1 (#2519) - Add 'java.jdt.ls.lombokSupport.enabled' setting - It can automatically detect whether the project has imported the lombok by checking all classpath - It can show the current version of the lombok in the language status bar - It can dynamically detect the version change of the lombok Signed-off-by: Yuhao Xiao --- README.md | 3 + package-lock.json | 163 +++++++++++----- package.json | 9 +- src/commands.ts | 2 + src/extension.ts | 2 +- src/javaServerStarter.ts | 5 + src/lombokSupport.ts | 324 ++++++++++++++++++++++++++++++++ src/runtimeStatusBarProvider.ts | 20 ++ src/settings.ts | 21 ++- src/standardLanguageClient.ts | 5 + 10 files changed, 506 insertions(+), 48 deletions(-) create mode 100644 src/lombokSupport.ts diff --git a/README.md b/README.md index c6c848a0c..46e803a3f 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,9 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. +New in 1.8.0 + * `java.jdt.ls.lombokSupport.enabled`: Whether to load lombok processors from project classpath. Defaults to `true`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index c937c120e..226c1e8df 100644 --- a/package-lock.json +++ b/package-lock.json @@ -457,7 +457,7 @@ "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true }, "array-each": { @@ -529,7 +529,7 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, "array-unique": { @@ -724,7 +724,7 @@ "beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", "dev": true }, "binary-extensions": { @@ -1275,7 +1275,7 @@ "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", "dev": true }, "debug": { @@ -1495,10 +1495,43 @@ "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", "dev": true }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "requires": { "readable-stream": "~1.1.9" @@ -1507,13 +1540,13 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -1626,6 +1659,11 @@ } } }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, "env-variable": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", @@ -2593,9 +2631,9 @@ } }, "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true } } @@ -2615,7 +2653,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "vinyl": { @@ -2683,7 +2721,7 @@ "has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", "dev": true, "requires": { "sparkles": "^1.0.0" @@ -2748,6 +2786,17 @@ "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, + "htmlparser2": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", + "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.4.4", + "entities": "^2.0.0" + } + }, "http-proxy-agent": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", @@ -3324,43 +3373,43 @@ "lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", "dev": true }, "lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", "dev": true }, "lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", "dev": true }, "lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", "dev": true }, "lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", "dev": true }, "lodash._reescape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", "dev": true }, "lodash._reevaluate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", "dev": true }, "lodash._reinterpolate": { @@ -3372,13 +3421,13 @@ "lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", "dev": true }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, "requires": { "lodash._root": "^3.0.0" @@ -3393,19 +3442,19 @@ "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "dev": true }, "lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", "dev": true }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, "requires": { "lodash._getnative": "^3.0.0", @@ -3416,7 +3465,7 @@ "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", "dev": true }, "lodash.template": { @@ -3443,7 +3492,7 @@ "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, "requires": { "lodash._reinterpolate": "^3.0.0", @@ -3756,6 +3805,12 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -3930,18 +3985,26 @@ }, "dependencies": { "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } }, @@ -3969,7 +4032,7 @@ "multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", "dev": true, "requires": { "duplexer2": "0.0.2" @@ -6364,16 +6427,26 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "^5.0.1" - } - }, - "yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + }, + "dependencies": { + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "dependencies": { + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + } + } + } } }, "yargs-unparser": { diff --git a/package.json b/package.json index b81a1dfcb..bd73bba35 100644 --- a/package.json +++ b/package.json @@ -898,6 +898,12 @@ "default": "ignore", "markdownDescription": "Project encoding settings", "scope": "window" + }, + "java.jdt.ls.lombokSupport.enabled": { + "type": "boolean", + "default": true, + "description": "Whether to load lombok processors from project classpath", + "scope": "window" } } }, @@ -1237,6 +1243,7 @@ "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", - "winston-daily-rotate-file": "^3.10.0" + "winston-daily-rotate-file": "^3.10.0", + "htmlparser2": "6.0.1" } } diff --git a/src/commands.ts b/src/commands.ts index ea5914d22..1dff4ce9d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -275,4 +275,6 @@ export namespace Commands { export const GET_WORKSPACE_PATH = '_java.workspace.path'; export const UPGRADE_GRADLE_WRAPPER = '_java.gradle.upgradeWrapper'; + + export const LOMBOK_CONFIGURE = "java.lombokConfigure"; } diff --git a/src/extension.ts b/src/extension.ts index 90ed61e0e..706c37f46 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -382,7 +382,7 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); - context.subscriptions.push(onConfigurationChange(workspacePath)); + context.subscriptions.push(onConfigurationChange(workspacePath, context)); /** * Command to switch the server mode. Currently it only supports switch from lightweight to standard. diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 58f430e3a..73c91965a 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -10,6 +10,7 @@ import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag, import { logger } from './log'; import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils'; import { workspace, ExtensionContext, window } from 'vscode'; +import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; declare var v8debug; const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); @@ -113,6 +114,10 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp parseVMargs(params, vmargs); + if (isLombokSupportEnabled()) { + addLombokParam(context, params); + } + if (!isSyntaxServer) { if (vmargs.indexOf(HEAP_DUMP) < 0) { params.push(HEAP_DUMP); diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts new file mode 100644 index 000000000..b03a04d40 --- /dev/null +++ b/src/lombokSupport.ts @@ -0,0 +1,324 @@ +'use strict'; + +import * as fse from "fs-extra"; +import * as path from "path"; +import * as vscode from "vscode"; +import { ExtensionContext, window, commands, Uri, Position, Location, Selection, env } from "vscode"; +import { Commands } from "./commands"; +import { apiManager } from "./apiManager"; +import { supportsLanguageStatus } from "./languageStatusItemFactory"; +import htmlparser2 = require("htmlparser2"); + +export const JAVA_LOMBOK_PATH = "java.lombokPath"; + +const languageServerDocumentSelector = [ + { scheme: 'file', language: 'java' }, + { scheme: 'jdt', language: 'java' }, + { scheme: 'untitled', language: 'java' }, + { pattern: '**/pom.xml' }, + { pattern: '**/{build,settings}.gradle'}, + { pattern: '**/{build,settings}.gradle.kts'} +]; + +let activeLombokPath: string = undefined; +let isLombokCommandInitialized: boolean = false; + +export function isLombokSupportEnabled(): boolean { + return vscode.workspace.getConfiguration().get("java.jdt.ls.lombokSupport.enabled"); +} + +export function isLombokImported(context: ExtensionContext): boolean { + return context.workspaceState.get(JAVA_LOMBOK_PATH)!==undefined; +} + +export function updateActiveLombokPath(path: string) { + activeLombokPath = path; +} + +export function isLombokActive(context: ExtensionContext): boolean { + return activeLombokPath!==undefined; +} + +export function cleanupLombokCache(context: ExtensionContext): boolean { + const result = isLombokImported(context); + context.workspaceState.update(JAVA_LOMBOK_PATH, undefined); + return result; +} + +export function getLombokVersion(context: ExtensionContext): string { + const reg = /lombok-.*\.jar/; + const lombokVersion = reg.exec(activeLombokPath)[0].split('.jar')[0]; + return lombokVersion; +} + +export function addLombokParam(context: ExtensionContext, params: string[]) { + if (isLombokImported(context)) { + // Exclude user setting lombok agent parameter + const reg = /-javaagent:.*[\\|/]lombok.*\.jar/; + const deleteIndex = []; + for (let i = 0; i=0; i--) { + params.splice(deleteIndex[i], 1); + } + // add -javaagent arg to support lombok + const lombokAgentParam = '-javaagent:' + context.workspaceState.get(JAVA_LOMBOK_PATH); + params.push(lombokAgentParam); + updateActiveLombokPath(context.workspaceState.get(JAVA_LOMBOK_PATH)); + } +} + +export async function checkLombokDependency(context: ExtensionContext) { + if (!isLombokSupportEnabled()) { + return; + } + const reg = /lombok-.*\.jar/; + let needReload = false; + let versionChange = false; + let currentLombokVersion = ""; + let previousLombokVersion = ""; + let currentLombokClasspath = ""; + const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + for (const projectUri of projectUris) { + const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'runtime'}); + for (const classpath of classpathResult.classpaths) { + if (reg.test(classpath)) { + currentLombokClasspath = classpath; + if (isLombokImported(context)) { + currentLombokVersion = reg.exec(classpath)[0]; + previousLombokVersion = reg.exec(context.workspaceState.get(JAVA_LOMBOK_PATH))[0]; + if (currentLombokVersion!==previousLombokVersion) { + needReload = true; + versionChange = true; + context.workspaceState.update(JAVA_LOMBOK_PATH, classpath); + } + } + else { + needReload = true; + context.workspaceState.update(JAVA_LOMBOK_PATH, currentLombokClasspath); + } + break; + } + } + if (needReload) { + break; + } + } + if (needReload) { + if (versionChange) { + const msg = `Lombok version changed from ${previousLombokVersion.split('.jar')[0].split('-')[1]} to ${currentLombokVersion.split('.jar')[0].split('-')[1]} \ + . Do you want to reload the window to load the new lombok version?`; + const action = 'Reload Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showInformationMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); + } + else { + const msg = `Lombok is detected in your project, please reload the window to enable lombok support.`; + const action = 'Reload Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showInformationMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); + } + } +} + +async function getParentBuildFilePath(buildFilePath: string, relativePath: string) { + const parentBuildFilePath = path.join(path.dirname(buildFilePath), relativePath, path.basename(buildFilePath)); + if (await fse.pathExists(parentBuildFilePath)) { + return parentBuildFilePath; + } + return undefined; +} + +export function registerLombokConfigureCommand(context: ExtensionContext) { + if (isLombokCommandInitialized) { + return; + } + context.subscriptions.push(commands.registerCommand(Commands.LOMBOK_CONFIGURE, async (buildFilePath: string) => { + if (isMavenProject(buildFilePath)) { + let pos = 0; + while (true) { + const document = await vscode.workspace.openTextDocument(Uri.file(buildFilePath)); + const fullText = document.getText(); + let tagList: [string, number][] = []; + let hasParent: boolean = false; + let getRelativePath: boolean = false; + let relativePath: string = '..'; + const parser = new htmlparser2.Parser({ + onopentag(name, attributes) { + if (name==="dependency"||tagList.length>0) { + tagList.push([name, parser.startIndex]); + } + if (name==="parent") { + hasParent = true; + } + if (hasParent&&name==="relativePath") { + getRelativePath = true; + } + }, + ontext(text) { + if (tagList.length) { + tagList.push([text, parser.startIndex]); + } + if (getRelativePath) { + relativePath = text; + } + }, + onclosetag(name) { + if (name==="dependency") { + tagList.push([name, parser.startIndex]); + let lombokIndex = -1; + let versionIndex = -1; + for (let i = 0; i=0) { + pos = lombokIndex; + if (versionIndex>=0) { + pos = versionIndex; + parser.end(); + } + } + tagList = []; + } + if (getRelativePath&&name==="relativePath") { + getRelativePath = false; + } + }, + }); + parser.write(fullText); + parser.end(); + if (pos>0) { + break; + } + if (hasParent) { + buildFilePath = await getParentBuildFilePath(buildFilePath, relativePath); + if (buildFilePath===undefined) { + break; + } + } + else { + break; + } + } + if (buildFilePath) { + await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(buildFilePath)); + if (pos>0) { + gotoLombokLocation(pos, buildFilePath); + } + } + } + else if (isGradleProject(buildFilePath)) { + while (true) { + const document = await vscode.workspace.openTextDocument(Uri.file(buildFilePath)); + const fullText = document.getText(); + const deleteCommentReg = /\/\/.*|(\/\*[\s\S]*?\*\/)/g; + const content = fullText.replace(deleteCommentReg, (match) => { + let newString = ''; + for (const letter of match) { + newString += '@'; + } + return newString; + }); + const lombokReg = /org.projectlombok/; + const result = lombokReg.exec(content); + if (result) { + const pos = result.index; + await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(buildFilePath)); + gotoLombokLocation(pos, buildFilePath); + break; + } + else { + const currentBuildFilePath = buildFilePath; + buildFilePath = await getParentBuildFilePath(buildFilePath, ".."); + if (buildFilePath===undefined) { + await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(currentBuildFilePath)); + break; + } + } + } + } + })); + isLombokCommandInitialized = true; +} + +export namespace LombokVersionItemFactory { + export function create(text: string, buildFilePath: string): any { + if (supportsLanguageStatus()) { + const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Lombok Version"; + item.text = text; + if (buildFilePath) { + item.command = getLombokChangeCommand(buildFilePath); + } + return item; + } + return undefined; + } + + export function update(item: any, text: string, buildFilePath: string): void { + item.text = text; + if (buildFilePath) { + item.command = getLombokChangeCommand(buildFilePath); + } + } + + function getLombokChangeCommand(buildFilePath: string): vscode.Command { + return { + title: `Configure Version`, + command: Commands.LOMBOK_CONFIGURE, + arguments: [buildFilePath], + tooltip: `Configure Lombok Version` + }; + } +} + +function gotoLombokLocation(position: number, buildFilePath: string): void { + const newPosition = window.activeTextEditor.document.positionAt(position); + const newSelection = new Selection(newPosition, newPosition); + window.activeTextEditor.selection = newSelection; + const newLocation = new Location(Uri.file(buildFilePath), newPosition); + commands.executeCommand( + Commands.GOTO_LOCATION, + window.activeTextEditor.document.uri, + window.activeTextEditor.selection.active, + [newLocation], + 'goto' + ); +} + +function isMavenProject(buildFilePath: string): boolean { + const buildFileNames = ["pom.xml"]; + for (const buildFileName of buildFileNames) { + if (buildFilePath.indexOf(buildFileName)>=0) { + return true; + } + } + return false; +} + +function isGradleProject(buildFilePath: string): boolean { + const buildFileNames = ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]; + for (const buildFileName of buildFileNames) { + if (buildFilePath.indexOf(buildFileName)>=0) { + return true; + } + } + return false; +} diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index 2a287acae..882fec3a6 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -11,11 +11,13 @@ import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; import { getJavaConfiguration } from "./utils"; import { hasBuildToolConflicts } from "./extension"; +import { registerLombokConfigureCommand, LombokVersionItemFactory, getLombokVersion, isLombokActive } from "./lombokSupport"; class RuntimeStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; private runtimeStatusItem: any; private buildFileStatusItem: any; + private lombokVersionItem: any; private javaProjects: Map; private fileProjectMapping: Map; private storagePath: string | undefined; @@ -96,10 +98,16 @@ class RuntimeStatusBarProvider implements Disposable { this.buildFileStatusItem = undefined; } + private hideLombokVersionItem(): void { + this.lombokVersionItem?.dispose(); + this.lombokVersionItem = undefined; + } + public dispose(): void { this.statusBarItem?.dispose(); this.runtimeStatusItem?.dispose(); this.buildFileStatusItem?.dispose(); + this.lombokVersionItem?.dispose(); for (const disposable of this.disposables) { disposable.dispose(); } @@ -166,12 +174,17 @@ class RuntimeStatusBarProvider implements Disposable { return; } + if (isLombokActive(context)) { + registerLombokConfigureCommand(context); + } + const uri: Uri = textEditor.document.uri; const projectPath: string = this.findOwnerProject(uri); if (!projectPath) { if (supportsLanguageStatus()) { this.hideRuntimeStatusItem(); this.hideBuildFileStatusItem(); + this.hideLombokVersionItem(); } else { this.statusBarItem?.hide(); } @@ -183,6 +196,7 @@ class RuntimeStatusBarProvider implements Disposable { if (supportsLanguageStatus()) { this.hideRuntimeStatusItem(); this.hideBuildFileStatusItem(); + this.hideLombokVersionItem(); } else { this.statusBarItem?.hide(); } @@ -197,11 +211,17 @@ class RuntimeStatusBarProvider implements Disposable { if (buildFilePath) { this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath); } + if (isLombokActive(context)) { + this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion(context), buildFilePath); + } } else { RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath); if (buildFilePath) { BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath); } + if (isLombokActive(context)) { + LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion(context), buildFilePath); + } } } else { this.statusBarItem.text = text; diff --git a/src/settings.ts b/src/settings.ts index 05c95ac36..717a1bf7f 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -6,6 +6,8 @@ import { window, Uri, workspace, WorkspaceConfiguration, commands, Configuration import { Commands } from './commands'; import { cleanWorkspaceFileName } from './extension'; import { ensureExists, getJavaConfiguration } from './utils'; +import { checkLombokDependency, cleanupLombokCache } from './lombokSupport'; +import { CodeLensResolveRequest } from 'vscode-languageclient'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -26,7 +28,7 @@ export const ORGANIZE_IMPORTS_ON_PASTE = 'actionsOnPaste.organizeImports'; // ja let oldConfig: WorkspaceConfiguration = getJavaConfiguration(); const gradleWrapperPromptDialogs = []; -export function onConfigurationChange(workspacePath: string) { +export function onConfigurationChange(workspacePath: string, context: ExtensionContext) { return workspace.onDidChangeConfiguration(params => { if (!params.affectsConfiguration('java')) { return; @@ -53,6 +55,23 @@ export function onConfigurationChange(workspacePath: string) { } }); } + if (hasConfigKeyChanged('jdt.ls.lombokSupport.enabled', oldConfig, newConfig)) { + if (newConfig.get("jdt.ls.lombokSupport.enabled")) { + checkLombokDependency(context); + } + else { + if (cleanupLombokCache(context)) { + const msg = `Lombok support is disabled, please restart ${env.appName}.`; + const action = 'Restart Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); + } + } + } // update old config oldConfig = newConfig; }); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index aaa1fe4e8..cc8345862 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -36,6 +36,7 @@ import { findRuntimes, IJavaRuntime } from "jdk-utils"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { JavaInlayHintsProvider } from "./inlayHintsProvider"; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; +import { checkLombokDependency } from "./lombokSupport"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -114,6 +115,10 @@ export class StandardLanguageClient { if (!hasImported) { showImportFinishNotification(context); } + checkLombokDependency(context); + apiManager.getApiInstance().onDidClasspathUpdate((e: Uri) => { + checkLombokDependency(context); + }); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); break; From a0ac341bd7440b054a790ad36cd1aa24b8625403 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 28 Jun 2022 16:32:36 -0400 Subject: [PATCH 174/708] Add Changelog for 1.8.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee228f10b..8382bec62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,30 @@ # Change Log +## 1.8.0 (June 30th, 2022) + * enhancement - Improve the Lombok support. See [#2519](https://github.com/redhat-developer/vscode-java/pull/2519). + * enhancement - Show `Add javadoc for` in quick assists. See [JLS#2133](https://github.com/eclipse/eclipse.jdt.ls/pull/2133). + * enhancement - Show `Change modifiers to final` in quick assists. See [JLS#2134](https://github.com/eclipse/eclipse.jdt.ls/pull/2134). + * enhancement - Support project reload selection. See [#2513](https://github.com/redhat-developer/vscode-java/pull/2513). + * enhancement - Auto-select field when generating constructors. See [#2125](https://github.com/redhat-developer/vscode-java/pull/2508). + * enhancement - Allow to build selected projects. See [#2526](https://github.com/redhat-developer/vscode-java/pull/2526). + * enhancement - Support multiple selections for generate accessors. See [JLS#2136](https://github.com/eclipse/eclipse.jdt.ls/pull/2136). + * bug fix - Fix NPE when triggering signature help in class file. See [JLS#2102](https://github.com/eclipse/eclipse.jdt.ls/issues/2102). + * bug fix - Support for renaming record attributes. See [#2433](https://github.com/redhat-developer/vscode-java/issues/2433). + * bug fix - Add logback tracing to JDT-LS. See [JLS#2108](https://github.com/eclipse/eclipse.jdt.ls/issues/2108). + * bug fix - `Open All Log Files` should also include the standard output/error log files. See [#2367](https://github.com/redhat-developer/vscode-java/issues/2367). + * bug fix - Verify that `java.jdt.ls.java.home` meets minimum JRE requirement. See [#2512](https://github.com/redhat-developer/vscode-java/pull/2512). + * bug fix - Avoid repeatedly setting busy and ready for language server status. See [#2494](https://github.com/redhat-developer/vscode-java/pull/2494). + * bug fix - Fix ParentProcessWatcher on macOS. See [#2488](https://github.com/redhat-developer/vscode-java/issues/2488). + * bug fix - Change the order for configuration updating options. See [JLS#2135](https://github.com/eclipse/eclipse.jdt.ls/pull/2135). + * bug fix - Show Type Hierarchy breaks in vscode-insiders. See [#2524](https://github.com/redhat-developer/vscode-java/issues/2524). + * bug fix - TypeError: Cannot read properties of undefined (reading 'stop'). See [#2503](https://github.com/redhat-developer/vscode-java/issues/2503). + * build - Move to Java 17. See [#2495](https://github.com/redhat-developer/vscode-java/pull/2495). + * debt - GitHub Actions job should use Node.js 14. See [#2532](https://github.com/redhat-developer/vscode-java/pull/2532). + * other - Adjust the order of code actions. See [JLS#2109](https://github.com/eclipse/eclipse.jdt.ls/pull/2109). + * other - Add DCO documentation. See [#2521](https://github.com/redhat-developer/vscode-java/pull/2521). + * other - Allow to clean workspace without pop-up notification. See [#2514](https://github.com/redhat-developer/vscode-java/pull/2514). + + ## 1.7.0 (June 1st, 2022) * enhancment - Support separate "Generate Getters" and "Generate Setters". See [#2362](https://github.com/redhat-developer/vscode-java/issues/2362). * enhancement - Show field type when generating accessors. See [#2459](https://github.com/redhat-developer/vscode-java/pull/2459). From 43bb914fcd67f48bba851554a39ae7b267ad9cde Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Jun 2022 19:46:20 -0400 Subject: [PATCH 175/708] Upversion to 1.9.0 Signed-off-by: Roland Grunberg --- README.md | 12 +++++------- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 46e803a3f..650041afa 100644 --- a/README.md +++ b/README.md @@ -112,6 +112,7 @@ Supported VS Code settings The following settings are supported: * `java.home` : **Deprecated, please use 'java.jdt.ls.java.home' instead.** Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. +* `java.jdt.ls.lombokSupport.enabled`: Whether to load lombok processors from project classpath. Defaults to `true`. * `java.jdt.ls.vmargs` : Extra VM arguments used to launch the Java Language Server. Requires VS Code restart. * `java.errors.incompleteClasspath.severity` : Specifies the severity of the message when the classpath is incomplete for a Java file. Supported values are `ignore`, `info`, `warning`, `error`. * `java.trace.server` : Traces the communication between VS Code and the Java language server. @@ -197,13 +198,10 @@ The following settings are supported: - `lastMember`: Insert the generated code as the last member of the target type. * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. - * `java.quickfix.showAt` : Show quickfixes at the problem or line level. - * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. - * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. - * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. - -New in 1.8.0 - * `java.jdt.ls.lombokSupport.enabled`: Whether to load lombok processors from project classpath. Defaults to `true`. +* `java.quickfix.showAt` : Show quickfixes at the problem or line level. +* `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. +* `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. +* `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. Semantic Highlighting =============== diff --git a/package-lock.json b/package-lock.json index 226c1e8df..ec1c05bbe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.8.0", + "version": "1.9.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index bd73bba35..9904dd00f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.8.0", + "version": "1.9.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 86c572da0751dc4527cd1f052f4a1cb5d45d4e68 Mon Sep 17 00:00:00 2001 From: Mathieu Fortin Date: Tue, 5 Jul 2022 23:54:12 -0400 Subject: [PATCH 176/708] Fixed lombok dependency regex (#2542) Signed-off-by: Mathieu Fortin --- src/lombokSupport.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index b03a04d40..1e1115bdb 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -20,6 +20,8 @@ const languageServerDocumentSelector = [ { pattern: '**/{build,settings}.gradle.kts'} ]; +const lombokJarRegex = /lombok-\d+.*\.jar/; + let activeLombokPath: string = undefined; let isLombokCommandInitialized: boolean = false; @@ -46,8 +48,7 @@ export function cleanupLombokCache(context: ExtensionContext): boolean { } export function getLombokVersion(context: ExtensionContext): string { - const reg = /lombok-.*\.jar/; - const lombokVersion = reg.exec(activeLombokPath)[0].split('.jar')[0]; + const lombokVersion = lombokJarRegex.exec(activeLombokPath)[0].split('.jar')[0]; return lombokVersion; } @@ -75,7 +76,6 @@ export async function checkLombokDependency(context: ExtensionContext) { if (!isLombokSupportEnabled()) { return; } - const reg = /lombok-.*\.jar/; let needReload = false; let versionChange = false; let currentLombokVersion = ""; @@ -85,11 +85,11 @@ export async function checkLombokDependency(context: ExtensionContext) { for (const projectUri of projectUris) { const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'runtime'}); for (const classpath of classpathResult.classpaths) { - if (reg.test(classpath)) { + if (lombokJarRegex.test(classpath)) { currentLombokClasspath = classpath; if (isLombokImported(context)) { - currentLombokVersion = reg.exec(classpath)[0]; - previousLombokVersion = reg.exec(context.workspaceState.get(JAVA_LOMBOK_PATH))[0]; + currentLombokVersion = lombokJarRegex.exec(classpath)[0]; + previousLombokVersion = lombokJarRegex.exec(context.workspaceState.get(JAVA_LOMBOK_PATH))[0]; if (currentLombokVersion!==previousLombokVersion) { needReload = true; versionChange = true; From 915595c3a1a1c54afcaed35682b70b4e8f0ad8b1 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Wed, 6 Jul 2022 16:17:12 +0800 Subject: [PATCH 177/708] stop calling logFailedRequest which doesn't exist Signed-off-by: Yan Zhang --- src/extension.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 706c37f46..8d8b17884 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -264,7 +264,7 @@ export function activate(context: ExtensionContext): Promise { // https://github.com/redhat-developer/vscode-java/issues/2130 // include all diagnostics for the current line in the CodeActionContext params for the performance reason provideCodeActions: (document, range, context, token, next) => { - const client: any = standardClient.getClient(); + const client: LanguageClient = standardClient.getClient(); const params: CodeActionParams = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), range: client.code2ProtocolConverter.asRange(range), @@ -307,8 +307,7 @@ export function activate(context: ExtensionContext): Promise { } return result; }, (error) => { - client.logFailedRequest(CodeActionRequest.type, error); - return Promise.resolve([]); + return client.handleFailedRequest(CodeActionRequest.type, token, error, []); }); } }, From fb12b59351bd7b0e46c7b74fb43aec205005d8ea Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 6 Jul 2022 14:57:55 -0400 Subject: [PATCH 178/708] Do not warn about missing JDT-LS stdout/stderr log files. - Fixes #2535 Signed-off-by: Roland Grunberg --- src/extension.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 8d8b17884..41ec459d3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -747,7 +747,6 @@ function openRollingServerLogFile(workspacePath, filename, column: ViewColumn = const logFile = path.join(dirname, files[files.length - 1]); openLogFile(logFile, `Could not open Java Language Server log file ${filename}`, column).then((result) => resolve(result)); } else { - window.showWarningMessage(`Could not find Java Language Server log file ${filename} in ${dirname}`); resolve(false); } }); From 9c91aa22053202630ee46a10f24173362c4f91f7 Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Sun, 3 Jul 2022 11:46:17 +0200 Subject: [PATCH 179/708] Add support for qualified workspace symbols The change prefix the symbol name with container name if the query is a qualified name to overcome vscode fuzzy search limitation. Signed-off-by: Gayan Perera --- src/providerDispatcher.ts | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index f9b768dfa..98bcf1406 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -110,7 +110,26 @@ const START_OF_DOCUMENT = new Range(new Position(0, 0), new Position(0, 0)); function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: WorkspaceSymbolProvider): WorkspaceSymbolProvider { return { - provideWorkspaceSymbols: existingWorkspaceSymbolProvider.provideWorkspaceSymbols, + provideWorkspaceSymbols: async (query: string, token: CancellationToken) => { + // This is a workaround until vscode add support for qualified symbol search which is tracked by + // https://github.com/microsoft/vscode/issues/98125 + const result = existingWorkspaceSymbolProvider.provideWorkspaceSymbols(query, token); + if (query.indexOf('.') > -1) { // seems like a qualified name + return new Promise((resolve) => { + ((result as Promise)).then((symbols) => { + if (symbols === null) { + resolve(null); + } else { + resolve(symbols?.map((s) => { + s.name = `${s.containerName}.${s.name}`; + return s; + })); + } + }); + }); + } + return result; + }, resolveWorkspaceSymbol: async (symbol: SymbolInformation, token: CancellationToken): Promise => { const range = symbol.location.range; if (range && !range.isEqual(START_OF_DOCUMENT)) { From e071edcf38d092a0b9d36514163fe988e57655c6 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 13 Jul 2022 09:43:19 +0800 Subject: [PATCH 180/708] Migrate to '@vscode/test-electron' (#2555) Signed-off-by: Sheng Chen --- package-lock.json | 330 ++++++++++++++------- package.json | 6 +- test/runtest.ts | 2 +- test/standard-mode-suite/extension.test.ts | 1 + 4 files changed, 228 insertions(+), 111 deletions(-) diff --git a/package-lock.json b/package-lock.json index ec1c05bbe..ecd21e854 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,12 @@ "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", "dev": true }, + "@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true + }, "@types/eslint": { "version": "7.2.10", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", @@ -127,6 +133,74 @@ "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, + "@vscode/test-electron": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", + "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", + "dev": true, + "requires": { + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "rimraf": "^3.0.2", + "unzipper": "^0.10.11" + }, + "dependencies": { + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "requires": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + } + }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, "@webassemblyjs/ast": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", @@ -312,15 +386,6 @@ "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", "dev": true }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", - "dev": true, - "requires": { - "es6-promisify": "^5.0.0" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -457,7 +522,7 @@ "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, "array-each": { @@ -529,7 +594,7 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", "dev": true }, "array-unique": { @@ -724,9 +789,25 @@ "beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "big-integer": { + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "dev": true }, + "binary": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "dev": true, + "requires": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -742,6 +823,12 @@ "safe-buffer": "^5.1.1" } }, + "bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "dev": true + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -849,6 +936,18 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, + "buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "dev": true + }, + "buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "dev": true + }, "builtin-modules": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", @@ -900,6 +999,15 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, + "chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "dev": true, + "requires": { + "traverse": ">=0.3.0 <0.4" + } + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -1275,7 +1383,7 @@ "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", "dev": true }, "debug": { @@ -1531,7 +1639,7 @@ "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { "readable-stream": "~1.1.9" @@ -1540,13 +1648,13 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", "dev": true }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -1712,21 +1820,6 @@ "es6-symbol": "^3.1.1" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", - "dev": true - }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", - "dev": true, - "requires": { - "es6-promise": "^4.0.3" - } - }, "es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", @@ -2260,6 +2353,18 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -2653,7 +2758,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, "vinyl": { @@ -2721,7 +2826,7 @@ "has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { "sparkles": "^1.0.0" @@ -2797,27 +2902,6 @@ "entities": "^2.0.0" } }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", - "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - } - } - }, "http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", @@ -2829,33 +2913,6 @@ "sshpk": "^1.7.0" } }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", - "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3337,6 +3394,12 @@ "resolve": "^1.1.7" } }, + "listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "dev": true + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -3373,43 +3436,43 @@ "lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", "dev": true }, "lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", "dev": true }, "lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", "dev": true }, "lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, "lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", "dev": true }, "lodash._reescape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", "dev": true }, "lodash._reevaluate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", "dev": true }, "lodash._reinterpolate": { @@ -3421,13 +3484,13 @@ "lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", "dev": true }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { "lodash._root": "^3.0.0" @@ -3442,19 +3505,19 @@ "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", "dev": true }, "lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", "dev": true }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { "lodash._getnative": "^3.0.0", @@ -3465,7 +3528,7 @@ "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", "dev": true }, "lodash.template": { @@ -3492,7 +3555,7 @@ "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { "lodash._reinterpolate": "^3.0.0", @@ -3746,6 +3809,23 @@ } } }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "requires": { + "minimist": "^1.2.6" + }, + "dependencies": { + "minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true + } + } + }, "mocha": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", @@ -4032,7 +4112,7 @@ "multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", "dev": true, "requires": { "duplexer2": "0.0.2" @@ -4946,6 +5026,12 @@ } } }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, "shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", @@ -5529,6 +5615,12 @@ "punycode": "^2.1.1" } }, + "traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true + }, "triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -5869,6 +5961,41 @@ } } }, + "unzipper": { + "version": "0.10.11", + "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", + "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", + "dev": true, + "requires": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + }, + "dependencies": { + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + } + } + }, "upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", @@ -6078,17 +6205,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" }, - "vscode-test": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.4.0.tgz", - "integrity": "sha512-Jt7HNGvSE0+++Tvtq5wc4hiXLIr2OjDShz/gbAfM/mahQpy4rKBnmOK33D+MR67ATWviQhl+vpmU3p/qwSH/Pg==", - "dev": true, - "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.4", - "rimraf": "^2.6.3" - } - }, "vscode-uri": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", diff --git a/package.json b/package.json index 9904dd00f..809a82edb 100644 --- a/package.json +++ b/package.json @@ -1216,6 +1216,7 @@ "@types/vscode": "^1.65.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", + "@vscode/test-electron": "^2.1.5", "gulp": "^4.0.2", "gulp-decompress": "^3.0.0", "gulp-download": "0.0.1", @@ -1228,7 +1229,6 @@ "tslint": "^5.11.0", "typescript": "^4.2.4", "typescript-tslint-plugin": "^0.3.1", - "vscode-test": "^1.4.0", "webpack": "^5.28.0", "webpack-cli": "^4.6.0" }, @@ -1238,12 +1238,12 @@ "fmtr": "^1.1.2", "fs-extra": "^8.1.0", "glob": "^7.1.3", + "htmlparser2": "6.0.1", "jdk-utils": "^0.4.3", "semver": "^7.3.5", "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", - "winston-daily-rotate-file": "^3.10.0", - "htmlparser2": "6.0.1" + "winston-daily-rotate-file": "^3.10.0" } } diff --git a/test/runtest.ts b/test/runtest.ts index 68c840563..77fcbd5b1 100644 --- a/test/runtest.ts +++ b/test/runtest.ts @@ -1,6 +1,6 @@ import * as path from 'path'; -import { runTests } from 'vscode-test'; import * as fse from 'fs-extra'; +import { runTests } from '@vscode/test-electron'; async function main() { const testProjectOriginPath: string = path.join(__dirname, '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index d5f43d6a7..76586f0ad 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -60,6 +60,7 @@ suite('Java Language Extension - Standard', () => { Commands.ORGANIZE_IMPORTS, Commands.OVERRIDE_METHODS_PROMPT, Commands.PROJECT_CONFIGURATION_STATUS, + Commands.BUILD_PROJECT, Commands.REMOVE_FROM_SOURCEPATH_CMD, Commands.RENAME_COMMAND, Commands.SHOW_JAVA_IMPLEMENTATIONS, From 6c000d33fc51ba3041c6452b4879b532a43f1dae Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 13 Jul 2022 16:00:58 +0800 Subject: [PATCH 181/708] Scan two levels of directories for activation indicators (#2554) Signed-off-by: Sheng Chen --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 809a82edb..3195ec927 100644 --- a/package.json +++ b/package.json @@ -40,12 +40,12 @@ ], "activationEvents": [ "onLanguage:java", - "workspaceContains:pom.xml", - "workspaceContains:build.gradle", - "workspaceContains:settings.gradle", - "workspaceContains:build.gradle.kts", - "workspaceContains:settings.gradle.kts", - "workspaceContains:.classpath", + "workspaceContains:{*/,}pom.xml", + "workspaceContains:{*/,}build.gradle", + "workspaceContains:{*/,}settings.gradle", + "workspaceContains:{*/,}build.gradle.kts", + "workspaceContains:{*/,}settings.gradle.kts", + "workspaceContains:{*/,}.classpath", "onCommand:_java.templateVariables", "onCommand:_java.metadataFilesGeneration" ], From d1e0476f310fb42fd2bc1fd8cf6940eef43d3ae9 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 13 Jul 2022 19:18:01 +0800 Subject: [PATCH 182/708] clean jre folder before publishing generic version Signed-off-by: Shi Chen --- Jenkinsfile | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Jenkinsfile b/Jenkinsfile index a11078cda..b13e45ed7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -64,6 +64,9 @@ def publishExtensions() { if (publishPreRelease.equals('true')) { stage "publish generic version" withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + // Clean up embedded jre folder from previous build + sh 'npx gulp clean_jre' + // Publish a generic version sh 'vsce publish --pre-release -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' } From b5729c1428e2b5440c05c3470845a694681f6aa8 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 18 Jul 2022 09:31:43 +0800 Subject: [PATCH 183/708] Fix project updating from the notification (#2567) Signed-off-by: Sheng Chen --- package-lock.json | 195 +++++++++++++++++----- package.json | 2 + src/standardLanguageClient.ts | 118 +------------ src/standardLanguageClientUtils.ts | 122 ++++++++++++++ test/standard-mode-suite/projects.test.ts | 52 ++++++ 5 files changed, 333 insertions(+), 156 deletions(-) create mode 100644 src/standardLanguageClientUtils.ts create mode 100644 test/standard-mode-suite/projects.test.ts diff --git a/package-lock.json b/package-lock.json index ecd21e854..151fe10b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,41 @@ "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", "dev": true }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/fake-timers": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", + "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + }, + "@sinonjs/samsam": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", + "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, "@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -106,6 +141,21 @@ "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==", "dev": true }, + "@types/sinon": { + "version": "10.0.12", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", + "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "dev": true, + "requires": { + "@types/sinonjs__fake-timers": "*" + } + }, + "@types/sinonjs__fake-timers": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", + "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", + "dev": true + }, "@types/vscode": { "version": "1.65.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", @@ -3327,6 +3377,12 @@ "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", "dev": true }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, "kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -3502,6 +3558,12 @@ "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "dev": true + }, "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", @@ -3885,12 +3947,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4065,26 +4121,18 @@ }, "dependencies": { "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true } } }, @@ -4161,6 +4209,19 @@ "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, + "nise": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", + "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": ">=5", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" + } + }, "node-releases": { "version": "1.1.72", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", @@ -4492,6 +4553,23 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + } + } + }, "path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", @@ -5077,6 +5155,43 @@ } } }, + "sinon": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", + "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" + }, + "dependencies": { + "diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -5831,6 +5946,12 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6543,26 +6664,16 @@ "which-module": "^1.0.0", "y18n": "^3.2.1", "yargs-parser": "^5.0.1" - }, - "dependencies": { - "yargs-parser": { - "version": "18.1.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", - "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "dependencies": { - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - } - } - } + } + }, + "yargs-parser": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "object.assign": "^4.1.0" } }, "yargs-unparser": { diff --git a/package.json b/package.json index 3195ec927..b5aec1816 100644 --- a/package.json +++ b/package.json @@ -1213,6 +1213,7 @@ "@types/mocha": "^5.2.5", "@types/node": "^8.10.51", "@types/semver": "^7.3.8", + "@types/sinon": "^10.0.12", "@types/vscode": "^1.65.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", @@ -1225,6 +1226,7 @@ "minimist": ">=1.2.6", "mocha": "^9.2.0", "request": "^2.88.2", + "sinon": "^14.0.0", "ts-loader": "^9.2.6", "tslint": "^5.11.0", "typescript": "^4.2.4", diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index cc8345862..a55ded700 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,13 +1,13 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position, QuickPickItem, QuickPickItemKind } from "vscode"; +import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position } from "vscode"; import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; -import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, ProjectConfigurationUpdateRequest, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo, BuildProjectRequest, BuildProjectParams } from "./protocol"; +import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo, BuildProjectRequest, BuildProjectParams } from "./protocol"; import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; import { onExtensionChange, collectBuildFilePattern } from "./plugin"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -30,13 +30,13 @@ import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvider"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; -import { buildFilePatterns } from './plugin'; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; -import { findRuntimes, IJavaRuntime } from "jdk-utils"; +import { findRuntimes } from "jdk-utils"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { JavaInlayHintsProvider } from "./inlayHintsProvider"; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; import { checkLombokDependency } from "./lombokSupport"; +import { askForProjects, projectConfigurationUpdate } from "./standardLanguageClientUtils"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -646,116 +646,6 @@ function setIncompleteClasspathSeverity(severity: string) { ); } -async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: Uri | Uri[]) { - let resources = []; - if (!uris) { - const activeFileUri: Uri | undefined = window.activeTextEditor?.document.uri; - - if (activeFileUri && isJavaConfigFile(activeFileUri.fsPath)) { - resources = [activeFileUri]; - } else { - resources = await askForProjects(activeFileUri, "Please select the project(s) to update."); - } - } else if (uris instanceof Uri) { - resources.push(uris); - } else if (Array.isArray(uris)) { - for (const uri of uris) { - if (uri instanceof Uri) { - resources.push(uri); - } - } - } - if (resources.length === 1) { - languageClient.sendNotification(ProjectConfigurationUpdateRequest.type, { - uri: resources[0].toString(), - }); - } else if (resources.length > 1) { - languageClient.sendNotification(ProjectConfigurationUpdateRequest.typeV2, { - identifiers: resources.map(r => { - return { uri: r.toString() }; - }), - }); - } -} - -/** - * Ask user to select projects and return the selected projects' uris. - * @param activeFileUri the uri of the active file. - * @param placeHolder message to be shown in quick pick. - */ -async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string): Promise { - const projectPicks: QuickPickItem[] = await generateProjectPicks(activeFileUri); - if (!projectPicks?.length) { - return []; - } else if (projectPicks.length === 1) { - return [Uri.file(projectPicks[0].detail)]; - } else { - const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { - matchOnDetail: true, - placeHolder: placeHolder, - ignoreFocusOut: true, - canPickMany: true, - }); - - if (choices?.length) { - return choices.map(c => Uri.file(c.detail)); - } - } - - return []; -} - -/** - * Generate the quick picks for projects selection. An `undefined` value will be return if - * it's failed to generate picks. - * @param activeFileUri the uri of the active document. - */ -async function generateProjectPicks(activeFileUri: Uri | undefined): Promise { - let projectUriStrings: string[]; - try { - projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); - } catch (e) { - return undefined; - } - - const projectPicks: QuickPickItem[] = projectUriStrings.map(uriString => { - const projectPath = Uri.parse(uriString).fsPath; - if (path.basename(projectPath) === "jdt.ls-java-project") { - return undefined; - } - - return { - label: path.basename(projectPath), - detail: projectPath, - }; - }).filter(Boolean); - - // pre-select an active project based on the uri candidate. - if (activeFileUri?.scheme === "file") { - const candidatePath = activeFileUri.fsPath; - let belongingIndex = -1; - for (let i = 0; i < projectPicks.length; i++) { - if (candidatePath.startsWith(projectPicks[i].detail)) { - if (belongingIndex < 0 - || projectPicks[i].detail.length > projectPicks[belongingIndex].detail.length) { - belongingIndex = i; - } - } - } - if (belongingIndex >= 0) { - projectPicks[belongingIndex].picked = true; - } - } - - return projectPicks; -} - -function isJavaConfigFile(filePath: string) { - const fileName = path.basename(filePath); - const regEx = new RegExp(buildFilePatterns.map(r => `(${r})`).join('|'), 'i'); - return regEx.test(fileName); -} - function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { const config = getJavaConfiguration(); const section = 'configuration.updateBuildConfiguration'; diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts new file mode 100644 index 000000000..be5438e63 --- /dev/null +++ b/src/standardLanguageClientUtils.ts @@ -0,0 +1,122 @@ +'use strict'; + +import { commands, QuickPickItem, Uri, window } from "vscode"; +import * as path from "path"; +import { TextDocumentIdentifier } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; +import { buildFilePatterns } from "./plugin"; +import { ProjectConfigurationUpdateRequest } from "./protocol"; +import { Commands } from "./commands"; + +export async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: TextDocumentIdentifier | Uri | Uri[]) { + let resources = []; + if (!uris) { + const activeFileUri: Uri | undefined = window.activeTextEditor?.document.uri; + + if (activeFileUri && isJavaConfigFile(activeFileUri.fsPath)) { + resources = [activeFileUri]; + } else { + resources = await askForProjects(activeFileUri, "Please select the project(s) to update."); + } + } else if (uris instanceof Uri) { + resources.push(uris); + } else if (Array.isArray(uris)) { + for (const uri of uris) { + if (uri instanceof Uri) { + resources.push(uri); + } + } + } else if ("uri" in uris) { + resources.push(Uri.parse(uris.uri)); + } + + if (resources.length === 1) { + languageClient.sendNotification(ProjectConfigurationUpdateRequest.type, { + uri: resources[0].toString(), + }); + } else if (resources.length > 1) { + languageClient.sendNotification(ProjectConfigurationUpdateRequest.typeV2, { + identifiers: resources.map(r => { + return { uri: r.toString() }; + }), + }); + } +} + +function isJavaConfigFile(filePath: string) { + const fileName = path.basename(filePath); + const regEx = new RegExp(buildFilePatterns.map(r => `(${r})`).join('|'), 'i'); + return regEx.test(fileName); +} + +/** + * Ask user to select projects and return the selected projects' uris. + * @param activeFileUri the uri of the active file. + * @param placeHolder message to be shown in quick pick. + */ +export async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string): Promise { + const projectPicks: QuickPickItem[] = await generateProjectPicks(activeFileUri); + if (!projectPicks?.length) { + return []; + } else if (projectPicks.length === 1) { + return [Uri.file(projectPicks[0].detail)]; + } else { + const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { + matchOnDetail: true, + placeHolder: placeHolder, + ignoreFocusOut: true, + canPickMany: true, + }); + + if (choices?.length) { + return choices.map(c => Uri.file(c.detail)); + } + } + + return []; +} + +/** + * Generate the quick picks for projects selection. An `undefined` value will be return if + * it's failed to generate picks. + * @param activeFileUri the uri of the active document. + */ +async function generateProjectPicks(activeFileUri: Uri | undefined): Promise { + let projectUriStrings: string[]; + try { + projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + } catch (e) { + return undefined; + } + + const projectPicks: QuickPickItem[] = projectUriStrings.map(uriString => { + const projectPath = Uri.parse(uriString).fsPath; + if (path.basename(projectPath) === "jdt.ls-java-project") { + return undefined; + } + + return { + label: path.basename(projectPath), + detail: projectPath, + }; + }).filter(Boolean); + + // pre-select an active project based on the uri candidate. + if (activeFileUri?.scheme === "file") { + const candidatePath = activeFileUri.fsPath; + let belongingIndex = -1; + for (let i = 0; i < projectPicks.length; i++) { + if (candidatePath.startsWith(projectPicks[i].detail)) { + if (belongingIndex < 0 + || projectPicks[i].detail.length > projectPicks[belongingIndex].detail.length) { + belongingIndex = i; + } + } + } + if (belongingIndex >= 0) { + projectPicks[belongingIndex].picked = true; + } + } + + return projectPicks; +} diff --git a/test/standard-mode-suite/projects.test.ts b/test/standard-mode-suite/projects.test.ts new file mode 100644 index 000000000..862ca1b58 --- /dev/null +++ b/test/standard-mode-suite/projects.test.ts @@ -0,0 +1,52 @@ +'use strict'; + +import * as assert from 'assert'; +import * as path from 'path'; +import * as sinon from 'sinon'; +import { Uri } from 'vscode'; +import { TextDocumentIdentifier } from 'vscode-languageclient'; +import { LanguageClient } from 'vscode-languageclient/node'; +import { projectConfigurationUpdate } from '../../src/standardLanguageClientUtils'; + +const projectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); + +// tslint:disable: only-arrow-functions +suite('Project Operations Test', () => { + + test('Reload project by test document identifier', async function () { + const client = new LanguageClient('mock client', null, null); + const sendNotificationStub = sinon.stub(client, 'sendNotification'); + + const pomPath = path.join(projectFsPath, 'pom.xml'); + const identifier: TextDocumentIdentifier = { + uri: Uri.file(pomPath).toString(), + }; + + await projectConfigurationUpdate(client, identifier); + + assert.ok(sendNotificationStub.calledOnce); + }); + + test('Reload project by Uri instance', async function () { + const client = new LanguageClient('mock client', null, null); + const sendNotificationStub = sinon.stub(client, 'sendNotification'); + + const pomPath = path.join(projectFsPath, 'pom.xml'); + + await projectConfigurationUpdate(client, Uri.file(pomPath)); + + assert.ok(sendNotificationStub.calledOnce); + }); + + test('Reload project by Uri array', async function () { + const client = new LanguageClient('mock client', null, null); + const sendNotificationStub = sinon.stub(client, 'sendNotification'); + + const pomPath = path.join(projectFsPath, 'pom.xml'); + + await projectConfigurationUpdate(client, [Uri.file(pomPath)]); + + assert.ok(sendNotificationStub.calledOnce); + }); + +}); From 392cd67e4a0028d8d23e957a86a3a07391e20630 Mon Sep 17 00:00:00 2001 From: yuhaoxiao <752087942@qq.com> Date: Wed, 20 Jul 2022 05:27:13 +0800 Subject: [PATCH 184/708] Package lombok into extension (#2550) - Add the feature of using extension's lombok version by default - If the lombok support is enable, the extension always adds the latest version lombok jar to start JDT LS. This can avoid the errors caused by old version lombok. - The user can select the lombok version of the extension, or project - If the user wants to use project's lombok which is lower then 1.18.2, we send a warning message and continue to use extension's lombok Signed-off-by: Yuhao Xiao --- .gitignore | 1 + Jenkinsfile | 7 + README.md | 2 +- gulpfile.js | 12 + src/extension.ts | 2 + src/lombokSupport.ts | 382 ++++++++++++++------------------ src/runtimeStatusBarProvider.ts | 27 ++- src/settings.ts | 28 ++- 8 files changed, 221 insertions(+), 240 deletions(-) diff --git a/.gitignore b/.gitignore index 7b4f85db1..65e4023ed 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ undefined target dist jre +lombok bin/ .settings .classpath diff --git a/Jenkinsfile b/Jenkinsfile index b13e45ed7..6b7b4d040 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -12,6 +12,11 @@ def buildVscodeExtension(){ sh "npm run vscode:prepublish" } +def downloadLombokJar(){ + stage "Download lombok.jar" + sh "npx gulp download_lombok" +} + def packageSpecificExtensions() { stage "Package platform specific vscode-java" def platforms = ["win32-x64", "linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64"] @@ -159,6 +164,8 @@ node('rhel8'){ sh "npm test --silent" } + downloadLombokJar() + packageExtensions() publishExtensions() diff --git a/README.md b/README.md index 650041afa..09eb0eacc 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ Supported VS Code settings The following settings are supported: * `java.home` : **Deprecated, please use 'java.jdt.ls.java.home' instead.** Absolute path to JDK home folder used to launch the Java Language Server. Requires VS Code restart. -* `java.jdt.ls.lombokSupport.enabled`: Whether to load lombok processors from project classpath. Defaults to `true`. +* `java.jdt.ls.lombokSupport.enabled`: Whether to enable lombok support. Defaults to `true`. * `java.jdt.ls.vmargs` : Extra VM arguments used to launch the Java Language Server. Requires VS Code restart. * `java.errors.incompleteClasspath.severity` : Specifies the severity of the message when the classpath is incomplete for a Java file. Supported values are `ignore`, `info`, `warning`, `error`. * `java.trace.server` : Traces the communication between VS Code and the Java language server. diff --git a/gulpfile.js b/gulpfile.js index e1e76a929..a011fa4b1 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -116,6 +116,18 @@ gulp.task('download_jre', async function(done) { done(); }); +gulp.task('download_lombok', function(done) { + if (fse.existsSync('./lombok')) { + fse.removeSync('./lombok'); + } + const lombokVersion = '1.18.24'; + // The latest lombok version can be found on the website https://projectlombok.org/downloads + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + download(lombokUrl) + .pipe(gulp.dest('./lombok/')) + done(); +}); + gulp.task('download_server', function(done) { fse.removeSync('./server'); download("http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz") diff --git a/src/extension.ts b/src/extension.ts index 41ec459d3..c598df024 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -27,6 +27,7 @@ import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { markdownPreviewProvider } from "./markdownPreviewProvider"; import * as chokidar from 'chokidar'; +import { cleanupLombokCache } from "./lombokSupport"; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -359,6 +360,7 @@ export function activate(context: ExtensionContext): Promise { const cleanWorkspaceExists = fs.existsSync(path.join(workspacePath, cleanWorkspaceFileName)); if (cleanWorkspaceExists) { try { + cleanupLombokCache(context); deleteDirectory(workspacePath); deleteDirectory(syntaxServerWorkspacePath); } catch (error) { diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index 1e1115bdb..a630af925 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -2,12 +2,14 @@ import * as fse from "fs-extra"; import * as path from "path"; +import * as semver from 'semver'; import * as vscode from "vscode"; -import { ExtensionContext, window, commands, Uri, Position, Location, Selection, env } from "vscode"; +import { ExtensionContext, window, commands } from "vscode"; import { Commands } from "./commands"; import { apiManager } from "./apiManager"; import { supportsLanguageStatus } from "./languageStatusItemFactory"; -import htmlparser2 = require("htmlparser2"); +import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; +import { logger } from './log'; export const JAVA_LOMBOK_PATH = "java.lombokPath"; @@ -20,17 +22,20 @@ const languageServerDocumentSelector = [ { pattern: '**/{build,settings}.gradle.kts'} ]; -const lombokJarRegex = /lombok-\d+.*\.jar/; - +const lombokJarRegex = /lombok-\d+.*\.jar$/; +const compatibleVersion = '1.18.4'; let activeLombokPath: string = undefined; +let isLombokStatusBarInitialized: boolean = false; let isLombokCommandInitialized: boolean = false; +let isExtensionLombok: boolean = false; // whether use extension's Lombok or not +let projectLombokPath: string = undefined; // the project's Lombok classpath export function isLombokSupportEnabled(): boolean { return vscode.workspace.getConfiguration().get("java.jdt.ls.lombokSupport.enabled"); } -export function isLombokImported(context: ExtensionContext): boolean { - return context.workspaceState.get(JAVA_LOMBOK_PATH)!==undefined; +export function isLombokImported(): boolean { + return projectLombokPath!==undefined; } export function updateActiveLombokPath(path: string) { @@ -41,284 +46,225 @@ export function isLombokActive(context: ExtensionContext): boolean { return activeLombokPath!==undefined; } -export function cleanupLombokCache(context: ExtensionContext): boolean { - const result = isLombokImported(context); +export function cleanupLombokCache(context: ExtensionContext) { context.workspaceState.update(JAVA_LOMBOK_PATH, undefined); - return result; } -export function getLombokVersion(context: ExtensionContext): string { - const lombokVersion = lombokJarRegex.exec(activeLombokPath)[0].split('.jar')[0]; +function getExtensionLombokPath(context: ExtensionContext): string { + if (!fse.pathExistsSync(context.asAbsolutePath("lombok"))) { + return undefined; + } + const files = fse.readdirSync(context.asAbsolutePath("lombok")); + if (!files.length) { + return undefined; + } + return path.join(context.asAbsolutePath("lombok"), files[0]); +} + +function lombokPath2Version(lombokPath: string): string { + const lombokVersion = lombokJarRegex.exec(lombokPath)[0].split('.jar')[0]; return lombokVersion; } +function lombokPath2VersionNumber(lombokPath: string): string { + const lombokVersioNumber = lombokPath2Version(lombokPath).split('-')[1]; + return lombokVersioNumber; +} + +export function getLombokVersion(): string { + return lombokPath2Version(activeLombokPath); +} + +function isCompatibleLombokVersion(currentVersion: string): boolean { + return semver.gte(currentVersion, compatibleVersion); +} + export function addLombokParam(context: ExtensionContext, params: string[]) { - if (isLombokImported(context)) { - // Exclude user setting lombok agent parameter - const reg = /-javaagent:.*[\\|/]lombok.*\.jar/; - const deleteIndex = []; - for (let i = 0; i= 0; i--) { + params.splice(deleteIndex[i], 1); + } + // add -javaagent arg to support Lombok. + // use the extension's Lombok version by default. + isExtensionLombok = true; + let lombokJarPath: string = context.workspaceState.get(JAVA_LOMBOK_PATH); + if (lombokJarPath && fse.existsSync(lombokJarPath)) { + if (isCompatibleLombokVersion(lombokPath2VersionNumber(lombokJarPath))) { + isExtensionLombok = false; } - for (let i = deleteIndex.length - 1; i>=0; i--) { - params.splice(deleteIndex[i], 1); + else { + cleanupLombokCache(context); + logger.warn(`The project's Lombok version ${lombokPath2VersionNumber(lombokJarPath)} is not supported, Falling back to the built-in Lombok version ${lombokPath2VersionNumber(getExtensionLombokPath(context))}`); } - // add -javaagent arg to support lombok - const lombokAgentParam = '-javaagent:' + context.workspaceState.get(JAVA_LOMBOK_PATH); - params.push(lombokAgentParam); - updateActiveLombokPath(context.workspaceState.get(JAVA_LOMBOK_PATH)); } + if (isExtensionLombok) { + lombokJarPath = getExtensionLombokPath(context); + } + // check if the Lombok.jar exists. + if (!lombokJarPath) { + logger.warn("Could not find lombok.jar path."); + return; + } + const lombokAgentParam = '-javaagent:' + lombokJarPath; + params.push(lombokAgentParam); + updateActiveLombokPath(lombokJarPath); } export async function checkLombokDependency(context: ExtensionContext) { if (!isLombokSupportEnabled()) { return; } - let needReload = false; - let versionChange = false; - let currentLombokVersion = ""; - let previousLombokVersion = ""; - let currentLombokClasspath = ""; + let versionChange: boolean = false; + let lombokFound: boolean = false; + let currentLombokVersion: string = undefined; + let previousLombokVersion: string = undefined; + let currentLombokClasspath: string = undefined; const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); for (const projectUri of projectUris) { - const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'runtime'}); + const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'test'}); for (const classpath of classpathResult.classpaths) { if (lombokJarRegex.test(classpath)) { currentLombokClasspath = classpath; - if (isLombokImported(context)) { + if (activeLombokPath && !isExtensionLombok) { currentLombokVersion = lombokJarRegex.exec(classpath)[0]; - previousLombokVersion = lombokJarRegex.exec(context.workspaceState.get(JAVA_LOMBOK_PATH))[0]; - if (currentLombokVersion!==previousLombokVersion) { - needReload = true; + previousLombokVersion = lombokJarRegex.exec(activeLombokPath)[0]; + if (currentLombokVersion !== previousLombokVersion) { versionChange = true; - context.workspaceState.update(JAVA_LOMBOK_PATH, classpath); } } - else { - needReload = true; - context.workspaceState.update(JAVA_LOMBOK_PATH, currentLombokClasspath); - } + lombokFound = true; break; } } - if (needReload) { + if (lombokFound) { break; } } - if (needReload) { - if (versionChange) { - const msg = `Lombok version changed from ${previousLombokVersion.split('.jar')[0].split('-')[1]} to ${currentLombokVersion.split('.jar')[0].split('-')[1]} \ - . Do you want to reload the window to load the new lombok version?`; - const action = 'Reload Now'; - const restartId = Commands.RELOAD_WINDOW; - window.showInformationMessage(msg, action).then((selection) => { - if (action === selection) { - commands.executeCommand(restartId); - } - }); - } - else { - const msg = `Lombok is detected in your project, please reload the window to enable lombok support.`; - const action = 'Reload Now'; - const restartId = Commands.RELOAD_WINDOW; - window.showInformationMessage(msg, action).then((selection) => { - if (action === selection) { - commands.executeCommand(restartId); - } - }); + projectLombokPath = currentLombokClasspath; + /* if projectLombokPath is undefined, it means that this project has not imported Lombok. + * We don't need initalize Lombok status bar in this case. + */ + if (!isLombokStatusBarInitialized && projectLombokPath) { + if (!isLombokCommandInitialized) { + registerLombokConfigureCommand(context); + isLombokCommandInitialized = true; } + runtimeStatusBarProvider.initializeLombokStatusBar(); + isLombokStatusBarInitialized = true; } -} - -async function getParentBuildFilePath(buildFilePath: string, relativePath: string) { - const parentBuildFilePath = path.join(path.dirname(buildFilePath), relativePath, path.basename(buildFilePath)); - if (await fse.pathExists(parentBuildFilePath)) { - return parentBuildFilePath; + if (isLombokStatusBarInitialized && !projectLombokPath) { + runtimeStatusBarProvider.destroyLombokStatusBar(); + isLombokStatusBarInitialized = false; + cleanupLombokCache(context); + } + if (versionChange && !isExtensionLombok) { + context.workspaceState.update(JAVA_LOMBOK_PATH, currentLombokClasspath); + const msg = `Lombok version changed from ${previousLombokVersion.split('.jar')[0].split('-')[1]} to ${currentLombokVersion.split('.jar')[0].split('-')[1]} \ + . Do you want to reload the window to load the new Lombok version?`; + const action = 'Reload Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showInformationMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); } - return undefined; } export function registerLombokConfigureCommand(context: ExtensionContext) { - if (isLombokCommandInitialized) { - return; - } context.subscriptions.push(commands.registerCommand(Commands.LOMBOK_CONFIGURE, async (buildFilePath: string) => { - if (isMavenProject(buildFilePath)) { - let pos = 0; - while (true) { - const document = await vscode.workspace.openTextDocument(Uri.file(buildFilePath)); - const fullText = document.getText(); - let tagList: [string, number][] = []; - let hasParent: boolean = false; - let getRelativePath: boolean = false; - let relativePath: string = '..'; - const parser = new htmlparser2.Parser({ - onopentag(name, attributes) { - if (name==="dependency"||tagList.length>0) { - tagList.push([name, parser.startIndex]); - } - if (name==="parent") { - hasParent = true; - } - if (hasParent&&name==="relativePath") { - getRelativePath = true; - } - }, - ontext(text) { - if (tagList.length) { - tagList.push([text, parser.startIndex]); - } - if (getRelativePath) { - relativePath = text; - } - }, - onclosetag(name) { - if (name==="dependency") { - tagList.push([name, parser.startIndex]); - let lombokIndex = -1; - let versionIndex = -1; - for (let i = 0; i=0) { - pos = lombokIndex; - if (versionIndex>=0) { - pos = versionIndex; - parser.end(); - } - } - tagList = []; - } - if (getRelativePath&&name==="relativePath") { - getRelativePath = false; - } - }, - }); - parser.write(fullText); - parser.end(); - if (pos>0) { - break; - } - if (hasParent) { - buildFilePath = await getParentBuildFilePath(buildFilePath, relativePath); - if (buildFilePath===undefined) { - break; - } - } - else { - break; - } + const extensionLombokPath: string = getExtensionLombokPath(context); + if (!extensionLombokPath || !projectLombokPath) { + return; + } + const extensionItemLabel = 'Use Extension\'s Version'; + const extensionItemLabelCheck = `• ${extensionItemLabel}`; + const projectItemLabel = 'Use Project\'s Version'; + const projectItemLabelCheck = `• ${projectItemLabel}`; + const lombokPathItems = [ + { + label: isExtensionLombok? extensionItemLabelCheck : extensionItemLabel, + description: lombokPath2Version(extensionLombokPath) + }, + { + label: isExtensionLombok? projectItemLabel : projectItemLabelCheck, + description: lombokPath2Version(projectLombokPath), + detail: projectLombokPath } - if (buildFilePath) { - await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(buildFilePath)); - if (pos>0) { - gotoLombokLocation(pos, buildFilePath); - } + ]; + const selectLombokPathItem = await window.showQuickPick(lombokPathItems, { + placeHolder: 'Select the Lombok version used in the Java extension' + }); + let shouldReload: boolean = false; + if (!selectLombokPathItem) { + return; + } + if (selectLombokPathItem.label === extensionItemLabel || selectLombokPathItem.label === extensionItemLabelCheck) { + if (!isExtensionLombok) { + shouldReload = true; + cleanupLombokCache(context); } } - else if (isGradleProject(buildFilePath)) { - while (true) { - const document = await vscode.workspace.openTextDocument(Uri.file(buildFilePath)); - const fullText = document.getText(); - const deleteCommentReg = /\/\/.*|(\/\*[\s\S]*?\*\/)/g; - const content = fullText.replace(deleteCommentReg, (match) => { - let newString = ''; - for (const letter of match) { - newString += '@'; - } - return newString; - }); - const lombokReg = /org.projectlombok/; - const result = lombokReg.exec(content); - if (result) { - const pos = result.index; - await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(buildFilePath)); - gotoLombokLocation(pos, buildFilePath); - break; + else { + if (isExtensionLombok) { + const projectLombokVersion = lombokPath2VersionNumber(projectLombokPath); + if (!isCompatibleLombokVersion(projectLombokVersion)) { + const msg = `The project's Lombok version ${projectLombokVersion} is not supported. Falling back to the built-in Lombok version in the extension.`; + window.showWarningMessage(msg); + return; } else { - const currentBuildFilePath = buildFilePath; - buildFilePath = await getParentBuildFilePath(buildFilePath, ".."); - if (buildFilePath===undefined) { - await commands.executeCommand(Commands.OPEN_BROWSER, Uri.file(currentBuildFilePath)); - break; - } + shouldReload = true; + context.workspaceState.update(JAVA_LOMBOK_PATH, projectLombokPath); } } } + if (shouldReload) { + const msg = `The Lombok version used in Java extension has changed, please reload the window.`; + const action = 'Reload Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showInformationMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); + } + else { + const msg = `Current Lombok version is ${isExtensionLombok?'extension\'s' : 'project\'s'} version. Nothing to do.`; + window.showInformationMessage(msg); + } })); - isLombokCommandInitialized = true; } export namespace LombokVersionItemFactory { - export function create(text: string, buildFilePath: string): any { + export function create(text: string): any { if (supportsLanguageStatus()) { const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector); item.severity = vscode.LanguageStatusSeverity?.Information; item.name = "Lombok Version"; item.text = text; - if (buildFilePath) { - item.command = getLombokChangeCommand(buildFilePath); - } + item.command = getLombokChangeCommand(); return item; } return undefined; } - export function update(item: any, text: string, buildFilePath: string): void { + export function update(item: any, text: string): void { item.text = text; - if (buildFilePath) { - item.command = getLombokChangeCommand(buildFilePath); - } } - function getLombokChangeCommand(buildFilePath: string): vscode.Command { + function getLombokChangeCommand(): vscode.Command { return { title: `Configure Version`, command: Commands.LOMBOK_CONFIGURE, - arguments: [buildFilePath], tooltip: `Configure Lombok Version` }; } -} - -function gotoLombokLocation(position: number, buildFilePath: string): void { - const newPosition = window.activeTextEditor.document.positionAt(position); - const newSelection = new Selection(newPosition, newPosition); - window.activeTextEditor.selection = newSelection; - const newLocation = new Location(Uri.file(buildFilePath), newPosition); - commands.executeCommand( - Commands.GOTO_LOCATION, - window.activeTextEditor.document.uri, - window.activeTextEditor.selection.active, - [newLocation], - 'goto' - ); -} - -function isMavenProject(buildFilePath: string): boolean { - const buildFileNames = ["pom.xml"]; - for (const buildFileName of buildFileNames) { - if (buildFilePath.indexOf(buildFileName)>=0) { - return true; - } - } - return false; -} - -function isGradleProject(buildFilePath: string): boolean { - const buildFileNames = ["build.gradle", "build.gradle.kts", "settings.gradle", "settings.gradle.kts"]; - for (const buildFileName of buildFileNames) { - if (buildFilePath.indexOf(buildFileName)>=0) { - return true; - } - } - return false; -} +} \ No newline at end of file diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index 882fec3a6..eaf66b655 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -11,7 +11,7 @@ import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; import { getJavaConfiguration } from "./utils"; import { hasBuildToolConflicts } from "./extension"; -import { registerLombokConfigureCommand, LombokVersionItemFactory, getLombokVersion, isLombokActive } from "./lombokSupport"; +import { LombokVersionItemFactory, getLombokVersion, isLombokImported } from "./lombokSupport"; class RuntimeStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; @@ -88,6 +88,14 @@ class RuntimeStatusBarProvider implements Disposable { await this.updateItem(context, window.activeTextEditor); } + public initializeLombokStatusBar() { + this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion()); + } + + public destroyLombokStatusBar(): void { + this.hideLombokVersionItem(); + } + private hideRuntimeStatusItem(): void { this.runtimeStatusItem?.dispose(); this.runtimeStatusItem = undefined; @@ -174,10 +182,6 @@ class RuntimeStatusBarProvider implements Disposable { return; } - if (isLombokActive(context)) { - registerLombokConfigureCommand(context); - } - const uri: Uri = textEditor.document.uri; const projectPath: string = this.findOwnerProject(uri); if (!projectPath) { @@ -211,16 +215,19 @@ class RuntimeStatusBarProvider implements Disposable { if (buildFilePath) { this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath); } - if (isLombokActive(context)) { - this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion(context), buildFilePath); - } } else { RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath); if (buildFilePath) { BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath); } - if (isLombokActive(context)) { - LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion(context), buildFilePath); + } + if (!this.lombokVersionItem) { + if (isLombokImported()) { + this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion()); + } + } else { + if (isLombokImported()) { + LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion()); } } } else { diff --git a/src/settings.ts b/src/settings.ts index 717a1bf7f..529c0ca42 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -57,19 +57,25 @@ export function onConfigurationChange(workspacePath: string, context: ExtensionC } if (hasConfigKeyChanged('jdt.ls.lombokSupport.enabled', oldConfig, newConfig)) { if (newConfig.get("jdt.ls.lombokSupport.enabled")) { - checkLombokDependency(context); + const msg = `Lombok support is enabled, please restart ${env.appName}.`; + const action = 'Restart Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); } else { - if (cleanupLombokCache(context)) { - const msg = `Lombok support is disabled, please restart ${env.appName}.`; - const action = 'Restart Now'; - const restartId = Commands.RELOAD_WINDOW; - window.showWarningMessage(msg, action).then((selection) => { - if (action === selection) { - commands.executeCommand(restartId); - } - }); - } + cleanupLombokCache(context); + const msg = `Lombok support is disabled, please restart ${env.appName}.`; + const action = 'Restart Now'; + const restartId = Commands.RELOAD_WINDOW; + window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + commands.executeCommand(restartId); + } + }); } } // update old config From 550f57ea5565d9cb7f09480d9d76979296e3cd03 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 19 Jul 2022 22:53:25 -0400 Subject: [PATCH 185/708] Update moment & terser packages - Run npm audit fix to resolve some package issues Signed-off-by: Roland Grunberg --- package-lock.json | 128 ++++++++++++++++++++++++++++++++-------------- 1 file changed, 89 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index 151fe10b8..7ae9b678b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,55 @@ "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.14", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", + "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -572,7 +621,7 @@ "array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", "dev": true }, "array-each": { @@ -644,7 +693,7 @@ "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", "dev": true }, "array-unique": { @@ -839,7 +888,7 @@ "beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", "dev": true }, "big-integer": { @@ -1433,7 +1482,7 @@ "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", "dev": true }, "debug": { @@ -1689,7 +1738,7 @@ "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, "requires": { "readable-stream": "~1.1.9" @@ -1698,13 +1747,13 @@ "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", "dev": true }, "readable-stream": { "version": "1.1.14", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dev": true, "requires": { "core-util-is": "~1.0.0", @@ -2808,7 +2857,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true }, "vinyl": { @@ -2876,7 +2925,7 @@ "has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", "dev": true, "requires": { "sparkles": "^1.0.0" @@ -3492,43 +3541,43 @@ "lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", "dev": true }, "lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", "dev": true }, "lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", "dev": true }, "lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", "dev": true }, "lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", "dev": true }, "lodash._reescape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", "dev": true }, "lodash._reevaluate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", "dev": true }, "lodash._reinterpolate": { @@ -3540,13 +3589,13 @@ "lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", "dev": true }, "lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, "requires": { "lodash._root": "^3.0.0" @@ -3567,19 +3616,19 @@ "lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "dev": true }, "lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", "dev": true }, "lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, "requires": { "lodash._getnative": "^3.0.0", @@ -3590,7 +3639,7 @@ "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", "dev": true }, "lodash.template": { @@ -3617,7 +3666,7 @@ "lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, "requires": { "lodash._reinterpolate": "^3.0.0", @@ -4147,9 +4196,9 @@ } }, "moment": { - "version": "2.29.2", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.2.tgz", - "integrity": "sha512-UgzG4rvxYpN15jgCmVJwac49h9ly9NurikMWGPdVxm8GZD6XjkKPxDTjQQ43gtGgnV3X0cAyWDdP2Wexoquifg==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "ms": { "version": "2.0.0", @@ -4160,7 +4209,7 @@ "multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", "dev": true, "requires": { "duplexer2": "0.0.2" @@ -5325,9 +5374,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5552,20 +5601,21 @@ } }, "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.14.2", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", + "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", "dev": true, "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", "dev": true } } From ce9c5a70dab705082b1dc0688599e9c89be13caf Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 20 Jul 2022 15:33:58 +0800 Subject: [PATCH 186/708] Provide reload project code action on demand (#2575) - The reload project code actions will be provided for the related diagnostics. Signed-off-by: Sheng Chen --- src/gradle/gradleCodeActionProvider.ts | 13 +++- src/pom/pomCodeActionProvider.ts | 12 +++- src/standardLanguageClient.ts | 34 +---------- src/standardLanguageClientUtils.ts | 31 +++++++++- .../codeActionProvider.test.ts | 60 +++++++++++++++++++ 5 files changed, 115 insertions(+), 35 deletions(-) create mode 100644 test/standard-mode-suite/codeActionProvider.test.ts diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts index 952ae6081..d3f6983f7 100644 --- a/src/gradle/gradleCodeActionProvider.ts +++ b/src/gradle/gradleCodeActionProvider.ts @@ -4,7 +4,7 @@ import * as fse from "fs-extra"; import * as path from "path"; import { CancellationToken, CodeAction, CodeActionContext, CodeActionKind, CodeActionProvider, CodeActionProviderMetadata, Command, commands, Diagnostic, DiagnosticRelatedInformation, ExtensionContext, ProviderResult, Range, Selection, TextDocument, Uri } from "vscode"; import { Commands } from "../commands"; -import { upgradeGradle } from "../standardLanguageClient"; +import { upgradeGradle } from "../standardLanguageClientUtils"; export class GradleCodeActionProvider implements CodeActionProvider { @@ -29,6 +29,17 @@ export class GradleCodeActionProvider implements CodeActionProvider private async provideGradleCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): Promise { const codeActions = []; for (const diagnostic of diagnostics) { + if (diagnostic.message?.startsWith("The build file has been changed")) { + const reloadProjectAction = new CodeAction("Reload project", CodeActionKind.QuickFix); + reloadProjectAction.command = { + title: "Reload Project", + command: Commands.CONFIGURATION_UPDATE, + arguments: [document.uri], + }; + codeActions.push(reloadProjectAction); + continue; + } + const documentUri = document.uri.toString(); if (documentUri.endsWith(GradleCodeActionProvider.WRAPPER_PROPERTIES_DESCRIPTOR) && diagnostic.code === GradleCodeActionProvider.GRADLE_INVALID_TYPE_CODE_ID.toString()) { const projectPath = path.resolve(Uri.parse(documentUri).fsPath, "..", "..", "..").normalize(); diff --git a/src/pom/pomCodeActionProvider.ts b/src/pom/pomCodeActionProvider.ts index d13e0cf98..8c5cfe1cc 100644 --- a/src/pom/pomCodeActionProvider.ts +++ b/src/pom/pomCodeActionProvider.ts @@ -14,13 +14,13 @@ export class PomCodeActionProvider implements CodeActionProvider { provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(Command | CodeAction)[]> { if (context?.diagnostics?.length && context.diagnostics[0].source === "Java") { - return this.collectCodeActionsForNotCoveredExecutions(document, context.diagnostics); + return this.collectCodeActions(document, context.diagnostics); } return undefined; } - private collectCodeActionsForNotCoveredExecutions(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction[] { + private collectCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction[] { const codeActions: CodeAction[] = []; for (const diagnostic of diagnostics) { if (diagnostic.message?.startsWith("Plugin execution not covered by lifecycle configuration")) { @@ -48,6 +48,14 @@ export class PomCodeActionProvider implements CodeActionProvider { action3.edit.insert(document.uri, diagnostic.range.end, indentation + ""); action3.command = saveAndUpdateConfigCommand; codeActions.push(action3); + } else if (diagnostic.message?.startsWith("The build file has been changed")) { + const reloadProjectAction = new CodeAction("Reload project", CodeActionKind.QuickFix); + reloadProjectAction.command = { + title: "Reload Project", + command: Commands.CONFIGURATION_UPDATE, + arguments: [document.uri], + }; + codeActions.push(reloadProjectAction); } } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index a55ded700..91c9ab8cc 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,6 +1,6 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget, Range, Position } from "vscode"; +import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget } from "vscode"; import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; @@ -36,7 +36,7 @@ import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { JavaInlayHintsProvider } from "./inlayHintsProvider"; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; import { checkLombokDependency } from "./lombokSupport"; -import { askForProjects, projectConfigurationUpdate } from "./standardLanguageClientUtils"; +import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./standardLanguageClientUtils"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -559,7 +559,7 @@ export class StandardLanguageClient { languages.registerCodeActionsProvider({ scheme: "file", - pattern: "**/gradle/wrapper/gradle-wrapper.properties" + pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" }, new GradleCodeActionProvider(context), gradleCodeActionMetadata); if (languages.registerInlayHintsProvider) { @@ -674,31 +674,3 @@ export function showNoLocationFound(message: string): void { message ); } - -export async function upgradeGradle(projectUri: string, version?: string): Promise { - const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); - if (!useWrapper) { - await workspace.getConfiguration().update("java.import.gradle.wrapper.enabled", true, ConfigurationTarget.Workspace); - } - const result = await window.withProgress({ - location: ProgressLocation.Notification, - title: "Upgrading Gradle wrapper...", - cancellable: true, - }, (_progress, token) => { - return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, version, token); - }); - if (result) { - const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); - if (fse.pathExists(propertiesFile)) { - const content = await fse.readFile(propertiesFile); - const offset = content.toString().indexOf("distributionUrl"); - if (offset >= 0) { - const document = await workspace.openTextDocument(propertiesFile); - const position = document.positionAt(offset); - const distributionUrlRange = document.getWordRangeAtPosition(position); - window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); - } - } - commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); - } -} diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts index be5438e63..e70f3f2df 100644 --- a/src/standardLanguageClientUtils.ts +++ b/src/standardLanguageClientUtils.ts @@ -1,7 +1,8 @@ 'use strict'; -import { commands, QuickPickItem, Uri, window } from "vscode"; +import { commands, ConfigurationTarget, Position, ProgressLocation, QuickPickItem, Range, Uri, window, workspace } from "vscode"; import * as path from "path"; +import * as fse from "fs-extra"; import { TextDocumentIdentifier } from "vscode-languageclient"; import { LanguageClient } from "vscode-languageclient/node"; import { buildFilePatterns } from "./plugin"; @@ -120,3 +121,31 @@ async function generateProjectPicks(activeFileUri: Uri | undefined): Promise { + const useWrapper = workspace.getConfiguration().get("java.import.gradle.wrapper.enabled"); + if (!useWrapper) { + await workspace.getConfiguration().update("java.import.gradle.wrapper.enabled", true, ConfigurationTarget.Workspace); + } + const result = await window.withProgress({ + location: ProgressLocation.Notification, + title: "Upgrading Gradle wrapper...", + cancellable: true, + }, (_progress, token) => { + return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, version, token); + }); + if (result) { + const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); + if (fse.pathExists(propertiesFile)) { + const content = await fse.readFile(propertiesFile); + const offset = content.toString().indexOf("distributionUrl"); + if (offset >= 0) { + const document = await workspace.openTextDocument(propertiesFile); + const position = document.positionAt(offset); + const distributionUrlRange = document.getWordRangeAtPosition(position); + window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); + } + } + commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); + } +} diff --git a/test/standard-mode-suite/codeActionProvider.test.ts b/test/standard-mode-suite/codeActionProvider.test.ts new file mode 100644 index 000000000..0a8799da6 --- /dev/null +++ b/test/standard-mode-suite/codeActionProvider.test.ts @@ -0,0 +1,60 @@ +'use strict'; + +import * as assert from 'assert'; +import * as path from 'path'; +import { CodeAction, CodeActionContext, CodeActionKind, CodeActionTriggerKind, DiagnosticSeverity, ExtensionContext, Position, Range, Uri, window } from "vscode"; +import { Commands } from '../../src/commands'; +import { GradleCodeActionProvider } from '../../src/gradle/gradleCodeActionProvider'; +import { PomCodeActionProvider } from "../../src/pom/pomCodeActionProvider"; + +// tslint:disable: only-arrow-functions +const mavenProjectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); +const gradleProjectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'gradle', 'simple-gradle'); + +suite('Code Action Provider Test', () => { + + test('Provide reload project action on demand for pom file', async function () { + const contextMock = { + subscriptions: [] + }; + const provider = new PomCodeActionProvider(contextMock as ExtensionContext); + + const codeActionContext: CodeActionContext = { + triggerKind: CodeActionTriggerKind.Invoke, + diagnostics: [{ + range: new Range(new Position(0, 0), new Position(0, 0)), + message: 'The build file has been changed and may need reload to make it effective.', + severity: DiagnosticSeverity.Information, + source: 'Java' + }], + only: CodeActionKind.QuickFix + }; + const editor = await window.showTextDocument(Uri.file(path.join(mavenProjectFsPath, 'pom.xml'))); + const codeActions = provider.provideCodeActions(editor.document, null, codeActionContext, null) as CodeAction[]; + assert.equal(codeActions.length, 1); + assert.equal(codeActions[0].command.command, Commands.CONFIGURATION_UPDATE); + }); + + test('Provide reload project action on demand for gradle file', async function () { + const contextMock = { + subscriptions: [] + }; + const provider = new GradleCodeActionProvider(contextMock as ExtensionContext); + + const codeActionContext: CodeActionContext = { + triggerKind: CodeActionTriggerKind.Invoke, + diagnostics: [{ + range: new Range(new Position(0, 0), new Position(0, 0)), + message: 'The build file has been changed and may need reload to make it effective.', + severity: DiagnosticSeverity.Information, + source: 'Java' + }], + only: CodeActionKind.QuickFix + }; + const editor = await window.showTextDocument(Uri.file(path.join(gradleProjectFsPath, 'build.gradle'))); + const codeActions = (await provider.provideCodeActions(editor.document, null, codeActionContext, null)) as CodeAction[]; + assert.equal(codeActions.length, 1); + assert.equal(codeActions[0].command.command, Commands.CONFIGURATION_UPDATE); + }); + +}); From 43dfd1e19af7db790af963de866ad3395cdaf493 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 19 Jul 2022 22:38:52 -0400 Subject: [PATCH 187/708] Add Changelog for 1.9.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8382bec62..30b222d52 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## 1.9.0 (July 21st, 2022) + * enhancement - Package lombok into extension for use when lombok support enabled, and not on project classpath. See [#2550](https://github.com/redhat-developer/vscode-java/pull/2550). + * enhancement - Add support for qualified workspace symbols. See [#2538](https://github.com/redhat-developer/vscode-java/pull/2538). + * enhancement - Refresh the unmanaged project's classpath on demand. See [#1282](https://github.com/redhat-developer/vscode-java/issues/1282). + * enhancement - Provide reload project diagnostics on demand. See [#2575](https://github.com/redhat-developer/vscode-java/pull/2575). + * bug fix - Missing completions for fully qualified constructor names. See [JLS#2147](https://github.com/eclipse/eclipse.jdt.ls/issues/2147). + * bug fix - Completion replacement for a type proposal is incorrect in some cases. See [#2534](https://github.com/redhat-developer/vscode-java/issues/2534). + * bug fix - Project configuration is not updated after modifying build file. See [#2566](https://github.com/redhat-developer/vscode-java/issues/2566). + * bug fix - Fixed language server crashing because of wrong lombok jar. See [#2542](https://github.com/redhat-developer/vscode-java/pull/2542). + * bug fix - Do not warn about missing JDT-LS stdout/stderr log files. See [#2535](https://github.com/redhat-developer/vscode-java/issues/2535). + * bug fix - Scan two levels of directories for activation indicators. See [#2280](https://github.com/redhat-developer/vscode-java/issues/2280). + * bug fix - Correct typo in gradle checksum mismatch error message. See [JLS#2161](https://github.com/eclipse/eclipse.jdt.ls/pull/2161). + * build - wrong JRE embedded in pre-release package. See [#2559](https://github.com/redhat-developer/vscode-java/issues/2559). + * build - TypeError: `s.logFailedRequest` is not a function. See [#2480](https://github.com/redhat-developer/vscode-java/issues/2480). + * build - Compile error in `MavenBuildSupport.update(IProject, boolean, IProgressMonitor)`. See [JLS#2150](https://github.com/eclipse/eclipse.jdt.ls/issues/2150). + * build - Migrate to `@vscode/test-electron`. See [#2555](https://github.com/redhat-developer/vscode-java/pull/2555). + * build - Update moment & terser packages. See [#2580](https://github.com/redhat-developer/vscode-java/pull/2580). + ## 1.8.0 (June 30th, 2022) * enhancement - Improve the Lombok support. See [#2519](https://github.com/redhat-developer/vscode-java/pull/2519). * enhancement - Show `Add javadoc for` in quick assists. See [JLS#2133](https://github.com/eclipse/eclipse.jdt.ls/pull/2133). @@ -220,7 +238,7 @@ * bug fix - Improve handling of exported settings files. See [#1939](https://github.com/redhat-developer/vscode-java/issues/1939). * bug fix - A 'keyword' semantic token will sometimes appear when typing an expression. See [#1921](https://github.com/redhat-developer/vscode-java/issues/1921). * other - Update hosted-git-info dependency. See [#1940](https://github.com/redhat-developer/vscode-java/pull/1940). - * other - Update lodash dependency.. See [#1934](https://github.com/redhat-developer/vscode-java/pull/1934). + * other - Update lodash dependency. See [#1934](https://github.com/redhat-developer/vscode-java/pull/1934). ## 0.79.1 (May 3rd, 2021) * bug fix - Formatter doesn't load format config after update. See [#1917](https://github.com/redhat-developer/vscode-java/issues/1917). @@ -320,7 +338,7 @@ * bug fix - Error in every java file after updating to macOS Big Sur. See [#1700](https://github.com/redhat-developer/vscode-java/issues/1700). * bug fix - Fix jdk detection: cover symlink folder on Linux. See [#1704](https://github.com/redhat-developer/vscode-java/pull/1704). * bug fix - Fix jdk detection: cover common JDK installation places on Linux. See [#1706](https://github.com/redhat-developer/vscode-java/pull/1706). - * other - Improve tracing capability of m2e through m2e.logback.configuration.. See [JLS#1589](https://github.com/eclipse/eclipse.jdt.ls/pull/1589). + * other - Improve tracing capability of m2e through m2e.logback.configuration. See [JLS#1589](https://github.com/eclipse/eclipse.jdt.ls/pull/1589). * other - Infer expressions if there is no selection range when extracting method. See [#1680](https://github.com/redhat-developer/vscode-java/pull/1680). ## 0.70.0 (November 4th, 2020) From 03d6bb42d02c95331957e1a75f1b8bc51bcd261a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 21 Jul 2022 14:09:11 -0400 Subject: [PATCH 188/708] Upversion to 1.10.0 - Also fix some old typos in CHANGELOG Signed-off-by: Roland Grunberg --- CHANGELOG.md | 4 ++-- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 30b222d52..9c0a06c7c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -44,7 +44,7 @@ ## 1.7.0 (June 1st, 2022) - * enhancment - Support separate "Generate Getters" and "Generate Setters". See [#2362](https://github.com/redhat-developer/vscode-java/issues/2362). + * enhancement - Support separate "Generate Getters" and "Generate Setters". See [#2362](https://github.com/redhat-developer/vscode-java/issues/2362). * enhancement - Show field type when generating accessors. See [#2459](https://github.com/redhat-developer/vscode-java/pull/2459). * enhancement - Show quick fixes for generating accessors in field declarations. See [JLS#2092](https://github.com/eclipse/eclipse.jdt.ls/pull/2092). * enhancement - Support exclusion list for inlay hints. See [#2412](https://github.com/redhat-developer/vscode-java/issues/2412). @@ -581,7 +581,7 @@ * enhancement - code action: improve "Invert Condition" refactoring trigger. See [JLS#1230](https://github.com/eclipse/eclipse.jdt.ls/issues/1230). * enhancement - refresh the extension bundles after uninstalling. See [JLS#1253](https://github.com/eclipse/eclipse.jdt.ls/pull/1253). * bug fixed - fixed Maven import failure caused by m2e-apt unable to parse maven-compiler-plugin configuration. See [#1131](https://github.com/redhat-developer/vscode-java/issues/1131). -* bug fixed - add Java 13 support for Gradle projects. See [JLS#1196](https://github.com/eclipse/eclipse.jdt.ls/issues/1196). +* bug fixed - add Java 13 support for Gradle projects. See [JLS#1196](https://github.com/eclipse/eclipse.jdt.ls/issues/1196). * bug fixed - fixed errors reported from unrelated gradle projects outside the workspace. See [JLS#1261](https://github.com/eclipse/eclipse.jdt.ls/issues/1261). ## 0.52.0 (October 23rd, 2019) diff --git a/package-lock.json b/package-lock.json index 7ae9b678b..31ffc5edd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.9.0", + "version": "1.10.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b5aec1816..99644b8ef 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.9.0", + "version": "1.10.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From a481f05f3300dc7e23c5b5f16c09ffcf40c9b48a Mon Sep 17 00:00:00 2001 From: Mohit Suman Date: Sat, 23 Jul 2022 20:27:59 +0530 Subject: [PATCH 189/708] update Readme badges and remove travis-ci information Signed-off-by: Mohit Suman --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 09eb0eacc..25457f44b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,11 @@ Language support for Java ™ for Visual Studio Code ===================== -[![Join the chat at https://gitter.im/redhat-developer/vscode-java](https://badges.gitter.im/redhat-developer/vscode-java.svg)](https://gitter.im/redhat-developer/vscode-java?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) -[![Build Status](https://travis-ci.org/redhat-developer/vscode-java.svg?branch=master)](https://travis-ci.org/redhat-developer/vscode-java) [![Marketplace Version](https://vsmarketplacebadge.apphb.com/version/redhat.java.svg "Current Release")](https://marketplace.visualstudio.com/items?itemName=redhat.java) +[![Visual Studio Marketplace](https://img.shields.io/visual-studio-marketplace/v/redhat.java?style=for-the-badge&label=VS%20Marketplace&logo=visual-studio-code)](https://marketplace.visualstudio.com/items?itemName=redhat.java) +[![Installs](https://img.shields.io/visual-studio-marketplace/i/redhat.java?style=for-the-badge)](https://marketplace.visualstudio.com/items?itemName=redhat.java) +[![Join the chat at https://gitter.im/redhat-developer/vscode-java](https://img.shields.io/gitter/room/redhat-developer/vscode-java?style=for-the-badge&logo=gitter)](https://gitter.im/redhat-developer/vscode-java) +[![Build Status](https://img.shields.io/github/workflow/status/redhat-developer/vscode-java/pr-verify?style=for-the-badge&logo=github)](https://github.com/redhat-developer/vscode-java/actions?query=workflow:pr-verify) +[![License](https://img.shields.io/github/license/redhat-developer/vscode-java?style=for-the-badge&logo=eclipse)](https://github.com/redhat-developer/vscode-java/blob/master/LICENSE) Provides Java ™ language support via [Eclipse ™ JDT Language Server](https://github.com/eclipse/eclipse.jdt.ls), which utilizes From 787255eabbe9c91887851ce884d18c10d2062ab0 Mon Sep 17 00:00:00 2001 From: meebox Date: Mon, 18 Jul 2022 17:16:57 +0800 Subject: [PATCH 190/708] add the zh-TW (Traditional Chinese) translation file. Signed-off-by: meebox --- package.nls.zh-TW.json | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 package.nls.zh-TW.json diff --git a/package.nls.zh-TW.json b/package.nls.zh-TW.json new file mode 100644 index 000000000..ee40c7494 --- /dev/null +++ b/package.nls.zh-TW.json @@ -0,0 +1,25 @@ +{ + "java.server.mode.switch": "切換到標準模式", + "java.projectConfiguration.update": "重新載入專案", + "java.project.import": "匯入 Java 專案到工作區", + "java.open.serverLog": "開啟 Java 語言伺服器日誌檔", + "java.open.serverStdoutLog": "開啟 Java 語言伺服器輸出日誌檔", + "java.open.serverStderrLog": "開啟 Java 語言伺服器錯誤日誌檔", + "java.open.clientLog": "開啟 Java 延伸模組日誌檔", + "java.open.logs": "開啟所有日誌檔", + "java.workspace.compile": "強制編譯 Java", + "java.project.build": "重新建置專案", + "java.open.formatter.settings": "開啟 Java 格式設定", + "java.clean.workspace": "清理 Java 語言伺服器工作區", + "java.project.updateSourceAttachment": "附加原始碼", + "java.project.addToSourcePath": "將資料夾加入 Java 原始馬路徑", + "java.project.removeFromSourcePath": "從 Java 原始馬路徑中移除資料夾", + "java.project.listSourcePaths": "列出所有 Java 原始馬路徑", + "java.show.server.task.status": "顯示建置工作狀態", + "java.action.navigateToSuperImplementation": "移到父類別中的實作", + "java.action.showTypeHierarchy": "顯示型別階層結構", + "java.action.showClassHierarchy": "顯示類別階層結構", + "java.action.showSupertypeHierarchy": "顯示父類別階層結構", + "java.action.showSubtypeHierarchy": "顯示子類別階層結構", + "java.action.changeBaseType": "以此型別為基礎" +} From 646266e28d8cbded594eae076341f58de582c4ae Mon Sep 17 00:00:00 2001 From: meebox Date: Mon, 18 Jul 2022 17:36:08 +0800 Subject: [PATCH 191/708] fix typos. Signed-off-by: meebox --- package.nls.zh-TW.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.nls.zh-TW.json b/package.nls.zh-TW.json index ee40c7494..6b9d0bd19 100644 --- a/package.nls.zh-TW.json +++ b/package.nls.zh-TW.json @@ -12,9 +12,9 @@ "java.open.formatter.settings": "開啟 Java 格式設定", "java.clean.workspace": "清理 Java 語言伺服器工作區", "java.project.updateSourceAttachment": "附加原始碼", - "java.project.addToSourcePath": "將資料夾加入 Java 原始馬路徑", - "java.project.removeFromSourcePath": "從 Java 原始馬路徑中移除資料夾", - "java.project.listSourcePaths": "列出所有 Java 原始馬路徑", + "java.project.addToSourcePath": "將資料夾加入 Java 原始碼路徑", + "java.project.removeFromSourcePath": "從 Java 始碼路徑中移除資料夾", + "java.project.listSourcePaths": "列出所有 Java 始碼路徑", "java.show.server.task.status": "顯示建置工作狀態", "java.action.navigateToSuperImplementation": "移到父類別中的實作", "java.action.showTypeHierarchy": "顯示型別階層結構", From ba9a2bc74fee6f4e281801bc94736d25a71b7a28 Mon Sep 17 00:00:00 2001 From: meebox Date: Mon, 25 Jul 2022 17:01:11 +0800 Subject: [PATCH 192/708] correct labguage file name. Signed-off-by: meebox --- package.nls.zh.json => package.nls.zh-cn.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename package.nls.zh.json => package.nls.zh-cn.json (100%) diff --git a/package.nls.zh.json b/package.nls.zh-cn.json similarity index 100% rename from package.nls.zh.json rename to package.nls.zh-cn.json From 5fa5fbcda04e15e4c60738478c774f89109843b7 Mon Sep 17 00:00:00 2001 From: meebox Date: Mon, 25 Jul 2022 17:04:09 +0800 Subject: [PATCH 193/708] fix language file name for zh-tw. Signed-off-by: meebox --- package.nls.zh-TW.json => package.nls.zh-tw.json | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename package.nls.zh-TW.json => package.nls.zh-tw.json (100%) diff --git a/package.nls.zh-TW.json b/package.nls.zh-tw.json similarity index 100% rename from package.nls.zh-TW.json rename to package.nls.zh-tw.json From 1a8a547b262062e643e22029f62fda0f3fd024c8 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 1 Aug 2022 10:30:10 +0800 Subject: [PATCH 194/708] Skip security warning for workspace settings 'java.home' and 'java.jdt.ls.java.home' in a trusted workspace (#2607) Signed-off-by: Jinbo Wang --- src/settings.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/settings.ts b/src/settings.ts index 529c0ca42..5c06ea6c2 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -164,7 +164,7 @@ export async function checkJavaPreferences(context: ExtensionContext): Promise<{ const key = getKey(IS_WORKSPACE_JLS_JDK_ALLOWED, context.storagePath, javaHome); const globalState = context.globalState; if (!isVerified) { - isVerified = globalState.get(key); + isVerified = workspace.isTrusted || globalState.get(key); if (isVerified === undefined) { await window.showErrorMessage(`Security Warning! Do you allow this workspace to set the java.jdt.ls.java.home variable? \n java.jdt.ls.java.home: ${javaHome}`, disallow, allow).then(async selection => { if (selection === allow) { @@ -191,7 +191,7 @@ export async function checkJavaPreferences(context: ExtensionContext): Promise<{ const key = getKey(IS_WORKSPACE_JDK_ALLOWED, context.storagePath, javaHome); const globalState = context.globalState; if (!isVerified) { - isVerified = globalState.get(key); + isVerified = workspace.isTrusted || globalState.get(key); if (isVerified === undefined) { await window.showErrorMessage(`Security Warning! Do you allow this workspace to set the java.home variable? \n java.home: ${javaHome}`, disallow, allow).then(async selection => { if (selection === allow) { From c397ac0eebfd8d97e7c13485b540a02da3ebb0b1 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 1 Aug 2022 13:31:41 +0800 Subject: [PATCH 195/708] Fix the activation events regression (#2608) Signed-off-by: sheche --- package.json | 18 ++++++++++++------ src/gradle/gradleCodeActionProvider.ts | 2 +- src/pom/pomCodeActionProvider.ts | 4 ++-- .../codeActionProvider.test.ts | 16 ++++++++-------- test/standard-mode-suite/extension.test.ts | 17 +++++++++++++++-- 5 files changed, 38 insertions(+), 19 deletions(-) diff --git a/package.json b/package.json index 99644b8ef..ad2b577ef 100644 --- a/package.json +++ b/package.json @@ -40,12 +40,18 @@ ], "activationEvents": [ "onLanguage:java", - "workspaceContains:{*/,}pom.xml", - "workspaceContains:{*/,}build.gradle", - "workspaceContains:{*/,}settings.gradle", - "workspaceContains:{*/,}build.gradle.kts", - "workspaceContains:{*/,}settings.gradle.kts", - "workspaceContains:{*/,}.classpath", + "workspaceContains:pom.xml", + "workspaceContains:*/pom.xml", + "workspaceContains:build.gradle", + "workspaceContains:*/build.gradle", + "workspaceContains:settings.gradle", + "workspaceContains:*/settings.gradle", + "workspaceContains:build.gradle.kts", + "workspaceContains:*/build.gradle.kts", + "workspaceContains:settings.gradle.kts", + "workspaceContains:*/settings.gradle.kts", + "workspaceContains:.classpath", + "workspaceContains:*/.classpath", "onCommand:_java.templateVariables", "onCommand:_java.metadataFilesGeneration" ], diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts index d3f6983f7..123c43ff4 100644 --- a/src/gradle/gradleCodeActionProvider.ts +++ b/src/gradle/gradleCodeActionProvider.ts @@ -26,7 +26,7 @@ export class GradleCodeActionProvider implements CodeActionProvider return []; } - private async provideGradleCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): Promise { + async provideGradleCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): Promise { const codeActions = []; for (const diagnostic of diagnostics) { if (diagnostic.message?.startsWith("The build file has been changed")) { diff --git a/src/pom/pomCodeActionProvider.ts b/src/pom/pomCodeActionProvider.ts index 8c5cfe1cc..818c6d3fb 100644 --- a/src/pom/pomCodeActionProvider.ts +++ b/src/pom/pomCodeActionProvider.ts @@ -20,7 +20,7 @@ export class PomCodeActionProvider implements CodeActionProvider { return undefined; } - private collectCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction[] { + collectCodeActions(document: TextDocument, diagnostics: readonly Diagnostic[]): CodeAction[] { const codeActions: CodeAction[] = []; for (const diagnostic of diagnostics) { if (diagnostic.message?.startsWith("Plugin execution not covered by lifecycle configuration")) { @@ -62,7 +62,7 @@ export class PomCodeActionProvider implements CodeActionProvider { return codeActions; } - private getNewTextIndentation(document: TextDocument, diagnostic: Diagnostic): string { + getNewTextIndentation(document: TextDocument, diagnostic: Diagnostic): string { const textline = document.lineAt(diagnostic.range.end.line); if (textline.text.lastIndexOf("") > diagnostic.range.end.character) { return ""; diff --git a/test/standard-mode-suite/codeActionProvider.test.ts b/test/standard-mode-suite/codeActionProvider.test.ts index 0a8799da6..d856ab86a 100644 --- a/test/standard-mode-suite/codeActionProvider.test.ts +++ b/test/standard-mode-suite/codeActionProvider.test.ts @@ -2,6 +2,7 @@ import * as assert from 'assert'; import * as path from 'path'; +import * as sinon from 'sinon'; import { CodeAction, CodeActionContext, CodeActionKind, CodeActionTriggerKind, DiagnosticSeverity, ExtensionContext, Position, Range, Uri, window } from "vscode"; import { Commands } from '../../src/commands'; import { GradleCodeActionProvider } from '../../src/gradle/gradleCodeActionProvider'; @@ -14,10 +15,10 @@ const gradleProjectFsPath: string = path.join(__dirname, '..', '..', '..', 'test suite('Code Action Provider Test', () => { test('Provide reload project action on demand for pom file', async function () { - const contextMock = { - subscriptions: [] - }; - const provider = new PomCodeActionProvider(contextMock as ExtensionContext); + const provider = sinon.createStubInstance(PomCodeActionProvider); + provider.provideCodeActions.restore(); + provider.getNewTextIndentation.restore(); + provider.collectCodeActions.restore(); const codeActionContext: CodeActionContext = { triggerKind: CodeActionTriggerKind.Invoke, @@ -36,10 +37,9 @@ suite('Code Action Provider Test', () => { }); test('Provide reload project action on demand for gradle file', async function () { - const contextMock = { - subscriptions: [] - }; - const provider = new GradleCodeActionProvider(contextMock as ExtensionContext); + const provider = sinon.createStubInstance(GradleCodeActionProvider); + provider.provideCodeActions.restore(); + provider.provideGradleCodeActions.restore(); const codeActionContext: CodeActionContext = { triggerKind: CodeActionTriggerKind.Invoke, diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 76586f0ad..74a293a43 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -15,9 +15,22 @@ suite('Java Language Extension - Standard', () => { assert.ok(vscode.extensions.getExtension('redhat.java')); }); - test('should activate', function () { + test('should activate', async function () { + this.timeout(60000 * 2); + const ext = vscode.extensions.getExtension('redhat.java'); + while (true) { + await new Promise(resolve => { + setTimeout(resolve, 5000); + }); + if (ext.isActive) { + break; + } + } + }); + + test('should return api after activation', function () { return vscode.extensions.getExtension('redhat.java').activate().then((api) => { - assert.ok(true); + assert.ok(!!api); }); }); From 184111d90e8822af1e37cc0ba4292514da384790 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 3 Aug 2022 12:30:15 +0800 Subject: [PATCH 196/708] Make the wording in notifications consistent (#2594) Signed-off-by: Sheng Chen --- src/extension.ts | 2 +- src/lombokSupport.ts | 4 ++-- src/settings.ts | 12 ++++++------ 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index c598df024..182155b1d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -720,7 +720,7 @@ function makeRandomHexString(length) { async function cleanWorkspace(workspacePath, force?: boolean) { if (!force) { - const doIt = 'Restart and delete'; + const doIt = 'Reload and delete'; const selection = await window.showWarningMessage('Are you sure you want to clean the Java language server workspace?', 'Cancel', doIt); if (selection !== doIt) { return; diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index a630af925..4324cde05 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -168,7 +168,7 @@ export async function checkLombokDependency(context: ExtensionContext) { context.workspaceState.update(JAVA_LOMBOK_PATH, currentLombokClasspath); const msg = `Lombok version changed from ${previousLombokVersion.split('.jar')[0].split('-')[1]} to ${currentLombokVersion.split('.jar')[0].split('-')[1]} \ . Do you want to reload the window to load the new Lombok version?`; - const action = 'Reload Now'; + const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; window.showInformationMessage(msg, action).then((selection) => { if (action === selection) { @@ -228,7 +228,7 @@ export function registerLombokConfigureCommand(context: ExtensionContext) { } if (shouldReload) { const msg = `The Lombok version used in Java extension has changed, please reload the window.`; - const action = 'Reload Now'; + const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; window.showInformationMessage(msg, action).then((selection) => { if (action === selection) { diff --git a/src/settings.ts b/src/settings.ts index 5c06ea6c2..2dbedbbff 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -46,8 +46,8 @@ export function onConfigurationChange(workspacePath: string, context: ExtensionC fs.closeSync(fs.openSync(file, 'w')); } if (isFsModeChanged || hasJavaConfigChanged(oldConfig, newConfig)) { - const msg = `Java Language Server configuration changed, please restart ${env.appName}.`; - const action = 'Restart Now'; + const msg = `Java Language Server configuration changed, please reload ${env.appName}.`; + const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; window.showWarningMessage(msg, action).then((selection) => { if (action === selection) { @@ -57,8 +57,8 @@ export function onConfigurationChange(workspacePath: string, context: ExtensionC } if (hasConfigKeyChanged('jdt.ls.lombokSupport.enabled', oldConfig, newConfig)) { if (newConfig.get("jdt.ls.lombokSupport.enabled")) { - const msg = `Lombok support is enabled, please restart ${env.appName}.`; - const action = 'Restart Now'; + const msg = `Lombok support is enabled, please reload ${env.appName}.`; + const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; window.showWarningMessage(msg, action).then((selection) => { if (action === selection) { @@ -68,8 +68,8 @@ export function onConfigurationChange(workspacePath: string, context: ExtensionC } else { cleanupLombokCache(context); - const msg = `Lombok support is disabled, please restart ${env.appName}.`; - const action = 'Restart Now'; + const msg = `Lombok support is disabled, please reload ${env.appName}.`; + const action = 'Reload'; const restartId = Commands.RELOAD_WINDOW; window.showWarningMessage(msg, action).then((selection) => { if (action === selection) { From 5a4a1aadacd17d0ae3ccdf4a3501f4b1a1a3312e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Will=20=E4=BF=9D=E5=93=A5?= Date: Mon, 1 Aug 2022 02:38:35 +0800 Subject: [PATCH 197/708] fine-tune new, ctor, try_catch and try_resources snippets Signed-off-by: Will --- snippets/java.json | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/snippets/java.json b/snippets/java.json index fa66f73cc..cac5a264c 100644 --- a/snippets/java.json +++ b/snippets/java.json @@ -12,7 +12,7 @@ "prefix": "ctor", "body": [ "public ${1:${TM_FILENAME_BASE}}($2) {", - "\t${0:super();}", + "\t${3:super();}$0", "}" ], "description": "Public constructor" @@ -23,7 +23,7 @@ "try {", "\t$1", "} catch (${2:Exception} ${3:e}) {", - "\t$4//${0:TODO}: handle exception", + "\t$0// TODO: handle exception", "}" ], "description": "try/catch block" @@ -34,7 +34,7 @@ "try ($1) {", "\t$2", "} catch (${3:Exception} ${4:e}) {", - "\t$5//${0:TODO}: handle exception", + "\t$0// TODO: handle exception", "}" ] }, @@ -100,7 +100,8 @@ "newObject": { "prefix": "new", "body": [ - "${0:Object} ${1:foo} = new ${0:Object}();" + "${1:Object} ${2:foo} = new ${1}($3);", + "$0" ], "description": "Create new Object" }, From 821ba94145c9d983d8f53a90e70627029fea030d Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Fri, 29 Jul 2022 13:57:35 +0800 Subject: [PATCH 198/708] update deps: jdk-utils@0.4.4 Signed-off-by: Yan Zhang --- package-lock.json | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 31ffc5edd..58ae89480 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3316,9 +3316,9 @@ "dev": true }, "jdk-utils": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.3.tgz", - "integrity": "sha512-6d4tEkaBfpbQy32TF8lt+CFYaaWicBQEekWO5HozSzSMY4Y2ufsdNhpUbza0r2cuGEzoScE1r8vd9wkuUgypAA==" + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.4.tgz", + "integrity": "sha512-QSwVdPtwdHRvY6zDD0GOZo5Fu7AdgfNDyizZWhk16jnrcLTPbmsww4WLDC+5wyxCWm8izZZfmjTVcicdreuJLw==" }, "jest-worker": { "version": "26.6.2", diff --git a/package.json b/package.json index ad2b577ef..84984462e 100644 --- a/package.json +++ b/package.json @@ -1247,7 +1247,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.4.3", + "jdk-utils": "^0.4.4", "semver": "^7.3.5", "vscode-languageclient": "7.1.0-next.5", "winreg-utf8": "^0.1.1", From 6d8884d1fee25f146f687b1fd9703fa574c0d963 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Wed, 10 Aug 2022 01:34:34 +0200 Subject: [PATCH 199/708] Add the java.import.maven.offline.enabled property (#2617) Signed-off-by: Snjezana Peco --- README.md | 3 +++ package.json | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 25457f44b..61c374751 100644 --- a/README.md +++ b/README.md @@ -206,6 +206,9 @@ The following settings are supported: * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. +New in 1.10.0 +* `java.import.maven.offline.enabled` : Enable/disable the Maven offline mode. Defaults to `false`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 84984462e..c777d0b1b 100644 --- a/package.json +++ b/package.json @@ -250,6 +250,12 @@ "description": "Enable/disable the Maven importer.", "scope": "window" }, + "java.import.maven.offline.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable the Maven offline mode.", + "scope": "window" + }, "java.import.gradle.enabled": { "type": "boolean", "default": true, From 63ee5b12c36b3e703283a31406412100e9e1d672 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 10 Aug 2022 09:50:33 +0800 Subject: [PATCH 200/708] Use plural form for reload projects command title (#2612) * Use plural form for reload projects command title Signed-off-by: sheche --- README.md | 2 +- document/_java.notCoveredExecution.md | 2 +- package.nls.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 61c374751..cc36d4f74 100644 --- a/README.md +++ b/README.md @@ -94,7 +94,7 @@ Available commands ========================== The following commands are available: - `Switch to Standard Mode`: switches the Java Language Server to `Standard` mode. This command is only available when the Java Language Server is in `LightWeight` mode. -- `Java: Reload Project` (`Shift+Alt+U`): It forces project configuration / classpath updates (eg. dependency changes or Java compilation level), according to the project build descriptor. +- `Java: Reload Projects` (`Shift+Alt+U`): It forces project configuration / classpath updates (eg. dependency changes or Java compilation level), according to the project build descriptor. - `Java: Import Java Projects into Workspace`: detects and imports all the Java projects into the Java Language Server workspace. - `Java: Open Java Language Server Log File`: opens the Java Language Server log file, useful for troubleshooting problems. - `Java: Open Java Extension Log File`: opens the Java extension log file, useful for troubleshooting problems. diff --git a/document/_java.notCoveredExecution.md b/document/_java.notCoveredExecution.md index 684011c64..9ac8b9c1d 100644 --- a/document/_java.notCoveredExecution.md +++ b/document/_java.notCoveredExecution.md @@ -42,7 +42,7 @@ Some Maven projects use 3rd party Maven plugins to generate sources or resources For example, add [a processing instruction in the pom.xml](https://www.eclipse.org/m2e/documentation/release-notes-17.html#new-syntax-for-specifying-lifecycle-mapping-metadata) like `` to execute it on every project configuration update. -You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Reload Project"`. +You can use quick fixes to generate the inline lifecycle mapping in pom.xml, or manually configure it in pom.xml. If it's yourself that manually configure it, you have to let VS Code update the project configuration as well. The command is `"Java: Reload Projects"`. ```xml diff --git a/package.nls.json b/package.nls.json index e0c71b3b6..97f7d3e45 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,6 +1,6 @@ { "java.server.mode.switch": "Switch to Standard Mode", - "java.projectConfiguration.update": "Reload Project", + "java.projectConfiguration.update": "Reload Projects", "java.project.import": "Import Java Projects into Workspace", "java.open.serverLog": "Open Java Language Server Log File", "java.open.serverStdoutLog": "Open Java Language Server Output Log File", From 4a1b23dabdfd03cee0324f2d8487df9b5a9d3911 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 10 Aug 2022 09:50:54 +0800 Subject: [PATCH 201/708] add avoidVolatileChanges configuration (#2614) Signed-off-by: Shi Chen --- README.md | 1 + package.json | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index cc36d4f74..aec5c1d93 100644 --- a/README.md +++ b/README.md @@ -208,6 +208,7 @@ The following settings are supported: New in 1.10.0 * `java.import.maven.offline.enabled` : Enable/disable the Maven offline mode. Defaults to `false`. +* `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. Semantic Highlighting =============== diff --git a/package.json b/package.json index c777d0b1b..b85f884ce 100644 --- a/package.json +++ b/package.json @@ -916,6 +916,12 @@ "default": true, "description": "Whether to load lombok processors from project classpath", "scope": "window" + }, + "java.codeAction.sortMembers.avoidVolatileChanges": { + "type": "boolean", + "default": true, + "description": "Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring.", + "scope": "window" } } }, From b7fd9dcdc3b37871aab8aa141453b20e6651cd5a Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 18 Aug 2022 17:11:26 +0800 Subject: [PATCH 202/708] Make the setting 'java.import.gradle.java.home' to be machine-overridable (#2624) Signed-off-by: Jinbo Wang --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index b85f884ce..cb880ee91 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "java.jdt.ls.java.home", "java.home", "java.jdt.ls.vmargs", - "java.configuration.runtimes" + "java.configuration.runtimes", + "java.import.gradle.java.home" ] }, "virtualWorkspaces": false @@ -284,7 +285,7 @@ "type": "string", "default": null, "description": "The location to the JVM used to run the Gradle daemon.", - "scope": "machine" + "scope": "machine-overridable" }, "java.import.gradle.offline.enabled": { "type": "boolean", From ab3e745d90d75ae980353d07c6d312e7c1a7f7ed Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 19 Aug 2022 02:49:30 +0800 Subject: [PATCH 203/708] Skip default project when detecting lombok (#2633) * Extract utility to filter default project when getting all java projects Signed-off-by: Sheng Chen --- src/lombokSupport.ts | 3 ++- src/runtimeStatusBarProvider.ts | 4 ++-- src/standardLanguageClient.ts | 6 +++--- src/standardLanguageClientUtils.ts | 7 ++----- src/utils.ts | 19 ++++++++++++++++++- 5 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index 4324cde05..92a1e9666 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -10,6 +10,7 @@ import { apiManager } from "./apiManager"; import { supportsLanguageStatus } from "./languageStatusItemFactory"; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { logger } from './log'; +import { getAllJavaProjects } from "./utils"; export const JAVA_LOMBOK_PATH = "java.lombokPath"; @@ -126,7 +127,7 @@ export async function checkLombokDependency(context: ExtensionContext) { let currentLombokVersion: string = undefined; let previousLombokVersion: string = undefined; let currentLombokClasspath: string = undefined; - const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + const projectUris: string[] = await getAllJavaProjects(); for (const projectUri of projectUris) { const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'test'}); for (const classpath of classpathResult.classpaths) { diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index eaf66b655..b1161e19b 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -9,7 +9,7 @@ import { apiManager } from "./apiManager"; import * as semver from "semver"; import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; -import { getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getJavaConfiguration } from "./utils"; import { hasBuildToolConflicts } from "./extension"; import { LombokVersionItemFactory, getLombokVersion, isLombokImported } from "./lombokSupport"; @@ -51,7 +51,7 @@ class RuntimeStatusBarProvider implements Disposable { let projectUriStrings: string[]; try { - projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + projectUriStrings = await getAllJavaProjects(false); } catch (e) { return; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 91c9ab8cc..a0d36c68a 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -15,7 +15,7 @@ import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from import * as net from 'net'; import * as fse from 'fs-extra'; import * as path from 'path'; -import { getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getJavaConfiguration } from "./utils"; import { logger } from "./log"; import * as buildPath from './buildpath'; import * as sourceAction from './sourceAction'; @@ -609,8 +609,8 @@ async function showImportFinishNotification(context: ExtensionContext) { options.unshift("Show errors"); choice = await window.showWarningMessage("Errors occurred during import of Java projects.", ...options); } else { - const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); - if (projectUris.length === 0 || (projectUris.length === 1 && projectUris[0].includes("jdt.ls-java-project"))) { + const projectUris: string[] = await getAllJavaProjects(); + if (projectUris.length === 0) { return; } diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts index e70f3f2df..8d682b529 100644 --- a/src/standardLanguageClientUtils.ts +++ b/src/standardLanguageClientUtils.ts @@ -8,6 +8,7 @@ import { LanguageClient } from "vscode-languageclient/node"; import { buildFilePatterns } from "./plugin"; import { ProjectConfigurationUpdateRequest } from "./protocol"; import { Commands } from "./commands"; +import { getAllJavaProjects } from "./utils"; export async function projectConfigurationUpdate(languageClient: LanguageClient, uris?: TextDocumentIdentifier | Uri | Uri[]) { let resources = []; @@ -85,17 +86,13 @@ export async function askForProjects(activeFileUri: Uri | undefined, placeHolder async function generateProjectPicks(activeFileUri: Uri | undefined): Promise { let projectUriStrings: string[]; try { - projectUriStrings = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + projectUriStrings = await getAllJavaProjects(); } catch (e) { return undefined; } const projectPicks: QuickPickItem[] = projectUriStrings.map(uriString => { const projectPath = Uri.parse(uriString).fsPath; - if (path.basename(projectPath) === "jdt.ls-java-project") { - return undefined; - } - return { label: path.basename(projectPath), detail: projectPath, diff --git a/src/utils.ts b/src/utils.ts index a4b4898bb..c72fa8d7b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,7 +2,8 @@ import * as fs from 'fs'; import * as path from 'path'; -import { workspace, WorkspaceConfiguration, TextDocument } from 'vscode'; +import { workspace, WorkspaceConfiguration, TextDocument, commands, Uri } from 'vscode'; +import { Commands } from './commands'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -115,3 +116,19 @@ function parseToStringGlob(patterns: string[]): string { return `{${patterns.join(",")}}`; } + +/** + * Get all Java projects from Java Language Server. + * @param excludeDefaultProject whether the default project should be excluded from the list, defaults to true. + * @returns string array for the project uris. + */ +export async function getAllJavaProjects(excludeDefaultProject: boolean = true): Promise { + let projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + if (excludeDefaultProject) { + projectUris = projectUris.filter((uriString) => { + const projectPath = Uri.parse(uriString).fsPath; + return path.basename(projectPath) !== "jdt.ls-java-project"; + }); + } + return projectUris; +} From 60b41ea8d8d2f6f7b53eb4a2ba506a507d2d0d30 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 22 Aug 2022 12:51:42 +0800 Subject: [PATCH 204/708] Automatically add Protobuf output source directories to clsspath (#2629) Signed-off-by: sheche --- README.md | 3 ++- package.json | 6 ++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index aec5c1d93..3e60a5533 100644 --- a/README.md +++ b/README.md @@ -207,8 +207,9 @@ The following settings are supported: * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. New in 1.10.0 -* `java.import.maven.offline.enabled` : Enable/disable the Maven offline mode. Defaults to `false`. +* `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. +* `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. Semantic Highlighting =============== diff --git a/package.json b/package.json index cb880ee91..309b02551 100644 --- a/package.json +++ b/package.json @@ -918,6 +918,12 @@ "description": "Whether to load lombok processors from project classpath", "scope": "window" }, + "java.jdt.ls.protobufSupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Specify whether to automatically add Protobuf output source directories to the classpath.\n\n**Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher.", + "scope": "window" + }, "java.codeAction.sortMembers.avoidVolatileChanges": { "type": "boolean", "default": true, From e53156dfc6379775fe23c8af1d3bc1a238e09304 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Sat, 27 Aug 2022 01:13:08 +0800 Subject: [PATCH 205/708] GH2577: Add '-Xlog:jni+resolve=off' to the default vmargs (#2646) * Add '-Xlog:jni+resolve' to vmargs dynamically Signed-off-by: Jinbo Wang --- package.json | 4 ++-- src/javaServerStarter.ts | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 309b02551..3405f5044 100644 --- a/package.json +++ b/package.json @@ -196,8 +196,8 @@ "string", "null" ], - "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m", - "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m ` to optimize memory usage with the parallel garbage collector", + "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:jni+resolve=off", + "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:jni+resolve=off` to optimize memory usage with the parallel garbage collector", "scope": "machine-overridable" }, "java.errors.incompleteClasspath.severity": { diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 73c91965a..f032b9cea 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -111,6 +111,9 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp params.push(watchParentProcess + 'false'); } } + if (vmargs.indexOf('-Xlog:jni+resolve=') < 0) { + params.push('-Xlog:jni+resolve=off'); + } parseVMargs(params, vmargs); From 164619ee87df66772bfc8ed367db5444d9c074ea Mon Sep 17 00:00:00 2001 From: Daniel Scalzi Date: Fri, 26 Aug 2022 16:05:02 -0400 Subject: [PATCH 206/708] Support Java Properties grammar. (#2636) * Place language configuration & TextMate grammar under language-support. * Add aliases attribute for user-friendly display Co-authored-by: Roland Grunberg --- .../java/language-configuration.json | 0 .../properties/JavaProperties.tmLanguage.json | 103 ++++++++++++++++++ .../java-properties-configuration.json | 67 ++++++++++++ package.json | 19 +++- 4 files changed, 188 insertions(+), 1 deletion(-) rename language-configuration.json => language-support/java/language-configuration.json (100%) create mode 100644 language-support/properties/JavaProperties.tmLanguage.json create mode 100644 language-support/properties/java-properties-configuration.json diff --git a/language-configuration.json b/language-support/java/language-configuration.json similarity index 100% rename from language-configuration.json rename to language-support/java/language-configuration.json diff --git a/language-support/properties/JavaProperties.tmLanguage.json b/language-support/properties/JavaProperties.tmLanguage.json new file mode 100644 index 000000000..60b4ee34c --- /dev/null +++ b/language-support/properties/JavaProperties.tmLanguage.json @@ -0,0 +1,103 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/textmate/java.tmbundle/blob/master/Syntaxes/JavaProperties.plist", + "If you want to provide a fix or improvement, please create a pull request against the original repository.", + "Once accepted there, we are happy to receive an update request." + ], + "version": "https://github.com/textmate/java.tmbundle/blob/79b8b61865e40de0ff04bb16fe1076b154b9894c/Syntaxes/JavaProperties.plist", + "fileTypes": [ + "properties" + ], + "foldingStartMarker": "^[a-zA-Z0-9.-_]+=.*\\\r\n", + "foldingStopMarker": "^(.*(?" + ] + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 3405f5044..b477f601e 100644 --- a/package.json +++ b/package.json @@ -153,7 +153,24 @@ ".java", ".class" ], - "configuration": "./language-configuration.json" + "configuration": "./language-support/java/language-configuration.json" + }, + { + "id": "java-properties", + "aliases": [ + "Java Properties" + ], + "extensions": [ + ".properties" + ], + "configuration": "./language-support/properties/java-properties-configuration.json" + } + ], + "grammars": [ + { + "language": "java-properties", + "scopeName": "source.java-properties", + "path": "./language-support/properties/JavaProperties.tmLanguage.json" } ], "snippets": [ From 29cd5729403e454c228a183f1f4d1b50d137df59 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Tue, 30 Aug 2022 10:29:01 +0800 Subject: [PATCH 207/708] Support Android project (#2644) 1. Add experimental Android support 2. Add `auto` option to automatically enable the support in insiders Signed-off-by: Shi Chen --- README.md | 5 ++--- package.json | 11 +++++++++++ src/extension.ts | 17 ++++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3e60a5533..54f0186ad 100644 --- a/README.md +++ b/README.md @@ -25,7 +25,7 @@ Features * Supports code from Java 1.5 to Java 18 * Maven pom.xml project support -* Basic Gradle Java project support (Android not supported) +* Gradle project support (with experimental Android project import support) * Standalone Java files support * As-you-type reporting of parsing and compilation errors * Code completion @@ -48,8 +48,6 @@ Features * Call Hierarchy * Type Hierarchy -Please note that [Gradle-based Android projects are not supported](https://github.com/redhat-developer/vscode-java/issues/10#issuecomment-268834749). - To launch and debug your Java programs, it's recommended you install *[Java Debug Extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug)*. See the [changelog](CHANGELOG.md) for the latest release. You might also find useful information in the project [Wiki](https://github.com/redhat-developer/vscode-java/wiki). @@ -210,6 +208,7 @@ New in 1.10.0 * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. +* `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. Semantic Highlighting =============== diff --git a/package.json b/package.json index b477f601e..c2995732b 100644 --- a/package.json +++ b/package.json @@ -941,6 +941,17 @@ "markdownDescription": "Specify whether to automatically add Protobuf output source directories to the classpath.\n\n**Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher.", "scope": "window" }, + "java.jdt.ls.androidSupport.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders.\n\n**Note:** Only works for Android Gradle Plugin `3.2.0` or higher.", + "scope": "window" + }, "java.codeAction.sortMembers.avoidVolatileChanges": { "type": "boolean", "default": true, diff --git a/src/extension.ts b/src/extension.ts index 182155b1d..4b57683fa 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -4,7 +4,7 @@ import * as path from 'path'; import * as os from 'os'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic, CodeActionTriggerKind } from 'vscode'; +import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic, CodeActionTriggerKind, version } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; @@ -633,6 +633,21 @@ export function getJavaConfig(javaHome: string) { const editorConfig = workspace.getConfiguration('editor'); javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); javaConfig.format.tabSize = editorConfig.get('tabSize'); + const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; + switch (androidSupport) { + case "auto": + javaConfig.jdt.ls.androidSupport.enabled = version.includes("insider") ? true : false; + break; + case "on": + javaConfig.jdt.ls.androidSupport.enabled = true; + break; + case "off": + javaConfig.jdt.ls.androidSupport.enabled = false; + break; + default: + javaConfig.jdt.ls.androidSupport.enabled = false; + break; + } return javaConfig; } From 226f526267b53508c8877b15ef7debcbf8890613 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 29 Aug 2022 18:22:02 -0400 Subject: [PATCH 208/708] Add Changelog for 1.10.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c0a06c7c..b27bd6385 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 1.10.0 (August 31st, 2022) + * enhancement - Search more folders to infer source roots for invisible projects. See [JLS#2176](https://github.com/eclipse/eclipse.jdt.ls/pull/2176). + * enhancement - Experimental support for Android projects with `java.jdt.ls.androidSupport.enabled`. It is enabled by default only in VS Code Insiders. See [JLS#923](https://github.com/eclipse/eclipse.jdt.ls/issues/923). + * enhancement - Automatically add Protobuf output source directories to classpath & generate tasks, if necessary. See [#2629](https://github.com/redhat-developer/vscode-java/pull/2629) & [JLS#2195](https://github.com/eclipse/eclipse.jdt.ls/pull/2195). + * enhancement - Support "Sort Members" code action. See [#2139](https://github.com/redhat-developer/vscode-java/issues/2139). + * enhancement - Add grammar for Java Properties files. See [#2636](https://github.com/redhat-developer/vscode-java/pull/2636). + * enhancement - Always interpret the full workspace symbol query as a package name. See [JLS#2174](https://github.com/eclipse/eclipse.jdt.ls/pull/2174). + * enhancement - Add support for Maven offline mode (`java.import.maven.offline.enabled`). See [#2617](https://github.com/redhat-developer/vscode-java/pull/2617). + * enhancement - Add the `zh-TW` (Traditional Chinese) translation file. See [#2573](https://github.com/redhat-developer/vscode-java/pull/2573). + * bug fix - Prevent "Header must provide a Content-Length property" failure by restricting JVM logging. See [#2577](https://github.com/redhat-developer/vscode-java/issues/2577). + * bug fix - Infer the source root only when necessary. See [JLS#2178](https://github.com/eclipse/eclipse.jdt.ls/pull/2178). + * bug fix - Fix inlay hints for `record` classes. See [#2414](https://github.com/redhat-developer/vscode-java/issues/2414). + * bug fix - Fix formatting of the `new` snippets. See [#2605](https://github.com/redhat-developer/vscode-java/issues/2605). + * bug fix - Make `java.import.gradle.java.home` property machine-overridable. See [#2624](https://github.com/redhat-developer/vscode-java/pull/2624). + * bug fix - Set default severity of "Circular classpath" to "warning". See [#718](https://github.com/redhat-developer/vscode-java/issues/718). + * bug fix - Permit non-JDT errors to be reported in Java files. See [JLS#2154](https://github.com/eclipse/eclipse.jdt.ls/issues/2154). + * bug fix - Avoid naming conflicts between Gradle project modules. See [JLS#2190](https://github.com/eclipse/eclipse.jdt.ls/pull/2190). + * bug fix - Re-fetch the extension registry when delegate command lookup fails. See [JLS#2184](https://github.com/eclipse/eclipse.jdt.ls/pull/2184). + * bug fix - Skip the "default project" when detecting Lombok. See [#2633](https://github.com/redhat-developer/vscode-java/pull/2633). + * bug fix - Skip security check for `java.home` and `java.jdt.ls.java.home` in trusted workspace. See [#2600](https://github.com/redhat-developer/vscode-java/issues/2600). + * bug fix - Keep consistent style in notifications (eg. use "Reload") and use plural form for `Reload Projects` command title. See [#2585](https://github.com/redhat-developer/vscode-java/issues/2585) & [#2612](https://github.com/redhat-developer/vscode-java/pull/2612). + * dependencies - Update to `jdk-utils@0.4.4`. See [#2601](https://github.com/redhat-developer/vscode-java/pull/2601). + * debt - Remove stale Travis CI information from `README`. See [#2592](https://github.com/redhat-developer/vscode-java/issues/2592). + ## 1.9.0 (July 21st, 2022) * enhancement - Package lombok into extension for use when lombok support enabled, and not on project classpath. See [#2550](https://github.com/redhat-developer/vscode-java/pull/2550). * enhancement - Add support for qualified workspace symbols. See [#2538](https://github.com/redhat-developer/vscode-java/pull/2538). From 92652c8e9edd5c118d85fccaecaee94a4409d410 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 31 Aug 2022 14:43:45 -0400 Subject: [PATCH 209/708] Upversion to 1.11.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 58ae89480..72a79abd5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.10.0", + "version": "1.11.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c2995732b..498048724 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.10.0", + "version": "1.11.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 38451131cb9c940d37b850a37acaef753c52951f Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 2 Sep 2022 23:25:26 +0200 Subject: [PATCH 210/708] Provide Java 19 preview support in pre-release build Signed-off-by: Snjezana Peco --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 54f0186ad..2cbf229ff 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 18 +* Supports code from Java 1.5 to Java 19 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -80,8 +80,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-18", - "path": "/path/to/jdk-18", + "name": "JavaSE-19", + "path": "/path/to/jdk-19", "default": true }, ] diff --git a/package.json b/package.json index 498048724..a9053b447 100644 --- a/package.json +++ b/package.json @@ -728,7 +728,8 @@ "JavaSE-15", "JavaSE-16", "JavaSE-17", - "JavaSE-18" + "JavaSE-18", + "JavaSE-19" ], "description": "Java Execution Environment name. Must be unique." }, From 7a51f2c0977d47582a5f7e84fa08f3cb2b6e325d Mon Sep 17 00:00:00 2001 From: sheche Date: Fri, 2 Sep 2022 10:50:52 +0800 Subject: [PATCH 211/708] Enable 'java.signatureHelp.enabled' and 'java.completion.guessMethodArguments' Signed-off-by: sheche --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index a9053b447..deb6f063e 100644 --- a/package.json +++ b/package.json @@ -354,7 +354,7 @@ }, "java.signatureHelp.enabled": { "type": "boolean", - "default": false, + "default": true, "description": "Enable/disable the signature help.", "scope": "window" }, @@ -515,7 +515,7 @@ }, "java.completion.guessMethodArguments": { "type": "boolean", - "default": false, + "default": true, "description": "When set to true, method arguments are guessed when a method is selected from as list of code assist proposals.", "scope": "window" }, From d6a2fd53b97f8518ece92cbae4d4b580c1aafe69 Mon Sep 17 00:00:00 2001 From: Fiete <41323592+FieteO@users.noreply.github.com> Date: Wed, 7 Sep 2022 01:54:53 +0200 Subject: [PATCH 212/708] Migrate from tslint to eslint (#2415) * Add eslint * Remove tslint references, replace tslint ignores with eslint ignores * Ignore node_modules, use eslint arrow function, add webpack plugin * Lint ts files, address lint errors in ts files * Fix problem matcher Signed-off-by: Fiete Ostkamp Co-authored-by: David Thompson --- .eslintrc.json | 110 ++ .github/workflows/pr-verify.yml | 2 +- .vscode/extensions.json | 2 +- .vscode/launch.json | 2 +- .vscode/tasks.json | 98 +- .vscodeignore | 3 +- gulpfile.js | 58 +- package-lock.json | 1573 +++++++++++++---- package.json | 13 +- src/apiManager.ts | 18 +- src/documentSymbols.ts | 4 +- src/extension.api.ts | 40 +- src/extension.ts | 50 +- src/fileEventHandler.ts | 12 +- src/goToDefinition.ts | 4 +- src/gradle/gradleCodeActionProvider.ts | 16 +- src/hoverAction.ts | 6 +- src/inlayHintsProvider.ts | 2 +- src/javaServerStarter.ts | 11 +- src/languageStatusItemFactory.ts | 10 +- src/lombokSupport.ts | 2 +- src/pom/pomCodeActionProvider.ts | 6 +- src/protocol.ts | 32 +- src/providerDispatcher.ts | 4 +- src/recommendation/handlerImpl.ts | 12 +- src/requirements.ts | 8 +- src/serverStatus.ts | 32 +- src/serverStatusBarProvider.ts | 22 +- src/serverTaskPresenter.ts | 22 +- src/settings.ts | 12 +- src/sourceAction.ts | 6 +- src/standardLanguageClient.ts | 69 +- src/syntaxLanguageClient.ts | 26 +- src/typeHierarchy/model.ts | 32 +- src/typeHierarchy/protocol.ts | 6 +- src/typeHierarchy/references-view.d.ts | 2 +- src/typeHierarchy/typeHierarchyTree.ts | 8 +- src/typeHierarchy/util.ts | 24 +- test/lightweight-mode-suite/extension.test.ts | 1 - test/lightweight-mode-suite/index.ts | 2 +- test/lightweight-mode-suite/publicApi.test.ts | 13 +- test/runtest.ts | 4 + test/standard-mode-suite/extension.test.ts | 1 - .../gotoSuperImplementation.test.ts | 1 - test/standard-mode-suite/index.ts | 2 +- test/standard-mode-suite/projects.test.ts | 1 - test/standard-mode-suite/publicApi.test.ts | 7 +- test/standard-mode-suite/rename.test.ts | 5 +- .../snippetCompletionProvider.test.ts | 2 +- test/standard-mode-suite/utils.test.ts | 1 - tsconfig.json | 2 +- tslint.json | 57 - webpack.config.js | 72 +- 53 files changed, 1717 insertions(+), 813 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 tslint.json diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 000000000..c3143ae2c --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,110 @@ +{ + "env": { + "es6": true, + "node": true + }, + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaVersion": "latest", + "project": "tsconfig.json" + }, + "plugins": [ + "@typescript-eslint" + ], + "rules": { + "@typescript-eslint/member-delimiter-style": [ + "error", + { + "multiline": { + "delimiter": "semi", + "requireLast": true + }, + "singleline": { + "delimiter": "semi", + "requireLast": false + } + } + ], + "@typescript-eslint/naming-convention": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/prefer-for-of": "error", + "@typescript-eslint/semi": [ + "error", + "always" + ], + "@typescript-eslint/type-annotation-spacing": "error", + "curly": [ + "error", + "multi-line" + ], + "eqeqeq": [ + "error", + "always" + ], + "id-denylist": [ + "error", + "any", + "Number", + "number", + "String", + "string", + "Boolean", + "boolean", + "Undefined", + "undefined" + ], + "id-match": "error", + "no-debugger": "error", + "no-multiple-empty-lines": "error", + "no-trailing-spaces": "error", + "no-underscore-dangle": "error", + "no-var": "error", + "prefer-arrow-callback": [ + "error", + { "allowNamedFunctions": true } + ], + "prefer-const": "error", + "prefer-template": "error", + "quote-props": [ + "error", + "as-needed" + ], + "semi": "error", + "spaced-comment": [ + "error", + "always", + { + "markers": [ + "/" + ] + } + ] + }, + "overrides": [ + { + "files": [ + "**/*.js" + ], + "rules": { + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/naming-convention": "off", + "@typescript-eslint/semi": "off", + "prefer-arrow/prefer-arrow-functions": "off", + "prefer-arrow-callback": "off", + "no-useless-escape": "off", + "spaced-comment": "off", + "semi": "off", + "prefer-template": "off", + "prefer-const": "off" + } + }, + { + "files": [ + "**/*.test.ts" + ], + "rules": { + "prefer-arrow-callback": "off" + } + } + ] +} \ No newline at end of file diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 36b6d3674..cef89af69 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -28,7 +28,7 @@ jobs: - run: npm run vscode:prepublish - run: vsce package - run: ls -ll java-*vsix - - run: npm run tslint + - run: npm run eslint - name: Run Tests if: runner.os == 'Linux' env: diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 013d72ed7..7a024e403 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -3,7 +3,7 @@ // for the documentation about the extensions.json format "recommendations": [ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp - "ms-vscode.vscode-typescript-tslint-plugin", + "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "amodio.tsl-problem-matcher" ] diff --git a/.vscode/launch.json b/.vscode/launch.json index 633056f87..dda897afd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -121,7 +121,7 @@ "skipFiles": [ "/**" ], - "type": "pwa-node" + "type": "node" } ], "inputs": [ diff --git a/.vscode/tasks.json b/.vscode/tasks.json index b040cddde..e63b9f7a2 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -1,54 +1,52 @@ // See https://go.microsoft.com/fwlink/?LinkId=733558 // for the documentation about the tasks.json format { - "version": "2.0.0", - "tasks": [ - { - "type": "npm", - "script": "watch", - "problemMatcher": [ - "$ts-webpack-watch", - "$tslint-webpack-watch" - ], - "isBackground": true, - "presentation": { - "reveal": "never" - }, - "group": { - "kind": "build", - "isDefault": true - } - }, - { - "type": "gulp", - "label": "cleanTestFolder", - "task": "clean_test_folder", - }, - { - "type": "gulp", - "label": "generateStandardTestFolder", - "task": "generate_standard_test_folder" - }, - { - "type": "gulp", - "label": "generateLightweightTestFolder", - "task": "generate_lightweight_test_folder" - }, - { - "label": "prepareStandardTest", - "dependsOn": [ - "cleanTestFolder", - "generateStandardTestFolder", - "npm: compile" - ] - }, - { - "label": "prepareLightweightTest", - "dependsOn": [ - "cleanTestFolder", - "generateLightweightTestFolder", - "npm: compile" - ] - } - ] + "version": "2.0.0", + "tasks": [ + { + "label": "npm: watch", + "type": "npm", + "script": "watch", + "problemMatcher": ["$ts-webpack-watch", "$eslint-stylish"], + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + }, + { + "type": "gulp", + "label": "cleanTestFolder", + "task": "clean_test_folder" + }, + { + "type": "gulp", + "label": "generateStandardTestFolder", + "task": "generate_standard_test_folder" + }, + { + "type": "gulp", + "label": "generateLightweightTestFolder", + "task": "generate_lightweight_test_folder" + }, + { + "label": "prepareStandardTest", + "dependsOn": [ + "cleanTestFolder", + "generateStandardTestFolder", + "npm: compile" + ] + }, + { + "label": "prepareLightweightTest", + "dependsOn": [ + "cleanTestFolder", + "generateLightweightTestFolder", + "npm: compile" + ] + } + ] } diff --git a/.vscodeignore b/.vscodeignore index aabc1e1ae..385b51af7 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -20,6 +20,7 @@ node_modules .travis.yml gulpfile.js Jenkinsfile -tslint.json +.eslintrc.json +.eslintignore webpack.config.js .DS_Store \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index a011fa4b1..2ed13f1bd 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -15,7 +15,7 @@ const tempTestFolder = path.join(__dirname, 'test-temp'); const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); //... -gulp.task('clean_jre', function(done) { +gulp.task('clean_jre', function (done) { if (fse.existsSync('./jre')) { fse.removeSync('./jre'); } @@ -38,7 +38,7 @@ const LATEST_JRE = 17; * darwin-x64, * darwin-arm64 */ -gulp.task('download_jre', async function(done) { +gulp.task('download_jre', async function (done) { if (fse.existsSync('./jre')) { fse.removeSync('./jre'); } @@ -58,9 +58,9 @@ gulp.task('download_jre', async function(done) { const manifestUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/justj.manifest`; // Download justj.manifest file - const manifest = await new Promise(function(resolve, reject) { - request.get(manifestUrl, function(err, response, body) { - if(err || response.statusCode >= 400) { + const manifest = await new Promise(function (resolve, reject) { + request.get(manifestUrl, function (err, response, body) { + if (err || response.statusCode >= 400) { reject(err || `${response.statusCode} returned from ${manifestUrl}`); } else { resolve(String(body)); @@ -95,14 +95,14 @@ gulp.task('download_jre', async function(done) { const jreDownloadUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/${jreIdentifier}`; const parsedDownloadUrl = url.parse(jreDownloadUrl); const jreFileName = path.basename(parsedDownloadUrl.pathname) - .replace(/[\.7z|\.bz2|\.gz|\.rar|\.tar|\.zip|\.xz]*$/, ""); + .replace(/[\.7z|\.bz2|\.gz|\.rar|\.tar|\.zip|\.xz]*$/, ""); const idx = jreFileName.indexOf('-'); const jreVersionLabel = idx >= 0 ? jreFileName.substring(idx + 1) : jreFileName; // Download justj JRE. - await new Promise(function(resolve, reject) { + await new Promise(function (resolve, reject) { download(jreDownloadUrl) .on('error', reject) - .pipe(decompress({strip: 0})) + .pipe(decompress({ strip: 0 })) .pipe(gulp.dest('./jre/' + jreVersionLabel)) .on('end', resolve); }); @@ -116,7 +116,7 @@ gulp.task('download_jre', async function(done) { done(); }); -gulp.task('download_lombok', function(done) { +gulp.task('download_lombok', function (done) { if (fse.existsSync('./lombok')) { fse.removeSync('./lombok'); } @@ -128,7 +128,7 @@ gulp.task('download_lombok', function(done) { done(); }); -gulp.task('download_server', function(done) { +gulp.task('download_server', function (done) { fse.removeSync('./server'); download("http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz") .pipe(decompress()) @@ -136,7 +136,7 @@ gulp.task('download_server', function(done) { done(); }); -gulp.task('build_server', function(done) { +gulp.task('build_server', function (done) { fse.removeSync('./server'); cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') @@ -145,27 +145,27 @@ gulp.task('build_server', function(done) { done(); }); -gulp.task('dev_server', function(done) { +gulp.task('dev_server', function (done) { let command = mvnw() + ' -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package -Declipse.jdt.ls.skipGradleChecksums'; - console.log('executing '+command); - cp.execSync(command, {cwd:server_dir, stdio:[0,1,2]} ); - glob.Glob(server_dir +'/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar', - (_error, sources) => { + console.log('executing ' + command); + cp.execSync(command, { cwd: server_dir, stdio: [0, 1, 2] }); + glob.Glob(server_dir + '/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar', + (_error, sources) => { glob.Glob('./server/plugins/org.eclipse.jdt.ls.core_*.jar', (_error, targets) => { - console.log('Copying '+sources[0]+ ' to '+targets[0]); + console.log('Copying ' + sources[0] + ' to ' + targets[0]); fse.copy(sources[0], targets[0]); - }); - }); + }); + }); done(); }); -gulp.task('watch_server',function(done) { - gulp.watch(server_dir+'/org.eclipse.jdt.ls.core/**/*.java', gulp.series('dev_server')); +gulp.task('watch_server', function (done) { + gulp.watch(server_dir + '/org.eclipse.jdt.ls.core/**/*.java', gulp.series('dev_server')); done(); }); -gulp.task('generate_standard_test_folder', function(done) { +gulp.task('generate_standard_test_folder', function (done) { fse.copySync(originalTestFolder, tempTestFolder); fse.ensureDirSync(path.join(tempTestFolder, '.vscode')); fse.writeJSONSync(testSettings, { @@ -175,7 +175,7 @@ gulp.task('generate_standard_test_folder', function(done) { done(); }); -gulp.task('generate_lightweight_test_folder', function(done) { +gulp.task('generate_lightweight_test_folder', function (done) { fse.copySync(originalTestFolder, tempTestFolder); fse.ensureDirSync(path.join(tempTestFolder, '.vscode')); fse.writeJSONSync(testSettings, { @@ -184,12 +184,12 @@ gulp.task('generate_lightweight_test_folder', function(done) { done(); }); -gulp.task('clean_test_folder', function(done) { +gulp.task('clean_test_folder', function (done) { fse.removeSync(tempTestFolder); done(); }); -gulp.task('prepare_pre_release', function(done) { +gulp.task('prepare_pre_release', function (done) { const json = JSON.parse(fse.readFileSync("./package.json").toString()); const stableVersion = json.version.match(/(\d+)\.(\d+)\.(\d+)/); const major = stableVersion[1]; @@ -219,12 +219,12 @@ function isLinux() { } function mvnw() { - return isWin()?"mvnw.cmd":"./mvnw"; + return isWin() ? "mvnw.cmd" : "./mvnw"; } -function prependZero(number) { - if (number > 99) { +function prependZero(num) { + if (num > 99) { throw "Unexpected value to prepend with zero"; } - return `${number < 10 ? "0" : ""}${number}`; + return `${num < 10 ? "0" : ""}${num}`; } diff --git a/package-lock.json b/package-lock.json index 72a79abd5..76c8a82c4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,53 +10,113 @@ "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", "dev": true }, - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "@eslint/eslintrc": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", + "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.3.1", + "globals": "^13.9.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", + "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" } }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true }, - "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, "@sinonjs/commons": { @@ -191,9 +251,9 @@ "dev": true }, "@types/sinon": { - "version": "10.0.12", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.12.tgz", - "integrity": "sha512-uWf4QJ4oky/GckJ1MYQxU52cgVDcXwBhDkpvLbi4EKoLPqLE4MOH6T/ttM33l3hi0oZ882G6oIzWv/oupRYSxQ==", + "version": "10.0.13", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, "requires": { "@types/sinonjs__fake-timers": "*" @@ -226,6 +286,204 @@ "winston": "*" } }, + "@typescript-eslint/eslint-plugin": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", + "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", + "debug": "^4.3.2", + "functional-red-black-tree": "^1.0.1", + "ignore": "^5.1.8", + "regexpp": "^3.2.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/parser": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", + "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "debug": "^4.3.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", + "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" + } + }, + "@typescript-eslint/type-utils": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", + "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", + "dev": true, + "requires": { + "@typescript-eslint/utils": "5.18.0", + "debug": "^4.3.2", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/types": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", + "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", + "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", + "debug": "^4.3.2", + "globby": "^11.0.4", + "is-glob": "^4.0.3", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + } + } + }, + "@typescript-eslint/utils": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", + "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", + "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.18.0", + "eslint-visitor-keys": "^3.0.0" + } + }, "@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", @@ -485,6 +743,12 @@ "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", "dev": true }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -497,6 +761,35 @@ "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "requires": { + "ajv": "^8.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + } + } + }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", @@ -529,8 +822,8 @@ }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, "ansi-wrap": { @@ -573,15 +866,6 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -690,6 +974,12 @@ } } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, "array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", @@ -782,17 +1072,6 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "babel-code-frame": { - "version": "6.26.0", - "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", - "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", - "dev": true, - "requires": { - "chalk": "^1.1.3", - "esutils": "^2.0.2", - "js-tokens": "^3.0.2" - } - }, "bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -1047,12 +1326,6 @@ "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -1080,6 +1353,12 @@ "get-intrinsic": "^1.0.2" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, "camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", @@ -1109,8 +1388,8 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { "ansi-styles": "^2.2.1", @@ -1601,6 +1880,12 @@ } } }, + "deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, "default-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", @@ -1696,11 +1981,31 @@ "kuler": "1.0.x" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + }, + "dependencies": { + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + } + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } }, "dom-serializer": { "version": "1.4.1", @@ -1764,8 +2069,8 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true } } @@ -1949,33 +2254,403 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "requires": { - "estraverse": "^5.2.0" + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "eslint": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", + "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "dev": true, + "requires": { + "@eslint/eslintrc": "^1.2.1", + "@humanwhocodes/config-array": "^0.9.2", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.1.1", + "eslint-utils": "^3.0.0", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^6.0.1", + "globals": "^13.6.0", + "ignore": "^5.2.0", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "regexpp": "^3.2.0", + "strip-ansi": "^6.0.1", + "strip-json-comments": "^3.1.0", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, + "glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "requires": { + "is-glob": "^4.0.3" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + }, + "eslint-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "dev": true, + "requires": { + "@types/eslint": "^7.29.0 || ^8.4.1", + "jest-worker": "^28.0.2", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0" + }, + "dependencies": { + "@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + } + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "dependencies": { + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + } + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "espree": { + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", + "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "dev": true, + "requires": { + "acorn": "^8.7.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true + } + } + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" }, "dependencies": { "estraverse": { @@ -2211,12 +2886,85 @@ "time-stamp": "^1.0.0" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -2240,6 +2988,15 @@ "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, "fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", @@ -2254,6 +3011,15 @@ "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, "file-stream-rotator": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz", @@ -2349,6 +3115,33 @@ "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", + "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "dev": true + }, "flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", @@ -2448,7 +3241,7 @@ }, "fsevents": { "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, @@ -2470,6 +3263,12 @@ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", @@ -2613,7 +3412,7 @@ }, "fsevents": { "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true @@ -2681,6 +3480,29 @@ } } }, + "globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + } + }, "glogg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", @@ -2778,92 +3600,123 @@ "request-progress": "^3.0.0", "through": "^2.3.8" }, + "dependencies": { + "request": { + "version": "2.88.2", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, "dependencies": { "clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-stats": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", "dev": true }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "lodash.template": { + "version": "3.6.2", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "dependencies": { - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - } + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "object-assign": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true }, "replace-ext": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", - "dev": true - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true }, "vinyl": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, "requires": { "clone": "^1.0.0", @@ -2909,17 +3762,17 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { "ansi-regex": "^2.0.0" } }, "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, "has-gulplog": { @@ -3024,6 +3877,30 @@ "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, + "ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + } + } + }, "import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", @@ -3034,6 +3911,12 @@ "resolve-cwd": "^3.0.0" } }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3348,22 +4231,6 @@ } } }, - "js-tokens": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", - "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -3483,6 +4350,16 @@ "flush-write-stream": "^1.0.2" } }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, "liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", @@ -3636,6 +4513,12 @@ "lodash.isarray": "^3.0.0" } }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, "lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", @@ -3843,6 +4726,12 @@ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", "dev": true }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, "micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", @@ -3895,7 +4784,7 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, @@ -3927,14 +4816,6 @@ "dev": true, "requires": { "minimist": "^1.2.6" - }, - "dependencies": { - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true - } } }, "mocha": { @@ -4171,7 +5052,7 @@ "dependencies": { "yargs-parser": { "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } @@ -4179,22 +5060,12 @@ }, "yargs-parser": { "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } } }, - "mock-require": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/mock-require/-/mock-require-3.0.3.tgz", - "integrity": "sha512-lLzfLHcyc10MKQnNUCv7dMcoY/2Qxd6wJfbqCcVk3LDb8An4hF6ohk5AztrvgKhJCqj36uyzi/p5se+tvyD+Wg==", - "dev": true, - "requires": { - "get-caller-file": "^1.0.2", - "normalize-path": "^2.1.1" - } - }, "moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", @@ -4246,6 +5117,12 @@ "to-regex": "^3.0.1" } }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, "neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -4478,6 +5355,28 @@ "mimic-fn": "^2.1.0" } }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "dependencies": { + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + } + } + }, "ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", @@ -4520,6 +5419,15 @@ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", "dev": true }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -4740,6 +5648,12 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", "dev": true }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, "pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", @@ -4791,6 +5705,12 @@ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "dev": true }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, "randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4869,6 +5789,12 @@ "safe-regex": "^1.1.0" } }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, "remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", @@ -4953,21 +5879,18 @@ "uuid": "^3.3.2" } }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4=", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "dev": true }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -5029,6 +5952,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, "rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", @@ -5038,6 +5967,15 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -5241,6 +6179,12 @@ } } }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, "snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", @@ -5374,9 +6318,9 @@ } }, "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5444,12 +6388,6 @@ "extend-shallow": "^3.0.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, "sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", @@ -5565,8 +6503,8 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true }, "sver-compat": { @@ -5601,21 +6539,20 @@ } }, "terser": { - "version": "5.14.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.2.tgz", - "integrity": "sha512-oL0rGeM/WFQCUd0y2QrWxYnq7tfSuKBiqTjRPWrRgB46WD/kiwHwF8T23z78H6Q6kGCuuHcPB+KULHRdxvVGQA==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", + "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", "dev": true, "requires": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map-support": "~0.5.20" + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" }, "dependencies": { - "acorn": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", - "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "dev": true } } @@ -5665,6 +6602,12 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", @@ -5903,78 +6846,6 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "tslint": { - "version": "5.11.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.11.0.tgz", - "integrity": "sha1-mPMMAurjzecAYgHkwzywi0hYHu0=", - "dev": true, - "requires": { - "babel-code-frame": "^6.22.0", - "builtin-modules": "^1.1.1", - "chalk": "^2.3.0", - "commander": "^2.12.1", - "diff": "^3.2.0", - "glob": "^7.1.1", - "js-yaml": "^3.7.0", - "minimatch": "^3.0.4", - "resolve": "^1.3.2", - "semver": "^5.3.0", - "tslib": "^1.8.0", - "tsutils": "^2.27.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "tsutils": { - "version": "2.29.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", - "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } - }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -5996,12 +6867,27 @@ "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, "type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6014,17 +6900,6 @@ "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", "dev": true }, - "typescript-tslint-plugin": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/typescript-tslint-plugin/-/typescript-tslint-plugin-0.3.1.tgz", - "integrity": "sha512-h8HEPBm36UEs901ld1x6m5eY/UFb4mF+A0nvERr4BWMww5wnV5nfcm9ZFt18foYL0GQ5NVMt1Tb3466WUU8dRQ==", - "dev": true, - "requires": { - "minimatch": "^3.0.4", - "mock-require": "^3.0.2", - "vscode-languageserver": "^5.1.0" - } - }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -6301,12 +7176,6 @@ "vinyl": "^2.0.0" } }, - "vscode-jsonrpc": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-4.0.0.tgz", - "integrity": "sha512-perEnXQdQOJMTDFNv+UF3h1Y0z4iSiaN9jIlb0OqIYgosPCZGYh/MCUlkFtV2668PL69lRDO32hmvL2yiidUYg==", - "dev": true - }, "vscode-languageclient": { "version": "7.1.0-next.5", "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.1.0-next.5.tgz", @@ -6327,34 +7196,6 @@ } } }, - "vscode-languageserver": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-5.2.1.tgz", - "integrity": "sha512-GuayqdKZqAwwaCUjDvMTAVRPJOp/SLON3mJ07eGsx/Iq9HjRymhKWztX41rISqDKhHVVyFM+IywICyZDla6U3A==", - "dev": true, - "requires": { - "vscode-languageserver-protocol": "3.14.1", - "vscode-uri": "^1.0.6" - }, - "dependencies": { - "vscode-languageserver-protocol": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.14.1.tgz", - "integrity": "sha512-IL66BLb2g20uIKog5Y2dQ0IiigW0XKrvmWiOvc0yXw80z3tMEzEnHjaGAb3ENuU7MnQqgnYJ1Cl2l9RvNgDi4g==", - "dev": true, - "requires": { - "vscode-jsonrpc": "^4.0.0", - "vscode-languageserver-types": "3.14.0" - } - }, - "vscode-languageserver-types": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.14.0.tgz", - "integrity": "sha512-lTmS6AlAlMHOvPQemVwo3CezxBp0sNB95KNPkqp3Nxd5VFEnuG1ByM0zlRWos0zjO3ZWtkvhal0COgiV1xIA4A==", - "dev": true - } - } - }, "vscode-languageserver-protocol": { "version": "3.17.0-next.6", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.6.tgz", @@ -6376,12 +7217,6 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" }, - "vscode-uri": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-1.0.6.tgz", - "integrity": "sha512-sLI2L0uGov3wKVb9EB+vIQBl9tVP90nqRvxSoJ35vI3NjxE8jfsE5DSOhWgSunHSZmKS4OCi2jrtfxK7uyp2ww==", - "dev": true - }, "watchpack": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", @@ -6657,6 +7492,12 @@ "triple-beam": "^1.2.0" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", @@ -6718,7 +7559,7 @@ }, "yargs-parser": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { diff --git a/package.json b/package.json index deb6f063e..d0c576eed 100644 --- a/package.json +++ b/package.json @@ -1244,12 +1244,7 @@ ] } }, - "resolutions": { - "minimist": "^1.2.5", - "yargs-parser": "^18.1.2" - }, "scripts": { - "preinstall": "npx npm-force-resolutions", "vscode:prepublish": "webpack --mode production", "compile": "tsc -p ./&webpack --mode development", "watch": "webpack --mode development --watch", @@ -1258,7 +1253,7 @@ "build-server": "./node_modules/.bin/gulp build_server", "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", - "tslint": "tslint -p ." + "eslint": "eslint --ignore-path .gitignore --ext .js,.ts ." }, "devDependencies": { "@types/fs-extra": "^8.0.0", @@ -1272,6 +1267,10 @@ "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "@vscode/test-electron": "^2.1.5", + "@typescript-eslint/eslint-plugin": "^5.18.0", + "@typescript-eslint/parser": "^5.18.0", + "eslint": "^8.13.0", + "eslint-webpack-plugin": "^3.2.0", "gulp": "^4.0.2", "gulp-decompress": "^3.0.0", "gulp-download": "0.0.1", @@ -1282,9 +1281,7 @@ "request": "^2.88.2", "sinon": "^14.0.0", "ts-loader": "^9.2.6", - "tslint": "^5.11.0", "typescript": "^4.2.4", - "typescript-tslint-plugin": "^0.3.1", "webpack": "^5.28.0", "webpack-cli": "^4.6.0" }, diff --git a/src/apiManager.ts b/src/apiManager.ts index 86ecf0d6c..b7daf493c 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -1,9 +1,9 @@ 'use strict'; -import { ExtensionAPI, ClasspathQueryOptions, ClasspathResult, ExtensionApiVersion, ClientStatus } from "./extension.api"; +import { ExtensionAPI, ClasspathQueryOptions, ClasspathResult, extensionApiVersion, ClientStatus } from "./extension.api"; import { RequirementsData } from "./requirements"; -import { getDocumentSymbolsCommand, getDocumentSymbolsProvider } from "./documentSymbols"; -import { goToDefinitionCommand, goToDefinitionProvider } from "./goToDefinition"; +import { GetDocumentSymbolsCommand, getDocumentSymbolsProvider } from "./documentSymbols"; +import { GoToDefinitionCommand, goToDefinitionProvider } from "./goToDefinition"; import { commands, Uri } from "vscode"; import { Commands } from "./commands"; import { Emitter } from "vscode-languageclient"; @@ -19,11 +19,11 @@ class ApiManager { private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { - const getDocumentSymbols: getDocumentSymbolsCommand = getDocumentSymbolsProvider(); - const goToDefinition: goToDefinitionCommand = goToDefinitionProvider(); + const getDocumentSymbols: GetDocumentSymbolsCommand = getDocumentSymbolsProvider(); + const goToDefinition: GoToDefinitionCommand = goToDefinitionProvider(); - const getProjectSettings = async (uri: string, SettingKeys: string[]) => { - return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_PROJECT_SETTINGS, uri, SettingKeys); + const getProjectSettings = async (uri: string, settingKeys: string[]) => { + return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_PROJECT_SETTINGS, uri, settingKeys); }; const getClasspaths = async (uri: string, options: ClasspathQueryOptions) => { @@ -46,9 +46,9 @@ class ApiManager { }; this.api = { - apiVersion: ExtensionApiVersion, + apiVersion: extensionApiVersion, javaRequirement: requirements, - status: ClientStatus.Starting, + status: ClientStatus.starting, registerHoverCommand: registerHoverCommand, getDocumentSymbols, goToDefinition, diff --git a/src/documentSymbols.ts b/src/documentSymbols.ts index be6e3c4c3..48f48d766 100644 --- a/src/documentSymbols.ts +++ b/src/documentSymbols.ts @@ -12,9 +12,9 @@ import { getActiveLanguageClient } from "./extension"; type DocumentSymbolsResponse = DocumentSymbol[] | SymbolInformation[] | null; -export type getDocumentSymbolsCommand = (params: DocumentSymbolParams, token?: CancellationToken) => Promise; +export type GetDocumentSymbolsCommand = (params: DocumentSymbolParams, token?: CancellationToken) => Promise; -export function getDocumentSymbolsProvider(): getDocumentSymbolsCommand { +export function getDocumentSymbolsProvider(): GetDocumentSymbolsCommand { return async (params: DocumentSymbolParams, token?: CancellationToken): Promise => { const languageClient: LanguageClient | undefined = await getActiveLanguageClient(); if (!languageClient) { diff --git a/src/extension.api.ts b/src/extension.api.ts index 9ba551c0e..caa9378df 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -1,12 +1,12 @@ -import { getDocumentSymbolsCommand } from './documentSymbols'; -import { goToDefinitionCommand } from './goToDefinition'; +import { GetDocumentSymbolsCommand } from './documentSymbols'; +import { GoToDefinitionCommand } from './goToDefinition'; import { RequirementsData } from './requirements'; import { TextDocumentPositionParams } from 'vscode-languageclient'; import { CancellationToken, Command, ProviderResult, Uri, Event } from 'vscode'; import { ServerMode } from './settings'; -export type provideHoverCommandFn = (params: TextDocumentPositionParams, token: CancellationToken) => ProviderResult; -export type registerHoverCommand = (callback: provideHoverCommandFn) => void; +export type ProvideHoverCommandFn = (params: TextDocumentPositionParams, token: CancellationToken) => ProviderResult; +export type RegisterHoverCommand = (callback: ProvideHoverCommandFn) => void; /** * Gets the project settings. This API is not supported in light weight server mode so far. @@ -22,7 +22,7 @@ export type registerHoverCommand = (callback: provideHoverCommandFn) => void; * @throws Will throw errors if the Uri does not belong to any project. */ -export type getProjectSettingsCommand = (uri: string, SettingKeys: string[]) => Promise; +export type GetProjectSettingsCommand = (uri: string, SettingKeys: string[]) => Promise; /** * Gets the classpaths and modulepaths. This API is not supported in light weight server mode so far. @@ -32,7 +32,7 @@ export type getProjectSettingsCommand = (uri: string, SettingKeys: string[]) => * @throws Will throw errors if the Uri does not belong to any project. */ -export type getClasspathsCommand = (uri: string, options: ClasspathQueryOptions) => Promise; +export type GetClasspathsCommand = (uri: string, options: ClasspathQueryOptions) => Promise; export type ClasspathQueryOptions = { /** * Determines the scope of the classpath. Valid scopes are "runtime" and "test". @@ -62,28 +62,28 @@ export type ClasspathResult = { * @returns `true` if the input uri is a test file in its belonging project, otherwise returns false. * @throws Will throw errors if the Uri does not belong to any project. */ -export type isTestFileCommand = (uri: string) => Promise; +export type IsTestFileCommand = (uri: string) => Promise; export enum ClientStatus { - Uninitialized = "Uninitialized", - Initialized = "Initialized", - Starting = "Starting", - Started = "Started", - Error = "Error", - Stopping = "Stopping", + uninitialized = "Uninitialized", + initialized = "Initialized", + starting = "Starting", + started = "Started", + error = "Error", + stopping = "Stopping", } -export const ExtensionApiVersion = '0.7'; +export const extensionApiVersion = '0.7'; export interface ExtensionAPI { readonly apiVersion: string; readonly javaRequirement: RequirementsData; status: ClientStatus; - readonly registerHoverCommand: registerHoverCommand; - readonly getDocumentSymbols: getDocumentSymbolsCommand; - readonly getProjectSettings: getProjectSettingsCommand; - readonly getClasspaths: getClasspathsCommand; - readonly isTestFile: isTestFileCommand; + readonly registerHoverCommand: RegisterHoverCommand; + readonly getDocumentSymbols: GetDocumentSymbolsCommand; + readonly getProjectSettings: GetProjectSettingsCommand; + readonly getClasspaths: GetClasspathsCommand; + readonly isTestFile: IsTestFileCommand; /** * An event which fires on classpath update. This API is not supported in light weight server mode so far. * @@ -98,7 +98,7 @@ export interface ExtensionAPI { * The Uris in the array point to the project root path. */ readonly onDidProjectsImport: Event; - readonly goToDefinition: goToDefinitionCommand; + readonly goToDefinition: GoToDefinitionCommand; /** * Indicates the current active mode for Java Language Server. Possible modes are: * - "Standard" diff --git a/src/extension.ts b/src/extension.ts index 4b57683fa..a79c71b11 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -200,18 +200,18 @@ export function activate(context: ExtensionContext): Promise { }).then(async (requirements) => { const triggerFiles = await getTriggerFiles(); return new Promise(async (resolve) => { - const workspacePath = path.resolve(storagePath + '/jdt_ws'); - const syntaxServerWorkspacePath = path.resolve(storagePath + '/ss_ws'); + const workspacePath = path.resolve(`${storagePath}/jdt_ws`); + const syntaxServerWorkspacePath = path.resolve(`${storagePath}/ss_ws`); let serverMode = getJavaServerMode(); const isWorkspaceTrusted = (workspace as any).isTrusted; // TODO: use workspace.isTrusted directly when other clients catch up to adopt 1.56.0 if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 - serverMode = ServerMode.LIGHTWEIGHT; + serverMode = ServerMode.lightWeight; } commands.executeCommand('setContext', 'java:serverMode', serverMode); const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; - const requireSyntaxServer = (serverMode !== ServerMode.STANDARD) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); - let requireStandardServer = (serverMode !== ServerMode.LIGHTWEIGHT) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); + const requireSyntaxServer = (serverMode !== ServerMode.standard) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); + let requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); // Options to control the language client const clientOptions: LanguageClientOptions = { @@ -336,7 +336,7 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.EXECUTE_WORKSPACE_COMMAND, (command, ...rest) => { const api: ExtensionAPI = apiManager.getApiInstance(); - if (api.serverMode === ServerMode.LIGHTWEIGHT) { + if (api.serverMode === ServerMode.lightWeight) { console.warn(`The command: ${command} is not supported in LightWeight mode. See: https://github.com/redhat-developer/vscode-java/issues/1480`); return; } @@ -401,12 +401,12 @@ export function activate(context: ExtensionContext): Promise { } const clientStatus: ClientStatus = standardClient.getClientStatus(); - if (clientStatus === ClientStatus.Starting || clientStatus === ClientStatus.Started) { + if (clientStatus === ClientStatus.starting || clientStatus === ClientStatus.started) { return; } const api: ExtensionAPI = apiManager.getApiInstance(); - if (api.serverMode === switchTo || api.serverMode === ServerMode.STANDARD) { + if (api.serverMode === switchTo || api.serverMode === ServerMode.standard) { return; } @@ -429,7 +429,7 @@ export function activate(context: ExtensionContext): Promise { registerClientProviders(context, { contentProviderEvent: jdtEventEmitter.event }); apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { - if (event === ServerMode.STANDARD) { + if (event === ServerMode.standard) { syntaxClient.stop(); fileEventHandler.setServerStatus(true); runtimeStatusBarProvider.initialize(context); @@ -437,7 +437,7 @@ export function activate(context: ExtensionContext): Promise { commands.executeCommand('setContext', 'java:serverMode', event); }); - if (serverMode === ServerMode.HYBRID && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { + if (serverMode === ServerMode.hybrid && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { const config = getJavaConfiguration(); const importOnStartupSection: string = "project.importOnFirstTimeStartup"; const importOnStartup = config.get(importOnStartupSection); @@ -460,7 +460,7 @@ export function activate(context: ExtensionContext): Promise { const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 context.subscriptions.push(onDidGrantWorkspaceTrust(() => { - if (getJavaServerMode() !== ServerMode.LIGHTWEIGHT) { + if (getJavaServerMode() !== ServerMode.lightWeight) { // See the issue https://github.com/redhat-developer/vscode-java/issues/1994 // Need to recollect the Java bundles before starting standard mode. let pollingCount: number = 0; @@ -470,7 +470,7 @@ export function activate(context: ExtensionContext): Promise { clientOptions.initializationOptions.bundles = collectJavaExtensions(extensions.all); if (++pollingCount >= 10 || isContributedPartUpdated(existingJavaExtensions, clientOptions.initializationOptions.bundles)) { clearInterval(intervalId); - commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.STANDARD, true); + commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.standard, true); return; } }, 100); @@ -483,7 +483,7 @@ export function activate(context: ExtensionContext): Promise { } async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, resolve: (value?: ExtensionAPI | PromiseLike) => void) { - if (standardClient.getClientStatus() !== ClientStatus.Uninitialized) { + if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { return; } @@ -492,10 +492,10 @@ async function startStandardServer(context: ExtensionContext, requirements: requ return; } - if (apiManager.getApiInstance().serverMode === ServerMode.LIGHTWEIGHT) { + if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { // Before standard server is ready, we are in hybrid. - apiManager.getApiInstance().serverMode = ServerMode.HYBRID; - apiManager.fireDidServerModeChange(ServerMode.HYBRID); + apiManager.getApiInstance().serverMode = ServerMode.hybrid; + apiManager.fireDidServerModeChange(ServerMode.hybrid); } await standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter, resolve); standardClient.start(); @@ -508,14 +508,14 @@ async function workspaceContainsBuildFiles(): Promise { const inclusionPatterns: string[] = getBuildFilePatterns(); const inclusionPatternsFromNegatedExclusion: string[] = getInclusionPatternsFromNegatedExclusion(); if (inclusionPatterns.length > 0 && inclusionPatternsFromNegatedExclusion.length > 0 && - (await workspace.findFiles(convertToGlob(inclusionPatterns, inclusionPatternsFromNegatedExclusion), null, 1 /*maxResults*/)).length > 0) { + (await workspace.findFiles(convertToGlob(inclusionPatterns, inclusionPatternsFromNegatedExclusion), null, 1 /* maxResults */)).length > 0) { return true; } // Nothing found in negated exclusion pattern, do a normal search then. const inclusionBlob: string = convertToGlob(inclusionPatterns); const exclusionBlob: string = getExclusionBlob(); - if (inclusionBlob && (await workspace.findFiles(inclusionBlob, exclusionBlob, 1 /*maxResults*/)).length > 0) { + if (inclusionBlob && (await workspace.findFiles(inclusionBlob, exclusionBlob, 1 /* maxResults */)).length > 0) { return true; } @@ -545,7 +545,7 @@ async function ensureNoBuildToolConflicts(context: ExtensionContext, clientOptio clientOptions.initializationOptions.settings.java.import.maven.enabled = false; context.workspaceState.update(ACTIVE_BUILD_TOOL_STATE, "gradle"); } else { - throw new Error ("Unknown build tool: " + activeBuildTool); // unreachable + throw new Error (`Unknown build tool: ${activeBuildTool}`); // unreachable } } @@ -574,7 +574,7 @@ async function getBuildFilesInWorkspace(): Promise { // Since VS Code API does not support put negated exclusion pattern in findFiles(), // here we first parse the negated exclusion to inclusion and do the search. if (inclusionFilePatterns.length > 0 && inclusionFolderPatterns.length > 0) { - buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /*force not use default exclusion*/)); + buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /* force not use default exclusion */)); } const inclusionBlob: string = convertToGlob(inclusionFilePatterns); @@ -607,7 +607,7 @@ async function promptUserForStandardServer(config: WorkspaceConfiguration): Prom const importHintSection: string = "project.importHint"; const dontShowAgain: string = "Don't Show Again"; const showHint: boolean = config.get(importHintSection); - if (showHint && standardClient.getClientStatus() === ClientStatus.Uninitialized) { + if (showHint && standardClient.getClientStatus() === ClientStatus.uninitialized) { const showRocketEmoji: boolean = process.platform === "win32" || process.platform === "darwin"; const message: string = `Java Language Server is running in LightWeight mode. Click the ${showRocketEmoji ? '🚀' : 'Rocket'} icon in the status bar if you want to import the projects later.`; window.showInformationMessage(message, dontShowAgain) @@ -662,7 +662,7 @@ export async function getActiveLanguageClient(): Promise { + glob(`${filename}-*`, { cwd: dirname }, (err, files) => { if (!err && files.length > 0) { files.sort(); @@ -776,7 +776,7 @@ function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Acti const dirname = path.dirname(logFile); // find out the newest one - glob(filename + '.*', { cwd: dirname }, (err, files) => { + glob(`${filename}.*`, { cwd: dirname }, (err, files) => { if (!err && files.length > 0) { files.sort((a, b) => { const dateA = a.slice(11, 21), dateB = b.slice(11, 21); diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index b9f5160fb..ff219b0b0 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -63,9 +63,9 @@ async function handleNewJavaFiles(e: FileCreateEvent) { const isModuleInfo = typeName === 'module-info'; const date = new Date(); const context: any = { - file_name: path.basename(textDocuments[i].fileName), - package_name: "", - type_name: typeName, + fileName: path.basename(textDocuments[i].fileName), + packageName: "", + typeName: typeName, user: userInfo().username, date: date.toLocaleDateString(undefined, {month: "short", day: "2-digit", year: "numeric"}), time: date.toLocaleTimeString(), @@ -78,7 +78,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { }; if (!isModuleInfo) { - context.package_name = resolvePackageName(sourcePaths, emptyFiles[i].fsPath); + context.packageName = resolvePackageName(sourcePaths, emptyFiles[i].fsPath); } const snippets: string[] = []; @@ -91,7 +91,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { if (!isModuleInfo) { if (context.package_name) { - snippets.push(`package ${context.package_name};`); + snippets.push(`package ${context.packageName};`); snippets.push(""); } } @@ -127,7 +127,7 @@ function getWillRenameHandler(client: LanguageClient) { e.waitUntil(new Promise(async (resolve, reject) => { try { - const javaRenameEvents: Array<{ oldUri: string, newUri: string }> = []; + const javaRenameEvents: Array<{ oldUri: string; newUri: string }> = []; for (const file of e.files) { if (await isJavaFileWillRename(file.oldUri, file.newUri) || await isFolderWillRename(file.oldUri, file.newUri) diff --git a/src/goToDefinition.ts b/src/goToDefinition.ts index 03f5920df..efb66048e 100644 --- a/src/goToDefinition.ts +++ b/src/goToDefinition.ts @@ -12,9 +12,9 @@ import { getActiveLanguageClient } from './extension'; type GoToDefinitionResponse = Location | Location[] | LocationLink[] | null; -export type goToDefinitionCommand = (params: DefinitionParams, token?: CancellationToken) => Promise; +export type GoToDefinitionCommand = (params: DefinitionParams, token?: CancellationToken) => Promise; -export function goToDefinitionProvider(): goToDefinitionCommand { +export function goToDefinitionProvider(): GoToDefinitionCommand { return async (params: DefinitionParams, token?: CancellationToken): Promise => { const languageClient: LanguageClient | undefined = await getActiveLanguageClient(); if (!languageClient) { diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts index 123c43ff4..8c8ef08e3 100644 --- a/src/gradle/gradleCodeActionProvider.ts +++ b/src/gradle/gradleCodeActionProvider.ts @@ -6,12 +6,12 @@ import { CancellationToken, CodeAction, CodeActionContext, CodeActionKind, CodeA import { Commands } from "../commands"; import { upgradeGradle } from "../standardLanguageClientUtils"; -export class GradleCodeActionProvider implements CodeActionProvider { +const UPGRADE_GRADLE_WRAPPER_TITLE = "Upgrade Gradle Wrapper"; +const WRAPPER_PROPERTIES_DESCRIPTOR = "gradle/wrapper/gradle-wrapper.properties"; +const GRADLE_PROBLEM_ID = 0x00080000; +const GRADLE_INVALID_TYPE_CODE_ID = GRADLE_PROBLEM_ID + 1; - private static UPGRADE_GRADLE_WRAPPER_TITLE = "Upgrade Gradle Wrapper"; - private static WRAPPER_PROPERTIES_DESCRIPTOR = "gradle/wrapper/gradle-wrapper.properties"; - private static GRADLE_PROBLEM_ID = 0x00080000; - private static GRADLE_INVALID_TYPE_CODE_ID = GradleCodeActionProvider.GRADLE_PROBLEM_ID + 1; +export class GradleCodeActionProvider implements CodeActionProvider { constructor(context: ExtensionContext) { context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string) => { @@ -41,16 +41,16 @@ export class GradleCodeActionProvider implements CodeActionProvider } const documentUri = document.uri.toString(); - if (documentUri.endsWith(GradleCodeActionProvider.WRAPPER_PROPERTIES_DESCRIPTOR) && diagnostic.code === GradleCodeActionProvider.GRADLE_INVALID_TYPE_CODE_ID.toString()) { + if (documentUri.endsWith(WRAPPER_PROPERTIES_DESCRIPTOR) && diagnostic.code === GRADLE_INVALID_TYPE_CODE_ID.toString()) { const projectPath = path.resolve(Uri.parse(documentUri).fsPath, "..", "..", "..").normalize(); if (await fse.pathExists(projectPath)) { const projectUri = Uri.file(projectPath).toString(); const upgradeWrapperCommand: Command = { - title: GradleCodeActionProvider.UPGRADE_GRADLE_WRAPPER_TITLE, + title: UPGRADE_GRADLE_WRAPPER_TITLE, command: Commands.UPGRADE_GRADLE_WRAPPER, arguments: [projectUri] }; - const codeAction = new CodeAction(GradleCodeActionProvider.UPGRADE_GRADLE_WRAPPER_TITLE, CodeActionKind.QuickFix.append("gradle")); + const codeAction = new CodeAction(UPGRADE_GRADLE_WRAPPER_TITLE, CodeActionKind.QuickFix.append("gradle")); codeAction.command = upgradeWrapperCommand; codeActions.push(codeAction); } diff --git a/src/hoverAction.ts b/src/hoverAction.ts index 1accdea08..f4e91f4d0 100644 --- a/src/hoverAction.ts +++ b/src/hoverAction.ts @@ -5,7 +5,7 @@ import { TextDocumentPositionParams, HoverRequest } from "vscode-languageclient" import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from "./commands"; import { FindLinks } from "./protocol"; -import { provideHoverCommandFn } from "./extension.api"; +import { ProvideHoverCommandFn } from "./extension.api"; import { logger } from "./log"; export function createClientHoverProvider(languageClient: LanguageClient): JavaHoverProvider { @@ -47,8 +47,8 @@ function encodeBase64(text: string): string { return Buffer.from(text).toString('base64'); } -const hoverCommandRegistry: provideHoverCommandFn[] = []; -export function registerHoverCommand(callback: provideHoverCommandFn): void { +const hoverCommandRegistry: ProvideHoverCommandFn[] = []; +export function registerHoverCommand(callback: ProvideHoverCommandFn): void { hoverCommandRegistry.push(callback); } diff --git a/src/inlayHintsProvider.ts b/src/inlayHintsProvider.ts index ca07027e3..e409343f1 100644 --- a/src/inlayHintsProvider.ts +++ b/src/inlayHintsProvider.ts @@ -35,7 +35,7 @@ export class JavaInlayHintsProvider implements InlayHintsProvider { * * @since 3.17.0 - proposed state */ - export type InlayHintParams = /*WorkDoneProgressParams &*/ { + export type InlayHintParams = /* WorkDoneProgressParams &*/ { /** * The text document. */ diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index f032b9cea..718f60f2d 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -12,6 +12,7 @@ import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } fro import { workspace, ExtensionContext, window } from 'vscode'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; +// eslint-disable-next-line no-var declare var v8debug; const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); @@ -30,7 +31,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); executable.options = options; - executable.command = path.resolve(requirements.tooling_jre + '/bin/java'); + executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; @@ -40,13 +41,13 @@ export function awaitServerConnection(port): Thenable { return new Promise((res, rej) => { const server = net.createServer(stream => { server.close(); - logger.info('JDT LS connection established on port ' + addr); + logger.info(`JDT LS connection established on port ${addr}`); res({ reader: stream, writer: stream }); }); server.on('error', rej); server.listen(addr, () => { server.removeListener('error', rej); - logger.info('Awaiting JDT LS connection on port ' + addr); + logger.info(`Awaiting JDT LS connection on port ${addr}`); }); return server; }); @@ -97,7 +98,7 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp } let vmargs; if (vmargsCheck !== undefined) { - vmargs = vmargsCheck + ''; + vmargs = String(vmargsCheck); } else { vmargs = ''; } @@ -108,7 +109,7 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp if (os.platform() === 'win32') { const watchParentProcess = '-DwatchParentProcess='; if (vmargs.indexOf(watchParentProcess) < 0) { - params.push(watchParentProcess + 'false'); + params.push(`${watchParentProcess}false`); } } if (vmargs.indexOf('-Xlog:jni+resolve=') < 0) { diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts index 4604e7d1b..12c310ec8 100644 --- a/src/languageStatusItemFactory.ts +++ b/src/languageStatusItemFactory.ts @@ -52,7 +52,7 @@ export namespace ServerStatusItemFactory { export function showLightWeightStatus(item: any): void { item.severity = vscode.LanguageStatusSeverity?.Warning; - item.text = StatusIcon.LightWeight; + item.text = StatusIcon.lightWeight; item.detail = "Lightweight Mode"; item.command = StatusCommands.switchToStandardCommand; } @@ -77,7 +77,7 @@ export namespace ServerStatusItemFactory { title: "Open logs", command: Commands.OPEN_LOGS }; - item.text = StatusIcon.Error; + item.text = StatusIcon.error; item.detail = "Errors occurred in initializing language server"; } @@ -89,18 +89,18 @@ export namespace ServerStatusItemFactory { command: "workbench.panel.markers.view.focus", tooltip: "Errors occurred in project configurations, click to show the PROBLEMS panel" }; - item.text = StatusIcon.Warning; + item.text = StatusIcon.warning; item.detail = "Project Configuration Error"; } export function setReady(item: any): void { - if (item.text === StatusIcon.Ready) { + if (item.text === StatusIcon.ready) { return; } item.busy = false; item.severity = vscode.LanguageStatusSeverity?.Information; item.command = StatusCommands.showServerStatusCommand; - item.text = StatusIcon.Ready; + item.text = StatusIcon.ready; item.detail = ""; } } diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index 92a1e9666..bfdd77d4e 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -113,7 +113,7 @@ export function addLombokParam(context: ExtensionContext, params: string[]) { logger.warn("Could not find lombok.jar path."); return; } - const lombokAgentParam = '-javaagent:' + lombokJarPath; + const lombokAgentParam = `-javaagent:${lombokJarPath}`; params.push(lombokAgentParam); updateActiveLombokPath(lombokJarPath); } diff --git a/src/pom/pomCodeActionProvider.ts b/src/pom/pomCodeActionProvider.ts index 818c6d3fb..14f1c61bc 100644 --- a/src/pom/pomCodeActionProvider.ts +++ b/src/pom/pomCodeActionProvider.ts @@ -33,19 +33,19 @@ export class PomCodeActionProvider implements CodeActionProvider { const action1 = new CodeAction("Enable this execution in project configuration phase", CodeActionKind.QuickFix.append("pom")); action1.edit = new WorkspaceEdit(); - action1.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action1.edit.insert(document.uri, diagnostic.range.end, `${indentation}`); action1.command = saveAndUpdateConfigCommand; codeActions.push(action1); const action2 = new CodeAction("Enable this execution in project build phase", CodeActionKind.QuickFix.append("pom")); action2.edit = new WorkspaceEdit(); - action2.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action2.edit.insert(document.uri, diagnostic.range.end, `${indentation}`); action2.command = saveAndUpdateConfigCommand; codeActions.push(action2); const action3 = new CodeAction("Mark this execution as ignored in pom.xml", CodeActionKind.QuickFix.append("pom")); action3.edit = new WorkspaceEdit(); - action3.edit.insert(document.uri, diagnostic.range.end, indentation + ""); + action3.edit.insert(document.uri, diagnostic.range.end, `${indentation}`); action3.command = saveAndUpdateConfigCommand; codeActions.push(action3); } else if (diagnostic.message?.startsWith("The build file has been changed")) { diff --git a/src/protocol.ts b/src/protocol.ts index e377ef984..04e63bbfd 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -22,19 +22,19 @@ export enum MessageType { /** * An error message. */ - Error = 1, + error = 1, /** * A warning message. */ - Warning = 2, + warning = 2, /** * An information message. */ - Info = 3, + info = 3, /** * A log message. */ - Log = 4, + log = 4, } /** @@ -56,23 +56,23 @@ export enum FeatureStatus { } export enum EventType { - ClasspathUpdated = 100, - ProjectsImported = 200, - IncompatibleGradleJdkIssue = 300, - UpgradeGradleWrapper = 400, + classpathUpdated = 100, + projectsImported = 200, + incompatibleGradleJdkIssue = 300, + upgradeGradleWrapper = 400, } export enum CompileWorkspaceStatus { - FAILED = 0, - SUCCEED = 1, - WITHERROR = 2, - CANCELLED = 3, + failed = 0, + succeed = 1, + withError = 2, + cancelled = 3, } export enum AccessorKind { - GETTER = 0, - SETTER = 1, - BOTH = 2 + getter = 0, + setter = 1, + both = 2 } export interface StatusReport { @@ -428,7 +428,7 @@ export namespace FindLinks { } export interface RenameFilesParams { - files: Array<{ oldUri: string, newUri: string }>; + files: Array<{ oldUri: string; newUri: string }>; } export namespace WillRenameFiles { diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 98bcf1406..62342d4eb 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -47,7 +47,7 @@ export class ClientHoverProvider implements HoverProvider { } const serverMode: ServerMode = apiManager.getApiInstance().serverMode; - if (serverMode === ServerMode.STANDARD) { + if (serverMode === ServerMode.standard) { if (!this.delegateProvider) { this.delegateProvider = createClientHoverProvider(languageClient); } @@ -159,7 +159,7 @@ function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: Workspac function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { const disposable = apiManager.getApiInstance().onDidServerModeChange( async (mode) => { - if (mode === ServerMode.STANDARD) { + if (mode === ServerMode.standard) { const feature = (await getActiveLanguageClient()).getFeature(WorkspaceSymbolRequest.method); const providers = feature.getProviders(); if (providers && providers.length > 0) { diff --git a/src/recommendation/handlerImpl.ts b/src/recommendation/handlerImpl.ts index bb57c9d45..a91fcaa61 100644 --- a/src/recommendation/handlerImpl.ts +++ b/src/recommendation/handlerImpl.ts @@ -16,9 +16,9 @@ async function installExtensionCmdHandler(extensionName: string, displayName: st } enum UserChoice { - Install = "Install", - Never = "Never", - Later = "Later", + install = "Install", + never = "Never", + later = "Later", } export class HandlerImpl implements IHandler { @@ -39,7 +39,7 @@ export class HandlerImpl implements IHandler { } canRecommendExtension(extName: string): boolean { - return this.userChoice()[extName] !== UserChoice.Never && !this.isExtensionInstalled(extName); + return this.userChoice()[extName] !== UserChoice.never && !this.isExtensionInstalled(extName); } async handle(extName: string, message: string): Promise { @@ -48,13 +48,13 @@ export class HandlerImpl implements IHandler { } const choice = this.userChoice(); - if (choice[extName] === UserChoice.Never) { + if (choice[extName] === UserChoice.never) { return; } const actions: Array = Object.keys(UserChoice); const answer = await vscode.window.showInformationMessage(message, ...actions); - if (answer === UserChoice.Install) { + if (answer === UserChoice.install) { await installExtensionCmdHandler(extName, extName); } diff --git a/src/requirements.ts b/src/requirements.ts index 9206ea514..1ca128b1e 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -10,12 +10,14 @@ import { logger } from './log'; import { checkJavaPreferences } from './settings'; const REQUIRED_JDK_VERSION = 17; +/* eslint-disable @typescript-eslint/naming-convention */ export interface RequirementsData { tooling_jre: string; tooling_jre_version: number; java_home: string; java_version: number; } +/* eslint-enable @typescript-eslint/naming-convention */ interface ErrorData { message: string; @@ -107,12 +109,14 @@ export async function resolveRequirements(context: ExtensionContext): Promise(); -let _status: ServerStatusKind = ServerStatusKind.Ready; -let _isBusy: boolean = false; +const emitter = new EventEmitter(); +let status: ServerStatusKind = ServerStatusKind.ready; +let isBusy: boolean = false; function fireEvent() { - if (_isBusy) { - _emitter.fire(ServerStatusKind.Busy); + if (isBusy) { + emitter.fire(ServerStatusKind.busy); return; } - _emitter.fire(_status); + emitter.fire(status); } export namespace serverStatus { let hasError: boolean = false; - export const onServerStatusChanged = _emitter.event; + export const onServerStatusChanged = emitter.event; export function initialize() { serverTasks.onDidUpdateServerTask(tasks => { - _isBusy = tasks.some(task => !task.complete); + isBusy = tasks.some(task => !task.complete); fireEvent(); }); } - export function updateServerStatus(status: ServerStatusKind) { - if (status === ServerStatusKind.Busy) { + export function updateServerStatus(newStatus: ServerStatusKind) { + if (newStatus === ServerStatusKind.busy) { throw new Error("Busy status cannot be set directly."); } - if (status === ServerStatusKind.Error || status === ServerStatusKind.Warning) { + if (newStatus === ServerStatusKind.error || newStatus === ServerStatusKind.warning) { hasError = true; } else if (hasError) { return; } - _status = status; + status = newStatus; fireEvent(); } diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 98a605c72..57003877c 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -36,7 +36,7 @@ class ServerStatusBarProvider implements Disposable { if (this.isAdvancedStatusBarItem) { (this.statusBarItem as any).name = "Java Server Mode"; } - this.statusBarItem.text = StatusIcon.LightWeight; + this.statusBarItem.text = StatusIcon.lightWeight; this.statusBarItem.command = StatusCommands.switchToStandardCommand; this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; this.statusBarItem.show(); @@ -51,7 +51,7 @@ class ServerStatusBarProvider implements Disposable { if (this.isAdvancedStatusBarItem) { (this.statusBarItem as any).name = "Java Server Status"; } - this.statusBarItem.text = StatusIcon.Busy; + this.statusBarItem.text = StatusIcon.busy; this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; this.statusBarItem.tooltip = ""; this.statusBarItem.show(); @@ -62,7 +62,7 @@ class ServerStatusBarProvider implements Disposable { if (supportsLanguageStatus()) { ServerStatusItemFactory.setBusy(this.languageStatusItem); } else { - this.statusBarItem.text = StatusIcon.Busy; + this.statusBarItem.text = StatusIcon.busy; } } @@ -70,7 +70,7 @@ class ServerStatusBarProvider implements Disposable { if (supportsLanguageStatus()) { ServerStatusItemFactory.setError(this.languageStatusItem); } else { - this.statusBarItem.text = StatusIcon.Error; + this.statusBarItem.text = StatusIcon.error; this.statusBarItem.command = Commands.OPEN_LOGS; } } @@ -79,7 +79,7 @@ class ServerStatusBarProvider implements Disposable { if (supportsLanguageStatus()) { ServerStatusItemFactory.setWarning(this.languageStatusItem); } else { - this.statusBarItem.text = StatusIcon.Warning; + this.statusBarItem.text = StatusIcon.warning; this.statusBarItem.command = "workbench.panel.markers.view.focus"; this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; } @@ -89,7 +89,7 @@ class ServerStatusBarProvider implements Disposable { if (supportsLanguageStatus()) { ServerStatusItemFactory.setReady(this.languageStatusItem); } else { - this.statusBarItem.text = StatusIcon.Ready; + this.statusBarItem.text = StatusIcon.ready; this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; this.statusBarItem.tooltip = "ServiceReady"; } @@ -108,11 +108,11 @@ class ServerStatusBarProvider implements Disposable { } export enum StatusIcon { - LightWeight = "$(rocket)", - Busy = "$(sync~spin)", - Ready = "$(thumbsup)", - Warning = "$(thumbsdown)", - Error = "$(thumbsdown)" + lightWeight = "$(rocket)", + busy = "$(sync~spin)", + ready = "$(thumbsup)", + warning = "$(thumbsdown)", + error = "$(thumbsdown)" } export const serverStatusBarProvider: ServerStatusBarProvider = new ServerStatusBarProvider(); diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index d20f4cf0a..f8080f13a 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -67,15 +67,15 @@ async function killExistingExecutions() { } class ServerTaskTerminal implements Pseudoterminal { - private _onDidWriteEvent = new EventEmitter(); - private _onDidCloseEvent = new EventEmitter(); - private _subscription: Disposable = null; + private onDidWriteEvent = new EventEmitter(); + private onDidCloseEvent = new EventEmitter(); + private subscription: Disposable = null; - onDidWrite: Event = this._onDidWriteEvent.event; - onDidClose?: Event = this._onDidCloseEvent.event; + onDidWrite: Event = this.onDidWriteEvent.event; + onDidClose?: Event = this.onDidCloseEvent.event; constructor() { - this._subscription = serverTasks.onDidUpdateServerTask(serverTasks => { + this.subscription = serverTasks.onDidUpdateServerTask(serverTasks => { this.printTasks(serverTasks); }); } @@ -86,16 +86,16 @@ class ServerTaskTerminal implements Pseudoterminal { } private clearScreen() { - this._onDidWriteEvent.fire("\u001Bc"); + this.onDidWriteEvent.fire("\u001Bc"); } private printTask(report: ProgressReport) { if (report.complete) { - this._onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task} [Done]\r\n`); + this.onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task} [Done]\r\n`); return; } - this._onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task}: ${report.status} [${report.workDone}/${report.totalWork}]\r\n`); + this.onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task}: ${report.status} [${report.workDone}/${report.totalWork}]\r\n`); } open(initialDimensions: TerminalDimensions): void { @@ -107,8 +107,8 @@ class ServerTaskTerminal implements Pseudoterminal { close(): void { presenterTaskExecution.terminate(); presenterTaskExecution = null; - this._subscription.dispose(); - this._onDidCloseEvent.fire(); + this.subscription.dispose(); + this.onDidCloseEvent.fire(); } setDimensions(dimensions: TerminalDimensions) { diff --git a/src/settings.ts b/src/settings.ts index 2dbedbbff..395eb214f 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -152,7 +152,7 @@ export function getJavaEncoding(): string { return javaEncoding; } -export async function checkJavaPreferences(context: ExtensionContext): Promise<{javaHome?: string, preference: string}> { +export async function checkJavaPreferences(context: ExtensionContext): Promise<{javaHome?: string; preference: string}> { const allow = 'Allow'; const disallow = 'Disallow'; let preference: string = 'java.jdt.ls.java.home'; @@ -236,7 +236,7 @@ export async function checkJavaPreferences(context: ExtensionContext): Promise<{ } export function getKey(prefix, storagePath, value) { - const workspacePath = path.resolve(storagePath + '/jdt_ws'); + const workspacePath = path.resolve(`${storagePath}/jdt_ws`); if (workspace.name !== undefined) { return `${prefix}::${workspacePath}::${value}`; } @@ -263,14 +263,14 @@ export function isInWorkspaceFolder(loc: string, workspaceFolders: readonly Work } export enum ServerMode { - STANDARD = 'Standard', - LIGHTWEIGHT = 'LightWeight', - HYBRID = 'Hybrid' + standard = 'Standard', + lightWeight = 'LightWeight', + hybrid = 'Hybrid' } export function getJavaServerMode(): ServerMode { return workspace.getConfiguration().get('java.server.launchMode') - || ServerMode.HYBRID; + || ServerMode.hybrid; } export function setGradleWrapperChecksum(wrapper: string, sha256?: string) { diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 054315f9e..555cceb41 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -238,13 +238,13 @@ async function generateAccessors(languageClient: LanguageClient, params: Accesso }); let accessorsKind: string; switch (params.kind) { - case AccessorKind.BOTH: + case AccessorKind.both: accessorsKind = "getters and setters"; break; - case AccessorKind.GETTER: + case AccessorKind.getter: accessorsKind = "getters"; break; - case AccessorKind.SETTER: + case AccessorKind.setter: accessorsKind = "setters"; break; default: diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index a0d36c68a..ac621fe85 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -49,10 +49,10 @@ const GRADLE_IMPORT_JVM = "java.import.gradle.java.home"; export class StandardLanguageClient { private languageClient: LanguageClient; - private status: ClientStatus = ClientStatus.Uninitialized; + private status: ClientStatus = ClientStatus.uninitialized; public async initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter, resolve: (value: ExtensionAPI) => void): Promise { - if (this.status !== ClientStatus.Uninitialized) { + if (this.status !== ClientStatus.uninitialized) { return; } @@ -68,11 +68,11 @@ export class StandardLanguageClient { serverStatus.initialize(); serverStatus.onServerStatusChanged(status => { - if (status === ServerStatusKind.Busy) { + if (status === ServerStatusKind.busy) { serverStatusBarProvider.setBusy(); - } else if (status === ServerStatusKind.Error) { + } else if (status === ServerStatusKind.error) { serverStatusBarProvider.setError(); - } else if (status === ServerStatusKind.Warning) { + } else if (status === ServerStatusKind.warning) { serverStatusBarProvider.setWarning(); } else { serverStatusBarProvider.setReady(); @@ -108,8 +108,8 @@ export class StandardLanguageClient { this.languageClient.onNotification(StatusNotification.type, (report) => { switch (report.type) { case 'ServiceReady': - apiManager.updateServerMode(ServerMode.STANDARD); - apiManager.fireDidServerModeChange(ServerMode.STANDARD); + apiManager.updateServerMode(ServerMode.standard); + apiManager.fireDidServerModeChange(ServerMode.standard); apiManager.resolveServerReadyPromise(); activationProgressNotification.hide(); if (!hasImported) { @@ -123,25 +123,25 @@ export class StandardLanguageClient { snippetCompletionProvider.dispose(); break; case 'Started': - this.status = ClientStatus.Started; - serverStatus.updateServerStatus(ServerStatusKind.Ready); + this.status = ClientStatus.started; + serverStatus.updateServerStatus(ServerStatusKind.ready); commands.executeCommand('setContext', 'javaLSReady', true); - apiManager.updateStatus(ClientStatus.Started); + apiManager.updateStatus(ClientStatus.started); resolve(apiManager.getApiInstance()); break; case 'Error': - this.status = ClientStatus.Error; - serverStatus.updateServerStatus(ServerStatusKind.Error); - apiManager.updateStatus(ClientStatus.Error); + this.status = ClientStatus.error; + serverStatus.updateServerStatus(ServerStatusKind.error); + apiManager.updateStatus(ClientStatus.error); resolve(apiManager.getApiInstance()); break; case 'ProjectStatus': if (report.message === "WARNING") { - serverStatus.updateServerStatus(ServerStatusKind.Warning); + serverStatus.updateServerStatus(ServerStatusKind.warning); } else if (report.message === "OK") { - this.status = ClientStatus.Started; + this.status = ClientStatus.started; serverStatus.errorResolved(); - serverStatus.updateServerStatus(ServerStatusKind.Ready); + serverStatus.updateServerStatus(ServerStatusKind.ready); } return; case 'Starting': @@ -160,10 +160,10 @@ export class StandardLanguageClient { this.languageClient.onNotification(EventNotification.type, async (notification) => { switch (notification.eventType) { - case EventType.ClasspathUpdated: + case EventType.classpathUpdated: apiManager.fireDidClasspathUpdate(Uri.parse(notification.data)); break; - case EventType.ProjectsImported: + case EventType.projectsImported: const projectUris: Uri[] = []; if (notification.data) { for (const uriString of notification.data) { @@ -174,7 +174,7 @@ export class StandardLanguageClient { apiManager.fireDidProjectsImport(projectUris); } break; - case EventType.IncompatibleGradleJdkIssue: + case EventType.incompatibleGradleJdkIssue: const options: string[] = []; const info = notification.data as GradleCompatibilityInfo; const highestJavaVersion = Number(info.highestJavaVersion); @@ -192,7 +192,7 @@ export class StandardLanguageClient { } this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, info.recommendedGradleVersion, runtimes[0]?.homedir); break; - case EventType.UpgradeGradleWrapper: + case EventType.upgradeGradleWrapper: const neverShow: boolean | undefined = context.globalState.get("java.neverShowUpgradeWrapperNotification"); if (!neverShow) { const upgradeInfo = notification.data as UpgradeGradleWrapperInfo; @@ -264,7 +264,7 @@ export class StandardLanguageClient { result.push(null); } } else { - result.push(workspace.getConfiguration(null, scopeUri).get(item.section, null /*defaultValue*/)); + result.push(workspace.getConfiguration(null, scopeUri).get(item.section, null /* defaultValue */)); } } return result; @@ -276,11 +276,11 @@ export class StandardLanguageClient { collectBuildFilePattern(extensions.all); - this.status = ClientStatus.Initialized; + this.status = ClientStatus.initialized; } private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { - window.showErrorMessage(message + " [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)", ...options).then(async (choice) => { + window.showErrorMessage(`${message} [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)`, ...options).then(async (choice) => { if (choice === GET_JDK) { commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(getJdkUrl())); } else if (choice.startsWith(USE_JAVA)) { @@ -375,25 +375,25 @@ export class StandardLanguageClient { context.subscriptions.push(commands.registerCommand(Commands.SHOW_TYPE_HIERARCHY, (location: any) => { if (location instanceof Uri) { - typeHierarchyTree.setTypeHierarchy(new Location(location, window.activeTextEditor.selection.active), TypeHierarchyDirection.Both); + typeHierarchyTree.setTypeHierarchy(new Location(location, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); } else { if (window.activeTextEditor?.document?.languageId !== "java") { return; } - typeHierarchyTree.setTypeHierarchy(new Location(window.activeTextEditor.document.uri, window.activeTextEditor.selection.active), TypeHierarchyDirection.Both); + typeHierarchyTree.setTypeHierarchy(new Location(window.activeTextEditor.document.uri, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); } })); context.subscriptions.push(commands.registerCommand(Commands.SHOW_CLASS_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.Both); + typeHierarchyTree.changeDirection(TypeHierarchyDirection.both); })); context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUPERTYPE_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.Parents); + typeHierarchyTree.changeDirection(TypeHierarchyDirection.parents); })); context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUBTYPE_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.Children); + typeHierarchyTree.changeDirection(TypeHierarchyDirection.children); })); context.subscriptions.push(commands.registerCommand(Commands.CHANGE_BASE_TYPE, async (item: TypeHierarchyItem) => { @@ -442,7 +442,7 @@ export class StandardLanguageClient { await this.languageClient.sendRequest(BuildProjectRequest.type, params); } catch (error) { if (error && error.code === -32800) { // Check if the request is cancelled. - res = CompileWorkspaceStatus.CANCELLED; + res = CompileWorkspaceStatus.cancelled; } reject(error); } @@ -470,7 +470,7 @@ export class StandardLanguageClient { : await this.languageClient.sendRequest(CompileWorkspaceRequest.type, isFullCompile); } catch (error) { if (error && error.code === -32800) { // Check if the request is cancelled. - res = CompileWorkspaceStatus.CANCELLED; + res = CompileWorkspaceStatus.cancelled; } else { throw error; } @@ -480,7 +480,7 @@ export class StandardLanguageClient { const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; return new Promise((resolve, reject) => { setTimeout(() => { // set a timeout so user would still see the message when build time is short - if (res === CompileWorkspaceStatus.SUCCEED) { + if (res === CompileWorkspaceStatus.succeed) { resolve(res); } else { reject(res); @@ -509,6 +509,7 @@ export class StandardLanguageClient { canSelectFolders: false, canSelectMany: false, filters: { + // eslint-disable-next-line @typescript-eslint/naming-convention 'Source files': ['jar', 'zip'] }, }); @@ -573,14 +574,14 @@ export class StandardLanguageClient { } public start(): void { - if (this.languageClient && this.status === ClientStatus.Initialized) { + if (this.languageClient && this.status === ClientStatus.initialized) { this.languageClient.start(); - this.status = ClientStatus.Starting; + this.status = ClientStatus.starting; } } public stop(): Promise { - this.status = ClientStatus.Stopping; + this.status = ClientStatus.stopping; if (this.languageClient) { try { return this.languageClient.stop(); diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 0d3dbfe77..1c0acd74d 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -15,7 +15,7 @@ const extensionName = "Language Support for Java (Syntax Server)"; export class SyntaxLanguageClient { private languageClient: LanguageClient; - private status: ClientStatus = ClientStatus.Uninitialized; + private status: ClientStatus = ClientStatus.uninitialized; public initialize(requirements, clientOptions: LanguageClientOptions, resolve: (value: ExtensionAPI) => void, serverOptions?: ServerOptions) { const newClientOptions: LanguageClientOptions = Object.assign({}, clientOptions, { @@ -60,37 +60,37 @@ export class SyntaxLanguageClient { this.languageClient.onNotification(StatusNotification.type, (report) => { switch (report.type) { case 'Started': - this.status = ClientStatus.Started; - apiManager.updateStatus(ClientStatus.Started); + this.status = ClientStatus.started; + apiManager.updateStatus(ClientStatus.started); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); break; case 'Error': - this.status = ClientStatus.Error; - apiManager.updateStatus(ClientStatus.Error); + this.status = ClientStatus.error; + apiManager.updateStatus(ClientStatus.error); break; default: break; } - if (apiManager.getApiInstance().serverMode === ServerMode.LIGHTWEIGHT) { + if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { this.resolveApiOnReady(resolve); } }); }); } - this.status = ClientStatus.Initialized; + this.status = ClientStatus.initialized; } public start(): void { if (this.languageClient) { this.languageClient.start(); - this.status = ClientStatus.Starting; + this.status = ClientStatus.starting; } } public stop(): Promise { - this.status = ClientStatus.Stopping; + this.status = ClientStatus.stopping; if (this.languageClient) { try { return this.languageClient.stop(); @@ -102,7 +102,7 @@ export class SyntaxLanguageClient { } public isAlive(): boolean { - return !!this.languageClient && this.status !== ClientStatus.Stopping; + return !!this.languageClient && this.status !== ClientStatus.stopping; } public getClient(): LanguageClient { @@ -110,13 +110,13 @@ export class SyntaxLanguageClient { } public resolveApi(resolve: (value: ExtensionAPI) => void): void { - apiManager.getApiInstance().serverMode = ServerMode.LIGHTWEIGHT; - apiManager.fireDidServerModeChange(ServerMode.LIGHTWEIGHT); + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); this.resolveApiOnReady(resolve); } private resolveApiOnReady(resolve: (value: ExtensionAPI) => void): void { - if ([ClientStatus.Started, ClientStatus.Error].includes(this.status)) { + if ([ClientStatus.started, ClientStatus.error].includes(this.status)) { resolve(apiManager.getApiInstance()); } } diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index f200751ca..d276801f2 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -16,13 +16,13 @@ export class TypeHierarchyTreeInput implements SymbolTreeInput = { @@ -96,19 +96,19 @@ export class TypeHierarchyModel implements SymbolItemNavigation { - private readonly _emitter: vscode.EventEmitter = new vscode.EventEmitter(); - private readonly _modelListener: vscode.Disposable; + private readonly emitter: vscode.EventEmitter = new vscode.EventEmitter(); + private readonly modelListener: vscode.Disposable; private lazyLoad: boolean; - public readonly onDidChangeTreeData: vscode.Event = this._emitter.event; + public readonly onDidChangeTreeData: vscode.Event = this.emitter.event; constructor(readonly model: TypeHierarchyModel, readonly client: LanguageClient, readonly token: CancellationToken) { - this._modelListener = model.onDidChangeEvent(e => this._emitter.fire(e instanceof TypeHierarchyItem ? e : undefined)); + this.modelListener = model.onDidChangeEvent(e => this.emitter.fire(e instanceof TypeHierarchyItem ? e : undefined)); this.lazyLoad = workspace.getConfiguration().get("java.typeHierarchy.lazyLoad"); } dispose(): void { - this._emitter.dispose(); - this._modelListener.dispose(); + this.emitter.dispose(); + this.modelListener.dispose(); } async getTreeItem(element: TypeHierarchyItem): Promise { @@ -130,7 +130,7 @@ class TypeHierarchyTreeDataProvider implements vscode.TreeDataProvider { return (a.kind.toString() === b.kind.toString()) ? a.name.localeCompare(b.name) : b.kind.toString().localeCompare(a.kind.toString()); }); } } - if (direction === TypeHierarchyDirection.Children || direction === TypeHierarchyDirection.Both) { + if (direction === TypeHierarchyDirection.children || direction === TypeHierarchyDirection.both) { if (lspTypeHierarchyItem.children) { children = []; for (const child of lspTypeHierarchyItem.children) { - children.push(ToTypeHierarchyItem(client, child, TypeHierarchyDirection.Children)); + children.push(toTypeHierarchyItem(client, child, TypeHierarchyDirection.children)); } children = children.sort((a, b) => { return (a.kind.toString() === b.kind.toString()) ? a.name.localeCompare(b.name) : b.kind.toString().localeCompare(a.kind.toString()); @@ -66,11 +66,11 @@ export function ToTypeHierarchyItem(client: LanguageClient, lspTypeHierarchyItem export function typeHierarchyDirectionToContextString(direction: TypeHierarchyDirection): string { switch (direction) { - case TypeHierarchyDirection.Children: + case TypeHierarchyDirection.children: return "children"; - case TypeHierarchyDirection.Parents: + case TypeHierarchyDirection.parents: return "parents"; - case TypeHierarchyDirection.Both: + case TypeHierarchyDirection.both: return "both"; default: return undefined; @@ -78,7 +78,7 @@ export function typeHierarchyDirectionToContextString(direction: TypeHierarchyDi } export async function resolveTypeHierarchy(client: LanguageClient, typeHierarchyItem: TypeHierarchyItem, direction: TypeHierarchyDirection, token: CancellationToken): Promise { - const lspTypeHierarchyItem = ToSingleLSPTypeHierarchyItem(client, typeHierarchyItem); + const lspTypeHierarchyItem = toSingleLSPTypeHierarchyItem(client, typeHierarchyItem); let resolvedLSPItem: LSPTypeHierarchyItem; try { resolvedLSPItem = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.RESOLVE_TYPE_HIERARCHY, JSON.stringify(lspTypeHierarchyItem), JSON.stringify(direction), JSON.stringify(1), token); @@ -86,7 +86,7 @@ export async function resolveTypeHierarchy(client: LanguageClient, typeHierarchy // operation cancelled return undefined; } - const resolvedItem = ToTypeHierarchyItem(client, resolvedLSPItem, direction); + const resolvedItem = toTypeHierarchyItem(client, resolvedLSPItem, direction); if (!resolvedItem) { return undefined; } @@ -99,7 +99,7 @@ export async function getRootItem(client: LanguageClient, typeHierarchyItem: Typ return undefined; } if (!typeHierarchyItem.parents) { - const resolvedItem = await resolveTypeHierarchy(client, typeHierarchyItem, TypeHierarchyDirection.Parents, token); + const resolvedItem = await resolveTypeHierarchy(client, typeHierarchyItem, TypeHierarchyDirection.parents, token); if (!resolvedItem || !resolvedItem.parents) { return typeHierarchyItem; } else { diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index a7164f234..4ee87ad15 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -3,7 +3,6 @@ import * as vscode from 'vscode'; import { Commands } from '../../src/commands'; import { extensions } from 'vscode'; -// tslint:disable: only-arrow-functions suite('Java Language Extension - LightWeight', () => { suiteSetup(async function() { diff --git a/test/lightweight-mode-suite/index.ts b/test/lightweight-mode-suite/index.ts index dd8819b3b..b04cc328f 100644 --- a/test/lightweight-mode-suite/index.ts +++ b/test/lightweight-mode-suite/index.ts @@ -18,7 +18,7 @@ export function run(testsRoot: string): Promise { const mocha = new Mocha({ ui: 'tdd', useColors: true, - timeout: 1 * 60 * 1000, /*ms*/ + timeout: 1 * 60 * 1000, /* ms*/ }); return new Promise((c, e) => { diff --git a/test/lightweight-mode-suite/publicApi.test.ts b/test/lightweight-mode-suite/publicApi.test.ts index e8f852790..b1ee770b2 100644 --- a/test/lightweight-mode-suite/publicApi.test.ts +++ b/test/lightweight-mode-suite/publicApi.test.ts @@ -2,7 +2,7 @@ import * as assert from 'assert'; import * as path from 'path'; -import { ExtensionAPI, ExtensionApiVersion, ClasspathResult } from '../../src/extension.api'; +import { ExtensionAPI, extensionApiVersion, ClasspathResult } from '../../src/extension.api'; import { Uri, DocumentSymbol, extensions, commands } from 'vscode'; import { ServerMode } from '../../src/settings'; import * as fse from 'fs-extra'; @@ -12,7 +12,6 @@ import { constants } from '../common'; const pomPath: string = path.join(constants.projectFsPath, 'pom.xml'); -// tslint:disable: only-arrow-functions suite('Public APIs - LightWeight', () => { suiteSetup(async function() { @@ -22,7 +21,7 @@ suite('Public APIs - LightWeight', () => { test('version should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - assert.equal(api.apiVersion, ExtensionApiVersion); + assert.equal(api.apiVersion, extensionApiVersion); }); test('requirement should be correct', async function () { @@ -114,7 +113,7 @@ suite('Public APIs - LightWeight', () => { test('server mode should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - assert.equal(api.serverMode, ServerMode.LIGHTWEIGHT); + assert.equal(api.serverMode, ServerMode.lightWeight); }); test('onDidProjectsImport should work', async function () { @@ -135,14 +134,14 @@ suite('Public APIs - LightWeight', () => { api.onDidServerModeChange((mode) => { onDidChangeServerModeCount++; if (onDidChangeServerModeCount === 1) { - assert.equal(mode, ServerMode.HYBRID); + assert.equal(mode, ServerMode.hybrid); } else if (onDidChangeServerModeCount === 2) { - assert.equal(mode, ServerMode.STANDARD); + assert.equal(mode, ServerMode.standard); return resolve(); } }); - await commands.executeCommand(Commands.SWITCH_SERVER_MODE, "Standard", true/*force*/); + await commands.executeCommand(Commands.SWITCH_SERVER_MODE, "Standard", true/* force */); }); assert.equal(onDidChangeServerModeCount, 2); diff --git a/test/runtest.ts b/test/runtest.ts index 77fcbd5b1..17f806587 100644 --- a/test/runtest.ts +++ b/test/runtest.ts @@ -14,10 +14,12 @@ async function main() { // run tests for standard mode await fse.copy(testProjectOriginPath, testProjectPath); await fse.ensureDir(path.join(testProjectPath, '.vscode')); + /* eslint-disable @typescript-eslint/naming-convention */ await fse.writeJSON(settingsJsonPath, { "java.server.launchMode": "Standard", "java.configuration.updateBuildConfiguration": "automatic" }); + /* eslint-enable @typescript-eslint/naming-convention */ await runTests({ extensionDevelopmentPath, @@ -31,9 +33,11 @@ async function main() { // run tests for lightweight mode console.log("setup settings.json for lightweight mode..."); + /* eslint-disable @typescript-eslint/naming-convention */ await fse.writeJSON(settingsJsonPath, { "java.server.launchMode": "LightWeight", }); + /* eslint-enable @typescript-eslint/naming-convention */ console.log("running lightweight cases..."); await runTests({ diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 74a293a43..52a093725 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -8,7 +8,6 @@ import * as requirements from '../../src/requirements'; import { Commands } from '../../src/commands'; import { env } from 'process'; -// tslint:disable: only-arrow-functions suite('Java Language Extension - Standard', () => { test('Extension should be present', () => { diff --git a/test/standard-mode-suite/gotoSuperImplementation.test.ts b/test/standard-mode-suite/gotoSuperImplementation.test.ts index 17a699f79..109e5ace1 100644 --- a/test/standard-mode-suite/gotoSuperImplementation.test.ts +++ b/test/standard-mode-suite/gotoSuperImplementation.test.ts @@ -8,7 +8,6 @@ import { Commands } from '../../src/commands'; const projectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); const fileFsPath: string = path.join(projectFsPath, 'src', 'main', 'java', 'java', 'Foo3.java'); -// tslint:disable: only-arrow-functions suite('Goto Super Implementation', () => { suiteSetup(async function() { diff --git a/test/standard-mode-suite/index.ts b/test/standard-mode-suite/index.ts index dd8819b3b..b04cc328f 100644 --- a/test/standard-mode-suite/index.ts +++ b/test/standard-mode-suite/index.ts @@ -18,7 +18,7 @@ export function run(testsRoot: string): Promise { const mocha = new Mocha({ ui: 'tdd', useColors: true, - timeout: 1 * 60 * 1000, /*ms*/ + timeout: 1 * 60 * 1000, /* ms*/ }); return new Promise((c, e) => { diff --git a/test/standard-mode-suite/projects.test.ts b/test/standard-mode-suite/projects.test.ts index 862ca1b58..dca5196be 100644 --- a/test/standard-mode-suite/projects.test.ts +++ b/test/standard-mode-suite/projects.test.ts @@ -10,7 +10,6 @@ import { projectConfigurationUpdate } from '../../src/standardLanguageClientUtil const projectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); -// tslint:disable: only-arrow-functions suite('Project Operations Test', () => { test('Reload project by test document identifier', async function () { diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index 1c966cad7..e349a81dc 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -2,7 +2,7 @@ import * as assert from 'assert'; import * as path from 'path'; -import { ExtensionAPI, ExtensionApiVersion, ClasspathResult } from '../../src/extension.api'; +import { ExtensionAPI, extensionApiVersion, ClasspathResult } from '../../src/extension.api'; import { Uri, DocumentSymbol, extensions, commands } from 'vscode'; import { ServerMode } from '../../src/settings'; import * as fse from 'fs-extra'; @@ -14,7 +14,6 @@ import { env } from 'process'; const pomPath: string = path.join(constants.projectFsPath, 'pom.xml'); const gradleTestFolder: string = path.join(constants.projectFsPath, 'testGradle'); -// tslint:disable: only-arrow-functions suite('Public APIs - Standard', () => { suiteSetup(async function() { @@ -25,7 +24,7 @@ suite('Public APIs - Standard', () => { test('version should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - assert.equal(api.apiVersion, ExtensionApiVersion); + assert.equal(api.apiVersion, extensionApiVersion); }); test('requirement should be correct', async function () { @@ -141,7 +140,7 @@ suite('Public APIs - Standard', () => { test('server mode should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - assert.equal(api.serverMode, ServerMode.STANDARD); + assert.equal(api.serverMode, ServerMode.standard); }); test('onDidServerModeChange should work', async function () { diff --git a/test/standard-mode-suite/rename.test.ts b/test/standard-mode-suite/rename.test.ts index d847dfd38..80d69ccab 100644 --- a/test/standard-mode-suite/rename.test.ts +++ b/test/standard-mode-suite/rename.test.ts @@ -9,7 +9,6 @@ const originFilePath: string = path.join(constants.projectFsPath, 'src', 'main', const newFilePath: string = path.join(constants.projectFsPath, 'src', 'main', 'java', 'java', 'Foo1.java'); // Rename refactoring will pop up a dialog for confirm, didn't find a way to bypass it. So skip this test case. -// tslint:disable: only-arrow-functions suite.skip('Rename tests', () => { suiteSetup(async function() { @@ -25,7 +24,7 @@ suite.skip('Rename tests', () => { // wait for the extension to update the class name, // if it's not updated, this case will fail on timeout - 60s. while (true) { - await sleep(5 * 1000 /*ms*/); + await sleep(5 * 1000 /* ms */); if (document.getText().includes("public class Foo1")) { break; } @@ -41,7 +40,7 @@ suite.skip('Rename tests', () => { const document: TextDocument = await workspace.openTextDocument(Uri.file(path.join(originFilePath))); while (true) { - await sleep(5 * 1000 /*ms*/); + await sleep(5 * 1000 /* ms */); if (document.getText().includes("public class Foo")) { break; } diff --git a/test/standard-mode-suite/snippetCompletionProvider.test.ts b/test/standard-mode-suite/snippetCompletionProvider.test.ts index 1ccb1b8e3..7e96af28c 100644 --- a/test/standard-mode-suite/snippetCompletionProvider.test.ts +++ b/test/standard-mode-suite/snippetCompletionProvider.test.ts @@ -5,7 +5,7 @@ import { MarkdownString } from 'vscode'; suite('Snippet Completion Provider', () => { test('should render document correctly', () => { - // tslint:disable: prefer-template + // /* eslint-disable prefer-arrow-callback, prefer-arrow/prefer-arrow-functions */:disable: prefer-template const raw = "for (${1:int} ${2:i} = ${3:0}; ${2:i} < ${4:max}; ${2:i}++) {\n" + "\t$0\n" + "}"; const markdownString: MarkdownString = beautifyDocument(raw); const expected: string = "\n```java\n" + "for (int i = 0; i < max; i++) {\n" + "\t\n" + "}\n" + "```\n"; diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index f62b6c079..ee3d5b560 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -13,7 +13,6 @@ const IMPORT_EXCLUSION: string = "import.exclusions"; const IMPORT_MAVEN_ENABLED: string = "import.maven.enabled"; const IMPORT_GRADLE_ENABLED: string = "import.gradle.enabled"; -// tslint:disable: only-arrow-functions suite('Utils Test', () => { suiteSetup(async function() { diff --git a/tsconfig.json b/tsconfig.json index e3f76fb10..0a41f04d8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -8,7 +8,7 @@ "moduleResolution": "node", "outDir": "out", "sourceMap": true, - "plugins": [{ "name": "typescript-tslint-plugin" }] + "plugins": [{ "name": "eslint" }] }, "exclude": [ "node_modules", diff --git a/tslint.json b/tslint.json deleted file mode 100644 index 7898c2182..000000000 --- a/tslint.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "rules": { - "encoding": true, - "only-arrow-functions": [ - true, "allow-declarations", "allow-named-functions" - ], - "no-var-keyword": true, - "object-literal-key-quotes": [ - true, "as-needed" - ], - "comment-format": [true, "check-space"], - "curly": [true, "ignore-same-line"], - "triple-equals": true, - "prefer-const": true, - "prefer-for-of": true, - "variable-name": [ - true, - "allow-leading-underscore", - "allow-pascal-case", - "ban-keywords", - "check-format" - ], - "switch-final-break": [true, "always"], - "prefer-template": [true, "allow-single-concat"], - "semicolon": [true, "always"], - "no-consecutive-blank-lines": true, - "no-boolean-literal-compare": true, - "whitespace": [ - true, - "check-branch", - "check-decl", - "check-module", - "check-separator", - "check-type", - "check-preblock" - ], - "typedef-whitespace": [ - true, - { - "call-signature": "nospace", - "index-signature": "nospace", - "parameter": "nospace", - "property-declaration": "nospace", - "variable-declaration": "nospace" - }, - { - "call-signature": "onespace", - "index-signature": "onespace", - "parameter": "onespace", - "property-declaration": "onespace", - "variable-declaration": "onespace" - } - ], - "no-trailing-whitespace": true, - "no-debugger": true - } -} diff --git a/webpack.config.js b/webpack.config.js index eca05999d..eec53b45c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -2,41 +2,53 @@ // Licensed under the MIT license. //@ts-check +const ESLintWebpackPlugin = require('eslint-webpack-plugin'); const path = require('path'); /**@type {import('webpack').Configuration}*/ const config = { - watchOptions:{ + watchOptions: { ignored: /node_modules/ }, - target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ - node: { - __dirname: false, - __filename: false, - }, - entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ - output: { // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ - path: path.resolve(__dirname, 'dist'), - filename: 'extension.js', - libraryTarget: "commonjs2", - devtoolModuleFilenameTemplate: "../[resource-path]", - }, - externals: { - vscode: "commonjs vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ - fsevents: "require('fsevents')", // https://github.com/yan-foto/electron-reload/issues/71#issuecomment-588988382 - }, - devtool: 'source-map', - resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader - extensions: ['.ts', '.js'], - }, - module: { - rules: [{ - test: /\.ts$/, - exclude: /node_modules/, - use: [{ - loader: 'ts-loader', - }] - }] - }, + target: 'node', // vscode extensions run in a Node.js-context 📖 -> https://webpack.js.org/configuration/node/ + node: { + __dirname: false, + __filename: false, + }, + entry: './src/extension.ts', // the entry point of this extension, 📖 -> https://webpack.js.org/configuration/entry-context/ + output: { // the bundle is stored in the 'dist' folder (check package.json), 📖 -> https://webpack.js.org/configuration/output/ + path: path.resolve(__dirname, 'dist'), + filename: 'extension.js', + libraryTarget: "commonjs2", + devtoolModuleFilenameTemplate: "../[resource-path]", + }, + externals: { + vscode: "commonjs vscode", // the vscode-module is created on-the-fly and must be excluded. Add other modules that cannot be webpack'ed, 📖 -> https://webpack.js.org/configuration/externals/ + fsevents: "require('fsevents')", // https://github.com/yan-foto/electron-reload/issues/71#issuecomment-588988382 + }, + devtool: 'source-map', + resolve: { // support reading TypeScript and JavaScript files, 📖 -> https://github.com/TypeStrong/ts-loader + extensions: ['.ts', '.js'], + }, + module: { + rules: [{ + test: /\.ts$/, + exclude: /node_modules/, + use: [{ + loader: 'ts-loader', + }] + }] + }, + plugins: [ + new ESLintWebpackPlugin({ + extensions: [ + ".ts", + ".js" + ] + }) + ], + infrastructureLogging: { + level: 'log', + }, } module.exports = config; From 0015d451516ec4029cc06d58c7528b83133d5f7d Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 22 Sep 2022 12:37:01 +0800 Subject: [PATCH 213/708] Fix the package statement missing when creating java files Signed-off-by: Sheng Chen --- src/fileEventHandler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index ff219b0b0..0128bdf9c 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -90,7 +90,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { } if (!isModuleInfo) { - if (context.package_name) { + if (context.packageName) { snippets.push(`package ${context.packageName};`); snippets.push(""); } From 393c44c64dfe6f3e48b48a84dcc31e7f306f3585 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 20 Sep 2022 15:59:14 -0400 Subject: [PATCH 214/708] Document import order for static members. - Fixes #711 - Make the default of "" & "#" explicit (change is no-op) so the behaviour is understood Signed-off-by: Roland Grunberg --- package.json | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d0c576eed..e358fc41a 100644 --- a/package.json +++ b/package.json @@ -550,12 +550,14 @@ }, "java.completion.importOrder": { "type": "array", - "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group.", + "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group. As a result, the empty string (e.g. '') can be used to group all other imports. Static imports are prefixed with a '#'", "default": [ + "#", "java", "javax", "org", - "com" + "com", + "" ], "scope": "window" }, From 5adcabbe3a04804d15858a161f3c2022f5667669 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 22 Sep 2022 11:07:18 -0400 Subject: [PATCH 215/708] Disable JVM logging by default. - Since any JVM component may invoke logging, it may be best to disable all logging - Related #2577 - Fixes #2292 Signed-off-by: Roland Grunberg --- package.json | 4 ++-- src/javaServerStarter.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index e358fc41a..d7e11e458 100644 --- a/package.json +++ b/package.json @@ -213,8 +213,8 @@ "string", "null" ], - "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:jni+resolve=off", - "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:jni+resolve=off` to optimize memory usage with the parallel garbage collector", + "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable", + "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", "scope": "machine-overridable" }, "java.errors.incompleteClasspath.severity": { diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 718f60f2d..9d1d8b1b7 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -112,8 +112,8 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp params.push(`${watchParentProcess}false`); } } - if (vmargs.indexOf('-Xlog:jni+resolve=') < 0) { - params.push('-Xlog:jni+resolve=off'); + if (vmargs.indexOf('-Xlog:') < 0) { + params.push('-Xlog:disable'); } parseVMargs(params, vmargs); From 092bd4e25ddbd3d257226996c991b964978c5b51 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 26 Sep 2022 15:38:05 +0800 Subject: [PATCH 216/708] Support creating module-info.java (#2680) Signed-off-by: Sheng Chen --- package.json | 5 +++++ package.nls.json | 3 ++- package.nls.zh-cn.json | 3 ++- package.nls.zh-tw.json | 5 +++-- src/commands.ts | 10 ++++++++++ src/standardLanguageClient.ts | 21 +++++++++++++++++++++ src/standardLanguageClientUtils.ts | 28 ++++++++++++++++------------ 7 files changed, 59 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index d7e11e458..4efa78663 100644 --- a/package.json +++ b/package.json @@ -1087,6 +1087,11 @@ "command": "java.action.changeBaseType", "title": "%java.action.changeBaseType%", "category": "Java" + }, + { + "command": "java.project.createModuleInfo.command", + "title": "%java.project.createModuleInfo.command%", + "category": "Java" } ], "keybindings": [ diff --git a/package.nls.json b/package.nls.json index 97f7d3e45..3749f7c9a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -21,5 +21,6 @@ "java.action.showClassHierarchy": "Show Class Hierarchy", "java.action.showSupertypeHierarchy": "Show Supertype Hierarchy", "java.action.showSubtypeHierarchy": "Show Subtype Hierarchy", - "java.action.changeBaseType": "Base on this Type" + "java.action.changeBaseType": "Base on this Type", + "java.project.createModuleInfo.command": "Create module-info.java" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 7864cf5e9..ae5f2d759 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -21,5 +21,6 @@ "java.action.showClassHierarchy": "显示类的继承关系", "java.action.showSupertypeHierarchy": "显示父类层次结构", "java.action.showSubtypeHierarchy": "显示子类层次结构", - "java.action.changeBaseType": "基于此类型" + "java.action.changeBaseType": "基于此类型", + "java.project.createModuleInfo.command": "创建 module-info.java" } diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 6b9d0bd19..8c6856e68 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -21,5 +21,6 @@ "java.action.showClassHierarchy": "顯示類別階層結構", "java.action.showSupertypeHierarchy": "顯示父類別階層結構", "java.action.showSubtypeHierarchy": "顯示子類別階層結構", - "java.action.changeBaseType": "以此型別為基礎" -} + "java.action.changeBaseType": "以此型別為基礎", + "java.project.createModuleInfo.command": "創建 module-info.java" +} \ No newline at end of file diff --git a/src/commands.ts b/src/commands.ts index 1dff4ce9d..2af1be5fb 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -277,4 +277,14 @@ export namespace Commands { export const UPGRADE_GRADLE_WRAPPER = '_java.gradle.upgradeWrapper'; export const LOMBOK_CONFIGURE = "java.lombokConfigure"; + + /** + * The JDT.LS command to create module-info.java + */ + export const CREATE_MODULE_INFO = "java.project.createModuleInfo"; + + /** + * The VS Code command to create module-info.java + */ + export const CREATE_MODULE_INFO_COMMAND = "java.project.createModuleInfo.command"; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index ac621fe85..c8619ffc8 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -552,6 +552,27 @@ export class StandardLanguageClient { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_REFACTORING}.md`)), 'Java Refactoring', sectionId, context); })); + context.subscriptions.push(commands.registerCommand(Commands.CREATE_MODULE_INFO_COMMAND, async () => { + const uri = await askForProjects( + window.activeTextEditor?.document.uri, + "Please select the project to create module-info.java", + false, + ); + if (!uri?.length) { + return; + } + + const moduleInfoUri: string = await commands.executeCommand( + Commands.EXECUTE_WORKSPACE_COMMAND, + Commands.CREATE_MODULE_INFO, + uri[0].toString(), + ); + + if (moduleInfoUri) { + await window.showTextDocument(Uri.parse(moduleInfoUri)); + } + })); + languages.registerCodeActionsProvider({ language: "xml", scheme: "file", diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts index 8d682b529..765e3f146 100644 --- a/src/standardLanguageClientUtils.ts +++ b/src/standardLanguageClientUtils.ts @@ -56,26 +56,30 @@ function isJavaConfigFile(filePath: string) { * @param activeFileUri the uri of the active file. * @param placeHolder message to be shown in quick pick. */ -export async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string): Promise { +export async function askForProjects(activeFileUri: Uri | undefined, placeHolder: string, canPickMany: boolean = true): Promise { const projectPicks: QuickPickItem[] = await generateProjectPicks(activeFileUri); if (!projectPicks?.length) { return []; } else if (projectPicks.length === 1) { return [Uri.file(projectPicks[0].detail)]; - } else { - const choices: QuickPickItem[] | undefined = await window.showQuickPick(projectPicks, { - matchOnDetail: true, - placeHolder: placeHolder, - ignoreFocusOut: true, - canPickMany: true, - }); + } - if (choices?.length) { - return choices.map(c => Uri.file(c.detail)); - } + const choices: QuickPickItem[] | QuickPickItem | undefined = await window.showQuickPick(projectPicks, { + matchOnDetail: true, + placeHolder: placeHolder, + ignoreFocusOut: true, + canPickMany: canPickMany, + }); + + if (!choices) { + return []; + } + + if (Array.isArray(choices)) { + return choices.map(c => Uri.file(c.detail)); } - return []; + return [Uri.file(choices.detail)]; } /** From acaf6e30ea641226613de9fbf8579c09b7abafea Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 28 Sep 2022 17:25:14 +0800 Subject: [PATCH 217/708] Enable annotation-based null analysis (#2677) * enable annotation-based null analysis Signed-off-by: Shi Chen --- README.md | 4 ++++ package.json | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/README.md b/README.md index 2cbf229ff..850c8695c 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,10 @@ New in 1.10.0 * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. +New in 1.11.0 +* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. +* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 4efa78663..f70c743a4 100644 --- a/package.json +++ b/package.json @@ -960,6 +960,26 @@ "default": true, "description": "Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring.", "scope": "window" + }, + "java.compile.nullAnalysis.nonnull": { + "type": "array", + "default": [ + "javax.annotation.Nonnull", + "org.eclipse.jdt.annotation.NonNull", + "org.springframework.lang.NonNull" + ], + "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies.", + "scope": "window" + }, + "java.compile.nullAnalysis.nullable": { + "type": "array", + "default": [ + "javax.annotation.Nullable", + "org.eclipse.jdt.annotation.Nullable", + "org.springframework.lang.Nullable" + ], + "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies.", + "scope": "window" } } }, From 8f1e4707d45aba89b794a282aa47f3200971af7a Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 28 Sep 2022 16:31:00 +0200 Subject: [PATCH 218/708] Fix bad .git resourceFilter Signed-off-by: Fred Bricon --- README.md | 2 +- package.json | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 850c8695c..352da0c01 100644 --- a/README.md +++ b/README.md @@ -183,7 +183,7 @@ The following settings are supported: * `java.project.importOnFirstTimeStartup`: Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time. Supported values are `disabled` (never imports), `interactive` (asks to import or not), `automatic` (always imports). Default to `automatic`. * `java.project.importHint`: Enable/disable the server-mode switch information, when Java projects import is skipped on startup. Defaults to `true`. * `java.import.gradle.java.home`: Specifies the location to the JVM used to run the Gradle daemon. -* `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules",".git"] will exclude all files and folders named 'node_modules' or '.git'. Defaults to ["node_modules",".git"]. +* `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules","\.git"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to ["node_modules","\.git"]. * `java.templates.fileHeader`: Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.typeComment`: Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.references.includeAccessors`: Include getter, setter and builder/constructor when finding references. Default to true. diff --git a/package.json b/package.json index f70c743a4..f3fab4b1f 100644 --- a/package.json +++ b/package.json @@ -835,9 +835,9 @@ "type": "array", "default": [ "node_modules", - ".git" + "\\.git" ], - "description": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\".git\"] will exclude all files and folders named 'node_modules' or '.git'. Defaults to [\"node_modules\",\".git\"].", + "description": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", "scope": "window" }, "java.templates.fileHeader": { From 6b37ba4e081987ce4884a1f2161aa2f8c9505dca Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 28 Sep 2022 16:14:55 -0400 Subject: [PATCH 219/708] Add Changelog for 1.11.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b27bd6385..b222b2569 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 1.11.0 (September 29th, 2022) + * enhancement - Provide Java 19 preview support. See [#2650](https://github.com/redhat-developer/vscode-java/issues/2650). + * enhancement - Enable annotation-based `null` analysis. See [#1693](https://github.com/redhat-developer/vscode-java/issues/1693). + * enhancement - Show generate `toString()`, `hashCode()` and `equals()` quick fixes on demand. See [JLS#2213](https://github.com/eclipse/eclipse.jdt.ls/pull/2213). + * enhancement - Enable method argument guessing (`java.completion.guessMethodArguments`) by default. See [#2621](https://github.com/redhat-developer/vscode-java/issues/2621). + * enhancement - Enable signature help (`java.signatureHelp.enabled`) by default. See [#2063](https://github.com/redhat-developer/vscode-java/issues/2063). + * enhancement - Support creating `module-info.java`. See [#2680](https://github.com/redhat-developer/vscode-java/pull/2680). + * enhancement - Only add parentheses for lambda expression completions with multiple parameters. See [JLS#2100](https://github.com/eclipse/eclipse.jdt.ls/issues/2100). + * enhancement - Add buildship auto sync preference when build configuration update is set to `automatic`. See [JLS#2224](https://github.com/eclipse/eclipse.jdt.ls/pull/2224). + * bug fix - Show the field suggestions for the `toString()`, `hashCode()` and `equals()` generator dialogs in definition order. See [#2502](https://github.com/redhat-developer/vscode-java/issues/2502). + * bug fix - Fix Gradle project synchorization errors when init script path contains spaces. See [JLS#2245](https://github.com/eclipse/eclipse.jdt.ls/pull/2245), [JLS#2222](https://github.com/eclipse/eclipse.jdt.ls/issues/2222), [JLS#2249](https://github.com/eclipse/eclipse.jdt.ls/pull/2249). + * bug fix - Fix NPE in the protobuf init script. See [#2700](https://github.com/redhat-developer/vscode-java/issues/2700). + * bug fix - Disable JVM logging by default (`-Xlog:disable`). See [#2292](https://github.com/redhat-developer/vscode-java/issues/2292). + * bug fix - Fix type completion when type name conflicts. See [JLS#2232](https://github.com/eclipse/eclipse.jdt.ls/pull/2232). + * bug fix - Fix gradle project classpath calculation. See [#2628](https://github.com/redhat-developer/vscode-java/issues/2628). + * bug fix - Bad ".git" pattern in `.project` file's `filteredResources` element causes chaos. See [#2704](https://github.com/redhat-developer/vscode-java/pull/2704). + * bug fix - Creating a new Java file won't generate package statement. See [#2687](https://github.com/redhat-developer/vscode-java/issues/2687). + * bug fix - Improve documentation for static import order. See [#711](https://github.com/redhat-developer/vscode-java/issues/711). + * build - Migrate from tslint to eslint. See [#2415](https://github.com/redhat-developer/vscode-java/pull/2415). + ## 1.10.0 (August 31st, 2022) * enhancement - Search more folders to infer source roots for invisible projects. See [JLS#2176](https://github.com/eclipse/eclipse.jdt.ls/pull/2176). * enhancement - Experimental support for Android projects with `java.jdt.ls.androidSupport.enabled`. It is enabled by default only in VS Code Insiders. See [JLS#923](https://github.com/eclipse/eclipse.jdt.ls/issues/923). From 5643a2e917541224c52e62dfa1d3f58fe733f612 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Thu, 29 Sep 2022 17:28:34 +0200 Subject: [PATCH 220/708] java server refreshing the workspace for each restart on Windows (#880) Signed-off-by: Snjezana Peco Signed-off-by: Snjezana Peco --- src/javaServerStarter.ts | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 9d1d8b1b7..c2fb85296 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -1,16 +1,16 @@ -import * as path from 'path'; -import * as net from 'net'; +import * as fs from 'fs'; import * as glob from 'glob'; +import * as net from 'net'; import * as os from 'os'; -import * as fs from 'fs'; -import { StreamInfo, Executable, ExecutableOptions } from 'vscode-languageclient/node'; -import { RequirementsData } from './requirements'; -import { getJavaEncoding, IS_WORKSPACE_VMARGS_ALLOWED, getKey, getJavaagentFlag, isInWorkspaceFolder } from './settings'; +import * as path from 'path'; +import { ExtensionContext, workspace } from 'vscode'; +import { Executable, ExecutableOptions, StreamInfo } from 'vscode-languageclient/node'; import { logger } from './log'; -import { getJavaConfiguration, deleteDirectory, ensureExists, getTimestamp } from './utils'; -import { workspace, ExtensionContext, window } from 'vscode'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; +import { RequirementsData } from './requirements'; +import { getJavaagentFlag, getJavaEncoding, getKey, isInWorkspaceFolder, IS_WORKSPACE_VMARGS_ALLOWED } from './settings'; +import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils'; // eslint-disable-next-line no-var declare var v8debug; @@ -30,6 +30,13 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); + if (os.platform() === 'win32') { + const vmargs = getJavaConfiguration().get('jdt.ls.vmargs', ''); + const watchParentProcess = '-DwatchParentProcess=false'; + if (vmargs.indexOf(watchParentProcess) < 0) { + options.detached = true; + } + } executable.options = options; executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); @@ -106,12 +113,6 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp if (vmargs.indexOf(encodingKey) < 0) { params.push(encodingKey + getJavaEncoding()); } - if (os.platform() === 'win32') { - const watchParentProcess = '-DwatchParentProcess='; - if (vmargs.indexOf(watchParentProcess) < 0) { - params.push(`${watchParentProcess}false`); - } - } if (vmargs.indexOf('-Xlog:') < 0) { params.push('-Xlog:disable'); } From 240a42d81c935b5b4623a7817b29112fe43ad0bc Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 29 Sep 2022 11:50:14 -0400 Subject: [PATCH 221/708] Upversion to 1.12.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 76c8a82c4..7dced4b53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.11.0", + "version": "1.12.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f3fab4b1f..1c8d8f84d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.11.0", + "version": "1.12.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From c5821596e96aa8266cec8156bc6a7543129b84b5 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 12 Oct 2022 13:05:12 +0800 Subject: [PATCH 222/708] Synchronize bundles on demand (#2729) - Allow server to ask bundles to synchronize before ready. - When new bundle is detected, instead of asking user to reload window, we will try to let JDT.LS hot load the bundle first. Signed-off-by: sheche --- src/commands.ts | 11 ++++++++ src/extension.ts | 6 ++++- src/plugin.ts | 48 ++++++++++++++++++++++++++--------- src/standardLanguageClient.ts | 12 +++++---- 4 files changed, 59 insertions(+), 18 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 2af1be5fb..40bab195e 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -287,4 +287,15 @@ export namespace Commands { * The VS Code command to create module-info.java */ export const CREATE_MODULE_INFO_COMMAND = "java.project.createModuleInfo.command"; + + /** + * The JDT.LS command to reload the bundle list (java extension contributions). + */ + export const REFRESH_BUNDLES = "java.reloadBundles"; + + /** + * The VS Code command to reload the bundle list. + * JDT.LS will call this command before set the server to ready state. + */ + export const REFRESH_BUNDLES_COMMAND = "_java.reloadBundles.command"; } diff --git a/src/extension.ts b/src/extension.ts index a79c71b11..0dbfd3056 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -7,7 +7,7 @@ import * as fse from 'fs-extra'; import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic, CodeActionTriggerKind, version } from 'vscode'; import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; -import { collectJavaExtensions, isContributedPartUpdated } from './plugin'; +import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } from './plugin'; import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; import * as requirements from './requirements'; import { initialize as initializeRecommendation } from './recommendation'; @@ -383,6 +383,10 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); + context.subscriptions.push(commands.registerCommand(Commands.REFRESH_BUNDLES_COMMAND, () => { + return getBundlesToReload(); + })); + context.subscriptions.push(onConfigurationChange(workspacePath, context)); /** diff --git a/src/plugin.ts b/src/plugin.ts index 59f48633c..886ef2c52 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -3,9 +3,10 @@ import * as vscode from 'vscode'; import * as path from 'path'; import { Commands } from './commands'; +import { extensions } from 'vscode'; -let existingExtensions: Array; -export let buildFilePatterns: Array; +export let existingExtensions: Array = []; +export let buildFilePatterns: Array = []; export function collectJavaExtensions(extensions: readonly vscode.Extension[]): string[] { const result = []; @@ -44,17 +45,40 @@ export function collectBuildFilePattern(extensions: readonly vscode.Extension[]) { - if (isContributedPartUpdated(existingExtensions, collectJavaExtensions(extensions)) || isContributedPartUpdated(buildFilePatterns, collectBuildFilePattern(extensions))) { - const msg = `Java Extension Contributions changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; - const action = 'Reload'; - const restartId = Commands.RELOAD_WINDOW; - vscode.window.showWarningMessage(msg, action).then((selection) => { - if (action === selection) { - vscode.commands.executeCommand(restartId); - } - }); +export function getBundlesToReload(): string[] { + const previousContributions: string[] = [...existingExtensions]; + const currentContributions = collectJavaExtensions(extensions.all); + if (isContributedPartUpdated(previousContributions, currentContributions)) { + return currentContributions; + } + + return []; +} + +export async function onExtensionChange(extensions: readonly vscode.Extension[]): Promise { + if (isContributedPartUpdated(buildFilePatterns, collectBuildFilePattern(extensions))) { + return promptToReload(); } + + const bundlesToRefresh: string[] = getBundlesToReload(); + if (bundlesToRefresh.length) { + const success = await vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.REFRESH_BUNDLES, bundlesToRefresh); + if (!success) { + // if hot refreshing bundle fails, fallback to reload window. + return promptToReload(); + } + } +} + +function promptToReload() { + const msg = `Java Extension Contributions changed, reloading ${vscode.env.appName} is required for the changes to take effect.`; + const action = 'Reload'; + const restartId = Commands.RELOAD_WINDOW; + vscode.window.showWarningMessage(msg, action).then((selection) => { + if (action === selection) { + vscode.commands.executeCommand(restartId); + } + }); } export function isContributedPartUpdated(oldContributedPart: Array, newContributedPart: Array) { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index c8619ffc8..d862e4858 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -111,6 +111,13 @@ export class StandardLanguageClient { apiManager.updateServerMode(ServerMode.standard); apiManager.fireDidServerModeChange(ServerMode.standard); apiManager.resolveServerReadyPromise(); + + if (extensions.onDidChange) {// Theia doesn't support this API yet + extensions.onDidChange(async () => { + await onExtensionChange(extensions.all); + }); + } + activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); @@ -539,11 +546,6 @@ export class StandardLanguageClient { refactorAction.registerCommands(this.languageClient, context); pasteAction.registerCommands(this.languageClient, context); - if (extensions.onDidChange) {// Theia doesn't support this API yet - extensions.onDidChange(() => { - onExtensionChange(extensions.all); - }); - } excludeProjectSettingsFiles(); context.subscriptions.push(languages.registerCodeActionsProvider({ scheme: 'file', language: 'java' }, new RefactorDocumentProvider(), RefactorDocumentProvider.metadata)); From 81482a22f966580a66bdce9745116379e0ebd194 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 26 Oct 2022 05:04:09 +0800 Subject: [PATCH 223/708] Add postfix completion support (#2746) * Add postfix completion support * Change the default value to true Signed-off-by: sheche --- README.md | 9 ++++----- package.json | 6 ++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 352da0c01..108a13758 100644 --- a/README.md +++ b/README.md @@ -203,16 +203,15 @@ The following settings are supported: * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. - -New in 1.10.0 +* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. +* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. -New in 1.11.0 -* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. -* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. +New in 1.12.0 +* `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 1c8d8f84d..8b6006229 100644 --- a/package.json +++ b/package.json @@ -561,6 +561,12 @@ ], "scope": "window" }, + "java.completion.postfix.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", + "scope": "window" + }, "java.foldingRange.enabled": { "type": "boolean", "default": true, From a3b4f6f48d560d5f94fa8c26d69c1e7a23d99b02 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Oct 2022 15:55:35 -0400 Subject: [PATCH 224/708] Add Changelog for 1.12.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b222b2569..8e24bb5f9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 1.12.0 (October 27th, 2022) + * performance - Improve project initialization. See [JLS#2252](https://github.com/eclipse/eclipse.jdt.ls/pull/2252). + * performance - Re-use ExecutorService to avoid creating extra threads and resource leak. See [JLS#2041](https://github.com/eclipse/eclipse.jdt.ls/pull/2041). + * enhancement - Add support for postfix completion. See [#1455](https://github.com/redhat-developer/vscode-java/issues/1455). + * enhancement - Add quick fix for "remove all unused imports". See [JLS#2280](https://github.com/eclipse/eclipse.jdt.ls/pull/2280). + * enhancement - Add quick fixes for problems relating to sealed classes. See [JLS#2265](https://github.com/eclipse/eclipse.jdt.ls/pull/2265). + * bug fix - Signature help not working correctly for parameterized types. See [#2739](https://github.com/redhat-developer/vscode-java/issues/2739). + * bug fix - Avoid NPE for null analysis when updating classpath. See [#2712](https://github.com/redhat-developer/vscode-java/issues/2712). + * bug fix - Check the digest of the initializiation scripts for security and to prevent duplicates. See [#2692](https://github.com/redhat-developer/vscode-java/issues/2692). + * bug fix - Support `includeDeclaration` in `textDocument/references`. See [JLS#2148](https://github.com/eclipse/eclipse.jdt.ls/issues/2148). + * bug fix - Provide folding for import regions in `.class` files. See [#2133](https://github.com/redhat-developer/vscode-java/issues/2133). + * bug fix - Deadlock when using JDK 17 with Maven Java project. See [#2676](https://github.com/redhat-developer/vscode-java/issues/2676). + * bug fix - Ignore unnamed module for split packages. See [JLS#2273](https://github.com/eclipse/eclipse.jdt.ls/pull/2273). + * bug fix - The project preference should only persist non default values. See [JLS#2272](https://github.com/eclipse/eclipse.jdt.ls/issues/2272). + * bug fix - Synchronize contributed bundles on demand. See [#2729](https://github.com/redhat-developer/vscode-java/pull/2729). + * bug fix - Avoid unnecessary project updates when the default VM changes. See [JLS#2266](https://github.com/eclipse/eclipse.jdt.ls/pull/2266). + * bug fix - Exclude non-compile scope dependencies from consideration for enabling null analysis. See [JLS#2264](https://github.com/eclipse/eclipse.jdt.ls/pull/2264). + * bug fix - Add opportunistic support for Java/Kotlin polyglot Android projects. See [JLS#2261](https://github.com/eclipse/eclipse.jdt.ls/pull/2261). + + ## 1.11.0 (September 29th, 2022) * enhancement - Provide Java 19 preview support. See [#2650](https://github.com/redhat-developer/vscode-java/issues/2650). * enhancement - Enable annotation-based `null` analysis. See [#1693](https://github.com/redhat-developer/vscode-java/issues/1693). From 314ff6d76985bfe26674206f3cfc974d56d436ca Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Oct 2022 23:03:17 -0400 Subject: [PATCH 225/708] Update Changelog with an additional entry. - Reference #793 in the entries Signed-off-by: Roland Grunberg --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e24bb5f9..a4af09c5b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.12.0 (October 27th, 2022) * performance - Improve project initialization. See [JLS#2252](https://github.com/eclipse/eclipse.jdt.ls/pull/2252). * performance - Re-use ExecutorService to avoid creating extra threads and resource leak. See [JLS#2041](https://github.com/eclipse/eclipse.jdt.ls/pull/2041). + * performance - Avoid triggering full rebuild of project after import completes (on Windows). See [#793](https://github.com/redhat-developer/vscode-java/issues/793). * enhancement - Add support for postfix completion. See [#1455](https://github.com/redhat-developer/vscode-java/issues/1455). * enhancement - Add quick fix for "remove all unused imports". See [JLS#2280](https://github.com/eclipse/eclipse.jdt.ls/pull/2280). * enhancement - Add quick fixes for problems relating to sealed classes. See [JLS#2265](https://github.com/eclipse/eclipse.jdt.ls/pull/2265). From 7b3f1b16e8828dd4dca1f726c99cbc7acd5110e2 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Oct 2022 11:24:06 -0400 Subject: [PATCH 226/708] Upversion to 1.13.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 108a13758..a0dc03ef6 100644 --- a/README.md +++ b/README.md @@ -209,8 +209,6 @@ The following settings are supported: * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. - -New in 1.12.0 * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 7dced4b53..a92db5517 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.12.0", + "version": "1.13.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 8b6006229..8ac8cef5f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.12.0", + "version": "1.13.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 1d8c85d87ad4dba3bdc86da392bbb684ab9ec947 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 21 Oct 2022 13:21:40 +0800 Subject: [PATCH 227/708] Support `java.compile.nullAnalysis.mode` Signed-off-by: Shi Chen --- README.md | 7 +++++-- package.json | 15 +++++++++++++-- src/commands.ts | 5 +++++ src/standardLanguageClient.ts | 13 +++++++++++++ 4 files changed, 36 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index a0dc03ef6..b67d04ee4 100644 --- a/README.md +++ b/README.md @@ -203,14 +203,17 @@ The following settings are supported: * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. -* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. +* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`. +* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`. * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. +New in 1.13.0 +* `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `disabled`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 8ac8cef5f..134f94a49 100644 --- a/package.json +++ b/package.json @@ -974,7 +974,7 @@ "org.eclipse.jdt.annotation.NonNull", "org.springframework.lang.NonNull" ], - "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies.", + "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`", "scope": "window" }, "java.compile.nullAnalysis.nullable": { @@ -984,7 +984,18 @@ "org.eclipse.jdt.annotation.Nullable", "org.springframework.lang.Nullable" ], - "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies.", + "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`", + "scope": "window" + }, + "java.compile.nullAnalysis.mode": { + "type": "string", + "enum": [ + "disabled", + "interactive", + "automatic" + ], + "default": "disabled", + "markdownDescription": "Specify how to enable the annotation-based null analysis.", "scope": "window" } } diff --git a/src/commands.ts b/src/commands.ts index 40bab195e..a9a2b3e2d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -64,6 +64,11 @@ export namespace Commands { */ export const PROJECT_CONFIGURATION_STATUS = 'java.projectConfiguration.status'; + /** + * Set null analysis mode + */ + export const NULL_ANALYSIS_SET_MODE = 'java.compile.nullAnalysis.setMode'; + /** * Apply Workspace Edit */ diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index d862e4858..4699f801b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -330,6 +330,8 @@ export class StandardLanguageClient { context.subscriptions.push(commands.registerCommand(Commands.PROJECT_CONFIGURATION_STATUS, (uri, status) => setProjectConfigurationUpdate(this.languageClient, uri, status))); + context.subscriptions.push(commands.registerCommand(Commands.NULL_ANALYSIS_SET_MODE, (status) => setNullAnalysisStatus(status))); + context.subscriptions.push(commands.registerCommand(Commands.APPLY_WORKSPACE_EDIT, (obj) => { applyWorkspaceEdit(obj, this.languageClient); })); @@ -684,6 +686,17 @@ function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, } } +function setNullAnalysisStatus(status: FeatureStatus) { + const config = getJavaConfiguration(); + const section = 'compile.nullAnalysis.mode'; + + const st = FeatureStatus[status]; + config.update(section, st).then( + () => logger.info(`${section} set to ${st}`), + (error) => logger.error(error) + ); +} + function decodeBase64(text: string): string { return Buffer.from(text, 'base64').toString('ascii'); } From 7cf3c86f663c292219482a105008ebf0406d8b36 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 13 Oct 2022 16:08:27 -0400 Subject: [PATCH 228/708] Support pre-releases and platform-specific extensions on OpenVSX - Refactor the Jenkinsfile for simplicity - There should only be 2 calls to vsce/ovsx . One call to publish the generic version, and another to package the platform-specific versions (in a for-loop) - The logic to publish pre-release versions should be done transparently - When publishing a pre-release, all package specific vsixs should embed that data at package-time Signed-off-by: Roland Grunberg --- Jenkinsfile | 86 +++++++++++++++++++++++------------------------------ 1 file changed, 37 insertions(+), 49 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 6b7b4d040..ee0bc710a 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -5,6 +5,7 @@ def installBuildRequirements(){ env.PATH="${env.PATH}:${nodeHome}/bin" sh "npm install -g typescript" sh 'npm install -g "vsce"' + sh 'npm install -g "ovsx"' } def buildVscodeExtension(){ @@ -23,22 +24,19 @@ def packageSpecificExtensions() { def embeddedJRE = 17 for(platform in platforms){ sh "npx gulp download_jre --target ${platform} --javaVersion ${embeddedJRE}" - if (publishPreRelease.equals('true')) { - sh "vsce package --pre-release --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - } else { - sh "vsce package --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - } + sh "vsce package ${env.publishPreReleaseFlag} --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" } } def packageExtensions() { + env.publishPreReleaseFlag = "" if (publishPreRelease.equals('true')) { - // for pre-release versions we only package platform specific extensions stage "replace extension version" sh "npx gulp prepare_pre_release" def packageJson = readJSON file: 'package.json' env.EXTENSION_VERSION = "${packageJson.version}" + env.publishPreReleaseFlag = "--pre-release" packageSpecificExtensions() } else { @@ -46,10 +44,7 @@ def packageExtensions() { def packageJson = readJSON file: 'package.json' env.EXTENSION_VERSION = "${packageJson.version}" - sh "vsce package -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - - def vsix = findFiles(glob: '**.vsix') - stash name:'vsix', includes:vsix[0].path + sh "vsce package ${env.publishPreReleaseFlag} -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" packageSpecificExtensions() stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' @@ -62,57 +57,48 @@ def packageExtensions() { sh "sftp ${UPLOAD_LOCATION}/jdt.ls/staging <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" // Clean up build vsix sh "rm -rf ${artifactDir}" + unstash 'platformVsix' } } def publishExtensions() { - if (publishPreRelease.equals('true')) { - stage "publish generic version" - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - // Clean up embedded jre folder from previous build - sh 'npx gulp clean_jre' - // Publish a generic version - sh 'vsce publish --pre-release -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' - } + // Clean up embedded jre folder from previous build + sh 'npx gulp clean_jre' - stage "publish specific version" - // for pre-release versions, vsixs are not stashed and kept in project folder - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - def platformVsixes = findFiles(glob: '**.vsix') - for(platformVsix in platformVsixes){ - sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" - } - } - } else if (publishToMarketPlace.equals('true')) { + if (publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { timeout(time:5, unit:'DAYS') { input message:'Approve deployment?', submitter: 'fbricon,rgrunber' } + } - stage "Publish to Open-vsx Marketplace" - unstash 'vsix' - def vsix = findFiles(glob: '**.vsix') - // Open-vsx Marketplace - sh 'npm install -g "ovsx"' - withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { - sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${vsix[0].path}" + def platformVsixes = findFiles(glob: '**.vsix') + + stage "publish generic version to VS Code Marketplace" + withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + sh 'vsce publish -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + " ${env.publishPreReleaseFlag}" + } + + stage "publish specific version to VS Code Marketplace" + + withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { + for(platformVsix in platformVsixes){ + sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" } + } - stage "Publish to VS Code Marketplace" - // VS Code Marketplace - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - // Clean up embedded jre folder from previous build - sh 'npx gulp clean_jre' - // Publish a generic version - sh 'vsce publish -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' - - // Publish platform specific versions - unstash 'platformVsix' - def platformVsixes = findFiles(glob: '**.vsix', excludes: vsix[0].path) - for(platformVsix in platformVsixes){ - sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" - } + stage "Publish generic version to Open-VSX Marketplace" + withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { + sh 'ovsx publish -p ${OVSX_TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + " ${env.publishPreReleaseFlag}" + } + + stage "Publish specific version to Open-VSX Marketplace" + withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { + for(platformVsix in platformVsixes){ + sh 'ovsx publish -p ${OVSX_TOKEN}' + " --packagePath ${platformVsix.path}" } + } + if (publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { stage "Publish to http://download.jboss.org/jbosstools/static/jdt.ls/stable/" def artifactDir = "java-${env.EXTENSION_VERSION}" sh "mkdir ${artifactDir}" @@ -168,5 +154,7 @@ node('rhel8'){ packageExtensions() - publishExtensions() + if (publishPreRelease.equals('true') || publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { + publishExtensions() + } } From 721df96902851d06ef1b7a032a70918a146d4aab Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 2 Nov 2022 17:09:41 -0400 Subject: [PATCH 229/708] Fix issues reported by npm-audit. - Bump minimatch 3.0.4 -> 3.1.2 - Bump terser 5.6.1 -> 5.15.1 Signed-off-by: Roland Grunberg --- package-lock.json | 97 +++++++++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index a92db5517..2fc4006b3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -93,6 +93,55 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1090,9 +1139,9 @@ } }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", @@ -1660,7 +1709,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -4775,9 +4824,9 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "requires": { "brace-expansion": "^1.1.7" } @@ -4983,6 +5032,15 @@ "argparse": "^2.0.1" } }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", @@ -6318,9 +6376,9 @@ } }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -6539,20 +6597,21 @@ } }, "terser": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.6.1.tgz", - "integrity": "sha512-yv9YLFQQ+3ZqgWCUk+pvNJwgUTdlIxUk1WTN+RnaFJe2L7ipG2csPT0ra2XRm7Cs8cxN7QXmK1rFzEwYEQkzXw==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", + "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", "dev": true, "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "acorn": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", + "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", "dev": true } } From 2d99511c0a0559c7ea111545cd981bce318c0eef Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Sat, 5 Nov 2022 03:03:18 +0800 Subject: [PATCH 230/708] Support "Add all missing imports" (#2753) Signed-off-by: Shi Chen --- src/sourceAction.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 555cceb41..084cde3cc 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -119,7 +119,7 @@ function registerOrganizeImportsCommand(languageClient: LanguageClient, context: } function registerChooseImportCommand(context: ExtensionContext): void { - context.subscriptions.push(commands.registerCommand(Commands.CHOOSE_IMPORTS, async (uri: string, selections: ImportSelection[]) => { + context.subscriptions.push(commands.registerCommand(Commands.CHOOSE_IMPORTS, async (uri: string, selections: ImportSelection[], restoreExistingImports?: boolean) => { const chosen: ImportCandidate[] = []; const fileUri: Uri = Uri.parse(uri); for (let i = 0; i < selections.length; i++) { @@ -140,7 +140,7 @@ function registerChooseImportCommand(context: ExtensionContext): void { try { const pick = await new Promise((resolve, reject) => { const input = window.createQuickPick(); - input.title = "Organize Imports"; + input.title = restoreExistingImports ? "Add All Missing Imports" : "Organize Imports"; input.step = i + 1; input.totalSteps = selections.length; input.placeholder = `Choose type '${typeName}' to import`; From 6d10e1a00c9ec3628f8934e71be92c1a04acc540 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 26 Oct 2022 12:04:49 -0400 Subject: [PATCH 231/708] Add new settings for clean ups - Add documentation (accessible through a command) for what each clean up does Depends on eclipse/eclipse.jdt.ls#2298 Closes #2144 Signed-off-by: David Thompson --- README.md | 1 + document/_java.learnMoreAboutCleanUps.md | 124 +++++++++++++++++++++ package.json | 20 ++++ src/commands.ts | 2 + src/extension.ts | 3 + test/standard-mode-suite/extension.test.ts | 1 + 6 files changed, 151 insertions(+) create mode 100644 document/_java.learnMoreAboutCleanUps.md diff --git a/README.md b/README.md index b67d04ee4..5d42b622e 100644 --- a/README.md +++ b/README.md @@ -213,6 +213,7 @@ The following settings are supported: New in 1.13.0 * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `disabled`. +* `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. Semantic Highlighting =============== diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md new file mode 100644 index 000000000..b5241e39a --- /dev/null +++ b/document/_java.learnMoreAboutCleanUps.md @@ -0,0 +1,124 @@ +# Java Clean Ups + +Java clean ups are run on the current document whenever it's saved. +They can fix a wide variety of issues, from code style to programming mistakes, +and can even modernize the sources based on new Java language features. +Here is some information on the supported cleanups and the details of what they do. + +### `qualifyMembers` + +Whenever a member (field or method) of a class is accessed from within the class, +prefix the access with `this`. +This is similar to how Python requires the programmer to access members using `self`. + +For instance: + +```java +private int value; + +public void getValue() { + return value; +} +``` + +becomes: + +```java +private int value; + +public void getValue() { + return this.value; +} +``` + +### `qualifyStaticMembers` + +Whenever there is a static variable or function, prefix the access with the name of the class that the static variable or function belongs to. + +For instance: + +```java +import static java.lang.System.out; + +public class MyClass { + public static final double FACTOR = 0.5; + + public double getNumber(double value) { + out.println("moo"); + return value * FACTOR; + } +} +``` + +becomes: + +```java +import static java.lang.System.out; + +public class MyClass { + public static final double FACTOR = 0.5; + + public double getNumber(double value) { + System.out.println("moo"); + return value * MyClass.FACTOR; + } +} +``` + +### `addOverride` + +When a method of a class that overrides a method from a parent class or provides an implementation for a method from an interface, add the `@Override` annotation. + +For example: + +```java +public class MyRunner implements Runnable { + public void run() { + System.out.println("Hello, World!"); + } +} +``` + +becomes: + +```java +public class MyRunner implements Runnable { + @Override + public void run() { + System.out.println("Hello, World!"); + } +} +``` + +### `addDeprecated` + +When a method is marked `@deprecated` in the Javadoc, but doesn't have the `@Deprecated` annotation, add the `@Deprecated` annotation. +This only works if the compiler has been configured to mark deprecated methods without the deprecated annotation +as an info/warning/error in the JDT settings. + +For example: + +```java +/** + * Not used anymore, please stop using. + * + * @deprecated + */ +public boolean isAGoat() { + return false; +} +``` + +becomes: + +```java +/** + * Not used anymore, please stop using. + * + * @deprecated + */ +@Deprecated +public boolean isAGoat() { + return false; +} +``` \ No newline at end of file diff --git a/package.json b/package.json index 134f94a49..3622360b2 100644 --- a/package.json +++ b/package.json @@ -997,6 +997,21 @@ "default": "disabled", "markdownDescription": "Specify how to enable the annotation-based null analysis.", "scope": "window" + }, + "java.cleanup.actionsOnSave": { + "type": "array", + "markdownDescription": "The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.", + "items": { + "type": "string", + "enum": [ + "qualifyMembers", + "qualifyStaticMembers", + "addOverride", + "addDeprecated" + ] + }, + "default": [], + "scope": "window" } } }, @@ -1129,6 +1144,11 @@ "command": "java.project.createModuleInfo.command", "title": "%java.project.createModuleInfo.command%", "category": "Java" + }, + { + "command": "_java.learnMoreAboutCleanUps", + "title": "Learn more about Java Clean Ups", + "category": "Java" } ], "keybindings": [ diff --git a/src/commands.ts b/src/commands.ts index a9a2b3e2d..20dbc3431 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -267,6 +267,8 @@ export namespace Commands { export const LEARN_MORE_ABOUT_REFACTORING = '_java.learnMoreAboutRefactorings'; + export const LEARN_MORE_ABOUT_CLEAN_UPS = '_java.learnMoreAboutCleanUps'; + export const TEMPLATE_VARIABLES = '_java.templateVariables'; export const NOT_COVERED_EXECUTION = '_java.notCoveredExecution'; diff --git a/src/extension.ts b/src/extension.ts index 0dbfd3056..7f469ef34 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -172,6 +172,9 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.MEATDATA_FILES_GENERATION, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.metadataFilesGeneration.md`)), 'Metadata Files Generation', "", context); })); + context.subscriptions.push(commands.registerCommand(Commands.LEARN_MORE_ABOUT_CLEAN_UPS, async () => { + markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_CLEAN_UPS}.md`)), 'Java Clean Ups', "java-clean-ups", context); + })); if (!storagePath) { storagePath = getTempWorkspace(); } diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 52a093725..eb5a3609b 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -86,6 +86,7 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, + Commands.LEARN_MORE_ABOUT_CLEAN_UPS, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From f2ab6eaf40722345afb1fbea45d839c9f26371ba Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 9 Nov 2022 13:31:31 +0800 Subject: [PATCH 232/708] set null analysis default option to `interactive` Signed-off-by: Shi Chen --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d42b622e..de7392a52 100644 --- a/README.md +++ b/README.md @@ -212,7 +212,7 @@ The following settings are supported: * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. New in 1.13.0 -* `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `disabled`. +* `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. Semantic Highlighting diff --git a/package.json b/package.json index 3622360b2..e7270948c 100644 --- a/package.json +++ b/package.json @@ -994,7 +994,7 @@ "interactive", "automatic" ], - "default": "disabled", + "default": "interactive", "markdownDescription": "Specify how to enable the annotation-based null analysis.", "scope": "window" }, From 6190b6eebaaa598906f9ea9e28b4346aed2afd50 Mon Sep 17 00:00:00 2001 From: Jessica He Date: Wed, 16 Nov 2022 13:22:06 -0500 Subject: [PATCH 233/708] Add setting for string concatenations to text block conversion Signed-off-by: Jessica He --- document/_java.learnMoreAboutCleanUps.md | 26 ++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index b5241e39a..2967cbdb6 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -121,4 +121,30 @@ becomes: public boolean isAGoat() { return false; } +``` + +### `stringConcatToTextBlock` + +Appropriate String concatenations will be converted into Java `Text Blocks`. Appropriate String concatenations must have at least 3 non-empty substrings with one per line and the Java level must be 15 or higher. Line comments for all substrings but the last line will be lost after conversion. Spaces at the end of substrings preceding the newline will result in `\s` being substituted while substrings that do not end with newlines will have a `\` added at the end of the line to preserve concatenation. + +For example: + +```java +String x = "" + + "public class A {\n" + + " public void m() {\n" + + " System.out.println(\"abc\");\n" + + " }\n" + + "}"; +``` + +becomes: + +```java +String x = """ + public class A { + public void m() { + System.out.println("abc"); + } + }"""; ``` \ No newline at end of file diff --git a/package.json b/package.json index e7270948c..01354f50e 100644 --- a/package.json +++ b/package.json @@ -1007,7 +1007,8 @@ "qualifyMembers", "qualifyStaticMembers", "addOverride", - "addDeprecated" + "addDeprecated", + "stringConcatToTextBlock" ] }, "default": [], From ccb75b154c03928d60a2ef423ddfd960fb3b43d9 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 11 Nov 2022 16:54:38 +0800 Subject: [PATCH 234/708] fix outdated descriptions Signed-off-by: Shi Chen --- README.md | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index de7392a52..2935bbc74 100644 --- a/README.md +++ b/README.md @@ -203,8 +203,8 @@ The following settings are supported: * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. -* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`. -* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`. +* `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. +* `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. diff --git a/package.json b/package.json index 01354f50e..717faede0 100644 --- a/package.json +++ b/package.json @@ -974,7 +974,7 @@ "org.eclipse.jdt.annotation.NonNull", "org.springframework.lang.NonNull" ], - "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`", + "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" }, "java.compile.nullAnalysis.nullable": { @@ -984,7 +984,7 @@ "org.eclipse.jdt.annotation.Nullable", "org.springframework.lang.Nullable" ], - "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.enabled` is set to `disabled`", + "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" }, "java.compile.nullAnalysis.mode": { From 4c15f7ccd7a39dd9eb38b1ebaffc1678f2104a60 Mon Sep 17 00:00:00 2001 From: Jessica He Date: Tue, 22 Nov 2022 11:26:00 -0500 Subject: [PATCH 235/708] Add setting for invert equals calls on null Signed-off-by: Jessica He --- document/_java.learnMoreAboutCleanUps.md | 24 ++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 2967cbdb6..7ed3724cf 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -147,4 +147,28 @@ String x = """ System.out.println("abc"); } }"""; +``` + +### `invertEquals` + +Inverts calls to `Object.equals(Object)` and `String.equalsIgnoreCase(String)` to avoid useless null pointer exception. + +The caller must be nullable and the parameter must not be nullable. + +By avoiding null pointer exceptions, the behavior may change. + +For example: + +```java +String message = getMessage(); +boolean result1 = message.equals("text"); +boolean result2 = message.equalsIgnoreCase("text"); +``` + +becomes: + +```java +String message = getMessage(); +boolean result1 = "text".equals(message); +boolean result2 = "text".equalsIgnoreCase(message); ``` \ No newline at end of file diff --git a/package.json b/package.json index 717faede0..194530ba8 100644 --- a/package.json +++ b/package.json @@ -1008,7 +1008,8 @@ "qualifyStaticMembers", "addOverride", "addDeprecated", - "stringConcatToTextBlock" + "stringConcatToTextBlock", + "invertEquals" ] }, "default": [], From 83cc146ebe0fe708240fdbab836f85a490d15629 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 25 Nov 2022 10:57:24 +0800 Subject: [PATCH 236/708] Support Gradle annotation processing (#2793) Signed-off-by: Sheng Chen --- README.md | 1 + package.json | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/README.md b/README.md index 2935bbc74..91bad8701 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,7 @@ The following settings are supported: New in 1.13.0 * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. +* `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. Semantic Highlighting =============== diff --git a/package.json b/package.json index 194530ba8..a754d4ede 100644 --- a/package.json +++ b/package.json @@ -328,6 +328,12 @@ "description": "Setting for GRADLE_USER_HOME.", "scope": "window" }, + "java.import.gradle.annotationProcessing.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the annotation processing on Gradle projects and delegate Annotation Processing to JDT APT. Only works for Gradle 5.2 or higher.", + "scope": "window" + }, "java.maven.downloadSources": { "type": "boolean", "default": false, From 75a859c41b98cc549bca4704446b371e25dcac5a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 25 Nov 2022 02:58:27 +0000 Subject: [PATCH 237/708] Bump minimatch and mocha Bumps [minimatch](https://github.com/isaacs/minimatch) to 3.1.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together. Updates `minimatch` from 3.0.4 to 3.1.2 - [Release notes](https://github.com/isaacs/minimatch/releases) - [Commits](https://github.com/isaacs/minimatch/compare/v3.0.4...v3.1.2) Updates `mocha` from 9.2.0 to 9.2.2 - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v9.2.0...v9.2.2) --- updated-dependencies: - dependency-name: minimatch dependency-type: indirect - dependency-name: mocha dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 97 +++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 45 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2fc4006b3..ce77dd5d4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -915,6 +915,12 @@ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -2030,6 +2036,12 @@ "kuler": "1.0.x" } }, + "diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4280,6 +4292,15 @@ } } }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "requires": { + "argparse": "^2.0.1" + } + }, "jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", @@ -4649,12 +4670,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -4868,9 +4883,9 @@ } }, "mocha": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.0.tgz", - "integrity": "sha512-kNn7E8g2SzVcq0a77dkphPsDSN7P+iYkqE0ZsGCYWRsoiKjOt+NvXfaagik8vuDa6W5Zw3qxe8Jfpt5qKf+6/Q==", + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", + "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -4886,9 +4901,9 @@ "he": "1.2.0", "js-yaml": "4.1.0", "log-symbols": "4.1.0", - "minimatch": "3.0.4", + "minimatch": "4.2.1", "ms": "2.1.3", - "nanoid": "3.2.0", + "nanoid": "3.3.1", "serialize-javascript": "6.0.0", "strip-json-comments": "3.1.1", "supports-color": "8.1.1", @@ -4920,12 +4935,6 @@ "color-convert": "^2.0.1" } }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -4969,12 +4978,6 @@ } } }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5009,33 +5012,29 @@ "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -5106,19 +5105,11 @@ "string-width": "^4.2.0", "y18n": "^5.0.5", "yargs-parser": "^20.2.2" - }, - "dependencies": { - "yargs-parser": { - "version": "20.2.9", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true - } } }, "yargs-parser": { "version": "20.2.4", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", "dev": true } @@ -5151,9 +5142,9 @@ "dev": true }, "nanoid": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", - "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", + "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", "dev": true }, "nanomatch": { diff --git a/package.json b/package.json index a754d4ede..28da0084e 100644 --- a/package.json +++ b/package.json @@ -1349,7 +1349,7 @@ "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", "minimist": ">=1.2.6", - "mocha": "^9.2.0", + "mocha": "^9.2.2", "request": "^2.88.2", "sinon": "^14.0.0", "ts-loader": "^9.2.6", From 59b694e05371e68e10aa4df2c1505369a19c5e78 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 23 Nov 2022 15:12:17 -0500 Subject: [PATCH 238/708] Translate `jdt://` links in Hover to a command link Translate all links to `jdt://` in hover documentation to a `command://` link that opens the corresponding document. This gets around a limitation of hover Markdown in VS Code, where custom schemes aren't supported in links. Closes #2810 Signed-off-by: David Thompson --- .gitignore | 1 + src/commands.ts | 6 +++ src/extension.ts | 46 +++++++++-------- src/goToDefinition.ts | 8 ++- src/providerDispatcher.ts | 50 +++++++++++++++---- src/syntaxLanguageClient.ts | 12 ++--- test/lightweight-mode-suite/extension.test.ts | 3 +- test/standard-mode-suite/extension.test.ts | 9 ++-- 8 files changed, 89 insertions(+), 46 deletions(-) diff --git a/.gitignore b/.gitignore index 65e4023ed..d521724b9 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ bin/ .project test/resources/projects/**/.vscode test/resources/projects/maven/salut/testGradle +test-temp diff --git a/src/commands.ts b/src/commands.ts index 20dbc3431..8270d4043 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -118,6 +118,12 @@ export namespace Commands { * Open Java formatter settings */ export const OPEN_FORMATTER = 'java.open.formatter.settings'; + + /** + * Open a file given the URI + */ + export const OPEN_FILE = 'java.open.file'; + /** * Clean the Java language server workspace */ diff --git a/src/extension.ts b/src/extension.ts index 7f469ef34..0d09894b8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1,33 +1,33 @@ 'use strict'; -import * as path from 'path'; -import * as os from 'os'; +import * as chokidar from 'chokidar'; import * as fs from 'fs'; import * as fse from 'fs-extra'; -import { workspace, extensions, ExtensionContext, window, commands, ViewColumn, Uri, languages, IndentAction, InputBoxOptions, EventEmitter, OutputChannel, TextDocument, RelativePattern, ConfigurationTarget, WorkspaceConfiguration, env, UIKind, CodeActionContext, Diagnostic, CodeActionTriggerKind, version } from 'vscode'; -import { ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, ErrorHandler, Message, ErrorAction, CloseAction, DidChangeConfigurationNotification, CancellationToken, CodeActionRequest, CodeActionParams, Command } from 'vscode-languageclient'; +import * as os from 'os'; +import * as path from 'path'; +import { CodeActionContext, CodeActionTriggerKind, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, OutputChannel, RelativePattern, TextDocument, UIKind, Uri, version, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CancellationToken, CloseAction, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ErrorAction, ErrorHandler, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, Message, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; -import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } from './plugin'; -import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; -import * as requirements from './requirements'; -import { initialize as initializeRecommendation } from './recommendation'; +import { apiManager } from './apiManager'; import { Commands } from './commands'; -import { ExtensionAPI, ClientStatus } from './extension.api'; -import { getJavaConfiguration, deleteDirectory, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, convertToGlob, getExclusionBlob, ensureExists } from './utils'; -import { onConfigurationChange, getJavaServerMode, ServerMode, ACTIVE_BUILD_TOOL_STATE, handleTextBlockClosing } from './settings'; -import { logger, initializeLogFile } from './log'; -import glob = require('glob'); -import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { registerClientProviders } from './providerDispatcher'; +import { ClientStatus, ExtensionAPI } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; -import { StandardLanguageClient } from './standardLanguageClient'; -import { apiManager } from './apiManager'; -import { snippetCompletionProvider } from './snippetCompletionProvider'; +import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; +import { initializeLogFile, logger } from './log'; +import { cleanupLombokCache } from "./lombokSupport"; +import { markdownPreviewProvider } from "./markdownPreviewProvider"; +import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } from './plugin'; +import { registerClientProviders } from './providerDispatcher'; +import { initialize as initializeRecommendation } from './recommendation'; +import * as requirements from './requirements'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; -import { markdownPreviewProvider } from "./markdownPreviewProvider"; -import * as chokidar from 'chokidar'; -import { cleanupLombokCache } from "./lombokSupport"; +import { ACTIVE_BUILD_TOOL_STATE, getJavaServerMode, handleTextBlockClosing, onConfigurationChange, ServerMode } from './settings'; +import { snippetCompletionProvider } from './snippetCompletionProvider'; +import { StandardLanguageClient } from './standardLanguageClient'; +import { SyntaxLanguageClient } from './syntaxLanguageClient'; +import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfiguration } from './utils'; +import glob = require('glob'); const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -381,6 +381,10 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(commands.registerCommand(Commands.OPEN_LOGS, () => openLogs())); context.subscriptions.push(commands.registerCommand(Commands.OPEN_FORMATTER, async () => openFormatter(context.extensionPath))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_FILE, async (uri: string) => { + const parsedUri = Uri.parse(uri); + await window.showTextDocument(parsedUri); + })); context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); diff --git a/src/goToDefinition.ts b/src/goToDefinition.ts index efb66048e..b026eb7f7 100644 --- a/src/goToDefinition.ts +++ b/src/goToDefinition.ts @@ -1,11 +1,9 @@ 'use strict'; import { - CancellationToken, - Location, - LocationLink, - DefinitionParams, - DefinitionRequest + CancellationToken, DefinitionParams, + DefinitionRequest, Location, + LocationLink } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { getActiveLanguageClient } from './extension'; diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 62342d4eb..0b6b0e2ce 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -1,15 +1,14 @@ 'use strict'; -import { DocumentSymbolRequest, SymbolInformation as clientSymbolInformation, DocumentSymbol as clientDocumentSymbol, HoverRequest, WorkspaceSymbolRequest } from "vscode-languageclient"; +import { CancellationToken, commands, DocumentSymbol, DocumentSymbolProvider, Event, ExtensionContext, Hover, HoverProvider, languages, MarkdownString, MarkedString, Position, Range, SymbolInformation, SymbolKind, TextDocument, TextDocumentContentProvider, Uri, workspace, WorkspaceSymbolProvider } from "vscode"; +import { DocumentSymbol as clientDocumentSymbol, DocumentSymbolRequest, HoverRequest, SymbolInformation as clientSymbolInformation, WorkspaceSymbolRequest } from "vscode-languageclient"; import { LanguageClient } from "vscode-languageclient/node"; -import { ExtensionContext, languages, DocumentSymbolProvider, TextDocument, CancellationToken, SymbolInformation, DocumentSymbol, TextDocumentContentProvider, workspace, Uri, Event, HoverProvider, Position, Hover, WorkspaceSymbolProvider, Range, commands, SymbolKind } from "vscode"; -import { ClassFileContentsRequest, StatusNotification } from "./protocol"; -import { createClientHoverProvider } from "./hoverAction"; -import { getActiveLanguageClient } from "./extension"; import { apiManager } from "./apiManager"; -import { ServerMode } from "./settings"; -import { serverStatus, ServerStatusKind } from "./serverStatus"; import { Commands } from "./commands"; +import { getActiveLanguageClient } from "./extension"; +import { createClientHoverProvider } from "./hoverAction"; +import { ClassFileContentsRequest } from "./protocol"; +import { ServerMode } from "./settings"; export interface ProviderOptions { contentProviderEvent: Event; @@ -51,14 +50,16 @@ export class ClientHoverProvider implements HoverProvider { if (!this.delegateProvider) { this.delegateProvider = createClientHoverProvider(languageClient); } - return this.delegateProvider.provideHover(document, position, token); + const hover = await this.delegateProvider.provideHover(document, position, token); + return fixJdtSchemeHoverLinks(hover); } else { const params = { textDocument: languageClient.code2ProtocolConverter.asTextDocumentIdentifier(document), position: languageClient.code2ProtocolConverter.asPosition(position) }; const hoverResponse = await languageClient.sendRequest(HoverRequest.type, params, token); - return languageClient.protocol2CodeConverter.asHover(hoverResponse); + const hover = languageClient.protocol2CodeConverter.asHover(hoverResponse); + return fixJdtSchemeHoverLinks(hover); } } } @@ -170,4 +171,35 @@ function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { } } }); +} + +const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\\\))|([^)]))+))\)/g; + +/** + * Returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI. + * + * VS Code doesn't render links with the `jdt` scheme in hover popups. + * To get around this, you can create a command:// link that invokes a command that opens the corresponding URI. + * VS Code will render command:// links in hover pop ups if they are marked as trusted. + * + * @param hover The hover to fix the jdt:// links for + * @returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI + */ +function fixJdtSchemeHoverLinks(hover: Hover): Hover { + const newContents: (MarkedString|MarkdownString)[] = []; + for (const content of hover.contents) { + if (content instanceof MarkdownString) { + const newContent: string = (content).value.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { + const uri = `command:${Commands.OPEN_FILE}?${encodeURI(JSON.stringify([encodeURIComponent(group2)]))}`; + return `${group1}${uri})`; + }); + const mdString = new MarkdownString(newContent); + mdString.isTrusted = true; + newContents.push(mdString); + } else { + newContents.push(content); + } + } + hover.contents = newContents; + return hover; } \ No newline at end of file diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 1c0acd74d..dc6f8e49c 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -1,14 +1,14 @@ 'use strict'; import * as net from "net"; -import { LanguageClientOptions, DidChangeConfigurationNotification } from "vscode-languageclient"; -import { LanguageClient, StreamInfo, ServerOptions } from "vscode-languageclient/node"; -import { OutputInfoCollector, ClientErrorHandler, getJavaConfig } from "./extension"; +import { DidChangeConfigurationNotification, LanguageClientOptions } from "vscode-languageclient"; +import { LanguageClient, ServerOptions, StreamInfo } from "vscode-languageclient/node"; +import { apiManager } from "./apiManager"; +import { ClientErrorHandler, getJavaConfig, OutputInfoCollector } from "./extension"; +import { ClientStatus, ExtensionAPI } from "./extension.api"; import { logger } from "./log"; -import { ServerMode } from "./settings"; import { StatusNotification } from "./protocol"; -import { apiManager } from "./apiManager"; -import { ExtensionAPI, ClientStatus } from "./extension.api"; +import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; const extensionName = "Language Support for Java (Syntax Server)"; diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 4ee87ad15..1e03d09fe 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -1,7 +1,7 @@ import * as assert from 'assert'; import * as vscode from 'vscode'; -import { Commands } from '../../src/commands'; import { extensions } from 'vscode'; +import { Commands } from '../../src/commands'; suite('Java Language Extension - LightWeight', () => { @@ -22,6 +22,7 @@ suite('Java Language Extension - LightWeight', () => { Commands.OPEN_FORMATTER, Commands.CLEAN_WORKSPACE, Commands.SWITCH_SERVER_MODE, + Commands.OPEN_FILE, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index eb5a3609b..e4f0ae226 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -1,12 +1,12 @@ import * as assert from 'assert'; -import * as vscode from 'vscode'; import * as fs from 'fs'; import * as path from 'path'; -import * as plugin from '../../src/plugin'; +import { env } from 'process'; +import * as vscode from 'vscode'; +import { Commands } from '../../src/commands'; import * as java from '../../src/javaServerStarter'; +import * as plugin from '../../src/plugin'; import * as requirements from '../../src/requirements'; -import { Commands } from '../../src/commands'; -import { env } from 'process'; suite('Java Language Extension - Standard', () => { @@ -87,6 +87,7 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, Commands.LEARN_MORE_ABOUT_CLEAN_UPS, + Commands.OPEN_FILE, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 91cf4c7bf249d22b1c1a031ec1b2dc8e66b7e6e8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 30 Nov 2022 14:58:17 -0500 Subject: [PATCH 239/708] Add Changelog for 1.13.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a4af09c5b..bd753a8ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## 1.13.0 (December 1st, 2022) + * enhancement - Support "Add all missing imports". See [#2753](https://github.com/redhat-developer/vscode-java/pull/2753). + * enhancement - Support Gradle annotation processing. See [#1039](https://github.com/redhat-developer/vscode-java/issues/1039). + * enhancement - Add an option to configure null analysis, and set to `interactive` by default. See [#2747](https://github.com/redhat-developer/vscode-java/pull/2747), [#2790](https://github.com/redhat-developer/vscode-java/pull/2790). + * enhancement - Add setting for clean ups to be applied when document is saved. See [#2144](https://github.com/redhat-developer/vscode-java/issues/2144), [#2803](https://github.com/redhat-developer/vscode-java/pull/2803), [#2813](https://github.com/redhat-developer/vscode-java/pull/2813). + * enhancement - Add contribution points for completion customization. See [JLS#2110](https://github.com/eclipse/eclipse.jdt.ls/pull/2110). + * enhancement - Allow the language server to be run without using `IApplication`. See [JLS#2311](https://github.com/eclipse/eclipse.jdt.ls/issues/2311). + * enhancement - Improve Lombok support and renaming fields when an accessor is present. See [#2805](https://github.com/redhat-developer/vscode-java/issues/2805). + * bug fix - Display the postfix completions at the bottom of the list. See [JLS#2343](https://github.com/eclipse/eclipse.jdt.ls/pull/2343). + * bug fix - Display a link for `{@link ...}` expression within javadoc. See [#2810](https://github.com/redhat-developer/vscode-java/issues/2810). + * bug fix - Do not reset existing project options when setting null analysis options. See [#2764](https://github.com/redhat-developer/vscode-java/issues/2764). + * bug fix - Code action response may contain `null` as one of the code actions. See [JLS#2327](https://github.com/eclipse/eclipse.jdt.ls/issues/2327). + * bug fix - Inlay hints should not show up next to Lombok annotations. See [JLS#2323](https://github.com/eclipse/eclipse.jdt.ls/issues/2323). + * bug fix - Ensure language server always terminates. See [JLS#2302](https://github.com/eclipse/eclipse.jdt.ls/issues/2302). + * bug fix - Prevent a deadlock during language server initialization. See [#2763](https://github.com/redhat-developer/vscode-java/issues/2763). + * bug fix - Always send `begin` work done progress before sending `end`. See [JLS#2258](https://github.com/eclipse/eclipse.jdt.ls/pull/2258). + * bug fix - Use existing Gradle project `.settings/` location if available. See [#2528](https://github.com/redhat-developer/vscode-java/issues/2528). + * bug fix - Avoid re-using the same job for the "Publish Diagnostics" job. See [JLS#2356](https://github.com/eclipse/eclipse.jdt.ls/pull/2356). + * build - Use Predicate for filter. See [JLS#2355](https://github.com/eclipse/eclipse.jdt.ls/pull/2355). + * build - Add pre-release and platform specific publishing for OpenVSX registry. See [#2587](https://github.com/redhat-developer/vscode-java/pull/2587). + * build - Fix issues reported by npm-audit. See [#2777](https://github.com/redhat-developer/vscode-java/pull/2777). + ## 1.12.0 (October 27th, 2022) * performance - Improve project initialization. See [JLS#2252](https://github.com/eclipse/eclipse.jdt.ls/pull/2252). * performance - Re-use ExecutorService to avoid creating extra threads and resource leak. See [JLS#2041](https://github.com/eclipse/eclipse.jdt.ls/pull/2041). From 1895510182daa35c7dff620539eb749d6b34e54f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 1 Dec 2022 15:49:21 -0500 Subject: [PATCH 240/708] Upversion to 1.14.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 91bad8701..3d21ae421 100644 --- a/README.md +++ b/README.md @@ -210,8 +210,6 @@ The following settings are supported: * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. - -New in 1.13.0 * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. diff --git a/package-lock.json b/package-lock.json index ce77dd5d4..8445e87ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.13.0", + "version": "1.14.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 28da0084e..201004a22 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.13.0", + "version": "1.14.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 17bfd19c0af86a4992e69e42b4d80b8090bf64a5 Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Mon, 5 Dec 2022 15:05:04 +0800 Subject: [PATCH 241/708] refactor: move utilities out of extension.ts (#2824) * extract OutputInfoCollector from extension.ts * extract ClientErrorHandler from extension.ts * move hasBuildToolConflicts to utils.ts * move getJavaConfig to utils.ts * move constant cleanWorkspaceFileName into settings.ts * move applyWorkspaceEdit to standardLanguageClient.ts Signed-off-by: Yan Zhang --- src/clientErrorHandler.ts | 47 +++++++++ src/extension.ts | 176 ++------------------------------ src/outputInfoCollector.ts | 43 ++++++++ src/runtimeStatusBarProvider.ts | 3 +- src/settings.ts | 8 +- src/sourceAction.ts | 2 +- src/standardLanguageClient.ts | 12 ++- src/syntaxLanguageClient.ts | 4 +- src/utils.ts | 75 +++++++++++++- 9 files changed, 189 insertions(+), 181 deletions(-) create mode 100644 src/clientErrorHandler.ts create mode 100644 src/outputInfoCollector.ts diff --git a/src/clientErrorHandler.ts b/src/clientErrorHandler.ts new file mode 100644 index 000000000..2e3c2d185 --- /dev/null +++ b/src/clientErrorHandler.ts @@ -0,0 +1,47 @@ +import { window, commands } from "vscode"; +import { ErrorHandler, Message, ErrorAction, CloseAction } from "vscode-languageclient"; +import { Commands } from "./commands"; +import { logger } from "./log"; + +export class ClientErrorHandler implements ErrorHandler { + private restarts: number[]; + + constructor(private name: string) { + this.restarts = []; + } + + public error(_error: Error, _message: Message, count: number): ErrorAction { + if (count && count <= 3) { + logger.error(`${this.name} server encountered error: ${_message}, ${_error && _error.toString()}`); + return ErrorAction.Continue; + } + + logger.error(`${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`); + return ErrorAction.Shutdown; + } + + public closed(): CloseAction { + this.restarts.push(Date.now()); + if (this.restarts.length < 5) { + logger.error(`The ${this.name} server crashed and will restart.`); + return CloseAction.Restart; + } else { + const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; + if (diff <= 3 * 60 * 1000) { + const message = `The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`; + logger.error(message); + const action = "Show logs"; + window.showErrorMessage(message, action).then(selection => { + if (selection === action) { + commands.executeCommand(Commands.OPEN_LOGS); + } + }); + return CloseAction.DoNotRestart; + } + + logger.error(`The ${this.name} server crashed and will restart.`); + this.restarts.shift(); + return CloseAction.Restart; + } + } +} diff --git a/src/extension.ts b/src/extension.ts index 0d09894b8..fa60c2fb3 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,10 +5,11 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, CodeActionTriggerKind, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, OutputChannel, RelativePattern, TextDocument, UIKind, Uri, version, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; -import { CancellationToken, CloseAction, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ErrorAction, ErrorHandler, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, Message, RevealOutputChannelOn } from 'vscode-languageclient'; +import { CodeActionContext, CodeActionTriggerKind, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; +import { ClientErrorHandler } from './clientErrorHandler'; import { Commands } from './commands'; import { ClientStatus, ExtensionAPI } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; @@ -16,17 +17,18 @@ import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; +import { OutputInfoCollector } from './outputInfoCollector'; import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } from './plugin'; import { registerClientProviders } from './providerDispatcher'; import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; -import { ACTIVE_BUILD_TOOL_STATE, getJavaServerMode, handleTextBlockClosing, onConfigurationChange, ServerMode } from './settings'; +import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextBlockClosing, onConfigurationChange, ServerMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfiguration } from './utils'; +import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; import glob = require('glob'); const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); @@ -36,51 +38,6 @@ const extensionName = 'Language Support for Java'; let storagePath: string; let clientLogFile: string; -export const cleanWorkspaceFileName = '.cleanWorkspace'; - -export class ClientErrorHandler implements ErrorHandler { - private restarts: number[]; - - constructor(private name: string) { - this.restarts = []; - } - - public error(_error: Error, _message: Message, count: number): ErrorAction { - if (count && count <= 3) { - logger.error(`${this.name} server encountered error: ${_message}, ${_error && _error.toString()}`); - return ErrorAction.Continue; - } - - logger.error(`${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`); - return ErrorAction.Shutdown; - } - - public closed(): CloseAction { - this.restarts.push(Date.now()); - if (this.restarts.length < 5) { - logger.error(`The ${this.name} server crashed and will restart.`); - return CloseAction.Restart; - } else { - const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; - if (diff <= 3 * 60 * 1000) { - const message = `The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`; - logger.error(message); - const action = "Show logs"; - window.showErrorMessage(message, action).then(selection => { - if (selection === action) { - commands.executeCommand(Commands.OPEN_LOGS); - } - }); - return CloseAction.DoNotRestart; - } - - logger.error(`The ${this.name} server crashed and will restart.`); - this.restarts.shift(); - return CloseAction.Restart; - } - } -} - /** * Shows a message about the server crashing due to an out of memory issue */ @@ -118,46 +75,6 @@ function getHeapDumpFolderFromSettings(): string { return results[1] || results[2] || results[3]; } -export class OutputInfoCollector implements OutputChannel { - private channel: OutputChannel = null; - - constructor(public name: string) { - this.channel = window.createOutputChannel(this.name); - } - - append(value: string): void { - logger.info(value); - this.channel.append(value); - } - - appendLine(value: string): void { - logger.info(value); - this.channel.appendLine(value); - } - - replace(value: string): void { - this.clear(); - this.append(value); - } - - clear(): void { - this.channel.clear(); - } - - show(preserveFocus?: boolean): void; - show(column?: ViewColumn, preserveFocus?: boolean): void; - show(column?: any, preserveFocus?: any) { - this.channel.show(column, preserveFocus); - } - - hide(): void { - this.channel.hide(); - } - - dispose(): void { - this.channel.dispose(); - } -} export function activate(context: ExtensionContext): Promise { context.subscriptions.push(markdownPreviewProvider); @@ -563,48 +480,6 @@ async function ensureNoBuildToolConflicts(context: ExtensionContext, clientOptio return true; } -export async function hasBuildToolConflicts(): Promise { - const projectConfigurationUris: Uri[] = await getBuildFilesInWorkspace(); - const projectConfigurationFsPaths: string[] = projectConfigurationUris.map((uri) => uri.fsPath); - const eclipseDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, [], ".project"); - // ignore the folders that already has .project file (already imported before) - const gradleDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle"); - const gradleDirectoriesKts = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle.kts"); - gradleDirectories.concat(gradleDirectoriesKts); - const mavenDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, "pom.xml"); - return gradleDirectories.some((gradleDir) => { - return mavenDirectories.includes(gradleDir); - }); -} - -async function getBuildFilesInWorkspace(): Promise { - const buildFiles: Uri[] = []; - const inclusionFilePatterns: string[] = getBuildFilePatterns(); - inclusionFilePatterns.push("**/.project"); - const inclusionFolderPatterns: string[] = getInclusionPatternsFromNegatedExclusion(); - // Since VS Code API does not support put negated exclusion pattern in findFiles(), - // here we first parse the negated exclusion to inclusion and do the search. - if (inclusionFilePatterns.length > 0 && inclusionFolderPatterns.length > 0) { - buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /* force not use default exclusion */)); - } - - const inclusionBlob: string = convertToGlob(inclusionFilePatterns); - const exclusionBlob: string = getExclusionBlob(); - if (inclusionBlob) { - buildFiles.push(...await workspace.findFiles(inclusionBlob, exclusionBlob)); - } - - return buildFiles; -} - -function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], fileName: string): string[] { - return inclusions.filter((fsPath) => fsPath.endsWith(fileName)).map((fsPath) => { - return path.dirname(fsPath); - }).filter((inclusion) => { - return !exclusions.includes(inclusion); - }); -} - async function promptUserForStandardServer(config: WorkspaceConfiguration): Promise { const choice: string = await window.showInformationMessage("The workspace contains Java projects. Would you like to import them?", "Yes", "Always", "Later"); switch (choice) { @@ -632,36 +507,6 @@ async function promptUserForStandardServer(config: WorkspaceConfiguration): Prom } } -export function getJavaConfig(javaHome: string) { - const origConfig = getJavaConfiguration(); - const javaConfig = JSON.parse(JSON.stringify(origConfig)); - javaConfig.home = javaHome; - // Since source & output path are project specific settings. To avoid pollute other project, - // we avoid reading the value from the global scope. - javaConfig.project.outputPath = origConfig.inspect("project.outputPath").workspaceValue; - javaConfig.project.sourcePaths = origConfig.inspect("project.sourcePaths").workspaceValue; - - const editorConfig = workspace.getConfiguration('editor'); - javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); - javaConfig.format.tabSize = editorConfig.get('tabSize'); - const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; - switch (androidSupport) { - case "auto": - javaConfig.jdt.ls.androidSupport.enabled = version.includes("insider") ? true : false; - break; - case "on": - javaConfig.jdt.ls.androidSupport.enabled = true; - break; - case "off": - javaConfig.jdt.ls.androidSupport.enabled = false; - break; - default: - javaConfig.jdt.ls.androidSupport.enabled = false; - break; - } - return javaConfig; -} - export function deactivate(): Promise { return Promise.all([ standardClient.stop(), @@ -964,15 +809,6 @@ async function addFormatter(extensionPath, formatterUrl, defaultFormatter, relat }); } -export function applyWorkspaceEdit(obj, languageClient): Thenable { - const edit = languageClient.protocol2CodeConverter.asWorkspaceEdit(obj); - if (edit) { - return workspace.applyEdit(edit); - } else { - return Promise.resolve(true); - } -} - async function getTriggerFiles(): Promise { const openedJavaFiles = []; const activeJavaFile = getJavaFilePathOfTextDocument(window.activeTextEditor && window.activeTextEditor.document); diff --git a/src/outputInfoCollector.ts b/src/outputInfoCollector.ts new file mode 100644 index 000000000..c166e450c --- /dev/null +++ b/src/outputInfoCollector.ts @@ -0,0 +1,43 @@ +import { OutputChannel, window, ViewColumn } from "vscode"; +import { logger } from "./log"; + +export class OutputInfoCollector implements OutputChannel { + private channel: OutputChannel = null; + + constructor(public name: string) { + this.channel = window.createOutputChannel(this.name); + } + + append(value: string): void { + logger.info(value); + this.channel.append(value); + } + + appendLine(value: string): void { + logger.info(value); + this.channel.appendLine(value); + } + + replace(value: string): void { + this.clear(); + this.append(value); + } + + clear(): void { + this.channel.clear(); + } + + show(preserveFocus?: boolean): void; + show(column?: ViewColumn, preserveFocus?: boolean): void; + show(column?: any, preserveFocus?: any) { + this.channel.show(column, preserveFocus); + } + + hide(): void { + this.channel.hide(); + } + + dispose(): void { + this.channel.dispose(); + } +} diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index b1161e19b..ae86d9112 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -9,8 +9,7 @@ import { apiManager } from "./apiManager"; import * as semver from "semver"; import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; -import { getAllJavaProjects, getJavaConfiguration } from "./utils"; -import { hasBuildToolConflicts } from "./extension"; +import { getAllJavaProjects, getJavaConfiguration, hasBuildToolConflicts } from "./utils"; import { LombokVersionItemFactory, getLombokVersion, isLombokImported } from "./lombokSupport"; class RuntimeStatusBarProvider implements Disposable { diff --git a/src/settings.ts b/src/settings.ts index 395eb214f..2809c77bd 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,12 +2,10 @@ import * as fs from 'fs'; import * as path from 'path'; -import { window, Uri, workspace, WorkspaceConfiguration, commands, ConfigurationTarget, env, ExtensionContext, TextEditor, Range, Disposable, WorkspaceFolder, TextDocument, Position, SnippetString, TextLine } from 'vscode'; +import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; -import { cleanWorkspaceFileName } from './extension'; +import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; -import { checkLombokDependency, cleanupLombokCache } from './lombokSupport'; -import { CodeLensResolveRequest } from 'vscode-languageclient'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -16,6 +14,8 @@ export const IS_WORKSPACE_VMARGS_ALLOWED = "java.ls.isVmargsAllowed"; const extensionName = 'Language Support for Java'; export const ACTIVE_BUILD_TOOL_STATE = "java.activeBuildTool"; +export const cleanWorkspaceFileName = '.cleanWorkspace'; + const changeItem = { global: 'Exclude globally', workspace: 'Exclude in workspace', diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 084cde3cc..e0a258442 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -4,9 +4,9 @@ import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable, worksp import { CodeActionParams, WorkspaceEdit } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands } from './commands'; -import { applyWorkspaceEdit } from './extension'; import { ListOverridableMethodsRequest, AddOverridableMethodsRequest, CheckHashCodeEqualsStatusRequest, GenerateHashCodeEqualsRequest, OrganizeImportsRequest, ImportCandidate, ImportSelection, GenerateToStringRequest, CheckToStringStatusRequest, VariableBinding, GenerateAccessorsRequest, CheckConstructorStatusRequest, GenerateConstructorsRequest, CheckDelegateMethodsStatusRequest, GenerateDelegateMethodsRequest, AccessorKind, AccessorCodeActionRequest, AccessorCodeActionParams } from './protocol'; +import { applyWorkspaceEdit } from './standardLanguageClient'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { registerOverrideMethodsCommand(languageClient, context); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 4699f801b..081fdc3f5 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -4,7 +4,6 @@ import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, V import { Commands } from "./commands"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; -import { getJavaConfig, applyWorkspaceEdit } from "./extension"; import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo, BuildProjectRequest, BuildProjectParams } from "./protocol"; @@ -15,7 +14,7 @@ import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from import * as net from 'net'; import * as fse from 'fs-extra'; import * as path from 'path'; -import { getAllJavaProjects, getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; import { logger } from "./log"; import * as buildPath from './buildpath'; import * as sourceAction from './sourceAction'; @@ -711,3 +710,12 @@ export function showNoLocationFound(message: string): void { message ); } + +export function applyWorkspaceEdit(obj, languageClient): Thenable { + const edit = languageClient.protocol2CodeConverter.asWorkspaceEdit(obj); + if (edit) { + return workspace.applyEdit(edit); + } else { + return Promise.resolve(true); + } +} \ No newline at end of file diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index dc6f8e49c..0bc7bf477 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -4,12 +4,14 @@ import * as net from "net"; import { DidChangeConfigurationNotification, LanguageClientOptions } from "vscode-languageclient"; import { LanguageClient, ServerOptions, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; -import { ClientErrorHandler, getJavaConfig, OutputInfoCollector } from "./extension"; +import { ClientErrorHandler } from "./clientErrorHandler"; import { ClientStatus, ExtensionAPI } from "./extension.api"; import { logger } from "./log"; +import { OutputInfoCollector } from "./outputInfoCollector"; import { StatusNotification } from "./protocol"; import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; +import { getJavaConfig } from "./utils"; const extensionName = "Language Support for Java (Syntax Server)"; diff --git a/src/utils.ts b/src/utils.ts index c72fa8d7b..5897906e8 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,7 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; -import { workspace, WorkspaceConfiguration, TextDocument, commands, Uri } from 'vscode'; +import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; export function getJavaConfiguration(): WorkspaceConfiguration { @@ -132,3 +132,76 @@ export async function getAllJavaProjects(excludeDefaultProject: boolean = true): } return projectUris; } + +export async function hasBuildToolConflicts(): Promise { + const projectConfigurationUris: Uri[] = await getBuildFilesInWorkspace(); + const projectConfigurationFsPaths: string[] = projectConfigurationUris.map((uri) => uri.fsPath); + const eclipseDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, [], ".project"); + // ignore the folders that already has .project file (already imported before) + const gradleDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle"); + const gradleDirectoriesKts = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle.kts"); + gradleDirectories.concat(gradleDirectoriesKts); + const mavenDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, "pom.xml"); + return gradleDirectories.some((gradleDir) => { + return mavenDirectories.includes(gradleDir); + }); +} + +async function getBuildFilesInWorkspace(): Promise { + const buildFiles: Uri[] = []; + const inclusionFilePatterns: string[] = getBuildFilePatterns(); + inclusionFilePatterns.push("**/.project"); + const inclusionFolderPatterns: string[] = getInclusionPatternsFromNegatedExclusion(); + // Since VS Code API does not support put negated exclusion pattern in findFiles(), + // here we first parse the negated exclusion to inclusion and do the search. + if (inclusionFilePatterns.length > 0 && inclusionFolderPatterns.length > 0) { + buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /* force not use default exclusion */)); + } + + const inclusionBlob: string = convertToGlob(inclusionFilePatterns); + const exclusionBlob: string = getExclusionBlob(); + if (inclusionBlob) { + buildFiles.push(...await workspace.findFiles(inclusionBlob, exclusionBlob)); + } + + return buildFiles; +} + +function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], fileName: string): string[] { + return inclusions.filter((fsPath) => fsPath.endsWith(fileName)).map((fsPath) => { + return path.dirname(fsPath); + }).filter((inclusion) => { + return !exclusions.includes(inclusion); + }); +} + + +export function getJavaConfig(javaHome: string) { + const origConfig = getJavaConfiguration(); + const javaConfig = JSON.parse(JSON.stringify(origConfig)); + javaConfig.home = javaHome; + // Since source & output path are project specific settings. To avoid pollute other project, + // we avoid reading the value from the global scope. + javaConfig.project.outputPath = origConfig.inspect("project.outputPath").workspaceValue; + javaConfig.project.sourcePaths = origConfig.inspect("project.sourcePaths").workspaceValue; + + const editorConfig = workspace.getConfiguration('editor'); + javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); + javaConfig.format.tabSize = editorConfig.get('tabSize'); + const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; + switch (androidSupport) { + case "auto": + javaConfig.jdt.ls.androidSupport.enabled = version.includes("insider") ? true : false; + break; + case "on": + javaConfig.jdt.ls.androidSupport.enabled = true; + break; + case "off": + javaConfig.jdt.ls.androidSupport.enabled = false; + break; + default: + javaConfig.jdt.ls.androidSupport.enabled = false; + break; + } + return javaConfig; +} From df15a99781710064ec8dc4001fcd9f909c2a1a8a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Dec 2022 22:11:22 +0000 Subject: [PATCH 242/708] Bump decode-uri-component from 0.2.0 to 0.2.2 Bumps [decode-uri-component](https://github.com/SamVerschueren/decode-uri-component) from 0.2.0 to 0.2.2. - [Release notes](https://github.com/SamVerschueren/decode-uri-component/releases) - [Commits](https://github.com/SamVerschueren/decode-uri-component/compare/v0.2.0...v0.2.2) --- updated-dependencies: - dependency-name: decode-uri-component dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8445e87ad..7fdca2089 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1835,9 +1835,9 @@ "dev": true }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "dev": true }, "decompress": { From aa44a59013c3bcdbfc8cf38ce2bacd83272e193f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 5 Dec 2022 12:50:39 -0500 Subject: [PATCH 243/708] Add settings for some more cleanups. - addFinalModifier: Add final modifier where possible - instanceofPatternMatch: Use pattern matching for instanceof checks - lambdaExpression: Convert anonymmous class usage to lambda expressions - switchExpression: Convert switch statement to switch expression Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 102 +++++++++++++++++++++++ package.json | 6 +- 2 files changed, 107 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 7ed3724cf..6af26853e 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -171,4 +171,106 @@ becomes: String message = getMessage(); boolean result1 = "text".equals(message); boolean result2 = "text".equalsIgnoreCase(message); +``` + +### `addFinalModifier` + +Use the `final` modifier for variable declarations wherever it is possible. + +For example: + +```java +private int i= 0; +public void foo(int j) { + int k, h; + h= 0; +} +``` + +becomes: + +```java +private final int i= 0; +public void foo(final int j) { + final int k; + int h; + h= 0; +} +``` + +### `instanceofPatternMatch` + +Use pattern matching for the `instanceof` operator wherever possible. It is only applicable for Java level 15 or higher. + +For example: + +```java +if (object instanceof Integer) { + Integer i = (Integer) object; + return i.intValue(); +} +``` + +becomes: + +```java +if (object instanceof Integer i) { + return i.intValue(); +} +``` + + +### `lambdaExpression` + +Convert anonymous class declarations for functional interfaces to lambda expressions wherever possible. It is only applicable for Java level 8 or above. + +For example: + +```java +IntConsumer c = new IntConsumer() { + @Override public void accept(int value) { + System.out.println(i); + } +}; +``` + +becomes: + +```java +IntConsumer c = i -> { + System.out.println(i); +}; +``` + +### `switchExpression` + +Convert switch statements to switch expressions wherever possible. It is only applicable for Java level 14 or above. + +**Note** : _Switch statements that use control statements such as nested switch statements, if/else blocks, for/while loops are not considered as is the case for return/continue statements. All cases of the switch statement must either have a last assignment statement that sets the same variable/field as other cases, or else has a throw statement. Fall-through is allowed between cases but only if there are no other statements in between. The switch statement must have a default case unless the switch expression is an enum type and all possible enum values are represented in the cases._ + +For example: + +```java +int i; +switch(j) { + case 1: + i = 3; + break; + case 2: + i = 4; + break; + default: + i = 0; + break; +} +``` + +becomes: + +```java +int i = switch(j) { + case 1 -> 3; + case 2 -> 4; + default -> 0; +}; ``` \ No newline at end of file diff --git a/package.json b/package.json index 201004a22..2e8f3a5ee 100644 --- a/package.json +++ b/package.json @@ -1015,7 +1015,11 @@ "addOverride", "addDeprecated", "stringConcatToTextBlock", - "invertEquals" + "invertEquals", + "addFinalModifier", + "instanceofPatternMatch", + "lambdaExpression", + "switchExpression" ] }, "default": [], From 042f1cacbb594c3bc320a4886060cb780c809a81 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Dec 2022 15:46:20 +0000 Subject: [PATCH 244/708] Bump qs from 6.5.2 to 6.5.3 Bumps [qs](https://github.com/ljharb/qs) from 6.5.2 to 6.5.3. - [Release notes](https://github.com/ljharb/qs/releases) - [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md) - [Commits](https://github.com/ljharb/qs/compare/v6.5.2...v6.5.3) --- updated-dependencies: - dependency-name: qs dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7fdca2089..859a45ec8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5749,9 +5749,9 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "queue-microtask": { From ac737000d1be6d2482bad6312e56640bdaea73d8 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 15 Dec 2022 09:57:17 +0800 Subject: [PATCH 245/708] Support case matching for code completion (#2834) Signed-off-by: sheche --- package.json | 16 ++++++++++++++++ src/utils.ts | 8 +++++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 2e8f3a5ee..cf4317bb3 100644 --- a/package.json +++ b/package.json @@ -573,6 +573,22 @@ "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", "scope": "window" }, + "java.completion.matchCase": { + "type": "string", + "enum": [ + "auto", + "firstLetter", + "off" + ], + "enumDescriptions": [ + "Only match case for the first letter when using Visual Studio Code - Insiders.", + "Match case for the first letter when doing completion.", + "Do not match case when doing completion." + ], + "default": "auto", + "markdownDescription": "Specify whether to match case for code completion.", + "scope": "window" + }, "java.foldingRange.enabled": { "type": "boolean", "default": true, diff --git a/src/utils.ts b/src/utils.ts index 5897906e8..3a22388f8 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -188,10 +188,11 @@ export function getJavaConfig(javaHome: string) { const editorConfig = workspace.getConfiguration('editor'); javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); javaConfig.format.tabSize = editorConfig.get('tabSize'); + const isInsider: boolean = version.includes("insider"); const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; switch (androidSupport) { case "auto": - javaConfig.jdt.ls.androidSupport.enabled = version.includes("insider") ? true : false; + javaConfig.jdt.ls.androidSupport.enabled = isInsider; break; case "on": javaConfig.jdt.ls.androidSupport.enabled = true; @@ -203,5 +204,10 @@ export function getJavaConfig(javaHome: string) { javaConfig.jdt.ls.androidSupport.enabled = false; break; } + + const completionCaseMatching = javaConfig.completion.matchCase; + if (completionCaseMatching === "auto") { + javaConfig.completion.matchCase = isInsider ? "firstLetter" : "off"; + } return javaConfig; } From 811ecd108470be03c741b4b64395fc31744d1b7d Mon Sep 17 00:00:00 2001 From: shblue21 Date: Wed, 16 Nov 2022 14:29:02 +0900 Subject: [PATCH 246/708] Add the Korean translation file. --- package.nls.ko.json | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 package.nls.ko.json diff --git a/package.nls.ko.json b/package.nls.ko.json new file mode 100644 index 000000000..13cf6afbc --- /dev/null +++ b/package.nls.ko.json @@ -0,0 +1,26 @@ +{ + "java.server.mode.switch": "Standard 모드로 전환", + "java.projectConfiguration.update": "프로젝트 다시 로드", + "java.project.import": "작업 영역으로 Java 프로젝트 가져오기", + "java.open.serverLog": "Java Language Server 로그 파일 열기", + "java.open.serverStdoutLog": "Java Language Server 출력 로그 파일 열기", + "java.open.serverStderrLog": "Java Language Server 오류 로그 파일 열기", + "java.open.clientLog": "Java Extension 로그 파일 열기", + "java.open.logs": "모든 로그 파일 열기", + "java.workspace.compile": "Java 강제 컴파일", + "java.project.build": "프로젝트 다시 빌드", + "java.open.formatter.settings": "Java Formatter 설정 열기", + "java.clean.workspace": "Java Language Server 작업 영역 정리", + "java.project.updateSourceAttachment": "Attach Source", + "java.project.addToSourcePath": "Java Source 경로에 폴더 추가", + "java.project.removeFromSourcePath": "Java Source 경로에서 폴더 제거", + "java.project.listSourcePaths": "모든 Java Source 경로를 나열", + "java.show.server.task.status": "빌드 작업 상태 표시", + "java.action.navigateToSuperImplementation": "상위 구현으로 이동", + "java.action.showTypeHierarchy": "Type 계층 구조 표시", + "java.action.showClassHierarchy": "Class 계층 구조 표시", + "java.action.showSupertypeHierarchy": "Supertype 계층 구조 표시", + "java.action.showSubtypeHierarchy": "Subtype 계층 구조 표시", + "java.action.changeBaseType": "이 유형을 기준으로", + "java.project.createModuleInfo.command": "module-info.java 생성" +} From f93cc8bb574956aa27edaff32a798f33283c9195 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 26 Sep 2022 15:27:40 -0400 Subject: [PATCH 247/708] Delegate paste event handling to jdt.ls - Invoke jdt.ls's `java.edit.handlePasteEvent` command when vscode-java receives a paste event Requires eclipse/eclipse.jdt.ls#2349 Closes #1249 Signed-off-by: David Thompson --- .eslintignore | 22 +++++++ package-lock.json | 36 ++++++++-- package.json | 6 +- src/commands.ts | 4 ++ src/pasteEventHandler.ts | 102 +++++++++++++++++++++++++++++ src/standardLanguageClient.ts | 70 ++++++++++---------- vscode.proposed.documentPaste.d.ts | 75 +++++++++++++++++++++ 7 files changed, 276 insertions(+), 39 deletions(-) create mode 100644 .eslintignore create mode 100644 src/pasteEventHandler.ts create mode 100644 vscode.proposed.documentPaste.d.ts diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..35ef0867f --- /dev/null +++ b/.eslintignore @@ -0,0 +1,22 @@ +# .gitignore +out +server +node_modules +*.vsix +.DS_Store +.vscode-test +undefined +target +dist +jre +lombok +bin/ +.settings +.classpath +.project +test/resources/projects/**/.vscode +test/resources/projects/maven/salut/testGradle +test-temp + +# specific to eslint +vscode*.d.ts \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 859a45ec8..79689c81e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -315,9 +315,9 @@ "dev": true }, "@types/vscode": { - "version": "1.65.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.65.0.tgz", - "integrity": "sha512-wQhExnh2nEzpjDMSKhUvnNmz3ucpd3E+R7wJkOhBNK3No6fG3VUdmVmMOKD0A8NDZDDDiQcLNxe3oGmX5SjJ5w==", + "version": "1.73.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", + "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", "dev": true }, "@types/winreg": { @@ -1246,6 +1246,16 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -3095,6 +3105,13 @@ "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", "dev": true }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, "fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", @@ -3476,7 +3493,11 @@ "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, - "optional": true + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } }, "is-binary-path": { "version": "1.0.1", @@ -5141,6 +5162,13 @@ "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", "dev": true }, + "nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", + "dev": true, + "optional": true + }, "nanoid": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", diff --git a/package.json b/package.json index cf4317bb3..f281b5bb8 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,9 @@ "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, - "enableProposedApi": false, + "enabledApiProposals": [ + "documentPaste" + ], "capabilities": { "untrustedWorkspaces": { "supported": "limited", @@ -1345,7 +1347,7 @@ "build-server": "./node_modules/.bin/gulp build_server", "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", - "eslint": "eslint --ignore-path .gitignore --ext .js,.ts ." + "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts ." }, "devDependencies": { "@types/fs-extra": "^8.0.0", diff --git a/src/commands.ts b/src/commands.ts index 8270d4043..a36b9e220 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -182,6 +182,10 @@ export namespace Commands { * Organize imports silently. */ export const ORGANIZE_IMPORTS_SILENTLY = "java.edit.organizeImports"; + /** + * Handle a paste event. + */ + export const HANDLE_PASTE_EVENT = "java.edit.handlePasteEvent"; /** * Custom paste action (triggers auto-import) */ diff --git a/src/pasteEventHandler.ts b/src/pasteEventHandler.ts new file mode 100644 index 000000000..740c14c53 --- /dev/null +++ b/src/pasteEventHandler.ts @@ -0,0 +1,102 @@ +import { CancellationToken, commands, DataTransfer, DocumentPasteEdit as VDocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteProviderMetadata, ExtensionContext, languages, Range, TextDocument, window } from "vscode"; +import { FormattingOptions, Location, WorkspaceEdit as PWorkspaceEdit } from "vscode-languageclient"; +import { LanguageClient } from "vscode-languageclient/node"; +import { Commands } from "./commands"; +import { JAVA_SELECTOR } from "./standardLanguageClient"; + +const TEXT_MIMETYPE: string = "text/plain"; +const MIMETYPES: DocumentPasteProviderMetadata = { + pasteMimeTypes: [TEXT_MIMETYPE] +}; + +/** + * Parameters for `Commands.HANDLE_PASTE_EVENT` + */ +interface PasteEventParams { + location: Location; + text: string; + formattingOptions: FormattingOptions; + copiedDocumentUri?: string; +} + +/** + * Response from jdt.ls for `Commands.HANDLE_PASTE_EVENT` that's similar, but not identical, to VS Code's paste edit. + * + * @see VDocumentPasteEdit + */ +interface PDocumentPasteEdit { + insertText: string; + additionalEdit: PWorkspaceEdit; +} + +/** + * Registers the vscode-java DocumentPasteEditProviders and sets them up to be disposed. + * + * @param context the extension context + */ +export function registerPasteEventHandler(context: ExtensionContext, languageClient: LanguageClient) { + if (languages["registerDocumentPasteEditProvider"]) { + context.subscriptions.push(languages["registerDocumentPasteEditProvider"](JAVA_SELECTOR, new PasteEditProvider(languageClient), MIMETYPES)); + } +} + +/** + * `DocumentPasteEditProvider` that delegates to jdt.ls to make any changes necessary to the pasted text and add any additional workspace edits. + */ +class PasteEditProvider implements DocumentPasteEditProvider { + + private languageClient: LanguageClient; + private copiedContent: string | undefined; + private copiedDocumentUri: string | undefined; + + constructor(languageClient: LanguageClient) { + this.languageClient = languageClient; + } + + async prepareDocumentPaste?(document: TextDocument, _ranges: readonly Range[], dataTransfer: DataTransfer, _token: CancellationToken): Promise { + const copiedContent: string = await dataTransfer.get(TEXT_MIMETYPE).asString(); + if (copiedContent) { + this.copiedDocumentUri = document.uri.toString(); + this.copiedContent = copiedContent; + } + } + + async provideDocumentPasteEdits(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): Promise { + + const insertText: string = await dataTransfer.get(TEXT_MIMETYPE).asString(); + + // don't try to provide for multi character inserts; the implementation will get messy and the feature won't be that helpful + if (!insertText || token.isCancellationRequested || ranges.length !== 1) { + return null; + } + + const range = ranges[0]; + + const location: Location = { + range: this.languageClient.code2ProtocolConverter.asRange(range), + uri: document.uri.toString(), + }; + + const activeTextEditor = window.activeTextEditor; + + const pasteEventParams: PasteEventParams = { + location: location, + text: insertText, + copiedDocumentUri: this.copiedContent === insertText ? this.copiedDocumentUri : undefined, + formattingOptions: { + insertSpaces: activeTextEditor.options.insertSpaces, + tabSize: activeTextEditor.options.tabSize + } + }; + + const pasteResponse: PDocumentPasteEdit = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.HANDLE_PASTE_EVENT, JSON.stringify(pasteEventParams)); + + if (pasteResponse) { + return { + insertText: pasteResponse.insertText, + additionalEdit: pasteResponse.additionalEdit ? this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined + } as VDocumentPasteEdit; + } + } + +} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 081fdc3f5..b2a36c5eb 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,41 +1,42 @@ 'use strict'; -import { ExtensionContext, window, workspace, commands, Uri, ProgressLocation, ViewColumn, EventEmitter, extensions, Location, languages, CodeActionKind, TextEditor, CancellationToken, ConfigurationTarget } from "vscode"; -import { Commands } from "./commands"; -import { serverStatus, ServerStatusKind } from "./serverStatus"; -import { prepareExecutable, awaitServerConnection } from "./javaServerStarter"; -import { LanguageClientOptions, Position as LSPosition, Location as LSLocation, MessageType, TextDocumentPositionParams, ConfigurationRequest, ConfigurationParams } from "vscode-languageclient"; -import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; -import { CompileWorkspaceRequest, CompileWorkspaceStatus, SourceAttachmentRequest, SourceAttachmentResult, SourceAttachmentAttribute, FeatureStatus, StatusNotification, ProgressReportNotification, ActionableNotification, ExecuteClientCommandRequest, ServerNotification, EventNotification, EventType, LinkLocation, FindLinks, GradleCompatibilityInfo, UpgradeGradleWrapperInfo, BuildProjectRequest, BuildProjectParams } from "./protocol"; -import { setGradleWrapperChecksum, excludeProjectSettingsFiles, ServerMode } from "./settings"; -import { onExtensionChange, collectBuildFilePattern } from "./plugin"; -import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; -import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; -import * as net from 'net'; import * as fse from 'fs-extra'; +import { findRuntimes } from "jdk-utils"; +import * as net from 'net'; import * as path from 'path'; -import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; -import { logger } from "./log"; -import * as buildPath from './buildpath'; -import * as sourceAction from './sourceAction'; -import * as refactorAction from './refactorAction'; -import * as pasteAction from './pasteAction'; -import { serverTasks } from "./serverTasks"; +import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams } from "vscode-languageclient"; +import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; -import { ExtensionAPI, ClientStatus } from "./extension.api"; -import { serverStatusBarProvider } from "./serverStatusBarProvider"; +import * as buildPath from './buildpath'; +import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider"; +import { Commands } from "./commands"; +import { ClientStatus, ExtensionAPI } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; +import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; +import { JavaInlayHintsProvider } from "./inlayHintsProvider"; +import { awaitServerConnection, prepareExecutable } from "./javaServerStarter"; +import { logger } from "./log"; +import { checkLombokDependency } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; -import { RefactorDocumentProvider, javaRefactorKinds } from "./codeActionProvider"; -import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; -import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; +import * as pasteAction from './pasteAction'; +import { registerPasteEventHandler } from './pasteEventHandler'; +import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; -import { findRuntimes } from "jdk-utils"; +import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressReportNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; +import * as refactorAction from './refactorAction'; +import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; +import { serverStatus, ServerStatusKind } from "./serverStatus"; +import { serverStatusBarProvider } from "./serverStatusBarProvider"; +import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; +import { serverTasks } from "./serverTasks"; +import { excludeProjectSettingsFiles, ServerMode, setGradleWrapperChecksum } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; -import { JavaInlayHintsProvider } from "./inlayHintsProvider"; -import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; -import { checkLombokDependency } from "./lombokSupport"; +import * as sourceAction from './sourceAction'; import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./standardLanguageClientUtils"; +import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; +import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; +import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -44,6 +45,11 @@ const USE_JAVA = "Use Java "; const AS_GRADLE_JVM = " as Gradle JVM"; const UPGRADE_GRADLE = "Upgrade Gradle to "; const GRADLE_IMPORT_JVM = "java.import.gradle.java.home"; +export const JAVA_SELECTOR: DocumentSelector = [ + { scheme: "file", language: "java", pattern: "**/*.java" }, + { scheme: "jdt", language: "java", pattern: "**/*.class" }, + { scheme: "untitled", language: "java", pattern: "**/*.java" } +]; export class StandardLanguageClient { @@ -588,12 +594,10 @@ export class StandardLanguageClient { }, new GradleCodeActionProvider(context), gradleCodeActionMetadata); if (languages.registerInlayHintsProvider) { - context.subscriptions.push(languages.registerInlayHintsProvider([ - { scheme: "file", language: "java", pattern: "**/*.java" }, - { scheme: "jdt", language: "java", pattern: "**/*.class" }, - { scheme: "untitled", language: "java", pattern: "**/*.java" } - ], new JavaInlayHintsProvider(this.languageClient))); + context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); } + + registerPasteEventHandler(context, this.languageClient); }); } diff --git a/vscode.proposed.documentPaste.d.ts b/vscode.proposed.documentPaste.d.ts new file mode 100644 index 000000000..57ea908f8 --- /dev/null +++ b/vscode.proposed.documentPaste.d.ts @@ -0,0 +1,75 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. See License.txt in the project root for license information. + *--------------------------------------------------------------------------------------------*/ + +declare module 'vscode' { + + // https://github.com/microsoft/vscode/issues/30066/ + + /** + * Provider invoked when the user copies and pastes code. + */ + interface DocumentPasteEditProvider { + + /** + * Optional method invoked after the user copies text in a file. + * + * During {@link prepareDocumentPaste}, an extension can compute metadata that is attached to + * a {@link DataTransfer} and is passed back to the provider in {@link provideDocumentPasteEdits}. + * + * @param document Document where the copy took place. + * @param ranges Ranges being copied in the `document`. + * @param dataTransfer The data transfer associated with the copy. You can store additional values on this for later use in {@link provideDocumentPasteEdits}. + * @param token A cancellation token. + */ + prepareDocumentPaste?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): void | Thenable; + + /** + * Invoked before the user pastes into a document. + * + * In this method, extensions can return a workspace edit that replaces the standard pasting behavior. + * + * @param document Document being pasted into + * @param ranges Currently selected ranges in the document. + * @param dataTransfer The data transfer associated with the paste. + * @param token A cancellation token. + * + * @return Optional workspace edit that applies the paste. Return undefined to use standard pasting. + */ + provideDocumentPasteEdits(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): ProviderResult; + } + + /** + * An operation applied on paste + */ + class DocumentPasteEdit { + /** + * The text or snippet to insert at the pasted locations. + */ + insertText: string | SnippetString; + + /** + * An optional additional edit to apply on paste. + */ + additionalEdit?: WorkspaceEdit; + + /** + * @param insertText The text or snippet to insert at the pasted locations. + */ + constructor(insertText: string | SnippetString); + } + + interface DocumentPasteProviderMetadata { + /** + * Mime types that `provideDocumentPasteEdits` should be invoked for. + * + * Use the special `files` mimetype to indicate the provider should be invoked if any files are present in the `DataTransfer`. + */ + readonly pasteMimeTypes: readonly string[]; + } + + namespace languages { + export function registerDocumentPasteEditProvider(selector: DocumentSelector, provider: DocumentPasteEditProvider, metadata: DocumentPasteProviderMetadata): Disposable; + } +} From c0e0a6376809e6c1d5f60bc5a2bfd07452e9a6db Mon Sep 17 00:00:00 2001 From: WonJung Kim <95566897+kimwonj77@users.noreply.github.com> Date: Tue, 27 Dec 2022 14:28:09 +0900 Subject: [PATCH 248/708] Fix Build Status badge See badges/shields#8671 Signed-off-by: WonJung Kim git@won-jung.kim --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3d21ae421..514334365 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ Language support for Java ™ for Visual Studio Code [![Visual Studio Marketplace](https://img.shields.io/visual-studio-marketplace/v/redhat.java?style=for-the-badge&label=VS%20Marketplace&logo=visual-studio-code)](https://marketplace.visualstudio.com/items?itemName=redhat.java) [![Installs](https://img.shields.io/visual-studio-marketplace/i/redhat.java?style=for-the-badge)](https://marketplace.visualstudio.com/items?itemName=redhat.java) [![Join the chat at https://gitter.im/redhat-developer/vscode-java](https://img.shields.io/gitter/room/redhat-developer/vscode-java?style=for-the-badge&logo=gitter)](https://gitter.im/redhat-developer/vscode-java) -[![Build Status](https://img.shields.io/github/workflow/status/redhat-developer/vscode-java/pr-verify?style=for-the-badge&logo=github)](https://github.com/redhat-developer/vscode-java/actions?query=workflow:pr-verify) +[![Build Status](https://img.shields.io/github/actions/workflow/status/redhat-developer/vscode-java/pr-verify.yml?branch=master&style=for-the-badge&logo=github)](https://github.com/redhat-developer/vscode-java/actions?query=workflow:pr-verify) [![License](https://img.shields.io/github/license/redhat-developer/vscode-java?style=for-the-badge&logo=eclipse)](https://github.com/redhat-developer/vscode-java/blob/master/LICENSE) Provides Java ™ language support via From 7738468875332c3a94f5b62a88ff2ede67aa49eb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 4 Jan 2023 17:26:56 -0500 Subject: [PATCH 249/708] Work around vsce refusal to publish extensions with proposed API - enabledApiProposals is removed, and enablement can be controlled at the platform level Signed-off-by: Roland Grunberg --- package.json | 3 --- 1 file changed, 3 deletions(-) diff --git a/package.json b/package.json index f281b5bb8..c7b8fc379 100644 --- a/package.json +++ b/package.json @@ -9,9 +9,6 @@ "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, - "enabledApiProposals": [ - "documentPaste" - ], "capabilities": { "untrustedWorkspaces": { "supported": "limited", From 8cb673911441133ab24639bc96dcbf1f94777607 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 11 Jan 2023 10:13:45 +0800 Subject: [PATCH 250/708] add try-catch for potential errors Signed-off-by: Shi Chen --- src/pasteEventHandler.ts | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/pasteEventHandler.ts b/src/pasteEventHandler.ts index 740c14c53..5c9361753 100644 --- a/src/pasteEventHandler.ts +++ b/src/pasteEventHandler.ts @@ -89,14 +89,19 @@ class PasteEditProvider implements DocumentPasteEditProvider { } }; - const pasteResponse: PDocumentPasteEdit = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.HANDLE_PASTE_EVENT, JSON.stringify(pasteEventParams)); - - if (pasteResponse) { - return { - insertText: pasteResponse.insertText, - additionalEdit: pasteResponse.additionalEdit ? this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined - } as VDocumentPasteEdit; + try { + const pasteResponse: PDocumentPasteEdit = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.HANDLE_PASTE_EVENT, JSON.stringify(pasteEventParams)); + if (pasteResponse) { + return { + insertText: pasteResponse.insertText, + additionalEdit: pasteResponse.additionalEdit ? this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined + } as VDocumentPasteEdit; + } + } catch (e) { + // Do nothing } + // either the handler returns null or encounters problems, fall back to return undefined to let VS Code ignore this handler + return undefined; } } From a2228d8a8a7b8e284a313c036b5138bfd9e243e8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 12 Jan 2023 09:56:10 -0500 Subject: [PATCH 251/708] package-lock.json resolved field should use public registry by default. Signed-off-by: Roland Grunberg --- package-lock.json | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 79689c81e..17f26a957 100644 --- a/package-lock.json +++ b/package-lock.json @@ -301,7 +301,7 @@ }, "@types/sinon": { "version": "10.0.13", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, "requires": { @@ -871,7 +871,7 @@ }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, @@ -1453,7 +1453,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { @@ -2140,7 +2140,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true } @@ -2325,7 +2325,7 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, @@ -3319,7 +3319,7 @@ }, "fsevents": { "version": "2.3.2", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, @@ -3490,7 +3490,7 @@ }, "fsevents": { "version": "1.2.13", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "dev": true, "optional": true, @@ -3685,7 +3685,7 @@ "dependencies": { "request": { "version": "2.88.2", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request/-/request-2.88.2.tgz", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { @@ -3713,7 +3713,7 @@ }, "request-progress": { "version": "3.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "requires": { @@ -3730,7 +3730,7 @@ }, "gulp-util": { "version": "3.0.8", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", "dev": true, "requires": { @@ -3756,19 +3756,19 @@ "dependencies": { "clone": { "version": "1.0.4", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-stats": { "version": "0.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", "dev": true }, "lodash.template": { "version": "3.6.2", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, "requires": { @@ -3785,19 +3785,19 @@ }, "object-assign": { "version": "3.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true }, "replace-ext": { "version": "0.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true }, "vinyl": { "version": "0.5.3", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, "requires": { @@ -3844,7 +3844,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { @@ -4869,7 +4869,7 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, @@ -6580,7 +6580,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true }, @@ -7637,7 +7637,7 @@ }, "yargs-parser": { "version": "5.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { From cbd0e55e41db26da4f9dcbca0b293d4c470a078d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 13 Jan 2023 16:57:33 -0500 Subject: [PATCH 252/708] React to vsce renaming to @vscode/vsce. - Use --force to override any older vsce provided by NodeJS tooling Signed-off-by: Roland Grunberg --- Jenkinsfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Jenkinsfile b/Jenkinsfile index ee0bc710a..3d045dfce 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -4,7 +4,7 @@ def installBuildRequirements(){ def nodeHome = tool 'nodejs-14.19.1' env.PATH="${env.PATH}:${nodeHome}/bin" sh "npm install -g typescript" - sh 'npm install -g "vsce"' + sh 'npm install -g --force "@vscode/vsce"' sh 'npm install -g "ovsx"' } From 9a22a5849f84e9a85a6f060d3c824365934982c5 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 16 Jan 2023 09:04:18 +0100 Subject: [PATCH 253/708] Publish universal vsix. Fixes #2837 Signed-off-by: Fred Bricon --- Jenkinsfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 3d045dfce..c4a000769 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -75,7 +75,7 @@ def publishExtensions() { stage "publish generic version to VS Code Marketplace" withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - sh 'vsce publish -p ${TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + " ${env.publishPreReleaseFlag}" + sh 'vsce publish -p ${TOKEN}' + " ${env.publishPreReleaseFlag}" } stage "publish specific version to VS Code Marketplace" @@ -88,7 +88,7 @@ def publishExtensions() { stage "Publish generic version to Open-VSX Marketplace" withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { - sh 'ovsx publish -p ${OVSX_TOKEN} --target win32-ia32 win32-arm64 linux-armhf alpine-x64 alpine-arm64' + " ${env.publishPreReleaseFlag}" + sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${env.publishPreReleaseFlag}" } stage "Publish specific version to Open-VSX Marketplace" From 33f5b9c3a0e4dc5dfb24d215004ce0a02950f9de Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Tue, 17 Jan 2023 05:15:27 +0800 Subject: [PATCH 254/708] Share indexes among workspaces (#2811) * Make default index location to be os-specific & add a command to clean shared indexes * Add sharedIndexes settings as New in 1.14.0 in the README Signed-off-by: Jinbo Wang --- README.md | 10 ++++ package.json | 22 ++++++++ package.nls.json | 3 +- package.nls.zh-cn.json | 3 +- src/commands.ts | 5 ++ src/extension.ts | 16 +++++- src/javaServerStarter.ts | 56 ++++++++++++++++++- src/settings.ts | 3 +- test/lightweight-mode-suite/extension.test.ts | 1 + test/standard-mode-suite/extension.test.ts | 1 + 10 files changed, 115 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 514334365..1d4c6105d 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,16 @@ The following settings are supported: * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. +New in 1.14.0 +* `java.sharedIndexes.enabled`: [Experimental] Specify whether to share indexes between different workspaces. Defaults to `auto` and the shared indexes is automatically enabled in Visual Studio Code - Insiders. + - auto + - on + - off +* `java.sharedIndexes.location`: Specifies a common index location for all workspaces. See default values as follows: + - Windows: First use `"$APPDATA\\.jdt\\index"`, or `"~\\.jdt\\index"` if it does not exist + - macOS: `"~/Library/Caches/.jdt/index"` + - Linux: First use `"$XDG_CACHE_HOME/.jdt/index"`, or `"~/.cache/.jdt/index"` if it does not exist + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index c7b8fc379..24b966c51 100644 --- a/package.json +++ b/package.json @@ -1039,6 +1039,23 @@ }, "default": [], "scope": "window" + }, + "java.sharedIndexes.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to share indexes between different workspaces. When set to `auto`, shared indexes will be enabled in Visual Studio Code - Insiders.", + "scope": "window" + }, + "java.sharedIndexes.location": { + "type": "string", + "markdownDescription": "Specifies a common index location for all workspaces. See default values as follows:\n \nWindows: First use `\"$APPDATA\\\\.jdt\\\\index\"`, or `\"~\\\\.jdt\\\\index\"` if it does not exist\n \nmacOS: `\"~/Library/Caches/.jdt/index\"`\n \nLinux: First use `\"$XDG_CACHE_HOME/.jdt/index\"`, or `\"~/.cache/.jdt/index\"` if it does not exist", + "default": "", + "scope": "window" } } }, @@ -1176,6 +1193,11 @@ "command": "_java.learnMoreAboutCleanUps", "title": "Learn more about Java Clean Ups", "category": "Java" + }, + { + "command": "java.clean.sharedIndexes", + "title": "%java.clean.sharedIndexes%", + "category": "Java" } ], "keybindings": [ diff --git a/package.nls.json b/package.nls.json index 3749f7c9a..e82f5287f 100644 --- a/package.nls.json +++ b/package.nls.json @@ -22,5 +22,6 @@ "java.action.showSupertypeHierarchy": "Show Supertype Hierarchy", "java.action.showSubtypeHierarchy": "Show Subtype Hierarchy", "java.action.changeBaseType": "Base on this Type", - "java.project.createModuleInfo.command": "Create module-info.java" + "java.project.createModuleInfo.command": "Create module-info.java", + "java.clean.sharedIndexes": "Clean Shared Indexes" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index ae5f2d759..87eb77c5f 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -22,5 +22,6 @@ "java.action.showSupertypeHierarchy": "显示父类层次结构", "java.action.showSubtypeHierarchy": "显示子类层次结构", "java.action.changeBaseType": "基于此类型", - "java.project.createModuleInfo.command": "创建 module-info.java" + "java.project.createModuleInfo.command": "创建 module-info.java", + "java.clean.sharedIndexes": "清理共享的索引文件" } diff --git a/src/commands.ts b/src/commands.ts index a36b9e220..370692a11 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -315,4 +315,9 @@ export namespace Commands { * JDT.LS will call this command before set the server to ready state. */ export const REFRESH_BUNDLES_COMMAND = "_java.reloadBundles.command"; + + /** + * Clean everything in the shared index directory. + */ + export const CLEAN_SHARED_INDEXES = "java.clean.sharedIndexes"; } diff --git a/src/extension.ts b/src/extension.ts index fa60c2fb3..5c950e73d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -13,7 +13,7 @@ import { ClientErrorHandler } from './clientErrorHandler'; import { Commands } from './commands'; import { ClientStatus, ExtensionAPI } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; -import { HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; +import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -304,6 +304,7 @@ export function activate(context: ExtensionContext): Promise { })); context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); + context.subscriptions.push(commands.registerCommand(Commands.CLEAN_SHARED_INDEXES, () => cleanSharedIndexes(context))); context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); @@ -603,6 +604,19 @@ async function cleanWorkspace(workspacePath, force?: boolean) { commands.executeCommand(Commands.RELOAD_WINDOW); } +async function cleanSharedIndexes(context: ExtensionContext) { + const sharedIndexLocation: string = getSharedIndexCache(context); + if (sharedIndexLocation && fs.existsSync(sharedIndexLocation)) { + const doIt = 'Clean and Reload'; + const ans = await window.showWarningMessage('The shared indexes might be in use by other workspaces, do you want to clear it? New indexes will be built after reloading.', + doIt, "Cancel"); + if (ans === doIt) { + deleteDirectory(sharedIndexLocation); + commands.executeCommand(Commands.RELOAD_WINDOW); + } + } +} + function openServerLogFile(workspacePath, column: ViewColumn = ViewColumn.Active): Thenable { const serverLogFile = path.join(workspacePath, '.metadata', '.log'); return openLogFile(serverLogFile, 'Could not open Java Language Server log file', column); diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index c2fb85296..1b01b9437 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -4,7 +4,7 @@ import * as glob from 'glob'; import * as net from 'net'; import * as os from 'os'; import * as path from 'path'; -import { ExtensionContext, workspace } from 'vscode'; +import { ExtensionContext, version, workspace } from 'vscode'; import { Executable, ExecutableOptions, StreamInfo } from 'vscode-languageclient/node'; import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; @@ -130,6 +130,11 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp if (vmargs.indexOf(HEAP_DUMP_LOCATION) < 0) { params.push(`${HEAP_DUMP_LOCATION}${path.dirname(workspacePath)}`); } + + const sharedIndexLocation: string = resolveIndexCache(context); + if (sharedIndexLocation) { + params.push(`-Djdt.core.sharedIndexLocation=${sharedIndexLocation}`); + } } // "OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify @@ -165,6 +170,55 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp return params; } +function resolveIndexCache(context: ExtensionContext) { + let enabled: string = getJavaConfiguration().get("sharedIndexes.enabled"); + if (enabled === "auto") { + enabled = version.includes("insider") ? "on" : "off"; + } + + if (enabled !== "on") { + return; + } + + const location: string = getSharedIndexCache(context); + if (location) { + ensureExists(location); + if (!fs.existsSync(location)) { + logger.error(`Failed to create the shared index directory '${location}', fall back to local index.`); + return; + } + } + + return location; +} + +export function getSharedIndexCache(context: ExtensionContext): string { + let location: string = getJavaConfiguration().get("sharedIndexes.location"); + if (!location) { + switch (process.platform) { + case "win32": + location = process.env.APPDATA ? path.join(process.env.APPDATA, ".jdt", "index") + : path.join(os.homedir(), ".jdt", "index"); + break; + case "darwin": + location = path.join(os.homedir(), "Library", "Caches", ".jdt", "index"); + break; + case "linux": + location = process.env.XDG_CACHE_HOME ? path.join(process.env.XDG_CACHE_HOME, ".jdt", "index") + : path.join(os.homedir(), ".cache", ".jdt", "index"); + break; + default: + const globalStoragePath = context.globalStorageUri?.fsPath; // .../Code/User/globalStorage/redhat.java + location = globalStoragePath ? path.join(globalStoragePath, "index") : undefined; + } + } else { + // expand homedir + location = location.startsWith(`~${path.sep}`) ? path.join(os.homedir(), location.slice(2)) : location; + } + + return location; +} + function resolveConfiguration(context, configDir) { ensureExists(context.globalStoragePath); const extensionPath = path.resolve(context.extensionPath, "package.json"); diff --git a/src/settings.ts b/src/settings.ts index 2809c77bd..f46501c9a 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -132,7 +132,8 @@ function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: Work || hasConfigKeyChanged('home', oldConfig, newConfig) || hasConfigKeyChanged('jdt.ls.vmargs', oldConfig, newConfig) || hasConfigKeyChanged('progressReports.enabled', oldConfig, newConfig) - || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig); + || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig) + || hasConfigKeyChanged('sharedIndexes.location', oldConfig, newConfig);; } function hasConfigKeyChanged(key, oldConfig, newConfig) { diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 1e03d09fe..29800e940 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -23,6 +23,7 @@ suite('Java Language Extension - LightWeight', () => { Commands.CLEAN_WORKSPACE, Commands.SWITCH_SERVER_MODE, Commands.OPEN_FILE, + Commands.CLEAN_SHARED_INDEXES, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index e4f0ae226..0634c730a 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -88,6 +88,7 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_CLASS_HIERARCHY, Commands.LEARN_MORE_ABOUT_CLEAN_UPS, Commands.OPEN_FILE, + Commands.CLEAN_SHARED_INDEXES, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 90ef85312da8b11b1dac9ba6115efcda3bc6cd15 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 16 Jan 2023 23:45:54 -0500 Subject: [PATCH 255/708] Add Changelog for 1.14.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bd753a8ab..b27e1ebc7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Change Log +## 1.14.0 (January 17th, 2023) + * enhancement - Support for shared indexes among workspaces. See [#2723](https://github.com/redhat-developer/vscode-java/issues/2723). + * enhancement - Support pasting content into a string literal. See [#1249](https://github.com/redhat-developer/vscode-java/issues/1249). + * enhancement - Resolve missing imports (if any) when pasting code. See [JLS#2320](https://github.com/eclipse/eclipse.jdt.ls/pull/2320). + * enhancement - Support matching case for code completion. See [#2834](https://github.com/redhat-developer/vscode-java/pull/2834). + * enhancement - Add code action to insert missing required attributes for an annotation. See [JLS#1860](https://github.com/eclipse/eclipse.jdt.ls/issues/1860). + * enhancement - Create cleanup actions for adding `final` modifier where possible, converting `switch` statement to `switch` expression, using pattern matching for `instanceof` checks, and converting anonymous functions to lambda expressions. See [#2827](https://github.com/redhat-developer/vscode-java/pull/2827). + * enhancement - Support quickfix for gradle jpms projects. See [JLS#2304](https://github.com/eclipse/eclipse.jdt.ls/pull/2304). + * enhancement - Add the Korean translation file. See [#2802](https://github.com/redhat-developer/vscode-java/pull/2802). + * bug fix - Fix incorrect type hierarchy on multi module Maven projects. See [#2871](https://github.com/redhat-developer/vscode-java/issues/2871). + * bug fix - Permit output folder to be the same as a source folder. See [#2786](https://github.com/redhat-developer/vscode-java/issues/2786). + * bug fix - Organize imports removes static imports under some conditions. See [#2861](https://github.com/redhat-developer/vscode-java/issues/2861). + * bug fix - Fix completion issue occuring when invocation spans multiple lines. See [JLS#2387](https://github.com/eclipse/eclipse.jdt.ls/issues/2387). + * bug fix - Fix scope calculation for "Surround with try/catch" refactoring. See [#2711](https://github.com/redhat-developer/vscode-java/issues/2711). + * bug fix - Fix NPE occuring when completion item is selected. See [JLS#2376](https://github.com/eclipse/eclipse.jdt.ls/issues/2376). + * bug fix - Log user friendly error if client does not support `_java.reloadBundles.command`. See [JLS#2370](https://github.com/eclipse/eclipse.jdt.ls/pull/2370). + * bug fix - Postfix completion should not be available when editing Javadoc. See [JLS#2367](https://github.com/eclipse/eclipse.jdt.ls/issues/2367). + * bug fix - Update m2e to latest version in order to ensure classpath resources persist. See [#2857](https://github.com/redhat-developer/vscode-java/issues/2857). + * build - Use `instanceof` pattern matching in code base. See [JLS#2357](https://github.com/eclipse/eclipse.jdt.ls/pull/2357). + * build - React to `vsce` renaming to `@vscode/vsce`. See [#2879](https://github.com/redhat-developer/vscode-java/pull/2879). + * build - Work around vsce refusal to publish extensions with proposed API. See [#2854](https://github.com/redhat-developer/vscode-java/pull/2854). + * build - Deploy the universal vsix to support all platforms without an embedded JRE. See [#2837](https://github.com/redhat-developer/vscode-java/issues/2837). + * build - Ensure npm public registry is used for the resolved field in `package-lock.json`. See [#2874](https://github.com/redhat-developer/vscode-java/issues/2874). + * build - Bump qs from 6.5.2 to 6.5.3 and decode-uri-component from 0.2.0 to 0.2.2. See [#2832](https://github.com/redhat-developer/vscode-java/pull/2832), [#2823](https://github.com/redhat-developer/vscode-java/pull/2823). + * build - Move utilities out of extension.ts. See [#2824](https://github.com/redhat-developer/vscode-java/pull/2824). + * documentation - Fix Build Status badge. See [#2847](https://github.com/redhat-developer/vscode-java/pull/2847). + ## 1.13.0 (December 1st, 2022) * enhancement - Support "Add all missing imports". See [#2753](https://github.com/redhat-developer/vscode-java/pull/2753). * enhancement - Support Gradle annotation processing. See [#1039](https://github.com/redhat-developer/vscode-java/issues/1039). From 448982447d322f4d72bb923906e8eb8323d64335 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 17 Jan 2023 11:57:57 -0500 Subject: [PATCH 256/708] Upversion to 1.15.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 1d4c6105d..4e94eec5c 100644 --- a/README.md +++ b/README.md @@ -213,8 +213,6 @@ The following settings are supported: * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. - -New in 1.14.0 * `java.sharedIndexes.enabled`: [Experimental] Specify whether to share indexes between different workspaces. Defaults to `auto` and the shared indexes is automatically enabled in Visual Studio Code - Insiders. - auto - on diff --git a/package-lock.json b/package-lock.json index 17f26a957..0c199d564 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.14.0", + "version": "1.15.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 24b966c51..3e47da993 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.14.0", + "version": "1.15.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From ae7175389e05765e4bcc96197661590c488a9a20 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Thu, 19 Jan 2023 18:43:27 +0100 Subject: [PATCH 257/708] Add java.import.maven.disableTestClasspathFlag (#2878) Signed-off-by: Snjezana Peco Signed-off-by: Snjezana Peco --- README.md | 3 +++ package.json | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/README.md b/README.md index 4e94eec5c..6bc1bad49 100644 --- a/README.md +++ b/README.md @@ -222,6 +222,9 @@ The following settings are supported: - macOS: `"~/Library/Caches/.jdt/index"` - Linux: First use `"$XDG_CACHE_HOME/.jdt/index"`, or `"~/.cache/.jdt/index"` if it does not exist +New in 1.15.0 +* `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 3e47da993..0c9e86d05 100644 --- a/package.json +++ b/package.json @@ -273,6 +273,12 @@ "description": "Enable/disable the Maven offline mode.", "scope": "window" }, + "java.import.maven.disableTestClasspathFlag": { + "type": "boolean", + "default": false, + "description": "Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects.", + "scope": "window" + }, "java.import.gradle.enabled": { "type": "boolean", "default": true, From 3590b68d8a09ab1b55e580a0fde8a11f1aca50dc Mon Sep 17 00:00:00 2001 From: Jessica He Date: Thu, 19 Jan 2023 10:35:12 -0500 Subject: [PATCH 258/708] Add setting for try-with-resource clean up --- document/_java.learnMoreAboutCleanUps.md | 24 ++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 6af26853e..1989449cb 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -273,4 +273,28 @@ int i = switch(j) { case 2 -> 4; default -> 0; }; +``` + +### `tryWithResource` + +Simplifies the finally block to use the `try-with-resource` statement. + +For example: + +```java +final FileInputStream inputStream = new FileInputStream("out.txt"); +try { + System.out.println(inputStream.read()); +} finally { + inputStream.close(); +} +``` + +becomes: + +```java +final FileInputStream inputStream = new FileInputStream("out.txt"); +try (inputStream) { + System.out.println(inputStream.read()); +} ``` \ No newline at end of file diff --git a/package.json b/package.json index 0c9e86d05..f9dd03fc1 100644 --- a/package.json +++ b/package.json @@ -1040,7 +1040,8 @@ "addFinalModifier", "instanceofPatternMatch", "lambdaExpression", - "switchExpression" + "switchExpression", + "tryWithResource" ] }, "default": [], From 19d46d2ef66413eddab4110b57eb3b9c7cfdaad8 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 20 Jan 2023 13:09:08 +0100 Subject: [PATCH 259/708] Fix recommendation popup Signed-off-by: Fred Bricon --- src/recommendation/handlerImpl.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/recommendation/handlerImpl.ts b/src/recommendation/handlerImpl.ts index a91fcaa61..78027ba51 100644 --- a/src/recommendation/handlerImpl.ts +++ b/src/recommendation/handlerImpl.ts @@ -52,7 +52,7 @@ export class HandlerImpl implements IHandler { return; } - const actions: Array = Object.keys(UserChoice); + const actions: Array = Object.values(UserChoice); const answer = await vscode.window.showInformationMessage(message, ...actions); if (answer === UserChoice.install) { await installExtensionCmdHandler(extName, extName); From 2cdb0ce13d2991c9c68eedb7c723acbcd30601d0 Mon Sep 17 00:00:00 2001 From: Andrea Peruffo Date: Fri, 20 Jan 2023 16:13:27 +0000 Subject: [PATCH 260/708] Use commit SHA instead of branch name for third-party actions --- .github/workflows/conflictDetector.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conflictDetector.yaml b/.github/workflows/conflictDetector.yaml index cb0ef3232..54df14e05 100644 --- a/.github/workflows/conflictDetector.yaml +++ b/.github/workflows/conflictDetector.yaml @@ -6,7 +6,7 @@ jobs: triage: runs-on: ubuntu-latest steps: - - uses: mschilde/auto-label-merge-conflicts@master + - uses: mschilde/auto-label-merge-conflicts@8c6faa8a252e35ba5e15703b3d747bf726cdb95c with: CONFLICT_LABEL_NAME: "has conflicts" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file From 6765a6eb371136c1b50db7457a3e777952095a09 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 27 Jan 2023 11:27:05 -0500 Subject: [PATCH 261/708] Return the API before importing the projects This also has the side effect that extensions that depend on vscode-java can start up sooner. Fixes #2900 Signed-off-by: David Thompson --- src/extension.ts | 18 ++++++++++-------- src/standardLanguageClient.ts | 6 ++---- src/syntaxLanguageClient.ts | 18 ++++-------------- test/lightweight-mode-suite/publicApi.test.ts | 10 +++++----- .../gotoSuperImplementation.test.ts | 6 ++++-- test/standard-mode-suite/publicApi.test.ts | 11 ++++++----- 6 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 5c950e73d..e77282eb8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -243,12 +243,16 @@ export function activate(context: ExtensionContext): Promise { }; apiManager.initialize(requirements, serverMode); + resolve(apiManager.getApiInstance()); + // the promise is resolved + // no need to pass `resolve` into any code past this point, + // since `resolve` is a no-op from now on if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { - syntaxClient.initialize(requirements, clientOptions, resolve); + syntaxClient.initialize(requirements, clientOptions); } else { - syntaxClient.initialize(requirements, clientOptions, resolve, prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true)); + syntaxClient.initialize(requirements, clientOptions, prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true)); } syntaxClient.start(); serverStatusBarProvider.showLightWeightStatus(); @@ -347,7 +351,7 @@ export function activate(context: ExtensionContext): Promise { } if (choice === "Yes") { - await startStandardServer(context, requirements, clientOptions, workspacePath, resolve); + await startStandardServer(context, requirements, clientOptions, workspacePath); } }); @@ -372,10 +376,8 @@ export function activate(context: ExtensionContext): Promise { const importOnStartup = config.get(importOnStartupSection); if (importOnStartup === "disabled" || env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { - syntaxClient.resolveApi(resolve); requireStandardServer = false; } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { - syntaxClient.resolveApi(resolve); requireStandardServer = await promptUserForStandardServer(config); } else { requireStandardServer = true; @@ -383,7 +385,7 @@ export function activate(context: ExtensionContext): Promise { } if (requireStandardServer) { - await startStandardServer(context, requirements, clientOptions, workspacePath, resolve); + await startStandardServer(context, requirements, clientOptions, workspacePath); } const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; @@ -411,7 +413,7 @@ export function activate(context: ExtensionContext): Promise { }); } -async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, resolve: (value?: ExtensionAPI | PromiseLike) => void) { +async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string) { if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { return; } @@ -426,7 +428,7 @@ async function startStandardServer(context: ExtensionContext, requirements: requ apiManager.getApiInstance().serverMode = ServerMode.hybrid; apiManager.fireDidServerModeChange(ServerMode.hybrid); } - await standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter, resolve); + await standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter); standardClient.start(); serverStatusBarProvider.showStandardStatus(); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index b2a36c5eb..1e8f2e120 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -11,7 +11,7 @@ import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider"; import { Commands } from "./commands"; -import { ClientStatus, ExtensionAPI } from "./extension.api"; +import { ClientStatus } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; import { JavaInlayHintsProvider } from "./inlayHintsProvider"; @@ -56,7 +56,7 @@ export class StandardLanguageClient { private languageClient: LanguageClient; private status: ClientStatus = ClientStatus.uninitialized; - public async initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter, resolve: (value: ExtensionAPI) => void): Promise { + public async initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter): Promise { if (this.status !== ClientStatus.uninitialized) { return; } @@ -139,13 +139,11 @@ export class StandardLanguageClient { serverStatus.updateServerStatus(ServerStatusKind.ready); commands.executeCommand('setContext', 'javaLSReady', true); apiManager.updateStatus(ClientStatus.started); - resolve(apiManager.getApiInstance()); break; case 'Error': this.status = ClientStatus.error; serverStatus.updateServerStatus(ServerStatusKind.error); apiManager.updateStatus(ClientStatus.error); - resolve(apiManager.getApiInstance()); break; case 'ProjectStatus': if (report.message === "WARNING") { diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 0bc7bf477..86ab55450 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -5,10 +5,11 @@ import { DidChangeConfigurationNotification, LanguageClientOptions } from "vscod import { LanguageClient, ServerOptions, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import { ClientErrorHandler } from "./clientErrorHandler"; -import { ClientStatus, ExtensionAPI } from "./extension.api"; +import { ClientStatus } from "./extension.api"; import { logger } from "./log"; import { OutputInfoCollector } from "./outputInfoCollector"; import { StatusNotification } from "./protocol"; +import { RequirementsData } from "./requirements"; import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { getJavaConfig } from "./utils"; @@ -19,7 +20,7 @@ export class SyntaxLanguageClient { private languageClient: LanguageClient; private status: ClientStatus = ClientStatus.uninitialized; - public initialize(requirements, clientOptions: LanguageClientOptions, resolve: (value: ExtensionAPI) => void, serverOptions?: ServerOptions) { + public initialize(requirements: RequirementsData, clientOptions: LanguageClientOptions, serverOptions?: ServerOptions) { const newClientOptions: LanguageClientOptions = Object.assign({}, clientOptions, { middleware: { workspace: { @@ -75,7 +76,7 @@ export class SyntaxLanguageClient { break; } if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { - this.resolveApiOnReady(resolve); + apiManager.fireDidServerModeChange(ServerMode.lightWeight); } }); }); @@ -111,15 +112,4 @@ export class SyntaxLanguageClient { return this.languageClient; } - public resolveApi(resolve: (value: ExtensionAPI) => void): void { - apiManager.getApiInstance().serverMode = ServerMode.lightWeight; - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - this.resolveApiOnReady(resolve); - } - - private resolveApiOnReady(resolve: (value: ExtensionAPI) => void): void { - if ([ClientStatus.started, ClientStatus.error].includes(this.status)) { - resolve(apiManager.getApiInstance()); - } - } } diff --git a/test/lightweight-mode-suite/publicApi.test.ts b/test/lightweight-mode-suite/publicApi.test.ts index b1ee770b2..3a67f7bba 100644 --- a/test/lightweight-mode-suite/publicApi.test.ts +++ b/test/lightweight-mode-suite/publicApi.test.ts @@ -1,13 +1,13 @@ 'use strict'; import * as assert from 'assert'; +import * as fse from 'fs-extra'; import * as path from 'path'; -import { ExtensionAPI, extensionApiVersion, ClasspathResult } from '../../src/extension.api'; -import { Uri, DocumentSymbol, extensions, commands } from 'vscode'; +import { commands, DocumentSymbol, extensions, Uri } from 'vscode'; +import { Commands } from '../../src/commands'; +import { ClasspathResult, ExtensionAPI, extensionApiVersion } from '../../src/extension.api'; import { ServerMode } from '../../src/settings'; -import * as fse from 'fs-extra'; import { getJavaConfiguration } from '../../src/utils'; -import { Commands } from '../../src/commands'; import { constants } from '../common'; const pomPath: string = path.join(constants.projectFsPath, 'pom.xml'); @@ -31,7 +31,7 @@ suite('Public APIs - LightWeight', () => { test('status should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; - assert.equal(api.status, 'Started'); + assert.equal(api.status, 'Starting'); }); test('registerHoverCommand should work', async function () { diff --git a/test/standard-mode-suite/gotoSuperImplementation.test.ts b/test/standard-mode-suite/gotoSuperImplementation.test.ts index 109e5ace1..34a1285d1 100644 --- a/test/standard-mode-suite/gotoSuperImplementation.test.ts +++ b/test/standard-mode-suite/gotoSuperImplementation.test.ts @@ -2,8 +2,9 @@ import * as assert from 'assert'; import * as path from 'path'; -import { Uri, extensions, commands, TextDocument, workspace, window, Selection, Position } from 'vscode'; +import { commands, extensions, Position, Selection, TextDocument, Uri, window, workspace } from 'vscode'; import { Commands } from '../../src/commands'; +import { ExtensionAPI } from '../../src/extension.api'; const projectFsPath: string = path.join(__dirname, '..', '..', '..', 'test', 'resources', 'projects', 'maven', 'salut'); const fileFsPath: string = path.join(projectFsPath, 'src', 'main', 'java', 'java', 'Foo3.java'); @@ -11,7 +12,8 @@ const fileFsPath: string = path.join(projectFsPath, 'src', 'main', 'java', 'java suite('Goto Super Implementation', () => { suiteSetup(async function() { - await extensions.getExtension('redhat.java').activate(); + const api: ExtensionAPI = await extensions.getExtension('redhat.java').activate(); + await api.serverReady(); }); test('go to super implementation should work', async function () { diff --git a/test/standard-mode-suite/publicApi.test.ts b/test/standard-mode-suite/publicApi.test.ts index e349a81dc..2141aa486 100644 --- a/test/standard-mode-suite/publicApi.test.ts +++ b/test/standard-mode-suite/publicApi.test.ts @@ -1,15 +1,15 @@ 'use strict'; import * as assert from 'assert'; +import * as fse from 'fs-extra'; import * as path from 'path'; -import { ExtensionAPI, extensionApiVersion, ClasspathResult } from '../../src/extension.api'; -import { Uri, DocumentSymbol, extensions, commands } from 'vscode'; +import { env } from 'process'; +import { commands, DocumentSymbol, extensions, Uri } from 'vscode'; +import { Commands } from '../../src/commands'; +import { ClasspathResult, ExtensionAPI, extensionApiVersion } from '../../src/extension.api'; import { ServerMode } from '../../src/settings'; -import * as fse from 'fs-extra'; import { getJavaConfiguration } from '../../src/utils'; -import { Commands } from '../../src/commands'; import { constants } from '../common'; -import { env } from 'process'; const pomPath: string = path.join(constants.projectFsPath, 'pom.xml'); const gradleTestFolder: string = path.join(constants.projectFsPath, 'testGradle'); @@ -34,6 +34,7 @@ suite('Public APIs - Standard', () => { test('status should be correct', async function () { const api: ExtensionAPI = extensions.getExtension('redhat.java').exports; + await api.serverReady(); assert.equal(api.status, 'Started'); }); From 9637799d63778954f403e5a35e619dbd0fbe98d7 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 2 Feb 2023 10:17:48 +0800 Subject: [PATCH 262/708] Support "extract interface" refactoring (#2836) * Support extract interface refactoring Signed-off-by: Shi Chen --- README.md | 1 + package.json | 5 + src/extension.ts | 1 + src/protocol.ts | 17 +++ src/refactorAction.ts | 14 ++- src/refactoring/extractInterface.ts | 174 ++++++++++++++++++++++++++++ 6 files changed, 211 insertions(+), 1 deletion(-) create mode 100644 src/refactoring/extractInterface.ts diff --git a/README.md b/README.md index 6bc1bad49..866e395a8 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,7 @@ The following settings are supported: - Windows: First use `"$APPDATA\\.jdt\\index"`, or `"~\\.jdt\\index"` if it does not exist - macOS: `"~/Library/Caches/.jdt/index"` - Linux: First use `"$XDG_CACHE_HOME/.jdt/index"`, or `"~/.cache/.jdt/index"` if it does not exist +* `java.refactoring.extract.interface.replace`: Specify whether to replace all the occurrences of the subtype with the new extracted interface. Defaults to `true`. New in 1.15.0 * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. diff --git a/package.json b/package.json index f9dd03fc1..30c75b89c 100644 --- a/package.json +++ b/package.json @@ -1063,6 +1063,11 @@ "markdownDescription": "Specifies a common index location for all workspaces. See default values as follows:\n \nWindows: First use `\"$APPDATA\\\\.jdt\\\\index\"`, or `\"~\\\\.jdt\\\\index\"` if it does not exist\n \nmacOS: `\"~/Library/Caches/.jdt/index\"`\n \nLinux: First use `\"$XDG_CACHE_HOME/.jdt/index\"`, or `\"~/.cache/.jdt/index\"` if it does not exist", "default": "", "scope": "window" + }, + "java.refactoring.extract.interface.replace": { + "type": "boolean", + "markdownDescription": "Specify whether to replace all the occurrences of the subtype with the new extracted interface.", + "default": true } } }, diff --git a/src/extension.ts b/src/extension.ts index e77282eb8..1dfeac1f0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -169,6 +169,7 @@ export function activate(context: ExtensionContext): Promise { actionableRuntimeNotificationSupport: true, shouldLanguageServerExitOnShutdown: true, onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", + extractInterfaceSupport: true, }, triggerFiles, }, diff --git a/src/protocol.ts b/src/protocol.ts index 04e63bbfd..cabf992f3 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -447,3 +447,20 @@ export interface UpgradeGradleWrapperInfo { message: string; recommendedGradleVersion: string; } + +export interface Member { + name: string; + typeName: string; + parameters: string[]; + handleIdentifier: string; +} + +export interface CheckExtractInterfaceStatusResponse { + members: Member[]; + subTypeName: string; + destinationResponse: MoveDestinationsResponse; +} + +export namespace CheckExtractInterfaceStatusRequest { + export const type = new RequestType('java/checkExtractInterfaceStatus'); +} diff --git a/src/refactorAction.ts b/src/refactorAction.ts index 69c4f47c2..139aa9f32 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -3,10 +3,11 @@ import { existsSync } from 'fs'; import * as path from 'path'; import { commands, ExtensionContext, Position, QuickPickItem, TextDocument, Uri, window, workspace } from 'vscode'; -import { FormattingOptions, WorkspaceEdit, CreateFile, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; +import { FormattingOptions, WorkspaceEdit, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest } from './protocol'; +import { getExtractInterfaceArguments, revealExtractedInterface } from './refactoring/extractInterface'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { registerApplyRefactorCommand(languageClient, context); @@ -38,6 +39,7 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E || command === 'extractConstant' || command === 'extractMethod' || command === 'extractField' + || command === 'extractInterface' || command === 'assignField' || command === 'convertVariableToField' || command === 'invertVariable' @@ -101,6 +103,12 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E } commandArguments.push(expression); } + } else if (command === 'extractInterface') { + const args = await getExtractInterfaceArguments(languageClient, params); + if (args.length === 0) { + return; + } + commandArguments.push(...args); } const result: RefactorWorkspaceEdit = await languageClient.sendRequest(GetRefactorEditRequest.type, { @@ -111,6 +119,10 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E }); await applyRefactorEdit(languageClient, result); + + if (command === 'extractInterface') { + await revealExtractedInterface(result); + } } else if (command === 'moveFile') { if (!commandInfo || !commandInfo.uri) { return; diff --git a/src/refactoring/extractInterface.ts b/src/refactoring/extractInterface.ts new file mode 100644 index 000000000..29302dcc7 --- /dev/null +++ b/src/refactoring/extractInterface.ts @@ -0,0 +1,174 @@ +'use strict'; + +import * as vscode from "vscode"; +import { LanguageClient } from "vscode-languageclient/node"; +import { CheckExtractInterfaceStatusRequest, CheckExtractInterfaceStatusResponse, RefactorWorkspaceEdit } from "../protocol"; + +enum Step { + selectMember, + specifyInterfaceName, + selectPackage, +} + +export async function getExtractInterfaceArguments(languageClient: LanguageClient, params: any): Promise { + if (!params || !params.range) { + return []; + } + const extractInterfaceResponse: CheckExtractInterfaceStatusResponse = await languageClient.sendRequest(CheckExtractInterfaceStatusRequest.type, params); + if (!extractInterfaceResponse) { + return []; + } + let step: Step = Step.selectMember; + // step results, initialized as undefined + let resultHandleIdentifiers: any[] | undefined; + let interfaceName: string | undefined; + let selectPackageNodeItem: SelectPackageQuickPickItem | undefined; + while (step !== undefined) { + switch (step) { + case Step.selectMember: + const items = extractInterfaceResponse.members.map((item) => { + return { + label: item.parameters ? `${item.name}(${item.parameters.join(", ")})` : item.name, + description: item.typeName, + handleIdentifier: item.handleIdentifier, + picked: resultHandleIdentifiers === undefined ? false : resultHandleIdentifiers.includes(item.handleIdentifier), + }; + }); + const members = await vscode.window.showQuickPick(items, { + title: "Extract Interface (1/3): Select members", + placeHolder: "Please select members to declare in the interface: ", + matchOnDescription: true, + ignoreFocusOut: true, + canPickMany: true, + }); + if (!members) { + return []; + } + resultHandleIdentifiers = members.map((item) => item.handleIdentifier); + if (!resultHandleIdentifiers) { + return []; + } + step = Step.specifyInterfaceName; + break; + case Step.specifyInterfaceName: + const specifyInterfaceNameDisposables = []; + const specifyInterfaceNamePromise = new Promise((resolve, _reject) => { + const inputBox = vscode.window.createInputBox(); + inputBox.title = "Extract Interface (2/3): Specify interface name"; + inputBox.placeholder = "Please specify the new interface name: "; + inputBox.ignoreFocusOut = true; + inputBox.value = interfaceName === undefined ? extractInterfaceResponse.subTypeName : interfaceName; + inputBox.buttons = [(vscode.QuickInputButtons.Back)]; + specifyInterfaceNameDisposables.push( + inputBox, + inputBox.onDidTriggerButton((button) => { + if (button === vscode.QuickInputButtons.Back) { + step = Step.selectMember; + resolve(false); + } + }), + inputBox.onDidAccept(() => { + resolve(inputBox.value); + }), + inputBox.onDidHide(() => { + resolve(undefined); + }) + ); + inputBox.show(); + }); + try { + const result = await specifyInterfaceNamePromise; + if (result === false) { + // go back + step = Step.selectMember; + } else if (result === undefined) { + // cancelled + return []; + } else { + interfaceName = result as string; + step = Step.selectPackage; + } + } finally { + specifyInterfaceNameDisposables.forEach(d => d.dispose()); + } + break; + case Step.selectPackage: + const selectPackageDisposables = []; + const packageNodeItems = extractInterfaceResponse.destinationResponse.destinations.sort((node1, node2) => { + return node1.isParentOfSelectedFile ? -1 : 0; + }).map((packageNode) => { + const packageUri: vscode.Uri = packageNode.uri ? vscode.Uri.parse(packageNode.uri) : null; + const displayPath: string = packageUri ? vscode.workspace.asRelativePath(packageUri, true) : packageNode.path; + return { + label: (packageNode.isParentOfSelectedFile ? '* ' : '') + packageNode.displayName, + description: displayPath, + packageNode, + }; + }); + const selectPackagePromise = new Promise((resolve, _reject) => { + const quickPick = vscode.window.createQuickPick(); + quickPick.items = packageNodeItems; + quickPick.title = "Extract Interface (3/3): Specify package"; + quickPick.placeholder = "Please select the target package for extracted interface."; + quickPick.ignoreFocusOut = true; + quickPick.buttons = [(vscode.QuickInputButtons.Back)]; + selectPackageDisposables.push( + quickPick, + quickPick.onDidTriggerButton((button) => { + if (button === vscode.QuickInputButtons.Back) { + resolve(false); + step = Step.specifyInterfaceName; + } + }), + quickPick.onDidAccept(() => { + if (quickPick.selectedItems.length > 0) { + resolve(quickPick.selectedItems[0] as SelectPackageQuickPickItem); + } + }), + quickPick.onDidHide(() => { + resolve(undefined); + }), + ); + quickPick.show(); + }); + try { + const result = await selectPackagePromise; + if (result === false) { + // go back + step = Step.specifyInterfaceName; + } else if (result === undefined) { + // cancelled + return []; + } else { + selectPackageNodeItem = result as SelectPackageQuickPickItem; + step = undefined; + } + } finally { + selectPackageDisposables.forEach(d => d.dispose()); + } + break; + default: + return []; + } + } + return [resultHandleIdentifiers, interfaceName, selectPackageNodeItem.packageNode]; +} + +export async function revealExtractedInterface(refactorEdit: RefactorWorkspaceEdit) { + if (refactorEdit?.edit?.documentChanges) { + for (const change of refactorEdit.edit.documentChanges) { + if ("kind" in change && change.kind === "create") { + for (const document of vscode.workspace.textDocuments) { + if (document.uri.toString() === vscode.Uri.parse(change.uri).toString()) { + await vscode.window.showTextDocument(document); + return; + } + } + } + } + } +} + +interface SelectPackageQuickPickItem extends vscode.QuickPickItem { + packageNode: any; +} From 8476bef8501e67716c8e129dec1410c19d700951 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 27 Jan 2023 20:15:48 +0100 Subject: [PATCH 263/708] Add java.configuration.maven.defaultMojoExecutionAction Signed-off-by: Snjezana Peco --- README.md | 1 + package.json | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/README.md b/README.md index 866e395a8..aab417177 100644 --- a/README.md +++ b/README.md @@ -225,6 +225,7 @@ The following settings are supported: New in 1.15.0 * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. +* `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 30c75b89c..b252135a2 100644 --- a/package.json +++ b/package.json @@ -404,6 +404,18 @@ "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", "scope": "window" }, + "java.configuration.maven.defaultMojoExecutionAction": { + "type": "string", + "enum": [ + "ignore", + "warn", + "error", + "execute" + ], + "default": "ignore", + "description": "Specifies default mojo execution action when no associated metadata can be detected.", + "scope": "window" + }, "java.configuration.workspaceCacheLimit": { "type": [ "null", From 5c0123f7cfd88086e187112c0a616ac4e90767c6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 2 Feb 2023 14:51:56 -0500 Subject: [PATCH 264/708] Clarify the README quick start instructions. - Be more clear about when the extension is expected to work without any setup, and when setting a JDK is required - Make it more clear that configuring a project JDK is optional Signed-off-by: Roland Grunberg --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index aab417177..480b938ac 100644 --- a/README.md +++ b/README.md @@ -14,9 +14,10 @@ Provides Java ™ language support via Quick Start ============ 1. Install the Extension -2. If you do not have a _Java_ Development Kit correctly [set](#setting-the-jdk) - * Download and install a Java Development Kit for your project (Java 1.5 or above is supported) -3. Extension is activated when you first access a Java file +2. On the following platforms, the extension should activate without any setup : `win32-x64`, `darwin-x64`, `darwin-arm64`, `linux-x64`, `linux-arm64`.\ +If on another platform, or using the "universal" version, you can [set](#setting-the-jdk) a _Java_ Development Kit. It must be Java 17 or above. +3. Optionally, download and install a Java Development Kit for your project (Java 1.5 or above is supported). See [Project JDKs](#project-jdks) for more details +4. Extension is activated when you first access a Java file * Recognizes projects with *Maven* or *Gradle* build files in the directory hierarchy. Features @@ -59,7 +60,7 @@ Now that Java extension will publish platform specific versions, it will embed a The following part is only kept for the universal version without embedded JRE. ->The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects.\ +>The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects. Java 17 is the minimum required version.\ \ The path to the Java Development Kit can be specified by the `java.jdt.ls.java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. >- the `JDK_HOME` environment variable From d864ead32ce9f13f87a363d48c941788aa7aaef2 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 9 Feb 2023 11:50:03 +0100 Subject: [PATCH 265/708] Add Github action to detect potential duplicate issues Signed-off-by: Fred Bricon --- .../workflows/duplicate-issues-detector.yaml | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 .github/workflows/duplicate-issues-detector.yaml diff --git a/.github/workflows/duplicate-issues-detector.yaml b/.github/workflows/duplicate-issues-detector.yaml new file mode 100644 index 000000000..b6c8e888d --- /dev/null +++ b/.github/workflows/duplicate-issues-detector.yaml @@ -0,0 +1,34 @@ +name: Potential Duplicate Issues +on: + issues: + types: [opened, edited] #edited means the issue title changed +jobs: + run: + runs-on: ubuntu-latest + steps: + - uses: wow-actions/potential-duplicates@4d4ea0352e0383859279938e255179dd1dbb67b5 #v1.1.0 + with: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # Issue title filter work with anymatch https://www.npmjs.com/package/anymatch. + # Any matched issue will stop detection immediately. + # You can specify multi filters in each line. + filter: '' + # Exclude keywords in title before detecting. + exclude: 'regression' + # Label to set, when potential duplicates are detected. + label: potential-duplicate + # Get issues with state to compare. Supported state: 'all', 'closed', 'open'. + state: all + # If similarity is higher than this threshold([0,1]), issue will be marked as duplicate. + threshold: 0.6 + # Reactions to be add to comment when potential duplicates are detected. + # Available reactions: "-1", "+1", "confused", "laugh", "heart", "hooray", "rocket", "eyes" + reactions: 'confused' + # Comment to post when potential duplicates are detected. + comment: | + We have found issues that are potential duplicates: {{#issues}} + - #{{ number }} ({{ accuracy }}%) + {{/issues}} + + If any of the issues listed above are a duplicate, please consider closing this issue & upvoting/commenting the original one. + Alternatively, if neither of the listed issues addresses your feature/bug, keep this issue open. \ No newline at end of file From a5a061fde0003b75629f7573fc9a097ea570d05e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 8 Feb 2023 10:58:25 -0500 Subject: [PATCH 266/708] Register the paste handler when LS reports ServiceReady Fixes #2924 Signed-off-by: David Thompson --- src/standardLanguageClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 1e8f2e120..4da904110 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -123,6 +123,7 @@ export class StandardLanguageClient { }); } + registerPasteEventHandler(context, this.languageClient); activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); @@ -595,7 +596,6 @@ export class StandardLanguageClient { context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); } - registerPasteEventHandler(context, this.languageClient); }); } From 9da3f15317e35ab84202a407eff2b6e7475df41b Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 10 Feb 2023 15:05:23 +0800 Subject: [PATCH 267/708] Support quick fix for Gradle JPMS projects (#2773) Signed-off-by: Shi Chen --- src/commands.ts | 2 +- src/gradle/gradleCodeActionProvider.ts | 6 ------ src/standardLanguageClient.ts | 6 +++++- src/standardLanguageClientUtils.ts | 9 ++++----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 370692a11..371448fee 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -291,7 +291,7 @@ export namespace Commands { export const GET_WORKSPACE_PATH = '_java.workspace.path'; - export const UPGRADE_GRADLE_WRAPPER = '_java.gradle.upgradeWrapper'; + export const UPGRADE_GRADLE_WRAPPER = 'java.project.upgradeGradle'; export const LOMBOK_CONFIGURE = "java.lombokConfigure"; diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts index 8c8ef08e3..f3cb6b0f7 100644 --- a/src/gradle/gradleCodeActionProvider.ts +++ b/src/gradle/gradleCodeActionProvider.ts @@ -13,12 +13,6 @@ const GRADLE_INVALID_TYPE_CODE_ID = GRADLE_PROBLEM_ID + 1; export class GradleCodeActionProvider implements CodeActionProvider { - constructor(context: ExtensionContext) { - context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string) => { - upgradeGradle(projectUri); - })); - } - public provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(CodeAction | Command)[]> { if (context?.diagnostics?.length && context.diagnostics[0].source === "Java") { return this.provideGradleCodeActions(document, context.diagnostics); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 4da904110..70828f008 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -581,6 +581,10 @@ export class StandardLanguageClient { } })); + context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string, version?: string) => { + upgradeGradle(projectUri, version); + })); + languages.registerCodeActionsProvider({ language: "xml", scheme: "file", @@ -590,7 +594,7 @@ export class StandardLanguageClient { languages.registerCodeActionsProvider({ scheme: "file", pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" - }, new GradleCodeActionProvider(context), gradleCodeActionMetadata); + }, new GradleCodeActionProvider(), gradleCodeActionMetadata); if (languages.registerInlayHintsProvider) { context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts index 765e3f146..cfe409078 100644 --- a/src/standardLanguageClientUtils.ts +++ b/src/standardLanguageClientUtils.ts @@ -133,15 +133,14 @@ export async function upgradeGradle(projectUri: string, version?: string): Promi title: "Upgrading Gradle wrapper...", cancellable: true, }, (_progress, token) => { - return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, "java.project.upgradeGradle", projectUri, version, token); + return commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.UPGRADE_GRADLE_WRAPPER, projectUri, version, token); }); if (result) { - const propertiesFile = path.join(Uri.parse(projectUri).fsPath, "gradle", "wrapper", "gradle-wrapper.properties"); - if (fse.pathExists(propertiesFile)) { - const content = await fse.readFile(propertiesFile); + if (await fse.pathExists(result)) { + const content = await fse.readFile(result); const offset = content.toString().indexOf("distributionUrl"); if (offset >= 0) { - const document = await workspace.openTextDocument(propertiesFile); + const document = await workspace.openTextDocument(result); const position = document.positionAt(offset); const distributionUrlRange = document.getWordRangeAtPosition(position); window.showTextDocument(document, {selection: new Range(distributionUrlRange.start, new Position(distributionUrlRange.start.line + 1, 0))}); From 31b0a60974d1c8f8b35790ee34781fb4510af46a Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 10 Feb 2023 13:33:29 +0800 Subject: [PATCH 268/708] fix type hierarchy regression Signed-off-by: Shi Chen --- src/typeHierarchy/model.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index d276801f2..92e8e08df 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -79,7 +79,7 @@ export class TypeHierarchyModel implements SymbolItemNavigation Date: Wed, 15 Feb 2023 17:24:44 -0500 Subject: [PATCH 269/708] Changelog for 1.15.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b27e1ebc7..70afd9d1b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,34 @@ # Change Log +## 1.15.0 (February 16th, 2023) + * performance - Skip generated methods when calculating document symbols. See [JLS#2446](https://github.com/eclipse/eclipse.jdt.ls/issues/2446). + * performance - Make the debounce adaptive for the publish diagnostic job. See [JLS#2443](https://github.com/eclipse/eclipse.jdt.ls/pull/2443). + * performance - Only perform context sensitive import rewrite when resolving completion items. See [JLS#2453](https://github.com/eclipse/eclipse.jdt.ls/pull/2453). + * performance - Extension activation should not depend on language server being started. See [#2900](https://github.com/redhat-developer/vscode-java/issues/2900). + * performance - Copy/paste within the same file should not trigger the paste handler for missing imports. See [JLS#2441](https://github.com/eclipse/eclipse.jdt.ls/issues/2441). + * enhancement - Support "extract interface" refactoring. See [#761](https://github.com/redhat-developer/vscode-java/issues/761). + * enhancement - Add "Convert String concatenation to Text Block" quick assist. See [JLS#2456](https://github.com/eclipse/eclipse.jdt.ls/pull/2456). + * enhancement - Add clean up for using `try-with-resource`. See [#2891](https://github.com/redhat-developer/vscode-java/pull/2891). + * enhancement - Enable formatting support in syntax server. See [#2926](https://github.com/redhat-developer/vscode-java/issues/2926). + * enhancement - Add option to configure behaviour when mojo execution metadata not available. See [#2889](https://github.com/redhat-developer/vscode-java/issues/2889). + * enhancement - Add option to permit usage of test resources of a Maven project as dependencies within the compile scope of other projects. See [#2569](https://github.com/redhat-developer/vscode-java/issues/2569). + * bug fix - Change default generated method stub to throw exception. See [JLS#2366](https://github.com/eclipse/eclipse.jdt.ls/pull/2366). + * bug fix - Prevent the paste handler for missing imports from generating overlapping text edits. See [JLS#2442](https://github.com/eclipse/eclipse.jdt.ls/issues/2442). + * bug fix - Reference search doesn't work for fields in JDK classes. See [JLS#2405](https://github.com/eclipse/eclipse.jdt.ls/issues/2405). + * bug fix - Paste event handling blocks pasting while project loading. See [#2924](https://github.com/redhat-developer/vscode-java/issues/2924). + * bug fix - Completion results should include filtered (excluded) types if they are also present in the import declarations. See [JLS#2467](https://github.com/eclipse/eclipse.jdt.ls/pull/2467). + * bug fix - Fix type hierarchy regression since VS Code 1.75.1. See [#2930](https://github.com/redhat-developer/vscode-java/pull/2930). + * bug fix - Re-publish diagnostics for null analysis configuration change when auto-build is disabled. See [JLS#2447](https://github.com/eclipse/eclipse.jdt.ls/pull/2447). + * bug fix - Dependency Analytics extension popup shoud respect user choice. See [#2892](https://github.com/redhat-developer/vscode-java/issues/2892). + * bug fix - Only do full build for a configuration change when auto-build is enabled. See [JLS#2437](https://github.com/eclipse/eclipse.jdt.ls/pull/2437). + * bug fix - The command to upgrade gradle should check for cancellation prior to updating metadata files. See [JLS#2444](https://github.com/eclipse/eclipse.jdt.ls/pull/2444). + * bug fix - Fix incorrect ordering of completion items that use a decorator. See [#2917](https://github.com/redhat-developer/vscode-java/issues/2917). + * bug fix - Reduce the amount of logging from `org.apache.http` bundles. See [JLS#2420](https://github.com/eclipse/eclipse.jdt.ls/pull/2420). + * build - Do not require `org.eclipse.xtend.lib`. See [JLS#2416](https://github.com/eclipse/eclipse.jdt.ls/pull/2416). + * build - Add Github action to detect potential duplicate issues. See [#2927](https://github.com/redhat-developer/vscode-java/pull/2927). + * build - Use commit SHA-1 instead of branch name for third-party actions. See [#2895](https://github.com/redhat-developer/vscode-java/pull/2895). + * documentation - Clarify the `README` quick start instructions. See [#2915](https://github.com/redhat-developer/vscode-java/pull/2915). + ## 1.14.0 (January 17th, 2023) * enhancement - Support for shared indexes among workspaces. See [#2723](https://github.com/redhat-developer/vscode-java/issues/2723). * enhancement - Support pasting content into a string literal. See [#1249](https://github.com/redhat-developer/vscode-java/issues/1249). From ad61cca6a3b1bc71db5d227446d8ff973fa2055d Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 16 Feb 2023 17:36:35 +0800 Subject: [PATCH 270/708] Avoid inserting duplicate contents for file creation refactoring Signed-off-by: Jinbo Wang --- src/fileEventHandler.ts | 122 +++++++++++++++++++++++----------------- 1 file changed, 70 insertions(+), 52 deletions(-) diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 0128bdf9c..2a08664d2 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -56,67 +56,85 @@ async function handleNewJavaFiles(e: FileCreateEvent) { } } - const formatNumber = (num => num > 9 ? String(num) : `0${num}`); - for (let i = 0; i < emptyFiles.length; i++) { - const typeName: string = resolveTypeName(textDocuments[i].fileName); - const isPackageInfo = typeName === 'package-info'; - const isModuleInfo = typeName === 'module-info'; - const date = new Date(); - const context: any = { - fileName: path.basename(textDocuments[i].fileName), - packageName: "", - typeName: typeName, - user: userInfo().username, - date: date.toLocaleDateString(undefined, {month: "short", day: "2-digit", year: "numeric"}), - time: date.toLocaleTimeString(), - year: date.getFullYear(), - month: formatNumber(date.getMonth() + 1), - shortmonth: date.toLocaleDateString(undefined, {month: "short"}), - day: formatNumber(date.getDate()), - hour: formatNumber(date.getHours()), - minute: formatNumber(date.getMinutes()), - }; - - if (!isModuleInfo) { - context.packageName = resolvePackageName(sourcePaths, emptyFiles[i].fsPath); - } - - const snippets: string[] = []; - const fileHeader = getJavaConfiguration().get("templates.fileHeader"); - if (fileHeader && fileHeader.length) { - for (const template of fileHeader) { - snippets.push(stringInterpolate(template, context)); + // See https://github.com/redhat-developer/vscode-java/issues/2939 + // The client side listener should avoid inserting duplicated conents + // when the file creation event is triggered from a WorkspaceEdit. + // Given that the VS Code API doesn't provide a way to distinguish + // the event source, a workaround is to wait 100ms and let WorkspaceEdit + // to take effect first, then check if the workingcopy is filled with content. + const timeout = setTimeout(async() => { + const formatNumber = (num => num > 9 ? String(num) : `0${num}`); + for (let i = 0; i < emptyFiles.length; i++) { + if (textDocuments[i].getText()) { + continue; } - } - if (!isModuleInfo) { - if (context.packageName) { - snippets.push(`package ${context.packageName};`); - snippets.push(""); + const typeName: string = resolveTypeName(textDocuments[i].fileName); + const isPackageInfo = typeName === 'package-info'; + const isModuleInfo = typeName === 'module-info'; + const date = new Date(); + const context: any = { + fileName: path.basename(textDocuments[i].fileName), + packageName: "", + typeName: typeName, + user: userInfo().username, + date: date.toLocaleDateString(undefined, {month: "short", day: "2-digit", year: "numeric"}), + time: date.toLocaleTimeString(), + year: date.getFullYear(), + month: formatNumber(date.getMonth() + 1), + shortmonth: date.toLocaleDateString(undefined, {month: "short"}), + day: formatNumber(date.getDate()), + hour: formatNumber(date.getHours()), + minute: formatNumber(date.getMinutes()), + }; + + if (!isModuleInfo) { + context.packageName = resolvePackageName(sourcePaths, emptyFiles[i].fsPath); } - } - if (!isPackageInfo) { - const typeComment = getJavaConfiguration().get("templates.typeComment"); - if (typeComment && typeComment.length) { - for (const template of typeComment) { + + const snippets: string[] = []; + const fileHeader = getJavaConfiguration().get("templates.fileHeader"); + if (fileHeader && fileHeader.length) { + for (const template of fileHeader) { snippets.push(stringInterpolate(template, context)); } } - if (isModuleInfo) { - snippets.push(`module \${1:name} {`); - } else if (!serverReady || await isVersionLessThan(emptyFiles[i].toString(), 14)) { - snippets.push(`public \${1|class,interface,enum,abstract class,@interface|} ${typeName} {`); - } else { - snippets.push(`public \${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|} {`); + if (!isModuleInfo) { + if (context.packageName) { + snippets.push(`package ${context.packageName};`); + snippets.push(""); + } } - snippets.push("\t${0}"); - snippets.push("}"); - snippets.push(""); + if (!isPackageInfo) { + const typeComment = getJavaConfiguration().get("templates.typeComment"); + if (typeComment && typeComment.length) { + for (const template of typeComment) { + snippets.push(stringInterpolate(template, context)); + } + } + + if (isModuleInfo) { + snippets.push(`module \${1:name} {`); + } else if (!serverReady || await isVersionLessThan(emptyFiles[i].toString(), 14)) { + snippets.push(`public \${1|class,interface,enum,abstract class,@interface|} ${typeName} {`); + } else { + snippets.push(`public \${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|} {`); + } + snippets.push("\t${0}"); + snippets.push("}"); + snippets.push(""); + } + const textEditor = await window.showTextDocument(textDocuments[i]); + if (textDocuments[i].getText()) { + continue; + } + + textEditor.insertSnippet(new SnippetString(snippets.join("\n"))); } - const textEditor = await window.showTextDocument(textDocuments[i]); - textEditor.insertSnippet(new SnippetString(snippets.join("\n"))); - } + + clearTimeout(timeout); + }, 100); } function getWillRenameHandler(client: LanguageClient) { From a0754eb6e1d8e0753845c35f2fe0e42420349346 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 16 Feb 2023 12:46:35 -0500 Subject: [PATCH 271/708] Changelog for 1.15.0 (for detected regressions) - Push release date to Feb 20 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 70afd9d1b..86c777358 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.15.0 (February 16th, 2023) +## 1.15.0 (February 20th, 2023) * performance - Skip generated methods when calculating document symbols. See [JLS#2446](https://github.com/eclipse/eclipse.jdt.ls/issues/2446). * performance - Make the debounce adaptive for the publish diagnostic job. See [JLS#2443](https://github.com/eclipse/eclipse.jdt.ls/pull/2443). * performance - Only perform context sensitive import rewrite when resolving completion items. See [JLS#2453](https://github.com/eclipse/eclipse.jdt.ls/pull/2453). @@ -16,6 +16,7 @@ * bug fix - Prevent the paste handler for missing imports from generating overlapping text edits. See [JLS#2442](https://github.com/eclipse/eclipse.jdt.ls/issues/2442). * bug fix - Reference search doesn't work for fields in JDK classes. See [JLS#2405](https://github.com/eclipse/eclipse.jdt.ls/issues/2405). * bug fix - Paste event handling blocks pasting while project loading. See [#2924](https://github.com/redhat-developer/vscode-java/issues/2924). + * bug fix - Avoid generating boilerplate code repeatedly in new Java file. See [#2939](https://github.com/redhat-developer/vscode-java/issues/2939). * bug fix - Completion results should include filtered (excluded) types if they are also present in the import declarations. See [JLS#2467](https://github.com/eclipse/eclipse.jdt.ls/pull/2467). * bug fix - Fix type hierarchy regression since VS Code 1.75.1. See [#2930](https://github.com/redhat-developer/vscode-java/pull/2930). * bug fix - Re-publish diagnostics for null analysis configuration change when auto-build is disabled. See [JLS#2447](https://github.com/eclipse/eclipse.jdt.ls/pull/2447). From 9c65188de5cd490134ae665004eb07a09f646148 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 20 Feb 2023 12:17:58 -0500 Subject: [PATCH 272/708] Upversion to 1.16.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 480b938ac..61614e16c 100644 --- a/README.md +++ b/README.md @@ -223,8 +223,6 @@ The following settings are supported: - macOS: `"~/Library/Caches/.jdt/index"` - Linux: First use `"$XDG_CACHE_HOME/.jdt/index"`, or `"~/.cache/.jdt/index"` if it does not exist * `java.refactoring.extract.interface.replace`: Specify whether to replace all the occurrences of the subtype with the new extracted interface. Defaults to `true`. - -New in 1.15.0 * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. diff --git a/package-lock.json b/package-lock.json index 0c199d564..cc2eba565 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.15.0", + "version": "1.16.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index b252135a2..5b005cab5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.15.0", + "version": "1.16.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 8f102188b185c90748a431e44a2fd275269e3de8 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 22 Feb 2023 15:34:02 +0800 Subject: [PATCH 273/708] Update engine version to 1.74.0 (#2951) Signed-off-by: Shi Chen --- package-lock.json | 42 +++++++++++++++++++++--------------------- package.json | 4 ++-- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/package-lock.json b/package-lock.json index cc2eba565..d40626921 100644 --- a/package-lock.json +++ b/package-lock.json @@ -301,7 +301,7 @@ }, "@types/sinon": { "version": "10.0.13", - "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, "requires": { @@ -315,9 +315,9 @@ "dev": true }, "@types/vscode": { - "version": "1.73.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.73.1.tgz", - "integrity": "sha512-eArfOrAoZVV+Ao9zQOCaFNaeXj4kTCD+bGS2gyNgIFZH9xVMuLMlRrEkhb22NyxycFWKV1UyTh03vhaVHmqVMg==", + "version": "1.75.1", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.75.1.tgz", + "integrity": "sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA==", "dev": true }, "@types/winreg": { @@ -871,7 +871,7 @@ }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, @@ -1453,7 +1453,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { @@ -2140,7 +2140,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true } @@ -2325,7 +2325,7 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, @@ -3685,7 +3685,7 @@ "dependencies": { "request": { "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "dev": true, "requires": { @@ -3713,7 +3713,7 @@ }, "request-progress": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, "requires": { @@ -3730,7 +3730,7 @@ }, "gulp-util": { "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", "dev": true, "requires": { @@ -3756,19 +3756,19 @@ "dependencies": { "clone": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-stats": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", "dev": true }, "lodash.template": { "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, "requires": { @@ -3785,19 +3785,19 @@ }, "object-assign": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true }, "replace-ext": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true }, "vinyl": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, "requires": { @@ -3844,7 +3844,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { @@ -4869,7 +4869,7 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, @@ -6580,7 +6580,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true }, @@ -7637,7 +7637,7 @@ }, "yargs-parser": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { diff --git a/package.json b/package.json index 5b005cab5..43a56009a 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "virtualWorkspaces": false }, "engines": { - "vscode": "^1.65.0" + "vscode": "^1.74.0" }, "repository": { "type": "git", @@ -1400,7 +1400,7 @@ "@types/node": "^8.10.51", "@types/semver": "^7.3.8", "@types/sinon": "^10.0.12", - "@types/vscode": "^1.65.0", + "@types/vscode": "^1.74.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "@vscode/test-electron": "^2.1.5", From 6fd9f605cfb258c1cfddf8eda1e1cea717112f86 Mon Sep 17 00:00:00 2001 From: Priyang Bhavsar Date: Wed, 15 Feb 2023 13:35:44 +0530 Subject: [PATCH 274/708] server task sorting issue fix Signed-off-by: Priyang Bhavsar --- src/serverTasks.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/serverTasks.ts b/src/serverTasks.ts index 251ac450c..5d02c6473 100644 --- a/src/serverTasks.ts +++ b/src/serverTasks.ts @@ -34,10 +34,7 @@ function organizeTasks() { } // make sure in-progress items are always at the end - newArray.sort((a, b) => { - const ai = a.complete ? 0 : 1, bi = a.complete ? 0 : 1; - return ai - bi; - }); + newArray.sort((a, b) => Number(b.complete) - Number(a.complete)); tasks = newArray; } From 6572351adc1708b175fd76a19e21bafc703ce8b3 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 23 Feb 2023 12:00:14 +0800 Subject: [PATCH 275/708] Update language-client to 8.1.0 (#2377) Signed-off-by: Shi Chen --- package-lock.json | 74 ++- package.json | 6 +- src/clientErrorHandler.ts | 26 +- src/extension.ts | 34 +- src/fileEventHandler.ts | 2 +- src/pasteEventHandler.ts | 2 +- src/refactorAction.ts | 2 +- src/sourceAction.ts | 2 +- src/standardLanguageClient.ts | 853 ++++++++++++++--------------- src/standardLanguageClientUtils.ts | 4 +- src/syntaxLanguageClient.ts | 58 +- 11 files changed, 547 insertions(+), 516 deletions(-) diff --git a/package-lock.json b/package-lock.json index d40626921..173ea5fbf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -288,9 +288,9 @@ "dev": true }, "@types/node": { - "version": "8.10.59", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.59.tgz", - "integrity": "sha512-8RkBivJrDCyPpBXhVZcjh7cQxVBSmRk9QM7hOketZzp6Tg79c0N8kkpAIito9bnJ3HCVCHVYz+KHTEbfQNfeVQ==", + "version": "16.18.12", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", + "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", "dev": true }, "@types/semver": { @@ -6973,9 +6973,9 @@ "dev": true }, "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", + "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, "unbzip2-stream": { @@ -7254,20 +7254,41 @@ "vinyl": "^2.0.0" } }, + "vscode-jsonrpc": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==" + }, "vscode-languageclient": { - "version": "7.1.0-next.5", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-7.1.0-next.5.tgz", - "integrity": "sha512-TpzpAhpdCNJHaLzptFRs54xsU6xTmaiVPCse0W0rRB5jJBPjOBKilrFPMMm/sJA0y8Yxa9sOvZaNu6WPg3dYAw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", + "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", "requires": { - "minimatch": "^3.0.4", - "semver": "^7.3.4", - "vscode-languageserver-protocol": "3.17.0-next.6" + "minimatch": "^5.1.0", + "semver": "^7.3.7", + "vscode-languageserver-protocol": "3.17.3" }, "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "requires": { "lru-cache": "^6.0.0" } @@ -7275,25 +7296,18 @@ } }, "vscode-languageserver-protocol": { - "version": "3.17.0-next.6", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.0-next.6.tgz", - "integrity": "sha512-f1kGsoOpISB5jSqQNeMDl2446enxVahyux2e5vZap6pu/TC+2UlvPT4DCR0gPph95KOQZweL9zq1SzLoPdqhuA==", + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", + "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", "requires": { - "vscode-jsonrpc": "7.0.0-next.1", - "vscode-languageserver-types": "3.17.0-next.2" - }, - "dependencies": { - "vscode-jsonrpc": { - "version": "7.0.0-next.1", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-7.0.0-next.1.tgz", - "integrity": "sha512-dEmliPZGbSyIcEeKRGzosCy7y7zsc8FXg1l5BBOGgMUbemlo3vUnsa2GFqpILJwJvlbvkRcF2QASNwIlKe9J7g==" - } + "vscode-jsonrpc": "8.1.0", + "vscode-languageserver-types": "3.17.3" } }, "vscode-languageserver-types": { - "version": "3.17.0-next.2", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.0-next.2.tgz", - "integrity": "sha512-L5S2kNLCgYJMVWgsZjBaorMM/6+itAfvOyl6Kv1bgFzDNaUKm9HsnUlehjpWPdV5DqnfJhJ5E03Z+/3Mw8ii+Q==" + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", + "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "watchpack": { "version": "2.1.1", diff --git a/package.json b/package.json index 43a56009a..e70da57df 100644 --- a/package.json +++ b/package.json @@ -1397,7 +1397,7 @@ "@types/glob": "5.0.30", "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", - "@types/node": "^8.10.51", + "@types/node": "^16.11.7", "@types/semver": "^7.3.8", "@types/sinon": "^10.0.12", "@types/vscode": "^1.74.0", @@ -1418,7 +1418,7 @@ "request": "^2.88.2", "sinon": "^14.0.0", "ts-loader": "^9.2.6", - "typescript": "^4.2.4", + "typescript": "^4.6.4", "webpack": "^5.28.0", "webpack-cli": "^4.6.0" }, @@ -1431,7 +1431,7 @@ "htmlparser2": "6.0.1", "jdk-utils": "^0.4.4", "semver": "^7.3.5", - "vscode-languageclient": "7.1.0-next.5", + "vscode-languageclient": "8.1.0", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" diff --git a/src/clientErrorHandler.ts b/src/clientErrorHandler.ts index 2e3c2d185..ff7f55118 100644 --- a/src/clientErrorHandler.ts +++ b/src/clientErrorHandler.ts @@ -1,5 +1,5 @@ import { window, commands } from "vscode"; -import { ErrorHandler, Message, ErrorAction, CloseAction } from "vscode-languageclient"; +import { ErrorHandler, Message, ErrorAction, CloseAction, ErrorHandlerResult, CloseHandlerResult } from "vscode-languageclient"; import { Commands } from "./commands"; import { logger } from "./log"; @@ -10,21 +10,27 @@ export class ClientErrorHandler implements ErrorHandler { this.restarts = []; } - public error(_error: Error, _message: Message, count: number): ErrorAction { + public error(_error: Error, _message: Message, count: number): ErrorHandlerResult { if (count && count <= 3) { logger.error(`${this.name} server encountered error: ${_message}, ${_error && _error.toString()}`); - return ErrorAction.Continue; + return { + action: ErrorAction.Continue + }; } logger.error(`${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`); - return ErrorAction.Shutdown; + return { + action: ErrorAction.Shutdown + }; } - public closed(): CloseAction { + public closed(): CloseHandlerResult { this.restarts.push(Date.now()); if (this.restarts.length < 5) { logger.error(`The ${this.name} server crashed and will restart.`); - return CloseAction.Restart; + return { + action: CloseAction.Restart + }; } else { const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; if (diff <= 3 * 60 * 1000) { @@ -36,12 +42,16 @@ export class ClientErrorHandler implements ErrorHandler { commands.executeCommand(Commands.OPEN_LOGS); } }); - return CloseAction.DoNotRestart; + return { + action: CloseAction.DoNotRestart + }; } logger.error(`The ${this.name} server crashed and will restart.`); this.restarts.shift(); - return CloseAction.Restart; + return { + action: CloseAction.Restart + }; } } } diff --git a/src/extension.ts b/src/extension.ts index 1dfeac1f0..3a61a0321 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import { CodeActionContext, CodeActionTriggerKind, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; -import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; +import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, State } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; @@ -167,7 +167,6 @@ export function activate(context: ExtensionContext): Promise { resolveAdditionalTextEditsSupport: true, advancedIntroduceParameterRefactoringSupport: true, actionableRuntimeNotificationSupport: true, - shouldLanguageServerExitOnShutdown: true, onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", extractInterfaceSupport: true, }, @@ -175,8 +174,8 @@ export function activate(context: ExtensionContext): Promise { }, middleware: { workspace: { - didChangeConfiguration: () => { - standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { + didChangeConfiguration: async () => { + await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { settings: { java: getJavaConfig(requirements.java_home), } @@ -185,12 +184,12 @@ export function activate(context: ExtensionContext): Promise { }, // https://github.com/redhat-developer/vscode-java/issues/2130 // include all diagnostics for the current line in the CodeActionContext params for the performance reason - provideCodeActions: (document, range, context, token, next) => { + provideCodeActions: async (document, range, context, token, next) => { const client: LanguageClient = standardClient.getClient(); const params: CodeActionParams = { textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), range: client.code2ProtocolConverter.asRange(range), - context: client.code2ProtocolConverter.asCodeActionContext(context) + context: await client.code2ProtocolConverter.asCodeActionContext(context) }; const showAt = getJavaConfiguration().get("quickfix.showAt"); if (showAt === 'line' && range.start.line === range.end.line && range.start.character === range.end.character) { @@ -209,12 +208,12 @@ export function activate(context: ExtensionContext): Promise { const codeActionContext: CodeActionContext = { diagnostics: allDiagnostics, only: context.only, - triggerKind: CodeActionTriggerKind.Invoke, + triggerKind: context.triggerKind, }; - params.context = client.code2ProtocolConverter.asCodeActionContext(codeActionContext); + params.context = await client.code2ProtocolConverter.asCodeActionContext(codeActionContext); } } - return client.sendRequest(CodeActionRequest.type, params, token).then((values) => { + return client.sendRequest(CodeActionRequest.type, params, token).then(async (values) => { if (values === null) { return undefined; } @@ -224,7 +223,7 @@ export function activate(context: ExtensionContext): Promise { result.push(client.protocol2CodeConverter.asCommand(item)); } else { - result.push(client.protocol2CodeConverter.asCodeAction(item)); + result.push(await client.protocol2CodeConverter.asCodeAction(item)); } } return result; @@ -249,13 +248,16 @@ export function activate(context: ExtensionContext): Promise { // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); } else { - syntaxClient.initialize(requirements, clientOptions, prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true)); + syntaxClient.initialize(requirements, clientOptions, serverOptions); } - syntaxClient.start(); + syntaxClient.start().then(() => { + syntaxClient.registerSyntaxClientActions(serverOptions); + }); serverStatusBarProvider.showLightWeightStatus(); } @@ -430,7 +432,9 @@ async function startStandardServer(context: ExtensionContext, requirements: requ apiManager.fireDidServerModeChange(ServerMode.hybrid); } await standardClient.initialize(context, requirements, clientOptions, workspacePath, jdtEventEmitter); - standardClient.start(); + standardClient.start().then(async () => { + standardClient.registerLanguageClientActions(context, await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins")), jdtEventEmitter); + }); serverStatusBarProvider.showStandardStatus(); } @@ -532,7 +536,9 @@ export async function getActiveLanguageClient(): Promise { - const codeWorkspaceEdit = languageClient.protocol2CodeConverter.asWorkspaceEdit(workspaceEdit); + const codeWorkspaceEdit = await languageClient.protocol2CodeConverter.asWorkspaceEdit(workspaceEdit); if (!codeWorkspaceEdit) { return; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 70828f008..9819ebd93 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -5,7 +5,7 @@ import { findRuntimes } from "jdk-utils"; import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; -import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams } from "vscode-languageclient"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; @@ -61,8 +61,6 @@ export class StandardLanguageClient { return; } - const hasImported: boolean = await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins")); - if (workspace.getConfiguration().get("java.showBuildStatusOnStart.enabled") === "terminal") { commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS); } @@ -108,505 +106,506 @@ export class StandardLanguageClient { // Create the language client and start the client. this.languageClient = new LanguageClient('java', extensionName, serverOptions, clientOptions); - this.languageClient.onReady().then(() => { - activationProgressNotification.showProgress(); - this.languageClient.onNotification(StatusNotification.type, (report) => { - switch (report.type) { - case 'ServiceReady': - apiManager.updateServerMode(ServerMode.standard); - apiManager.fireDidServerModeChange(ServerMode.standard); - apiManager.resolveServerReadyPromise(); - - if (extensions.onDidChange) {// Theia doesn't support this API yet - extensions.onDidChange(async () => { - await onExtensionChange(extensions.all); - }); - } + this.registerCommandsForStandardServer(context, jdtEventEmitter); + fileEventHandler.registerFileEventHandlers(this.languageClient, context); - registerPasteEventHandler(context, this.languageClient); - activationProgressNotification.hide(); - if (!hasImported) { - showImportFinishNotification(context); - } - checkLombokDependency(context); - apiManager.getApiInstance().onDidClasspathUpdate((e: Uri) => { - checkLombokDependency(context); + collectBuildFilePattern(extensions.all); + + this.status = ClientStatus.initialized; + } + + public registerLanguageClientActions(context: ExtensionContext, hasImported: boolean, jdtEventEmitter: EventEmitter) { + activationProgressNotification.showProgress(); + this.languageClient.onNotification(StatusNotification.type, (report) => { + switch (report.type) { + case 'ServiceReady': + apiManager.updateServerMode(ServerMode.standard); + apiManager.fireDidServerModeChange(ServerMode.standard); + apiManager.resolveServerReadyPromise(); + + if (extensions.onDidChange) {// Theia doesn't support this API yet + extensions.onDidChange(async () => { + await onExtensionChange(extensions.all); }); - // Disable the client-side snippet provider since LS is ready. - snippetCompletionProvider.dispose(); - break; - case 'Started': + } + + registerPasteEventHandler(context, this.languageClient); + activationProgressNotification.hide(); + if (!hasImported) { + showImportFinishNotification(context); + } + checkLombokDependency(context); + apiManager.getApiInstance().onDidClasspathUpdate((e: Uri) => { + checkLombokDependency(context); + }); + // Disable the client-side snippet provider since LS is ready. + snippetCompletionProvider.dispose(); + break; + case 'Started': + this.status = ClientStatus.started; + serverStatus.updateServerStatus(ServerStatusKind.ready); + commands.executeCommand('setContext', 'javaLSReady', true); + apiManager.updateStatus(ClientStatus.started); + break; + case 'Error': + this.status = ClientStatus.error; + serverStatus.updateServerStatus(ServerStatusKind.error); + apiManager.updateStatus(ClientStatus.error); + break; + case 'ProjectStatus': + if (report.message === "WARNING") { + serverStatus.updateServerStatus(ServerStatusKind.warning); + } else if (report.message === "OK") { this.status = ClientStatus.started; + serverStatus.errorResolved(); serverStatus.updateServerStatus(ServerStatusKind.ready); - commands.executeCommand('setContext', 'javaLSReady', true); - apiManager.updateStatus(ClientStatus.started); - break; - case 'Error': - this.status = ClientStatus.error; - serverStatus.updateServerStatus(ServerStatusKind.error); - apiManager.updateStatus(ClientStatus.error); - break; - case 'ProjectStatus': - if (report.message === "WARNING") { - serverStatus.updateServerStatus(ServerStatusKind.warning); - } else if (report.message === "OK") { - this.status = ClientStatus.started; - serverStatus.errorResolved(); - serverStatus.updateServerStatus(ServerStatusKind.ready); - } - return; - case 'Starting': - case 'Message': - // message goes to progress report instead - break; - } - if (!serverStatus.hasErrors()) { - serverStatusBarProvider.updateTooltip(report.message); - } - }); + } + return; + case 'Starting': + case 'Message': + // message goes to progress report instead + break; + } + if (!serverStatus.hasErrors()) { + serverStatusBarProvider.updateTooltip(report.message); + } + }); - this.languageClient.onNotification(ProgressReportNotification.type, (progress) => { - serverTasks.updateServerTask(progress); - }); + this.languageClient.onNotification(ProgressReportNotification.type, (progress) => { + serverTasks.updateServerTask(progress); + }); - this.languageClient.onNotification(EventNotification.type, async (notification) => { - switch (notification.eventType) { - case EventType.classpathUpdated: - apiManager.fireDidClasspathUpdate(Uri.parse(notification.data)); - break; - case EventType.projectsImported: - const projectUris: Uri[] = []; - if (notification.data) { - for (const uriString of notification.data) { - projectUris.push(Uri.parse(uriString)); - } - } - if (projectUris.length > 0) { - apiManager.fireDidProjectsImport(projectUris); + this.languageClient.onNotification(EventNotification.type, async (notification) => { + switch (notification.eventType) { + case EventType.classpathUpdated: + apiManager.fireDidClasspathUpdate(Uri.parse(notification.data)); + break; + case EventType.projectsImported: + const projectUris: Uri[] = []; + if (notification.data) { + for (const uriString of notification.data) { + projectUris.push(Uri.parse(uriString)); } - break; - case EventType.incompatibleGradleJdkIssue: - const options: string[] = []; - const info = notification.data as GradleCompatibilityInfo; - const highestJavaVersion = Number(info.highestJavaVersion); - let runtimes = await findRuntimes({checkJavac: true, withVersion: true, withTags: true}); - runtimes = runtimes.filter(runtime => { - return runtime.version.major <= highestJavaVersion; + } + if (projectUris.length > 0) { + apiManager.fireDidProjectsImport(projectUris); + } + break; + case EventType.incompatibleGradleJdkIssue: + const options: string[] = []; + const info = notification.data as GradleCompatibilityInfo; + const highestJavaVersion = Number(info.highestJavaVersion); + let runtimes = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); + runtimes = runtimes.filter(runtime => { + return runtime.version.major <= highestJavaVersion; + }); + sortJdksByVersion(runtimes); + sortJdksBySource(runtimes); + options.push(UPGRADE_GRADLE + info.recommendedGradleVersion); + if (!runtimes.length) { + options.push(GET_JDK); + } else { + options.push(USE_JAVA + runtimes[0].version.major + AS_GRADLE_JVM); + } + this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, info.recommendedGradleVersion, runtimes[0]?.homedir); + break; + case EventType.upgradeGradleWrapper: + const neverShow: boolean | undefined = context.globalState.get("java.neverShowUpgradeWrapperNotification"); + if (!neverShow) { + const upgradeInfo = notification.data as UpgradeGradleWrapperInfo; + const option = `Upgrade to ${upgradeInfo.recommendedGradleVersion}`; + window.showWarningMessage(upgradeInfo.message, option, "Don't show again").then(async (choice) => { + if (choice === option) { + await upgradeGradle(upgradeInfo.projectUri, upgradeInfo.recommendedGradleVersion); + } else if (choice === "Don't show again") { + context.globalState.update("java.neverShowUpgradeWrapperNotification", true); + } }); - sortJdksByVersion(runtimes); - sortJdksBySource(runtimes); - options.push(UPGRADE_GRADLE + info.recommendedGradleVersion); - if (!runtimes.length) { - options.push(GET_JDK); - } else { - options.push(USE_JAVA + runtimes[0].version.major + AS_GRADLE_JVM); - } - this.showGradleCompatibilityIssueNotification(info.message, options, info.projectUri, info.recommendedGradleVersion, runtimes[0]?.homedir); - break; - case EventType.upgradeGradleWrapper: - const neverShow: boolean | undefined = context.globalState.get("java.neverShowUpgradeWrapperNotification"); - if (!neverShow) { - const upgradeInfo = notification.data as UpgradeGradleWrapperInfo; - const option = `Upgrade to ${upgradeInfo.recommendedGradleVersion}`; - window.showWarningMessage(upgradeInfo.message, option, "Don't show again").then(async (choice) => { - if (choice === option) { - await upgradeGradle(upgradeInfo.projectUri, upgradeInfo.recommendedGradleVersion); - } else if (choice === "Don't show again") { - context.globalState.update("java.neverShowUpgradeWrapperNotification", true); - } - }); - } - break; - default: - break; - } - }); + } + break; + default: + break; + } + }); - this.languageClient.onNotification(ActionableNotification.type, (notification) => { - let show = null; - switch (notification.severity) { - case MessageType.Log: - show = logNotification; - break; - case MessageType.Info: - show = window.showInformationMessage; - break; - case MessageType.Warning: - show = window.showWarningMessage; - break; - case MessageType.Error: - show = window.showErrorMessage; + this.languageClient.onNotification(ActionableNotification.type, (notification) => { + let show = null; + switch (notification.severity) { + case MessageType.Log: + show = logNotification; + break; + case MessageType.Info: + show = window.showInformationMessage; + break; + case MessageType.Warning: + show = window.showWarningMessage; + break; + case MessageType.Error: + show = window.showErrorMessage; + break; + } + if (!show) { + return; + } + const titles = notification.commands.map(a => a.title); + show(notification.message, ...titles).then((selection) => { + for (const action of notification.commands) { + if (action.title === selection) { + const args: any[] = (action.arguments) ? action.arguments : []; + commands.executeCommand(action.command, ...args); break; - } - if (!show) { - return; - } - const titles = notification.commands.map(a => a.title); - show(notification.message, ...titles).then((selection) => { - for (const action of notification.commands) { - if (action.title === selection) { - const args: any[] = (action.arguments) ? action.arguments : []; - commands.executeCommand(action.command, ...args); - break; - } } - }); + } }); + }); - this.languageClient.onRequest(ExecuteClientCommandRequest.type, (params) => { - return commands.executeCommand(params.command, ...params.arguments); - }); + this.languageClient.onRequest(ExecuteClientCommandRequest.type, (params) => { + return commands.executeCommand(params.command, ...params.arguments); + }); - this.languageClient.onNotification(ServerNotification.type, (params) => { - commands.executeCommand(params.command, ...params.arguments); - }); + this.languageClient.onNotification(ServerNotification.type, (params) => { + commands.executeCommand(params.command, ...params.arguments); + }); - this.languageClient.onRequest(ConfigurationRequest.type, (params: ConfigurationParams) => { - const result: any[] = []; - const activeEditor: TextEditor | undefined = window.activeTextEditor; - for (const item of params.items) { - const scopeUri: Uri | undefined = item.scopeUri && Uri.parse(item.scopeUri); - if (scopeUri && scopeUri.toString() === activeEditor?.document.uri.toString()) { - if (item.section === "java.format.insertSpaces") { - result.push(activeEditor.options.insertSpaces); - } else if (item.section === "java.format.tabSize") { - result.push(activeEditor.options.tabSize); - } else { - result.push(null); - } + this.languageClient.onRequest(ConfigurationRequest.type, (params: ConfigurationParams) => { + const result: any[] = []; + const activeEditor: TextEditor | undefined = window.activeTextEditor; + for (const item of params.items) { + const scopeUri: Uri | undefined = item.scopeUri && Uri.parse(item.scopeUri); + if (scopeUri && scopeUri.toString() === activeEditor?.document.uri.toString()) { + if (item.section === "java.format.insertSpaces") { + result.push(activeEditor.options.insertSpaces); + } else if (item.section === "java.format.tabSize") { + result.push(activeEditor.options.tabSize); } else { - result.push(workspace.getConfiguration(null, scopeUri).get(item.section, null /* defaultValue */)); + result.push(null); } + } else { + result.push(workspace.getConfiguration(null, scopeUri).get(item.section, null /* defaultValue */)); } - return result; - }); - }); - - this.registerCommandsForStandardServer(context, jdtEventEmitter); - fileEventHandler.registerFileEventHandlers(this.languageClient, context); - - collectBuildFilePattern(extensions.all); - - this.status = ClientStatus.initialized; - } - - private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { - window.showErrorMessage(`${message} [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)`, ...options).then(async (choice) => { - if (choice === GET_JDK) { - commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(getJdkUrl())); - } else if (choice.startsWith(USE_JAVA)) { - await workspace.getConfiguration().update(GRADLE_IMPORT_JVM, newJavaHome, ConfigurationTarget.Global); - commands.executeCommand("workbench.action.openSettings", GRADLE_IMPORT_JVM); - commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); - } else if (choice.startsWith(UPGRADE_GRADLE)) { - await upgradeGradle(projectUri, gradleVersion); } + return result; }); - } - private registerCommandsForStandardServer(context: ExtensionContext, jdtEventEmitter: EventEmitter): void { - context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS_CMD, async () => { - return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); + context.subscriptions.push(commands.registerCommand(GRADLE_CHECKSUM, (wrapper: string, sha256: string) => { + setGradleWrapperChecksum(wrapper, sha256); })); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_OUTPUT, () => this.languageClient.outputChannel.show(ViewColumn.Three))); - context.subscriptions.push(commands.registerCommand(Commands.SHOW_SERVER_TASK_STATUS, () => serverTaskPresenter.presentServerTaskView())); - - this.languageClient.onReady().then(() => { - context.subscriptions.push(commands.registerCommand(GRADLE_CHECKSUM, (wrapper: string, sha256: string) => { - setGradleWrapperChecksum(wrapper, sha256); - })); - - context.subscriptions.push(commands.registerCommand(Commands.SHOW_JAVA_REFERENCES, (uri: string, position: LSPosition, locations: LSLocation[]) => { - commands.executeCommand(Commands.SHOW_REFERENCES, Uri.parse(uri), this.languageClient.protocol2CodeConverter.asPosition(position), locations.map(this.languageClient.protocol2CodeConverter.asLocation)); - })); - context.subscriptions.push(commands.registerCommand(Commands.SHOW_JAVA_IMPLEMENTATIONS, (uri: string, position: LSPosition, locations: LSLocation[]) => { - commands.executeCommand(Commands.SHOW_REFERENCES, Uri.parse(uri), this.languageClient.protocol2CodeConverter.asPosition(position), locations.map(this.languageClient.protocol2CodeConverter.asLocation)); - })); + context.subscriptions.push(commands.registerCommand(Commands.SHOW_JAVA_REFERENCES, (uri: string, position: LSPosition, locations: LSLocation[]) => { + commands.executeCommand(Commands.SHOW_REFERENCES, Uri.parse(uri), this.languageClient.protocol2CodeConverter.asPosition(position), locations.map(this.languageClient.protocol2CodeConverter.asLocation)); + })); + context.subscriptions.push(commands.registerCommand(Commands.SHOW_JAVA_IMPLEMENTATIONS, (uri: string, position: LSPosition, locations: LSLocation[]) => { + commands.executeCommand(Commands.SHOW_REFERENCES, Uri.parse(uri), this.languageClient.protocol2CodeConverter.asPosition(position), locations.map(this.languageClient.protocol2CodeConverter.asLocation)); + })); - context.subscriptions.push(commands.registerCommand(Commands.CONFIGURATION_UPDATE, uri => projectConfigurationUpdate(this.languageClient, uri))); + context.subscriptions.push(commands.registerCommand(Commands.CONFIGURATION_UPDATE, async (uri) => { + await projectConfigurationUpdate(this.languageClient, uri); + })); - context.subscriptions.push(commands.registerCommand(Commands.IGNORE_INCOMPLETE_CLASSPATH, () => setIncompleteClasspathSeverity('ignore'))); + context.subscriptions.push(commands.registerCommand(Commands.IGNORE_INCOMPLETE_CLASSPATH, () => setIncompleteClasspathSeverity('ignore'))); - context.subscriptions.push(commands.registerCommand(Commands.IGNORE_INCOMPLETE_CLASSPATH_HELP, () => { - commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse('https://github.com/redhat-developer/vscode-java/wiki/%22Classpath-is-incomplete%22-warning')); - })); + context.subscriptions.push(commands.registerCommand(Commands.IGNORE_INCOMPLETE_CLASSPATH_HELP, () => { + commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse('https://github.com/redhat-developer/vscode-java/wiki/%22Classpath-is-incomplete%22-warning')); + })); - context.subscriptions.push(commands.registerCommand(Commands.PROJECT_CONFIGURATION_STATUS, (uri, status) => setProjectConfigurationUpdate(this.languageClient, uri, status))); + context.subscriptions.push(commands.registerCommand(Commands.PROJECT_CONFIGURATION_STATUS, async (uri, status) => { + await setProjectConfigurationUpdate(this.languageClient, uri, status); + })); - context.subscriptions.push(commands.registerCommand(Commands.NULL_ANALYSIS_SET_MODE, (status) => setNullAnalysisStatus(status))); + context.subscriptions.push(commands.registerCommand(Commands.NULL_ANALYSIS_SET_MODE, (status) => setNullAnalysisStatus(status))); - context.subscriptions.push(commands.registerCommand(Commands.APPLY_WORKSPACE_EDIT, (obj) => { - applyWorkspaceEdit(obj, this.languageClient); - })); + context.subscriptions.push(commands.registerCommand(Commands.APPLY_WORKSPACE_EDIT, (obj) => { + applyWorkspaceEdit(obj, this.languageClient); + })); - context.subscriptions.push(commands.registerCommand(Commands.NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND, async (location: LinkLocation | Uri) => { - let superImplLocation: Location | undefined; + context.subscriptions.push(commands.registerCommand(Commands.NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND, async (location: LinkLocation | Uri) => { + let superImplLocation: Location | undefined; - if (!location) { // comes from command palette - if (window.activeTextEditor?.document.languageId !== "java") { - return; - } - location = window.activeTextEditor.document.uri; + if (!location) { // comes from command palette + if (window.activeTextEditor?.document.languageId !== "java") { + return; } + location = window.activeTextEditor.document.uri; + } - if (location instanceof Uri) { // comes from context menu - const params: TextDocumentPositionParams = { - textDocument: { - uri: location.toString(), - }, - position: this.languageClient.code2ProtocolConverter.asPosition(window.activeTextEditor.selection.active), - }; - const response = await this.languageClient.sendRequest(FindLinks.type, { - type: 'superImplementation', - position: params, - }); + if (location instanceof Uri) { // comes from context menu + const params: TextDocumentPositionParams = { + textDocument: { + uri: location.toString(), + }, + position: this.languageClient.code2ProtocolConverter.asPosition(window.activeTextEditor.selection.active), + }; + const response = await this.languageClient.sendRequest(FindLinks.type, { + type: 'superImplementation', + position: params, + }); - if (response && response.length > 0) { - const superImpl = response[0]; - superImplLocation = new Location( - Uri.parse(superImpl.uri), - this.languageClient.protocol2CodeConverter.asRange(superImpl.range) - ); - } - } else { // comes from hover information + if (response && response.length > 0) { + const superImpl = response[0]; superImplLocation = new Location( - Uri.parse(decodeBase64(location.uri)), - this.languageClient.protocol2CodeConverter.asRange(location.range), + Uri.parse(superImpl.uri), + this.languageClient.protocol2CodeConverter.asRange(superImpl.range) ); } + } else { // comes from hover information + superImplLocation = new Location( + Uri.parse(decodeBase64(location.uri)), + this.languageClient.protocol2CodeConverter.asRange(location.range), + ); + } - if (superImplLocation) { - return window.showTextDocument(superImplLocation.uri, { - preserveFocus: true, - selection: superImplLocation.range, - }); - } else { - return showNoLocationFound('No super implementation found'); - } - })); + if (superImplLocation) { + return window.showTextDocument(superImplLocation.uri, { + preserveFocus: true, + selection: superImplLocation.range, + }); + } else { + return showNoLocationFound('No super implementation found'); + } + })); - context.subscriptions.push(commands.registerCommand(Commands.SHOW_TYPE_HIERARCHY, (location: any) => { - if (location instanceof Uri) { - typeHierarchyTree.setTypeHierarchy(new Location(location, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); - } else { - if (window.activeTextEditor?.document?.languageId !== "java") { - return; - } - typeHierarchyTree.setTypeHierarchy(new Location(window.activeTextEditor.document.uri, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); - } - })); - - context.subscriptions.push(commands.registerCommand(Commands.SHOW_CLASS_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.both); - })); - - context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUPERTYPE_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.parents); - })); - - context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUBTYPE_HIERARCHY, () => { - typeHierarchyTree.changeDirection(TypeHierarchyDirection.children); - })); - - context.subscriptions.push(commands.registerCommand(Commands.CHANGE_BASE_TYPE, async (item: TypeHierarchyItem) => { - typeHierarchyTree.changeBaseItem(item); - })); - - context.subscriptions.push(commands.registerCommand(Commands.BUILD_PROJECT, async (uris: Uri[] | Uri, isFullBuild: boolean, token: CancellationToken) => { - let resources: Uri[] = []; - if (uris instanceof Uri) { - resources.push(uris); - } else if (Array.isArray(uris)) { - for (const uri of uris) { - if (uri instanceof Uri) { - resources.push(uri); - } - } + context.subscriptions.push(commands.registerCommand(Commands.SHOW_TYPE_HIERARCHY, (location: any) => { + if (location instanceof Uri) { + typeHierarchyTree.setTypeHierarchy(new Location(location, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); + } else { + if (window.activeTextEditor?.document?.languageId !== "java") { + return; } + typeHierarchyTree.setTypeHierarchy(new Location(window.activeTextEditor.document.uri, window.activeTextEditor.selection.active), TypeHierarchyDirection.both); + } + })); - if (!resources.length) { - resources = await askForProjects( - window.activeTextEditor?.document.uri, - "Please select the project(s) to rebuild.", - ); - if (!resources?.length) { - return; - } - } + context.subscriptions.push(commands.registerCommand(Commands.SHOW_CLASS_HIERARCHY, () => { + typeHierarchyTree.changeDirection(TypeHierarchyDirection.both); + })); - const params: BuildProjectParams = { - identifiers: resources.map((u => { - return { uri: u.toString() }; - })), - // we can consider expose 'isFullBuild' according to users' feedback, - // currently set it to true by default. - isFullBuild: isFullBuild === undefined ? true : isFullBuild, - }; + context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUPERTYPE_HIERARCHY, () => { + typeHierarchyTree.changeDirection(TypeHierarchyDirection.parents); + })); - return window.withProgress({ location: ProgressLocation.Window }, async p => { - p.report({ message: 'Rebuilding projects...' }); - return new Promise(async (resolve, reject) => { - const start = new Date().getTime(); - - let res: CompileWorkspaceStatus; - try { - res = token ? await this.languageClient.sendRequest(BuildProjectRequest.type, params, token) : - await this.languageClient.sendRequest(BuildProjectRequest.type, params); - } catch (error) { - if (error && error.code === -32800) { // Check if the request is cancelled. - res = CompileWorkspaceStatus.cancelled; - } - reject(error); - } + context.subscriptions.push(commands.registerCommand(Commands.SHOW_SUBTYPE_HIERARCHY, () => { + typeHierarchyTree.changeDirection(TypeHierarchyDirection.children); + })); - const elapsed = new Date().getTime() - start; - const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; - setTimeout(() => { // set a timeout so user would still see the message when build time is short - resolve(res); - }, humanVisibleDelay); - }); - }); - })); + context.subscriptions.push(commands.registerCommand(Commands.CHANGE_BASE_TYPE, async (item: TypeHierarchyItem) => { + typeHierarchyTree.changeBaseItem(item); + })); - context.subscriptions.push(commands.registerCommand(Commands.COMPILE_WORKSPACE, (isFullCompile: boolean, token?: CancellationToken) => { - return window.withProgress({ location: ProgressLocation.Window }, async p => { - if (typeof isFullCompile !== 'boolean') { - const selection = await window.showQuickPick(['Incremental', 'Full'], { placeHolder: 'please choose compile type:' }); - isFullCompile = selection !== 'Incremental'; + context.subscriptions.push(commands.registerCommand(Commands.BUILD_PROJECT, async (uris: Uri[] | Uri, isFullBuild: boolean, token: CancellationToken) => { + let resources: Uri[] = []; + if (uris instanceof Uri) { + resources.push(uris); + } else if (Array.isArray(uris)) { + for (const uri of uris) { + if (uri instanceof Uri) { + resources.push(uri); } - p.report({ message: 'Compiling workspace...' }); + } + } + + if (!resources.length) { + resources = await askForProjects( + window.activeTextEditor?.document.uri, + "Please select the project(s) to rebuild.", + ); + if (!resources?.length) { + return; + } + } + + const params: BuildProjectParams = { + identifiers: resources.map((u => { + return { uri: u.toString() }; + })), + // we can consider expose 'isFullBuild' according to users' feedback, + // currently set it to true by default. + isFullBuild: isFullBuild === undefined ? true : isFullBuild, + }; + + return window.withProgress({ location: ProgressLocation.Window }, async p => { + p.report({ message: 'Rebuilding projects...' }); + return new Promise(async (resolve, reject) => { const start = new Date().getTime(); + let res: CompileWorkspaceStatus; try { - res = token ? await this.languageClient.sendRequest(CompileWorkspaceRequest.type, isFullCompile, token) - : await this.languageClient.sendRequest(CompileWorkspaceRequest.type, isFullCompile); + res = token ? await this.languageClient.sendRequest(BuildProjectRequest.type, params, token) : + await this.languageClient.sendRequest(BuildProjectRequest.type, params); } catch (error) { if (error && error.code === -32800) { // Check if the request is cancelled. res = CompileWorkspaceStatus.cancelled; - } else { - throw error; } + reject(error); } const elapsed = new Date().getTime() - start; const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; - return new Promise((resolve, reject) => { - setTimeout(() => { // set a timeout so user would still see the message when build time is short - if (res === CompileWorkspaceStatus.succeed) { - resolve(res); - } else { - reject(res); - } - }, humanVisibleDelay); - }); + setTimeout(() => { // set a timeout so user would still see the message when build time is short + resolve(res); + }, humanVisibleDelay); }); - })); + }); + })); - context.subscriptions.push(commands.registerCommand(Commands.UPDATE_SOURCE_ATTACHMENT_CMD, async (classFileUri: Uri): Promise => { - const resolveRequest: SourceAttachmentRequest = { - classFileUri: classFileUri.toString(), - }; - const resolveResult: SourceAttachmentResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.RESOLVE_SOURCE_ATTACHMENT, JSON.stringify(resolveRequest)); - if (resolveResult.errorMessage) { - window.showErrorMessage(resolveResult.errorMessage); - return false; + context.subscriptions.push(commands.registerCommand(Commands.COMPILE_WORKSPACE, (isFullCompile: boolean, token?: CancellationToken) => { + return window.withProgress({ location: ProgressLocation.Window }, async p => { + if (typeof isFullCompile !== 'boolean') { + const selection = await window.showQuickPick(['Incremental', 'Full'], { placeHolder: 'please choose compile type:' }); + isFullCompile = selection !== 'Incremental'; + } + p.report({ message: 'Compiling workspace...' }); + const start = new Date().getTime(); + let res: CompileWorkspaceStatus; + try { + res = token ? await this.languageClient.sendRequest(CompileWorkspaceRequest.type, isFullCompile, token) + : await this.languageClient.sendRequest(CompileWorkspaceRequest.type, isFullCompile); + } catch (error) { + if (error && error.code === -32800) { // Check if the request is cancelled. + res = CompileWorkspaceStatus.cancelled; + } else { + throw error; + } } - const attributes: SourceAttachmentAttribute = resolveResult.attributes || {}; - const defaultPath = attributes.sourceAttachmentPath || attributes.jarPath; - const sourceFileUris: Uri[] = await window.showOpenDialog({ - defaultUri: defaultPath ? Uri.file(defaultPath) : null, - openLabel: 'Select Source File', - canSelectFiles: true, - canSelectFolders: false, - canSelectMany: false, - filters: { - // eslint-disable-next-line @typescript-eslint/naming-convention - 'Source files': ['jar', 'zip'] - }, + const elapsed = new Date().getTime() - start; + const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; + return new Promise((resolve, reject) => { + setTimeout(() => { // set a timeout so user would still see the message when build time is short + if (res === CompileWorkspaceStatus.succeed) { + resolve(res); + } else { + reject(res); + } + }, humanVisibleDelay); }); + }); + })); - if (sourceFileUris && sourceFileUris.length) { - const updateRequest: SourceAttachmentRequest = { - classFileUri: classFileUri.toString(), - attributes: { - ...attributes, - sourceAttachmentPath: sourceFileUris[0].fsPath - }, - }; - const updateResult: SourceAttachmentResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.UPDATE_SOURCE_ATTACHMENT, JSON.stringify(updateRequest)); - if (updateResult.errorMessage) { - window.showErrorMessage(updateResult.errorMessage); - return false; - } + context.subscriptions.push(commands.registerCommand(Commands.UPDATE_SOURCE_ATTACHMENT_CMD, async (classFileUri: Uri): Promise => { + const resolveRequest: SourceAttachmentRequest = { + classFileUri: classFileUri.toString(), + }; + const resolveResult: SourceAttachmentResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.RESOLVE_SOURCE_ATTACHMENT, JSON.stringify(resolveRequest)); + if (resolveResult.errorMessage) { + window.showErrorMessage(resolveResult.errorMessage); + return false; + } - // Notify jdt content provider to rerender the classfile contents. - jdtEventEmitter.fire(classFileUri); - return true; + const attributes: SourceAttachmentAttribute = resolveResult.attributes || {}; + const defaultPath = attributes.sourceAttachmentPath || attributes.jarPath; + const sourceFileUris: Uri[] = await window.showOpenDialog({ + defaultUri: defaultPath ? Uri.file(defaultPath) : null, + openLabel: 'Select Source File', + canSelectFiles: true, + canSelectFolders: false, + canSelectMany: false, + filters: { + // eslint-disable-next-line @typescript-eslint/naming-convention + 'Source files': ['jar', 'zip'] + }, + }); + + if (sourceFileUris && sourceFileUris.length) { + const updateRequest: SourceAttachmentRequest = { + classFileUri: classFileUri.toString(), + attributes: { + ...attributes, + sourceAttachmentPath: sourceFileUris[0].fsPath + }, + }; + const updateResult: SourceAttachmentResult = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.UPDATE_SOURCE_ATTACHMENT, JSON.stringify(updateRequest)); + if (updateResult.errorMessage) { + window.showErrorMessage(updateResult.errorMessage); + return false; } - })); - buildPath.registerCommands(context); - sourceAction.registerCommands(this.languageClient, context); - refactorAction.registerCommands(this.languageClient, context); - pasteAction.registerCommands(this.languageClient, context); + // Notify jdt content provider to rerender the classfile contents. + jdtEventEmitter.fire(classFileUri); + return true; + } + })); - excludeProjectSettingsFiles(); + buildPath.registerCommands(context); + sourceAction.registerCommands(this.languageClient, context); + refactorAction.registerCommands(this.languageClient, context); + pasteAction.registerCommands(this.languageClient, context); - context.subscriptions.push(languages.registerCodeActionsProvider({ scheme: 'file', language: 'java' }, new RefactorDocumentProvider(), RefactorDocumentProvider.metadata)); - context.subscriptions.push(commands.registerCommand(Commands.LEARN_MORE_ABOUT_REFACTORING, async (kind: CodeActionKind) => { - const sectionId: string = javaRefactorKinds.get(kind) || ''; - markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_REFACTORING}.md`)), 'Java Refactoring', sectionId, context); - })); + excludeProjectSettingsFiles(); - context.subscriptions.push(commands.registerCommand(Commands.CREATE_MODULE_INFO_COMMAND, async () => { - const uri = await askForProjects( - window.activeTextEditor?.document.uri, - "Please select the project to create module-info.java", - false, - ); - if (!uri?.length) { - return; - } + context.subscriptions.push(languages.registerCodeActionsProvider({ scheme: 'file', language: 'java' }, new RefactorDocumentProvider(), RefactorDocumentProvider.metadata)); + context.subscriptions.push(commands.registerCommand(Commands.LEARN_MORE_ABOUT_REFACTORING, async (kind: CodeActionKind) => { + const sectionId: string = javaRefactorKinds.get(kind) || ''; + markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_REFACTORING}.md`)), 'Java Refactoring', sectionId, context); + })); - const moduleInfoUri: string = await commands.executeCommand( - Commands.EXECUTE_WORKSPACE_COMMAND, - Commands.CREATE_MODULE_INFO, - uri[0].toString(), - ); + context.subscriptions.push(commands.registerCommand(Commands.CREATE_MODULE_INFO_COMMAND, async () => { + const uri = await askForProjects( + window.activeTextEditor?.document.uri, + "Please select the project to create module-info.java", + false, + ); + if (!uri?.length) { + return; + } - if (moduleInfoUri) { - await window.showTextDocument(Uri.parse(moduleInfoUri)); - } - })); + const moduleInfoUri: string = await commands.executeCommand( + Commands.EXECUTE_WORKSPACE_COMMAND, + Commands.CREATE_MODULE_INFO, + uri[0].toString(), + ); - context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string, version?: string) => { - upgradeGradle(projectUri, version); - })); + if (moduleInfoUri) { + await window.showTextDocument(Uri.parse(moduleInfoUri)); + } + })); - languages.registerCodeActionsProvider({ - language: "xml", - scheme: "file", - pattern: "**/pom.xml" - }, new PomCodeActionProvider(context), pomCodeActionMetadata); + context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string, version?: string) => { + upgradeGradle(projectUri, version); + })); - languages.registerCodeActionsProvider({ - scheme: "file", - pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" - }, new GradleCodeActionProvider(), gradleCodeActionMetadata); + languages.registerCodeActionsProvider({ + language: "xml", + scheme: "file", + pattern: "**/pom.xml" + }, new PomCodeActionProvider(context), pomCodeActionMetadata); - if (languages.registerInlayHintsProvider) { - context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); - } + languages.registerCodeActionsProvider({ + scheme: "file", + pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" + }, new GradleCodeActionProvider(), gradleCodeActionMetadata); + + if (languages.registerInlayHintsProvider) { + context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); + } + } + private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { + window.showErrorMessage(`${message} [Learn More](https://docs.gradle.org/current/userguide/compatibility.html)`, ...options).then(async (choice) => { + if (choice === GET_JDK) { + commands.executeCommand(Commands.OPEN_BROWSER, Uri.parse(getJdkUrl())); + } else if (choice.startsWith(USE_JAVA)) { + await workspace.getConfiguration().update(GRADLE_IMPORT_JVM, newJavaHome, ConfigurationTarget.Global); + commands.executeCommand("workbench.action.openSettings", GRADLE_IMPORT_JVM); + commands.executeCommand(Commands.IMPORT_PROJECTS_CMD); + } else if (choice.startsWith(UPGRADE_GRADLE)) { + await upgradeGradle(projectUri, gradleVersion); + } }); } - public start(): void { + private registerCommandsForStandardServer(context: ExtensionContext, jdtEventEmitter: EventEmitter): void { + context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS_CMD, async () => { + return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); + })); + + context.subscriptions.push(commands.registerCommand(Commands.OPEN_OUTPUT, () => this.languageClient.outputChannel.show(ViewColumn.Three))); + context.subscriptions.push(commands.registerCommand(Commands.SHOW_SERVER_TASK_STATUS, () => serverTaskPresenter.presentServerTaskView())); + } + + public start(): Promise { if (this.languageClient && this.status === ClientStatus.initialized) { - this.languageClient.start(); this.status = ClientStatus.starting; + return this.languageClient.start(); } } @@ -677,7 +676,7 @@ function setIncompleteClasspathSeverity(severity: string) { ); } -function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { +async function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, status: FeatureStatus) { const config = getJavaConfiguration(); const section = 'configuration.updateBuildConfiguration'; @@ -687,7 +686,7 @@ function setProjectConfigurationUpdate(languageClient: LanguageClient, uri: Uri, (error) => logger.error(error) ); if (status !== FeatureStatus.disabled) { - projectConfigurationUpdate(languageClient, uri); + await projectConfigurationUpdate(languageClient, uri); } } @@ -717,10 +716,10 @@ export function showNoLocationFound(message: string): void { ); } -export function applyWorkspaceEdit(obj, languageClient): Thenable { - const edit = languageClient.protocol2CodeConverter.asWorkspaceEdit(obj); - if (edit) { - return workspace.applyEdit(edit); +export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageClient: LanguageClient): Promise { + const codeEdit = await languageClient.protocol2CodeConverter.asWorkspaceEdit(workspaceEdit); + if (codeEdit) { + return await workspace.applyEdit(codeEdit); } else { return Promise.resolve(true); } diff --git a/src/standardLanguageClientUtils.ts b/src/standardLanguageClientUtils.ts index cfe409078..6b8723e69 100644 --- a/src/standardLanguageClientUtils.ts +++ b/src/standardLanguageClientUtils.ts @@ -33,11 +33,11 @@ export async function projectConfigurationUpdate(languageClient: LanguageClient, } if (resources.length === 1) { - languageClient.sendNotification(ProjectConfigurationUpdateRequest.type, { + await languageClient.sendNotification(ProjectConfigurationUpdateRequest.type, { uri: resources[0].toString(), }); } else if (resources.length > 1) { - languageClient.sendNotification(ProjectConfigurationUpdateRequest.typeV2, { + await languageClient.sendNotification(ProjectConfigurationUpdateRequest.typeV2, { identifiers: resources.map(r => { return { uri: r.toString() }; }), diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 86ab55450..6af9d4271 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -24,8 +24,8 @@ export class SyntaxLanguageClient { const newClientOptions: LanguageClientOptions = Object.assign({}, clientOptions, { middleware: { workspace: { - didChangeConfiguration: () => { - this.languageClient.sendNotification(DidChangeConfigurationNotification.type, { + didChangeConfiguration: async () => { + await this.languageClient.sendNotification(DidChangeConfigurationNotification.type, { settings: { java: getJavaConfig(requirements.java_home), } @@ -56,39 +56,41 @@ export class SyntaxLanguageClient { if (serverOptions) { this.languageClient = new LanguageClient('java', extensionName, serverOptions, newClientOptions); - - // TODO: Currently only resolve the promise when the server mode is explicitly set to lightweight. - // This is to avoid breakings - this.languageClient.onReady().then(() => { - this.languageClient.onNotification(StatusNotification.type, (report) => { - switch (report.type) { - case 'Started': - this.status = ClientStatus.started; - apiManager.updateStatus(ClientStatus.started); - // Disable the client-side snippet provider since LS is ready. - snippetCompletionProvider.dispose(); - break; - case 'Error': - this.status = ClientStatus.error; - apiManager.updateStatus(ClientStatus.error); - break; - default: - break; - } - if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - } - }); - }); } this.status = ClientStatus.initialized; } - public start(): void { + public registerSyntaxClientActions(serverOptions?: ServerOptions): void { + // TODO: Currently only resolve the promise when the server mode is explicitly set to lightweight. + // This is to avoid breakings + if (serverOptions) { + this.languageClient.onNotification(StatusNotification.type, (report) => { + switch (report.type) { + case 'Started': + this.status = ClientStatus.started; + apiManager.updateStatus(ClientStatus.started); + // Disable the client-side snippet provider since LS is ready. + snippetCompletionProvider.dispose(); + break; + case 'Error': + this.status = ClientStatus.error; + apiManager.updateStatus(ClientStatus.error); + break; + default: + break; + } + if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { + apiManager.fireDidServerModeChange(ServerMode.lightWeight); + } + }); + } + } + + public start(): Promise { if (this.languageClient) { - this.languageClient.start(); this.status = ClientStatus.starting; + return this.languageClient.start(); } } From 85eedfe0e6b51c0393694be600b766b6e1bc25a6 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 27 Feb 2023 11:20:16 +0800 Subject: [PATCH 276/708] Remove inlay hint provider Signed-off-by: Sheng Chen --- src/inlayHintsProvider.ts | 95 ----------------------------------- src/standardLanguageClient.ts | 4 -- 2 files changed, 99 deletions(-) delete mode 100644 src/inlayHintsProvider.ts diff --git a/src/inlayHintsProvider.ts b/src/inlayHintsProvider.ts deleted file mode 100644 index e409343f1..000000000 --- a/src/inlayHintsProvider.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { CancellationToken, EventEmitter, InlayHint, InlayHintKind, InlayHintsProvider, Range, TextDocument } from "vscode"; -import * as ls from 'vscode-languageserver-protocol'; -import { LanguageClient, RequestType } from "vscode-languageclient/node"; - -export class JavaInlayHintsProvider implements InlayHintsProvider { - - private onDidChange = new EventEmitter(); - public onDidChangeInlayHints = this.onDidChange.event; - - constructor(private client: LanguageClient) { - this.client.onRequest(InlayHintRefreshRequest.type, async () => { - this.onDidChange.fire(); - }); - } - - public async provideInlayHints(document: TextDocument, range: Range, token: CancellationToken): Promise { - const requestParams: InlayHintParams = { - textDocument: this.client.code2ProtocolConverter.asTextDocumentIdentifier(document), - range: this.client.code2ProtocolConverter.asRange(range) - }; - try { - const values = await this.client.sendRequest(InlayHintRequest.type, requestParams, token); - if (token.isCancellationRequested) { - return []; - } - return asInlayHints(values, this.client); - } catch (error) { - return this.client.handleFailedRequest(InlayHintRequest.type, token, error, []); - } - } -} - -/** - * A parameter literal used in inlay hints requests. - * - * @since 3.17.0 - proposed state - */ - export type InlayHintParams = /* WorkDoneProgressParams &*/ { - /** - * The text document. - */ - textDocument: ls.TextDocumentIdentifier; - - /** - * The document range for which inlay hints should be computed. - */ - range: ls.Range; -}; - -/** - * Inlay hint information. - * - * @since 3.17.0 - proposed state - */ -export type LSInlayHint = { - - /** - * The position of this hint. - */ - position: ls.Position; - - /** - * The label of this hint. A human readable string or an array of - * InlayHintLabelPart label parts. - * - * *Note* that neither the string nor the label part can be empty. - */ - label: string; // label: string | InlayHintLabelPart[]; -}; - -namespace InlayHintRequest { - export const type: RequestType = new RequestType('textDocument/inlayHint'); -} - -/** - * @since 3.17.0 - proposed state - */ -namespace InlayHintRefreshRequest { - export const type: RequestType = new RequestType('workspace/inlayHint/refresh'); -} - -async function asInlayHints(values: LSInlayHint[] | undefined | null, client: LanguageClient, ): Promise { - if (!Array.isArray(values)) { - return undefined; - } - return values.map(lsHint => asInlayHint(lsHint, client)); -} - -function asInlayHint(value: LSInlayHint, client: LanguageClient): InlayHint { - const label = value.label; - const result = new InlayHint(client.protocol2CodeConverter.asPosition(value.position), label); - result.paddingRight = true; - result.kind = InlayHintKind.Parameter; - return result; -} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 9819ebd93..17dc34bc7 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -14,7 +14,6 @@ import { Commands } from "./commands"; import { ClientStatus } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; -import { JavaInlayHintsProvider } from "./inlayHintsProvider"; import { awaitServerConnection, prepareExecutable } from "./javaServerStarter"; import { logger } from "./log"; import { checkLombokDependency } from "./lombokSupport"; @@ -574,9 +573,6 @@ export class StandardLanguageClient { pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" }, new GradleCodeActionProvider(), gradleCodeActionMetadata); - if (languages.registerInlayHintsProvider) { - context.subscriptions.push(languages.registerInlayHintsProvider(JAVA_SELECTOR, new JavaInlayHintsProvider(this.languageClient))); - } } private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { From 53172be84f7aa745aec60086c0ac3eeae723dec8 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 2 Mar 2023 15:06:17 +0800 Subject: [PATCH 277/708] Workaround to show the refactoring document (#2975) Signed-off-by: Sheng Chen --- src/codeActionProvider.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/codeActionProvider.ts b/src/codeActionProvider.ts index 8aebcea7c..8d2498270 100644 --- a/src/codeActionProvider.ts +++ b/src/codeActionProvider.ts @@ -32,7 +32,9 @@ export class RefactorDocumentProvider implements CodeActionProvider { command: { command: Commands.LEARN_MORE_ABOUT_REFACTORING, title: 'Learn more about Java refactorings...', - arguments: [kind] + // comment out due to https://github.com/microsoft/vscode/issues/175737. + // TODO: revert the change once the issue is fixed. + // arguments: [kind] } }; }), From e3778ebe3063c8ee8e6b14908b542ef216cd78cb Mon Sep 17 00:00:00 2001 From: David Thompson Date: Thu, 2 Mar 2023 12:55:43 -0500 Subject: [PATCH 278/708] Fix regression in API impacting Codespaces The API wouldn't report lightweight mode correctly when it was forced to start in lightweight due to vscode-java detecting it was being run in Codespaces. This broke the mechanism to switch to standard mode in Codespaces. Fixes #2968 Signed-off-by: David Thompson --- src/extension.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 3a61a0321..6c223c455 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,8 +5,8 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, CodeActionTriggerKind, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; -import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn, State } from 'vscode-languageclient'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; @@ -379,8 +379,12 @@ export function activate(context: ExtensionContext): Promise { const importOnStartup = config.get(importOnStartupSection); if (importOnStartup === "disabled" || env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); requireStandardServer = false; } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); requireStandardServer = await promptUserForStandardServer(config); } else { requireStandardServer = true; From de77dc838325e2a75d91407d28eb8fb85252489c Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 15 Mar 2023 12:52:33 +0800 Subject: [PATCH 279/708] Add API to track lsp perf on language client level (#2996) * Add API to track lsp perf on language client level --- src/TracingLanguageClient.ts | 99 +++++++++++++++++++++++++++++++++++ src/apiManager.ts | 2 + src/extension.api.ts | 24 ++++++++- src/standardLanguageClient.ts | 3 +- 4 files changed, 126 insertions(+), 2 deletions(-) create mode 100644 src/TracingLanguageClient.ts diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts new file mode 100644 index 000000000..3da77839c --- /dev/null +++ b/src/TracingLanguageClient.ts @@ -0,0 +1,99 @@ +import { performance } from "perf_hooks"; +import { Event, EventEmitter } from "vscode"; +import { CancellationToken, LanguageClient, LanguageClientOptions, ProtocolRequestType, ProtocolRequestType0, RequestType, RequestType0, ServerOptions } from "vscode-languageclient/node"; +import { TraceEvent } from "./extension.api"; + +const requestEventEmitter = new EventEmitter(); +export const onDidRequestEnd: Event = requestEventEmitter.event; + +export class TracingLanguageClient extends LanguageClient { + private isStarted: boolean = false; + + constructor(id: string, name: string, serverOptions: ServerOptions, clientOptions: LanguageClientOptions, forceDebug?: boolean) { + super(id, name, serverOptions, clientOptions, forceDebug); + } + + start(): Promise { + const isFirstTimeStart: boolean = !this.isStarted; + this.isStarted = true; + const startAt: number = performance.now(); + return super.start().then(value => { + if (isFirstTimeStart) { + this.fireTraceEvent("initialize", startAt); + } + return value; + }, reason => { + if (isFirstTimeStart) { + this.fireTraceEvent("initialize", startAt, reason); + } + throw reason; + }); + } + + stop(timeout?: number): Promise { + this.isStarted = false; + return super.stop(timeout); + } + + sendRequest(type: ProtocolRequestType0, token?: CancellationToken): Promise; + sendRequest(type: ProtocolRequestType, params: P, token?: CancellationToken): Promise; + sendRequest(type: RequestType0, token?: CancellationToken): Promise; + sendRequest(type: RequestType, params: P, token?: CancellationToken): Promise; + sendRequest(method: string, token?: CancellationToken): Promise; + sendRequest(method: string, param: any, token?: CancellationToken): Promise; + sendRequest(method: any, ...args) { + const startAt: number = performance.now(); + const requestType: string = this.getRequestType(method, ...args); + return this.sendRequest0(method, ...args).then(value => { + this.fireTraceEvent(requestType, startAt); + return value; + }, reason => { + this.fireTraceEvent(requestType, startAt, reason); + throw reason; + }); + } + + private sendRequest0(method: any, ...args) { + if (!args || !args.length) { + return super.sendRequest(method); + } + + const first = args[0]; + const last = args[args.length - 1]; + if (CancellationToken.is(last)) { + if (first === last) { + return super.sendRequest(method, last); + } else { + return super.sendRequest(method, first, last); + } + } + + return super.sendRequest(method, first); + } + + private getRequestType(method: any, ...args): string { + let requestType: string; + if (typeof method === 'string' || method instanceof String) { + requestType = String(method); + } else { + requestType = method?.method; + } + + if (requestType === "workspace/executeCommand") { + if (args?.[0]?.command) { + requestType = `workspace/executeCommand/${args[0].command}`; + } + } + + return requestType; + } + + private fireTraceEvent(type: string, startAt: number, reason?: any): void { + const duration: number = performance.now() - startAt; + requestEventEmitter.fire({ + type, + duration, + error: reason, + }); + } +} diff --git a/src/apiManager.ts b/src/apiManager.ts index b7daf493c..de3f9efef 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -9,6 +9,7 @@ import { Commands } from "./commands"; import { Emitter } from "vscode-languageclient"; import { ServerMode } from "./settings"; import { registerHoverCommand } from "./hoverAction"; +import { onDidRequestEnd } from "./TracingLanguageClient"; class ApiManager { @@ -60,6 +61,7 @@ class ApiManager { onDidServerModeChange, onDidProjectsImport, serverReady, + onDidRequestEnd, }; } diff --git a/src/extension.api.ts b/src/extension.api.ts index caa9378df..477154bc5 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -73,7 +73,22 @@ export enum ClientStatus { stopping = "Stopping", } -export const extensionApiVersion = '0.7'; +export interface TraceEvent { + /** + * Request type. + */ + type: string; + /** + * Time (in milliseconds) taken to process a request. + */ + duration: number; + /** + * Error that occurs while processing a request. + */ + error?: any; +} + +export const extensionApiVersion = '0.8'; export interface ExtensionAPI { readonly apiVersion: string; @@ -118,4 +133,11 @@ export interface ExtensionAPI { * @since extension version 1.7.0 */ readonly serverReady: () => Promise; + + /** + * An event that's fired when a request has been responded. + * @since API version 0.8 + * @since extension version 1.16.0 + */ + readonly onDidRequestEnd: Event; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 17dc34bc7..ee753697e 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -33,6 +33,7 @@ import { excludeProjectSettingsFiles, ServerMode, setGradleWrapperChecksum } fro import { snippetCompletionProvider } from "./snippetCompletionProvider"; import * as sourceAction from './sourceAction'; import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./standardLanguageClientUtils"; +import { TracingLanguageClient } from './TracingLanguageClient'; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; @@ -103,7 +104,7 @@ export class StandardLanguageClient { } // Create the language client and start the client. - this.languageClient = new LanguageClient('java', extensionName, serverOptions, clientOptions); + this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions); this.registerCommandsForStandardServer(context, jdtEventEmitter); fileEventHandler.registerFileEventHandlers(this.languageClient, context); From 34a3d893fcfa86b13d9eacbbed3b6b3cc43c91e9 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 9 Mar 2023 09:26:32 -0500 Subject: [PATCH 280/708] Permit computation of method hierarchy through type hierarchy API. - Method hierarchy needs to pass along the method signature to be searched on each type - Use data field to store the method signature being searched (if any), and the human readable method name - Use SymbolKind.Null to denote a type in the hierarchy that does not implement the given method Signed-off-by: Roland Grunberg --- src/typeHierarchy/model.ts | 14 ++++++++++---- src/typeHierarchy/util.ts | 2 +- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index 92e8e08df..5161de54d 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -15,19 +15,25 @@ export class TypeHierarchyTreeInput implements SymbolTreeInput> { @@ -127,7 +133,7 @@ class TypeHierarchyTreeDataProvider implements vscode.TreeDataProvider Date: Tue, 14 Mar 2023 15:49:55 +0000 Subject: [PATCH 281/708] Bump webpack from 5.34.0 to 5.76.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.34.0 to 5.76.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.34.0...v5.76.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 465 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 207 insertions(+), 260 deletions(-) diff --git a/package-lock.json b/package-lock.json index 173ea5fbf..3f0bb24bb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -210,9 +210,9 @@ "dev": true }, "@types/eslint": { - "version": "7.2.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.10.tgz", - "integrity": "sha512-kUEPnMKrqbtpCq/KTaGFFKAcz6Ethm2EjCoKIDaCmfRBWLbFuTcOJfTlorwbnboXBzahqWLgUp1BQeKHiJzPUQ==", + "version": "8.21.2", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.2.tgz", + "integrity": "sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==", "dev": true, "requires": { "@types/estree": "*", @@ -220,9 +220,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, "requires": { "@types/eslint": "*", @@ -230,9 +230,9 @@ } }, "@types/estree": { - "version": "0.0.47", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.47.tgz", - "integrity": "sha512-c5ciR06jK8u9BstrmJyO97m+klJrrhCf9u3rLu3DEAJBirxRqSCvDQoYKmxuYwQI5SZChAWu+tq9oVlGRuzPAg==", + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, "@types/fs-extra": { @@ -608,148 +608,148 @@ } }, "@webassemblyjs/ast": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.0.tgz", - "integrity": "sha512-kX2W49LWsbthrmIRMbQZuQDhGtjyqXfEmmHyEi4XWnSZtPmxY0+3anPIzsnRb45VH/J55zlOfWvZuY47aJZTJg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", + "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, "requires": { - "@webassemblyjs/helper-numbers": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0" + "@webassemblyjs/helper-numbers": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.0.tgz", - "integrity": "sha512-Q/aVYs/VnPDVYvsCBL/gSgwmfjeCb4LW8+TMrO3cSzJImgv8lxxEPM2JA5jMrivE7LSz3V+PFqtMbls3m1exDA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", + "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, "@webassemblyjs/helper-api-error": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.0.tgz", - "integrity": "sha512-baT/va95eXiXb2QflSx95QGT5ClzWpGaa8L7JnJbgzoYeaA27FCvuBXU758l+KXWRndEmUXjP0Q5fibhavIn8w==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", + "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, "@webassemblyjs/helper-buffer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.0.tgz", - "integrity": "sha512-u9HPBEl4DS+vA8qLQdEQ6N/eJQ7gT7aNvMIo8AAWvAl/xMrcOSiI2M0MAnMCy3jIFke7bEee/JwdX1nUpCtdyA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", + "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, "@webassemblyjs/helper-numbers": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.0.tgz", - "integrity": "sha512-DhRQKelIj01s5IgdsOJMKLppI+4zpmcMQ3XboFPLwCpSNH6Hqo1ritgHgD0nqHeSYqofA6aBN/NmXuGjM1jEfQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", + "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, "requires": { - "@webassemblyjs/floating-point-hex-parser": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", + "@webassemblyjs/floating-point-hex-parser": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.0.tgz", - "integrity": "sha512-MbmhvxXExm542tWREgSFnOVo07fDpsBJg3sIl6fSp9xuu75eGz5lz31q7wTLffwL3Za7XNRCMZy210+tnsUSEA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", + "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, "@webassemblyjs/helper-wasm-section": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.0.tgz", - "integrity": "sha512-3Eb88hcbfY/FCukrg6i3EH8H2UsD7x8Vy47iVJrP967A9JGqgBVL9aH71SETPx1JrGsOUVLo0c7vMCN22ytJew==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", + "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1" } }, "@webassemblyjs/ieee754": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.0.tgz", - "integrity": "sha512-KXzOqpcYQwAfeQ6WbF6HXo+0udBNmw0iXDmEK5sFlmQdmND+tr773Ti8/5T/M6Tl/413ArSJErATd8In3B+WBA==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", + "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.0.tgz", - "integrity": "sha512-aqbsHa1mSQAbeeNcl38un6qVY++hh8OpCOzxhixSYgbRfNWcxJNJQwe2rezK9XEcssJbbWIkblaJRwGMS9zp+g==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", + "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.0.tgz", - "integrity": "sha512-A/lclGxH6SpSLSyFowMzO/+aDEPU4hvEiooCMXQPcQFPPJaYcPQNKGOCLUySJsYJ4trbpr+Fs08n4jelkVTGVw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", + "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, "@webassemblyjs/wasm-edit": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.0.tgz", - "integrity": "sha512-JHQ0damXy0G6J9ucyKVXO2j08JVJ2ntkdJlq1UTiUrIgfGMmA7Ik5VdC/L8hBK46kVJgujkBIoMtT8yVr+yVOQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", + "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/helper-wasm-section": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-opt": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "@webassemblyjs/wast-printer": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/helper-wasm-section": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-opt": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "@webassemblyjs/wast-printer": "1.11.1" } }, "@webassemblyjs/wasm-gen": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.0.tgz", - "integrity": "sha512-BEUv1aj0WptCZ9kIS30th5ILASUnAPEvE3tVMTrItnZRT9tXCLW2LEXT8ezLw59rqPP9klh9LPmpU+WmRQmCPQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", + "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wasm-opt": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.0.tgz", - "integrity": "sha512-tHUSP5F4ywyh3hZ0+fDQuWxKx3mJiPeFufg+9gwTpYp324mPCQgnuVKwzLTZVqj0duRDovnPaZqDwoyhIO8kYg==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", + "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-buffer": "1.11.0", - "@webassemblyjs/wasm-gen": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-buffer": "1.11.1", + "@webassemblyjs/wasm-gen": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1" } }, "@webassemblyjs/wasm-parser": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.0.tgz", - "integrity": "sha512-6L285Sgu9gphrcpDXINvm0M9BskznnzJTE7gYkjDbxET28shDqp27wpruyx3C2S/dvEwiigBwLA1cz7lNUi0kw==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", + "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/helper-api-error": "1.11.0", - "@webassemblyjs/helper-wasm-bytecode": "1.11.0", - "@webassemblyjs/ieee754": "1.11.0", - "@webassemblyjs/leb128": "1.11.0", - "@webassemblyjs/utf8": "1.11.0" + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.1", + "@webassemblyjs/ieee754": "1.11.1", + "@webassemblyjs/leb128": "1.11.1", + "@webassemblyjs/utf8": "1.11.1" } }, "@webassemblyjs/wast-printer": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.0.tgz", - "integrity": "sha512-Fg5OX46pRdTgB7rKIUojkh9vXaVN6sGYCnEiJN1GYkb0RPwShZXp6KTDqmoMdQPKhcroOXh3fEzmkWmCYaKYhQ==", + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", + "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, "requires": { - "@webassemblyjs/ast": "1.11.0", + "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, @@ -787,9 +787,15 @@ "dev": true }, "acorn": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.1.1.tgz", - "integrity": "sha512-xYiIVjNuqtKXMxlRMDc6mZUhXehod4a3gbZ1qRlM7icK4EbxUFNLhWoPblCvFtB2Y9CIqHP3CF/rdxLItaQv8g==", + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-import-assertions": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", + "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", "dev": true }, "acorn-jsx": { @@ -1317,16 +1323,15 @@ "dev": true }, "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "buffer": { @@ -1431,9 +1436,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001230", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001230.tgz", - "integrity": "sha512-5yBd5nWCBS+jWKTcHOzXwo5xzcj4ePE/yjtkZyUV1BTUmrBaA9MRGC+e7mxnqXSA90CmCA8L3eKLaSUkt099IQ==", + "version": "1.0.30001466", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", + "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", "dev": true }, "caseless": { @@ -2179,9 +2184,9 @@ } }, "electron-to-chromium": { - "version": "1.3.740", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.740.tgz", - "integrity": "sha512-Mi2m55JrX2BFbNZGKYR+2ItcGnR4O5HhrvgoRRyZQlaMGQULqDhoGkLWHzJoshSzi7k1PUofxcDbNhlFrDZNhg==", + "version": "1.4.328", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", + "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==", "dev": true }, "emoji-regex": { @@ -2268,9 +2273,9 @@ } }, "es-module-lexer": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.4.1.tgz", - "integrity": "sha512-ooYciCUtfw6/d2w56UVeqHPcoCFAiJdz5XOkYpv/Txl1HMUozpXjz/2RIQgqwKdXNDPSF1W7mJCFse3G+HDyAA==", + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, "es5-ext": { @@ -4286,26 +4291,20 @@ "integrity": "sha512-QSwVdPtwdHRvY6zDD0GOZo5Fu7AdgfNDyizZWhk16jnrcLTPbmsww4WLDC+5wyxCWm8izZZfmjTVcicdreuJLw==" }, "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { "@types/node": "*", "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" + "supports-color": "^8.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -4328,10 +4327,10 @@ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-schema": { @@ -4487,9 +4486,9 @@ } }, "loader-runner": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.2.0.tgz", - "integrity": "sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true }, "locate-path": { @@ -5226,9 +5225,9 @@ } }, "node-releases": { - "version": "1.1.72", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.72.tgz", - "integrity": "sha512-LLUo+PpH3dU6XizX3iVoubUNheF/owjXCZZ5yACDxNnPtgFuludV1ZL3ayK1kVep42Rmm0+R9/Y60NQbZ2bifw==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, "normalize-package-data": { @@ -5627,6 +5626,12 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", @@ -6074,32 +6079,20 @@ "dev": true }, "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", + "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, "requires": { - "@types/json-schema": "^7.0.6", + "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, "dependencies": { - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true } } @@ -6369,12 +6362,6 @@ } } }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -6616,62 +6603,38 @@ } }, "terser": { - "version": "5.15.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.15.1.tgz", - "integrity": "sha512-K1faMUvpm/FBxjBXud0LWVAGxmvoPbZbfTCYbSgaaYQaIXI3/TdI7a7ZGA73Zrou6Q8Zmz3oeUTsp/dj+ag2Xw==", + "version": "5.16.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", + "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", "dev": true, "requires": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" - }, - "dependencies": { - "acorn": { - "version": "8.8.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", - "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", - "dev": true - } } }, "terser-webpack-plugin": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.1.1.tgz", - "integrity": "sha512-5XNNXZiR8YO6X6KhSGXfY0QrGrCRlSwAEjIIrlRQR4W8nP69TaJUlh3bkuac6zzgspiGPfKEHcY295MMVExl5Q==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", + "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dev": true, "requires": { - "jest-worker": "^26.6.2", - "p-limit": "^3.1.0", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.5.1" + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.5" }, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", "dev": true, "requires": { "randombytes": "^2.1.0" } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -7126,6 +7089,16 @@ "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -7310,9 +7283,9 @@ "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, "watchpack": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.1.tgz", - "integrity": "sha512-Oo7LXCmc1eE1AjyuSBmtC3+Wy4HcV8PxWh2kP6fOl8yTlNS7r0K9l1ao2lrrUza7V39Y3D/BbJgY8VeSlc5JKw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -7320,40 +7293,47 @@ } }, "webpack": { - "version": "5.34.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.34.0.tgz", - "integrity": "sha512-+WiFMgaZqhu7zKN64LQ7z0Ml4WWI+9RwG6zmS0wJDQXiCeg3hpN8fYFNJ+6WlosDT55yVxTfK7XHUAOVR4rLyA==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.47", - "@webassemblyjs/ast": "1.11.0", - "@webassemblyjs/wasm-edit": "1.11.0", - "@webassemblyjs/wasm-parser": "1.11.0", - "acorn": "^8.0.4", + "version": "5.76.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", + "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^0.0.51", + "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/wasm-edit": "1.11.1", + "@webassemblyjs/wasm-parser": "1.11.1", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.7.6", "browserslist": "^4.14.5", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.8.0", - "es-module-lexer": "^0.4.0", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.10.0", + "es-module-lexer": "^0.9.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.0.0", + "schema-utils": "^3.1.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.1", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" + "terser-webpack-plugin": "^5.1.3", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "dependencies": { + "@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, "enhanced-resolve": { - "version": "5.8.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.0.tgz", - "integrity": "sha512-Sl3KRpJA8OpprrtaIswVki3cWPiPKxXuFxJXBp+zNb6s6VwNWwFRUdtmzd2ReUut8n+sCPx7QCtQ7w5wfJhSgQ==", + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, "requires": { "graceful-fs": "^4.2.4", @@ -7361,30 +7341,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true } } @@ -7455,22 +7414,10 @@ } }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true }, "which": { "version": "2.0.2", diff --git a/package.json b/package.json index e70da57df..e12a676b7 100644 --- a/package.json +++ b/package.json @@ -1419,7 +1419,7 @@ "sinon": "^14.0.0", "ts-loader": "^9.2.6", "typescript": "^4.6.4", - "webpack": "^5.28.0", + "webpack": "^5.76.0", "webpack-cli": "^4.6.0" }, "dependencies": { From 32c918a6717a164c06c97fa205f6519550bf9678 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 14 Mar 2023 22:48:38 -0400 Subject: [PATCH 282/708] Changelog for 1.16.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 86c777358..83672d28a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## 1.16.0 (March 16th, 2023) + * performance - Allow language server to declare availability sooner by postponing autobuild. See [JLS#2527](https://github.com/eclipse/eclipse.jdt.ls/pull/2527). + * performance - Save operations need not run in workspace runnable when project is not unmanaged. See [JLS#2449](https://github.com/eclipse/eclipse.jdt.ls/pull/2449). + * enhancement - Implement method hierarchy through existing type hierarchy logic. See [#2991](https://github.com/redhat-developer/vscode-java/pull/2991). + * enhancement - Declare support for inlay hints through the language server specification. See [#2965](https://github.com/redhat-developer/vscode-java/pull/2965), [JLS#2365](https://github.com/eclipse/eclipse.jdt.ls/issues/2365). + * enhancement - Update types filter according to import declarations. See [#2943](https://github.com/redhat-developer/vscode-java/issues/2943). + * enhancement - Update to vscode-languageclient 8.1.0, LSP4J 0.20.0 (LSP 3.17.0). See [#2474](https://github.com/redhat-developer/vscode-java/issues/2474), [JLS#2348](https://github.com/eclipse/eclipse.jdt.ls/issues/2348). + * bug fix - Fix regression in extension startup for web-based editors. See [#2968](https://github.com/redhat-developer/vscode-java/issues/2968). + * bug fix - No completion on generic anonymous class instance objects. See [JLS#2505](https://github.com/eclipse/eclipse.jdt.ls/issues/2505). + * bug fix - Null Analysis does not work for Eclipse/Invisible projects. See [#2956](https://github.com/redhat-developer/vscode-java/issues/2956). + * bug fix - Unnecessary error marker for record constructor that uses varargs. See [#2640](https://github.com/redhat-developer/vscode-java/issues/2640). + * bug fix - Temporary fix to ensure refactoring document is displayed. See [#2975](https://github.com/redhat-developer/vscode-java/pull/2975). + * bug fix - In progress items should always be at the bottom in the server tasks view. See [#2627](https://github.com/redhat-developer/vscode-java/issues/2627). + * bug fix - Fix NPE in `textDocument/documentHighlight` requests. See [#2952](https://github.com/redhat-developer/vscode-java/issues/2952). + * bug fix - Update VS Code engine to 1.74.0. See [#2950](https://github.com/redhat-developer/vscode-java/issues/2950). + * build - Bump webpack from 5.34.0 to 5.76.0. See [#2999](https://github.com/redhat-developer/vscode-java/pull/2999). + * other - Add API to track LSP performance at the language client. See [#2996](https://github.com/redhat-developer/vscode-java/pull/2996). + ## 1.15.0 (February 20th, 2023) * performance - Skip generated methods when calculating document symbols. See [JLS#2446](https://github.com/eclipse/eclipse.jdt.ls/issues/2446). * performance - Make the debounce adaptive for the publish diagnostic job. See [JLS#2443](https://github.com/eclipse/eclipse.jdt.ls/pull/2443). @@ -20,7 +38,7 @@ * bug fix - Completion results should include filtered (excluded) types if they are also present in the import declarations. See [JLS#2467](https://github.com/eclipse/eclipse.jdt.ls/pull/2467). * bug fix - Fix type hierarchy regression since VS Code 1.75.1. See [#2930](https://github.com/redhat-developer/vscode-java/pull/2930). * bug fix - Re-publish diagnostics for null analysis configuration change when auto-build is disabled. See [JLS#2447](https://github.com/eclipse/eclipse.jdt.ls/pull/2447). - * bug fix - Dependency Analytics extension popup shoud respect user choice. See [#2892](https://github.com/redhat-developer/vscode-java/issues/2892). + * bug fix - Dependency Analytics extension popup should respect user choice. See [#2892](https://github.com/redhat-developer/vscode-java/issues/2892). * bug fix - Only do full build for a configuration change when auto-build is enabled. See [JLS#2437](https://github.com/eclipse/eclipse.jdt.ls/pull/2437). * bug fix - The command to upgrade gradle should check for cancellation prior to updating metadata files. See [JLS#2444](https://github.com/eclipse/eclipse.jdt.ls/pull/2444). * bug fix - Fix incorrect ordering of completion items that use a decorator. See [#2917](https://github.com/redhat-developer/vscode-java/issues/2917). @@ -42,9 +60,9 @@ * bug fix - Fix incorrect type hierarchy on multi module Maven projects. See [#2871](https://github.com/redhat-developer/vscode-java/issues/2871). * bug fix - Permit output folder to be the same as a source folder. See [#2786](https://github.com/redhat-developer/vscode-java/issues/2786). * bug fix - Organize imports removes static imports under some conditions. See [#2861](https://github.com/redhat-developer/vscode-java/issues/2861). - * bug fix - Fix completion issue occuring when invocation spans multiple lines. See [JLS#2387](https://github.com/eclipse/eclipse.jdt.ls/issues/2387). + * bug fix - Fix completion issue occurring when invocation spans multiple lines. See [JLS#2387](https://github.com/eclipse/eclipse.jdt.ls/issues/2387). * bug fix - Fix scope calculation for "Surround with try/catch" refactoring. See [#2711](https://github.com/redhat-developer/vscode-java/issues/2711). - * bug fix - Fix NPE occuring when completion item is selected. See [JLS#2376](https://github.com/eclipse/eclipse.jdt.ls/issues/2376). + * bug fix - Fix NPE occurring when completion item is selected. See [JLS#2376](https://github.com/eclipse/eclipse.jdt.ls/issues/2376). * bug fix - Log user friendly error if client does not support `_java.reloadBundles.command`. See [JLS#2370](https://github.com/eclipse/eclipse.jdt.ls/pull/2370). * bug fix - Postfix completion should not be available when editing Javadoc. See [JLS#2367](https://github.com/eclipse/eclipse.jdt.ls/issues/2367). * bug fix - Update m2e to latest version in order to ensure classpath resources persist. See [#2857](https://github.com/redhat-developer/vscode-java/issues/2857). From f56d0927544f883fd6f4ed584aace01ecba2171a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 16 Mar 2023 14:23:58 -0400 Subject: [PATCH 283/708] Upversion to 1.17.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f0bb24bb..b73799ac1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.16.0", + "version": "1.17.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index e12a676b7..4c6cb3b9e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.16.0", + "version": "1.17.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 56b25162c6e5bee671fbe4115f3e10d12aec8e89 Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 17 Mar 2023 13:02:07 +0800 Subject: [PATCH 284/708] Support change signature refactoring (#2967) --------- Signed-off-by: Shi Chen --- .vscode/launch.json | 14 +- document/_java.learnMoreAboutRefactorings.md | 39 +- document/refactoring_change_signature.png | Bin 0 -> 33537 bytes package-lock.json | 314 +++++++++- package.json | 11 +- src/log.ts | 2 +- src/markdownPreviewProvider.ts | 12 +- src/refactorAction.ts | 5 + src/refactoring/changeSignaturePanel.ts | 192 ++++++ src/webview/changeSignature/App.css | 157 +++++ src/webview/changeSignature/App.tsx | 594 +++++++++++++++++++ src/webview/changeSignature/index.tsx | 10 + src/webview/vscodeApiWrapper.ts | 41 ++ src/webviewUtils.ts | 14 + test/lightweight-mode-suite/index.ts | 4 +- test/standard-mode-suite/extension.test.ts | 2 +- test/standard-mode-suite/index.ts | 4 +- tsconfig.json | 16 +- webpack.config.js | 43 +- 19 files changed, 1428 insertions(+), 46 deletions(-) create mode 100644 document/refactoring_change_signature.png create mode 100644 src/refactoring/changeSignaturePanel.ts create mode 100644 src/webview/changeSignature/App.css create mode 100644 src/webview/changeSignature/App.tsx create mode 100644 src/webview/changeSignature/index.tsx create mode 100644 src/webview/vscodeApiWrapper.ts create mode 100644 src/webviewUtils.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index dda897afd..0ad69b7cd 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -7,6 +7,7 @@ "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", + "debugWebviews": true, "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], "env": { "DEBUG_VSCODE_JAVA":"true" @@ -14,7 +15,11 @@ "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], - "preLaunchTask": "npm: watch" + "preLaunchTask": "npm: watch", + "rendererDebugOptions": { + "urlFilter": "*redhat.java*", + "sourceMaps": true, + } }, { "name": "Launch Extension - Remote Server", @@ -36,6 +41,7 @@ "type": "extensionHost", "request": "launch", "runtimeExecutable": "${execPath}", + "debugWebviews": true, "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], "stopOnEntry": false, "sourceMaps": true, @@ -44,7 +50,11 @@ "JDTLS_CLIENT_PORT": "5036", "DEBUG_VSCODE_JAVA":"true" }, - "preLaunchTask": "npm: watch" + "preLaunchTask": "npm: watch", + "rendererDebugOptions": { + "urlFilter": "*redhat.java*", + "sourceMaps": true, + } }, { "name": "Launch Extension - SyntaxLS Client", diff --git a/document/_java.learnMoreAboutRefactorings.md b/document/_java.learnMoreAboutRefactorings.md index eec0591ee..1af09cf3d 100644 --- a/document/_java.learnMoreAboutRefactorings.md +++ b/document/_java.learnMoreAboutRefactorings.md @@ -18,7 +18,9 @@ - [Inline constant](#inline-constant) - [Inline local variable](#inline-local-variable) - [Inline method](#inline-method) -- [Introduce Parameter](#introduce-parameter) +- Method signature + - [Introduce Parameter](#introduce-parameter) + - [Change method signature](#change-method-signature) - Invert boolean - [Invert conditions](#invert-conditions) - [Invert local variable](#invert-local-variable) @@ -469,6 +471,41 @@ public void addUser(String name) { } ``` +--- + +## Change Method Signature +Changes the method visibility, return type, name, and updates the parameters and exceptions. The above changes can be applied through the call hierarchy of the method. + +### Example +Let's change signature for the method `public void setAddress(String address)`. + +#### Before + +```java +public void setAddress(String address) { + this.address = address; +} + +public void setAddr() { + this.setAddress("Addr"); +} +``` + +#### Refactor configuration + +![change_signature](./refactoring_change_signature.png) +#### After +```java +public void setAddress1(Object newParam, String address) { + this.address = address; +} + +public void setAddr() { + this.setAddress1(null, "Addr"); +} +``` +--- + ## Invert conditions Inverts the boolean expression in the conditions. diff --git a/document/refactoring_change_signature.png b/document/refactoring_change_signature.png new file mode 100644 index 0000000000000000000000000000000000000000..6690f7471fd26d4b258e1ae6211fa9cace6c6636 GIT binary patch literal 33537 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 z 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 { - const nonce: string = this.getNonce(); + const nonce: string = getNonce(); const styles: string = this.getStyles(webview, context); let body: string | undefined = this.documentCache.get(markdownFilePath); if (!body) { @@ -93,15 +94,6 @@ class MarkdownPreviewProvider implements Disposable { ]; return styles.map((styleUri: Uri) => ``).join('\n'); } - - private getNonce(): string { - let text = ""; - const possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; - for (let i = 0; i < 32; i++) { - text += possible.charAt(Math.floor(Math.random() * possible.length)); - } - return text; - } } export const markdownPreviewProvider: MarkdownPreviewProvider = new MarkdownPreviewProvider(); diff --git a/src/refactorAction.ts b/src/refactorAction.ts index bc90e103d..068998ccb 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -7,6 +7,7 @@ import { FormattingOptions, WorkspaceEdit, RenameFile, DeleteFile, TextDocumentE import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest } from './protocol'; +import { ChangeSignaturePanel } from './refactoring/changeSignaturePanel'; import { getExtractInterfaceArguments, revealExtractedInterface } from './refactoring/extractInterface'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { @@ -40,6 +41,7 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E || command === 'extractMethod' || command === 'extractField' || command === 'extractInterface' + || command === 'changeSignature' || command === 'assignField' || command === 'convertVariableToField' || command === 'invertVariable' @@ -109,6 +111,9 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E return; } commandArguments.push(...args); + } else if (command === 'changeSignature') { + ChangeSignaturePanel.render(context.extensionUri, languageClient, command, params, formattingOptions, commandInfo); + return; } const result: RefactorWorkspaceEdit = await languageClient.sendRequest(GetRefactorEditRequest.type, { diff --git a/src/refactoring/changeSignaturePanel.ts b/src/refactoring/changeSignaturePanel.ts new file mode 100644 index 000000000..66c98f7d3 --- /dev/null +++ b/src/refactoring/changeSignaturePanel.ts @@ -0,0 +1,192 @@ +import * as path from "path"; +import { Disposable, Webview, WebviewPanel, window, Uri, ViewColumn, workspace, WorkspaceEdit } from "vscode"; +import { LanguageClient } from "vscode-languageclient/node"; +import { GetRefactorEditRequest, RefactorWorkspaceEdit } from "../protocol"; +import { getNonce, getUri } from "../webviewUtils"; + +interface MethodParameter { + type: string; + name: string; + defaultValue: string; + originalIndex: number; +} + +interface MethodException { + type: string; + typeHandleIdentifier: string; +} + +export class ChangeSignaturePanel { + public static type = "java.refactor.changeSignature"; + public static title = "Refactor: Change Method Signature"; + public static currentPanel: ChangeSignaturePanel | undefined; + private readonly panel: WebviewPanel; + private disposables: Disposable[] = []; + + // method matadata + private methodIdentifier: string | undefined; + private methodName: string | undefined; + private modifier: string | undefined; + private returnType: string | undefined; + private parameters: MethodParameter[] | undefined; + private exceptions: MethodException[] | undefined; + + // refactor metadata + private languageClient: LanguageClient; + private params: any; + private formattingOptions: any; + private command: any; + + private constructor(panel: WebviewPanel, extensionUri: Uri) { + this.panel = panel; + this.panel.onDidDispose(() => this.dispose(), null, this.disposables); + this.panel.webview.html = this.getWebviewContent(this.panel.webview, extensionUri); + this.setWebviewMessageListener(this.panel.webview); + } + + public static render(extensionUri: Uri, languageClient: LanguageClient, command: any, params: any, formattingOptions: any, commandInfo: any) { + if (ChangeSignaturePanel.currentPanel) { + if (!commandInfo?.methodIdentifier) { + // the new method to do refactoring is not available, just reveal the current panel. + ChangeSignaturePanel.currentPanel.panel.reveal(ViewColumn.Beside); + return; + } + if (commandInfo.methodIdentifier === ChangeSignaturePanel.currentPanel.methodIdentifier) { + // the new method to do refactoring is the same as the old one, just reveal the current panel. + ChangeSignaturePanel.currentPanel.panel.reveal(ViewColumn.Beside); + return; + } else { + window.showInformationMessage(`Change Method Signature for '${ChangeSignaturePanel.currentPanel.methodName}' is in process. Would you like to reveal or abort it?`, "Reveal", "Abort").then(async (selection) => { + if (selection === "Reveal") { + ChangeSignaturePanel.currentPanel.panel.reveal(ViewColumn.Beside); + } else if (selection === "Abort") { + ChangeSignaturePanel.currentPanel.dispose(); + ChangeSignaturePanel.render(extensionUri, languageClient, command, params, formattingOptions, commandInfo); + } + }); + } + } else { + const panel = window.createWebviewPanel( + ChangeSignaturePanel.type, + ChangeSignaturePanel.title, + ViewColumn.Beside, + { + enableCommandUris: true, + enableScripts: true, + localResourceRoots: [Uri.joinPath(extensionUri, "dist")], + retainContextWhenHidden: true, + } + ); + panel.iconPath = Uri.file(path.join(extensionUri.fsPath, "icons", "icon128.png")); + ChangeSignaturePanel.currentPanel = new ChangeSignaturePanel(panel, extensionUri); + ChangeSignaturePanel.currentPanel.setMetadata(languageClient, command, params, formattingOptions, commandInfo); + } + } + + public setMetadata(languageClient: LanguageClient, command: any, params: any, formattingOptions: any, commandInfo: any) { + this.languageClient = languageClient; + this.command = command; + this.params = params; + this.formattingOptions = formattingOptions; + this.methodIdentifier = commandInfo.methodIdentifier; + this.methodName = commandInfo.methodName as string; + this.modifier = commandInfo.modifier as string; + this.returnType = commandInfo.returnType as string; + this.parameters = commandInfo.parameters as MethodParameter[]; + this.exceptions = commandInfo.exceptions as MethodException[]; + } + + public dispose() { + ChangeSignaturePanel.currentPanel = undefined; + this.panel.dispose(); + while (this.disposables.length) { + const disposable = this.disposables.pop(); + if (disposable) { + disposable.dispose(); + } + } + } + + private getWebviewContent(webview: Webview, extensionUri: Uri) { + + const scriptUri = getUri(webview, extensionUri, [ + "dist", + "changeSignature.js", + ]); + + const nonce = getNonce(); + + return /* html*/ ` + + + + + + + Change Signature + + +
+ + + + `; + } + + private setWebviewMessageListener(webview: Webview) { + webview.onDidReceiveMessage( + async (message: any) => { + const command = message.command; + switch (command) { + case "webviewReady": + await this.panel.webview.postMessage({ + command: "setInitialState", + methodIdentifier: this.methodIdentifier, + methodName: this.methodName, + modifier: this.modifier, + returnType: this.returnType, + parameters: this.parameters, + exceptions: this.exceptions + }); + break; + case "doRefactor": + if (await this.doRefactor(message.methodIdentifier, message.isDelegate, message.methodName, message.accessType, message.returnType, message.parameters, message.exceptions, message.preview)) { + this.dispose(); + } + break; + } + }, + undefined, + this.disposables + ); + } + + /** + * refactor the method with the given parameters. + * + * @param methodIdentifier the handle identifier of the method to refactor. + * @param isDelegate if true, the method will be refactored to a delegate method. + * @param methodName the new name of the method. + * @param accessType the new access type of the method. + * @param returnType the new return type of the method. + * @param parameters the new parameters of the method. + * @param exceptions the new exceptions of the method. + * @param preview if true, the refactoring will be previewed before applied. + * @returns true if the refactoring is successful, false otherwise. + */ + private async doRefactor(methodIdentifier: string, isDelegate: boolean, methodName: string, accessType: string, returnType: string, parameters: MethodParameter[], exceptions: MethodException[], preview: boolean): Promise { + const clientWorkspaceEdit: RefactorWorkspaceEdit = await this.languageClient.sendRequest(GetRefactorEditRequest.type, { + command: this.command, + context: this.params, + options: this.formattingOptions, + commandArguments: [methodIdentifier, isDelegate, methodName, accessType, returnType, parameters, exceptions, preview] + }); + if (clientWorkspaceEdit?.edit) { + const codeEdit: WorkspaceEdit = await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(clientWorkspaceEdit.edit); + if (codeEdit) { + return workspace.applyEdit(codeEdit); + } + } + return false; + } +} diff --git a/src/webview/changeSignature/App.css b/src/webview/changeSignature/App.css new file mode 100644 index 000000000..2feef25ea --- /dev/null +++ b/src/webview/changeSignature/App.css @@ -0,0 +1,157 @@ +@import "../../../node_modules/@vscode/codicons/dist/codicon.css"; + +main { + max-width: 600px; + margin-left: auto; + margin-right: auto; +} + +.section { + margin-bottom: 0; +} + +.section-columns { + display: flex; + width: 100%; + padding-left: calc(var(--design-unit) * 1px); +} + +.text-title { + margin: 0; + height: calc(var(--input-height) * 0.8px); +} + +.text-title-content { + padding: 0 0 0 calc(var(--design-unit) * 1px); + margin: 0.5rem 0 0 0; + height: calc(var(--input-height) * 0.8px); +} + +.header-left { + flex-direction: column; + display: flex; + padding: 0.5rem 0.5rem 0.5rem 0; + flex: 0 0 33%; + box-sizing: border-box; +} + +.header { + flex-direction: column; + display: flex; + padding: 0.5rem; + flex: 0 0 33%; + box-sizing: border-box; +} + +.header-right { + flex-direction: column; + display: flex; + padding: 0.5rem 0 0.5rem 0.5rem; + flex: 0 0 33%; + box-sizing: border-box; +} + +.vsc-button-left { + float: left; + margin: 0 0.5rem 0.5rem 0; +} + +.vsc-button { + float: left; + margin: 0 0.5rem 0.5rem 0.5rem; +} + +.add-button { + margin: 0.5rem 0 0 0; +} + +.bottom-buttons { + padding: 0 0 0 calc(var(--design-unit) * 1px); + margin: 0.5rem 0 0 0; +} + +.preview { + padding: 0 0 0 calc(var(--design-unit) * 1px); + margin: 0 0 0.5rem 0; + width: 99%; +} + +.parameters-panel { + margin: 0; + width: calc(99% + 4px); +} + +.parameters-view { + padding: 0 0 0 calc(var(--design-unit) * 1px); + flex-direction: column; +} + +.parameter-cell { + padding-left: 0; + pointer-events: none; +} + +.parameter-cell-title { + padding-left: 0; +} + +.parameter-cell-title:focus { + border-color: var(--vscode-keybindingTable-headerBackground); + background-color: inherit; + color: inherit; +} + +.parameter-cell-header { + background-color: var(--vscode-keybindingTable-headerBackground); +} + +.parameter-cell-edit { + padding-left: 0; + background-color: var(--vscode-input-background); +} + +.parameter-cell-edit-button { + padding: 0; + border: 0; + display: flex; + justify-content: right; + background-color: var(--vscode-input-background); +} + +.parameter-cell-button { + padding: 0; + border: 0; + display: flex; + justify-content: right; +} + +.parameter-cell-button:focus { + background-color: inherit; +} + +.parameter-cell-button:active { + background-color: inherit; +} + +.table-buttons { + display: inline-flex; +} + +.table-buttons-edit { + display: inline-flex; + background-color: var(--vscode-editor-background); +} + +.table-buttons-edit-ok { + margin-left: 0.2rem; + margin-right: 0.2rem; +} + +.table-buttons-edit-cancel { + margin: 0; +} + +.delegate { + padding: 0 0 0 calc(var(--design-unit) * 1px); + margin: 0.5rem 0 0.5rem 0; +} diff --git a/src/webview/changeSignature/App.tsx b/src/webview/changeSignature/App.tsx new file mode 100644 index 000000000..8535ab2de --- /dev/null +++ b/src/webview/changeSignature/App.tsx @@ -0,0 +1,594 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +/* eslint-disable @typescript-eslint/prefer-for-of */ +import { VSCodeButton, VSCodeTextField, VSCodeDropdown, VSCodeOption, VSCodeCheckbox, VSCodePanels, VSCodePanelTab, VSCodePanelView, VSCodeDataGrid, VSCodeDataGridCell, VSCodeDataGridRow, VSCodeTextArea } from "@vscode/webview-ui-toolkit/react"; +import "./App.css"; +import React from "react"; +import { vscode } from "../vscodeApiWrapper"; +import _ from "lodash"; + +type State = UIState & Metadata; + +interface UIState { + focusRow: number; + editParameterRow: number; + editExceptionRow: number; +} + +interface Metadata { + methodIdentifier: string | undefined; + isDelegate: boolean; + methodName: string | undefined; + accessType: string | undefined; + returnType: string | undefined; + parameters: MethodParameter[]; + exceptions: MethodException[]; +} + +interface MethodParameter { + type: string; + name: string; + defaultValue: string; + originalIndex: number; +} + +interface MethodException { + type: string; + typeHandleIdentifier: string | undefined; +} + +export class App extends React.Component<{}, State> { + + private initialMetadata: Metadata; + private static TOOLTIP_RETURN_TYPE: string = "The method return type, can be either name or fully qualified name of the type."; + private static TOOLTIP_PARAMETER_TYPE: string = "The parameter type, can be either name or fully qualified name of the type."; + private static TOOLTIP_PARAMETER_DEFAULT: string = "The parameter default value, used when replacing the occurrences for an added parameter."; + private static TOOLTIP_EXCEPTION_TYPE: string = "The exception type, can be either name or fully qualified name of the type."; + + constructor(props: any) { + super(props); + this.state = { + focusRow: -1, + editParameterRow: -1, + editExceptionRow: -1, + methodIdentifier: undefined, + isDelegate: false, + methodName: undefined, + accessType: undefined, + returnType: undefined, + parameters: [], + exceptions: [] + }; + } + + doRefactor = (preview: boolean) => { + vscode.postMessage({ + preview: preview, + command: "doRefactor", + methodIdentifier: this.state.methodIdentifier, + isDelegate: this.state.isDelegate, + accessType: this.getModifierString(this.state.accessType), + methodName: this.state.methodName, + returnType: this.state.returnType, + parameters: this.state.parameters, + exceptions: this.state.exceptions, + }); + }; + + onChange = (event: any) => { + const id = event.target.id as string; + if (!id) { + return; + } + if (id === "access-modifier") { + this.setState({ + accessType: event.target.value + }); + } else if (id === "returnType") { + this.setState({ + returnType: event.target.value + }); + } else if (id === "methodName") { + this.setState({ + methodName: event.target.value + }); + } + return; + }; + + getPreview = () => { + let parameters = ""; + for (let i = 0; i < this.state.parameters.length; i++) { + parameters += `${this.state.parameters[i].type} ${this.state.parameters[i].name}, `; + } + parameters = parameters.substring(0, parameters.length - 2); + let exceptions = ""; + if (this.state.exceptions.length) { + exceptions = " throws "; + for (let i = 0; i < this.state.exceptions.length; i++) { + exceptions += `${this.state.exceptions[i].type}, `; + } + exceptions = exceptions.substring(0, exceptions.length - 2); + } + let accessTypeString = this.getModifierString(this.state.accessType); + if (accessTypeString?.length) { + accessTypeString += " "; + } + return `${accessTypeString}${this.state.returnType} ${this.state.methodName}(${parameters})${exceptions}`; + }; + + onClick = (event: any) => { + const id = event.target.id as string; + if (!id) { + return; + } + if (id === "refactor") { + this.doRefactor(false); + } else if (id === "preview") { + this.doRefactor(true); + } else if (id === "reset") { + this.setState({ + methodIdentifier: this.initialMetadata.methodIdentifier, + isDelegate: this.initialMetadata.isDelegate, + accessType: this.initialMetadata.accessType, + methodName: this.initialMetadata.methodName, + returnType: this.initialMetadata.returnType, + parameters: _.cloneDeep(this.initialMetadata.parameters), + exceptions: _.cloneDeep(this.initialMetadata.exceptions), + focusRow: -1, + editParameterRow: -1, + editExceptionRow: -1, + }); + } else if (id === "addParameter") { + const parameterNames = this.state.parameters.map(e => { + return e.name; + }); + let newParameterName: string = "newParam"; + let i = 1; + while (parameterNames.includes(newParameterName)) { + i++; + newParameterName = `newParam${i}`; + } + this.setState({ + parameters: [...this.state.parameters, { + type: "Object", + name: newParameterName, + defaultValue: "null", + originalIndex: -1 + }] + }); + } else if (id.startsWith("removeParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + this.setState({ + parameters: this.state.parameters.filter((e, i) => { + return i !== selectedRowNumber; + }) + }); + } else if (id.startsWith("editParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + this.setState({ + editParameterRow: selectedRowNumber, + editExceptionRow: -1, + focusRow: -1, + }); + const elementToSelect = document.getElementById(`parameterType-${selectedRowNumber}`); + if (elementToSelect) { + elementToSelect.focus(); + } + } else if (id.startsWith("editException")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + this.setState({ + editParameterRow: -1, + editExceptionRow: selectedRowNumber, + focusRow: -1, + }); + const elementToSelect = document.getElementById(`exceptionType-${selectedRowNumber}`); + if (elementToSelect) { + elementToSelect.focus(); + } + } else if (id.startsWith("upParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const currentParameters = this.state.parameters; + const temp = currentParameters[selectedRowNumber - 1]; + currentParameters[selectedRowNumber - 1] = currentParameters[selectedRowNumber]; + currentParameters[selectedRowNumber] = temp; + this.setState({ + parameters: currentParameters + }); + } else if (id.startsWith("downParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const currentParameters = this.state.parameters; + const temp = currentParameters[selectedRowNumber + 1]; + currentParameters[selectedRowNumber + 1] = currentParameters[selectedRowNumber]; + currentParameters[selectedRowNumber] = temp; + this.setState({ + parameters: currentParameters + }); + } else if (id === "addException") { + const exceptionNames = this.state.exceptions.map(e => { + return e.type; + }); + let newExceptionName: string = "Exception"; + let i = 1; + while (exceptionNames.includes(newExceptionName)) { + i++; + newExceptionName = `Exception${i}`; + } + this.setState({ + exceptions: [...this.state.exceptions, { + type: newExceptionName, + typeHandleIdentifier: undefined, + }] + }); + } else if (id.startsWith("removeException")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + this.setState({ + exceptions: this.state.exceptions.filter((e, i) => { + return i !== selectedRowNumber; + }) + }); + } else if (id === "delegate") { + this.setState({ + isDelegate: event.target.checked + }); + } else if (id.startsWith("confirmParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const parameterType = document.getElementById(`parameterType-${selectedRowNumber}`); + const parameterName = document.getElementById(`parameterName-${selectedRowNumber}`); + const parameterDefault = this.isDefaultValueEditable(selectedRowNumber) ? document.getElementById(`parameterDefault-${selectedRowNumber}`) : undefined; + this.setState({ + parameters: this.state.parameters.map((e, i) => { + if (i === selectedRowNumber) { + if (parameterType?.outerText) { + e.type = parameterType.outerText; + } + if (parameterName?.outerText) { + e.name = parameterName.outerText; + } + if (parameterDefault?.outerText) { + e.defaultValue = parameterDefault.outerText; + } + } + return e; + }), + editParameterRow: -1, + editExceptionRow: -1, + focusRow: -1 + }); + } else if (id.startsWith("cancelParameter")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const parameterType = document.getElementById(`parameterType-${selectedRowNumber}`); + if (parameterType) { + parameterType.textContent = this.state.parameters[selectedRowNumber].type; + } + const parameterName = document.getElementById(`parameterName-${selectedRowNumber}`); + if (parameterName) { + parameterName.textContent = this.state.parameters[selectedRowNumber].name; + } + if (this.isDefaultValueEditable(selectedRowNumber)) { + const parameterDefault = document.getElementById(`parameterDefault-${selectedRowNumber}`); + if (parameterDefault) { + parameterDefault.textContent = this.state.parameters[selectedRowNumber].defaultValue; + } + } + this.setState({ + editParameterRow: -1, + editExceptionRow: -1, + focusRow: -1 + }); + } else if (id.startsWith("confirmException")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const exceptionType = document.getElementById(`exceptionType-${selectedRowNumber}`); + this.setState({ + exceptions: this.state.exceptions.map((e, i) => { + if (i === selectedRowNumber) { + if (exceptionType?.outerText) { + e.type = exceptionType.outerText; + } + } + return e; + }), + editParameterRow: -1, + editExceptionRow: -1, + focusRow: -1 + }); + } else if (id.startsWith("cancelException")) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber === undefined) { + return; + } + const exceptionType = document.getElementById(`exceptionType-${selectedRowNumber}`); + if (exceptionType) { + exceptionType.textContent = this.state.exceptions[selectedRowNumber].type; + } + this.setState({ + editParameterRow: -1, + editExceptionRow: -1, + focusRow: -1 + }); + } + }; + + handleMessage = (event: any) => { + const { data } = event; + const command = data.command as string; + if (command === "setInitialState") { + this.initialMetadata = { + methodIdentifier: data.methodIdentifier, + isDelegate: false, + accessType: this.getAccessTypeString(data.modifier), + methodName: data.methodName, + returnType: data.returnType, + parameters: data.parameters, + exceptions: data.exceptions, + }; + this.setState({ + methodIdentifier: this.initialMetadata.methodIdentifier, + isDelegate: this.initialMetadata.isDelegate, + accessType: this.initialMetadata.accessType, + methodName: this.initialMetadata.methodName, + returnType: this.initialMetadata.returnType, + parameters: _.cloneDeep(this.initialMetadata.parameters), + exceptions: _.cloneDeep(this.initialMetadata.exceptions), + }); + } + }; + + onMouseEnter = (event: any) => { + const id = event.target.id as string; + if (id.includes("Header")) { + this.setState({ + focusRow: -1 + }); + } else if (id) { + const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); + if (selectedRowNumber !== undefined) { + this.setState({ + focusRow: selectedRowNumber + }); + } + } + }; + + onMouseLeave = (event: any) => { + this.setState({ + focusRow: -1 + }); + }; + + componentDidMount(): void { + this.setTextAreaCursorStyle(); + window.addEventListener("message", this.handleMessage); + vscode.postMessage({ + command: "webviewReady" + }); + } + + isUnchanged = () => { + return this.state.isDelegate === this.initialMetadata?.isDelegate + && this.state.accessType === this.initialMetadata?.accessType + && this.state.methodName === this.initialMetadata?.methodName + && this.state.returnType === this.initialMetadata?.returnType + && this.isArrayEqual(this.state.parameters, this.initialMetadata?.parameters) + && this.isArrayEqual(this.state.exceptions, this.initialMetadata?.exceptions); + }; + + isArrayEqual = (a: any[], b: any[]) => { + return Array.isArray(a) && Array.isArray(b) && a.length === b.length && a.every((e, i) => this.objectsEqual(e, b[i])); + }; + + objectsEqual = (o1, o2) => { + return typeof o1 === 'object' && Object.keys(o1).length > 0 + ? Object.keys(o1).length === Object.keys(o2).length + && Object.keys(o1).every(p => this.objectsEqual(o1[p], o2[p])) + : o1 === o2; + }; + + /** + * Set the cursor style of the text area to text. Since the text area is + * inside a shadow DOM, we need to add a style element to the shadow DOM. + */ + setTextAreaCursorStyle(): void { + const host = document.getElementById("textArea"); + if (host?.shadowRoot) { + const style = document.createElement('style'); + style.innerHTML = '.control { cursor: text !important; }'; + host.shadowRoot.appendChild(style); + } + } + + isDefaultValueEditable = (row: number) => { + return this.state.parameters[row].originalIndex === -1; + }; + + getDefaultValue = (row: number) => { + return this.isDefaultValueEditable(row) ? this.state.parameters[row].defaultValue : "-"; + }; + + generateParameterDataGridRow = (row: number) => { + return + {this.state.parameters[row].type} + {this.state.parameters[row].name} + {this.getDefaultValue(row)} + + {row === this.state.editParameterRow ? +
+ OK + Cancel +
: row === this.state.focusRow ?
+ {row === 0 ? <> : + + } + {row === this.state.parameters.length - 1 ? <> : + + } + + + + + + +
:
+ } +
+
; + }; + + generateExceptionDataGridRow = (row: number) => { + return + {this.state.exceptions[row].type} + + {row === this.state.editExceptionRow ? +
+ OK + Cancel +
: row === this.state.focusRow ?
+ + + + + + +
:
+ } +
+
; + }; + + render = () => { + return ( +
+

Change Method Signature

+
+
+
+
Access modifier:
+ + public + protected + package-private + private + +
+
+
Return type:
+ +
+
+
Method name:
+ +
+
+
+ + Parameters + Exceptions + + + + Type + Name + Default value + + + { + (() => { + const options = []; + for (let row = 0; row < this.state.parameters.length; row++) { + options.push(this.generateParameterDataGridRow(row)); + } + return options; + })() + } + +
+ Add +
+
+ + + + Type + + + { + (() => { + const options = []; + for (let row = 0; row < this.state.exceptions.length; row++) { + options.push(this.generateExceptionDataGridRow(row)); + } + return options; + })() + } + +
+ Add +
+
+
+
Method signature:
+ + Keep original method as delegate to changed method +
+ Refactor + Preview + Reset +
+
+ ); + }; + + /** + * get the row number of the item id. The format is `${description}-${rowNumber}`. + * @param id the item id + * @returns the row number, or undefined if the id is not in the correct format + */ + private getSelectedRowNumber(id: string): number | undefined { + const idSplit: string[] = id.split("-"); + if (idSplit.length !== 2) { + return undefined; + } + return Number(idSplit[1]); + } + + private getModifierString(accessType: string): string { + if (accessType === "package-private") { + return ""; + } + return accessType; + } + + private getAccessTypeString(visibility: string): string { + if (visibility === "") { + return "package-private"; + } + return visibility; + } + +} diff --git a/src/webview/changeSignature/index.tsx b/src/webview/changeSignature/index.tsx new file mode 100644 index 000000000..16e025841 --- /dev/null +++ b/src/webview/changeSignature/index.tsx @@ -0,0 +1,10 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import { App } from "./App"; + +ReactDOM.render( + + + , + document.getElementById("root") +); diff --git a/src/webview/vscodeApiWrapper.ts b/src/webview/vscodeApiWrapper.ts new file mode 100644 index 000000000..0b0eaa011 --- /dev/null +++ b/src/webview/vscodeApiWrapper.ts @@ -0,0 +1,41 @@ +import type { WebviewApi } from "vscode-webview"; + +/** + * A utility wrapper around the acquireVsCodeApi() function, which enables + * message passing and state management between the webview and extension + * contexts. + * + * This utility also enables webview code to be run in a web browser-based + * dev server by using native web browser features that mock the functionality + * enabled by acquireVsCodeApi. + */ +class VSCodeAPIWrapper { + private readonly vsCodeApi: WebviewApi | undefined; + + constructor() { + // Check if the acquireVsCodeApi function exists in the current development + // context (i.e. VS Code development window or web browser) + if (typeof acquireVsCodeApi === "function") { + this.vsCodeApi = acquireVsCodeApi(); + } + } + + /** + * Post a message (i.e. send arbitrary data) to the owner of the webview. + * + * @remarks When running webview code inside a web browser, postMessage will instead + * log the given message to the console. + * + * @param message Abitrary data (must be JSON serializable) to send to the extension context. + */ + public postMessage(message: unknown) { + if (this.vsCodeApi) { + this.vsCodeApi.postMessage(message); + } else { + console.log(`VS Code API not available, raw message: ${message}`); + } + } +} + +// Exports class singleton to prevent multiple invocations of acquireVsCodeApi. +export const vscode = new VSCodeAPIWrapper(); diff --git a/src/webviewUtils.ts b/src/webviewUtils.ts new file mode 100644 index 000000000..394fd9410 --- /dev/null +++ b/src/webviewUtils.ts @@ -0,0 +1,14 @@ +import { Uri, Webview } from "vscode"; + +export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { + return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); +} + +export function getNonce() { + let text = ""; + const possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + for (let i = 0; i < 32; i++) { + text += possible.charAt(Math.floor(Math.random() * possible.length)); + } + return text; +} diff --git a/test/lightweight-mode-suite/index.ts b/test/lightweight-mode-suite/index.ts index b04cc328f..895e94daf 100644 --- a/test/lightweight-mode-suite/index.ts +++ b/test/lightweight-mode-suite/index.ts @@ -11,8 +11,8 @@ // a possible error to the callback or null if none. import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import Mocha from 'mocha'; +import glob from 'glob'; export function run(testsRoot: string): Promise { const mocha = new Mocha({ diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 0634c730a..4dd115224 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -1,4 +1,4 @@ -import * as assert from 'assert'; +import assert from 'assert'; import * as fs from 'fs'; import * as path from 'path'; import { env } from 'process'; diff --git a/test/standard-mode-suite/index.ts b/test/standard-mode-suite/index.ts index b04cc328f..895e94daf 100644 --- a/test/standard-mode-suite/index.ts +++ b/test/standard-mode-suite/index.ts @@ -11,8 +11,8 @@ // a possible error to the callback or null if none. import * as path from 'path'; -import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import Mocha from 'mocha'; +import glob from 'glob'; export function run(testsRoot: string): Promise { const mocha = new Mocha({ diff --git a/tsconfig.json b/tsconfig.json index 0a41f04d8..fe775f7f6 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,13 +2,23 @@ "compilerOptions": { "target": "es6", "lib": [ - "es6" - ], + "es6", + "DOM" + ], "module": "commonjs", "moduleResolution": "node", "outDir": "out", "sourceMap": true, - "plugins": [{ "name": "eslint" }] + "plugins": [ + { + "name": "eslint" + } + ], + /* Enabled for React */ + "jsx": "react-jsx", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, }, "exclude": [ "node_modules", diff --git a/webpack.config.js b/webpack.config.js index eec53b45c..a189186c0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -3,6 +3,7 @@ //@ts-check const ESLintWebpackPlugin = require('eslint-webpack-plugin'); +const webpack = require('webpack'); const path = require('path'); /**@type {import('webpack').Configuration}*/ @@ -51,4 +52,44 @@ const config = { level: 'log', }, } -module.exports = config; + +const configAssets = { + name: 'assets', + mode: 'none', + entry: { + changeSignature: './src/webview/changeSignature/index.tsx', + }, + module: { + rules: [{ + test: /\.ts(x?)$/, + exclude: /node_modules/, + use: 'ts-loader' + }, { + test: /\.(css)$/, + use: [{ + loader: 'style-loader' + }, { + loader: 'css-loader' + }] + }, { + test: /\.(ttf)$/, + type: 'asset/inline', + }] + }, + output: { + filename: '[name].js', + path: path.resolve(__dirname, 'dist'), + publicPath: '/', + devtoolModuleFilenameTemplate: "../[resource-path]" + }, + plugins: [ + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ], + devtool: 'source-map', + resolve: { + extensions: ['.js', '.ts', '.tsx'] + } +} +module.exports = [config, configAssets]; From 5a168097f3346226b8b24ff05300526b1efbe4cc Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Mon, 20 Mar 2023 14:58:01 +0800 Subject: [PATCH 285/708] Add separate tsconfig for webview development (#3009) Signed-off-by: Shi Chen --- .eslintrc.json | 9 +++++++-- .vscodeignore | 2 ++ package.json | 2 +- src/log.ts | 2 +- src/webview/changeSignature/App.tsx | 8 ++++---- test/lightweight-mode-suite/index.ts | 4 ++-- test/standard-mode-suite/extension.test.ts | 2 +- test/standard-mode-suite/index.ts | 4 ++-- tsconfig.base.json | 13 +++++++++++++ tsconfig.json | 21 ++++----------------- tsconfig.webview.json | 17 +++++++++++++++++ webpack.config.js | 5 ++++- 12 files changed, 58 insertions(+), 31 deletions(-) create mode 100644 tsconfig.base.json create mode 100644 tsconfig.webview.json diff --git a/.eslintrc.json b/.eslintrc.json index c3143ae2c..fa1f61863 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -6,7 +6,10 @@ "parser": "@typescript-eslint/parser", "parserOptions": { "ecmaVersion": "latest", - "project": "tsconfig.json" + "project": [ + "tsconfig.webview.json", + "tsconfig.json" + ] }, "plugins": [ "@typescript-eslint" @@ -61,7 +64,9 @@ "no-var": "error", "prefer-arrow-callback": [ "error", - { "allowNamedFunctions": true } + { + "allowNamedFunctions": true + } ], "prefer-const": "error", "prefer-template": "error", diff --git a/.vscodeignore b/.vscodeignore index 385b51af7..d53536a8b 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -8,6 +8,8 @@ images/** .gitignore .github/** tsconfig.json +tsconfig.webview.json +tsconfig.base.json vsc-extension-quickstart.md undefined/** CONTRIBUTING.md diff --git a/package.json b/package.json index 8aa1be0e5..8661bcffe 100644 --- a/package.json +++ b/package.json @@ -1390,7 +1390,7 @@ "build-server": "./node_modules/.bin/gulp build_server", "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", - "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts ." + "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx ." }, "devDependencies": { "@types/fs-extra": "^8.0.0", diff --git a/src/log.ts b/src/log.ts index 30ffea336..ce340c3d9 100644 --- a/src/log.ts +++ b/src/log.ts @@ -1,5 +1,5 @@ import { createLogger, format, transports } from 'winston'; -import DailyRotateFile from 'winston-daily-rotate-file'; +import * as DailyRotateFile from 'winston-daily-rotate-file'; export function initializeLogFile(filename: string) { logger.add(new DailyRotateFile({ diff --git a/src/webview/changeSignature/App.tsx b/src/webview/changeSignature/App.tsx index 8535ab2de..217075521 100644 --- a/src/webview/changeSignature/App.tsx +++ b/src/webview/changeSignature/App.tsx @@ -519,7 +519,7 @@ export class App extends React.Component<{}, State> { { (() => { - const options = []; + const options: JSX.Element[] = []; for (let row = 0; row < this.state.parameters.length; row++) { options.push(this.generateParameterDataGridRow(row)); } @@ -539,7 +539,7 @@ export class App extends React.Component<{}, State> { { (() => { - const options = []; + const options: JSX.Element[] = []; for (let row = 0; row < this.state.exceptions.length; row++) { options.push(this.generateExceptionDataGridRow(row)); } @@ -577,8 +577,8 @@ export class App extends React.Component<{}, State> { return Number(idSplit[1]); } - private getModifierString(accessType: string): string { - if (accessType === "package-private") { + private getModifierString(accessType: string | undefined): string { + if (!accessType || accessType === "package-private") { return ""; } return accessType; diff --git a/test/lightweight-mode-suite/index.ts b/test/lightweight-mode-suite/index.ts index 895e94daf..b04cc328f 100644 --- a/test/lightweight-mode-suite/index.ts +++ b/test/lightweight-mode-suite/index.ts @@ -11,8 +11,8 @@ // a possible error to the callback or null if none. import * as path from 'path'; -import Mocha from 'mocha'; -import glob from 'glob'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; export function run(testsRoot: string): Promise { const mocha = new Mocha({ diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 4dd115224..0634c730a 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -1,4 +1,4 @@ -import assert from 'assert'; +import * as assert from 'assert'; import * as fs from 'fs'; import * as path from 'path'; import { env } from 'process'; diff --git a/test/standard-mode-suite/index.ts b/test/standard-mode-suite/index.ts index 895e94daf..b04cc328f 100644 --- a/test/standard-mode-suite/index.ts +++ b/test/standard-mode-suite/index.ts @@ -11,8 +11,8 @@ // a possible error to the callback or null if none. import * as path from 'path'; -import Mocha from 'mocha'; -import glob from 'glob'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; export function run(testsRoot: string): Promise { const mocha = new Mocha({ diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..dfffa4556 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "es6", + "moduleResolution": "node", + "outDir": "out", + "sourceMap": true, + "plugins": [ + { + "name": "eslint" + } + ], + } +} diff --git a/tsconfig.json b/tsconfig.json index fe775f7f6..762406ca7 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,28 +1,15 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "target": "es6", "lib": [ - "es6", - "DOM" + "es6" ], "module": "commonjs", - "moduleResolution": "node", - "outDir": "out", - "sourceMap": true, - "plugins": [ - { - "name": "eslint" - } - ], - /* Enabled for React */ - "jsx": "react-jsx", - "esModuleInterop": true, - "allowSyntheticDefaultImports": true, - "skipLibCheck": true, }, "exclude": [ "node_modules", "server", - ".vscode-test" + ".vscode-test", + "src/webview" ] } diff --git a/tsconfig.webview.json b/tsconfig.webview.json new file mode 100644 index 000000000..a9d52e7cc --- /dev/null +++ b/tsconfig.webview.json @@ -0,0 +1,17 @@ +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "lib": [ + "DOM" + ], + "module": "ES6", + /* Enabled for React */ + "jsx": "react-jsx", + "esModuleInterop": true, + "allowSyntheticDefaultImports": true, + "skipLibCheck": true, + }, + "include": [ + "src/webview" + ] +} diff --git a/webpack.config.js b/webpack.config.js index a189186c0..811294e58 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -63,7 +63,10 @@ const configAssets = { rules: [{ test: /\.ts(x?)$/, exclude: /node_modules/, - use: 'ts-loader' + loader: 'ts-loader', + options: { + configFile: 'tsconfig.webview.json' + } }, { test: /\.(css)$/, use: [{ From 6dbd1bf403d30f25d65803cf62467420b7af2577 Mon Sep 17 00:00:00 2001 From: Jessica He Date: Mon, 6 Mar 2023 14:57:44 -0500 Subject: [PATCH 286/708] Add support for .class files Signed-off-by: Jessica He --- package.json | 12 +++++++ src/commands.ts | 40 ++++++++++++--------- src/extension.ts | 14 +++++--- src/javaClassEditor.ts | 67 ++++++++++++++++++++++++++++++++++++ src/providerDispatcher.ts | 34 +++++++++++++++--- webview-resources/button.css | 34 ++++++++++++++++++ 6 files changed, 174 insertions(+), 27 deletions(-) create mode 100644 src/javaClassEditor.ts create mode 100644 webview-resources/button.css diff --git a/package.json b/package.json index 8661bcffe..5ea589948 100644 --- a/package.json +++ b/package.json @@ -57,6 +57,18 @@ ], "main": "./dist/extension", "contributes": { + "customEditors": [ + { + "viewType": "decompiled.javaClass", + "displayName": "Decompiled Java Class File", + "selector": [ + { + "scheme": "file", + "filenamePattern": "*.class" + } + ] + } + ], "javaBuildFilePatterns": [ "^pom\\.xml$", ".*\\.gradle(\\.kts)?$" diff --git a/src/commands.ts b/src/commands.ts index 371448fee..a48eeb16f 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -79,9 +79,9 @@ export namespace Commands { */ export const EXECUTE_WORKSPACE_COMMAND = 'java.execute.workspaceCommand'; - /** - * Execute Workspace build (compilation) - */ + /** + * Execute Workspace build (compilation) + */ export const COMPILE_WORKSPACE = 'java.workspace.compile'; /** @@ -119,10 +119,10 @@ export namespace Commands { */ export const OPEN_FORMATTER = 'java.open.formatter.settings'; - /** - * Open a file given the URI - */ - export const OPEN_FILE = 'java.open.file'; + /** + * Open a file given the URI + */ + export const OPEN_FILE = 'java.open.file'; /** * Clean the Java language server workspace @@ -130,7 +130,7 @@ export namespace Commands { export const CLEAN_WORKSPACE = 'java.clean.workspace'; /** * Update the source attachment for the selected class file - * client-side & server-side commands + * client-side & server-side commands */ export const UPDATE_SOURCE_ATTACHMENT_CMD = 'java.project.updateSourceAttachment.command'; export const UPDATE_SOURCE_ATTACHMENT = 'java.project.updateSourceAttachment'; @@ -140,25 +140,25 @@ export namespace Commands { export const RESOLVE_SOURCE_ATTACHMENT = 'java.project.resolveSourceAttachment'; /** * Mark the folder as the source root of the closest project. - * client-side & server-side commands + * client-side & server-side commands */ export const ADD_TO_SOURCEPATH_CMD = 'java.project.addToSourcePath.command'; export const ADD_TO_SOURCEPATH = 'java.project.addToSourcePath'; /** * Unmark the folder as the source root of the project. - * client-side & server-side commands + * client-side & server-side commands */ export const REMOVE_FROM_SOURCEPATH_CMD = 'java.project.removeFromSourcePath.command'; export const REMOVE_FROM_SOURCEPATH = 'java.project.removeFromSourcePath'; /** * List all recognized source roots in the workspace. - * client-side & server-side commands + * client-side & server-side commands */ export const LIST_SOURCEPATHS_CMD = 'java.project.listSourcePaths.command'; export const LIST_SOURCEPATHS = 'java.project.listSourcePaths'; /** * Import new projects - * client-side & server-side commands + * client-side & server-side commands */ export const IMPORT_PROJECTS_CMD = 'java.project.import.command'; export const IMPORT_PROJECTS = 'java.project.import'; @@ -170,7 +170,7 @@ export namespace Commands { * Generate hashCode() and equals(). */ export const HASHCODE_EQUALS_PROMPT = 'java.action.hashCodeEqualsPrompt'; - /** + /** * Open settings.json */ export const OPEN_JSON_SETTINGS = 'workbench.action.openSettingsJson'; @@ -182,10 +182,10 @@ export namespace Commands { * Organize imports silently. */ export const ORGANIZE_IMPORTS_SILENTLY = "java.edit.organizeImports"; - /** - * Handle a paste event. - */ - export const HANDLE_PASTE_EVENT = "java.edit.handlePasteEvent"; + /** + * Handle a paste event. + */ + export const HANDLE_PASTE_EVENT = "java.edit.handlePasteEvent"; /** * Custom paste action (triggers auto-import) */ @@ -320,4 +320,10 @@ export namespace Commands { * Clean everything in the shared index directory. */ export const CLEAN_SHARED_INDEXES = "java.clean.sharedIndexes"; + + /** + * Get the uri of the decompiled class file. + */ + export const GET_DECOMPILED_SOURCE = "java.decompile"; + } diff --git a/src/extension.ts b/src/extension.ts index 6c223c455..5fbe033e4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -26,6 +26,7 @@ import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextBlockClosing, onConfigurationChange, ServerMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; +import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; @@ -191,7 +192,7 @@ export function activate(context: ExtensionContext): Promise { range: client.code2ProtocolConverter.asRange(range), context: await client.code2ProtocolConverter.asCodeActionContext(context) }; - const showAt = getJavaConfiguration().get("quickfix.showAt"); + const showAt = getJavaConfiguration().get("quickfix.showAt"); if (showAt === 'line' && range.start.line === range.end.line && range.start.character === range.end.character) { const textLine = document.lineAt(params.range.start.line); if (textLine !== null) { @@ -362,6 +363,9 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(serverStatusBarProvider); context.subscriptions.push(runtimeStatusBarProvider); + const classEditorProviderRegistration = window.registerCustomEditorProvider(JavaClassEditorProvider.viewType, new JavaClassEditorProvider(context)); + context.subscriptions.push(classEditorProviderRegistration); + registerClientProviders(context, { contentProviderEvent: jdtEventEmitter.event }); apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { @@ -448,7 +452,7 @@ async function workspaceContainsBuildFiles(): Promise { const inclusionPatterns: string[] = getBuildFilePatterns(); const inclusionPatternsFromNegatedExclusion: string[] = getInclusionPatternsFromNegatedExclusion(); if (inclusionPatterns.length > 0 && inclusionPatternsFromNegatedExclusion.length > 0 && - (await workspace.findFiles(convertToGlob(inclusionPatterns, inclusionPatternsFromNegatedExclusion), null, 1 /* maxResults */)).length > 0) { + (await workspace.findFiles(convertToGlob(inclusionPatterns, inclusionPatternsFromNegatedExclusion), null, 1 /* maxResults */)).length > 0) { return true; } @@ -485,7 +489,7 @@ async function ensureNoBuildToolConflicts(context: ExtensionContext, clientOptio clientOptions.initializationOptions.settings.java.import.maven.enabled = false; context.workspaceState.update(ACTIVE_BUILD_TOOL_STATE, "gradle"); } else { - throw new Error (`Unknown build tool: ${activeBuildTool}`); // unreachable + throw new Error(`Unknown build tool: ${activeBuildTool}`); // unreachable } } @@ -699,7 +703,7 @@ function openLogFile(logFile, openingFailureWarning: string, column: ViewColumn if (!doc) { return false; } - return window.showTextDocument(doc, {viewColumn: column, preview: false}) + return window.showTextDocument(doc, { viewColumn: column, preview: false }) .then(editor => !!editor); }, () => false) .then(didOpen => { @@ -937,7 +941,7 @@ async function cleanJavaWorkspaceStorage() { } } }); - } + } } function registerOutOfMemoryDetection(storagePath: string) { diff --git a/src/javaClassEditor.ts b/src/javaClassEditor.ts new file mode 100644 index 000000000..053593c25 --- /dev/null +++ b/src/javaClassEditor.ts @@ -0,0 +1,67 @@ +import path = require('path'); +import * as vscode from 'vscode'; +import { Uri, window, ExtensionContext} from "vscode"; +import { getNonce } from "./webviewUtils"; + +class JavaClassDocument implements vscode.CustomDocument { + constructor(uri: Uri) { this.uri = uri; } + uri: Uri; + dispose(): void { } +} + +export class JavaClassEditorProvider implements vscode.CustomReadonlyEditorProvider { + + private context: ExtensionContext; + + openCustomDocument(uri: Uri, openContext: vscode.CustomDocumentOpenContext, token: vscode.CancellationToken): JavaClassDocument { + return new JavaClassDocument(uri); + } + + constructor (context: ExtensionContext) { + this.context = context; + } + + public static readonly viewType = 'decompiled.javaClass'; + + async resolveCustomEditor(document: vscode.CustomDocument, webviewPanel: vscode.WebviewPanel, token: vscode.CancellationToken): Promise { + const nonce: string = getNonce(); + webviewPanel.webview.options = { + enableScripts: true, + localResourceRoots: [Uri.joinPath(Uri.parse(this.context.extensionPath), 'webview-resources')] + }; + const classUri = Uri.parse((document.uri.toString()).replace(/^file/, "class")); + const styleUri = Uri.file( + path.join(this.context.extensionPath, 'webview-resources', 'button.css') + ); + const style: string = ``; + webviewPanel.webview.html = ` + + + + ${style} + + +
+

This file is not displayed in the text editor because it is a Java class file. Click here to decompile and open.

+ +
+ + + + `; + webviewPanel.webview.onDidReceiveMessage(message => { + switch (message.command) { + case 'decompiled': + webviewPanel.dispose(); + window.showTextDocument(classUri, { preview: false }); + return; + } + }, undefined, this.context.subscriptions); + } +} \ No newline at end of file diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 0b6b0e2ce..f5526ee07 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -28,10 +28,13 @@ export function registerClientProviders(context: ExtensionContext, options: Prov const jdtProvider = createJDTContentProvider(options); context.subscriptions.push(workspace.registerTextDocumentContentProvider('jdt', jdtProvider)); + const classProvider = createClassContentProvider(options); + context.subscriptions.push(workspace.registerTextDocumentContentProvider('class', classProvider)); + overwriteWorkspaceSymbolProvider(context); return { - handles: [hoverProvider, symbolProvider, jdtProvider] + handles: [hoverProvider, symbolProvider, jdtProvider, classProvider] }; } @@ -81,6 +84,27 @@ function createJDTContentProvider(options: ProviderOptions): TextDocumentContent }; } +function createClassContentProvider(options: ProviderOptions): TextDocumentContentProvider { + return { + onDidChange: options.contentProviderEvent, + provideTextDocumentContent: async (uri: Uri, token: CancellationToken): Promise => { + const languageClient: LanguageClient | undefined = await getActiveLanguageClient(); + + if (!languageClient) { + return ''; + } + const originalUri = uri.toString().replace(/^class/, "file"); + const decompiledContent: string = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_DECOMPILED_SOURCE, originalUri); + if (!decompiledContent) { + console.log(`Error while getting decompiled source : ${originalUri}`); + return "Error while getting decompiled source."; + } else { + return decompiledContent; + } + } + }; +} + function createDocumentSymbolProvider(): DocumentSymbolProvider { return { provideDocumentSymbols: async (document: TextDocument, token: CancellationToken): Promise => { @@ -109,7 +133,7 @@ function createDocumentSymbolProvider(): DocumentSymbolProvider { const START_OF_DOCUMENT = new Range(new Position(0, 0), new Position(0, 0)); -function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: WorkspaceSymbolProvider): WorkspaceSymbolProvider { +function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: WorkspaceSymbolProvider): WorkspaceSymbolProvider { return { provideWorkspaceSymbols: async (query: string, token: CancellationToken) => { // This is a workaround until vscode add support for qualified symbol search which is tracked by @@ -159,9 +183,9 @@ function createWorkspaceSymbolProvider(existingWorkspaceSymbolProvider: Workspac } function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { - const disposable = apiManager.getApiInstance().onDidServerModeChange( async (mode) => { + const disposable = apiManager.getApiInstance().onDidServerModeChange(async (mode) => { if (mode === ServerMode.standard) { - const feature = (await getActiveLanguageClient()).getFeature(WorkspaceSymbolRequest.method); + const feature = (await getActiveLanguageClient()).getFeature(WorkspaceSymbolRequest.method); const providers = feature.getProviders(); if (providers && providers.length > 0) { feature.dispose(); @@ -186,7 +210,7 @@ const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\ * @returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI */ function fixJdtSchemeHoverLinks(hover: Hover): Hover { - const newContents: (MarkedString|MarkdownString)[] = []; + const newContents: (MarkedString | MarkdownString)[] = []; for (const content of hover.contents) { if (content instanceof MarkdownString) { const newContent: string = (content).value.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { diff --git a/webview-resources/button.css b/webview-resources/button.css new file mode 100644 index 000000000..54e437988 --- /dev/null +++ b/webview-resources/button.css @@ -0,0 +1,34 @@ +/* https://css-tricks.com/overriding-default-button-styles/ */ + +button { + display: inline-block; + border: none; + padding: 12px 16px; + margin: 0; + text-decoration: none; + background: var(--vscode-button-background); + color: #ffffff; + font-family: sans-serif; + font-size: 14px; + cursor: pointer; + text-align: center; +} + +button:hover, +button:focus { + background: var(--vscode-button-hoverBackground); +} +button:focus { + outline: 1px solid var(--vscode-button-hoverBackground); + /* outline-offset: -4px; */ +} + +.center { + text-align: center; + margin: 0; + position: absolute; + top: 50%; + left: 50%; + -ms-transform: translate(-50%, -50%); + transform: translate(-50%, -50%); +} \ No newline at end of file From 9240d7c1e25934317ddcc41007f0aa5463711354 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Tue, 21 Mar 2023 09:56:50 +0800 Subject: [PATCH 287/708] Trace API: give indicator of response success status (#3010) Signed-off-by: Jinbo Wang --- src/TracingLanguageClient.ts | 19 ++++++++++++++----- src/extension.api.ts | 4 ++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index 3da77839c..d18e0430b 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -19,12 +19,12 @@ export class TracingLanguageClient extends LanguageClient { const startAt: number = performance.now(); return super.start().then(value => { if (isFirstTimeStart) { - this.fireTraceEvent("initialize", startAt); + this.fireTraceEvent("initialize", startAt, undefined); } return value; }, reason => { if (isFirstTimeStart) { - this.fireTraceEvent("initialize", startAt, reason); + this.fireTraceEvent("initialize", startAt, undefined, reason); } throw reason; }); @@ -45,10 +45,10 @@ export class TracingLanguageClient extends LanguageClient { const startAt: number = performance.now(); const requestType: string = this.getRequestType(method, ...args); return this.sendRequest0(method, ...args).then(value => { - this.fireTraceEvent(requestType, startAt); + this.fireTraceEvent(requestType, startAt, this.getResultLength(value)); return value; }, reason => { - this.fireTraceEvent(requestType, startAt, reason); + this.fireTraceEvent(requestType, startAt, undefined, reason); throw reason; }); } @@ -88,12 +88,21 @@ export class TracingLanguageClient extends LanguageClient { return requestType; } - private fireTraceEvent(type: string, startAt: number, reason?: any): void { + private fireTraceEvent(type: string, startAt: number, resultLength: number | undefined, reason?: any): void { const duration: number = performance.now() - startAt; requestEventEmitter.fire({ type, duration, error: reason, + resultLength, }); } + + private getResultLength(value: any): number | undefined { + if (!value) { + return 0; + } + + return value?.length ?? value?.items?.length; + } } diff --git a/src/extension.api.ts b/src/extension.api.ts index 477154bc5..3abf1ba46 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -86,6 +86,10 @@ export interface TraceEvent { * Error that occurs while processing a request. */ error?: any; + /** + * The number of results returned by a response. + */ + resultLength?: number | undefined; } export const extensionApiVersion = '0.8'; From d169b40afd0671d334f43589c6c6f2a01c2523e3 Mon Sep 17 00:00:00 2001 From: Jessica He Date: Tue, 21 Mar 2023 12:39:51 -0400 Subject: [PATCH 288/708] Remove unexpected webview for goToDefinition requests Signed-off-by: Jessica He --- package.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/package.json b/package.json index 5ea589948..cadef19b6 100644 --- a/package.json +++ b/package.json @@ -63,8 +63,7 @@ "displayName": "Decompiled Java Class File", "selector": [ { - "scheme": "file", - "filenamePattern": "*.class" + "filenamePattern": "file:/**/*.class" } ] } From 90477f8ea76eeda8ea7cf1db5d7ca966de285486 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 27 Mar 2023 15:49:37 -0400 Subject: [PATCH 289/708] Fix Commands Test when run locally. Signed-off-by: Roland Grunberg --- test/standard-mode-suite/extension.test.ts | 33 +++++++++++++++++----- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 0634c730a..b325d0250 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -45,50 +45,69 @@ suite('Java Language Extension - Standard', () => { Commands.ADD_TO_SOURCEPATH_CMD, Commands.APPLY_REFACTORING_COMMAND, Commands.APPLY_WORKSPACE_EDIT, + Commands.BUILD_PROJECT, + Commands.CHANGE_BASE_TYPE, Commands.CHOOSE_IMPORTS, + Commands.CLEAN_SHARED_INDEXES, Commands.CLEAN_WORKSPACE, Commands.CLIPBOARD_ONPASTE, Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, + Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GENERATE_ACCESSORS_PROMPT, Commands.GENERATE_CONSTRUCTORS_PROMPT, Commands.GENERATE_DELEGATE_METHODS_PROMPT, Commands.GENERATE_TOSTRING_PROMPT, + Commands.GET_CLASSPATHS, + Commands.GET_PROJECT_SETTINGS, + Commands.GET_ALL_JAVA_PROJECTS, + Commands.HANDLE_PASTE_EVENT, Commands.HASHCODE_EQUALS_PROMPT, Commands.IGNORE_INCOMPLETE_CLASSPATH, Commands.IGNORE_INCOMPLETE_CLASSPATH_HELP, + Commands.IMPORT_PROJECTS, Commands.IMPORT_PROJECTS_CMD, + Commands.IS_TEST_FILE, + Commands.LIST_SOURCEPATHS, Commands.LIST_SOURCEPATHS_CMD, Commands.NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND, + Commands.NULL_ANALYSIS_SET_MODE, Commands.OPEN_CLIENT_LOG, Commands.OPEN_FORMATTER, Commands.OPEN_JSON_SETTINGS, + Commands.OPEN_FILE, Commands.OPEN_LOGS, Commands.OPEN_OUTPUT, Commands.OPEN_SERVER_LOG, Commands.OPEN_SERVER_STDOUT_LOG, Commands.OPEN_SERVER_STDERR_LOG, + Commands.OPEN_TYPE_HIERARCHY, Commands.ORGANIZE_IMPORTS, + Commands.ORGANIZE_IMPORTS_SILENTLY, Commands.OVERRIDE_METHODS_PROMPT, Commands.PROJECT_CONFIGURATION_STATUS, - Commands.BUILD_PROJECT, + Commands.REFRESH_BUNDLES, + "java.project.refreshDiagnostics", + Commands.REMOVE_FROM_SOURCEPATH, Commands.REMOVE_FROM_SOURCEPATH_CMD, Commands.RENAME_COMMAND, + "java.project.resolveStackTraceLocation", + Commands.RESOLVE_TYPE_HIERARCHY, + Commands.RESOLVE_WORKSPACE_SYMBOL, + Commands.RUNTIME_VALIDATION_OPEN, Commands.SHOW_JAVA_IMPLEMENTATIONS, Commands.SHOW_JAVA_REFERENCES, Commands.SHOW_SERVER_TASK_STATUS, Commands.SWITCH_SERVER_MODE, - Commands.UPDATE_SOURCE_ATTACHMENT_CMD, - Commands.RUNTIME_VALIDATION_OPEN, - Commands.CHANGE_BASE_TYPE, + "java.edit.stringFormatting", Commands.SHOW_TYPE_HIERARCHY, Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, - Commands.LEARN_MORE_ABOUT_CLEAN_UPS, - Commands.OPEN_FILE, - Commands.CLEAN_SHARED_INDEXES, + Commands.UPGRADE_GRADLE_WRAPPER, + Commands.UPDATE_SOURCE_ATTACHMENT, + Commands.UPDATE_SOURCE_ATTACHMENT_CMD, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From cab4f382bcd12696635daae6ab80b07e3818abfd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 28 Mar 2023 19:15:38 -0400 Subject: [PATCH 290/708] Recover when 'documentPaste' API is not properly registered. Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index ee753697e..a943901e4 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -128,8 +128,12 @@ export class StandardLanguageClient { await onExtensionChange(extensions.all); }); } - - registerPasteEventHandler(context, this.languageClient); + try { + registerPasteEventHandler(context, this.languageClient); + } catch (error) { + // clients may not have properly configured documentPaste + logger.error(error); + } activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); From 09e2c83075a6867a98695581e67bddf5c5e3c4b5 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 14 Jan 2022 15:52:28 -0500 Subject: [PATCH 291/708] Introduce telemetry reporting. - Fixes #2289 - Disabled by default - Collect telemetry/event reported by language server - Introduce wrappers for vscode-redhat-telemetry on client side - Delegate telemetry reported on server side to the wrapper - Add ability to report telemetry on configuration settings Signed-off-by: Roland Grunberg --- .vscode/launch.json | 15 +- USAGE_DATA.md | 30 ++++ package-lock.json | 302 ++++++++++++++++++++++++++++++---- package.json | 15 +- src/extension.ts | 3 + src/standardLanguageClient.ts | 10 +- src/telemetry.ts | 90 ++++++++++ src/utils.ts | 2 + 8 files changed, 432 insertions(+), 35 deletions(-) create mode 100644 USAGE_DATA.md create mode 100644 src/telemetry.ts diff --git a/.vscode/launch.json b/.vscode/launch.json index 0ad69b7cd..d37508005 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,8 @@ "debugWebviews": true, "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], "env": { - "DEBUG_VSCODE_JAVA":"true" + "DEBUG_VSCODE_JAVA":"true", + "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, "stopOnEntry": false, "sourceMaps": true, @@ -32,7 +33,8 @@ "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { "SERVER_PORT": "3333", - "DEBUG_VSCODE_JAVA":"true" + "DEBUG_VSCODE_JAVA":"true", + "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, "preLaunchTask": "npm: watch" }, @@ -48,7 +50,8 @@ "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { "JDTLS_CLIENT_PORT": "5036", - "DEBUG_VSCODE_JAVA":"true" + "DEBUG_VSCODE_JAVA":"true", + "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, "preLaunchTask": "npm: watch", "rendererDebugOptions": { @@ -67,7 +70,8 @@ "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { "SYNTAXLS_CLIENT_PORT": "5037", - "DEBUG_VSCODE_JAVA":"true" + "DEBUG_VSCODE_JAVA":"true", + "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, "preLaunchTask": "npm: watch" }, @@ -83,7 +87,8 @@ "env": { "JDTLS_CLIENT_PORT": "5036", "SYNTAXLS_CLIENT_PORT": "5037", - "DEBUG_VSCODE_JAVA":"true" + "DEBUG_VSCODE_JAVA":"true", + "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, "preLaunchTask": "npm: watch" }, diff --git a/USAGE_DATA.md b/USAGE_DATA.md new file mode 100644 index 000000000..9f860cb10 --- /dev/null +++ b/USAGE_DATA.md @@ -0,0 +1,30 @@ +# Data collection + +vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetry](https://github.com/redhat-developer/vscode-redhat-telemetry). + +## What's included in the vscode-java telemetry data + + * vscode-java emits telemetry events when the extension starts and stops, + which contain the common data mentioned on the + [vscode-redhat-telemetry page](https://github.com/redhat-developer/vscode-redhat-telemetry/blob/main/USAGE_DATA.md#common-data). + * The name of the build tool used to import a project (eg. Maven, Gradle, Invisible (project), etc.) + * The total number of Java projects within the workspace + * The lowest and highest Java compiler source level used (eg. 11 & 17) + * Whether the project(s) are being imported for the first time (eg. true) + * The current time (in milliseconds) at which the language server started, initialized the workspace project(s), and completed building the project(s) + * The number of libraries that were indexed after project initialization + * The total size (in bytes) of libraries that were indexed after project initialization + * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. + * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` + +## What's included in the general telemetry data + +Please see the +[vscode-redhat-telemetry data collection information](https://github.com/redhat-developer/vscode-redhat-telemetry/blob/HEAD/USAGE_DATA.md#usage-data-being-collected-by-red-hat-extensions) +for information on what data it collects. + +## How to opt in or out + +Use the `redhat.telemetry.enabled` setting in order to enable or disable telemetry collection. + +This extension also abides by Visual Studio Code's telemetry level: if `telemetry.telemetryLevel` is set to `off`, then no telemetry events will be sent to Red Hat, even if `redhat.telemetry.enabled` is set to `true`. If `telemetry.telemetryLevel` is set to `error` or `crash`, only events containing an error or errors property will be sent to Red Hat. diff --git a/package-lock.json b/package-lock.json index 844d896a1..acbd88f86 100644 --- a/package-lock.json +++ b/package-lock.json @@ -142,6 +142,19 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@lukeed/csprng": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", + "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" + }, + "@lukeed/uuid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", + "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", + "requires": { + "@lukeed/csprng": "^1.0.0" + } + }, "@microsoft/fast-element": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz", @@ -208,6 +221,140 @@ "fastq": "^1.6.0" } }, + "@redhat-developer/vscode-redhat-telemetry": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.6.1.tgz", + "integrity": "sha512-w9hDT7SRud9kZ3vBZXbiPT9gq7S19GHqWyLgLaMMgTNzzAt1HvJGAkMzezrC0i2012Kf1bJf1FL88BbBEhMLHg==", + "requires": { + "@segment/analytics-node": "0.0.1-beta.17", + "axios": "^1.3.2", + "countries-and-timezones": "^3.4.1", + "getos": "^3.2.1", + "object-hash": "^3.0.0", + "os-locale": "^5.0.0", + "picomatch": "^2.3.1", + "ua-parser-js": "1.0.33", + "uuid": "^9.0.0" + }, + "dependencies": { + "execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "requires": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" + }, + "invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + }, + "lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "requires": { + "invert-kv": "^3.0.0" + } + }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" + }, + "os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "requires": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } + }, + "@segment/analytics-core": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.2.1.tgz", + "integrity": "sha512-FaKE7uIBXsclO4GcA7cEgb4iyQ23aFHRcxqLpxaCGeB5nqIdVQHigmGgL3hAjCZeBqtojLEV6as27ozXHQXCkg==", + "requires": { + "@lukeed/uuid": "^2.0.0", + "dset": "^3.1.2", + "tslib": "^2.4.1" + }, + "dependencies": { + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + } + } + }, + "@segment/analytics-node": { + "version": "0.0.1-beta.17", + "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-0.0.1-beta.17.tgz", + "integrity": "sha512-LwrhrPEJXfCTg/WmFVpRikR/M4q9S8Mq0EHy3oEYkudP2ybeRg2pPDftvwRxdlp7aULn4Zyq7N/hVCPE6/BoUA==", + "requires": { + "@lukeed/uuid": "^2.0.0", + "@segment/analytics-core": "1.2.1", + "node-fetch": "^2.6.7", + "tslib": "^2.4.1" + }, + "dependencies": { + "tslib": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", + "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + } + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1205,8 +1352,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -1226,6 +1372,28 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "axios": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", + "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "dependencies": { + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } + } + }, "bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -1803,7 +1971,6 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -1875,11 +2042,15 @@ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "countries-and-timezones": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.4.1.tgz", + "integrity": "sha512-INeHGCony4XUUR8iGL/lmt9s1Oi+n+gFHeJAMfbV5hJfYeDOB8JG1oxz5xFQu5oBZoRCJe/87k1Vzue9DoIauA==" + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, "requires": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1890,7 +2061,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -2164,8 +2334,7 @@ "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "detect-file": { "version": "1.0.0", @@ -2248,6 +2417,11 @@ "domhandler": "^4.2.0" } }, + "dset": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==" + }, "duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", @@ -2339,7 +2513,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -3380,6 +3553,11 @@ "lodash": "^4.17.14" } }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, "for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -3522,6 +3700,21 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, + "getos": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", + "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "requires": { + "async": "^3.2.0" + }, + "dependencies": { + "async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + } + } + }, "getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", @@ -4413,8 +4606,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "isobject": { "version": "3.0.1", @@ -4910,6 +5102,14 @@ "kind-of": "^6.0.2" } }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "requires": { + "p-defer": "^1.0.0" + } + }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -4960,11 +5160,20 @@ } } }, + "mem": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", + "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "requires": { + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^2.1.0", + "p-is-promise": "^2.1.0" + } + }, "merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, "merge2": { "version": "1.4.1", @@ -4996,14 +5205,12 @@ "mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "dev": true + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" }, "mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dev": true, "requires": { "mime-db": "1.51.0" } @@ -5011,8 +5218,7 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { "version": "3.1.2", @@ -5380,6 +5586,14 @@ "path-to-regexp": "^1.7.0" } }, + "node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", @@ -5438,7 +5652,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, "requires": { "path-key": "^3.0.0" } @@ -5581,7 +5794,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -5626,6 +5838,16 @@ "lcid": "^1.0.0" } }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + }, "p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", @@ -5717,8 +5939,7 @@ "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" }, "path-parse": { "version": "1.0.7", @@ -5973,6 +6194,11 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", @@ -6433,7 +6659,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "requires": { "shebang-regex": "^3.0.0" } @@ -6441,14 +6666,12 @@ "shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" }, "signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", - "dev": true + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-swizzle": { "version": "0.2.2", @@ -6815,8 +7038,7 @@ "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" }, "strip-json-comments": { "version": "3.1.1", @@ -7034,6 +7256,11 @@ "punycode": "^2.1.1" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", @@ -7211,6 +7438,11 @@ "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", "dev": true }, + "ua-parser-js": { + "version": "1.0.33", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==" + }, "unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", @@ -7562,6 +7794,11 @@ "graceful-fs": "^4.1.2" } }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, "webpack": { "version": "5.76.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", @@ -7689,6 +7926,15 @@ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index cadef19b6..2db79ae55 100644 --- a/package.json +++ b/package.json @@ -1091,6 +1091,16 @@ "type": "boolean", "markdownDescription": "Specify whether to replace all the occurrences of the subtype with the new extracted interface.", "default": true + }, + "redhat.telemetry.enabled": { + "type": "boolean", + "default": null, + "markdownDescription": "Enable usage data and errors to be sent to Red Hat servers. Read our [privacy statement](https://developers.redhat.com/article/tool-data-collection).", + "scope": "window", + "tags": [ + "usesOnlineServices", + "telemetry" + ] } } }, @@ -1442,6 +1452,7 @@ "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", + "@redhat-developer/vscode-redhat-telemetry": "^0.6.1", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", @@ -1455,5 +1466,7 @@ "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^3.10.0" - } + }, + "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", + "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" } diff --git a/src/extension.ts b/src/extension.ts index 5fbe033e4..ab2d1341a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -31,6 +31,7 @@ import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; import glob = require('glob'); +import { Telemetry } from './telemetry'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -99,6 +100,8 @@ export function activate(context: ExtensionContext): Promise { clientLogFile = path.join(storagePath, 'client.log'); initializeLogFile(clientLogFile); + Telemetry.startTelemetry(context); + enableJavadocSymbols(); initializeRecommendation(context); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index a943901e4..6be234e23 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -37,6 +37,8 @@ import { TracingLanguageClient } from './TracingLanguageClient'; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; +import { Telemetry } from "./telemetry"; +import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -291,6 +293,12 @@ export class StandardLanguageClient { return result; }); + this.languageClient.onTelemetry(async (e: TelemetryEvent) => { + if (e.name === Telemetry.SERVER_INITIALIZED_EVT) { + return Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, e.properties); + } + }); + context.subscriptions.push(commands.registerCommand(GRADLE_CHECKSUM, (wrapper: string, sha256: string) => { setGradleWrapperChecksum(wrapper, sha256); })); @@ -724,4 +732,4 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC } else { return Promise.resolve(true); } -} \ No newline at end of file +} diff --git a/src/telemetry.ts b/src/telemetry.ts new file mode 100644 index 000000000..a8c2b71b4 --- /dev/null +++ b/src/telemetry.ts @@ -0,0 +1,90 @@ +import { TelemetryService, getRedHatService } from "@redhat-developer/vscode-redhat-telemetry"; +import { ExtensionContext, workspace, WorkspaceConfiguration } from "vscode"; + +/** + * Wrap vscode-redhat-telemetry to suit vscode-java + */ +export namespace Telemetry { + + export const STARTUP_EVT = "startup"; + export const SERVER_INITIALIZED_EVT = "java.workspace.initialized"; + let telemetryManager: TelemetryService = null; + let serverInitializedReceived = false; + + /** + * Starts the telemetry service + * + * @returns when the telemetry service has been started + * @throws Error if the telemetry service has already been started + */ + export async function startTelemetry(context: ExtensionContext): Promise { + if (!!telemetryManager) { + throw new Error("The telemetry service for vscode-java has already been started"); + } + const redhatService = await getRedHatService(context); + telemetryManager = await redhatService.getTelemetryService(); + setTimeout(sendEmptyStartUp, 60000); // assume LS may not have initialized + return; + } + + /** + * Send a telemetry event with the given name and data + * + * @param eventName the name of the telemetry event + * @param data the telemetry data + * @throws Error if the telemetry service has not been started yet + */ + export async function sendTelemetry(eventName: string, data?: any): Promise { + if (!telemetryManager) { + throw new Error("The telemetry service for vscode-java has not been started yet"); + } + if (eventName === STARTUP_EVT) { + serverInitializedReceived = true; + } + + const javaSettings = getNonDefaultJavaSettings(workspace.getConfiguration()); + + return telemetryManager.send({ + name: eventName, + properties: { ...data, ...javaSettings } + }); + } + + function sendEmptyStartUp() { + if (!serverInitializedReceived) { + return sendTelemetry(STARTUP_EVT); + } + } + + function getNonDefaultJavaSettings(config: WorkspaceConfiguration) { + // settings whose values we can record + const SETTINGS_BASIC = [ + "java.quickfix.showAt", "java.symbols.includeSourceMethodDeclarations", + "java.completion.guessMethodArguments", "java.cleanup.actionsOnSave", + "java.completion.postfix.enabled", "java.sharedIndexes.enabled", + "java.inlayHints.parameterNames.enabled", "java.server.launchMode", + "java.autobuild.enabled" + ]; + // settings where we only record their existence + const SETTINGS_CUSTOM = [ + "java.settings.url", "java.format.settings.url" + ]; + + let value: any; + const properties = {}; + + for (const key of SETTINGS_CUSTOM) { + if (config.get(key)) { + properties[key] = true; + } + } + for (const key of SETTINGS_BASIC) { + value = config.get(key); + if (value !== undefined) { + properties[key] = value; + } + } + + return properties; + } +} diff --git a/src/utils.ts b/src/utils.ts index 3a22388f8..8c496263d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -209,5 +209,7 @@ export function getJavaConfig(javaHome: string) { if (completionCaseMatching === "auto") { javaConfig.completion.matchCase = isInsider ? "firstLetter" : "off"; } + + javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; return javaConfig; } From f43dc667e23598599f879fb8ce088b8402aa25ee Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 30 Mar 2023 13:47:10 +0800 Subject: [PATCH 292/708] Adopt the lombok@1.18.27 edge release (#3031) Signed-off-by: Jinbo Wang --- gulpfile.js | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 2ed13f1bd..8aa059aaa 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -116,15 +116,31 @@ gulp.task('download_jre', async function (done) { done(); }); -gulp.task('download_lombok', function (done) { +gulp.task('download_lombok', async function (done) { if (fse.existsSync('./lombok')) { fse.removeSync('./lombok'); } - const lombokVersion = '1.18.24'; - // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; - download(lombokUrl) - .pipe(gulp.dest('./lombok/')) + + await new Promise(function (resolve, reject) { + // Adopt lombok-1.18.27 edge release for the issue https://github.com/redhat-developer/vscode-java/issues/2887 + download("https://projectlombok.org/lombok-edge.jar") + .pipe(gulp.dest('./lombok/')) + .on("error", reject) + .on('end', () => { + fse.renameSync("./lombok/lombok-edge.jar", "./lombok/lombok-1.18.27.jar"); + resolve(); + }); + + // TODO: Switch to stable version once lombok 1.18.28 is released. + + // const lombokVersion = '1.18.24'; + // // The latest lombok version can be found on the website https://projectlombok.org/downloads + // const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + // download(lombokUrl) + // .pipe(gulp.dest('./lombok/')) + // .on("error", reject) + // .on('end', resolve); + }); done(); }); From 7e7dfa945f87630daf7a039fa78de8e013904b0e Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Thu, 30 Mar 2023 13:55:18 +0800 Subject: [PATCH 293/708] Separate java.project.upgradeGradle client and server command (#3014) * fix duplicate gradle upgrade command * add advancedUpgradeGradleSupport capability Signed-off-by: Shi Chen --- src/commands.ts | 5 +++++ src/extension.ts | 1 + src/gradle/gradleCodeActionProvider.ts | 2 +- src/standardLanguageClient.ts | 2 +- 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index a48eeb16f..4ba3b287a 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -291,6 +291,11 @@ export namespace Commands { export const GET_WORKSPACE_PATH = '_java.workspace.path'; + /** + * Update the gradle wrapper version for the given project + * client-side & server-side commands + */ + export const UPGRADE_GRADLE_WRAPPER_CMD = 'java.project.upgradeGradle.command'; export const UPGRADE_GRADLE_WRAPPER = 'java.project.upgradeGradle'; export const LOMBOK_CONFIGURE = "java.lombokConfigure"; diff --git a/src/extension.ts b/src/extension.ts index ab2d1341a..bae01b902 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -173,6 +173,7 @@ export function activate(context: ExtensionContext): Promise { actionableRuntimeNotificationSupport: true, onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", extractInterfaceSupport: true, + advancedUpgradeGradleSupport: true, }, triggerFiles, }, diff --git a/src/gradle/gradleCodeActionProvider.ts b/src/gradle/gradleCodeActionProvider.ts index f3cb6b0f7..d09af4704 100644 --- a/src/gradle/gradleCodeActionProvider.ts +++ b/src/gradle/gradleCodeActionProvider.ts @@ -41,7 +41,7 @@ export class GradleCodeActionProvider implements CodeActionProvider const projectUri = Uri.file(projectPath).toString(); const upgradeWrapperCommand: Command = { title: UPGRADE_GRADLE_WRAPPER_TITLE, - command: Commands.UPGRADE_GRADLE_WRAPPER, + command: Commands.UPGRADE_GRADLE_WRAPPER_CMD, arguments: [projectUri] }; const codeAction = new CodeAction(UPGRADE_GRADLE_WRAPPER_TITLE, CodeActionKind.QuickFix.append("gradle")); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 6be234e23..326b247b1 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -571,7 +571,7 @@ export class StandardLanguageClient { } })); - context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER, (projectUri: string, version?: string) => { + context.subscriptions.push(commands.registerCommand(Commands.UPGRADE_GRADLE_WRAPPER_CMD, (projectUri: string, version?: string) => { upgradeGradle(projectUri, version); })); From e7f2d0c4d2e5fbb41ca826154c956e8209a02f9d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Mar 2023 16:42:13 -0400 Subject: [PATCH 294/708] Adjust usage data document in response to language server changes. Signed-off-by: Roland Grunberg --- USAGE_DATA.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index 9f860cb10..22f99d6ad 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -11,7 +11,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The total number of Java projects within the workspace * The lowest and highest Java compiler source level used (eg. 11 & 17) * Whether the project(s) are being imported for the first time (eg. true) - * The current time (in milliseconds) at which the language server started, initialized the workspace project(s), and completed building the project(s) + * The elapsed time (in milliseconds) at which the language server initialized the workspace project(s), declared as ready for requests, and completed building the project(s) * The number of libraries that were indexed after project initialization * The total size (in bytes) of libraries that were indexed after project initialization * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. From 3f0996498dcc1eadef7ce105eaafd03a4ed2b33f Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Fri, 31 Mar 2023 14:18:44 +0800 Subject: [PATCH 295/708] exclude double quote in string Signed-off-by: Shi Chen --- language-support/java/language-configuration.json | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/language-support/java/language-configuration.json b/language-support/java/language-configuration.json index 884b85d0e..683d60232 100644 --- a/language-support/java/language-configuration.json +++ b/language-support/java/language-configuration.json @@ -37,10 +37,13 @@ "(", ")" ], - [ - "\"", - "\"" - ], + { + "open": "\"", + "close": "\"", + "notIn": [ + "string" + ] + }, [ "'", "'" From 2befb85370c71c8581a57fa8fdea9a219774b60e Mon Sep 17 00:00:00 2001 From: Yan Zhang Date: Fri, 31 Mar 2023 11:13:01 +0800 Subject: [PATCH 296/708] use breadth-first dependency collector impl Signed-off-by: Yan Zhang --- src/javaServerStarter.ts | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 1b01b9437..34ba23da7 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -19,12 +19,20 @@ const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); /** * Argument that tells the program where to generate the heap dump that is created when an OutOfMemoryError is raised and `HEAP_DUMP` has been passed */ - export const HEAP_DUMP_LOCATION = '-XX:HeapDumpPath='; +export const HEAP_DUMP_LOCATION = '-XX:HeapDumpPath='; - /** - * Argument that tells the program to generate a heap dump file when an OutOfMemoryError is raised - */ - export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; +/** + * Argument that tells the program to generate a heap dump file when an OutOfMemoryError is raised + */ +export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; + +/** + * Argument that specifies name of the dependency collector implementation to use. + * `df` for depth-first and `bf` for breadth-first. + * See: https://github.com/apache/maven-resolver/blob/maven-resolver-1.9.7/src/site/markdown/configuration.md + */ +const DEPENDENCY_COLLECTOR_IMPL= '-Daether.dependencyCollector.impl='; +const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; export function prepareExecutable(requirements: RequirementsData, workspacePath, javaConfig, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); @@ -130,6 +138,9 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp if (vmargs.indexOf(HEAP_DUMP_LOCATION) < 0) { params.push(`${HEAP_DUMP_LOCATION}${path.dirname(workspacePath)}`); } + if (vmargs.indexOf(DEPENDENCY_COLLECTOR_IMPL) < 0) { + params.push(`${DEPENDENCY_COLLECTOR_IMPL}${DEPENDENCY_COLLECTOR_IMPL_BF}`); + } const sharedIndexLocation: string = resolveIndexCache(context); if (sharedIndexLocation) { From 30cbd5bd23f39bc0a788608066058c7d05faa78f Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 3 Apr 2023 10:37:03 +0200 Subject: [PATCH 297/708] Add telemetry for extension recommendations Signed-off-by: Fred Bricon --- USAGE_DATA.md | 1 + src/recommendation/handlerImpl.ts | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index 22f99d6ad..ce86f7ea2 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -16,6 +16,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The total size (in bytes) of libraries that were indexed after project initialization * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` + * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed ## What's included in the general telemetry data diff --git a/src/recommendation/handlerImpl.ts b/src/recommendation/handlerImpl.ts index 78027ba51..ffc1d3659 100644 --- a/src/recommendation/handlerImpl.ts +++ b/src/recommendation/handlerImpl.ts @@ -4,6 +4,7 @@ import * as vscode from "vscode"; import { IHandler } from "./handler"; +import { Telemetry } from "../telemetry"; const KEY_RECOMMENDATION_USER_CHOICE_MAP = "recommendationUserChoice"; @@ -54,6 +55,10 @@ export class HandlerImpl implements IHandler { const actions: Array = Object.values(UserChoice); const answer = await vscode.window.showInformationMessage(message, ...actions); + await Telemetry.sendTelemetry('recommendation', { + recommendation: extName, + choice:answer?.toLowerCase() + }); if (answer === UserChoice.install) { await installExtensionCmdHandler(extName, extName); } From d0f4f5bbb80b44ebbc4407f23e4a976bc7477a05 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 4 Apr 2023 17:30:22 +0200 Subject: [PATCH 298/708] Don't send settings with all telemetry events Signed-off-by: Fred Bricon --- src/telemetry.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/telemetry.ts b/src/telemetry.ts index a8c2b71b4..9a18dd9b2 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -38,15 +38,19 @@ export namespace Telemetry { if (!telemetryManager) { throw new Error("The telemetry service for vscode-java has not been started yet"); } + const javaSettings = getJavaSettingsForTelemetry(workspace.getConfiguration()); + + let properties: any; if (eventName === STARTUP_EVT) { serverInitializedReceived = true; + properties= { ...data, ...javaSettings }; + } else { + properties= { ...data}; } - const javaSettings = getNonDefaultJavaSettings(workspace.getConfiguration()); - return telemetryManager.send({ name: eventName, - properties: { ...data, ...javaSettings } + properties }); } @@ -56,7 +60,7 @@ export namespace Telemetry { } } - function getNonDefaultJavaSettings(config: WorkspaceConfiguration) { + function getJavaSettingsForTelemetry(config: WorkspaceConfiguration) { // settings whose values we can record const SETTINGS_BASIC = [ "java.quickfix.showAt", "java.symbols.includeSourceMethodDeclarations", From dc66258e3c00de85f074de3a4770723c0e9c0917 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 10 Apr 2023 15:13:41 +0800 Subject: [PATCH 299/708] Remove the workaround to show the refactoring document Signed-off-by: Sheng Chen --- package-lock.json | 6 +++--- package.json | 4 ++-- src/codeActionProvider.ts | 4 +--- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index acbd88f86..97b72a2ac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -534,9 +534,9 @@ "dev": true }, "@types/vscode": { - "version": "1.75.1", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.75.1.tgz", - "integrity": "sha512-emg7wdsTFzdi+elvoyoA+Q8keEautdQHyY5LNmHVM4PTpY8JgOTVADrGVyXGepJ6dVW2OS5/xnLUWh+nZxvdiA==", + "version": "1.77.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.77.0.tgz", + "integrity": "sha512-MWFN5R7a33n8eJZJmdVlifjig3LWUNRrPeO1xemIcZ0ae0TEQuRc7G2xV0LUX78RZFECY1plYBn+dP/Acc3L0Q==", "dev": true }, "@types/vscode-webview": { diff --git a/package.json b/package.json index 2db79ae55..52ddbc088 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ "virtualWorkspaces": false }, "engines": { - "vscode": "^1.74.0" + "vscode": "^1.77.0" }, "repository": { "type": "git", @@ -1424,7 +1424,7 @@ "@types/vscode-webview": "^1.57.0", "@types/semver": "^7.3.8", "@types/sinon": "^10.0.12", - "@types/vscode": "^1.74.0", + "@types/vscode": "^1.77.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", "@vscode/test-electron": "^2.1.5", diff --git a/src/codeActionProvider.ts b/src/codeActionProvider.ts index 8d2498270..8aebcea7c 100644 --- a/src/codeActionProvider.ts +++ b/src/codeActionProvider.ts @@ -32,9 +32,7 @@ export class RefactorDocumentProvider implements CodeActionProvider { command: { command: Commands.LEARN_MORE_ABOUT_REFACTORING, title: 'Learn more about Java refactorings...', - // comment out due to https://github.com/microsoft/vscode/issues/175737. - // TODO: revert the change once the issue is fixed. - // arguments: [kind] + arguments: [kind] } }; }), From abbfadfe24b65f85a9b97f7edac067e1040aa96d Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 11 Apr 2023 12:09:27 +0200 Subject: [PATCH 300/708] Ignore .github/ and .gitignore from packaging Signed-off-by: Fred Bricon --- .vscodeignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.vscodeignore b/.vscodeignore index d53536a8b..d6d7fae14 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -25,4 +25,8 @@ Jenkinsfile .eslintrc.json .eslintignore webpack.config.js -.DS_Store \ No newline at end of file +.DS_Store +.github/** +.gitignore +.tool-versions +.sdkmanrc \ No newline at end of file From c192ab65fba246c3d84df6d08e9d6e59ca899e6d Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 11 Apr 2023 15:43:27 +0200 Subject: [PATCH 301/708] Record 'java.clean.workspace' invocations in telemetry Signed-off-by: Fred Bricon --- USAGE_DATA.md | 1 + src/errorUtils.ts | 24 ++++++++++++++++++++++++ src/extension.ts | 4 ++++ 3 files changed, 29 insertions(+) create mode 100644 src/errorUtils.ts diff --git a/USAGE_DATA.md b/USAGE_DATA.md index ce86f7ea2..e97a20529 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -17,6 +17,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed + * The name of Java commands being manually executed, and any resulting errors ## What's included in the general telemetry data diff --git a/src/errorUtils.ts b/src/errorUtils.ts new file mode 100644 index 000000000..a098b7369 --- /dev/null +++ b/src/errorUtils.ts @@ -0,0 +1,24 @@ +// copied from https://github.com/redhat-developer/openshift-dd-ext/blob/f8c053bded9bc6c1bfac682cf4867b187e87ee76/client/src/utils/ErrorUtils.ts#L12 +export function getMessage(error: any): string { + return getRawMessage(error).trim(); +} + +export function getRawMessage(error: any): string { + if (typeof error === 'string') { + return error; + } + if (error.stderr) { + return error.stderr; + } + if (error.message) { + return error.message; + } + if (error.error) { + return error.error; + } + + // Unlikely to happen, as we're either getting an Error object with a message + // or we're dealing with a failed promise with a stderr message + // in any other case, we'll need to figure out what to return on a case by case basis + return JSON.stringify(error); +} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index bae01b902..12f1040fd 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -32,6 +32,7 @@ import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; +import { getMessage } from './errorUtils'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -291,13 +292,16 @@ export function activate(context: ExtensionContext): Promise { const cleanWorkspaceExists = fs.existsSync(path.join(workspacePath, cleanWorkspaceFileName)); if (cleanWorkspaceExists) { + const data = {}; try { cleanupLombokCache(context); deleteDirectory(workspacePath); deleteDirectory(syntaxServerWorkspacePath); } catch (error) { + data['error'] = getMessage(error); window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); } + await Telemetry.sendTelemetry(Commands.CLEAN_WORKSPACE, data); } // Register commands here to make it available even when the language client fails From 38ef519cc00d03819b1dff1c05d779ed8deef7d3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 12 Apr 2023 22:00:51 -0400 Subject: [PATCH 302/708] Changelog for 1.17.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 83672d28a..036559250 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## 1.17.0 (April 13th, 2023) + * performance - Support resolving dependencies in parallel for Maven projects. See [#3030](https://github.com/redhat-developer/vscode-java/pull/3030). + * performance - Cache and re-use type bindings for a completion invocation. See [JLS#2535](https://github.com/eclipse/eclipse.jdt.ls/pull/2535). + * performance - Avoid retrieving AST root during diagnostic publishing. See [JLS#2574](https://github.com/eclipse/eclipse.jdt.ls/pull/2574). + * performance - Implement `itemDefaults` for completion responses. See [JLS#2475](https://github.com/eclipse/eclipse.jdt.ls/issues/2475). + * enhancement - Add support for decompiling class files. See [#2679](https://github.com/redhat-developer/vscode-java/issues/2679), [#3012](https://github.com/redhat-developer/vscode-java/issues/3012). + * enhancement - Add "Change signature" refactoring. See [#2104](https://github.com/redhat-developer/vscode-java/issues/2104). + * enhancement - Implement `labelDetails` for completion items. See [JLS#2476](https://github.com/eclipse/eclipse.jdt.ls/issues/2476). + * enhancement - `sysout` postfix completion should be applicable to any variable. See [JLS#2559](https://github.com/eclipse/eclipse.jdt.ls/pull/2559). + * enhancement - Add support for telemetry notifications. See [#2289](https://github.com/redhat-developer/vscode-java/issues/2289), [#3042](https://github.com/redhat-developer/vscode-java/pull/3042), [#3058](https://github.com/redhat-developer/vscode-java/pull/3058). + * enhancement - Trace API should give indicator of response success status. See [#3010](https://github.com/redhat-developer/vscode-java/pull/3010). + * bug fix - Single double quote should be matched appropriately. See [#3037](https://github.com/redhat-developer/vscode-java/issues/3037). + * bug fix - Lombok ignores `lombok.config`. See [#2887](https://github.com/redhat-developer/vscode-java/issues/2887). + * bug fix - Increase relevance of "Create enum". See [#2940](https://github.com/redhat-developer/vscode-java/issues/2940). + * bug fix - Recover when `documentPaste` API is not properly registered. See [#3028](https://github.com/redhat-developer/vscode-java/pull/3028). + * bug fix - Ensure we do not return duplicate search results for workspace symbols. See [JLS#2547](https://github.com/eclipse/eclipse.jdt.ls/pull/2547). + * bug fix - Code action to generate accessor outside of identifier no longer available. See [JLS#2533](https://github.com/eclipse/eclipse.jdt.ls/issues/2533). + * bug fix - Support importing multi-Maven projects with the same `artifactId`. See [JLS#2017](https://github.com/eclipse/eclipse.jdt.ls/issues/2017). + * bug fix - Do not show `Generate Constructors` quick assist for static fields. See [JLS#2142](https://github.com/eclipse/eclipse.jdt.ls/issues/2142). + * bug fix - Delegate commands should respect cancellation events from the client. See [JLS#2415](https://github.com/eclipse/eclipse.jdt.ls/issues/2415). + * bug fix - Ensure `java.project.upgradeGradle` client/server commands do not clash. See [#3001](https://github.com/redhat-developer/vscode-java/issues/3001). + * bug fix - Fix "commands test" when run locally. See [#3027](https://github.com/redhat-developer/vscode-java/pull/3027). + * build - Exclude `.github/` and `.gitignore` from packaging. See [#3057](https://github.com/redhat-developer/vscode-java/pull/3057). + * build - Add separate tsconfig for webview. See [#3009](https://github.com/redhat-developer/vscode-java/pull/3009). + * debt - Support the refactoring document correctly. See [#2974](https://github.com/redhat-developer/vscode-java/issues/2974). + ## 1.16.0 (March 16th, 2023) * performance - Allow language server to declare availability sooner by postponing autobuild. See [JLS#2527](https://github.com/eclipse/eclipse.jdt.ls/pull/2527). * performance - Save operations need not run in workspace runnable when project is not unmanaged. See [JLS#2449](https://github.com/eclipse/eclipse.jdt.ls/pull/2449). From f562ef193fe8a6ebc80d348870dc1c3ae8c3a9f7 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 13 Apr 2023 16:03:23 +0800 Subject: [PATCH 303/708] Revert PR#3031: Revert lombok@1.18.27 edge release to 1.18.24 Signed-off-by: Jinbo Wang --- CHANGELOG.md | 1 - gulpfile.js | 21 +++++---------------- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 036559250..d7407605f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,7 +12,6 @@ * enhancement - Add support for telemetry notifications. See [#2289](https://github.com/redhat-developer/vscode-java/issues/2289), [#3042](https://github.com/redhat-developer/vscode-java/pull/3042), [#3058](https://github.com/redhat-developer/vscode-java/pull/3058). * enhancement - Trace API should give indicator of response success status. See [#3010](https://github.com/redhat-developer/vscode-java/pull/3010). * bug fix - Single double quote should be matched appropriately. See [#3037](https://github.com/redhat-developer/vscode-java/issues/3037). - * bug fix - Lombok ignores `lombok.config`. See [#2887](https://github.com/redhat-developer/vscode-java/issues/2887). * bug fix - Increase relevance of "Create enum". See [#2940](https://github.com/redhat-developer/vscode-java/issues/2940). * bug fix - Recover when `documentPaste` API is not properly registered. See [#3028](https://github.com/redhat-developer/vscode-java/pull/3028). * bug fix - Ensure we do not return duplicate search results for workspace symbols. See [JLS#2547](https://github.com/eclipse/eclipse.jdt.ls/pull/2547). diff --git a/gulpfile.js b/gulpfile.js index 8aa059aaa..5ab8f3bae 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -122,24 +122,13 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - // Adopt lombok-1.18.27 edge release for the issue https://github.com/redhat-developer/vscode-java/issues/2887 - download("https://projectlombok.org/lombok-edge.jar") + const lombokVersion = '1.18.24'; + // The latest lombok version can be found on the website https://projectlombok.org/downloads + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + download(lombokUrl) .pipe(gulp.dest('./lombok/')) .on("error", reject) - .on('end', () => { - fse.renameSync("./lombok/lombok-edge.jar", "./lombok/lombok-1.18.27.jar"); - resolve(); - }); - - // TODO: Switch to stable version once lombok 1.18.28 is released. - - // const lombokVersion = '1.18.24'; - // // The latest lombok version can be found on the website https://projectlombok.org/downloads - // const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; - // download(lombokUrl) - // .pipe(gulp.dest('./lombok/')) - // .on("error", reject) - // .on('end', resolve); + .on('end', resolve); }); done(); }); From 6a8e2e645e1bfdbf78b1017d96338a502145f2f0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 13 Apr 2023 14:36:10 -0400 Subject: [PATCH 304/708] Upversion to 1.18.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 97b72a2ac..93cc662cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.17.0", + "version": "1.18.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 52ddbc088..554037670 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.17.0", + "version": "1.18.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 23677fcd60d50583a8974b9b8736dac3ca31a1a3 Mon Sep 17 00:00:00 2001 From: Mavaddat Javid <5055400+mavaddat@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:40:31 -0400 Subject: [PATCH 305/708] Add JDK 20 in package.json (#3021) * Add JDK 20 in package.json * Update README.md --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 61614e16c..e5dd086c8 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 19 +* Supports code from Java 1.5 to Java 20 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-19", - "path": "/path/to/jdk-19", + "name": "JavaSE-20", + "path": "/path/to/jdk-20", "default": true }, ] diff --git a/package.json b/package.json index 554037670..c80d67a3c 100644 --- a/package.json +++ b/package.json @@ -787,7 +787,8 @@ "JavaSE-16", "JavaSE-17", "JavaSE-18", - "JavaSE-19" + "JavaSE-19", + "JavaSE-20" ], "description": "Java Execution Environment name. Must be unique." }, From a758854ababc03c00d47e8bfe75a28bfa272111c Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 17 Apr 2023 17:22:00 +0800 Subject: [PATCH 306/708] Adopt the lombok@1.18.27 edge release Signed-off-by: Jinbo Wang --- gulpfile.js | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 5ab8f3bae..8aa059aaa 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -122,13 +122,24 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.24'; - // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; - download(lombokUrl) + // Adopt lombok-1.18.27 edge release for the issue https://github.com/redhat-developer/vscode-java/issues/2887 + download("https://projectlombok.org/lombok-edge.jar") .pipe(gulp.dest('./lombok/')) .on("error", reject) - .on('end', resolve); + .on('end', () => { + fse.renameSync("./lombok/lombok-edge.jar", "./lombok/lombok-1.18.27.jar"); + resolve(); + }); + + // TODO: Switch to stable version once lombok 1.18.28 is released. + + // const lombokVersion = '1.18.24'; + // // The latest lombok version can be found on the website https://projectlombok.org/downloads + // const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + // download(lombokUrl) + // .pipe(gulp.dest('./lombok/')) + // .on("error", reject) + // .on('end', resolve); }); done(); }); From fdaacd883537caae81691aa871606933b65f7709 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 17 Apr 2023 11:14:00 +0800 Subject: [PATCH 307/708] Remove 'resolveAdditionalTextEditsSupport' from extended client capabilities Signed-off-by: Sheng Chen --- src/extension.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 12f1040fd..8c716950b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -169,7 +169,6 @@ export function activate(context: ExtensionContext): Promise { clientHoverProvider: true, clientDocumentSymbolProvider: true, gradleChecksumWrapperPromptSupport: true, - resolveAdditionalTextEditsSupport: true, advancedIntroduceParameterRefactoringSupport: true, actionableRuntimeNotificationSupport: true, onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", From f8c989b4defa21ffd61b223bccd020cea38d1692 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 23 Apr 2023 12:54:12 +0800 Subject: [PATCH 308/708] Add a setting to control whether 'textEdit' of completion items can be resolved (#3072) * Add a setting to control whether 'textEdit' of completion item can be lazy-resolved Signed-off-by: Sheng Chen --- README.md | 5 ++++- package.json | 6 ++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e5dd086c8..26d2599a5 100644 --- a/README.md +++ b/README.md @@ -218,7 +218,7 @@ The following settings are supported: - auto - on - off -* `java.sharedIndexes.location`: Specifies a common index location for all workspaces. See default values as follows: +* `java.sharedIndexes.location`: Specifies a common index location for all workspaces. See default values as follows: - Windows: First use `"$APPDATA\\.jdt\\index"`, or `"~\\.jdt\\index"` if it does not exist - macOS: `"~/Library/Caches/.jdt/index"` - Linux: First use `"$XDG_CACHE_HOME/.jdt/index"`, or `"~/.cache/.jdt/index"` if it does not exist @@ -226,6 +226,9 @@ The following settings are supported: * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. +New in 1.18.0 +* `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index c80d67a3c..6bd05a9df 100644 --- a/package.json +++ b/package.json @@ -617,6 +617,12 @@ "markdownDescription": "Specify whether to match case for code completion.", "scope": "window" }, + "java.completion.lazyResolveTextEdit.enabled": { + "type": "boolean", + "default": true, + "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", + "scope": "window" + }, "java.foldingRange.enabled": { "type": "boolean", "default": true, From 2df508567f096312a20913ad902079c030b822f7 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 21 Apr 2023 14:05:04 +0800 Subject: [PATCH 309/708] Ensure meaningful information is displayed via progress reporter Signed-off-by: Sheng Chen --- src/serverTaskPresenter.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index f8080f13a..547ad87b2 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -95,7 +95,15 @@ class ServerTaskTerminal implements Pseudoterminal { return; } - this.onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task}: ${report.status} [${report.workDone}/${report.totalWork}]\r\n`); + let taskMsg = `${report.id.slice(0, 8)} ${report.task}`; + if (report.status) { + taskMsg += `: ${report.status}`; + } + if (report.totalWork && report.workDone >= 0) { + taskMsg += ` [${report.workDone}/${report.totalWork}]`; + } + + this.onDidWriteEvent.fire(`${taskMsg}\r\n`); } open(initialDimensions: TerminalDimensions): void { From 1a62be8568297ba4a75c77cc26a3de2ea870509a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Apr 2023 21:44:30 -0400 Subject: [PATCH 310/708] Changelog for 1.18.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d7407605f..d6497a635 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 1.18.0 (April 27th, 2023) + * performance - Completion handling should not be done in asynchronous thread pool. See [JLS#2605](https://github.com/eclipse/eclipse.jdt.ls/pull/2605). + * performance - Support lazily resolving postfix completion items. See [#3072](https://github.com/redhat-developer/vscode-java/pull/3072), [JLS#2616](https://github.com/eclipse/eclipse.jdt.ls/issues/2616), [JLS#2584](https://github.com/eclipse/eclipse.jdt.ls/issues/2584). + * performance - Place the URI of a document into the completion response store. See [#2614](https://github.com/eclipse/eclipse.jdt.ls/pull/2614). + * enhancement - Provide Java 20 support. See [#3023](https://github.com/redhat-developer/vscode-java/issues/3023). + * enhancement - Add `syserr` postfix completion. See [JLS#2620](https://github.com/eclipse/eclipse.jdt.ls/pull/2620). + * bug fix - Ensure meaningful information is displayed by the progress reporter. See [#3082](https://github.com/redhat-developer/vscode-java/pull/3082). + * bug fix - Respect settings in the `lombok.config` file. See [#2887](https://github.com/redhat-developer/vscode-java/issues/2887). + * bug fix - `NullPointerException` in `signatureHelp/codeAction/inlayHint` when AST is not generated. See [JLS#2608](https://github.com/eclipse/eclipse.jdt.ls/issues/2608). + * bug fix - `StringIndexOutOfBoundsException` on `textDocument/signatureHelp` when triggered from end of document. See [JLS#2606](https://github.com/eclipse/eclipse.jdt.ls/issues/2606). + * bug fix - Some logged information should only be shown in debug mode. See [JLS#2603](https://github.com/eclipse/eclipse.jdt.ls/issues/2603). + ## 1.17.0 (April 13th, 2023) * performance - Support resolving dependencies in parallel for Maven projects. See [#3030](https://github.com/redhat-developer/vscode-java/pull/3030). * performance - Cache and re-use type bindings for a completion invocation. See [JLS#2535](https://github.com/eclipse/eclipse.jdt.ls/pull/2535). From 210ea427a4b3fe1f3dff876d5b4d4a6c148e7880 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Apr 2023 10:40:50 -0400 Subject: [PATCH 311/708] Upversion to 1.19.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 26d2599a5..ce019ff5d 100644 --- a/README.md +++ b/README.md @@ -225,8 +225,6 @@ The following settings are supported: * `java.refactoring.extract.interface.replace`: Specify whether to replace all the occurrences of the subtype with the new extracted interface. Defaults to `true`. * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. - -New in 1.18.0 * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 93cc662cb..74293ecb8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.18.0", + "version": "1.19.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 6bd05a9df..40486dd58 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.18.0", + "version": "1.19.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From bd03b35664fd9c72a4de06f1d85ad14302ccca12 Mon Sep 17 00:00:00 2001 From: Alexander Chen Date: Thu, 21 Jul 2022 11:33:17 -0400 Subject: [PATCH 312/708] Added restart Java language server command. - Show progress for restarting the language server Signed-off-by: AlexXuChen Co-authored-by: Roland Grunberg Co-authored-by: Jessica He --- README.md | 1 + package.json | 9 +++++++ package.nls.json | 3 ++- src/commands.ts | 4 +++ src/extension.ts | 25 ++++++++++++++++++- src/javaServerStarter.ts | 2 +- src/standardLanguageClient.ts | 4 +-- src/syntaxLanguageClient.ts | 3 ++- test/lightweight-mode-suite/extension.test.ts | 1 + test/standard-mode-suite/extension.test.ts | 1 + 10 files changed, 47 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index ce019ff5d..aa2e02aa4 100644 --- a/README.md +++ b/README.md @@ -108,6 +108,7 @@ The following commands are available: - `Java: List All Java Source Paths`: lists all the Java source paths recognized by the Java Language Server workspace. - `Java: Show Build Job Status`: shows the Java Language Server job status in Visual Studio Code terminal. - `Java: Go to Super Implementation`: goes to the super implementation for the current selected symbol in editor. +- `Java: Restart Java Language Server`: restarts the Java language server. Supported VS Code settings ========================== diff --git a/package.json b/package.json index 40486dd58..8d0a5eb71 100644 --- a/package.json +++ b/package.json @@ -1250,6 +1250,11 @@ "command": "java.clean.sharedIndexes", "title": "%java.clean.sharedIndexes%", "category": "Java" + }, + { + "command": "java.server.restart", + "title": "%java.server.restart%", + "category": "Java" } ], "keybindings": [ @@ -1381,6 +1386,10 @@ { "command": "java.server.mode.switch", "when": "java:serverMode == LightWeight" + }, + { + "command": "java.server.restart", + "when": "javaLSReady" } ], "view/title": [ diff --git a/package.nls.json b/package.nls.json index e82f5287f..b8fb183ab 100644 --- a/package.nls.json +++ b/package.nls.json @@ -23,5 +23,6 @@ "java.action.showSubtypeHierarchy": "Show Subtype Hierarchy", "java.action.changeBaseType": "Base on this Type", "java.project.createModuleInfo.command": "Create module-info.java", - "java.clean.sharedIndexes": "Clean Shared Indexes" + "java.clean.sharedIndexes": "Clean Shared Indexes", + "java.server.restart": "Restart Java Language Server" } diff --git a/src/commands.ts b/src/commands.ts index 4ba3b287a..4ff0306de 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -274,6 +274,10 @@ export namespace Commands { * Command to switch between standard mode and lightweight mode. */ export const SWITCH_SERVER_MODE = 'java.server.mode.switch'; + /** + * Command to restart the language server. + */ + export const RESTART_LANGUAGE_SERVER = 'java.server.restart'; export const LEARN_MORE_ABOUT_REFACTORING = '_java.learnMoreAboutRefactorings'; diff --git a/src/extension.ts b/src/extension.ts index 8c716950b..44b9e8e63 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -329,6 +329,8 @@ export function activate(context: ExtensionContext): Promise { context.subscriptions.push(onConfigurationChange(workspacePath, context)); + registerRestartJavaLanguageServerCommand(context); + /** * Command to switch the server mode. Currently it only supports switch from lightweight to standard. * @param force force to switch server mode without asking @@ -965,3 +967,24 @@ function registerOutOfMemoryDetection(storagePath: string) { showOOMMessage(); }); } + +function registerRestartJavaLanguageServerCommand(context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand(Commands.RESTART_LANGUAGE_SERVER, async () => { + switch (getJavaServerMode()) { + case (ServerMode.standard): + // Standard server restart + await standardClient.getClient().restart(); + break; + case (ServerMode.lightWeight): + // Syntax server restart + await syntaxClient.getClient().restart(); + break; + case (ServerMode.hybrid): + if (syntaxClient.isAlive()) { + await syntaxClient.getClient().restart(); + } + await standardClient.getClient().restart(); + break; + } + })); +} diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 34ba23da7..bde9c910d 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -14,7 +14,7 @@ import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } fro // eslint-disable-next-line no-var declare var v8debug; -const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); +export const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); /** * Argument that tells the program where to generate the heap dump that is created when an OutOfMemoryError is raised and `HEAP_DUMP` has been passed diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 326b247b1..d413cb16b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -14,7 +14,7 @@ import { Commands } from "./commands"; import { ClientStatus } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; -import { awaitServerConnection, prepareExecutable } from "./javaServerStarter"; +import { awaitServerConnection, prepareExecutable, DEBUG } from "./javaServerStarter"; import { logger } from "./log"; import { checkLombokDependency } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -106,7 +106,7 @@ export class StandardLanguageClient { } // Create the language client and start the client. - this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions); + this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions, DEBUG); this.registerCommandsForStandardServer(context, jdtEventEmitter); fileEventHandler.registerFileEventHandlers(this.languageClient, context); diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 6af9d4271..880903c10 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -13,6 +13,7 @@ import { RequirementsData } from "./requirements"; import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { getJavaConfig } from "./utils"; +import { DEBUG } from "./javaServerStarter"; const extensionName = "Language Support for Java (Syntax Server)"; @@ -55,7 +56,7 @@ export class SyntaxLanguageClient { } if (serverOptions) { - this.languageClient = new LanguageClient('java', extensionName, serverOptions, newClientOptions); + this.languageClient = new LanguageClient('java', extensionName, serverOptions, newClientOptions, DEBUG); } this.status = ClientStatus.initialized; diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 29800e940..495e90624 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -24,6 +24,7 @@ suite('Java Language Extension - LightWeight', () => { Commands.SWITCH_SERVER_MODE, Commands.OPEN_FILE, Commands.CLEAN_SHARED_INDEXES, + Commands.RESTART_LANGUAGE_SERVER, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index b325d0250..284b97c04 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -96,6 +96,7 @@ suite('Java Language Extension - Standard', () => { Commands.RESOLVE_TYPE_HIERARCHY, Commands.RESOLVE_WORKSPACE_SYMBOL, Commands.RUNTIME_VALIDATION_OPEN, + Commands.RESTART_LANGUAGE_SERVER, Commands.SHOW_JAVA_IMPLEMENTATIONS, Commands.SHOW_JAVA_REFERENCES, Commands.SHOW_SERVER_TASK_STATUS, From 02deb55dd84f03d9e574b590c24876a66b0ffeb9 Mon Sep 17 00:00:00 2001 From: Rob Stryker Date: Fri, 19 May 2023 15:06:54 -0400 Subject: [PATCH 313/708] Use vscode-extension-proposals to unify proposal logic (#3101) - Use newest extension-proposals 0.0.21 - Fixes #3099 Signed-off-by: Rob Stryker --- package-lock.json | 159 +++++++++++----------- package.json | 1 + src/extension.ts | 5 +- src/recommendation/dependencyAnalytics.ts | 48 ++++--- src/recommendation/handler.ts | 6 - src/recommendation/handlerImpl.ts | 69 ---------- src/recommendation/index.ts | 13 +- src/telemetry.ts | 7 +- 8 files changed, 126 insertions(+), 182 deletions(-) delete mode 100644 src/recommendation/handler.ts delete mode 100644 src/recommendation/handlerImpl.ts diff --git a/package-lock.json b/package-lock.json index 74293ecb8..3f975a89c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -221,6 +221,11 @@ "fastq": "^1.6.0" } }, + "@redhat-developer/vscode-extension-proposals": { + "version": "0.0.21", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.21.tgz", + "integrity": "sha512-jSal4qflxLWNKzG7ObwpLwn2gzznuZJ+qvwx8IV/msJrUWxh7A8fzYuCmusKT09bzpwQNKDwySAVeSUS2xUmNg==" + }, "@redhat-developer/vscode-redhat-telemetry": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.6.1.tgz", @@ -4017,93 +4022,48 @@ "request-progress": "^3.0.0", "through": "^2.3.8" }, - "dependencies": { - "request": { - "version": "2.88.2", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "request-progress": { - "version": "3.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "requires": { - "throttleit": "^1.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - } - } - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, "dependencies": { "clone": { "version": "1.0.4", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true }, "clone-stats": { "version": "0.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", "dev": true }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + } + }, "lodash.template": { "version": "3.6.2", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", "dev": true, "requires": { @@ -4120,19 +4080,53 @@ }, "object-assign": { "version": "3.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true }, "replace-ext": { "version": "0.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", "dev": true }, + "request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, "vinyl": { "version": "0.5.3", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, "requires": { @@ -6431,6 +6425,15 @@ "uuid": "^3.3.2" } }, + "request-progress": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", + "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", + "dev": true, + "requires": { + "throttleit": "^1.0.0" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -7144,7 +7147,7 @@ "throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw=", + "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", "dev": true }, "through": { diff --git a/package.json b/package.json index 8d0a5eb71..a4aaaf54f 100644 --- a/package.json +++ b/package.json @@ -1469,6 +1469,7 @@ "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", "@redhat-developer/vscode-redhat-telemetry": "^0.6.1", + "@redhat-developer/vscode-extension-proposals": "0.0.21", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", diff --git a/src/extension.ts b/src/extension.ts index 44b9e8e63..14deb6adb 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -33,6 +33,7 @@ import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, get import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; +import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -101,11 +102,11 @@ export function activate(context: ExtensionContext): Promise { clientLogFile = path.join(storagePath, 'client.log'); initializeLogFile(clientLogFile); - Telemetry.startTelemetry(context); + const telemetryService: Promise = Telemetry.startTelemetry(context); enableJavadocSymbols(); - initializeRecommendation(context); + initializeRecommendation(context, telemetryService); registerOutOfMemoryDetection(storagePath); diff --git a/src/recommendation/dependencyAnalytics.ts b/src/recommendation/dependencyAnalytics.ts index 9f74aa2b5..b1470c44a 100644 --- a/src/recommendation/dependencyAnalytics.ts +++ b/src/recommendation/dependencyAnalytics.ts @@ -2,34 +2,42 @@ 'use strict'; +import { IRecommendationService, Recommendation } from "@redhat-developer/vscode-extension-proposals/lib"; import * as vscode from "vscode"; -import { IHandler } from "./handler"; const EXTENSION_NAME = "redhat.fabric8-analytics"; const GH_ORG_URL = `https://github.com/fabric8-analytics`; -const RECOMMENDATION_MESSAGE = `Do you want to install the [Dependency Analytics](${GH_ORG_URL}) extension to stay informed about vulnerable dependencies in pom.xml files?`; -const JAVA_DEPENDENCY_ANALYTICS_SHOW = "java.recommendations.dependency.analytics.show"; - -function isPomDotXml(uri: vscode.Uri) { - return !!uri.path && uri.path.toLowerCase().endsWith("pom.xml"); +let alreadyShown = false; +export function initialize (context: vscode.ExtensionContext, recommendService: IRecommendationService): Recommendation[] { + const ret: Recommendation = createDependencyRecommendation(recommendService); + delayedShowDependencyRecommendation(context, recommendService); + return [ret]; } -export function initialize (context: vscode.ExtensionContext, handler: IHandler): void { - const show = vscode.workspace.getConfiguration().get(JAVA_DEPENDENCY_ANALYTICS_SHOW); - if (!show) { - return; - } - if (!handler.canRecommendExtension(EXTENSION_NAME)) { - return; - } - context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(e => { - if (isPomDotXml(e.uri)) { - handler.handle(EXTENSION_NAME, RECOMMENDATION_MESSAGE); - } - })); +function createDependencyRecommendation(recommendService: IRecommendationService): Recommendation { + const r1 = recommendService.create(EXTENSION_NAME, "Dependency Analytics", + `The [Dependency Analytics](${GH_ORG_URL}) extension helps you to stay informed about vulnerable dependencies in pom.xml files.`, false); + return r1; +} +async function delayedShowDependencyRecommendation (context: vscode.ExtensionContext, recommendService: IRecommendationService): Promise { + await new Promise(f => setTimeout(f, 6000)); const isPomDotXmlOpened = vscode.workspace.textDocuments.findIndex(doc => isPomDotXml(doc.uri)) !== -1; if (isPomDotXmlOpened) { - handler.handle(EXTENSION_NAME, RECOMMENDATION_MESSAGE); + recommendService.show(EXTENSION_NAME); + } else { + context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(e => { + // I would prefer to delete this listener after showing once, but i can't figure out how ;) + if( !alreadyShown ) { + if (isPomDotXml(e.uri)) { + recommendService.show(EXTENSION_NAME); + alreadyShown = true; + } + } + })); } } + +function isPomDotXml(uri: vscode.Uri) { + return !!uri.path && uri.path.toLowerCase().endsWith("pom.xml"); +} \ No newline at end of file diff --git a/src/recommendation/handler.ts b/src/recommendation/handler.ts deleted file mode 100644 index 25a66139a..000000000 --- a/src/recommendation/handler.ts +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -export interface IHandler { - handle(extName: string, message: string): Promise; - canRecommendExtension(extName: string): boolean; -} diff --git a/src/recommendation/handlerImpl.ts b/src/recommendation/handlerImpl.ts deleted file mode 100644 index ffc1d3659..000000000 --- a/src/recommendation/handlerImpl.ts +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -'use strict'; - -import * as vscode from "vscode"; -import { IHandler } from "./handler"; -import { Telemetry } from "../telemetry"; - -const KEY_RECOMMENDATION_USER_CHOICE_MAP = "recommendationUserChoice"; - -async function installExtensionCmdHandler(extensionName: string, displayName: string) { - return vscode.window.withProgress({ location: vscode.ProgressLocation.Notification, title: `Installing ${displayName||extensionName}...`}, progress => { - return vscode.commands.executeCommand("workbench.extensions.installExtension", extensionName); - }).then(() => { - vscode.window.showInformationMessage(`Successfully installed ${displayName||extensionName}.`); - }); -} - -enum UserChoice { - install = "Install", - never = "Never", - later = "Later", -} - -export class HandlerImpl implements IHandler { - userChoice: any; - storeUserChoice: any; - constructor(context: vscode.ExtensionContext) { - this.userChoice = () => { - return context.globalState.get(KEY_RECOMMENDATION_USER_CHOICE_MAP, {}); - }; - - this.storeUserChoice = (choice: object) => { - context.globalState.update(KEY_RECOMMENDATION_USER_CHOICE_MAP, choice); - }; - } - - isExtensionInstalled(extName: string): boolean { - return !!vscode.extensions.getExtension(extName); - } - - canRecommendExtension(extName: string): boolean { - return this.userChoice()[extName] !== UserChoice.never && !this.isExtensionInstalled(extName); - } - - async handle(extName: string, message: string): Promise { - if (this.isExtensionInstalled(extName)) { - return; - } - - const choice = this.userChoice(); - if (choice[extName] === UserChoice.never) { - return; - } - - const actions: Array = Object.values(UserChoice); - const answer = await vscode.window.showInformationMessage(message, ...actions); - await Telemetry.sendTelemetry('recommendation', { - recommendation: extName, - choice:answer?.toLowerCase() - }); - if (answer === UserChoice.install) { - await installExtensionCmdHandler(extName, extName); - } - - choice[extName] = answer; - this.storeUserChoice(choice); - } -} diff --git a/src/recommendation/index.ts b/src/recommendation/index.ts index 7a46fb630..8162e097a 100644 --- a/src/recommendation/index.ts +++ b/src/recommendation/index.ts @@ -3,10 +3,15 @@ 'use strict'; import * as vscode from "vscode"; -import { HandlerImpl } from "./handlerImpl"; import { initialize as initDependencyAnalytics } from "./dependencyAnalytics"; +import { TelemetryService } from "@redhat-developer/vscode-redhat-telemetry/lib"; +import { IRecommendationService, Recommendation, RecommendationCore } from "@redhat-developer/vscode-extension-proposals/lib"; -export function initialize (context: vscode.ExtensionContext) { - const handler = new HandlerImpl(context); - initDependencyAnalytics(context, handler); +export async function initialize (context: vscode.ExtensionContext, telemetry: Promise): Promise { + const telem: TelemetryService = await telemetry; + const recommendService: IRecommendationService | undefined = RecommendationCore.getService(context, telem); + if( recommendService ) { + const fromDependencyAnalytics: Recommendation[] = initDependencyAnalytics(context, recommendService); + recommendService.register(fromDependencyAnalytics); + } } diff --git a/src/telemetry.ts b/src/telemetry.ts index 9a18dd9b2..d930123df 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -17,14 +17,15 @@ export namespace Telemetry { * @returns when the telemetry service has been started * @throws Error if the telemetry service has already been started */ - export async function startTelemetry(context: ExtensionContext): Promise { + export async function startTelemetry(context: ExtensionContext): Promise { if (!!telemetryManager) { throw new Error("The telemetry service for vscode-java has already been started"); } const redhatService = await getRedHatService(context); - telemetryManager = await redhatService.getTelemetryService(); + const telemService = await redhatService.getTelemetryService(); + telemetryManager = telemService; setTimeout(sendEmptyStartUp, 60000); // assume LS may not have initialized - return; + return telemService; } /** From c1ba746d407eb78585878f799739dd8ec305d63a Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 25 May 2023 14:33:52 +0800 Subject: [PATCH 314/708] Re-validate current document if the focus is switched to a Java file (#3053) * Re-validate current document if the focus is switched to a Java file Signed-off-by: Jinbo Wang --- README.md | 3 +++ package.json | 6 ++++++ src/diagnostic.ts | 19 +++++++++++++++++++ src/protocol.ts | 8 ++++++++ src/settings.ts | 4 ++++ src/standardLanguageClient.ts | 2 ++ 6 files changed, 42 insertions(+) create mode 100644 src/diagnostic.ts diff --git a/README.md b/README.md index aa2e02aa4..ff6126b5a 100644 --- a/README.md +++ b/README.md @@ -228,6 +228,9 @@ The following settings are supported: * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. +New in 1.19.0 +* `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index a4aaaf54f..ef9d3ab4d 100644 --- a/package.json +++ b/package.json @@ -1108,6 +1108,12 @@ "usesOnlineServices", "telemetry" ] + }, + "java.edit.validateAllOpenBuffersOnChanges": { + "type": "boolean", + "default": false, + "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", + "scope": "window" } } }, diff --git a/src/diagnostic.ts b/src/diagnostic.ts new file mode 100644 index 000000000..e68d2b05a --- /dev/null +++ b/src/diagnostic.ts @@ -0,0 +1,19 @@ +import { ExtensionContext, window } from "vscode"; +import { ValidateDocumentNotification } from "./protocol"; +import { LanguageClient } from "vscode-languageclient/node"; +import { validateAllOpenBuffersOnChanges } from "./settings"; + +export function registerDocumentValidationListener(context: ExtensionContext, languageClient: LanguageClient) { + context.subscriptions.push(window.onDidChangeActiveTextEditor(textEditor => { + // Refresh the diagnostics when the focus is switched to a Java file. + if (textEditor?.document.uri?.scheme === "file" && textEditor?.document.languageId === "java") { + if (!validateAllOpenBuffersOnChanges()) { + languageClient.sendNotification(ValidateDocumentNotification.type, { + textDocument: { + uri: textEditor.document.uri.toString(), + }, + }); + } + } + })); +} diff --git a/src/protocol.ts b/src/protocol.ts index cabf992f3..26d704bc1 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -464,3 +464,11 @@ export interface CheckExtractInterfaceStatusResponse { export namespace CheckExtractInterfaceStatusRequest { export const type = new RequestType('java/checkExtractInterfaceStatus'); } + +export interface ValidateDocumentParams { + textDocument: TextDocumentIdentifier; +} + +export namespace ValidateDocumentNotification { + export const type = new NotificationType('java/validateDocument'); +} diff --git a/src/settings.ts b/src/settings.ts index f46501c9a..56f1089cf 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -274,6 +274,10 @@ export function getJavaServerMode(): ServerMode { || ServerMode.hybrid; } +export function validateAllOpenBuffersOnChanges(): boolean { + return workspace.getConfiguration().get('java.edit.validateAllOpenBuffersOnChanges'); +} + export function setGradleWrapperChecksum(wrapper: string, sha256?: string) { const opened = gradleWrapperPromptDialogs.filter(v => (v === sha256)); if (opened !== null && opened.length > 0) { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index d413cb16b..ab70fdf51 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -39,6 +39,7 @@ import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; +import { registerDocumentValidationListener } from './diagnostic'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -146,6 +147,7 @@ export class StandardLanguageClient { }); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); + registerDocumentValidationListener(context, this.languageClient); break; case 'Started': this.status = ClientStatus.started; From baf99f7b9f1a3cd5a7916df798c5cdf806efa98f Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 24 May 2023 10:41:54 -0400 Subject: [PATCH 315/708] Add build script to download language server if not found Signed-off-by: Hope Hadfield --- CONTRIBUTING.md | 5 ++++- gulpfile.js | 38 +++++++++++++++++++++++++++++--------- package.json | 1 + 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b54978088..ae6079ce2 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -81,8 +81,11 @@ This assumes that you are starting on the `vscode-java` directory ```bash $ cd ./vscode-java - $ npm run build-server + $ npm run build ``` +If the eclipse.jdt.ls directory is not found as a sibling directory (see the desired hierarchy in the previous step), a snapshot of the language server will be downloaded instead. + +To build the server using only the local eclipse.jdt.ls repository, use `npm run build-server`. **\*Optional:** You can run faster server builds during development by calling `npm run fast-build-server` script instead, this will build server binaries that are required by your host OS only. You can also use `npm run watch-server` which will build and place them on the extension for Java changes. These commands run Maven in offline mode, so you might need to run `build-server` at least once, to fetch all the dependencies. diff --git a/gulpfile.js b/gulpfile.js index 8aa059aaa..b49dacb02 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -13,6 +13,7 @@ const server_dir = '../eclipse.jdt.ls'; const originalTestFolder = path.join(__dirname, 'test', 'resources', 'projects', 'maven', 'salut'); const tempTestFolder = path.join(__dirname, 'test-temp'); const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); +const JDT_LS_SNAPSHOT_URL = "http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz" //... gulp.task('clean_jre', function (done) { @@ -145,19 +146,23 @@ gulp.task('download_lombok', async function (done) { }); gulp.task('download_server', function (done) { - fse.removeSync('./server'); - download("http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz") - .pipe(decompress()) - .pipe(gulp.dest('./server')); + download_server_fn(); done(); }); gulp.task('build_server', function (done) { - fse.removeSync('./server'); - cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); - gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') - .pipe(decompress()) - .pipe(gulp.dest('./server')); + build_server_fn(); + done(); +}); + +gulp.task('build_or_download', function (done) { + if (!fse.existsSync(server_dir)) { + console.log('NOTE: eclipse.jdt.ls is not found as a sibling directory, downloading the latest snapshot of the Eclipse JDT Language Server...'); + download_server_fn(); + } + else { + build_server_fn(); + } done(); }); @@ -244,3 +249,18 @@ function prependZero(num) { } return `${num < 10 ? "0" : ""}${num}`; } + +function download_server_fn(){ + fse.removeSync('./server'); + download(JDT_LS_SNAPSHOT_URL) + .pipe(decompress()) + .pipe(gulp.dest('./server')); +} + +function build_server_fn(){ + fse.removeSync('./server'); + cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); + gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') + .pipe(decompress()) + .pipe(gulp.dest('./server')); +} \ No newline at end of file diff --git a/package.json b/package.json index ef9d3ab4d..5481bf4e4 100644 --- a/package.json +++ b/package.json @@ -1431,6 +1431,7 @@ "pretest": "npm run compile", "test": "node ./out/test/runtest.js", "build-server": "./node_modules/.bin/gulp build_server", + "build": "./node_modules/.bin/gulp build_or_download", "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx ." From 59f9f3d232027c1dd1a606100157d050a248e119 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 29 May 2023 10:11:48 +0800 Subject: [PATCH 316/708] Turn off text edit lazy resolving (#3114) Signed-off-by: Sheng Chen --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ff6126b5a..446ccba51 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ The following settings are supported: * `java.refactoring.extract.interface.replace`: Specify whether to replace all the occurrences of the subtype with the new extracted interface. Defaults to `true`. * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. -* `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. +* `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `false`. New in 1.19.0 * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. diff --git a/package.json b/package.json index 5481bf4e4..b74db48c9 100644 --- a/package.json +++ b/package.json @@ -619,7 +619,7 @@ }, "java.completion.lazyResolveTextEdit.enabled": { "type": "boolean", - "default": true, + "default": false, "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", "scope": "window" }, From 1eb619ee6ee7a9d162a8eecbeb6e15759d1699ea Mon Sep 17 00:00:00 2001 From: francisco souza <108725+fsouza@users.noreply.github.com> Date: Mon, 29 May 2023 12:07:35 -0400 Subject: [PATCH 317/708] Remove repository.engineering.redhat.com from package-lock.json Should make it possible for mere mortals like me to install packages :D Related to #2876. --- package-lock.json | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3f975a89c..9fb82260c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -525,7 +525,7 @@ }, "@types/sinon": { "version": "10.0.13", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, "requires": { @@ -1122,7 +1122,7 @@ }, "ansi-styles": { "version": "2.2.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", "dev": true }, @@ -1724,7 +1724,7 @@ }, "chalk": { "version": "1.1.3", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { @@ -2456,7 +2456,7 @@ }, "string_decoder": { "version": "0.10.31", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true } @@ -2640,7 +2640,7 @@ }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true }, @@ -4173,7 +4173,7 @@ }, "has-ansi": { "version": "2.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, "requires": { @@ -5224,7 +5224,7 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, @@ -7057,7 +7057,7 @@ }, "supports-color": { "version": "2.0.0", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", "dev": true }, @@ -8117,7 +8117,7 @@ }, "yargs-parser": { "version": "5.0.1", - "resolved": "https://repository.engineering.redhat.com/nexus/repository/registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, "requires": { From 19131aa00ad7114244745f91069a7469522e439b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 29 May 2023 16:36:11 +0800 Subject: [PATCH 318/708] Update to lombok 1.18.28 Signed-off-by: Jinbo Wang --- gulpfile.js | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index b49dacb02..e27223f98 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -123,24 +123,13 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - // Adopt lombok-1.18.27 edge release for the issue https://github.com/redhat-developer/vscode-java/issues/2887 - download("https://projectlombok.org/lombok-edge.jar") + const lombokVersion = '1.18.28'; + // The latest lombok version can be found on the website https://projectlombok.org/downloads + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + download(lombokUrl) .pipe(gulp.dest('./lombok/')) .on("error", reject) - .on('end', () => { - fse.renameSync("./lombok/lombok-edge.jar", "./lombok/lombok-1.18.27.jar"); - resolve(); - }); - - // TODO: Switch to stable version once lombok 1.18.28 is released. - - // const lombokVersion = '1.18.24'; - // // The latest lombok version can be found on the website https://projectlombok.org/downloads - // const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; - // download(lombokUrl) - // .pipe(gulp.dest('./lombok/')) - // .on("error", reject) - // .on('end', resolve); + .on('end', resolve); }); done(); }); From f9bfc261a74e431d550b959eb0ae4e38c50e3860 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 29 May 2023 16:36:11 +0800 Subject: [PATCH 319/708] Changelog for 1.19.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6497a635..5097cf591 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Change Log +## 1.19.0 (June 1st, 2023) + * performance - No need to run the reconcile operation in a workspace job. See [JLS#2660](https://github.com/eclipse/eclipse.jdt.ls/pull/2660). + * performance - Avoid blocking the pipeline while handling `refreshLocal` during document lifecycle events. See [JLS#2659](https://github.com/eclipse/eclipse.jdt.ls/pull/2659). + * performance - Avoid running document lifecycle in a workspace runnable unless it is necessary. See [JLS#2641](https://github.com/eclipse/eclipse.jdt.ls/pull/2641), [JLS#2637](https://github.com/eclipse/eclipse.jdt.ls/pull/2637). + * performance - Re-validate current document if the focus is switched to a Java file. See [#3053](https://github.com/redhat-developer/vscode-java/pull/3053). + * performance - Only append data on completion item selected. See [JLS#2639](https://github.com/eclipse/eclipse.jdt.ls/pull/2639). + * performance - Remove some unnecessary completion item data fields. See [JLS#2638](https://github.com/eclipse/eclipse.jdt.ls/issues/2638). + * performance - Remove `COMPLETION_EXECUTION_TIME` from the completion item response. See [JLS#2621](https://github.com/eclipse/eclipse.jdt.ls/issues/2621). + * performance - Use separate thread to handle `didChangeWatchedFiles` events. See [JLS#2643](https://github.com/eclipse/eclipse.jdt.ls/pull/2643). + * enhancement - Add command to restart Java language server. See [#2586](https://github.com/redhat-developer/vscode-java/pull/2586). + * enhancement - Add support for proper array completions. See [JLS#2609](https://github.com/eclipse/eclipse.jdt.ls/issues/2609). + * enhancement - Completion items should support `InsertTextMode`. See [JLS#2577](https://github.com/eclipse/eclipse.jdt.ls/issues/2577). + * enhancement - Use `vscode-extension-proposals` for recommendations. See [#3099](https://github.com/redhat-developer/vscode-java/issues/3099). + * bug fix - Missing javadoc for field during completion. See [JLS#2645](https://github.com/eclipse/eclipse.jdt.ls/issues/2645). + * bug fix - Incorrect completion text edit ranges for snippets. See [JLS#2626](https://github.com/eclipse/eclipse.jdt.ls/issues/2626). + * bug fix - Update completion resolve data for javadoc completions. See [JLS#2636](https://github.com/eclipse/eclipse.jdt.ls/pull/2636). + * bug fix - Prevent sending shutdown job progress report. See [JLS#2622](https://github.com/eclipse/eclipse.jdt.ls/pull/2622). + * bug fix - On Windows, `os.execvp` does not load the executable into current process. See [JLS#2615](https://github.com/eclipse/eclipse.jdt.ls/issues/2615). + * bug fix - Code completion for constructor is broken with `java.completion.matchCase` enabled. See [#3118](https://github.com/redhat-developer/vscode-java/issues/3118). + * bug fix - Turn off text edit lazy resolving. See [#3114](https://github.com/redhat-developer/vscode-java/pull/3114). + * build - Gracefully recover from failure to detect the language server project in sibling directory. See [#3107](https://github.com/redhat-developer/vscode-java/issues/3107). + * dependencies - Update to lombok 1.18.28. See [#3117](https://github.com/redhat-developer/vscode-java/pull/3117). + ## 1.18.0 (April 27th, 2023) * performance - Completion handling should not be done in asynchronous thread pool. See [JLS#2605](https://github.com/eclipse/eclipse.jdt.ls/pull/2605). * performance - Support lazily resolving postfix completion items. See [#3072](https://github.com/redhat-developer/vscode-java/pull/3072), [JLS#2616](https://github.com/eclipse/eclipse.jdt.ls/issues/2616), [JLS#2584](https://github.com/eclipse/eclipse.jdt.ls/issues/2584). From ac8505ea80ca82a042f1482a833a38521ff449d3 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 1 Jun 2023 15:02:22 +0800 Subject: [PATCH 320/708] Revert "Turn off text edit lazy resolving (#3114)" This reverts commit 59f9f3d232027c1dd1a606100157d050a248e119. --- README.md | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 446ccba51..ff6126b5a 100644 --- a/README.md +++ b/README.md @@ -226,7 +226,7 @@ The following settings are supported: * `java.refactoring.extract.interface.replace`: Specify whether to replace all the occurrences of the subtype with the new extracted interface. Defaults to `true`. * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. -* `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `false`. +* `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. New in 1.19.0 * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. diff --git a/package.json b/package.json index b74db48c9..5481bf4e4 100644 --- a/package.json +++ b/package.json @@ -619,7 +619,7 @@ }, "java.completion.lazyResolveTextEdit.enabled": { "type": "boolean", - "default": false, + "default": true, "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", "scope": "window" }, From e2a1a23cc743d177a11350b14fe228e47f5c5488 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 1 Jun 2023 09:04:13 -0400 Subject: [PATCH 321/708] Adjust Changelog due to re-enabling lazy text edit resolving. Signed-off-by: Roland Grunberg --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5097cf591..a7ac35ad1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * performance - Remove some unnecessary completion item data fields. See [JLS#2638](https://github.com/eclipse/eclipse.jdt.ls/issues/2638). * performance - Remove `COMPLETION_EXECUTION_TIME` from the completion item response. See [JLS#2621](https://github.com/eclipse/eclipse.jdt.ls/issues/2621). * performance - Use separate thread to handle `didChangeWatchedFiles` events. See [JLS#2643](https://github.com/eclipse/eclipse.jdt.ls/pull/2643). + * performance - Add option to lazily resolve the text edits. See [JLS#1864](https://github.com/eclipse/eclipse.jdt.ls/issues/1864). * enhancement - Add command to restart Java language server. See [#2586](https://github.com/redhat-developer/vscode-java/pull/2586). * enhancement - Add support for proper array completions. See [JLS#2609](https://github.com/eclipse/eclipse.jdt.ls/issues/2609). * enhancement - Completion items should support `InsertTextMode`. See [JLS#2577](https://github.com/eclipse/eclipse.jdt.ls/issues/2577). @@ -19,7 +20,6 @@ * bug fix - Prevent sending shutdown job progress report. See [JLS#2622](https://github.com/eclipse/eclipse.jdt.ls/pull/2622). * bug fix - On Windows, `os.execvp` does not load the executable into current process. See [JLS#2615](https://github.com/eclipse/eclipse.jdt.ls/issues/2615). * bug fix - Code completion for constructor is broken with `java.completion.matchCase` enabled. See [#3118](https://github.com/redhat-developer/vscode-java/issues/3118). - * bug fix - Turn off text edit lazy resolving. See [#3114](https://github.com/redhat-developer/vscode-java/pull/3114). * build - Gracefully recover from failure to detect the language server project in sibling directory. See [#3107](https://github.com/redhat-developer/vscode-java/issues/3107). * dependencies - Update to lombok 1.18.28. See [#3117](https://github.com/redhat-developer/vscode-java/pull/3117). From 07955572b46faeb13fc7da74826df3feb24c7762 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 1 Jun 2023 11:53:11 -0400 Subject: [PATCH 322/708] Upversion to 1.20.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ff6126b5a..3d0ef15ae 100644 --- a/README.md +++ b/README.md @@ -227,8 +227,6 @@ The following settings are supported: * `java.import.maven.disableTestClasspathFlag` : Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects. Defaults to `false`. * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. - -New in 1.19.0 * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 9fb82260c..a06e43854 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.19.0", + "version": "1.20.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5481bf4e4..8f2071d6b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.19.0", + "version": "1.20.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 71f02cc8a62400e9299c69c3b337965a529e100b Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 2 Jun 2023 11:13:01 -0400 Subject: [PATCH 323/708] Fixed typo in const METADATA_FILES_GENERATION --- src/commands.ts | 2 +- src/extension.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 4ff0306de..51d4cbdf9 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -287,7 +287,7 @@ export namespace Commands { export const NOT_COVERED_EXECUTION = '_java.notCoveredExecution'; - export const MEATDATA_FILES_GENERATION = '_java.metadataFilesGeneration'; + export const METADATA_FILES_GENERATION = '_java.metadataFilesGeneration'; export const RUNTIME_VALIDATION_OPEN = 'java.runtimeValidation.open'; diff --git a/src/extension.ts b/src/extension.ts index 14deb6adb..c5162e636 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -90,7 +90,7 @@ export function activate(context: ExtensionContext): Promise { })); storagePath = context.storagePath; - context.subscriptions.push(commands.registerCommand(Commands.MEATDATA_FILES_GENERATION, async () => { + context.subscriptions.push(commands.registerCommand(Commands.METADATA_FILES_GENERATION, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.metadataFilesGeneration.md`)), 'Metadata Files Generation', "", context); })); context.subscriptions.push(commands.registerCommand(Commands.LEARN_MORE_ABOUT_CLEAN_UPS, async () => { From df200f1aa6bfab07b64dac13317175f39ac90079 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 26 May 2023 16:57:55 -0400 Subject: [PATCH 324/708] Display error status for OutOfMemory & consistent terminations --- src/clientErrorHandler.ts | 2 ++ src/extension.ts | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/clientErrorHandler.ts b/src/clientErrorHandler.ts index ff7f55118..2e4fbd9c6 100644 --- a/src/clientErrorHandler.ts +++ b/src/clientErrorHandler.ts @@ -1,4 +1,5 @@ import { window, commands } from "vscode"; +import { serverStatusBarProvider } from './serverStatusBarProvider'; import { ErrorHandler, Message, ErrorAction, CloseAction, ErrorHandlerResult, CloseHandlerResult } from "vscode-languageclient"; import { Commands } from "./commands"; import { logger } from "./log"; @@ -36,6 +37,7 @@ export class ClientErrorHandler implements ErrorHandler { if (diff <= 3 * 60 * 1000) { const message = `The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`; logger.error(message); + serverStatusBarProvider.setError(); const action = "Show logs"; window.showErrorMessage(message, action).then(selection => { if (selection === action) { diff --git a/src/extension.ts b/src/extension.ts index c5162e636..44d6f2329 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -242,7 +242,11 @@ export function activate(context: ExtensionContext): Promise { errorHandler: new ClientErrorHandler(extensionName), initializationFailedHandler: error => { logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); - return true; + if (error.toString().includes('Connection') && error.toString().includes('disposed')) { + return false; + } else { + return true; + } }, outputChannel: requireStandardServer ? new OutputInfoCollector(extensionName) : undefined, outputChannelName: extensionName @@ -966,6 +970,7 @@ function registerOutOfMemoryDetection(storagePath: string) { fse.remove(path); } showOOMMessage(); + serverStatusBarProvider.setError(); }); } From d1ceb3f09ef9919fdfa23856cef4cb7d06fcdb94 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 2 Jun 2023 10:55:33 -0400 Subject: [PATCH 325/708] Suppress extra error messages upon language server failure --- src/clientErrorHandler.ts | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/clientErrorHandler.ts b/src/clientErrorHandler.ts index 2e4fbd9c6..820d5b884 100644 --- a/src/clientErrorHandler.ts +++ b/src/clientErrorHandler.ts @@ -15,13 +15,15 @@ export class ClientErrorHandler implements ErrorHandler { if (count && count <= 3) { logger.error(`${this.name} server encountered error: ${_message}, ${_error && _error.toString()}`); return { - action: ErrorAction.Continue + action: ErrorAction.Continue, + handled: true }; } logger.error(`${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`); return { - action: ErrorAction.Shutdown + action: ErrorAction.Shutdown, + handled: true }; } @@ -30,7 +32,8 @@ export class ClientErrorHandler implements ErrorHandler { if (this.restarts.length < 5) { logger.error(`The ${this.name} server crashed and will restart.`); return { - action: CloseAction.Restart + action: CloseAction.Restart, + handled: true }; } else { const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; @@ -45,14 +48,16 @@ export class ClientErrorHandler implements ErrorHandler { } }); return { - action: CloseAction.DoNotRestart + action: CloseAction.DoNotRestart, + handled: true }; } logger.error(`The ${this.name} server crashed and will restart.`); this.restarts.shift(); return { - action: CloseAction.Restart + action: CloseAction.Restart, + handled: true }; } } From fba8a6fe17ad0ace2c25f7252b7ad7c2a2e4d42a Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Mon, 5 Jun 2023 23:08:59 +0200 Subject: [PATCH 326/708] Add support for surround with try_catch. (#3104) Signed-off-by: Gayan Perera --- snippets/java.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/java.json b/snippets/java.json index cac5a264c..fc95b9a1b 100644 --- a/snippets/java.json +++ b/snippets/java.json @@ -21,7 +21,7 @@ "prefix": "try_catch", "body": [ "try {", - "\t$1", + "\t${TM_SELECTED_TEXT:$1}", "} catch (${2:Exception} ${3:e}) {", "\t$0// TODO: handle exception", "}" From 14612c238dcb9fb718e4f2c228433e81cc478126 Mon Sep 17 00:00:00 2001 From: borellif Date: Wed, 22 Mar 2023 12:17:18 -0400 Subject: [PATCH 327/708] Support constructor access modifiers in snippet using choice values. --- snippets/java.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/snippets/java.json b/snippets/java.json index fc95b9a1b..a7a1d9aae 100644 --- a/snippets/java.json +++ b/snippets/java.json @@ -8,14 +8,14 @@ ], "description": "Public static main method" }, - "Public constructor": { + "Constructor": { "prefix": "ctor", "body": [ - "public ${1:${TM_FILENAME_BASE}}($2) {", - "\t${3:super();}$0", + "${1|public,protected,private|} ${2:${TM_FILENAME_BASE}}($3) {", + "\t${4:super();}$0", "}" ], - "description": "Public constructor" + "description": "Constructor" }, "trycatch": { "prefix": "try_catch", From da2c8b67370d1bd4a3b44b6c32a836218e64451b Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 7 Jun 2023 14:07:47 -0400 Subject: [PATCH 328/708] Use choice syntax as placeholder for method/field snippets. --- snippets/java.json | 52 +++++++--------------------------------------- 1 file changed, 8 insertions(+), 44 deletions(-) diff --git a/snippets/java.json b/snippets/java.json index a7a1d9aae..7a76f6d42 100644 --- a/snippets/java.json +++ b/snippets/java.json @@ -38,50 +38,14 @@ "}" ] }, - "private_method": { - "prefix": "private_method", + "method": { + "prefix": "method", "body": [ - "private ${1:void} ${2:name}($3) {", + "${1|public,protected,private|}${2| , static |}${3:void} ${4:name}($5) {", "\t$0", "}" ], - "description": "private method" - }, - "Public method": { - "prefix": "public_method", - "body": [ - "public ${1:void} ${2:name}(${3}) {", - "\t$0", - "}" - ], - "description": "public method" - }, - "Private static method": { - "prefix": "private_static_method", - "body": [ - "private static ${1:Type} ${2:name}(${3}) {", - "\t$0", - "}" - ], - "description": "private static method" - }, - "Public static method": { - "prefix": "public_static_method", - "body": [ - "public static ${1:void} ${2:name}(${3}) {", - "\t$0", - "}" - ], - "description": "public static method" - }, - "Protected Method": { - "prefix": "protected_method", - "body": [ - "protected ${1:void} ${2:name}(${3}) {", - "\t$0", - "}" - ], - "description": "Protected method" + "description": "Method" }, "Switch Statement": { "prefix": "switch", @@ -105,11 +69,11 @@ ], "description": "Create new Object" }, - "Private field": { - "prefix": "prf", + "Field": { + "prefix": "field", "body": [ - "private ${1:String} ${2:name};" + "${1|public,protected,private|} ${2:String} ${3:name};" ], - "description": "Private field" + "description": "Field" } } \ No newline at end of file From 3a03f032e1e2c6a6dafe505508a0650de3ec19a9 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 8 Jun 2023 14:35:37 +0800 Subject: [PATCH 329/708] Set the default value of 'java.completion.matchCase' to 'firstLetter' (#3142) * Set the default value of 'java.completion.matchCase' to 'firstLetter' Signed-off-by: Sheng Chen --- README.md | 1 + package.json | 4 +--- src/utils.ts | 5 ++--- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3d0ef15ae..432c7ae9b 100644 --- a/README.md +++ b/README.md @@ -212,6 +212,7 @@ The following settings are supported: * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. +* `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. diff --git a/package.json b/package.json index 8f2071d6b..96741065f 100644 --- a/package.json +++ b/package.json @@ -604,16 +604,14 @@ "java.completion.matchCase": { "type": "string", "enum": [ - "auto", "firstLetter", "off" ], "enumDescriptions": [ - "Only match case for the first letter when using Visual Studio Code - Insiders.", "Match case for the first letter when doing completion.", "Do not match case when doing completion." ], - "default": "auto", + "default": "firstLetter", "markdownDescription": "Specify whether to match case for code completion.", "scope": "window" }, diff --git a/src/utils.ts b/src/utils.ts index 8c496263d..f9c41937d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -205,9 +205,8 @@ export function getJavaConfig(javaHome: string) { break; } - const completionCaseMatching = javaConfig.completion.matchCase; - if (completionCaseMatching === "auto") { - javaConfig.completion.matchCase = isInsider ? "firstLetter" : "off"; + if (javaConfig.completion.matchCase === "auto") { + javaConfig.completion.matchCase = "firstLetter"; } javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; From 9a0b66ce945eb2941eeadcc26054c1e1417b851d Mon Sep 17 00:00:00 2001 From: Mickael Istria Date: Mon, 12 Jun 2023 22:41:38 +0200 Subject: [PATCH 330/708] JDT_LS_PATH env var to reference local JDT-LS build --- CONTRIBUTING.md | 10 ++++++++++ src/javaServerStarter.ts | 8 ++++---- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ae6079ce2..09e2cf3ae 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -176,6 +176,16 @@ While developing the language server and the extension, you don't need to deploy - You can modify `launch.json` to use a different port: - Modify `JDTLS_CLIENT_PORT` to specify the port VS Code should connect to. +## C-3) Set location to a local copy of JDT-LS + +This approach is mainly targeting developers of JDT-LS who want to test their changes in VSCode without having to rebuild vscode-java and to deal with the npm and vsix toolchains. + +- Make sure a recent snapshot of vscode-java is installed in your VSCode instance (as of vscode-java 1.20.0) +- (Optionally) clear the workspace state: `$ rm -r $HOME/.config/Code/User/workspaceStorage/0123456789abcdef01234567890abcdef/redhat.java/jdt_ws` +- Start VSCode with the `JDT_LS_PATH` environment variable set to the local copy of JDT-LS you want to try: `$ JDT_LS_PATH=$HOME/git/eclipse.jdt.ls/org.eclipse.jdt.ls.product/target/repository code` + +Most other options such as `DEBUG_VSCODE_JAVA` are still usable with this approach. + ## Sideloading You can create a binary that you can sideload to your VS Code installation. diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index bde9c910d..d6c35a283 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -155,7 +155,7 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp params.push('-noverify'); } - const serverHome: string = path.resolve(__dirname, '../server'); + const serverHome: string = process.env.JDT_LS_PATH || path.resolve(__dirname, '../server'); const launchersFound: Array = glob.sync('**/plugins/org.eclipse.equinox.launcher_*.jar', { cwd: serverHome }); if (launchersFound.length) { params.push('-jar'); params.push(path.resolve(serverHome, launchersFound[0])); @@ -171,12 +171,12 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp configDir = isSyntaxServer ? 'config_ss_linux' : 'config_linux'; } params.push('-configuration'); + params.push(startedFromSources() || process.env.JDT_LS_PATH !== undefined ? + path.resolve(serverHome, configDir) : resolveConfiguration(context, configDir)); if (startedFromSources()) { // Dev Mode: keep the config.ini in the installation location console.log(`Starting jdt.ls ${isSyntaxServer?'(syntax)' : '(standard)'} from vscode-java sources`); - params.push(path.resolve(__dirname, '../server', configDir)); - } else { - params.push(resolveConfiguration(context, configDir)); } + params.push('-data'); params.push(workspacePath); return params; } From 165b4fda2f5b8f54876cf15df4a8915bca38fc29 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 15 Jun 2023 10:10:01 +0800 Subject: [PATCH 331/708] Support 'off' mode when fill the argument during completion (#3143) - Change the option of 'java.completion.guessMethodArguments' from boolean to four options: "auto", "off", "insertParameterNames" and "insertBestGuessedArguments". Defaults to "auto", means that for VS Code Insiders, it will use "off", other platforms will use "insertBestGuessedArguments". Signed-off-by: Sheng Chen --- README.md | 6 +++++- package.json | 21 ++++++++++++++++++--- src/utils.ts | 5 +++++ 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 432c7ae9b..e94f9e9e0 100644 --- a/README.md +++ b/README.md @@ -141,7 +141,11 @@ The following settings are supported: * `java.autobuild.enabled` : Enable/disable the 'auto build'. * `java.maxConcurrentBuilds`: Set max simultaneous project builds. * `java.completion.enabled` : Enable/disable code completion support. -* `java.completion.guessMethodArguments` : When set to true, method arguments are guessed when a method is selected from as list of code assist proposals. +* `java.completion.guessMethodArguments` : Specify how the arguments will be filled during completion. Defaults to `auto`. + - `auto`: Use `off` only when using Visual Studio Code - Insiders, other platform will defaults to `insertBestGuessedArguments`. + - `off`: Method arguments will not be inserted during completion. + - `insertParameterNames`: The parameter names will be inserted during completion. + - `insertBestGuessedArguments`: The best guessed arguments will be inserted during completion according to the code context. * `java.completion.filteredTypes`: Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages. * `java.completion.favoriteStaticMembers` : Defines a list of static members or types with static members. * `java.completion.importOrder` : Defines the sorting order of import statements. diff --git a/package.json b/package.json index 96741065f..f720d1020 100644 --- a/package.json +++ b/package.json @@ -548,9 +548,24 @@ "scope": "window" }, "java.completion.guessMethodArguments": { - "type": "boolean", - "default": true, - "description": "When set to true, method arguments are guessed when a method is selected from as list of code assist proposals.", + "type": [ + "boolean", + "string" + ], + "enum": [ + "auto", + "off", + "insertParameterNames", + "insertBestGuessedArguments" + ], + "enumDescriptions": [ + "Use 'off' only when using Visual Studio Code - Insiders, other platform will defaults to 'insertBestGuessedArguments'.", + "Method arguments will not be inserted during completion.", + "The parameter names will be inserted during completion.", + "The best guessed arguments will be inserted during completion according to the code context." + ], + "default": "auto", + "description": "Specify how the arguments will be filled during completion.", "scope": "window" }, "java.completion.favoriteStaticMembers": { diff --git a/src/utils.ts b/src/utils.ts index f9c41937d..897e5c07e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -209,6 +209,11 @@ export function getJavaConfig(javaHome: string) { javaConfig.completion.matchCase = "firstLetter"; } + const guessMethodArguments = javaConfig.completion.guessMethodArguments; + if (guessMethodArguments === "auto") { + javaConfig.completion.guessMethodArguments = isInsider ? "off" : "insertBestGuessedArguments"; + } + javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; return javaConfig; } From 71f23cc16265c24ecc8a33a0097d15ff3af8b6ee Mon Sep 17 00:00:00 2001 From: Jessica He Date: Fri, 16 Jun 2023 11:25:11 -0400 Subject: [PATCH 332/708] Update documentation and IDs for lambda expression clean up Signed-off-by: Jessica He --- document/_java.learnMoreAboutCleanUps.md | 50 +++++++++++++++++++++++- package.json | 1 + 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 1989449cb..4aeb2923b 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -220,7 +220,7 @@ if (object instanceof Integer i) { ``` -### `lambdaExpression` +### `lambdaExpressionFromAnonymousClass` Convert anonymous class declarations for functional interfaces to lambda expressions wherever possible. It is only applicable for Java level 8 or above. @@ -297,4 +297,50 @@ final FileInputStream inputStream = new FileInputStream("out.txt"); try (inputStream) { System.out.println(inputStream.read()); } -``` \ No newline at end of file +``` + +### `lambdaExpression` + +Cleans up lambda expression wherever possible in the following ways: + +1. Removes unnecessary parentheses. + + For example: + + ```java + (someString) -> someString.trim().toLowerCase(); + ``` + + becomes: + + ```java + someString -> someString.trim().toLowerCase(); + ``` + +2. Converts lambda expression blocks to a single statement when possible. + + For example: + + ```java + someString -> {return someString.trim().toLowerCase();}; + ``` + + becomes: + + ```java + someString -> someString.trim().toLowerCase(); + ``` + +3. Converts lambda expression to method reference. + + For example: + + ```java + () -> new ArrayList<>(); + ``` + + becomes: + + ```java + ArrayList::new; + ``` diff --git a/package.json b/package.json index f720d1020..81abc5d66 100644 --- a/package.json +++ b/package.json @@ -1082,6 +1082,7 @@ "invertEquals", "addFinalModifier", "instanceofPatternMatch", + "lambdaExpressionFromAnonymousClass", "lambdaExpression", "switchExpression", "tryWithResource" From 75dc796fc526f7784389b8fa68a08f0a866dd8c9 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Mon, 19 Jun 2023 13:21:50 -0400 Subject: [PATCH 333/708] Suppress 'Opening Java Projects' pop-up upon OutOfMemory failure Signed-off-by: Hope Hadfield --- src/extension.ts | 2 ++ src/syntaxLanguageClient.ts | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 44d6f2329..7f2fa1b32 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -34,6 +34,7 @@ import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; +import { activationProgressNotification } from "./serverTaskPresenter"; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -971,6 +972,7 @@ function registerOutOfMemoryDetection(storagePath: string) { } showOOMMessage(); serverStatusBarProvider.setError(); + activationProgressNotification.hide(); }); } diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 880903c10..96b417dec 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -37,7 +37,11 @@ export class SyntaxLanguageClient { errorHandler: new ClientErrorHandler(extensionName), initializationFailedHandler: error => { logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); - return true; + if (error.toString().includes('Connection') && error.toString().includes('disposed')) { + return false; + } else { + return true; + } }, outputChannel: new OutputInfoCollector(extensionName), outputChannelName: extensionName From 34c5219b550e897144c9c9f8c36a6b09d3f65a13 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Sun, 25 Jun 2023 13:12:52 +0800 Subject: [PATCH 334/708] Allow 3rd party extensions to track errors in language client & server (#3162) * Allow 3rd party extensions to track errors in language client & server Signed-off-by: Jinbo Wang --- src/apiManager.ts | 7 +++++++ src/clientErrorHandler.ts | 17 ++++++++++++++++- src/extension.api.ts | 10 +++++++++- src/standardLanguageClient.ts | 1 + 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/apiManager.ts b/src/apiManager.ts index de3f9efef..4d45c0ea1 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -17,6 +17,7 @@ class ApiManager { private onDidClasspathUpdateEmitter: Emitter = new Emitter(); private onDidServerModeChangeEmitter: Emitter = new Emitter(); private onDidProjectsImportEmitter: Emitter = new Emitter(); + private traceEventEmitter: Emitter = new Emitter(); private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { @@ -38,6 +39,7 @@ class ApiManager { const onDidClasspathUpdate = this.onDidClasspathUpdateEmitter.event; const onDidServerModeChange = this.onDidServerModeChangeEmitter.event; const onDidProjectsImport = this.onDidProjectsImportEmitter.event; + const traceEvent = this.traceEventEmitter.event; const serverReadyPromise: Promise = new Promise((resolve) => { this.serverReadyPromiseResolve = resolve; @@ -62,6 +64,7 @@ class ApiManager { onDidProjectsImport, serverReady, onDidRequestEnd, + trackEvent: traceEvent, }; } @@ -85,6 +88,10 @@ class ApiManager { this.onDidProjectsImportEmitter.fire(event); } + public fireTraceEvent(event: any): void { + this.traceEventEmitter.fire(event); + } + public updateServerMode(mode: ServerMode): void { this.api.serverMode = mode; } diff --git a/src/clientErrorHandler.ts b/src/clientErrorHandler.ts index 820d5b884..5caf1e797 100644 --- a/src/clientErrorHandler.ts +++ b/src/clientErrorHandler.ts @@ -3,7 +3,9 @@ import { serverStatusBarProvider } from './serverStatusBarProvider'; import { ErrorHandler, Message, ErrorAction, CloseAction, ErrorHandlerResult, CloseHandlerResult } from "vscode-languageclient"; import { Commands } from "./commands"; import { logger } from "./log"; +import { apiManager } from "./apiManager"; +const CLIENT_ERROR = "java.client.error"; export class ClientErrorHandler implements ErrorHandler { private restarts: number[]; @@ -20,7 +22,14 @@ export class ClientErrorHandler implements ErrorHandler { }; } - logger.error(`${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`); + const errorMessage = `${this.name} server encountered error and will shut down: ${_message}, ${_error && _error.toString()}`; + apiManager.fireTraceEvent({ + name: CLIENT_ERROR, + properties: { + message: errorMessage, + }, + }); + logger.error(errorMessage); return { action: ErrorAction.Shutdown, handled: true @@ -39,6 +48,12 @@ export class ClientErrorHandler implements ErrorHandler { const diff = this.restarts[this.restarts.length - 1] - this.restarts[0]; if (diff <= 3 * 60 * 1000) { const message = `The ${this.name} server crashed 5 times in the last 3 minutes. The server will not be restarted.`; + apiManager.fireTraceEvent({ + name: CLIENT_ERROR, + properties: { + message, + }, + }); logger.error(message); serverStatusBarProvider.setError(); const action = "Show logs"; diff --git a/src/extension.api.ts b/src/extension.api.ts index 3abf1ba46..e7af4a3fd 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -92,7 +92,7 @@ export interface TraceEvent { resultLength?: number | undefined; } -export const extensionApiVersion = '0.8'; +export const extensionApiVersion = '0.9'; export interface ExtensionAPI { readonly apiVersion: string; @@ -144,4 +144,12 @@ export interface ExtensionAPI { * @since extension version 1.16.0 */ readonly onDidRequestEnd: Event; + + /** + * Allow 3rd party trace handler to track the language client & server error events. + * + * @since API version 0.9 + * @since extension version 1.20.0 + */ + readonly trackEvent: Event; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index ab70fdf51..03e1e1ab8 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -296,6 +296,7 @@ export class StandardLanguageClient { }); this.languageClient.onTelemetry(async (e: TelemetryEvent) => { + apiManager.fireTraceEvent(e); if (e.name === Telemetry.SERVER_INITIALIZED_EVT) { return Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, e.properties); } From ed9ae061eebb4a2edf1b9de2cde1fc33544d9264 Mon Sep 17 00:00:00 2001 From: fsouza <108725+fsouza@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:48:22 -0400 Subject: [PATCH 335/708] Add a PR-time check for non-standard NPM registries (#3134) * Add a script for checking non-standard NPM registries * github/workflows/pr-verify: run repo:check after install --- .github/workflows/pr-verify.yml | 1 + gulpfile.js | 32 +++++++++++++++++++++++++++++++- package.json | 4 +++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index cef89af69..3ecdf22c6 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -24,6 +24,7 @@ jobs: - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz - run: npm install + - run: npm run repo:check - run: npm run compile - run: npm run vscode:prepublish - run: vsce package diff --git a/gulpfile.js b/gulpfile.js index e27223f98..7c41e47ff 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -14,6 +14,10 @@ const originalTestFolder = path.join(__dirname, 'test', 'resources', 'projects', const tempTestFolder = path.join(__dirname, 'test-temp'); const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); const JDT_LS_SNAPSHOT_URL = "http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz" +const NON_NPM_REPOSITORY_RE = new RegExp( + String.raw`"resolved":\s*"https://.+/registry.npmjs.org/`, + "g" +); //... gulp.task('clean_jre', function (done) { @@ -216,6 +220,32 @@ gulp.task('prepare_pre_release', function (done) { done(); }); +gulp.task('repo_check', function (done) { + const data = fse.readFileSync("./package-lock.json", { encoding: "utf-8" }); + + if (NON_NPM_REPOSITORY_RE.test(data)) { + done(new Error("Found references to the internal registry in the file package-lock.json. Please fix it with 'npm run repo:fix'")); + } else { + done(); + } +}); + +gulp.task('repo_fix', function (done) { + const data = fse.readFileSync("./package-lock.json", { encoding: "utf-8" }); + const newData = data.replace(NON_NPM_REPOSITORY_RE, `"resolved": "https://registry.npmjs.org/`); + + if (data !== newData) { + fse.writeFileSync("./package-lock.json", newData, { + encoding: "utf-8", + }); + console.log(`successfully fixed package-lock.json`); + } else { + console.log("nothing to fix"); + } + + done(); +}); + function isWin() { return /^win/.test(process.platform); } @@ -252,4 +282,4 @@ function build_server_fn(){ gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') .pipe(decompress()) .pipe(gulp.dest('./server')); -} \ No newline at end of file +} diff --git a/package.json b/package.json index 81abc5d66..879efb06c 100644 --- a/package.json +++ b/package.json @@ -1448,7 +1448,9 @@ "build": "./node_modules/.bin/gulp build_or_download", "fast-build-server": "./node_modules/.bin/gulp dev_server", "watch-server": "./node_modules/.bin/gulp watch_server", - "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx ." + "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx .", + "repo:check": "./node_modules/.bin/gulp repo_check", + "repo:fix": "./node_modules/.bin/gulp repo_fix" }, "devDependencies": { "@types/fs-extra": "^8.0.0", From 34cc5f5bb8d8290e872864279f2c810d566f8fd1 Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Sat, 18 Mar 2023 11:42:41 +0100 Subject: [PATCH 336/708] Add option for chain completion support. - Fix existing typos in README Signed-off-by: Gayan Perera --- README.md | 7 +++++-- package.json | 6 ++++++ 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e94f9e9e0..c41defda5 100644 --- a/README.md +++ b/README.md @@ -175,10 +175,10 @@ The following settings are supported: > For backward compatibility, this setting also accepts boolean value, where `true` has the same meaning as `notification` and `false` has the same meaning as `off`. * `java.project.outputPath`: A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project. * `java.project.referencedLibraries`: Configure glob patterns for referencing local libraries to a Java project. -* `java.completion.maxResults`: Maximum number of completion results (not including snippets). `0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit.. +* `java.completion.maxResults`: Maximum number of completion results (not including snippets). `0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit. * `java.configuration.runtimes`: Map Java Execution Environments to local JDKs. * `java.server.launchMode`: - - `Standard`: Provides full features such as intellisense, refactoring, building, Maven/Gradle support etc... + - `Standard`: Provides full features such as intellisense, refactoring, building, Maven/Gradle support etc. - `LightWeight`: Starts a syntax server with lower start-up cost. Only provides syntax features such as outline, navigation, javadoc, syntax errors. The lightweight mode won't load thirdparty extensions, such as java test runner, java debugger, etc. - `Hybrid`: Provides full features with better responsiveness. It starts a standard language server and a secondary syntax server. The syntax server provides syntax features until the standard server is ready. And the syntax server will be shutdown automatically after the standard server is fully ready. @@ -234,6 +234,9 @@ The following settings are supported: * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. +New in 1.20.0 +* `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 879efb06c..f9a6298db 100644 --- a/package.json +++ b/package.json @@ -616,6 +616,12 @@ "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", "scope": "window" }, + "java.completion.chain.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable chain completion support. Chain completions are only available when completions are invoked by the completions shortcut", + "scope": "window" + }, "java.completion.matchCase": { "type": "string", "enum": [ From fefdd19b6da9c58b03ea58f870b94473dc31338b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Tue, 27 Jun 2023 13:03:52 +0800 Subject: [PATCH 337/708] Track more errors on client side (#3167) Signed-off-by: Jinbo Wang --- src/extension.ts | 10 ++++++++++ src/standardLanguageClient.ts | 12 ++++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 7f2fa1b32..1cdf1458c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -139,6 +139,7 @@ export function activate(context: ExtensionContext): Promise { const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; const requireSyntaxServer = (serverMode !== ServerMode.standard) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); let requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); + let initFailureReported: boolean = false; // Options to control the language client const clientOptions: LanguageClientOptions = { @@ -244,6 +245,15 @@ export function activate(context: ExtensionContext): Promise { initializationFailedHandler: error => { logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); if (error.toString().includes('Connection') && error.toString().includes('disposed')) { + if (!initFailureReported) { + apiManager.fireTraceEvent({ + name: "java.client.error.initialization", + properties: { + message: error && error.toString(), + }, + }); + } + initFailureReported = true; return false; } else { return true; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 03e1e1ab8..6b07f1196 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -159,6 +159,12 @@ export class StandardLanguageClient { this.status = ClientStatus.error; serverStatus.updateServerStatus(ServerStatusKind.error); apiManager.updateStatus(ClientStatus.error); + apiManager.fireTraceEvent({ + name: "java.ls.error.serviceError", + properties: { + message: report.message, + }, + }); break; case 'ProjectStatus': if (report.message === "WARNING") { @@ -250,6 +256,12 @@ export class StandardLanguageClient { break; case MessageType.Error: show = window.showErrorMessage; + apiManager.fireTraceEvent({ + name: "java.ls.error.notification", + properties: { + message: notification.message, + }, + }); break; } if (!show) { From 18d58886fddb6549e4f77b07ca9c343cf95f2681 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Jun 2023 16:48:47 +0000 Subject: [PATCH 338/708] Bump semver from 7.3.5 to 7.5.2 Bumps [semver](https://github.com/npm/node-semver) from 7.3.5 to 7.5.2. - [Release notes](https://github.com/npm/node-semver/releases) - [Changelog](https://github.com/npm/node-semver/blob/main/CHANGELOG.md) - [Commits](https://github.com/npm/node-semver/compare/v7.3.5...v7.5.2) --- updated-dependencies: - dependency-name: semver dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a06e43854..eef453e26 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6589,9 +6589,9 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", + "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", "requires": { "lru-cache": "^6.0.0" } @@ -7005,7 +7005,7 @@ }, "string_decoder": { "version": "1.1.1", - "resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { "safe-buffer": "~5.1.0" diff --git a/package.json b/package.json index f9a6298db..c8847f9b6 100644 --- a/package.json +++ b/package.json @@ -1507,7 +1507,7 @@ "jdk-utils": "^0.4.4", "react": "^17.0.2", "react-dom": "^17.0.2", - "semver": "^7.3.5", + "semver": "^7.5.2", "vscode-languageclient": "8.1.0", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", From b622c90d4190c678294f8f35aa1795fba76b1d65 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 28 Jun 2023 20:13:04 -0400 Subject: [PATCH 339/708] Changelog for 1.20.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a7ac35ad1..1f69662ac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 1.20.0 (June 29th, 2023) + * performance - Set the default value of `java.completion.matchCase` to `firstLetter`. See [#3142](https://github.com/redhat-developer/vscode-java/pull/3142). + * enhancement - Support for "Go to Declaration". See [JLS#2684](https://github.com/eclipse/eclipse.jdt.ls/issues/2684). + * enhancement - Improve method argument guessing functionality. See [#2903](https://github.com/redhat-developer/vscode-java/issues/2903). + * enhancement - Add code action to clean up & simplify lambda expressions. See [#3158](https://github.com/redhat-developer/vscode-java/pull/3158). + * enhancement - Use FernFlower as the default decompiler. See [JLS#2704](https://github.com/eclipse/eclipse.jdt.ls/pull/2704). + * enhancement - Attempt automatic JVM detection on startup. See [JLS#2731](https://github.com/eclipse/eclipse.jdt.ls/pull/2731). + * enhancement - Support for chain completions. See [#3008](https://github.com/redhat-developer/vscode-java/pull/3008). + * enhancement - Make reasonable guess for method name when applying "Extract Method" refactoring. See [#2011](https://github.com/redhat-developer/vscode-java/issues/2011). + * enhancement - Add postfix completion for `sysouf`, `sysoutv`, `format`, `par`, `not`,`assert` & `optional` . See [JLS#2691](https://github.com/eclipse/eclipse.jdt.ls/pull/2691), [JLS#2697](https://github.com/eclipse/eclipse.jdt.ls/pull/2697). + * enhancement - Use choice syntax as placeholder for constructor/method/field snippets. See [#3018](https://github.com/redhat-developer/vscode-java/pull/3018), [#3140](https://github.com/redhat-developer/vscode-java/pull/3140). + * enhancement - The `try-catch` snippet should support being applied to a selection. See [#3103](https://github.com/redhat-developer/vscode-java/issues/3103). + * enhancement - Track errors, exceptions, and project import success rate on server side for reliability analysis. See [#3162](https://github.com/redhat-developer/vscode-java/pull/3162), [JLS#2726](https://github.com/eclipse/eclipse.jdt.ls/pull/2726). + * bug fix - Display package name in document symbols outline for class files. See [#3074](https://github.com/redhat-developer/vscode-java/issues/3074). + * bug fix - Signature help should display the selected completion item. See [#3127](https://github.com/redhat-developer/vscode-java/issues/3127). + * bug fix - Gracefully handle language server failures/crashes. See [#2036](https://github.com/redhat-developer/vscode-java/issues/2036), [#3131](https://github.com/redhat-developer/vscode-java/issues/3131). + * bug fix - No completions on field initializer with `@Default` and `@Builder` Lombok annotations. See [JLS#2669](https://github.com/eclipse/eclipse.jdt.ls/issues/2669). + * bug fix - `IllegalArgumentException` within a try-catch block. See [#3138](https://github.com/redhat-developer/vscode-java/issues/3138). + * bug fix - Fix `pId` mismatch in completions. See [JLS#2681](https://github.com/eclipse/eclipse.jdt.ls/pull/2681). + * bug fix - Typo in constant `METADATA_FILES_GENERATION`. See [#3133](https://github.com/redhat-developer/vscode-java/pull/3133). + * build - Add enviornment variable to reference an external build of JDT-LS. See [#3151](https://github.com/redhat-developer/vscode-java/issues/3151). + * build - Check for non-standard NPM registry in `package-lock.json` as a step in CI. See [#2876](https://github.com/redhat-developer/vscode-java/issues/2876). + * build - Bump `semver` from 7.3.5 to 7.5.2. See [#3168](https://github.com/redhat-developer/vscode-java/pull/3168). + ## 1.19.0 (June 1st, 2023) * performance - No need to run the reconcile operation in a workspace job. See [JLS#2660](https://github.com/eclipse/eclipse.jdt.ls/pull/2660). * performance - Avoid blocking the pipeline while handling `refreshLocal` during document lifecycle events. See [JLS#2659](https://github.com/eclipse/eclipse.jdt.ls/pull/2659). From 62fbe142990f282215514352603820a72c674031 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 29 Jun 2023 11:49:26 -0400 Subject: [PATCH 340/708] Upversion to 1.21.0 Signed-off-by: Roland Grunberg --- README.md | 4 +--- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index c41defda5..67dcab078 100644 --- a/README.md +++ b/README.md @@ -216,6 +216,7 @@ The following settings are supported: * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. +* `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. * `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. @@ -234,9 +235,6 @@ The following settings are supported: * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. -New in 1.20.0 -* `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index eef453e26..e4cc075e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.20.0", + "version": "1.21.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index c8847f9b6..b65902c07 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.20.0", + "version": "1.21.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From efad2d380a6f4d7a876ed87036d1c6a051a44f4f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 11 Jul 2023 16:00:25 -0400 Subject: [PATCH 341/708] Update USAGE_DATA.md file with new properties from the language server. Signed-off-by: Roland Grunberg --- USAGE_DATA.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index e97a20529..98f756b1c 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -14,6 +14,9 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The elapsed time (in milliseconds) at which the language server initialized the workspace project(s), declared as ready for requests, and completed building the project(s) * The number of libraries that were indexed after project initialization * The total size (in bytes) of libraries that were indexed after project initialization + * The number of error markers on the project(s) + * The number of unresolved imports within the project(s) + * Whether there is a mismatch between the project's requested source level, and the JDK used for the project (eg. true) * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed From 7d65c8964fd191fcbbe0462f1c85323d531c7290 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 14 Jul 2023 15:30:35 +0800 Subject: [PATCH 342/708] =?UTF-8?q?Rename=20'Attach=20Source'=20menu=20to?= =?UTF-8?q?=20'Attach=20Source=E2=80=A6'=20(#3202)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jinbo Wang --- package.nls.json | 2 +- package.nls.ko.json | 2 +- package.nls.zh-cn.json | 2 +- package.nls.zh-tw.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package.nls.json b/package.nls.json index b8fb183ab..0d8099ad7 100644 --- a/package.nls.json +++ b/package.nls.json @@ -11,7 +11,7 @@ "java.project.build": "Rebuild Projects", "java.open.formatter.settings": "Open Java Formatter Settings", "java.clean.workspace": "Clean Java Language Server Workspace", - "java.project.updateSourceAttachment": "Attach Source", + "java.project.updateSourceAttachment": "Attach Source...", "java.project.addToSourcePath": "Add Folder to Java Source Path", "java.project.removeFromSourcePath": "Remove Folder from Java Source Path", "java.project.listSourcePaths": "List All Java Source Paths", diff --git a/package.nls.ko.json b/package.nls.ko.json index 13cf6afbc..359ee31b1 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -11,7 +11,7 @@ "java.project.build": "프로젝트 다시 빌드", "java.open.formatter.settings": "Java Formatter 설정 열기", "java.clean.workspace": "Java Language Server 작업 영역 정리", - "java.project.updateSourceAttachment": "Attach Source", + "java.project.updateSourceAttachment": "Attach Source...", "java.project.addToSourcePath": "Java Source 경로에 폴더 추가", "java.project.removeFromSourcePath": "Java Source 경로에서 폴더 제거", "java.project.listSourcePaths": "모든 Java Source 경로를 나열", diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 87eb77c5f..771247f40 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -11,7 +11,7 @@ "java.project.build": "重新构建项目", "java.open.formatter.settings": "打开 Java 格式设置", "java.clean.workspace": "清理 Java 语言服务器工作区", - "java.project.updateSourceAttachment": "附加源代码", + "java.project.updateSourceAttachment": "附加源代码...", "java.project.addToSourcePath": "将文件夹加入 Java 源代码路径", "java.project.removeFromSourcePath": "将文件夹从 Java 源代码路径中删除", "java.project.listSourcePaths": "列出所有 Java 源代码路径", diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 8c6856e68..c2e2031ae 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -11,7 +11,7 @@ "java.project.build": "重新建置專案", "java.open.formatter.settings": "開啟 Java 格式設定", "java.clean.workspace": "清理 Java 語言伺服器工作區", - "java.project.updateSourceAttachment": "附加原始碼", + "java.project.updateSourceAttachment": "附加原始碼...", "java.project.addToSourcePath": "將資料夾加入 Java 原始碼路徑", "java.project.removeFromSourcePath": "從 Java 始碼路徑中移除資料夾", "java.project.listSourcePaths": "列出所有 Java 始碼路徑", From be72f4bdba6f77f5b4282ce3b97a9dc5aa8836ee Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 14 Jul 2023 10:38:22 -0400 Subject: [PATCH 343/708] Create copy of Java grammar --- language-support/java/java.tmLanguage.json | 1855 ++++++++++++++++++++ package.json | 5 + 2 files changed, 1860 insertions(+) create mode 100644 language-support/java/java.tmLanguage.json diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json new file mode 100644 index 000000000..be70cbb27 --- /dev/null +++ b/language-support/java/java.tmLanguage.json @@ -0,0 +1,1855 @@ +{ + "information_for_contributors": [ + "This file has been converted from https://github.com/atom/language-java/blob/master/grammars/java.cson", + "If you want to provide a fix or improvement, please create a pull request against the original repository.", + "Once accepted there, we are happy to receive an update request." + ], + "version": "https://github.com/atom/language-java/commit/29f977dc42a7e2568b39bb6fb34c4ef108eb59b3", + "name": "Java", + "scopeName": "source.java", + "patterns": [ + { + "begin": "\\b(package)\\b\\s*", + "beginCaptures": { + "1": { + "name": "keyword.other.package.java" + } + }, + "end": "\\s*(;)", + "endCaptures": { + "1": { + "name": "punctuation.terminator.java" + } + }, + "name": "meta.package.java", + "contentName": "storage.modifier.package.java", + "patterns": [ + { + "include": "#comments" + }, + { + "match": "(?<=\\.)\\s*\\.|\\.(?=\\s*;)", + "name": "invalid.illegal.character_not_allowed_here.java" + }, + { + "match": "(?", + "endCaptures": { + "0": { + "name": "punctuation.bracket.angle.java" + } + }, + "patterns": [ + { + "match": "\\b(extends|super)\\b", + "name": "storage.modifier.$1.java" + }, + { + "match": "(?>>?|~|\\^)", + "name": "keyword.operator.bitwise.java" + }, + { + "match": "((&|\\^|\\||<<|>>>?)=)", + "name": "keyword.operator.assignment.bitwise.java" + }, + { + "match": "(===?|!=|<=|>=|<>|<|>)", + "name": "keyword.operator.comparison.java" + }, + { + "match": "([+*/%-]=)", + "name": "keyword.operator.assignment.arithmetic.java" + }, + { + "match": "(=)", + "name": "keyword.operator.assignment.java" + }, + { + "match": "(\\-\\-|\\+\\+)", + "name": "keyword.operator.increment-decrement.java" + }, + { + "match": "(\\-|\\+|\\*|\\/|%)", + "name": "keyword.operator.arithmetic.java" + }, + { + "match": "(!|&&|\\|\\|)", + "name": "keyword.operator.logical.java" + }, + { + "match": "(\\||&)", + "name": "keyword.operator.bitwise.java" + }, + { + "match": "\\b(const|goto)\\b", + "name": "keyword.reserved.java" + } + ] + }, + "lambda-expression": { + "patterns": [ + { + "match": "->", + "name": "storage.type.function.arrow.java" + } + ] + }, + "member-variables": { + "begin": "(?=private|protected|public|native|synchronized|abstract|threadsafe|transient|static|final)", + "end": "(?=\\=|;)", + "patterns": [ + { + "include": "#storage-modifiers" + }, + { + "include": "#variables" + }, + { + "include": "#primitive-arrays" + }, + { + "include": "#object-types" + } + ] + }, + "method-call": { + "begin": "(\\.)\\s*([A-Za-z_$][\\w$]*)\\s*(\\()", + "beginCaptures": { + "1": { + "name": "punctuation.separator.period.java" + }, + "2": { + "name": "entity.name.function.java" + }, + "3": { + "name": "punctuation.definition.parameters.begin.bracket.round.java" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.java" + } + }, + "name": "meta.method-call.java", + "patterns": [ + { + "include": "#code" + } + ] + }, + "methods": { + "begin": "(?!new)(?=[\\w<].*\\s+)(?=([^=/]|/(?!/))+\\()", + "end": "(})|(?=;)", + "endCaptures": { + "1": { + "name": "punctuation.section.method.end.bracket.curly.java" + } + }, + "name": "meta.method.java", + "patterns": [ + { + "include": "#storage-modifiers" + }, + { + "begin": "(\\w+)\\s*(\\()", + "beginCaptures": { + "1": { + "name": "entity.name.function.java" + }, + "2": { + "name": "punctuation.definition.parameters.begin.bracket.round.java" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.java" + } + }, + "name": "meta.method.identifier.java", + "patterns": [ + { + "include": "#parameters" + }, + { + "include": "#parens" + }, + { + "include": "#comments" + } + ] + }, + { + "include": "#generics" + }, + { + "begin": "(?=\\w.*\\s+\\w+\\s*\\()", + "end": "(?=\\s+\\w+\\s*\\()", + "name": "meta.method.return-type.java", + "patterns": [ + { + "include": "#all-types" + }, + { + "include": "#parens" + }, + { + "include": "#comments" + } + ] + }, + { + "include": "#throws" + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.method.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.method.body.java", + "patterns": [ + { + "include": "#code" + } + ] + }, + { + "include": "#comments" + } + ] + }, + "module": { + "begin": "((open)\\s)?(module)\\s+(\\w+)", + "end": "}", + "beginCaptures": { + "1": { + "name": "storage.modifier.java" + }, + "3": { + "name": "storage.modifier.java" + }, + "4": { + "name": "entity.name.type.module.java" + } + }, + "endCaptures": { + "0": { + "name": "punctuation.section.module.end.bracket.curly.java" + } + }, + "name": "meta.module.java", + "patterns": [ + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.module.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.module.body.java", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#comments-javadoc" + }, + { + "match": "\\b(requires|transitive|exports|opens|to|uses|provides|with)\\b", + "name": "keyword.module.java" + } + ] + } + ] + }, + "numbers": { + "patterns": [ + { + "match": "(?x)\n\\b(?)?(\\()", + "beginCaptures": { + "1": { + "name": "storage.modifier.java" + }, + "2": { + "name": "entity.name.type.record.java" + }, + "3": { + "patterns": [ + { + "include": "#generics" + } + ] + }, + "4": { + "name": "punctuation.definition.parameters.begin.bracket.round.java" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.java" + } + }, + "name": "meta.record.identifier.java", + "patterns": [ + { + "include": "#code" + } + ] + }, + { + "begin": "(implements)\\s", + "beginCaptures": { + "1": { + "name": "storage.modifier.implements.java" + } + }, + "end": "(?=\\s*\\{)", + "name": "meta.definition.class.implemented.interfaces.java", + "patterns": [ + { + "include": "#object-types-inherited" + }, + { + "include": "#comments" + } + ] + }, + { + "include": "#record-body" + } + ] + }, + "record-body": { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.class.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "name": "meta.record.body.java", + "patterns": [ + { + "include": "#record-constructor" + }, + { + "include": "#class-body" + } + ] + }, + "record-constructor": { + "begin": "(?!new)(?=[\\w<].*\\s+)(?=([^\\(=/]|/(?!/))+(?={))", + "end": "(})|(?=;)", + "endCaptures": { + "1": { + "name": "punctuation.section.method.end.bracket.curly.java" + } + }, + "name": "meta.method.java", + "patterns": [ + { + "include": "#storage-modifiers" + }, + { + "begin": "(\\w+)", + "beginCaptures": { + "1": { + "name": "entity.name.function.java" + } + }, + "end": "(?=\\s*{)", + "name": "meta.method.identifier.java", + "patterns": [ + { + "include": "#comments" + } + ] + }, + { + "include": "#comments" + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.method.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.method.body.java", + "patterns": [ + { + "include": "#code" + } + ] + } + ] + }, + "static-initializer": { + "patterns": [ + { + "include": "#anonymous-block-and-instance-initializer" + }, + { + "match": "static", + "name": "storage.modifier.java" + } + ] + }, + "storage-modifiers": { + "match": "\\b(public|private|protected|static|final|native|synchronized|abstract|threadsafe|transient|volatile|default|strictfp|sealed|non-sealed)\\b", + "name": "storage.modifier.java" + }, + "strings": { + "patterns": [ + { + "begin": "\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.java" + } + }, + "end": "\"", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.java" + } + }, + "name": "string.quoted.double.java", + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.java" + } + ] + }, + { + "begin": "'", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.java" + } + }, + "end": "'", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.java" + } + }, + "name": "string.quoted.single.java", + "patterns": [ + { + "match": "\\\\.", + "name": "constant.character.escape.java" + } + ] + } + ] + }, + "throws": { + "begin": "throws", + "beginCaptures": { + "0": { + "name": "storage.modifier.java" + } + }, + "end": "(?={|;)", + "name": "meta.throwables.java", + "patterns": [ + { + "match": ",", + "name": "punctuation.separator.delimiter.java" + }, + { + "match": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*", + "name": "storage.type.java" + } + ] + }, + "try-catch-finally": { + "patterns": [ + { + "begin": "\\btry\\b", + "beginCaptures": { + "0": { + "name": "keyword.control.try.java" + } + }, + "end": "}", + "endCaptures": { + "0": { + "name": "punctuation.section.try.end.bracket.curly.java" + } + }, + "name": "meta.try.java", + "patterns": [ + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.section.try.resources.begin.bracket.round.java" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.section.try.resources.end.bracket.round.java" + } + }, + "name": "meta.try.resources.java", + "patterns": [ + { + "include": "#code" + } + ] + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.try.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.try.body.java", + "patterns": [ + { + "include": "#code" + } + ] + } + ] + }, + { + "begin": "\\b(catch)\\b", + "beginCaptures": { + "1": { + "name": "keyword.control.catch.java" + } + }, + "end": "}", + "endCaptures": { + "0": { + "name": "punctuation.section.catch.end.bracket.curly.java" + } + }, + "name": "meta.catch.java", + "patterns": [ + { + "include": "#comments" + }, + { + "begin": "\\(", + "beginCaptures": { + "0": { + "name": "punctuation.definition.parameters.begin.bracket.round.java" + } + }, + "end": "\\)", + "endCaptures": { + "0": { + "name": "punctuation.definition.parameters.end.bracket.round.java" + } + }, + "contentName": "meta.catch.parameters.java", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#storage-modifiers" + }, + { + "begin": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*", + "beginCaptures": { + "0": { + "name": "storage.type.java" + } + }, + "end": "(\\|)|(?=\\))", + "endCaptures": { + "1": { + "name": "punctuation.catch.separator.java" + } + }, + "patterns": [ + { + "include": "#comments" + }, + { + "match": "\\w+", + "captures": { + "0": { + "name": "variable.parameter.java" + } + } + } + ] + } + ] + }, + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.catch.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.catch.body.java", + "patterns": [ + { + "include": "#code" + } + ] + } + ] + }, + { + "begin": "\\bfinally\\b", + "beginCaptures": { + "0": { + "name": "keyword.control.finally.java" + } + }, + "end": "}", + "endCaptures": { + "0": { + "name": "punctuation.section.finally.end.bracket.curly.java" + } + }, + "name": "meta.finally.java", + "patterns": [ + { + "begin": "{", + "beginCaptures": { + "0": { + "name": "punctuation.section.finally.begin.bracket.curly.java" + } + }, + "end": "(?=})", + "contentName": "meta.finally.body.java", + "patterns": [ + { + "include": "#code" + } + ] + } + ] + } + ] + }, + "variables": { + "begin": "(?x)\n(?=\n \\b\n (\n (void|boolean|byte|char|short|int|float|long|double)\n |\n (?>(\\w+\\.)*[A-Z_]+\\w*) # e.g. `javax.ws.rs.Response`, or `String`\n )\n \\b\n \\s*\n (\n <[\\w<>,\\.?\\s\\[\\]]*> # e.g. `HashMap`, or `List`\n )?\n \\s*\n (\n (\\[\\])* # int[][]\n )?\n \\s+\n [A-Za-z_$][\\w$]* # At least one identifier after space\n ([\\w\\[\\],$][\\w\\[\\],\\s]*)? # possibly primitive array or additional identifiers\n \\s*(=|:|;)\n)", + "end": "(?=\\=|:|;)", + "name": "meta.definition.variable.java", + "patterns": [ + { + "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(;|:|=|,))", + "captures": { + "1": { + "name": "variable.other.definition.java" + } + } + }, + { + "include": "#all-types" + }, + { + "include": "#code" + } + ] + }, + "variables-local": { + "begin": "(?=\\b(var)\\b\\s+[A-Za-z_$][\\w$]*\\s*(=|:|;))", + "end": "(?=\\=|:|;)", + "name": "meta.definition.variable.local.java", + "patterns": [ + { + "match": "\\bvar\\b", + "name": "storage.type.local.java" + }, + { + "match": "([A-Za-z$_][\\w$]*)(?=\\s*(\\[\\])*\\s*(=|:|;))", + "captures": { + "1": { + "name": "variable.other.definition.java" + } + } + }, + { + "include": "#code" + } + ] + } + } +} \ No newline at end of file diff --git a/package.json b/package.json index b65902c07..3f24a16f5 100644 --- a/package.json +++ b/package.json @@ -177,6 +177,11 @@ } ], "grammars": [ + { + "language": "java", + "scopeName": "source.java", + "path": "./language-support/java/java.tmLanguage.json" + }, { "language": "java-properties", "scopeName": "source.java-properties", From 15ddbfe95e00566742da111825f51b3e34384808 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 14 Jul 2023 10:49:56 -0400 Subject: [PATCH 344/708] Add textblock highlight support --- language-support/java/java.tmLanguage.json | 25 ++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index be70cbb27..dcc7eebb5 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -1571,6 +1571,31 @@ }, "strings": { "patterns": [ + { + "begin": "\"\"\"", + "beginCaptures": { + "0": { + "name": "punctuation.definition.string.begin.java" + } + }, + "end": "\"\"\"", + "endCaptures": { + "0": { + "name": "punctuation.definition.string.end.java" + } + }, + "name": "string.quoted.triple.java", + "patterns": [ + { + "match": "\\\\\"\"\"", + "name": "constant.character.escape.java" + }, + { + "match": "\\\\.", + "name": "constant.character.escape.java" + } + ] + }, { "begin": "\"", "beginCaptures": { From 5f5b6fa7c91e9193040ff98c6a124d77fa3e8885 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Tue, 18 Jul 2023 15:22:35 -0400 Subject: [PATCH 345/708] Correct highlighting for comments after 'throws' --- language-support/java/java.tmLanguage.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index dcc7eebb5..87586d279 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -1657,6 +1657,9 @@ { "match": "[a-zA-Z$_][\\.a-zA-Z0-9$_]*", "name": "storage.type.java" + }, + { + "include": "#comments" } ] }, From 7a770ab6750b4b09173d98de14eb9792e3432b36 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 18 Jul 2023 12:45:36 -0400 Subject: [PATCH 346/708] Update provenance of the Java language TextMate grammar. Signed-off-by: Roland Grunberg --- language-support/java/java.tmLanguage.json | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index 87586d279..87904b016 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -1,10 +1,8 @@ { "information_for_contributors": [ - "This file has been converted from https://github.com/atom/language-java/blob/master/grammars/java.cson", - "If you want to provide a fix or improvement, please create a pull request against the original repository.", - "Once accepted there, we are happy to receive an update request." + "This file has been copied from https://github.com/microsoft/vscode/blob/b37252c18238fffcebdc9fd7680f1dabea3a50a0/extensions/java/syntaxes/java.tmLanguage.json", + "The source location lists https://github.com/atom/language-java/blob/29f977dc42a7e2568b39bb6fb34c4ef108eb59b3/LICENSE.md as the original repository. It is therefore licensed under MIT." ], - "version": "https://github.com/atom/language-java/commit/29f977dc42a7e2568b39bb6fb34c4ef108eb59b3", "name": "Java", "scopeName": "source.java", "patterns": [ @@ -1880,4 +1878,4 @@ ] } } -} \ No newline at end of file +} From 080f5d9a47a3937722d1d955f274f60f2e74ac87 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Jul 2023 10:33:31 +0800 Subject: [PATCH 347/708] Bump word-wrap from 1.2.3 to 1.2.4 (#3211) Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4. - [Release notes](https://github.com/jonschlinkert/word-wrap/releases) - [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4) --- updated-dependencies: - dependency-name: word-wrap dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index e4cc075e7..bb789036c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8051,9 +8051,9 @@ } }, "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", + "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", "dev": true }, "workerpool": { From a60b5e4940727b628f45fc643f4423b46980ce2b Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Fri, 21 Jul 2023 14:07:50 +0800 Subject: [PATCH 348/708] Reload the cached classfile sources when new source attachment is updated for them (#3207) * Reload the cached classfile sources when new source attachment is updated for them Signed-off-by: Jinbo Wang --- README.md | 6 ++++ package.json | 16 +++++++++ src/apiManager.ts | 8 ++++- src/extension.api.ts | 23 +++++++++++- src/protocol.ts | 54 ++++++++++++++++------------ src/standardLanguageClient.ts | 68 ++++++++++++++++++++++++++++++++++- 6 files changed, 150 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 67dcab078..d5490c54b 100644 --- a/README.md +++ b/README.md @@ -235,6 +235,12 @@ The following settings are supported: * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. +New in 1.21.0 +* `java.editor.reloadChangedSources`: Specifies whether to reload the sources of the open class files when their source jar files are changed. Defaults to `ask`. + - `ask`: Ask to reload the sources of the open class files + - `auto`: Automatically reload the sources of the open class files + - `manual`: Manually reload the sources of the open class files + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 3f24a16f5..fd9f0828b 100644 --- a/package.json +++ b/package.json @@ -1139,6 +1139,22 @@ "default": false, "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", "scope": "window" + }, + "java.editor.reloadChangedSources": { + "type": "string", + "enum": [ + "ask", + "auto", + "manual" + ], + "enumDescriptions": [ + "Ask to reload the sources of the open class files", + "Automatically reload the sources of the open class files", + "Manually reload the sources of the open class files" + ], + "default": "ask", + "markdownDescription": "Specifies whether to reload the sources of the open class files when their source jar files are changed.", + "scope": "window" } } }, diff --git a/src/apiManager.ts b/src/apiManager.ts index 4d45c0ea1..52759c963 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -1,6 +1,6 @@ 'use strict'; -import { ExtensionAPI, ClasspathQueryOptions, ClasspathResult, extensionApiVersion, ClientStatus } from "./extension.api"; +import { ExtensionAPI, ClasspathQueryOptions, ClasspathResult, extensionApiVersion, ClientStatus, SourceInvalidatedEvent } from "./extension.api"; import { RequirementsData } from "./requirements"; import { GetDocumentSymbolsCommand, getDocumentSymbolsProvider } from "./documentSymbols"; import { GoToDefinitionCommand, goToDefinitionProvider } from "./goToDefinition"; @@ -18,6 +18,7 @@ class ApiManager { private onDidServerModeChangeEmitter: Emitter = new Emitter(); private onDidProjectsImportEmitter: Emitter = new Emitter(); private traceEventEmitter: Emitter = new Emitter(); + private sourceInvalidatedEventEmitter: Emitter = new Emitter(); private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { @@ -65,6 +66,7 @@ class ApiManager { serverReady, onDidRequestEnd, trackEvent: traceEvent, + onDidSourceInvalidate: this.sourceInvalidatedEventEmitter.event, }; } @@ -92,6 +94,10 @@ class ApiManager { this.traceEventEmitter.fire(event); } + public fireSourceInvalidatedEvent(event: SourceInvalidatedEvent): void { + this.sourceInvalidatedEventEmitter.fire(event); + } + public updateServerMode(mode: ServerMode): void { this.api.serverMode = mode; } diff --git a/src/extension.api.ts b/src/extension.api.ts index e7af4a3fd..a4fd5200f 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -92,7 +92,18 @@ export interface TraceEvent { resultLength?: number | undefined; } -export const extensionApiVersion = '0.9'; +export interface SourceInvalidatedEvent { + /** + * The paths of the jar files that are linked to new source attachments. + */ + affectedRootPaths: string[]; + /** + * The opened editors with updated source. + */ + affectedEditorDocuments?: Uri[]; +} + +export const extensionApiVersion = '0.10'; export interface ExtensionAPI { readonly apiVersion: string; @@ -152,4 +163,14 @@ export interface ExtensionAPI { * @since extension version 1.20.0 */ readonly trackEvent: Event; + + /** + * An event that occurs when the package fragment roots have updated source attachments. + * The client should refresh the new source if it has previously requested the source + * from them. + * + * @since API version 0.10 + * @since extension version 1.21.0 + */ + readonly onDidSourceInvalidate: Event; } diff --git a/src/protocol.ts b/src/protocol.ts index 26d704bc1..29ea91b05 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -59,7 +59,8 @@ export enum EventType { classpathUpdated = 100, projectsImported = 200, incompatibleGradleJdkIssue = 300, - upgradeGradleWrapper = 400, + upgradeGradleWrapper = 400, + sourceInvalidated = 500, } export enum CompileWorkspaceStatus { @@ -76,25 +77,25 @@ export enum AccessorKind { } export interface StatusReport { - message: string; - type: string; + message: string; + type: string; } export interface ProgressReport { - id: string; - task: string; - subTask: string; - status: string; - workDone: number; - totalWork: number; - complete: boolean; + id: string; + task: string; + subTask: string; + status: string; + workDone: number; + totalWork: number; + complete: boolean; } export interface ActionableMessage { - severity: MessageType; - message: string; - data?: any; - commands?: Command[]; + severity: MessageType; + message: string; + data?: any; + commands?: Command[]; } export interface EventNotification { @@ -103,11 +104,11 @@ export interface EventNotification { } export namespace StatusNotification { - export const type = new NotificationType('language/status'); + export const type = new NotificationType('language/status'); } export namespace ProgressReportNotification { - export const type = new NotificationType('language/progressReport'); + export const type = new NotificationType('language/progressReport'); } export namespace ClassFileContentsRequest { @@ -179,8 +180,8 @@ export interface OverridableMethod { } export interface OverridableMethodsResponse { - type: string; - methods: OverridableMethod[]; + type: string; + methods: OverridableMethod[]; } export namespace ListOverridableMethodsRequest { @@ -443,9 +444,9 @@ export interface GradleCompatibilityInfo { } export interface UpgradeGradleWrapperInfo { - projectUri: string; - message: string; - recommendedGradleVersion: string; + projectUri: string; + message: string; + recommendedGradleVersion: string; } export interface Member { @@ -470,5 +471,14 @@ export interface ValidateDocumentParams { } export namespace ValidateDocumentNotification { - export const type = new NotificationType('java/validateDocument'); + export const type = new NotificationType('java/validateDocument'); +} + +export interface SourceInvalidatedEvent { + /** + * The package fragment roots that get new source attachments. + * The key is its root path, the value means if its source is + * automatically downloaded. + */ + affectedRootPaths: { [key: string]: boolean }; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 6b07f1196..99ea44a1f 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -22,7 +22,7 @@ import * as pasteAction from './pasteAction'; import { registerPasteEventHandler } from './pasteEventHandler'; import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; -import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressReportNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; +import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressReportNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; import * as refactorAction from './refactorAction'; import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; import { serverStatus, ServerStatusKind } from "./serverStatus"; @@ -237,6 +237,23 @@ export class StandardLanguageClient { }); } break; + case EventType.sourceInvalidated: + const result = notification.data as SourceInvalidatedEvent; + const triggeredByUser: string[] = []; + const triggeredByAutoDownloadedSource: string[] = []; + Object.entries(result.affectedRootPaths || {})?.forEach(([key, value]) => { + if (value) { + triggeredByAutoDownloadedSource.push(key); + } else { + triggeredByUser.push(key); + } + }); + if (triggeredByUser?.length) { + this.handleSourceInvalidatedEvent(triggeredByUser, false, jdtEventEmitter); + } + if (triggeredByAutoDownloadedSource?.length) { + this.handleSourceInvalidatedEvent(triggeredByAutoDownloadedSource, true, jdtEventEmitter); + } default: break; } @@ -652,6 +669,55 @@ export class StandardLanguageClient { public getClientStatus(): ClientStatus { return this.status; } + + private async handleSourceInvalidatedEvent(jars: string[], isAutoDownloadSource: boolean, jdtContentProviderEventEmitter: EventEmitter): Promise { + const changedJarNames: Set = new Set(); + for (const jar of jars) { + const path = jar.split(/\/|\\/); + if (path?.length) { + changedJarNames.add(path[path.length - 1]); + } + } + + const affectedDocumentUris: Uri[] = []; + const affectedDocumentNames: string[] = []; + workspace.textDocuments.forEach(document => { + // Here is a sample jdt uri for classfile: + // jdt://contents/rt.jar/java.lang/System.class?... + if (document.uri.scheme === "jdt") { + const paths = document.uri.path?.split(/\/|\\/); + if (paths?.[1] && changedJarNames.has(paths[1])) { + affectedDocumentNames.push(paths[paths.length - 1]); + affectedDocumentUris.push(document.uri); + } + } + }); + if (affectedDocumentUris.length) { + if (isAutoDownloadSource) { + const reloadSources = workspace.getConfiguration().get("java.editor.reloadChangedSources"); + if (reloadSources === "manual") { + return; + } + + if (reloadSources === "ask") { + const choice = await window.showWarningMessage(`The following class(es): ${affectedDocumentNames.map(name => `'${name}'`).join(", ")} ` + + "have new source jar available on the local Maven repository. Do you want to reload them?", "Yes", "Always", "No"); + if (choice === "Always") { + workspace.getConfiguration().update("java.editor.reloadChangedSources", "auto", ConfigurationTarget.Global); + } else if (choice !== "Yes") { + return; + } + } + } + affectedDocumentUris.forEach(classFileUri => { + jdtContentProviderEventEmitter.fire(classFileUri); + }); + } + apiManager.fireSourceInvalidatedEvent({ + affectedRootPaths: jars, + affectedEditorDocuments: affectedDocumentUris, + }); + } } async function showImportFinishNotification(context: ExtensionContext) { From 3ad9b168dfc6db92907df2710fd1f5d61bfe49a1 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Mon, 24 Jul 2023 22:38:43 +0200 Subject: [PATCH 349/708] Smart semicolon autocorrect (#3159) - Introduce java.edit.smartSemicolonDetection.enabled Signed-off-by: Snjezana Peco --- README.md | 1 + package.json | 26 ++++++++ package.nls.json | 4 +- src/commands.ts | 11 ++++ src/extension.ts | 3 +- src/settings.ts | 9 ++- src/smartSemicolonDetection.ts | 76 ++++++++++++++++++++++ src/standardLanguageClient.ts | 6 ++ test/standard-mode-suite/extension.test.ts | 9 +++ 9 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/smartSemicolonDetection.ts diff --git a/README.md b/README.md index d5490c54b..a069f0343 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,7 @@ New in 1.21.0 - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files +* `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index fd9f0828b..62edf78fc 100644 --- a/package.json +++ b/package.json @@ -1140,6 +1140,12 @@ "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", "scope": "window" }, + "java.edit.smartSemicolonDetection.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Defines the `smart semicolon` detection. Defaults to `false`.", + "scope": "window" + }, "java.editor.reloadChangedSources": { "type": "string", "enum": [ @@ -1302,6 +1308,16 @@ "command": "java.server.restart", "title": "%java.server.restart%", "category": "Java" + }, + { + "command": "java.edit.smartSemicolonDetection.command", + "title": "%java.edit.smartSemicolonDetection%", + "category": "Java" + }, + { + "command": "java.edit.smartSemicolonDetectionUndo", + "title": "%java.edit.smartSemicolonDetectionUndo%", + "category": "Java" } ], "keybindings": [ @@ -1319,6 +1335,16 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "javaLSReady && editorLangId == java" + }, + { + "command": "java.edit.smartSemicolonDetection.command", + "key": ";", + "when": "editorFocus && javaLSReady && editorLangId == java" + }, + { + "command": "java.edit.smartSemicolonDetectionUndo", + "key": "backspace", + "when": "editorFocus && javaLSReady && editorLangId == java" } ], "menus": { diff --git a/package.nls.json b/package.nls.json index 0d8099ad7..38b94f77a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -24,5 +24,7 @@ "java.action.changeBaseType": "Base on this Type", "java.project.createModuleInfo.command": "Create module-info.java", "java.clean.sharedIndexes": "Clean Shared Indexes", - "java.server.restart": "Restart Java Language Server" + "java.server.restart": "Restart Java Language Server", + "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", + "java.edit.smartSemicolonDetectionUndo": "Java Smart Semicolon Detection Undo" } diff --git a/src/commands.ts b/src/commands.ts index 51d4cbdf9..2f185f9f1 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -335,4 +335,15 @@ export namespace Commands { */ export const GET_DECOMPILED_SOURCE = "java.decompile"; + /** + * Smart semicolon detection. + */ + export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; + export const SMARTSEMICOLON_DETECTION_CMD = "java.edit.smartSemicolonDetection.command"; + + /** + * Smart semicolon detection backspace. + */ + export const SMARTSEMICOLON_DETECTION_UNDO = "java.edit.smartSemicolonDetectionUndo"; + } diff --git a/src/extension.ts b/src/extension.ts index 1cdf1458c..e7da495d0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation, Position, Selection, Range } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -268,7 +268,6 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { diff --git a/src/settings.ts b/src/settings.ts index 56f1089cf..2959dbc18 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,10 +2,12 @@ import * as fs from 'fs'; import * as path from 'path'; -import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; +import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, Selection, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; +import { apiManager } from './apiManager'; +import { setSmartSemiColonDetectionState } from './smartSemicolonDetection'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -329,6 +331,9 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly return; } if (lastChange.text !== '"""";') { + if (lastChange.text !== ';') { + setSmartSemiColonDetectionState(null, null); + } return; } const selection = activeTextEditor.selection.active; @@ -349,3 +354,5 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly } } } + + diff --git a/src/smartSemicolonDetection.ts b/src/smartSemicolonDetection.ts new file mode 100644 index 000000000..cecf2600e --- /dev/null +++ b/src/smartSemicolonDetection.ts @@ -0,0 +1,76 @@ +'use strict'; + +import { commands, ExtensionContext, Position, Range, Selection, window } from 'vscode'; +import { Commands } from './commands'; +import { getJavaConfiguration } from './utils'; + +let oldPosition: Position = null; +let newPosition: Position = null; + +export function registerSmartSemicolonDetection(context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_CMD, async () => { + if (!didSmartSemicolonInsertion() && enabled() && window.activeTextEditor!.document.fileName.endsWith(".java")) { + const params: SmartDetectionParams = { + uri: window.activeTextEditor.document.uri.toString(), + position: window.activeTextEditor!.selection.active, + }; + const response: SmartDetectionParams = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.SMARTSEMICOLON_DETECTION, JSON.stringify(params)); + if (response !== null) { + window.activeTextEditor!.edit(editBuilder => { + oldPosition = window.activeTextEditor!.selection.active; + editBuilder.insert(response.position, ";"); + window.activeTextEditor.selections = [new Selection(response.position, response.position)]; + newPosition = window.activeTextEditor!.selection.active; + }); + return; + } + } + window.activeTextEditor!.edit(editBuilder => { + editBuilder.insert(window.activeTextEditor!.selection.active, ";"); + }); + newPosition = null; + oldPosition = null; + })); + context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_UNDO, async () => { + if (didSmartSemicolonInsertion() && enabled()) { + window.activeTextEditor!.edit(editBuilder => { + editBuilder.insert(oldPosition, ";"); + const delRange = new Range(newPosition, new Position(newPosition.line, newPosition.character + 1)); + editBuilder.delete(delRange); + window.activeTextEditor.selections = [new Selection(oldPosition, oldPosition)]; + oldPosition = null; + newPosition = null; + }); + return; + } + window.activeTextEditor!.edit(() => { + commands.executeCommand("deleteLeft"); + }); + oldPosition = null; + newPosition = null; + })); +} + +interface SmartDetectionParams { + uri: String; + position: Position; +} + +function didSmartSemicolonInsertion() { + const smartSemicolonInsertion = window.activeTextEditor.selections.length === 1 && enabled() && oldPosition !== null && newPosition !== null; + if (smartSemicolonInsertion) { + const active = window.activeTextEditor!.selection.active; + const prev = new Position(active.line, active.character === 0 ? 0 : active.character - 1); + return newPosition.isEqual(prev); + } + return smartSemicolonInsertion; +} + +function enabled() { + return getJavaConfiguration().get("edit.smartSemicolonDetection.enabled"); +} + +export function setSmartSemiColonDetectionState(oldPos: Position, newPos: Position) { + oldPosition = oldPos; + newPos = newPos; +} \ No newline at end of file diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 99ea44a1f..a4506166b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -40,6 +40,7 @@ import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; +import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -137,6 +138,11 @@ export class StandardLanguageClient { // clients may not have properly configured documentPaste logger.error(error); } + try { + registerSmartSemicolonDetection(context); + } catch (error) { + logger.error(error); + } activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 284b97c04..98506f547 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -42,6 +42,7 @@ suite('Java Language Extension - Standard', () => { return vscode.commands.getCommands(true).then((commands) => { const JAVA_COMMANDS = [ + Commands.ADD_TO_SOURCEPATH, Commands.ADD_TO_SOURCEPATH_CMD, Commands.APPLY_REFACTORING_COMMAND, Commands.APPLY_WORKSPACE_EDIT, @@ -53,6 +54,7 @@ suite('Java Language Extension - Standard', () => { Commands.CLIPBOARD_ONPASTE, Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, + Commands.CREATE_MODULE_INFO, Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GENERATE_ACCESSORS_PROMPT, @@ -102,13 +104,20 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SERVER_TASK_STATUS, Commands.SWITCH_SERVER_MODE, "java.edit.stringFormatting", + "java.completion.onDidSelect", + "java.decompile", + "java.protobuf.generateSources", Commands.SHOW_TYPE_HIERARCHY, Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, Commands.UPGRADE_GRADLE_WRAPPER, + Commands.UPGRADE_GRADLE_WRAPPER_CMD, Commands.UPDATE_SOURCE_ATTACHMENT, Commands.UPDATE_SOURCE_ATTACHMENT_CMD, + Commands.SMARTSEMICOLON_DETECTION_CMD, + Commands.SMARTSEMICOLON_DETECTION_UNDO, + Commands.RESOLVE_SOURCE_ATTACHMENT, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 5fb57e8e1c5d776b21be13cd7227b25b87edf4a6 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 26 Jul 2023 15:53:36 -0400 Subject: [PATCH 350/708] Fix highlighting on 'new' keyword for inner classes Signed-off-by: Hope Hadfield --- language-support/java/java.tmLanguage.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index 87904b016..e8147d683 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -1376,6 +1376,17 @@ }, "properties": { "patterns": [ + { + "match": "(\\.)\\s*(new)", + "captures": { + "1": { + "name": "punctuation.separator.period.java" + }, + "2": { + "name": "keyword.control.new.java" + } + } + }, { "match": "(\\.)\\s*([a-zA-Z_$][\\w$]*)(?=\\s*\\.\\s*[a-zA-Z_$][\\w$]*)", "captures": { From f6aa82122d4032354ae1f48397d805632847dc2d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Jul 2023 19:07:14 -0400 Subject: [PATCH 351/708] Changelog for 1.21.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f69662ac..2da99b1ea 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## 1.21.0 (July 27th, 2023) + * performance - Check completion proposal is compatible or not. See [JLS#2733](https://github.com/eclipse/eclipse.jdt.ls/pull/2733). + * enhancement - Add support for smart semicolon insertion. See [#703](https://github.com/redhat-developer/vscode-java/issues/703). + * enhancement - Add code actions for Join/Split variable. See [JLS#2732](https://github.com/eclipse/eclipse.jdt.ls/pull/2732). + * enhancement - Support outline view for decompiled source. See [JLS#2742](https://github.com/eclipse/eclipse.jdt.ls/pull/2742). + * enhancement - Reload the cached classfile sources when their source attachment is updated. See [#3207](https://github.com/redhat-developer/vscode-java/pull/3207). + * enhancement - Log error when Gradle and JDK versions are mismatched. See [JLS#2749](https://github.com/eclipse/eclipse.jdt.ls/pull/2749). + * bug fix - Fix parameter and exception changes in method signature refactoring. See [#3098](https://github.com/redhat-developer/vscode-java/issues/3098). + * bug fix - Fix missing completion items for fully qualified name completion. See [#3173](https://github.com/redhat-developer/vscode-java/issues/3173). + * bug fix - Support Java text block highlight. See [#2896](https://github.com/redhat-developer/vscode-java/issues/2896). + * bug fix - Fix incorrect syntax highlight for comment following a `throws` clause. See [#3039](https://github.com/redhat-developer/vscode-java/issues/3039). + * bug fix - Fix incorrect syntax highlight for `new` keyword on inner class creation. See [#1195](https://github.com/redhat-developer/vscode-java/issues/1195). + * bug fix - Fix incorrect semantic highlighting due to out-of-date AST in use. See [JLS#2709](https://github.com/eclipse/eclipse.jdt.ls/pull/2709). + * bug fix - Prevent caching outdated AST in `CoreASTProvider`. See [JLS#2714](https://github.com/eclipse/eclipse.jdt.ls/pull/2714). + * bug fix - Call Hierarchy resolves wrong element under certain conditions. See [JLS#2771](https://github.com/eclipse/eclipse.jdt.ls/issues/2771). + * bug fix - `NullPointerException` during code completion of a `var` reference. See [#2758](https://github.com/redhat-developer/vscode-java/issues/2758). + * bug fix - Do not delete the Java project nature removing a nested `.classpath` resource file. See [JLS#2750](https://github.com/eclipse/eclipse.jdt.ls/pull/2750). + * bug fix - Unable to acquire the state change lock for the module 'buildship'. See [#3184](https://github.com/redhat-developer/vscode-java/issues/3184). + * bug fix - Rename 'Attach Source' menu to 'Attach Source…'. See [#3202](https://github.com/redhat-developer/vscode-java/pull/3202). + * dependencies - Bump word-wrap from 1.2.3 to 1.2.4. See [#3211](https://github.com/redhat-developer/vscode-java/pull/3211). + ## 1.20.0 (June 29th, 2023) * performance - Set the default value of `java.completion.matchCase` to `firstLetter`. See [#3142](https://github.com/redhat-developer/vscode-java/pull/3142). * enhancement - Support for "Go to Declaration". See [JLS#2684](https://github.com/eclipse/eclipse.jdt.ls/issues/2684). From 829e8c6212dde54e250d0003614cf4303f994c3e Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 27 Jul 2023 19:18:12 +0800 Subject: [PATCH 352/708] Revert "Smart semicolon autocorrect (#3159)" This reverts commit 3ad9b168dfc6db92907df2710fd1f5d61bfe49a1. --- CHANGELOG.md | 1 - README.md | 1 - package.json | 26 -------- package.nls.json | 4 +- src/commands.ts | 11 ---- src/extension.ts | 3 +- src/settings.ts | 9 +-- src/smartSemicolonDetection.ts | 76 ---------------------- src/standardLanguageClient.ts | 6 -- test/standard-mode-suite/extension.test.ts | 9 --- 10 files changed, 4 insertions(+), 142 deletions(-) delete mode 100644 src/smartSemicolonDetection.ts diff --git a/CHANGELOG.md b/CHANGELOG.md index 2da99b1ea..ccba549b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,6 @@ ## 1.21.0 (July 27th, 2023) * performance - Check completion proposal is compatible or not. See [JLS#2733](https://github.com/eclipse/eclipse.jdt.ls/pull/2733). - * enhancement - Add support for smart semicolon insertion. See [#703](https://github.com/redhat-developer/vscode-java/issues/703). * enhancement - Add code actions for Join/Split variable. See [JLS#2732](https://github.com/eclipse/eclipse.jdt.ls/pull/2732). * enhancement - Support outline view for decompiled source. See [JLS#2742](https://github.com/eclipse/eclipse.jdt.ls/pull/2742). * enhancement - Reload the cached classfile sources when their source attachment is updated. See [#3207](https://github.com/redhat-developer/vscode-java/pull/3207). diff --git a/README.md b/README.md index a069f0343..d5490c54b 100644 --- a/README.md +++ b/README.md @@ -240,7 +240,6 @@ New in 1.21.0 - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files -* `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 62edf78fc..fd9f0828b 100644 --- a/package.json +++ b/package.json @@ -1140,12 +1140,6 @@ "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", "scope": "window" }, - "java.edit.smartSemicolonDetection.enabled": { - "type": "boolean", - "default": false, - "markdownDescription": "Defines the `smart semicolon` detection. Defaults to `false`.", - "scope": "window" - }, "java.editor.reloadChangedSources": { "type": "string", "enum": [ @@ -1308,16 +1302,6 @@ "command": "java.server.restart", "title": "%java.server.restart%", "category": "Java" - }, - { - "command": "java.edit.smartSemicolonDetection.command", - "title": "%java.edit.smartSemicolonDetection%", - "category": "Java" - }, - { - "command": "java.edit.smartSemicolonDetectionUndo", - "title": "%java.edit.smartSemicolonDetectionUndo%", - "category": "Java" } ], "keybindings": [ @@ -1335,16 +1319,6 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "javaLSReady && editorLangId == java" - }, - { - "command": "java.edit.smartSemicolonDetection.command", - "key": ";", - "when": "editorFocus && javaLSReady && editorLangId == java" - }, - { - "command": "java.edit.smartSemicolonDetectionUndo", - "key": "backspace", - "when": "editorFocus && javaLSReady && editorLangId == java" } ], "menus": { diff --git a/package.nls.json b/package.nls.json index 38b94f77a..0d8099ad7 100644 --- a/package.nls.json +++ b/package.nls.json @@ -24,7 +24,5 @@ "java.action.changeBaseType": "Base on this Type", "java.project.createModuleInfo.command": "Create module-info.java", "java.clean.sharedIndexes": "Clean Shared Indexes", - "java.server.restart": "Restart Java Language Server", - "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", - "java.edit.smartSemicolonDetectionUndo": "Java Smart Semicolon Detection Undo" + "java.server.restart": "Restart Java Language Server" } diff --git a/src/commands.ts b/src/commands.ts index 2f185f9f1..51d4cbdf9 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -335,15 +335,4 @@ export namespace Commands { */ export const GET_DECOMPILED_SOURCE = "java.decompile"; - /** - * Smart semicolon detection. - */ - export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; - export const SMARTSEMICOLON_DETECTION_CMD = "java.edit.smartSemicolonDetection.command"; - - /** - * Smart semicolon detection backspace. - */ - export const SMARTSEMICOLON_DETECTION_UNDO = "java.edit.smartSemicolonDetectionUndo"; - } diff --git a/src/extension.ts b/src/extension.ts index e7da495d0..1cdf1458c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation, Position, Selection, Range } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -268,6 +268,7 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { diff --git a/src/settings.ts b/src/settings.ts index 2959dbc18..56f1089cf 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,12 +2,10 @@ import * as fs from 'fs'; import * as path from 'path'; -import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, Selection, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; +import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; -import { apiManager } from './apiManager'; -import { setSmartSemiColonDetectionState } from './smartSemicolonDetection'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -331,9 +329,6 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly return; } if (lastChange.text !== '"""";') { - if (lastChange.text !== ';') { - setSmartSemiColonDetectionState(null, null); - } return; } const selection = activeTextEditor.selection.active; @@ -354,5 +349,3 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly } } } - - diff --git a/src/smartSemicolonDetection.ts b/src/smartSemicolonDetection.ts deleted file mode 100644 index cecf2600e..000000000 --- a/src/smartSemicolonDetection.ts +++ /dev/null @@ -1,76 +0,0 @@ -'use strict'; - -import { commands, ExtensionContext, Position, Range, Selection, window } from 'vscode'; -import { Commands } from './commands'; -import { getJavaConfiguration } from './utils'; - -let oldPosition: Position = null; -let newPosition: Position = null; - -export function registerSmartSemicolonDetection(context: ExtensionContext) { - context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_CMD, async () => { - if (!didSmartSemicolonInsertion() && enabled() && window.activeTextEditor!.document.fileName.endsWith(".java")) { - const params: SmartDetectionParams = { - uri: window.activeTextEditor.document.uri.toString(), - position: window.activeTextEditor!.selection.active, - }; - const response: SmartDetectionParams = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.SMARTSEMICOLON_DETECTION, JSON.stringify(params)); - if (response !== null) { - window.activeTextEditor!.edit(editBuilder => { - oldPosition = window.activeTextEditor!.selection.active; - editBuilder.insert(response.position, ";"); - window.activeTextEditor.selections = [new Selection(response.position, response.position)]; - newPosition = window.activeTextEditor!.selection.active; - }); - return; - } - } - window.activeTextEditor!.edit(editBuilder => { - editBuilder.insert(window.activeTextEditor!.selection.active, ";"); - }); - newPosition = null; - oldPosition = null; - })); - context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_UNDO, async () => { - if (didSmartSemicolonInsertion() && enabled()) { - window.activeTextEditor!.edit(editBuilder => { - editBuilder.insert(oldPosition, ";"); - const delRange = new Range(newPosition, new Position(newPosition.line, newPosition.character + 1)); - editBuilder.delete(delRange); - window.activeTextEditor.selections = [new Selection(oldPosition, oldPosition)]; - oldPosition = null; - newPosition = null; - }); - return; - } - window.activeTextEditor!.edit(() => { - commands.executeCommand("deleteLeft"); - }); - oldPosition = null; - newPosition = null; - })); -} - -interface SmartDetectionParams { - uri: String; - position: Position; -} - -function didSmartSemicolonInsertion() { - const smartSemicolonInsertion = window.activeTextEditor.selections.length === 1 && enabled() && oldPosition !== null && newPosition !== null; - if (smartSemicolonInsertion) { - const active = window.activeTextEditor!.selection.active; - const prev = new Position(active.line, active.character === 0 ? 0 : active.character - 1); - return newPosition.isEqual(prev); - } - return smartSemicolonInsertion; -} - -function enabled() { - return getJavaConfiguration().get("edit.smartSemicolonDetection.enabled"); -} - -export function setSmartSemiColonDetectionState(oldPos: Position, newPos: Position) { - oldPosition = oldPos; - newPos = newPos; -} \ No newline at end of file diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index a4506166b..99ea44a1f 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -40,7 +40,6 @@ import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; -import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -138,11 +137,6 @@ export class StandardLanguageClient { // clients may not have properly configured documentPaste logger.error(error); } - try { - registerSmartSemicolonDetection(context); - } catch (error) { - logger.error(error); - } activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 98506f547..284b97c04 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -42,7 +42,6 @@ suite('Java Language Extension - Standard', () => { return vscode.commands.getCommands(true).then((commands) => { const JAVA_COMMANDS = [ - Commands.ADD_TO_SOURCEPATH, Commands.ADD_TO_SOURCEPATH_CMD, Commands.APPLY_REFACTORING_COMMAND, Commands.APPLY_WORKSPACE_EDIT, @@ -54,7 +53,6 @@ suite('Java Language Extension - Standard', () => { Commands.CLIPBOARD_ONPASTE, Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, - Commands.CREATE_MODULE_INFO, Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GENERATE_ACCESSORS_PROMPT, @@ -104,20 +102,13 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SERVER_TASK_STATUS, Commands.SWITCH_SERVER_MODE, "java.edit.stringFormatting", - "java.completion.onDidSelect", - "java.decompile", - "java.protobuf.generateSources", Commands.SHOW_TYPE_HIERARCHY, Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, Commands.UPGRADE_GRADLE_WRAPPER, - Commands.UPGRADE_GRADLE_WRAPPER_CMD, Commands.UPDATE_SOURCE_ATTACHMENT, Commands.UPDATE_SOURCE_ATTACHMENT_CMD, - Commands.SMARTSEMICOLON_DETECTION_CMD, - Commands.SMARTSEMICOLON_DETECTION_UNDO, - Commands.RESOLVE_SOURCE_ATTACHMENT, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 8b3c2ecb6f1e2931186cddca9a89d682ae9c2e0a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Jul 2023 13:43:32 -0400 Subject: [PATCH 353/708] Upversion to 1.22.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d5490c54b..697fc4e81 100644 --- a/README.md +++ b/README.md @@ -234,8 +234,6 @@ The following settings are supported: * `java.configuration.maven.defaultMojoExecutionAction` : Specifies default mojo execution action when no associated metadata can be detected. Defaults to `ignore`. * `java.completion.lazyResolveTextEdit.enabled`: [Experimental] Enable/disable lazily resolving text edits for code completion. Defaults to `true`. * `java.edit.validateAllOpenBuffersOnChanges`: Specifies whether to recheck all open Java files for diagnostics when editing a Java file. Defaults to `false`. - -New in 1.21.0 * `java.editor.reloadChangedSources`: Specifies whether to reload the sources of the open class files when their source jar files are changed. Defaults to `ask`. - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files diff --git a/package-lock.json b/package-lock.json index bb789036c..917845ba6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.21.0", + "version": "1.22.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index fd9f0828b..913cc2312 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.21.0", + "version": "1.22.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From f7651bd9cf87572348322f4efb712b001acbe5e3 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 27 Jul 2023 18:04:23 +0200 Subject: [PATCH 354/708] Smart semicolon autocorrect Signed-off-by: Snjezana Peco --- README.md | 1 + package.json | 26 ++++++++ package.nls.json | 4 +- src/commands.ts | 11 ++++ src/extension.ts | 3 +- src/settings.ts | 9 ++- src/smartSemicolonDetection.ts | 76 ++++++++++++++++++++++ src/standardLanguageClient.ts | 6 ++ test/standard-mode-suite/extension.test.ts | 9 +++ 9 files changed, 141 insertions(+), 4 deletions(-) create mode 100644 src/smartSemicolonDetection.ts diff --git a/README.md b/README.md index 697fc4e81..b4a11e392 100644 --- a/README.md +++ b/README.md @@ -238,6 +238,7 @@ The following settings are supported: - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files +* `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 913cc2312..8e6458353 100644 --- a/package.json +++ b/package.json @@ -1140,6 +1140,12 @@ "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", "scope": "window" }, + "java.edit.smartSemicolonDetection.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Defines the `smart semicolon` detection. Defaults to `false`.", + "scope": "window" + }, "java.editor.reloadChangedSources": { "type": "string", "enum": [ @@ -1302,6 +1308,16 @@ "command": "java.server.restart", "title": "%java.server.restart%", "category": "Java" + }, + { + "command": "java.edit.smartSemicolonDetection.command", + "title": "%java.edit.smartSemicolonDetection%", + "category": "Java" + }, + { + "command": "java.edit.smartSemicolonDetectionUndo", + "title": "%java.edit.smartSemicolonDetectionUndo%", + "category": "Java" } ], "keybindings": [ @@ -1319,6 +1335,16 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "javaLSReady && editorLangId == java" + }, + { + "command": "java.edit.smartSemicolonDetection.command", + "key": ";", + "when": "editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" + }, + { + "command": "java.edit.smartSemicolonDetectionUndo", + "key": "backspace", + "when": "editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" } ], "menus": { diff --git a/package.nls.json b/package.nls.json index 0d8099ad7..38b94f77a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -24,5 +24,7 @@ "java.action.changeBaseType": "Base on this Type", "java.project.createModuleInfo.command": "Create module-info.java", "java.clean.sharedIndexes": "Clean Shared Indexes", - "java.server.restart": "Restart Java Language Server" + "java.server.restart": "Restart Java Language Server", + "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", + "java.edit.smartSemicolonDetectionUndo": "Java Smart Semicolon Detection Undo" } diff --git a/src/commands.ts b/src/commands.ts index 51d4cbdf9..2f185f9f1 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -335,4 +335,15 @@ export namespace Commands { */ export const GET_DECOMPILED_SOURCE = "java.decompile"; + /** + * Smart semicolon detection. + */ + export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; + export const SMARTSEMICOLON_DETECTION_CMD = "java.edit.smartSemicolonDetection.command"; + + /** + * Smart semicolon detection backspace. + */ + export const SMARTSEMICOLON_DETECTION_UNDO = "java.edit.smartSemicolonDetectionUndo"; + } diff --git a/src/extension.ts b/src/extension.ts index 1cdf1458c..e7da495d0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation, Position, Selection, Range } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -268,7 +268,6 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { diff --git a/src/settings.ts b/src/settings.ts index 56f1089cf..2959dbc18 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -2,10 +2,12 @@ import * as fs from 'fs'; import * as path from 'path'; -import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; +import { commands, ConfigurationTarget, env, ExtensionContext, Position, Range, Selection, SnippetString, TextDocument, Uri, window, workspace, WorkspaceConfiguration, WorkspaceFolder } from 'vscode'; import { Commands } from './commands'; import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; +import { apiManager } from './apiManager'; +import { setSmartSemiColonDetectionState } from './smartSemicolonDetection'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -329,6 +331,9 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly return; } if (lastChange.text !== '"""";') { + if (lastChange.text !== ';') { + setSmartSemiColonDetectionState(null, null); + } return; } const selection = activeTextEditor.selection.active; @@ -349,3 +354,5 @@ export function handleTextBlockClosing(document: TextDocument, changes: readonly } } } + + diff --git a/src/smartSemicolonDetection.ts b/src/smartSemicolonDetection.ts new file mode 100644 index 000000000..060f9a309 --- /dev/null +++ b/src/smartSemicolonDetection.ts @@ -0,0 +1,76 @@ +'use strict'; + +import { commands, ExtensionContext, Position, Range, Selection, window } from 'vscode'; +import { Commands } from './commands'; +import { getJavaConfiguration } from './utils'; + +let oldPosition: Position = null; +let newPosition: Position = null; + +export function registerSmartSemicolonDetection(context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_CMD, async () => { + if (!didSmartSemicolonInsertion() && enabled()) { + const params: SmartDetectionParams = { + uri: window.activeTextEditor.document.uri.toString(), + position: window.activeTextEditor!.selection.active, + }; + const response: SmartDetectionParams = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.SMARTSEMICOLON_DETECTION, JSON.stringify(params)); + if (response !== null) { + window.activeTextEditor!.edit(editBuilder => { + oldPosition = window.activeTextEditor!.selection.active; + editBuilder.insert(response.position, ";"); + window.activeTextEditor.selections = [new Selection(response.position, response.position)]; + newPosition = window.activeTextEditor!.selection.active; + }); + return; + } + } + window.activeTextEditor!.edit(editBuilder => { + editBuilder.insert(window.activeTextEditor!.selection.active, ";"); + }); + newPosition = null; + oldPosition = null; + })); + context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_UNDO, async () => { + if (didSmartSemicolonInsertion() && enabled()) { + window.activeTextEditor!.edit(editBuilder => { + editBuilder.insert(oldPosition, ";"); + const delRange = new Range(newPosition, new Position(newPosition.line, newPosition.character + 1)); + editBuilder.delete(delRange); + window.activeTextEditor.selections = [new Selection(oldPosition, oldPosition)]; + oldPosition = null; + newPosition = null; + }); + return; + } + window.activeTextEditor!.edit(() => { + commands.executeCommand("deleteLeft"); + }); + oldPosition = null; + newPosition = null; + })); +} + +interface SmartDetectionParams { + uri: String; + position: Position; +} + +function didSmartSemicolonInsertion() { + const smartSemicolonInsertion = window.activeTextEditor.selections.length === 1 && enabled() && oldPosition !== null && newPosition !== null; + if (smartSemicolonInsertion) { + const active = window.activeTextEditor!.selection.active; + const prev = new Position(active.line, active.character === 0 ? 0 : active.character - 1); + return newPosition.isEqual(prev); + } + return smartSemicolonInsertion; +} + +function enabled() { + return getJavaConfiguration().get("edit.smartSemicolonDetection.enabled"); +} + +export function setSmartSemiColonDetectionState(oldPos: Position, newPos: Position) { + oldPosition = oldPos; + newPos = newPos; +} \ No newline at end of file diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 99ea44a1f..a4506166b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -40,6 +40,7 @@ import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; +import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -137,6 +138,11 @@ export class StandardLanguageClient { // clients may not have properly configured documentPaste logger.error(error); } + try { + registerSmartSemicolonDetection(context); + } catch (error) { + logger.error(error); + } activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 284b97c04..98506f547 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -42,6 +42,7 @@ suite('Java Language Extension - Standard', () => { return vscode.commands.getCommands(true).then((commands) => { const JAVA_COMMANDS = [ + Commands.ADD_TO_SOURCEPATH, Commands.ADD_TO_SOURCEPATH_CMD, Commands.APPLY_REFACTORING_COMMAND, Commands.APPLY_WORKSPACE_EDIT, @@ -53,6 +54,7 @@ suite('Java Language Extension - Standard', () => { Commands.CLIPBOARD_ONPASTE, Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, + Commands.CREATE_MODULE_INFO, Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GENERATE_ACCESSORS_PROMPT, @@ -102,13 +104,20 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SERVER_TASK_STATUS, Commands.SWITCH_SERVER_MODE, "java.edit.stringFormatting", + "java.completion.onDidSelect", + "java.decompile", + "java.protobuf.generateSources", Commands.SHOW_TYPE_HIERARCHY, Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, Commands.UPGRADE_GRADLE_WRAPPER, + Commands.UPGRADE_GRADLE_WRAPPER_CMD, Commands.UPDATE_SOURCE_ATTACHMENT, Commands.UPDATE_SOURCE_ATTACHMENT_CMD, + Commands.SMARTSEMICOLON_DETECTION_CMD, + Commands.SMARTSEMICOLON_DETECTION_UNDO, + Commands.RESOLVE_SOURCE_ATTACHMENT, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 8fa2464e16028b248fd89efc14622aeab251e890 Mon Sep 17 00:00:00 2001 From: Rob Stryker Date: Mon, 31 Jul 2023 13:51:26 -0400 Subject: [PATCH 355/708] end-to-end performance tracking for code completion requests (#3165) - Update USAGE_DATA.md for code completion telemetry Signed-off-by: Rob Stryker --- USAGE_DATA.md | 3 ++- src/standardLanguageClient.ts | 22 ++++++++++++++++++++-- src/telemetry.ts | 1 + 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index 98f756b1c..fb5c3a6e9 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -21,7 +21,8 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors - + * The number of results (eg. 20), whether an error occured (eg. false), and duration (in milliseconds) when code assist is activated + ## What's included in the general telemetry data Please see the diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index a4506166b..77e7a1dcb 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -5,13 +5,13 @@ import { findRuntimes } from "jdk-utils"; import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; -import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, CompletionRequest } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider"; import { Commands } from "./commands"; -import { ClientStatus } from "./extension.api"; +import { ClientStatus, TraceEvent } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; import { awaitServerConnection, prepareExecutable, DEBUG } from "./javaServerStarter"; @@ -154,6 +154,7 @@ export class StandardLanguageClient { // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); registerDocumentValidationListener(context, this.languageClient); + registerCodeCompletionTelemetryListener(); break; case 'Started': this.status = ClientStatus.started; @@ -820,3 +821,20 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC return Promise.resolve(true); } } + +export function registerCodeCompletionTelemetryListener() { + apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => { + if (traceEvent.type === CompletionRequest.method) { + // Exclude the invalid completion requests. + if (!traceEvent.resultLength) { + return; + } + const props = { + duration: Math.round(traceEvent.duration * 100) / 100, + resultLength: traceEvent.resultLength || 0, + error: !!traceEvent.error, + }; + return Telemetry.sendTelemetry(Telemetry.COMPLETION_EVENT, props); + } + }); +} \ No newline at end of file diff --git a/src/telemetry.ts b/src/telemetry.ts index d930123df..64a019075 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -7,6 +7,7 @@ import { ExtensionContext, workspace, WorkspaceConfiguration } from "vscode"; export namespace Telemetry { export const STARTUP_EVT = "startup"; + export const COMPLETION_EVENT = "textCompletion"; export const SERVER_INITIALIZED_EVT = "java.workspace.initialized"; let telemetryManager: TelemetryService = null; let serverInitializedReceived = false; From 05d41606e479869eb70623f4fa4e18669bd6414a Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 26 Jul 2023 14:17:00 -0400 Subject: [PATCH 356/708] Support WorkDoneProgress in progress reporting Signed-off-by: Hope Hadfield --- README.md | 1 - package.json | 6 ------ src/extension.ts | 1 - src/protocol.ts | 19 +++++++++++-------- src/serverStatus.ts | 3 ++- src/serverTaskPresenter.ts | 25 ++++++++----------------- src/serverTasks.ts | 6 +++--- src/settings.ts | 1 - src/standardLanguageClient.ts | 5 +++-- 9 files changed, 27 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index b4a11e392..16edfa6d0 100644 --- a/README.md +++ b/README.md @@ -149,7 +149,6 @@ The following settings are supported: * `java.completion.filteredTypes`: Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages. * `java.completion.favoriteStaticMembers` : Defines a list of static members or types with static members. * `java.completion.importOrder` : Defines the sorting order of import statements. -* `java.progressReports.enabled` : [Experimental] Enable/disable progress reports from background processes on the server. * `java.format.enabled` : Enable/disable the default Java formatter. * `java.format.settings.url` : Specifies the url or file path to the [Eclipse formatter xml settings](https://github.com/redhat-developer/vscode-java/wiki/Formatter-settings). * `java.format.settings.profile` : Optional formatter profile name from the Eclipse formatter settings. diff --git a/package.json b/package.json index 8e6458353..a478f0c84 100644 --- a/package.json +++ b/package.json @@ -653,12 +653,6 @@ "description": "Enable/disable smart folding range support. If disabled, it will use the default indentation-based folding range provided by VS Code.", "scope": "window" }, - "java.progressReports.enabled": { - "type": "boolean", - "description": "[Experimental] Enable/disable progress reports from background processes on the server.", - "default": true, - "scope": "window" - }, "java.format.settings.url": { "type": "string", "markdownDescription": "Specifies the url or file path to the [Eclipse formatter xml settings](https://github.com/redhat-developer/vscode-java/wiki/Formatter-settings).", diff --git a/src/extension.ts b/src/extension.ts index e7da495d0..1541fc3e4 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -157,7 +157,6 @@ export function activate(context: ExtensionContext): Promise { workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, settings: { java: getJavaConfig(requirements.java_home) }, extendedClientCapabilities: { - progressReportProvider: getJavaConfiguration().get('progressReports.enabled'), classFileContentsSupport: true, overrideMethodsPromptSupport: true, hashCodeEqualsPromptSupport: true, diff --git a/src/protocol.ts b/src/protocol.ts index 29ea91b05..b2e267705 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -82,15 +82,17 @@ export interface StatusReport { } export interface ProgressReport { - id: string; - task: string; - subTask: string; - status: string; - workDone: number; - totalWork: number; + token: string; + value: any; complete: boolean; } +export enum ProgressKind { + begin = "begin", + report = "report", + end = "end" +} + export interface ActionableMessage { severity: MessageType; message: string; @@ -107,8 +109,9 @@ export namespace StatusNotification { export const type = new NotificationType('language/status'); } -export namespace ProgressReportNotification { - export const type = new NotificationType('language/progressReport'); +// See https://github.com/microsoft/vscode-languageserver-node/blob/release/client/8.1.0/jsonrpc/src/common/connection.ts#L53-L55 +export namespace ProgressNotification { + export const type = new NotificationType('$/progress'); } export namespace ClassFileContentsRequest { diff --git a/src/serverStatus.ts b/src/serverStatus.ts index c6260e139..a7fd2eac8 100644 --- a/src/serverStatus.ts +++ b/src/serverStatus.ts @@ -2,6 +2,7 @@ import { EventEmitter } from "vscode"; import { serverTasks } from "./serverTasks"; +import { ProgressKind } from "./protocol"; export enum ServerStatusKind { ready = "Ready", @@ -31,7 +32,7 @@ export namespace serverStatus { export function initialize() { serverTasks.onDidUpdateServerTask(tasks => { - isBusy = tasks.some(task => !task.complete); + isBusy = tasks.some(task => !(task.complete)); fireEvent(); }); } diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 547ad87b2..94e95343e 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -1,7 +1,7 @@ -import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions, window, ProgressLocation, Progress, workspace } from "vscode"; +import { tasks, Task, TaskScope, Pseudoterminal, CustomExecution, TaskExecution, TaskRevealKind, TaskPanelKind, EventEmitter, Event, TerminalDimensions, window, Progress, ProgressLocation, workspace } from "vscode"; import { serverTasks } from "./serverTasks"; import { Disposable } from "vscode-languageclient"; -import { ProgressReport } from "./protocol"; +import { ProgressReport, ProgressKind } from "./protocol"; import { Commands } from "./commands"; import { getJavaConfiguration } from "./utils"; @@ -91,17 +91,11 @@ class ServerTaskTerminal implements Pseudoterminal { private printTask(report: ProgressReport) { if (report.complete) { - this.onDidWriteEvent.fire(`${report.id.slice(0, 8)} ${report.task} [Done]\r\n`); + this.onDidWriteEvent.fire(`${report.token.slice(0, 8)} ${report.value.message} [Done]\r\n`); return; } - let taskMsg = `${report.id.slice(0, 8)} ${report.task}`; - if (report.status) { - taskMsg += `: ${report.status}`; - } - if (report.totalWork && report.workDone >= 0) { - taskMsg += ` [${report.workDone}/${report.totalWork}]`; - } + const taskMsg = `${report.token.slice(0, 8)} ${report.value.message}`; this.onDidWriteEvent.fire(`${taskMsg}\r\n`); } @@ -141,19 +135,16 @@ export class ActivationProgressNotification { } else if (!showBuildStatusEnabled) { return; } - const isProgressReportEnabled: boolean = getJavaConfiguration().get("progressReports.enabled"); - const title = isProgressReportEnabled ? "Opening Java Projects" : "Opening Java Projects..."; + const title = "Opening Java Projects"; window.withProgress({ location: ProgressLocation.Notification, title, cancellable: false, }, (progress: Progress<{ message?: string; increment?: number }>) => { return new Promise((resolve) => { - if (isProgressReportEnabled) { - progress.report({ - message: `[check details](command:${Commands.SHOW_SERVER_TASK_STATUS})` - }); - } + progress.report({ + message: `[check details](command:${Commands.SHOW_SERVER_TASK_STATUS})` + }); this.onHide(() => { for (const disposable of this.disposables) { disposable.dispose(); diff --git a/src/serverTasks.ts b/src/serverTasks.ts index 5d02c6473..f881be450 100644 --- a/src/serverTasks.ts +++ b/src/serverTasks.ts @@ -1,5 +1,5 @@ -import { EventEmitter, Progress } from "vscode"; -import { ProgressReport } from "./protocol"; +import { EventEmitter } from "vscode"; +import { ProgressReport, ProgressKind } from "./protocol"; const findIndex = require("lodash.findindex"); @@ -56,7 +56,7 @@ function recycleTasks(tasks: ProgressReport[], length: number) { } function applyReport(report: ProgressReport) { - const index = findIndex(tasks, task => task.id === report.id); + const index = findIndex(tasks, task => task.token === report.token); if (index === -1) { tasks.push(report); } else { diff --git a/src/settings.ts b/src/settings.ts index 2959dbc18..6e7b53a58 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -133,7 +133,6 @@ function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: Work return hasConfigKeyChanged('jdt.ls.java.home', oldConfig, newConfig) || hasConfigKeyChanged('home', oldConfig, newConfig) || hasConfigKeyChanged('jdt.ls.vmargs', oldConfig, newConfig) - || hasConfigKeyChanged('progressReports.enabled', oldConfig, newConfig) || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig) || hasConfigKeyChanged('sharedIndexes.location', oldConfig, newConfig);; } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 77e7a1dcb..97c44ba54 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -22,7 +22,7 @@ import * as pasteAction from './pasteAction'; import { registerPasteEventHandler } from './pasteEventHandler'; import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; -import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressReportNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; +import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressKind, ProgressNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; import * as refactorAction from './refactorAction'; import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; import { serverStatus, ServerStatusKind } from "./serverStatus"; @@ -192,7 +192,8 @@ export class StandardLanguageClient { } }); - this.languageClient.onNotification(ProgressReportNotification.type, (progress) => { + this.languageClient.onNotification(ProgressNotification.type, (progress) => { + progress.complete = progress.value.kind === ProgressKind.end; serverTasks.updateServerTask(progress); }); From 7230165406bbcd2375ff7fa35cb3db86f630aee2 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Thu, 27 Jul 2023 12:55:45 -0400 Subject: [PATCH 357/708] Fix highlighting for multiline class Signed-off-by: Hope Hadfield --- language-support/java/java.tmLanguage.json | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index e8147d683..4dd804e62 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -305,7 +305,7 @@ ] }, "class": { - "begin": "(?=\\w?[\\w\\s-]*\\b(?:class|(? Date: Thu, 17 Aug 2023 16:55:32 -0400 Subject: [PATCH 358/708] Revert "Fix highlighting for multiline class" This reverts commit 7230165406bbcd2375ff7fa35cb3db86f630aee2. --- language-support/java/java.tmLanguage.json | 22 +--------------------- 1 file changed, 1 insertion(+), 21 deletions(-) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index 4dd804e62..e8147d683 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -305,7 +305,7 @@ ] }, "class": { - "begin": "(?=\\w?[\\w\\s-]*\\b(?:class|(? Date: Wed, 23 Aug 2023 15:29:08 +0800 Subject: [PATCH 359/708] Automatically register VMInstalls for the JDKs installed on the local machine (#3251) * Automatically register VMInstalls for the JDKs installed on the local machine * disable jdt vm detection job by default Signed-off-by: Jinbo Wang --- package-lock.json | 6 ++-- package.json | 2 +- src/extension.ts | 6 ++-- src/javaServerStarter.ts | 9 ++++-- src/jdkUtils.ts | 57 +++++++++++++++++++++++++++++++++++ src/requirements.ts | 26 ++-------------- src/standardLanguageClient.ts | 9 +++--- src/syntaxLanguageClient.ts | 2 +- src/utils.ts | 45 ++++++++++++++++++++++++++- 9 files changed, 122 insertions(+), 40 deletions(-) create mode 100644 src/jdkUtils.ts diff --git a/package-lock.json b/package-lock.json index 917845ba6..508257a0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4615,9 +4615,9 @@ "dev": true }, "jdk-utils": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.4.tgz", - "integrity": "sha512-QSwVdPtwdHRvY6zDD0GOZo5Fu7AdgfNDyizZWhk16jnrcLTPbmsww4WLDC+5wyxCWm8izZZfmjTVcicdreuJLw==" + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.0.tgz", + "integrity": "sha512-inZ7j5NSLVVlIKgg4NNt02v9CbtJk9I3ILalVpF+XMK9VjHb8VUx02Dozg6PXF+87tEIDoOs7ZQB6NuiR3lhUQ==" }, "jest-worker": { "version": "27.5.1", diff --git a/package.json b/package.json index a478f0c84..1a3e11e84 100644 --- a/package.json +++ b/package.json @@ -1545,7 +1545,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.4.4", + "jdk-utils": "^0.5.0", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", diff --git a/src/extension.ts b/src/extension.ts index 1541fc3e4..d7b0ab348 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -155,7 +155,7 @@ export function activate(context: ExtensionContext): Promise { initializationOptions: { bundles: collectJavaExtensions(extensions.all), workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, - settings: { java: getJavaConfig(requirements.java_home) }, + settings: { java: await getJavaConfig(requirements.java_home) }, extendedClientCapabilities: { classFileContentsSupport: true, overrideMethodsPromptSupport: true, @@ -184,7 +184,7 @@ export function activate(context: ExtensionContext): Promise { didChangeConfiguration: async () => { await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: getJavaConfig(requirements.java_home), + java: await getJavaConfig(requirements.java_home), } }); } @@ -267,7 +267,7 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index d6c35a283..656fe8ae6 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -34,7 +34,7 @@ export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; const DEPENDENCY_COLLECTOR_IMPL= '-Daether.dependencyCollector.impl='; const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; -export function prepareExecutable(requirements: RequirementsData, workspacePath, javaConfig, context: ExtensionContext, isSyntaxServer: boolean): Executable { +export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); @@ -47,7 +47,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, } executable.options = options; executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); - executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); + executable.args = prepareParams(requirements, workspacePath, context, isSyntaxServer); logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; } @@ -68,7 +68,7 @@ export function awaitServerConnection(port): Thenable { }); } -function prepareParams(requirements: RequirementsData, javaConfiguration, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { +function prepareParams(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { const params: string[] = []; if (DEBUG) { const port = isSyntaxServer ? 1045 : 1044; @@ -117,6 +117,9 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp } else { vmargs = ''; } + if (vmargs.indexOf('-DDetectVMInstallationsJob.disabled=') < 0) { + params.push('-DDetectVMInstallationsJob.disabled=true'); + } const encodingKey = '-Dfile.encoding='; if (vmargs.indexOf(encodingKey) < 0) { params.push(encodingKey + getJavaEncoding()); diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts new file mode 100644 index 000000000..309fbe0d7 --- /dev/null +++ b/src/jdkUtils.ts @@ -0,0 +1,57 @@ +'use strict'; + +import { IJavaRuntime, findRuntimes, getSources } from 'jdk-utils'; + +let cachedJdks: IJavaRuntime[]; + +export async function listJdks(force?: boolean): Promise { + if (force || !cachedJdks) { + cachedJdks = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); + } + + return [].concat(cachedJdks); +} + +/** + * Sort by source where JDk is located. + * The order is: + * 1. JDK_HOME, JAVA_HOME, PATH + * 2. JDK manager such as SDKMAN, jEnv, jabba, asdf + * 3. Common places such as /usr/lib/jvm + * 4. Others + */ +export function sortJdksBySource(jdks: IJavaRuntime[]) { + const rankedJdks = jdks as Array; + const env: string[] = ["JDK_HOME", "JAVA_HOME", "PATH"]; + const jdkManagers: string[] = ["SDKMAN", "jEnv", "jabba", "asdf"]; + for (const jdk of rankedJdks) { + const detectedSources: string[] = getSources(jdk); + for (const [index, source] of env.entries()) { + if (detectedSources.includes(source)) { + jdk.rank = index; // jdk from environment variables + break; + } + } + + if (jdk.rank) { + continue; + } + + const fromManager: boolean = detectedSources.some(source => jdkManagers.includes(source)); + if (fromManager) { + jdk.rank = env.length + 1; // jdk from the jdk managers such as SDKMAN + } else if (!detectedSources.length){ + jdk.rank = env.length + 2; // jdk from common places + } else { + jdk.rank = env.length + 3; // jdk from other source such as ~/.gradle/jdks + } + } + rankedJdks.sort((a, b) => a.rank - b.rank); +} + +/** + * Sort by major version in descend order. + */ +export function sortJdksByVersion(jdks: IJavaRuntime[]) { + jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); +} diff --git a/src/requirements.ts b/src/requirements.ts index 1ca128b1e..b753f2200 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -2,12 +2,13 @@ import * as expandHomeDir from 'expand-home-dir'; import * as fse from 'fs-extra'; -import { findRuntimes, getRuntime, getSources, IJavaRuntime, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; +import { getRuntime, getSources, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; import * as path from 'path'; import { env, ExtensionContext, Uri, window, workspace } from 'vscode'; import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const REQUIRED_JDK_VERSION = 17; /* eslint-disable @typescript-eslint/naming-convention */ @@ -70,7 +71,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise { return undefined; } -export function sortJdksBySource(jdks: IJavaRuntime[]) { - const rankedJdks = jdks as Array; - const sources = ["JDK_HOME", "JAVA_HOME", "PATH"]; - for (const [index, source] of sources.entries()) { - for (const jdk of rankedJdks) { - if (jdk.rank === undefined && getSources(jdk).includes(source)) { - jdk.rank = index; - } - } - } - rankedJdks.filter(jdk => jdk.rank === undefined).forEach(jdk => jdk.rank = sources.length); - rankedJdks.sort((a, b) => a.rank - b.rank); -} - -/** - * Sort by major version in descend order. - */ -export function sortJdksByVersion(jdks: IJavaRuntime[]) { - jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); -} - export function parseMajorVersion(version: string): number { if (!version) { return 0; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 97c44ba54..3a468160b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,7 +1,5 @@ 'use strict'; -import * as fse from 'fs-extra'; -import { findRuntimes } from "jdk-utils"; import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; @@ -24,7 +22,7 @@ import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressKind, ProgressNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; import * as refactorAction from './refactorAction'; -import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; +import { getJdkUrl, RequirementsData } from "./requirements"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { serverStatusBarProvider } from "./serverStatusBarProvider"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -41,6 +39,7 @@ import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -91,7 +90,7 @@ export class StandardLanguageClient { if (!port) { const lsPort = process.env['JDTLS_CLIENT_PORT']; if (!lsPort) { - serverOptions = prepareExecutable(requirements, workspacePath, getJavaConfig(requirements.java_home), context, false); + serverOptions = prepareExecutable(requirements, workspacePath, context, false); } else { serverOptions = () => { const socket = net.connect(lsPort); @@ -217,7 +216,7 @@ export class StandardLanguageClient { const options: string[] = []; const info = notification.data as GradleCompatibilityInfo; const highestJavaVersion = Number(info.highestJavaVersion); - let runtimes = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); + let runtimes = await listJdks(true); runtimes = runtimes.filter(runtime => { return runtime.version.major <= highestJavaVersion; }); diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 96b417dec..59d815e48 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -28,7 +28,7 @@ export class SyntaxLanguageClient { didChangeConfiguration: async () => { await this.languageClient.sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: getJavaConfig(requirements.java_home), + java: await getJavaConfig(requirements.java_home), } }); } diff --git a/src/utils.ts b/src/utils.ts index 897e5c07e..89bcd72dd 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -4,6 +4,8 @@ import * as fs from 'fs'; import * as path from 'path'; import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; +import { IJavaRuntime } from 'jdk-utils'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -176,7 +178,7 @@ function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], f } -export function getJavaConfig(javaHome: string) { +export async function getJavaConfig(javaHome: string) { const origConfig = getJavaConfiguration(); const javaConfig = JSON.parse(JSON.stringify(origConfig)); javaConfig.home = javaHome; @@ -215,5 +217,46 @@ export function getJavaConfig(javaHome: string) { } javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; + const userConfiguredJREs: any[] = javaConfig.configuration.runtimes; + javaConfig.configuration.runtimes = await addAutoDetectedJdks(userConfiguredJREs); return javaConfig; } + +async function addAutoDetectedJdks(configuredJREs: any[]): Promise { + // search valid JDKs from env.JAVA_HOME, env.PATH, SDKMAN, jEnv, jabba, Common directories + const autoDetectedJREs: IJavaRuntime[] = await listJdks(); + sortJdksByVersion(autoDetectedJREs); + sortJdksBySource(autoDetectedJREs); + const addedJreNames: Set = new Set(); + for (const jre of configuredJREs) { + if (jre.name) { + addedJreNames.add(jre.name); + } + } + for (const jre of autoDetectedJREs) { + const majorVersion: number = jre.version?.major ?? 0; + if (!majorVersion) { + continue; + } + + let jreName: string = `JavaSE-${majorVersion}`; + if (majorVersion <= 5) { + jreName = `J2SE-1.${majorVersion}`; + } else if (majorVersion <= 8) { + jreName = `JavaSE-1.${majorVersion}`; + } + + if (addedJreNames.has(jreName)) { + continue; + } + + configuredJREs.push({ + name: jreName, + path: jre.homedir, + }); + + addedJreNames.add(jreName); + } + + return configuredJREs; +} From 133f9f34b4c9508cd2467a92183dbb43f13c2621 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Tue, 29 Aug 2023 10:54:01 +0800 Subject: [PATCH 360/708] Ignore the unsupported java versions when auto detecting the installed jdks (#3258) --- src/extension.ts | 4 +++- src/jdkUtils.ts | 12 ++++++++++++ src/utils.ts | 5 +++-- 3 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index d7b0ab348..513ed4033 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -35,6 +35,7 @@ import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; +import { loadSupportedJreNames } from './jdkUtils'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -81,7 +82,8 @@ function getHeapDumpFolderFromSettings(): string { } -export function activate(context: ExtensionContext): Promise { +export async function activate(context: ExtensionContext): Promise { + await loadSupportedJreNames(context); context.subscriptions.push(markdownPreviewProvider); context.subscriptions.push(commands.registerCommand(Commands.TEMPLATE_VARIABLES, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.TEMPLATE_VARIABLES}.md`)), 'Predefined Variables', "", context); diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts index 309fbe0d7..d7f38be06 100644 --- a/src/jdkUtils.ts +++ b/src/jdkUtils.ts @@ -1,8 +1,20 @@ 'use strict'; import { IJavaRuntime, findRuntimes, getSources } from 'jdk-utils'; +import { ExtensionContext, Uri, workspace } from 'vscode'; let cachedJdks: IJavaRuntime[]; +let cachedJreNames: string[]; + +export async function loadSupportedJreNames(context: ExtensionContext): Promise { + const buffer = await workspace.fs.readFile(Uri.file(context.asAbsolutePath("package.json"))); + const packageJson = JSON.parse(buffer.toString()); + cachedJreNames = packageJson?.contributes?.configuration?.properties?.["java.configuration.runtimes"]?.items?.properties?.name?.enum; +} + +export function getSupportedJreNames(): string[] { + return cachedJreNames; +} export async function listJdks(force?: boolean): Promise { if (force || !cachedJdks) { diff --git a/src/utils.ts b/src/utils.ts index 89bcd72dd..8a79af405 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,7 +5,7 @@ import * as path from 'path'; import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; import { IJavaRuntime } from 'jdk-utils'; -import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; +import { getSupportedJreNames, listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -228,6 +228,7 @@ async function addAutoDetectedJdks(configuredJREs: any[]): Promise { sortJdksByVersion(autoDetectedJREs); sortJdksBySource(autoDetectedJREs); const addedJreNames: Set = new Set(); + const supportedJreNames: string[] = getSupportedJreNames(); for (const jre of configuredJREs) { if (jre.name) { addedJreNames.add(jre.name); @@ -246,7 +247,7 @@ async function addAutoDetectedJdks(configuredJREs: any[]): Promise { jreName = `JavaSE-1.${majorVersion}`; } - if (addedJreNames.has(jreName)) { + if (addedJreNames.has(jreName) || !supportedJreNames?.includes(jreName)) { continue; } From 8eaabf24d3baa2343c56c27e73e71a2cc5e69096 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 29 Aug 2023 17:44:59 -0400 Subject: [PATCH 361/708] Update vscode-redhat-telemetry to 0.7.0. Signed-off-by: Roland Grunberg --- package-lock.json | 50 +++++++++++++++++++++++------------------------ package.json | 4 ++-- 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/package-lock.json b/package-lock.json index 508257a0a..be5e10581 100644 --- a/package-lock.json +++ b/package-lock.json @@ -143,16 +143,16 @@ } }, "@lukeed/csprng": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", - "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" }, "@lukeed/uuid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.0.tgz", - "integrity": "sha512-dUz8OmYvlY5A9wXaroHIMSPASpSYRLCqbPvxGSyHguhtTQIy24lC+EGxQlwv71AhRCO55WOtgwhzQLpw27JaJQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", + "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", "requires": { - "@lukeed/csprng": "^1.0.0" + "@lukeed/csprng": "^1.1.0" } }, "@microsoft/fast-element": { @@ -227,9 +227,9 @@ "integrity": "sha512-jSal4qflxLWNKzG7ObwpLwn2gzznuZJ+qvwx8IV/msJrUWxh7A8fzYuCmusKT09bzpwQNKDwySAVeSUS2xUmNg==" }, "@redhat-developer/vscode-redhat-telemetry": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.6.1.tgz", - "integrity": "sha512-w9hDT7SRud9kZ3vBZXbiPT9gq7S19GHqWyLgLaMMgTNzzAt1HvJGAkMzezrC0i2012Kf1bJf1FL88BbBEhMLHg==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.7.0.tgz", + "integrity": "sha512-Nhlg2iuOVYAX7/GCty7wOJ8/E19XcGuRioRxoyg9+S+dhf9Sxnqu17kyHBrq3sbW3uNOPjHw7QMuKHvN0SXnFQ==", "requires": { "@segment/analytics-node": "0.0.1-beta.17", "axios": "^1.3.2", @@ -336,9 +336,9 @@ }, "dependencies": { "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -354,9 +354,9 @@ }, "dependencies": { "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" } } }, @@ -1378,9 +1378,9 @@ "dev": true }, "axios": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.3.4.tgz", - "integrity": "sha512-toYm+Bsyl6VC5wSkfkbbNB6ROv7KY93PEBBL6xyDczaIHasAiv4wPqQ/c4RjoQzipxRD2W5g21cOqQulZ7rHwQ==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", + "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", "requires": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -2048,9 +2048,9 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "countries-and-timezones": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.4.1.tgz", - "integrity": "sha512-INeHGCony4XUUR8iGL/lmt9s1Oi+n+gFHeJAMfbV5hJfYeDOB8JG1oxz5xFQu5oBZoRCJe/87k1Vzue9DoIauA==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.5.1.tgz", + "integrity": "sha512-DlsW+qxiJI6HJ83Yjjmuokgul3KKs0BmraPigFZ1sjWHPZcOTJ0LwB5iewZT9wsMAbmgGSVUdY4nZ4JnHD6NBQ==" }, "cross-spawn": { "version": "7.0.3", @@ -5581,9 +5581,9 @@ } }, "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", "requires": { "whatwg-url": "^5.0.0" } diff --git a/package.json b/package.json index 1a3e11e84..969e444bd 100644 --- a/package.json +++ b/package.json @@ -1535,11 +1535,11 @@ "webpack-cli": "^4.6.0" }, "dependencies": { + "@redhat-developer/vscode-extension-proposals": "0.0.21", + "@redhat-developer/vscode-redhat-telemetry": "^0.7.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", - "@redhat-developer/vscode-redhat-telemetry": "^0.6.1", - "@redhat-developer/vscode-extension-proposals": "0.0.21", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", From 37687d04b67f98e00cacc294493bdf9a37a5302f Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 30 Aug 2023 10:10:30 +0800 Subject: [PATCH 362/708] For internal debug, use the JDTLS_SERVER_PORT environment variable instead of SERVER_PORT (#3259) --- .vscode/launch.json | 2 +- CONTRIBUTING.md | 2 +- src/standardLanguageClient.ts | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index d37508005..95a86e13a 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -32,7 +32,7 @@ "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { - "SERVER_PORT": "3333", + "JDTLS_SERVER_PORT": "3333", "DEBUG_VSCODE_JAVA":"true", "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 09e2cf3ae..6598ba1a3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -166,7 +166,7 @@ While developing the language server and the extension, you don't need to deploy - In the debug console of VSCode you can see if the connection was successful. - When the server is running breakpoints can be reached and hot code replace can be used to make fixes without restarting the server. - You can modify `launch.json` to use a different port: - - Modify `SERVER_PORT` to specify the port the JDT LS server should connect to. + - Modify `JDTLS_SERVER_PORT` to specify the port the JDT LS server should connect to. ## C-2) The language server opens the connection first, and waits the extension to connect to it. - Start the language server via `jdt.ls.socket-stream` launch configuration in VS Code or Eclipse diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 3a468160b..c6e63f66c 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -86,7 +86,7 @@ export class StandardLanguageClient { }); let serverOptions; - const port = process.env['SERVER_PORT']; + const port = process.env['JDTLS_SERVER_PORT']; if (!port) { const lsPort = process.env['JDTLS_CLIENT_PORT']; if (!lsPort) { From 4eadce1a7d22b9caf3355453cf53528feeda8f17 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 29 Aug 2023 22:20:09 -0400 Subject: [PATCH 363/708] Update semver to latest version where possible. - Update to semver 7.5.4 - Update winston-daily-rotate-logfile to remove semver dependency Signed-off-by: Roland Grunberg --- package-lock.json | 127 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 73 insertions(+), 56 deletions(-) diff --git a/package-lock.json b/package-lock.json index be5e10581..085b0a7a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,6 +4,11 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + }, "@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", @@ -538,6 +543,11 @@ "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", "dev": true }, + "@types/triple-beam": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", + "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" + }, "@types/vscode": { "version": "1.77.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.77.0.tgz", @@ -2089,9 +2099,9 @@ }, "dependencies": { "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -2111,11 +2121,6 @@ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, - "cycle": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/cycle/-/cycle-1.0.3.tgz", - "integrity": "sha1-IegLK+hYD5i0aPN5QwZisEbDStI=" - }, "d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", @@ -3412,11 +3417,11 @@ } }, "file-stream-rotator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.4.1.tgz", - "integrity": "sha512-W3aa3QJEc8BS2MmdVpQiYLKHj3ijpto1gMDlsgCRSKfIUe6MwkcpODGPQ3vZfb0XvCeCqlu9CBQTN7oQri2TZQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", + "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", "requires": { - "moment": "^2.11.2" + "moment": "^2.29.1" } }, "file-type": { @@ -5699,9 +5704,9 @@ } }, "object-hash": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", - "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" }, "object-keys": { "version": "1.1.1", @@ -6545,6 +6550,11 @@ "ret": "~0.1.10" } }, + "safe-stable-stringify": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -7764,9 +7774,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } @@ -7992,52 +8002,59 @@ } } }, - "winston-compat": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/winston-compat/-/winston-compat-0.1.4.tgz", - "integrity": "sha512-mMEfFsSm6GmkFF+f4/0UJtG4N1vSaczGmXLVJYmS/+u2zUaIPcw2ZRuwUg2TvVBjswgiraN+vNnAG8z4fRUZ4w==", + "winston-daily-rotate-file": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", + "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", "requires": { - "cycle": "~1.0.3", - "logform": "^1.6.0", - "triple-beam": "^1.2.0" + "file-stream-rotator": "^0.6.1", + "object-hash": "^2.0.1", + "triple-beam": "^1.3.0", + "winston-transport": "^4.4.0" }, "dependencies": { + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "logform": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-1.10.0.tgz", - "integrity": "sha512-em5ojIhU18fIMOw/333mD+ZLE2fis0EzXl1ZwHx4iQzmpQi6odNiY/t+ITNr33JZhT9/KEaH+UPIipr6a9EjWg==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "requires": { - "colors": "^1.2.1", - "fast-safe-stringify": "^2.0.4", - "fecha": "^2.3.3", + "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", "ms": "^2.1.1", - "triple-beam": "^1.2.0" + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" } }, "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "winston-daily-rotate-file": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-3.10.0.tgz", - "integrity": "sha512-KO8CfbI2CvdR3PaFApEH02GPXiwJ+vbkF1mCkTlvRIoXFI8EFlf1ACcuaahXTEiDEKCii6cNe95gsL4ZkbnphA==", - "requires": { - "file-stream-rotator": "^0.4.1", - "object-hash": "^1.3.0", - "semver": "^6.2.0", - "triple-beam": "^1.3.0", - "winston-compat": "^0.1.4", - "winston-transport": "^4.2.0" - }, - "dependencies": { - "semver": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.2.0.tgz", - "integrity": "sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "requires": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + } } } }, diff --git a/package.json b/package.json index 969e444bd..13aafd6be 100644 --- a/package.json +++ b/package.json @@ -1552,7 +1552,7 @@ "vscode-languageclient": "8.1.0", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", - "winston-daily-rotate-file": "^3.10.0" + "winston-daily-rotate-file": "^4.7.1" }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" From d02cf8ecfee1f3f528770a51ada825d522356967 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Thu, 17 Aug 2023 10:50:29 -0400 Subject: [PATCH 364/708] Support movement of snippets to JDT-LS Signed-off-by: Hope Hadfield --- package.json | 6 --- snippets/java.json | 79 -------------------------------- snippets/server.json | 77 +++++++++++++++++++++++++++++++ src/snippetCompletionProvider.ts | 6 ++- 4 files changed, 82 insertions(+), 86 deletions(-) delete mode 100644 snippets/java.json diff --git a/package.json b/package.json index 13aafd6be..ec5137e7a 100644 --- a/package.json +++ b/package.json @@ -188,12 +188,6 @@ "path": "./language-support/properties/JavaProperties.tmLanguage.json" } ], - "snippets": [ - { - "language": "java", - "path": "./snippets/java.json" - } - ], "jsonValidation": [ { "fileMatch": "package.json", diff --git a/snippets/java.json b/snippets/java.json deleted file mode 100644 index 7a76f6d42..000000000 --- a/snippets/java.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "main": { - "prefix": ["main", "psvm"], - "body": [ - "public static void main(String[] args) {", - "\t$0", - "}" - ], - "description": "Public static main method" - }, - "Constructor": { - "prefix": "ctor", - "body": [ - "${1|public,protected,private|} ${2:${TM_FILENAME_BASE}}($3) {", - "\t${4:super();}$0", - "}" - ], - "description": "Constructor" - }, - "trycatch": { - "prefix": "try_catch", - "body": [ - "try {", - "\t${TM_SELECTED_TEXT:$1}", - "} catch (${2:Exception} ${3:e}) {", - "\t$0// TODO: handle exception", - "}" - ], - "description": "try/catch block" - }, - "tryresources": { - "prefix": "try_resources", - "body": [ - "try ($1) {", - "\t$2", - "} catch (${3:Exception} ${4:e}) {", - "\t$0// TODO: handle exception", - "}" - ] - }, - "method": { - "prefix": "method", - "body": [ - "${1|public,protected,private|}${2| , static |}${3:void} ${4:name}($5) {", - "\t$0", - "}" - ], - "description": "Method" - }, - "Switch Statement": { - "prefix": "switch", - "body": [ - "switch (${1:key}) {", - "\tcase ${2:value}:", - "\t\t$0", - "\t\tbreak;", - "", - "\tdefault:", - "\t\tbreak;", - "}" - ], - "description": "Switch Statement" - }, - "newObject": { - "prefix": "new", - "body": [ - "${1:Object} ${2:foo} = new ${1}($3);", - "$0" - ], - "description": "Create new Object" - }, - "Field": { - "prefix": "field", - "body": [ - "${1|public,protected,private|} ${2:String} ${3:name};" - ], - "description": "Field" - } -} \ No newline at end of file diff --git a/snippets/server.json b/snippets/server.json index c7d5493ec..59c4c7026 100644 --- a/snippets/server.json +++ b/snippets/server.json @@ -86,5 +86,82 @@ "} while (${1:condition});" ], "description": "Do-While Statement" + }, + "Switch Statement": { + "prefix": "switch", + "body": [ + "switch (${1:key}) {", + "\tcase ${2:value}:", + "\t\t$0", + "\t\tbreak;", + "", + "\tdefault:", + "\t\tbreak;", + "}" + ], + "description": "Switch Statement" + }, + "trycatch": { + "prefix": "try_catch", + "body": [ + "try {", + "\t${TM_SELECTED_TEXT:$1}", + "} catch (${2:Exception} ${3:e}) {", + "\t$0// TODO: handle exception", + "}" + ], + "description": "try/catch block" + }, + "tryresources": { + "prefix": "try_resources", + "body": [ + "try ($1) {", + "\t$2", + "} catch (${3:Exception} ${4:e}) {", + "\t$0// TODO: handle exception", + "}" + ] + }, + "main": { + "prefix": ["main", "psvm"], + "body": [ + "public static void main(String[] args) {", + "\t$0", + "}" + ], + "description": "Public static main method" + }, + "Constructor": { + "prefix": "ctor", + "body": [ + "${1|public,protected,private|} ${2:${TM_FILENAME_BASE}}($3) {", + "\t${4:super();}$0", + "}" + ], + "description": "Constructor" + }, + "method": { + "prefix": "method", + "body": [ + "${1|public,protected,private|}${2| , static |}${3:void} ${4:name}($5) {", + "\t$0", + "}" + ], + "description": "Method" + }, + "newObject": { + "prefix": "new", + "body": [ + "${1:Object} ${2:foo} = new ${1}($3);", + "$0" + ], + "description": "Create new Object" + }, + "Field": { + "prefix": "field", + "body": [ + "${1|public,protected,private|} ${2:String} ${3:name};" + ], + "description": "Field" } } \ No newline at end of file diff --git a/src/snippetCompletionProvider.ts b/src/snippetCompletionProvider.ts index fda426de3..53601fd19 100644 --- a/src/snippetCompletionProvider.ts +++ b/src/snippetCompletionProvider.ts @@ -56,7 +56,11 @@ class SnippetCompletionProviderImpl implements CompletionItemProvider { } export function beautifyDocument(raw: string): MarkdownString { - const escapedString = raw.replace(/\$\{\d:?(.*?)\}/gm, '$1').replace(/\$\d/gm, ''); + const escapedString = raw.replace(/\$\{\d\|(.*?),.*?\}/gm, '$1') + .replace(/\$\{\d:?(.*?)\}/gm, '$1') + .replace(/\$\d/gm, '') + .replace(/\${TM_SELECTED_TEXT:}/gm, '') + .replace(/\${TM_FILENAME_BASE}/gm, ''); return new MarkdownString().appendCodeblock(escapedString, "java"); } From 8dac1602dd14a0e34624f7b6c3929a1fb47a4403 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 6 Sep 2023 14:14:27 +0800 Subject: [PATCH 365/708] Record the trigger context of completion request (#3272) --- src/TracingLanguageClient.ts | 29 +++++++++++++++++++++++------ src/extension.api.ts | 6 +++++- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index d18e0430b..6bcece8a4 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -19,12 +19,12 @@ export class TracingLanguageClient extends LanguageClient { const startAt: number = performance.now(); return super.start().then(value => { if (isFirstTimeStart) { - this.fireTraceEvent("initialize", startAt, undefined); + this.fireSuccessTraceEvent("initialize", startAt, undefined); } return value; }, reason => { if (isFirstTimeStart) { - this.fireTraceEvent("initialize", startAt, undefined, reason); + this.fireFailureTraceEvent("initialize", startAt, reason); } throw reason; }); @@ -44,11 +44,18 @@ export class TracingLanguageClient extends LanguageClient { sendRequest(method: any, ...args) { const startAt: number = performance.now(); const requestType: string = this.getRequestType(method, ...args); + let data: any; + if (args?.[0]?.context?.triggerKind) { + data = { + triggerKind: args[0].context.triggerKind, + triggerCharacter: args[0].context.triggerCharacter, + }; + } return this.sendRequest0(method, ...args).then(value => { - this.fireTraceEvent(requestType, startAt, this.getResultLength(value)); + this.fireSuccessTraceEvent(requestType, startAt, this.getResultLength(value), data); return value; }, reason => { - this.fireTraceEvent(requestType, startAt, undefined, reason); + this.fireFailureTraceEvent(requestType, startAt, reason, data); throw reason; }); } @@ -88,13 +95,23 @@ export class TracingLanguageClient extends LanguageClient { return requestType; } - private fireTraceEvent(type: string, startAt: number, resultLength: number | undefined, reason?: any): void { + private fireSuccessTraceEvent(type: string, startAt: number, resultLength: number | undefined, data?: any): void { const duration: number = performance.now() - startAt; requestEventEmitter.fire({ type, duration, - error: reason, resultLength, + data, + }); + } + + private fireFailureTraceEvent(type: string, startAt: number, error: any, data?: any): void { + const duration: number = performance.now() - startAt; + requestEventEmitter.fire({ + type, + duration, + error, + data, }); } diff --git a/src/extension.api.ts b/src/extension.api.ts index a4fd5200f..2e1da6239 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -90,6 +90,10 @@ export interface TraceEvent { * The number of results returned by a response. */ resultLength?: number | undefined; + /** + * Additional data properties, such as the completion trigger context. + */ + data?: any; } export interface SourceInvalidatedEvent { @@ -103,7 +107,7 @@ export interface SourceInvalidatedEvent { affectedEditorDocuments?: Uri[]; } -export const extensionApiVersion = '0.10'; +export const extensionApiVersion = '0.11'; export interface ExtensionAPI { readonly apiVersion: string; From 4352492f24acd0da086d6bc6e7dcd13567b82a70 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 6 Sep 2023 14:36:37 +0800 Subject: [PATCH 366/708] Track the case of language server OutOfMemory (#3273) --- src/extension.ts | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 513ed4033..a1ae8694b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -64,8 +64,16 @@ async function showOOMMessage(): Promise { } } +function getMaxMemFromConfiguration(includeUnit?: boolean): string | undefined { + const jvmArgs: string = getJavaConfiguration().get('jdt.ls.vmargs'); + const results = includeUnit ? MAX_HEAP_SIZE_EXTRACTOR_WITH_UNIT.exec(jvmArgs) + : MAX_HEAP_SIZE_EXTRACTOR.exec(jvmArgs); + return results && results[0] ? results[1] : undefined; +} + const HEAP_DUMP_FOLDER_EXTRACTOR = new RegExp(`${HEAP_DUMP_LOCATION}(?:'([^']+)'|"([^"]+)"|([^\\s]+))`); const MAX_HEAP_SIZE_EXTRACTOR = new RegExp(`-Xmx([0-9]+)[kKmMgG]`); +const MAX_HEAP_SIZE_EXTRACTOR_WITH_UNIT = new RegExp(`-Xmx([0-9]+[kKmMgG])`); /** * Returns the heap dump folder defined in the user's preferences, or undefined if the user does not set the heap dump folder @@ -980,6 +988,12 @@ function registerOutOfMemoryDetection(storagePath: string) { if (heapDumpFolder === storagePath) { fse.remove(path); } + apiManager.fireTraceEvent({ + name: "java.process.outofmemory", + properties: { + maxMem: getMaxMemFromConfiguration(true), + } + }); showOOMMessage(); serverStatusBarProvider.setError(); activationProgressNotification.hide(); From aee592a0879595a177e6ed8794b7460c1b074203 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 7 Sep 2023 17:42:33 +0200 Subject: [PATCH 367/708] Remove command 'java.edit.smartSemicolonDetectionUndo' Signed-off-by: Snjezana Peco --- package.json | 10 ---------- package.nls.json | 3 +-- src/commands.ts | 5 ----- src/smartSemicolonDetection.ts | 18 ------------------ test/standard-mode-suite/extension.test.ts | 2 +- 5 files changed, 2 insertions(+), 36 deletions(-) diff --git a/package.json b/package.json index ec5137e7a..f0eeb6cf3 100644 --- a/package.json +++ b/package.json @@ -1301,11 +1301,6 @@ "command": "java.edit.smartSemicolonDetection.command", "title": "%java.edit.smartSemicolonDetection%", "category": "Java" - }, - { - "command": "java.edit.smartSemicolonDetectionUndo", - "title": "%java.edit.smartSemicolonDetectionUndo%", - "category": "Java" } ], "keybindings": [ @@ -1328,11 +1323,6 @@ "command": "java.edit.smartSemicolonDetection.command", "key": ";", "when": "editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" - }, - { - "command": "java.edit.smartSemicolonDetectionUndo", - "key": "backspace", - "when": "editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" } ], "menus": { diff --git a/package.nls.json b/package.nls.json index 38b94f77a..e01775313 100644 --- a/package.nls.json +++ b/package.nls.json @@ -25,6 +25,5 @@ "java.project.createModuleInfo.command": "Create module-info.java", "java.clean.sharedIndexes": "Clean Shared Indexes", "java.server.restart": "Restart Java Language Server", - "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", - "java.edit.smartSemicolonDetectionUndo": "Java Smart Semicolon Detection Undo" + "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection" } diff --git a/src/commands.ts b/src/commands.ts index 2f185f9f1..40a737972 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -341,9 +341,4 @@ export namespace Commands { export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; export const SMARTSEMICOLON_DETECTION_CMD = "java.edit.smartSemicolonDetection.command"; - /** - * Smart semicolon detection backspace. - */ - export const SMARTSEMICOLON_DETECTION_UNDO = "java.edit.smartSemicolonDetectionUndo"; - } diff --git a/src/smartSemicolonDetection.ts b/src/smartSemicolonDetection.ts index 060f9a309..4acbdd2ce 100644 --- a/src/smartSemicolonDetection.ts +++ b/src/smartSemicolonDetection.ts @@ -31,24 +31,6 @@ export function registerSmartSemicolonDetection(context: ExtensionContext) { newPosition = null; oldPosition = null; })); - context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_UNDO, async () => { - if (didSmartSemicolonInsertion() && enabled()) { - window.activeTextEditor!.edit(editBuilder => { - editBuilder.insert(oldPosition, ";"); - const delRange = new Range(newPosition, new Position(newPosition.line, newPosition.character + 1)); - editBuilder.delete(delRange); - window.activeTextEditor.selections = [new Selection(oldPosition, oldPosition)]; - oldPosition = null; - newPosition = null; - }); - return; - } - window.activeTextEditor!.edit(() => { - commands.executeCommand("deleteLeft"); - }); - oldPosition = null; - newPosition = null; - })); } interface SmartDetectionParams { diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 98506f547..2d210c47e 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -115,8 +115,8 @@ suite('Java Language Extension - Standard', () => { Commands.UPGRADE_GRADLE_WRAPPER_CMD, Commands.UPDATE_SOURCE_ATTACHMENT, Commands.UPDATE_SOURCE_ATTACHMENT_CMD, + Commands.SMARTSEMICOLON_DETECTION, Commands.SMARTSEMICOLON_DETECTION_CMD, - Commands.SMARTSEMICOLON_DETECTION_UNDO, Commands.RESOLVE_SOURCE_ATTACHMENT, ].sort(); const foundJavaCommands = commands.filter((value) => { From fedf3f7852beea1f2cf09e9262e5140c912e5ed3 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 8 Sep 2023 14:19:59 +0200 Subject: [PATCH 368/708] Fix JavaLSReady context Signed-off-by: Snjezana Peco --- src/standardLanguageClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index c6e63f66c..18852b15b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -154,11 +154,11 @@ export class StandardLanguageClient { snippetCompletionProvider.dispose(); registerDocumentValidationListener(context, this.languageClient); registerCodeCompletionTelemetryListener(); + commands.executeCommand('setContext', 'javaLSReady', true); break; case 'Started': this.status = ClientStatus.started; serverStatus.updateServerStatus(ServerStatusKind.ready); - commands.executeCommand('setContext', 'javaLSReady', true); apiManager.updateStatus(ClientStatus.started); break; case 'Error': From aab6a64e2ad76d2e87a8dc8b30b7aa93530658d9 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 6 Sep 2023 23:48:26 -0400 Subject: [PATCH 369/708] Changelog for 1.22.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 26 ++++++++++++++++++++++++++ README.md | 2 ++ 2 files changed, 28 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ccba549b0..39d3b956f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,31 @@ # Change Log +## 1.22.0 (September 12th, 2023) + * performance - Stale code actions should be cancellable and paste actions should have higher priority. See [#3199](https://github.com/redhat-developer/vscode-java/issues/3199). + * enhancement - Add support for smart semicolon insertion. See [#703](https://github.com/redhat-developer/vscode-java/issues/703). + * enhancement - Introduce new snippet templates with appropriate context. See [#2867](https://github.com/redhat-developer/vscode-java/issues/2867). + * enhancement - Improve JDK detection on the local machine, and ensure they are registered. See [#3251](https://github.com/redhat-developer/vscode-java/pull/3251). + * enhancement - Add folding range for multiple single-line comments. See [#860](https://github.com/redhat-developer/vscode-java/issues/860). + * enhancement - Use a more appropriate completion item image for annotation attributes and records. See [JLS#2796](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2796). + * enhancement - Select suitable JDK to launch Gradle. See [JLS#2812](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2812). + * enhancement - end-to-end performance tracking for code completion requests. See [#3165](https://github.com/redhat-developer/vscode-java/pull/3165). + * enhancement - Track the case of language server `OutOfMemory`. See [#3273](https://github.com/redhat-developer/vscode-java/pull/3273). + * enhancement - Record the trigger context of completion request. See [#3272](https://github.com/redhat-developer/vscode-java/pull/3272). + * bug fix - Call hierarchy should always report the end of its progress. See [JLS#2827](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2827). + * bug fix - Fix multiline semantic highlighting for `class`, `interface` & `record` declarations. See [#1444](https://github.com/redhat-developer/vscode-java/issues/1444), [JLS#2807](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2807). + * bug fix - The type declaration snippets should generate file headers. See [JLS#2813](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2813). + * bug fix - Fix folding ranges for nested switch statements. See [#2751](https://github.com/redhat-developer/vscode-java/issues/2751). + * bug fix - Fix "java.lang.VerifyError: Operand stack overflow". See [#3232](https://github.com/redhat-developer/vscode-java/issues/3232). + * bug fix - Commands needing language server should not be activated before the service is ready . See [#3281](https://github.com/redhat-developer/vscode-java/pull/3281). + * bug fix - Record methods are not recognized under certain conditions. See [#3233](https://github.com/redhat-developer/vscode-java/issues/3233). + * bug fix - Fix compiler arguments parsing failure in Gradle build support. See [JLS#2781](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2781). + * bug fix - Filter out excessive logging of classfile parsing from m2e in "debug mode". See [JLS#2785](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2785). + * bug fix - Don't escape unicode characters when pasting string literals. See [#3181](https://github.com/redhat-developer/vscode-java/issues/3181). + * bug fix - Enable by default syntactic null analysis for fields. See [#3255](https://github.com/redhat-developer/vscode-java/issues/3255). + * bug fix - Rename `SERVER_PORT` environment variable to `JDTLS_SERVER_PORT`. See [#3256](https://github.com/redhat-developer/vscode-java/issues/3256), [#2507](https://github.com/redhat-developer/vscode-java/issues/2507). + * dependencies - Update semver to latest version where possible. See [#3264](https://github.com/redhat-developer/vscode-java/pull/3264). + * dependencies - Update vscode-redhat-telemetry to 0.7.0. See [#3262](https://github.com/redhat-developer/vscode-java/pull/3262). + ## 1.21.0 (July 27th, 2023) * performance - Check completion proposal is compatible or not. See [JLS#2733](https://github.com/eclipse/eclipse.jdt.ls/pull/2733). * enhancement - Add code actions for Join/Split variable. See [JLS#2732](https://github.com/eclipse/eclipse.jdt.ls/pull/2732). diff --git a/README.md b/README.md index 16edfa6d0..7362d079b 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,8 @@ The following settings are supported: - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files + +New in 1.22.0 * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. Semantic Highlighting From 42cd9ec372fd5f69d4adbb4d7b53658a83686103 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 12 Sep 2023 14:39:06 -0400 Subject: [PATCH 370/708] Upversion to 1.23.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 7362d079b..16edfa6d0 100644 --- a/README.md +++ b/README.md @@ -237,8 +237,6 @@ The following settings are supported: - `ask`: Ask to reload the sources of the open class files - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files - -New in 1.22.0 * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 085b0a7a9..f5d82caf8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.22.0", + "version": "1.23.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index f0eeb6cf3..9eb8a57d9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.22.0", + "version": "1.23.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From d24fb2cfc2925e713c6d9ec7659a17ef8e94142a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 13 Sep 2023 12:05:12 -0400 Subject: [PATCH 371/708] Revert "Ignore the unsupported java versions when auto detecting the installed jdks (#3258)" This reverts commit 133f9f34b4c9508cd2467a92183dbb43f13c2621. --- src/extension.ts | 4 +--- src/jdkUtils.ts | 12 ------------ src/utils.ts | 5 ++--- 3 files changed, 3 insertions(+), 18 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index a1ae8694b..1e76c981b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -35,7 +35,6 @@ import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; -import { loadSupportedJreNames } from './jdkUtils'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -90,8 +89,7 @@ function getHeapDumpFolderFromSettings(): string { } -export async function activate(context: ExtensionContext): Promise { - await loadSupportedJreNames(context); +export function activate(context: ExtensionContext): Promise { context.subscriptions.push(markdownPreviewProvider); context.subscriptions.push(commands.registerCommand(Commands.TEMPLATE_VARIABLES, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.TEMPLATE_VARIABLES}.md`)), 'Predefined Variables', "", context); diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts index d7f38be06..309fbe0d7 100644 --- a/src/jdkUtils.ts +++ b/src/jdkUtils.ts @@ -1,20 +1,8 @@ 'use strict'; import { IJavaRuntime, findRuntimes, getSources } from 'jdk-utils'; -import { ExtensionContext, Uri, workspace } from 'vscode'; let cachedJdks: IJavaRuntime[]; -let cachedJreNames: string[]; - -export async function loadSupportedJreNames(context: ExtensionContext): Promise { - const buffer = await workspace.fs.readFile(Uri.file(context.asAbsolutePath("package.json"))); - const packageJson = JSON.parse(buffer.toString()); - cachedJreNames = packageJson?.contributes?.configuration?.properties?.["java.configuration.runtimes"]?.items?.properties?.name?.enum; -} - -export function getSupportedJreNames(): string[] { - return cachedJreNames; -} export async function listJdks(force?: boolean): Promise { if (force || !cachedJdks) { diff --git a/src/utils.ts b/src/utils.ts index 8a79af405..89bcd72dd 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -5,7 +5,7 @@ import * as path from 'path'; import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; import { IJavaRuntime } from 'jdk-utils'; -import { getSupportedJreNames, listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -228,7 +228,6 @@ async function addAutoDetectedJdks(configuredJREs: any[]): Promise { sortJdksByVersion(autoDetectedJREs); sortJdksBySource(autoDetectedJREs); const addedJreNames: Set = new Set(); - const supportedJreNames: string[] = getSupportedJreNames(); for (const jre of configuredJREs) { if (jre.name) { addedJreNames.add(jre.name); @@ -247,7 +246,7 @@ async function addAutoDetectedJdks(configuredJREs: any[]): Promise { jreName = `JavaSE-1.${majorVersion}`; } - if (addedJreNames.has(jreName) || !supportedJreNames?.includes(jreName)) { + if (addedJreNames.has(jreName)) { continue; } From f9c9e49b3214fa28ab97c6788da9742e6d4ef22a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 13 Sep 2023 12:24:56 -0400 Subject: [PATCH 372/708] Revert "Automatically register VMInstalls for the JDKs installed on the local machine (#3251)" This reverts commit 6cc071a5d795780907109ea36fa2b9f0e25bebf2. --- package-lock.json | 6 ++-- package.json | 2 +- src/extension.ts | 6 ++-- src/javaServerStarter.ts | 9 ++---- src/jdkUtils.ts | 57 ----------------------------------- src/requirements.ts | 26 ++++++++++++++-- src/standardLanguageClient.ts | 9 +++--- src/syntaxLanguageClient.ts | 2 +- src/utils.ts | 45 +-------------------------- 9 files changed, 40 insertions(+), 122 deletions(-) delete mode 100644 src/jdkUtils.ts diff --git a/package-lock.json b/package-lock.json index f5d82caf8..a94e0d549 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4620,9 +4620,9 @@ "dev": true }, "jdk-utils": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.0.tgz", - "integrity": "sha512-inZ7j5NSLVVlIKgg4NNt02v9CbtJk9I3ILalVpF+XMK9VjHb8VUx02Dozg6PXF+87tEIDoOs7ZQB6NuiR3lhUQ==" + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.4.tgz", + "integrity": "sha512-QSwVdPtwdHRvY6zDD0GOZo5Fu7AdgfNDyizZWhk16jnrcLTPbmsww4WLDC+5wyxCWm8izZZfmjTVcicdreuJLw==" }, "jest-worker": { "version": "27.5.1", diff --git a/package.json b/package.json index 9eb8a57d9..d4c237197 100644 --- a/package.json +++ b/package.json @@ -1529,7 +1529,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.5.0", + "jdk-utils": "^0.4.4", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", diff --git a/src/extension.ts b/src/extension.ts index 1e76c981b..58c7ec214 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -163,7 +163,7 @@ export function activate(context: ExtensionContext): Promise { initializationOptions: { bundles: collectJavaExtensions(extensions.all), workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, - settings: { java: await getJavaConfig(requirements.java_home) }, + settings: { java: getJavaConfig(requirements.java_home) }, extendedClientCapabilities: { classFileContentsSupport: true, overrideMethodsPromptSupport: true, @@ -192,7 +192,7 @@ export function activate(context: ExtensionContext): Promise { didChangeConfiguration: async () => { await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: await getJavaConfig(requirements.java_home), + java: getJavaConfig(requirements.java_home), } }); } @@ -275,7 +275,7 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 656fe8ae6..d6c35a283 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -34,7 +34,7 @@ export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; const DEPENDENCY_COLLECTOR_IMPL= '-Daether.dependencyCollector.impl='; const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; -export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { +export function prepareExecutable(requirements: RequirementsData, workspacePath, javaConfig, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); @@ -47,7 +47,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, } executable.options = options; executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); - executable.args = prepareParams(requirements, workspacePath, context, isSyntaxServer); + executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; } @@ -68,7 +68,7 @@ export function awaitServerConnection(port): Thenable { }); } -function prepareParams(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { +function prepareParams(requirements: RequirementsData, javaConfiguration, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { const params: string[] = []; if (DEBUG) { const port = isSyntaxServer ? 1045 : 1044; @@ -117,9 +117,6 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E } else { vmargs = ''; } - if (vmargs.indexOf('-DDetectVMInstallationsJob.disabled=') < 0) { - params.push('-DDetectVMInstallationsJob.disabled=true'); - } const encodingKey = '-Dfile.encoding='; if (vmargs.indexOf(encodingKey) < 0) { params.push(encodingKey + getJavaEncoding()); diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts deleted file mode 100644 index 309fbe0d7..000000000 --- a/src/jdkUtils.ts +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -import { IJavaRuntime, findRuntimes, getSources } from 'jdk-utils'; - -let cachedJdks: IJavaRuntime[]; - -export async function listJdks(force?: boolean): Promise { - if (force || !cachedJdks) { - cachedJdks = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); - } - - return [].concat(cachedJdks); -} - -/** - * Sort by source where JDk is located. - * The order is: - * 1. JDK_HOME, JAVA_HOME, PATH - * 2. JDK manager such as SDKMAN, jEnv, jabba, asdf - * 3. Common places such as /usr/lib/jvm - * 4. Others - */ -export function sortJdksBySource(jdks: IJavaRuntime[]) { - const rankedJdks = jdks as Array; - const env: string[] = ["JDK_HOME", "JAVA_HOME", "PATH"]; - const jdkManagers: string[] = ["SDKMAN", "jEnv", "jabba", "asdf"]; - for (const jdk of rankedJdks) { - const detectedSources: string[] = getSources(jdk); - for (const [index, source] of env.entries()) { - if (detectedSources.includes(source)) { - jdk.rank = index; // jdk from environment variables - break; - } - } - - if (jdk.rank) { - continue; - } - - const fromManager: boolean = detectedSources.some(source => jdkManagers.includes(source)); - if (fromManager) { - jdk.rank = env.length + 1; // jdk from the jdk managers such as SDKMAN - } else if (!detectedSources.length){ - jdk.rank = env.length + 2; // jdk from common places - } else { - jdk.rank = env.length + 3; // jdk from other source such as ~/.gradle/jdks - } - } - rankedJdks.sort((a, b) => a.rank - b.rank); -} - -/** - * Sort by major version in descend order. - */ -export function sortJdksByVersion(jdks: IJavaRuntime[]) { - jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); -} diff --git a/src/requirements.ts b/src/requirements.ts index b753f2200..1ca128b1e 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -2,13 +2,12 @@ import * as expandHomeDir from 'expand-home-dir'; import * as fse from 'fs-extra'; -import { getRuntime, getSources, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; +import { findRuntimes, getRuntime, getSources, IJavaRuntime, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; import * as path from 'path'; import { env, ExtensionContext, Uri, window, workspace } from 'vscode'; import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; -import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const REQUIRED_JDK_VERSION = 17; /* eslint-disable @typescript-eslint/naming-convention */ @@ -71,7 +70,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise { return undefined; } +export function sortJdksBySource(jdks: IJavaRuntime[]) { + const rankedJdks = jdks as Array; + const sources = ["JDK_HOME", "JAVA_HOME", "PATH"]; + for (const [index, source] of sources.entries()) { + for (const jdk of rankedJdks) { + if (jdk.rank === undefined && getSources(jdk).includes(source)) { + jdk.rank = index; + } + } + } + rankedJdks.filter(jdk => jdk.rank === undefined).forEach(jdk => jdk.rank = sources.length); + rankedJdks.sort((a, b) => a.rank - b.rank); +} + +/** + * Sort by major version in descend order. + */ +export function sortJdksByVersion(jdks: IJavaRuntime[]) { + jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); +} + export function parseMajorVersion(version: string): number { if (!version) { return 0; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 18852b15b..0529ffd13 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,5 +1,7 @@ 'use strict'; +import * as fse from 'fs-extra'; +import { findRuntimes } from "jdk-utils"; import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; @@ -22,7 +24,7 @@ import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressKind, ProgressNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; import * as refactorAction from './refactorAction'; -import { getJdkUrl, RequirementsData } from "./requirements"; +import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { serverStatusBarProvider } from "./serverStatusBarProvider"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -39,7 +41,6 @@ import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; -import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -90,7 +91,7 @@ export class StandardLanguageClient { if (!port) { const lsPort = process.env['JDTLS_CLIENT_PORT']; if (!lsPort) { - serverOptions = prepareExecutable(requirements, workspacePath, context, false); + serverOptions = prepareExecutable(requirements, workspacePath, getJavaConfig(requirements.java_home), context, false); } else { serverOptions = () => { const socket = net.connect(lsPort); @@ -216,7 +217,7 @@ export class StandardLanguageClient { const options: string[] = []; const info = notification.data as GradleCompatibilityInfo; const highestJavaVersion = Number(info.highestJavaVersion); - let runtimes = await listJdks(true); + let runtimes = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); runtimes = runtimes.filter(runtime => { return runtime.version.major <= highestJavaVersion; }); diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 59d815e48..96b417dec 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -28,7 +28,7 @@ export class SyntaxLanguageClient { didChangeConfiguration: async () => { await this.languageClient.sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: await getJavaConfig(requirements.java_home), + java: getJavaConfig(requirements.java_home), } }); } diff --git a/src/utils.ts b/src/utils.ts index 89bcd72dd..897e5c07e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -4,8 +4,6 @@ import * as fs from 'fs'; import * as path from 'path'; import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; -import { IJavaRuntime } from 'jdk-utils'; -import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -178,7 +176,7 @@ function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], f } -export async function getJavaConfig(javaHome: string) { +export function getJavaConfig(javaHome: string) { const origConfig = getJavaConfiguration(); const javaConfig = JSON.parse(JSON.stringify(origConfig)); javaConfig.home = javaHome; @@ -217,46 +215,5 @@ export async function getJavaConfig(javaHome: string) { } javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; - const userConfiguredJREs: any[] = javaConfig.configuration.runtimes; - javaConfig.configuration.runtimes = await addAutoDetectedJdks(userConfiguredJREs); return javaConfig; } - -async function addAutoDetectedJdks(configuredJREs: any[]): Promise { - // search valid JDKs from env.JAVA_HOME, env.PATH, SDKMAN, jEnv, jabba, Common directories - const autoDetectedJREs: IJavaRuntime[] = await listJdks(); - sortJdksByVersion(autoDetectedJREs); - sortJdksBySource(autoDetectedJREs); - const addedJreNames: Set = new Set(); - for (const jre of configuredJREs) { - if (jre.name) { - addedJreNames.add(jre.name); - } - } - for (const jre of autoDetectedJREs) { - const majorVersion: number = jre.version?.major ?? 0; - if (!majorVersion) { - continue; - } - - let jreName: string = `JavaSE-${majorVersion}`; - if (majorVersion <= 5) { - jreName = `J2SE-1.${majorVersion}`; - } else if (majorVersion <= 8) { - jreName = `JavaSE-1.${majorVersion}`; - } - - if (addedJreNames.has(jreName)) { - continue; - } - - configuredJREs.push({ - name: jreName, - path: jre.homedir, - }); - - addedJreNames.add(jreName); - } - - return configuredJREs; -} From 5347cc22113840bbb32a00d0bc31315f0662771a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 13 Sep 2023 14:53:33 -0400 Subject: [PATCH 373/708] Changelog for 1.22.1 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 4 ++++ package-lock.json | 2 +- package.json | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39d3b956f..1795cd5cd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 1.22.1 (September 14th, 2023) + * bug fix - Removed some improvements to JDK detection as they were causing issues on MacOS. See [#3287](https://github.com/redhat-developer/vscode-java/issues/3287). + * bug fix - Log errors from project importer. See [JLS#2843](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2843). + ## 1.22.0 (September 12th, 2023) * performance - Stale code actions should be cancellable and paste actions should have higher priority. See [#3199](https://github.com/redhat-developer/vscode-java/issues/3199). * enhancement - Add support for smart semicolon insertion. See [#703](https://github.com/redhat-developer/vscode-java/issues/703). diff --git a/package-lock.json b/package-lock.json index a94e0d549..6b5e9512b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.23.0", + "version": "1.22.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index d4c237197..842bcbe09 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.23.0", + "version": "1.22.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From dd6010253b5d59825666a26f814b20626c87579e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 14 Sep 2023 09:00:37 +0200 Subject: [PATCH 374/708] Disable ';' key binding when smart semicolon detection is disabled Signed-off-by: Fred Bricon --- CHANGELOG.md | 1 + package.json | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1795cd5cd..4cebae84a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## 1.22.1 (September 14th, 2023) * bug fix - Removed some improvements to JDK detection as they were causing issues on MacOS. See [#3287](https://github.com/redhat-developer/vscode-java/issues/3287). * bug fix - Log errors from project importer. See [JLS#2843](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2843). + * bug fix - Disable `;` key binding when smart semicolon detection is disabled. See [#3290](https://github.com/redhat-developer/vscode-java/issues/3290). ## 1.22.0 (September 12th, 2023) * performance - Stale code actions should be cancellable and paste actions should have higher priority. See [#3199](https://github.com/redhat-developer/vscode-java/issues/3199). diff --git a/package.json b/package.json index 842bcbe09..619a50e55 100644 --- a/package.json +++ b/package.json @@ -1322,7 +1322,7 @@ { "command": "java.edit.smartSemicolonDetection.command", "key": ";", - "when": "editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" + "when": "config.java.edit.smartSemicolonDetection.enabled && editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" } ], "menus": { From ad22816d87ec20e5f261a8cbb83510db597381ef Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 14 Sep 2023 16:58:34 +0800 Subject: [PATCH 375/708] Add a note about clean workspace in the changelog for the JDK issue (#3299) --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cebae84a..b660a23ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,7 @@ # Change Log ## 1.22.1 (September 14th, 2023) - * bug fix - Removed some improvements to JDK detection as they were causing issues on MacOS. See [#3287](https://github.com/redhat-developer/vscode-java/issues/3287). + * bug fix - Removed some improvements to JDK detection as they were causing issues on MacOS. See [#3287](https://github.com/redhat-developer/vscode-java/issues/3287). If you still see JDK class errors after upgrading to 1.22.1, please open **Command Palette** and run "**Java: Clean Java Language Server Workspace**". * bug fix - Log errors from project importer. See [JLS#2843](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2843). * bug fix - Disable `;` key binding when smart semicolon detection is disabled. See [#3290](https://github.com/redhat-developer/vscode-java/issues/3290). From a9b87bd1b50efaa336a90f331aed40433162f29a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 14 Sep 2023 09:22:28 -0400 Subject: [PATCH 376/708] Upversion to 1.23.0 (again) Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b5e9512b..a94e0d549 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.22.1", + "version": "1.23.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 619a50e55..62190787d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.22.1", + "version": "1.23.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 17edf2077e3ca019e6e9d67e28a7c5c5521933f9 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 18 Sep 2023 15:10:25 +0800 Subject: [PATCH 377/708] Automatically register VMInstalls for the JDKs installed on the local machine (#3301) * Automatically register VMInstalls for the JDKs installed on the local machine * Bump to jdk-utils@0.5.1 to fix wrong jdk detection issue on macOS * Validate if the detected jdk is a real java home * Add a setting 'java.configuration.detectJdksAtStart' to control whether to detect jdks on start --- README.md | 3 + package-lock.json | 6 +- package.json | 7 ++- src/extension.ts | 10 ++-- src/javaServerStarter.ts | 9 ++- src/jdkUtils.ts | 77 ++++++++++++++++++++++++++ src/requirements.ts | 26 +-------- src/standardLanguageClient.ts | 9 ++- src/syntaxLanguageClient.ts | 2 +- src/utils.ts | 49 +++++++++++++++- test/standard-mode-suite/utils.test.ts | 12 ++++ 11 files changed, 169 insertions(+), 41 deletions(-) create mode 100644 src/jdkUtils.ts diff --git a/README.md b/README.md index 16edfa6d0..9b0037bad 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,9 @@ The following settings are supported: - `manual`: Manually reload the sources of the open class files * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. +New in 1.23.0 +* `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index a94e0d549..7fc72be0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4620,9 +4620,9 @@ "dev": true }, "jdk-utils": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.4.4.tgz", - "integrity": "sha512-QSwVdPtwdHRvY6zDD0GOZo5Fu7AdgfNDyizZWhk16jnrcLTPbmsww4WLDC+5wyxCWm8izZZfmjTVcicdreuJLw==" + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.1.tgz", + "integrity": "sha512-BEQZ4JOmnWvZtuda+CRaCj8WbcgUs4RPZ07ZaM5bei+iFtx8fWrF0NpXDe3zM1k4SQajjYQ9zFc1/PhYT1Z6Og==" }, "jest-worker": { "version": "27.5.1", diff --git a/package.json b/package.json index 62190787d..9a3b6323e 100644 --- a/package.json +++ b/package.json @@ -833,6 +833,11 @@ "default": [], "scope": "machine-overridable" }, + "java.configuration.detectJdksAtStart": { + "type": "boolean", + "default": true, + "markdownDescription": "Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `#java.configuration.runtimes#`, the extension will use that version first." + }, "java.server.launchMode": { "type": "string", "enum": [ @@ -1529,7 +1534,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.4.4", + "jdk-utils": "^0.5.1", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", diff --git a/src/extension.ts b/src/extension.ts index 58c7ec214..a1ae8694b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -35,6 +35,7 @@ import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; +import { loadSupportedJreNames } from './jdkUtils'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -89,7 +90,8 @@ function getHeapDumpFolderFromSettings(): string { } -export function activate(context: ExtensionContext): Promise { +export async function activate(context: ExtensionContext): Promise { + await loadSupportedJreNames(context); context.subscriptions.push(markdownPreviewProvider); context.subscriptions.push(commands.registerCommand(Commands.TEMPLATE_VARIABLES, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.TEMPLATE_VARIABLES}.md`)), 'Predefined Variables', "", context); @@ -163,7 +165,7 @@ export function activate(context: ExtensionContext): Promise { initializationOptions: { bundles: collectJavaExtensions(extensions.all), workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, - settings: { java: getJavaConfig(requirements.java_home) }, + settings: { java: await getJavaConfig(requirements.java_home) }, extendedClientCapabilities: { classFileContentsSupport: true, overrideMethodsPromptSupport: true, @@ -192,7 +194,7 @@ export function activate(context: ExtensionContext): Promise { didChangeConfiguration: async () => { await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: getJavaConfig(requirements.java_home), + java: await getJavaConfig(requirements.java_home), } }); } @@ -275,7 +277,7 @@ export function activate(context: ExtensionContext): Promise { // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, getJavaConfig(requirements.java_home), context, true); + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index d6c35a283..656fe8ae6 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -34,7 +34,7 @@ export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; const DEPENDENCY_COLLECTOR_IMPL= '-Daether.dependencyCollector.impl='; const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; -export function prepareExecutable(requirements: RequirementsData, workspacePath, javaConfig, context: ExtensionContext, isSyntaxServer: boolean): Executable { +export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); @@ -47,7 +47,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, } executable.options = options; executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); - executable.args = prepareParams(requirements, javaConfig, workspacePath, context, isSyntaxServer); + executable.args = prepareParams(requirements, workspacePath, context, isSyntaxServer); logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; } @@ -68,7 +68,7 @@ export function awaitServerConnection(port): Thenable { }); } -function prepareParams(requirements: RequirementsData, javaConfiguration, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { +function prepareParams(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): string[] { const params: string[] = []; if (DEBUG) { const port = isSyntaxServer ? 1045 : 1044; @@ -117,6 +117,9 @@ function prepareParams(requirements: RequirementsData, javaConfiguration, worksp } else { vmargs = ''; } + if (vmargs.indexOf('-DDetectVMInstallationsJob.disabled=') < 0) { + params.push('-DDetectVMInstallationsJob.disabled=true'); + } const encodingKey = '-Dfile.encoding='; if (vmargs.indexOf(encodingKey) < 0) { params.push(encodingKey + getJavaEncoding()); diff --git a/src/jdkUtils.ts b/src/jdkUtils.ts new file mode 100644 index 000000000..19c580e30 --- /dev/null +++ b/src/jdkUtils.ts @@ -0,0 +1,77 @@ +'use strict'; + +import { existsSync } from 'fs'; +import { IJavaRuntime, findRuntimes, getSources } from 'jdk-utils'; +import { join } from 'path'; +import { ExtensionContext, Uri, workspace } from 'vscode'; + +let cachedJdks: IJavaRuntime[]; +let cachedJreNames: string[]; + +export async function loadSupportedJreNames(context: ExtensionContext): Promise { + const buffer = await workspace.fs.readFile(Uri.file(context.asAbsolutePath("package.json"))); + const packageJson = JSON.parse(buffer.toString()); + cachedJreNames = packageJson?.contributes?.configuration?.properties?.["java.configuration.runtimes"]?.items?.properties?.name?.enum; +} + +export function getSupportedJreNames(): string[] { + return cachedJreNames; +} + +export async function listJdks(force?: boolean): Promise { + if (force || !cachedJdks) { + cachedJdks = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }) + .then(jdks => jdks.filter(jdk => { + // Validate if it's a real Java Home. + return existsSync(join(jdk.homedir, "lib", "rt.jar")) + || existsSync(join(jdk.homedir, "jre", "lib", "rt.jar")) // Java 8 + || existsSync(join(jdk.homedir, "lib", "jrt-fs.jar")); // Java 9+ + })); + } + + return [].concat(cachedJdks); +} + +/** + * Sort by source where JDk is located. + * The order is: + * 1. JDK_HOME, JAVA_HOME, PATH + * 2. JDK manager such as SDKMAN, jEnv, jabba, asdf + * 3. Common places such as /usr/lib/jvm + * 4. Others + */ +export function sortJdksBySource(jdks: IJavaRuntime[]) { + const rankedJdks = jdks as Array; + const env: string[] = ["JDK_HOME", "JAVA_HOME", "PATH"]; + const jdkManagers: string[] = ["SDKMAN", "jEnv", "jabba", "asdf"]; + for (const jdk of rankedJdks) { + const detectedSources: string[] = getSources(jdk); + for (const [index, source] of env.entries()) { + if (detectedSources.includes(source)) { + jdk.rank = index; // jdk from environment variables + break; + } + } + + if (jdk.rank) { + continue; + } + + const fromManager: boolean = detectedSources.some(source => jdkManagers.includes(source)); + if (fromManager) { + jdk.rank = env.length + 1; // jdk from the jdk managers such as SDKMAN + } else if (!detectedSources.length){ + jdk.rank = env.length + 2; // jdk from common places + } else { + jdk.rank = env.length + 3; // jdk from other source such as ~/.gradle/jdks + } + } + rankedJdks.sort((a, b) => a.rank - b.rank); +} + +/** + * Sort by major version in descend order. + */ +export function sortJdksByVersion(jdks: IJavaRuntime[]) { + jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); +} diff --git a/src/requirements.ts b/src/requirements.ts index 1ca128b1e..b753f2200 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -2,12 +2,13 @@ import * as expandHomeDir from 'expand-home-dir'; import * as fse from 'fs-extra'; -import { findRuntimes, getRuntime, getSources, IJavaRuntime, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; +import { getRuntime, getSources, JAVAC_FILENAME, JAVA_FILENAME } from 'jdk-utils'; import * as path from 'path'; import { env, ExtensionContext, Uri, window, workspace } from 'vscode'; import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const REQUIRED_JDK_VERSION = 17; /* eslint-disable @typescript-eslint/naming-convention */ @@ -70,7 +71,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise { return undefined; } -export function sortJdksBySource(jdks: IJavaRuntime[]) { - const rankedJdks = jdks as Array; - const sources = ["JDK_HOME", "JAVA_HOME", "PATH"]; - for (const [index, source] of sources.entries()) { - for (const jdk of rankedJdks) { - if (jdk.rank === undefined && getSources(jdk).includes(source)) { - jdk.rank = index; - } - } - } - rankedJdks.filter(jdk => jdk.rank === undefined).forEach(jdk => jdk.rank = sources.length); - rankedJdks.sort((a, b) => a.rank - b.rank); -} - -/** - * Sort by major version in descend order. - */ -export function sortJdksByVersion(jdks: IJavaRuntime[]) { - jdks.sort((a, b) => (b.version?.major ?? 0) - (a.version?.major ?? 0)); -} - export function parseMajorVersion(version: string): number { if (!version) { return 0; diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 0529ffd13..18852b15b 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -1,7 +1,5 @@ 'use strict'; -import * as fse from 'fs-extra'; -import { findRuntimes } from "jdk-utils"; import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; @@ -24,7 +22,7 @@ import { collectBuildFilePattern, onExtensionChange } from "./plugin"; import { pomCodeActionMetadata, PomCodeActionProvider } from "./pom/pomCodeActionProvider"; import { ActionableNotification, BuildProjectParams, BuildProjectRequest, CompileWorkspaceRequest, CompileWorkspaceStatus, EventNotification, EventType, ExecuteClientCommandRequest, FeatureStatus, FindLinks, GradleCompatibilityInfo, LinkLocation, ProgressKind, ProgressNotification, ServerNotification, SourceAttachmentAttribute, SourceAttachmentRequest, SourceAttachmentResult, SourceInvalidatedEvent, StatusNotification, UpgradeGradleWrapperInfo } from "./protocol"; import * as refactorAction from './refactorAction'; -import { getJdkUrl, RequirementsData, sortJdksBySource, sortJdksByVersion } from "./requirements"; +import { getJdkUrl, RequirementsData } from "./requirements"; import { serverStatus, ServerStatusKind } from "./serverStatus"; import { serverStatusBarProvider } from "./serverStatusBarProvider"; import { activationProgressNotification, serverTaskPresenter } from "./serverTaskPresenter"; @@ -41,6 +39,7 @@ import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; +import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -91,7 +90,7 @@ export class StandardLanguageClient { if (!port) { const lsPort = process.env['JDTLS_CLIENT_PORT']; if (!lsPort) { - serverOptions = prepareExecutable(requirements, workspacePath, getJavaConfig(requirements.java_home), context, false); + serverOptions = prepareExecutable(requirements, workspacePath, context, false); } else { serverOptions = () => { const socket = net.connect(lsPort); @@ -217,7 +216,7 @@ export class StandardLanguageClient { const options: string[] = []; const info = notification.data as GradleCompatibilityInfo; const highestJavaVersion = Number(info.highestJavaVersion); - let runtimes = await findRuntimes({ checkJavac: true, withVersion: true, withTags: true }); + let runtimes = await listJdks(true); runtimes = runtimes.filter(runtime => { return runtime.version.major <= highestJavaVersion; }); diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 96b417dec..59d815e48 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -28,7 +28,7 @@ export class SyntaxLanguageClient { didChangeConfiguration: async () => { await this.languageClient.sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: getJavaConfig(requirements.java_home), + java: await getJavaConfig(requirements.java_home), } }); } diff --git a/src/utils.ts b/src/utils.ts index 897e5c07e..61477829d 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -4,6 +4,8 @@ import * as fs from 'fs'; import * as path from 'path'; import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; import { Commands } from './commands'; +import { IJavaRuntime } from 'jdk-utils'; +import { getSupportedJreNames, listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -175,8 +177,9 @@ function getDirectoriesByBuildFile(inclusions: string[], exclusions: string[], f }); } +const detectJdksAtStart: boolean = getJavaConfiguration().get('configuration.detectJdksAtStart'); -export function getJavaConfig(javaHome: string) { +export async function getJavaConfig(javaHome: string) { const origConfig = getJavaConfiguration(); const javaConfig = JSON.parse(JSON.stringify(origConfig)); javaConfig.home = javaHome; @@ -215,5 +218,49 @@ export function getJavaConfig(javaHome: string) { } javaConfig.telemetry = { enabled: workspace.getConfiguration('redhat.telemetry').get('enabled', false) }; + if (detectJdksAtStart) { + const userConfiguredJREs: any[] = javaConfig.configuration.runtimes; + javaConfig.configuration.runtimes = await addAutoDetectedJdks(userConfiguredJREs); + } return javaConfig; } + +async function addAutoDetectedJdks(configuredJREs: any[]): Promise { + // search valid JDKs from env.JAVA_HOME, env.PATH, SDKMAN, jEnv, jabba, Common directories + const autoDetectedJREs: IJavaRuntime[] = await listJdks(); + sortJdksByVersion(autoDetectedJREs); + sortJdksBySource(autoDetectedJREs); + const addedJreNames: Set = new Set(); + const supportedJreNames: string[] = getSupportedJreNames(); + for (const jre of configuredJREs) { + if (jre.name) { + addedJreNames.add(jre.name); + } + } + for (const jre of autoDetectedJREs) { + const majorVersion: number = jre.version?.major ?? 0; + if (!majorVersion) { + continue; + } + + let jreName: string = `JavaSE-${majorVersion}`; + if (majorVersion <= 5) { + jreName = `J2SE-1.${majorVersion}`; + } else if (majorVersion <= 8) { + jreName = `JavaSE-1.${majorVersion}`; + } + + if (addedJreNames.has(jreName) || !supportedJreNames?.includes(jreName)) { + continue; + } + + configuredJREs.push({ + name: jreName, + path: jre.homedir, + }); + + addedJreNames.add(jreName); + } + + return configuredJREs; +} diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index ee3d5b560..7659ba2c3 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -3,6 +3,8 @@ import * as assert from 'assert'; import { getJavaConfiguration, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, getExclusionBlob, convertToGlob } from '../../src/utils'; import { WorkspaceConfiguration } from 'vscode'; +import { listJdks } from '../../src/jdkUtils'; +import { platform } from 'os'; let exclusion: string[]; let isMavenImporterEnabled: boolean; @@ -117,6 +119,16 @@ suite('Utils Test', () => { assert.equal(result, "{**/node_modules/test/**/**/pom.xml}"); }); + test('listJdks() - no /usr as Java home on macOS', async function () { + // Skip this test if it's not macOS. + if (platform() !== "darwin") { + this.skip(); + } + + const jdks = await listJdks(); + assert.ok(jdks.every(jdk => jdk.homedir !== "/usr")); + }); + teardown(async function() { await recover(); }); From 65cd8812a07a7fab26a924aa4bc20c4f5d894996 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 18 Sep 2023 16:05:46 +0800 Subject: [PATCH 378/708] Track the completion kinds of completion request (#3307) --- src/TracingLanguageClient.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index 6bcece8a4..9a27d3c21 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -44,14 +44,18 @@ export class TracingLanguageClient extends LanguageClient { sendRequest(method: any, ...args) { const startAt: number = performance.now(); const requestType: string = this.getRequestType(method, ...args); - let data: any; - if (args?.[0]?.context?.triggerKind) { + let data: any = undefined; + if (args?.[0]?.context?.triggerKind !== undefined) { data = { triggerKind: args[0].context.triggerKind, triggerCharacter: args[0].context.triggerCharacter, }; } - return this.sendRequest0(method, ...args).then(value => { + return this.sendRequest0(method, ...args).then((value: any) => { + if (data && value?.itemDefaults?.data?.completionKinds) { + // Include the completionKinds from the completion response. + data.completionKinds = value.itemDefaults.data.completionKinds; + } this.fireSuccessTraceEvent(requestType, startAt, this.getResultLength(value), data); return value; }, reason => { From 19f86341135687794e4e21ecde8e1c3592e420d7 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Mon, 18 Sep 2023 22:19:22 +0200 Subject: [PATCH 379/708] Open Java Server Log always opens standard server log (#3310) Signed-off-by: Snjezana Peco --- src/extension.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index a1ae8694b..bc36150d5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -328,9 +328,9 @@ export async function activate(context: ExtensionContext): Promise } // Register commands here to make it available even when the language client fails - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(workspacePath, column))); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(workspacePath, '.out-jdt.ls', column))); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(workspacePath, '.error-jdt.ls', column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(storagePath, column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.out-jdt.ls', column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.error-jdt.ls', column))); context.subscriptions.push(commands.registerCommand(Commands.OPEN_CLIENT_LOG, (column: ViewColumn) => openClientLogFile(clientLogFile, column))); @@ -667,13 +667,19 @@ async function cleanSharedIndexes(context: ExtensionContext) { } } -function openServerLogFile(workspacePath, column: ViewColumn = ViewColumn.Active): Thenable { +function openServerLogFile(storagePath, column: ViewColumn = ViewColumn.Active): Thenable { + const workspacePath = getWorkspacePath(storagePath); const serverLogFile = path.join(workspacePath, '.metadata', '.log'); return openLogFile(serverLogFile, 'Could not open Java Language Server log file', column); } -function openRollingServerLogFile(workspacePath, filename, column: ViewColumn = ViewColumn.Active): Thenable { +function getWorkspacePath(storagePath: any) { + return path.join(storagePath, apiManager.getApiInstance().serverMode === ServerMode.lightWeight ? 'ss_ws' : 'jdt_ws'); +} + +function openRollingServerLogFile(storagePath, filename, column: ViewColumn = ViewColumn.Active): Thenable { return new Promise((resolve) => { + const workspacePath = getWorkspacePath(storagePath); const dirname = path.join(workspacePath, '.metadata'); // find out the newest one From 812613b5923ba27508f0a15a605f4cf80faa2388 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 21 Sep 2023 15:45:27 +0800 Subject: [PATCH 380/708] Add API onWillRequestStart to track request send event (#3316) Signed-off-by: Jinbo Wang --- src/TracingLanguageClient.ts | 20 ++++++++++++++++---- src/apiManager.ts | 3 ++- src/extension.api.ts | 11 +++++++++-- 3 files changed, 27 insertions(+), 7 deletions(-) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index 9a27d3c21..314cd64b8 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -3,8 +3,10 @@ import { Event, EventEmitter } from "vscode"; import { CancellationToken, LanguageClient, LanguageClientOptions, ProtocolRequestType, ProtocolRequestType0, RequestType, RequestType0, ServerOptions } from "vscode-languageclient/node"; import { TraceEvent } from "./extension.api"; -const requestEventEmitter = new EventEmitter(); -export const onDidRequestEnd: Event = requestEventEmitter.event; +const requestStartEventEmitter = new EventEmitter(); +const requestEndEventEmitter = new EventEmitter(); +export const onWillRequestStart: Event = requestStartEventEmitter.event; +export const onDidRequestEnd: Event = requestEndEventEmitter.event; export class TracingLanguageClient extends LanguageClient { private isStarted: boolean = false; @@ -17,6 +19,9 @@ export class TracingLanguageClient extends LanguageClient { const isFirstTimeStart: boolean = !this.isStarted; this.isStarted = true; const startAt: number = performance.now(); + if (isFirstTimeStart) { + this.fireRequestStartTraceEvent("initialize"); + } return super.start().then(value => { if (isFirstTimeStart) { this.fireSuccessTraceEvent("initialize", startAt, undefined); @@ -51,6 +56,7 @@ export class TracingLanguageClient extends LanguageClient { triggerCharacter: args[0].context.triggerCharacter, }; } + this.fireRequestStartTraceEvent(requestType); return this.sendRequest0(method, ...args).then((value: any) => { if (data && value?.itemDefaults?.data?.completionKinds) { // Include the completionKinds from the completion response. @@ -99,9 +105,15 @@ export class TracingLanguageClient extends LanguageClient { return requestType; } + private fireRequestStartTraceEvent(type: string): void { + requestStartEventEmitter.fire({ + type, + }); + } + private fireSuccessTraceEvent(type: string, startAt: number, resultLength: number | undefined, data?: any): void { const duration: number = performance.now() - startAt; - requestEventEmitter.fire({ + requestEndEventEmitter.fire({ type, duration, resultLength, @@ -111,7 +123,7 @@ export class TracingLanguageClient extends LanguageClient { private fireFailureTraceEvent(type: string, startAt: number, error: any, data?: any): void { const duration: number = performance.now() - startAt; - requestEventEmitter.fire({ + requestEndEventEmitter.fire({ type, duration, error, diff --git a/src/apiManager.ts b/src/apiManager.ts index 52759c963..03eebfda3 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -9,7 +9,7 @@ import { Commands } from "./commands"; import { Emitter } from "vscode-languageclient"; import { ServerMode } from "./settings"; import { registerHoverCommand } from "./hoverAction"; -import { onDidRequestEnd } from "./TracingLanguageClient"; +import { onDidRequestEnd, onWillRequestStart } from "./TracingLanguageClient"; class ApiManager { @@ -64,6 +64,7 @@ class ApiManager { onDidServerModeChange, onDidProjectsImport, serverReady, + onWillRequestStart, onDidRequestEnd, trackEvent: traceEvent, onDidSourceInvalidate: this.sourceInvalidatedEventEmitter.event, diff --git a/src/extension.api.ts b/src/extension.api.ts index 2e1da6239..dc27a68b6 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -81,7 +81,7 @@ export interface TraceEvent { /** * Time (in milliseconds) taken to process a request. */ - duration: number; + duration?: number; /** * Error that occurs while processing a request. */ @@ -107,7 +107,7 @@ export interface SourceInvalidatedEvent { affectedEditorDocuments?: Uri[]; } -export const extensionApiVersion = '0.11'; +export const extensionApiVersion = '0.12'; export interface ExtensionAPI { readonly apiVersion: string; @@ -153,6 +153,13 @@ export interface ExtensionAPI { */ readonly serverReady: () => Promise; + /** + * An event that's fired when a request is about to send to language server. + * @since API version 0.12 + * @since extension version 1.23.0 + */ + readonly onWillRequestStart: Event; + /** * An event that's fired when a request has been responded. * @since API version 0.8 From ae058c7f9575818bc428ac1b2e52cac1b27e3225 Mon Sep 17 00:00:00 2001 From: fortinma Date: Tue, 26 Sep 2023 20:17:13 -0400 Subject: [PATCH 381/708] Update to lombok 1.18.30 --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index 7c41e47ff..2c6166654 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,7 +127,7 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.28'; + const lombokVersion = '1.18.30'; // The latest lombok version can be found on the website https://projectlombok.org/downloads const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; download(lombokUrl) From 468f15b083e62d71f26d0f84bc42f73a890e0c95 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 27 Sep 2023 19:59:27 -0400 Subject: [PATCH 382/708] Changelog for 1.23.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index b660a23ae..ba40476a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Change Log +## 1.23.0 (September 28th, 2023) + * enhancement - Improve JDK detection on the local machine, and ensure they are registered. See [#3301](https://github.com/redhat-developer/vscode-java/pull/3301). + * enhancement - Update current method snippet and add `static_method` snippet for interface. See [#1697](https://github.com/redhat-developer/vscode-java/issues/1697). + * enhancement - Improve the constructor snippet for additional classes in a file. See [#725](https://github.com/redhat-developer/vscode-java/issues/725). + * enhancement - Store the completion kinds requested by completion operation. See [JLS#2857](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2857). + * enhancement - Update to Lombok 1.18.30. See [#3321](https://github.com/redhat-developer/vscode-java/pull/3321). + * enhancement - Add API `onWillRequestStart` to track request send event. See [#3316](https://github.com/redhat-developer/vscode-java/pull/3316). + * enhancement - Report whether the project has Kotlin Gradle files. See [JLS#2859](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2859). + * enhancement - Track the completion kinds of completion request. See [#3307](https://github.com/redhat-developer/vscode-java/pull/3307). + * bug fix - Fix `EmptyStackException` in `textDocument/foldingRange`. See [JLS#2865](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2865). + * bug fix - Fix renaming of attribute with `@Singular` annotation. See [#3203](https://github.com/redhat-developer/vscode-java/issues/3203). + * bug fix - `Open Java Language Server Log File` should open the correct server (standard/syntax) log. See [#3309](https://github.com/redhat-developer/vscode-java/issues/3309). + * bug fix - Fix `URI` with query parameter. See [#3305](https://github.com/redhat-developer/vscode-java/issues/3305). + * bug fix - Fix an error thrown during "Initialize workspace". See [JLS#2842](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2842). + ## 1.22.1 (September 14th, 2023) * bug fix - Removed some improvements to JDK detection as they were causing issues on MacOS. See [#3287](https://github.com/redhat-developer/vscode-java/issues/3287). If you still see JDK class errors after upgrading to 1.22.1, please open **Command Palette** and run "**Java: Clean Java Language Server Workspace**". * bug fix - Log errors from project importer. See [JLS#2843](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2843). From 54714ff050bf43be794f15995e5b4a262b35da47 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 28 Sep 2023 10:46:19 -0400 Subject: [PATCH 383/708] Upversion to 1.24.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 2 +- package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 9b0037bad..3f2189a8f 100644 --- a/README.md +++ b/README.md @@ -238,8 +238,6 @@ The following settings are supported: - `auto`: Automatically reload the sources of the open class files - `manual`: Manually reload the sources of the open class files * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. - -New in 1.23.0 * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 7fc72be0a..56c334ce0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.23.0", + "version": "1.24.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 9a3b6323e..75e38ee46 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.23.0", + "version": "1.24.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 2e38c4ecef1c371527eb967482ccc3eff4bcdf43 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 15 Sep 2023 21:28:27 +0200 Subject: [PATCH 384/708] Re-implement smart semicolon detection through text document change API Signed-off-by: Snjezana Peco --- package.json | 10 ---- src/commands.ts | 1 - src/extension.ts | 4 +- src/settings.ts | 19 ++++-- src/smartSemicolonDetection.ts | 67 +++++++++------------- src/standardLanguageClient.ts | 6 -- test/standard-mode-suite/extension.test.ts | 1 - 7 files changed, 44 insertions(+), 64 deletions(-) diff --git a/package.json b/package.json index 75e38ee46..ed568c165 100644 --- a/package.json +++ b/package.json @@ -1301,11 +1301,6 @@ "command": "java.server.restart", "title": "%java.server.restart%", "category": "Java" - }, - { - "command": "java.edit.smartSemicolonDetection.command", - "title": "%java.edit.smartSemicolonDetection%", - "category": "Java" } ], "keybindings": [ @@ -1323,11 +1318,6 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "javaLSReady && editorLangId == java" - }, - { - "command": "java.edit.smartSemicolonDetection.command", - "key": ";", - "when": "config.java.edit.smartSemicolonDetection.enabled && editorTextFocus && !editorReadonly && javaLSReady && editorLangId == java" } ], "menus": { diff --git a/src/commands.ts b/src/commands.ts index 40a737972..c19b75192 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -339,6 +339,5 @@ export namespace Commands { * Smart semicolon detection. */ export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; - export const SMARTSEMICOLON_DETECTION_CMD = "java.edit.smartSemicolonDetection.command"; } diff --git a/src/extension.ts b/src/extension.ts index bc36150d5..db33f7719 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -24,7 +24,7 @@ import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; -import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextBlockClosing, onConfigurationChange, ServerMode } from './settings'; +import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, onConfigurationChange, ServerMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; @@ -452,7 +452,7 @@ export async function activate(context: ExtensionContext): Promise } })); } - context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextBlockClosing(event.document, event.contentChanges))); + context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextDocumentChanges(event.document, event.contentChanges))); }); }); } diff --git a/src/settings.ts b/src/settings.ts index 6e7b53a58..89c9cb536 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -7,7 +7,7 @@ import { Commands } from './commands'; import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; import { apiManager } from './apiManager'; -import { setSmartSemiColonDetectionState } from './smartSemicolonDetection'; +import { isActive, setActive, smartSemicolonDetection } from './smartSemicolonDetection'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -319,22 +319,33 @@ function unregisterGradleWrapperPromptDialog(sha256: string) { } } -export function handleTextBlockClosing(document: TextDocument, changes: readonly import("vscode").TextDocumentContentChangeEvent[]): any { +let serverReady = false; + +export function handleTextDocumentChanges(document: TextDocument, changes: readonly import("vscode").TextDocumentContentChangeEvent[]): any { + if (!serverReady) { + apiManager.getApiInstance().serverReady().then(() => { + serverReady = true; + }); + } const activeTextEditor = window.activeTextEditor; const activeDocument = activeTextEditor && activeTextEditor.document; if (document !== activeDocument || changes.length === 0 || document.languageId !== 'java') { + setActive(false); return; } const lastChange = changes[changes.length - 1]; if (lastChange.text === null || lastChange.text.length <= 0) { + setActive(false); return; } if (lastChange.text !== '"""";') { - if (lastChange.text !== ';') { - setSmartSemiColonDetectionState(null, null); + if (lastChange.text === ';' && serverReady && !isActive()) { + smartSemicolonDetection(); } + setActive(false); return; } + setActive(false); const selection = activeTextEditor.selection.active; if (selection !== null) { const start = new Position(selection.line, selection.character - 2); diff --git a/src/smartSemicolonDetection.ts b/src/smartSemicolonDetection.ts index 4acbdd2ce..675f9b90a 100644 --- a/src/smartSemicolonDetection.ts +++ b/src/smartSemicolonDetection.ts @@ -1,36 +1,30 @@ 'use strict'; -import { commands, ExtensionContext, Position, Range, Selection, window } from 'vscode'; +import { commands, Position, Range, Selection, window } from 'vscode'; import { Commands } from './commands'; import { getJavaConfiguration } from './utils'; +let active = false; -let oldPosition: Position = null; -let newPosition: Position = null; - -export function registerSmartSemicolonDetection(context: ExtensionContext) { - context.subscriptions.push(commands.registerCommand(Commands.SMARTSEMICOLON_DETECTION_CMD, async () => { - if (!didSmartSemicolonInsertion() && enabled()) { - const params: SmartDetectionParams = { - uri: window.activeTextEditor.document.uri.toString(), - position: window.activeTextEditor!.selection.active, - }; - const response: SmartDetectionParams = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.SMARTSEMICOLON_DETECTION, JSON.stringify(params)); - if (response !== null) { - window.activeTextEditor!.edit(editBuilder => { - oldPosition = window.activeTextEditor!.selection.active; - editBuilder.insert(response.position, ";"); - window.activeTextEditor.selections = [new Selection(response.position, response.position)]; - newPosition = window.activeTextEditor!.selection.active; - }); - return; - } +export async function smartSemicolonDetection() { + if (enabled()) { + const params: SmartDetectionParams = { + uri: window.activeTextEditor.document.uri.toString(), + position: window.activeTextEditor!.selection.active, + }; + setActive(true); + const response: SmartDetectionParams = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.SMARTSEMICOLON_DETECTION, JSON.stringify(params)); + if (response !== null) { + window.activeTextEditor!.edit(editBuilder => { + const oldPosition = window.activeTextEditor!.selection.active; + editBuilder.delete(new Range(new Position(oldPosition.line, oldPosition.character - 1), oldPosition)); + const newPos = new Position(response.position.line, response.position.character + 1); + editBuilder.insert(newPos, ";"); + window.activeTextEditor.selections = [new Selection(newPos, newPos)]; + // newPosition = window.activeTextEditor!.selection.active; + }); + return; } - window.activeTextEditor!.edit(editBuilder => { - editBuilder.insert(window.activeTextEditor!.selection.active, ";"); - }); - newPosition = null; - oldPosition = null; - })); + } } interface SmartDetectionParams { @@ -38,21 +32,14 @@ interface SmartDetectionParams { position: Position; } -function didSmartSemicolonInsertion() { - const smartSemicolonInsertion = window.activeTextEditor.selections.length === 1 && enabled() && oldPosition !== null && newPosition !== null; - if (smartSemicolonInsertion) { - const active = window.activeTextEditor!.selection.active; - const prev = new Position(active.line, active.character === 0 ? 0 : active.character - 1); - return newPosition.isEqual(prev); - } - return smartSemicolonInsertion; -} - function enabled() { return getJavaConfiguration().get("edit.smartSemicolonDetection.enabled"); } -export function setSmartSemiColonDetectionState(oldPos: Position, newPos: Position) { - oldPosition = oldPos; - newPos = newPos; +export function isActive() { + return active; +} + +export function setActive(pActive: boolean) { + active = pActive; } \ No newline at end of file diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 18852b15b..8cb621697 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -38,7 +38,6 @@ import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; -import { registerSmartSemicolonDetection } from './smartSemicolonDetection'; import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; const extensionName = 'Language Support for Java'; @@ -137,11 +136,6 @@ export class StandardLanguageClient { // clients may not have properly configured documentPaste logger.error(error); } - try { - registerSmartSemicolonDetection(context); - } catch (error) { - logger.error(error); - } activationProgressNotification.hide(); if (!hasImported) { showImportFinishNotification(context); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 2d210c47e..cfa9db42c 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -116,7 +116,6 @@ suite('Java Language Extension - Standard', () => { Commands.UPDATE_SOURCE_ATTACHMENT, Commands.UPDATE_SOURCE_ATTACHMENT_CMD, Commands.SMARTSEMICOLON_DETECTION, - Commands.SMARTSEMICOLON_DETECTION_CMD, Commands.RESOLVE_SOURCE_ATTACHMENT, ].sort(); const foundJavaCommands = commands.filter((value) => { From fa820822000cf57aa12844ba0e23b73d4efc2bd9 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 4 Oct 2023 22:36:14 +0800 Subject: [PATCH 385/708] Track the LSP request data from syntax server (#3278) - Track the LSP request data from syntax server - Move registerCodeCompletionTelemetryListener just before language client is initialized Co-authored-by: Jinbo Wang Co-authored-by: Roland Grunberg --- src/TracingLanguageClient.ts | 4 ++++ src/extension.api.ts | 4 ++++ src/extension.ts | 23 +++++++++++++++++++++-- src/standardLanguageClient.ts | 24 +++--------------------- src/syntaxLanguageClient.ts | 3 ++- 5 files changed, 34 insertions(+), 24 deletions(-) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index 314cd64b8..ed01f65a8 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -10,9 +10,11 @@ export const onDidRequestEnd: Event = requestEndEventEmitter.event; export class TracingLanguageClient extends LanguageClient { private isStarted: boolean = false; + private isSyntaxServer: boolean = false; constructor(id: string, name: string, serverOptions: ServerOptions, clientOptions: LanguageClientOptions, forceDebug?: boolean) { super(id, name, serverOptions, clientOptions, forceDebug); + this.isSyntaxServer = name?.includes("Syntax Server"); } start(): Promise { @@ -118,6 +120,7 @@ export class TracingLanguageClient extends LanguageClient { duration, resultLength, data, + fromSyntaxServer: !!this.isSyntaxServer, }); } @@ -128,6 +131,7 @@ export class TracingLanguageClient extends LanguageClient { duration, error, data, + fromSyntaxServer: !!this.isSyntaxServer, }); } diff --git a/src/extension.api.ts b/src/extension.api.ts index dc27a68b6..e0dfcaceb 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -94,6 +94,10 @@ export interface TraceEvent { * Additional data properties, such as the completion trigger context. */ data?: any; + /** + * Whether the response is from the syntax server. + */ + fromSyntaxServer?: boolean; } export interface SourceInvalidatedEvent { diff --git a/src/extension.ts b/src/extension.ts index db33f7719..d2622b99c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,12 +6,12 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation, Position, Selection, Range } from 'vscode'; -import { CancellationToken, CodeActionParams, CodeActionRequest, Command, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; +import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; import { Commands } from './commands'; -import { ClientStatus, ExtensionAPI } from './extension.api'; +import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; import { initializeLogFile, logger } from './log'; @@ -273,6 +273,7 @@ export async function activate(context: ExtensionContext): Promise }; apiManager.initialize(requirements, serverMode); + registerCodeCompletionTelemetryListener(); resolve(apiManager.getApiInstance()); // the promise is resolved // no need to pass `resolve` into any code past this point, @@ -983,6 +984,24 @@ async function cleanJavaWorkspaceStorage() { } } +export function registerCodeCompletionTelemetryListener() { + apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => { + if (traceEvent.type === CompletionRequest.method) { + // Exclude the invalid completion requests. + if (!traceEvent.resultLength) { + return; + } + const props = { + duration: Math.round(traceEvent.duration * 100) / 100, + resultLength: traceEvent.resultLength || 0, + error: !!traceEvent.error, + fromSyntaxServer: !!traceEvent.fromSyntaxServer, + }; + return Telemetry.sendTelemetry(Telemetry.COMPLETION_EVENT, props); + } + }); +} + function registerOutOfMemoryDetection(storagePath: string) { const heapDumpFolder = getHeapDumpFolderFromSettings() || storagePath; chokidar.watch(`${heapDumpFolder}/java_*.hprof`, { ignoreInitial: true }).on('add', path => { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 8cb621697..f85887fa9 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -3,13 +3,13 @@ import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; -import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, CompletionRequest } from "vscode-languageclient"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider"; import { Commands } from "./commands"; -import { ClientStatus, TraceEvent } from "./extension.api"; +import { ClientStatus } from "./extension.api"; import * as fileEventHandler from './fileEventHandler'; import { gradleCodeActionMetadata, GradleCodeActionProvider } from "./gradle/gradleCodeActionProvider"; import { awaitServerConnection, prepareExecutable, DEBUG } from "./javaServerStarter"; @@ -34,7 +34,7 @@ import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./sta import { TracingLanguageClient } from './TracingLanguageClient'; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; -import { getAllJavaProjects, getJavaConfig, getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getJavaConfiguration } from "./utils"; import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; @@ -147,7 +147,6 @@ export class StandardLanguageClient { // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); registerDocumentValidationListener(context, this.languageClient); - registerCodeCompletionTelemetryListener(); commands.executeCommand('setContext', 'javaLSReady', true); break; case 'Started': @@ -814,21 +813,4 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC } else { return Promise.resolve(true); } -} - -export function registerCodeCompletionTelemetryListener() { - apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => { - if (traceEvent.type === CompletionRequest.method) { - // Exclude the invalid completion requests. - if (!traceEvent.resultLength) { - return; - } - const props = { - duration: Math.round(traceEvent.duration * 100) / 100, - resultLength: traceEvent.resultLength || 0, - error: !!traceEvent.error, - }; - return Telemetry.sendTelemetry(Telemetry.COMPLETION_EVENT, props); - } - }); } \ No newline at end of file diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 59d815e48..57b0283a7 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -14,6 +14,7 @@ import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { getJavaConfig } from "./utils"; import { DEBUG } from "./javaServerStarter"; +import { TracingLanguageClient } from "./TracingLanguageClient"; const extensionName = "Language Support for Java (Syntax Server)"; @@ -60,7 +61,7 @@ export class SyntaxLanguageClient { } if (serverOptions) { - this.languageClient = new LanguageClient('java', extensionName, serverOptions, newClientOptions, DEBUG); + this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, newClientOptions, DEBUG); } this.status = ClientStatus.initialized; From 85d4c53e785fa4417e4e52b1ddcaefd272c83940 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Sat, 7 Oct 2023 11:18:44 +0800 Subject: [PATCH 386/708] Indicate whether the onWillRequestStart event is from syntax server (#3333) Signed-off-by: Jinbo Wang --- src/TracingLanguageClient.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/TracingLanguageClient.ts b/src/TracingLanguageClient.ts index ed01f65a8..667b52977 100644 --- a/src/TracingLanguageClient.ts +++ b/src/TracingLanguageClient.ts @@ -110,6 +110,7 @@ export class TracingLanguageClient extends LanguageClient { private fireRequestStartTraceEvent(type: string): void { requestStartEventEmitter.fire({ type, + fromSyntaxServer: !!this.isSyntaxServer, }); } From 30697c3ad0821f4ca97c56b072988f2cd2b505a8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Oct 2023 14:05:29 +0000 Subject: [PATCH 387/708] Bump postcss from 8.4.21 to 8.4.31 Bumps [postcss](https://github.com/postcss/postcss) from 8.4.21 to 8.4.31. - [Release notes](https://github.com/postcss/postcss/releases) - [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md) - [Commits](https://github.com/postcss/postcss/compare/8.4.21...8.4.31) --- updated-dependencies: - dependency-name: postcss dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/package-lock.json b/package-lock.json index 56c334ce0..ed425f3f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6106,20 +6106,20 @@ "dev": true }, "postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, "requires": { - "nanoid": "^3.3.4", + "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, "dependencies": { "nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", "dev": true } } From 3ac133539085335c083482c9ae345a0ec8306943 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Thu, 12 Oct 2023 15:45:14 -0400 Subject: [PATCH 388/708] Support addition of executeClientCommandSupport capability Signed-off-by: Hope Hadfield --- src/extension.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extension.ts b/src/extension.ts index d2622b99c..09e715995 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -186,6 +186,7 @@ export async function activate(context: ExtensionContext): Promise onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", extractInterfaceSupport: true, advancedUpgradeGradleSupport: true, + executeClientCommandSupport: true, }, triggerFiles, }, From f598b7938c771987b0da0f85225540ed9af6ffca Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 16 Oct 2023 15:12:48 +0800 Subject: [PATCH 389/708] Feature discovery - Provide quick fix to 'Configure static import...' (#3339) --- src/clientCodeActionProvider.ts | 32 ++++++++++++++++++++++++++++++++ src/standardLanguageClient.ts | 5 +++++ 2 files changed, 37 insertions(+) create mode 100644 src/clientCodeActionProvider.ts diff --git a/src/clientCodeActionProvider.ts b/src/clientCodeActionProvider.ts new file mode 100644 index 000000000..5095f277a --- /dev/null +++ b/src/clientCodeActionProvider.ts @@ -0,0 +1,32 @@ +import { CancellationToken, CodeAction, CodeActionContext, CodeActionKind, CodeActionProvider, Command, ExtensionContext, ProviderResult, Range, Selection, TextDocument, commands } from "vscode"; +import { apiManager } from "./apiManager"; + +const configureStaticImportsCommand = "java.action.configureFavoriteStaticMembers"; +const UNDEFINED_METHOD = "67108964"; +export class ClientCodeActionProvider implements CodeActionProvider { + constructor(readonly context: ExtensionContext) { + context.subscriptions.push(commands.registerCommand(configureStaticImportsCommand, async () => { + commands.executeCommand("workbench.action.openSettings", "java.completion.favoriteStaticMembers"); + apiManager.fireTraceEvent({ + name: "java.ls.command", + properties: { + command: configureStaticImportsCommand, + }, + }); + })); + } + + provideCodeActions(document: TextDocument, range: Range | Selection, context: CodeActionContext, token: CancellationToken): ProviderResult<(CodeAction | Command)[]> { + const codeActions = []; + if (context.diagnostics?.some(diagnostic => diagnostic.code === UNDEFINED_METHOD) + || document.lineAt(range.start.line)?.text?.startsWith("import ")) { + const action = new CodeAction("Configure static import...", CodeActionKind.QuickFix); + action.command = { + title: "Configure static import...", + command: configureStaticImportsCommand, + }; + codeActions.push(action); + } + return codeActions; + } +} diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index f85887fa9..41d39898d 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -39,6 +39,7 @@ import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; +import { ClientCodeActionProvider } from './clientCodeActionProvider'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -618,6 +619,10 @@ export class StandardLanguageClient { pattern: "**/{gradle/wrapper/gradle-wrapper.properties,build.gradle,build.gradle.kts,settings.gradle,settings.gradle.kts}" }, new GradleCodeActionProvider(), gradleCodeActionMetadata); + languages.registerCodeActionsProvider({ + scheme: 'file', + language: 'java' + }, new ClientCodeActionProvider(context)); } private showGradleCompatibilityIssueNotification(message: string, options: string[], projectUri: string, gradleVersion: string, newJavaHome: string) { From 4cb7a84c54151491e78e1dbf54ad617abaa28e02 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 22 Oct 2023 04:37:02 -0700 Subject: [PATCH 390/708] Add pattern to avoid resource filter start with '*' (#3345) Signed-off-by: Sheng Chen --- package.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index ed568c165..5fc75102c 100644 --- a/package.json +++ b/package.json @@ -913,11 +913,15 @@ }, "java.project.resourceFilters": { "type": "array", + "items": { + "type": "string", + "pattern": "^(?!\\*).*" + }, "default": [ "node_modules", "\\.git" ], - "description": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", + "markdownDescription": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named `node_modules` or `.git`. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", "scope": "window" }, "java.templates.fileHeader": { From 9e20e131ea9f4fdf20bf361968d3cb8f700b61b8 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 23 Oct 2023 15:44:38 +0800 Subject: [PATCH 391/708] Add new alias 'public static void main(String[] args) for main method' (#3350) Signed-off-by: Jinbo Wang --- snippets/server.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/snippets/server.json b/snippets/server.json index 59c4c7026..ebcb8dd05 100644 --- a/snippets/server.json +++ b/snippets/server.json @@ -123,7 +123,7 @@ ] }, "main": { - "prefix": ["main", "psvm"], + "prefix": ["main", "psvm", "public static void main(String[] args)"], "body": [ "public static void main(String[] args) {", "\t$0", From ff5fcb3281d3c14617247ee55047894b92bc83c1 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 25 Oct 2023 12:42:58 -0400 Subject: [PATCH 392/708] Add new aliases for sysout and syserr snippets Signed-off-by: Hope Hadfield --- snippets/server.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/snippets/server.json b/snippets/server.json index ebcb8dd05..57e7c4f68 100644 --- a/snippets/server.json +++ b/snippets/server.json @@ -1,13 +1,13 @@ { "sysout": { - "prefix": ["sysout", "sout"], + "prefix": ["sysout", "sout", "System.out.println()"], "body": [ "System.out.println($0);" ], "description": "Print to standard out" }, "syserr": { - "prefix": ["syserr", "serr"], + "prefix": ["syserr", "serr", "System.err.println()"], "body": [ "System.err.println($0);" ], From c7cfca41b28d6d3e1043a69ab7776e1503e0ad28 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 11 Sep 2023 19:59:59 -0400 Subject: [PATCH 393/708] Add support for TransportKind.pipe through java.transport setting. - Do not expose java.transport setting to UI Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 17 ++++++++++++++++- src/settings.ts | 3 ++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 656fe8ae6..c69d334e2 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -5,7 +5,7 @@ import * as net from 'net'; import * as os from 'os'; import * as path from 'path'; import { ExtensionContext, version, workspace } from 'vscode'; -import { Executable, ExecutableOptions, StreamInfo } from 'vscode-languageclient/node'; +import { Executable, ExecutableOptions, StreamInfo, TransportKind } from 'vscode-languageclient/node'; import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; @@ -48,6 +48,21 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, executable.options = options; executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); executable.args = prepareParams(requirements, workspacePath, context, isSyntaxServer); + const transportKind = getJavaConfiguration().get('transport'); + switch (transportKind) { + case 'pipe': + executable.transport = TransportKind.pipe; + break; + case 'stdio': + executable.transport = TransportKind.stdio; + break; + default: + const isInsider: boolean = version.includes("insider"); + const javaExtVersion = context.extension.packageJSON?.version; + const isPreReleaseVersion = /^\d+\.\d+\.\d{10}/.test(javaExtVersion); + executable.transport = (isInsider || isPreReleaseVersion) ? TransportKind.pipe : TransportKind.stdio; + break; + } logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); return executable; } diff --git a/src/settings.ts b/src/settings.ts index 89c9cb536..b79c6f3c9 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -134,7 +134,8 @@ function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: Work || hasConfigKeyChanged('home', oldConfig, newConfig) || hasConfigKeyChanged('jdt.ls.vmargs', oldConfig, newConfig) || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig) - || hasConfigKeyChanged('sharedIndexes.location', oldConfig, newConfig);; + || hasConfigKeyChanged('sharedIndexes.location', oldConfig, newConfig) + || hasConfigKeyChanged('transport', oldConfig, newConfig); } function hasConfigKeyChanged(key, oldConfig, newConfig) { From 9f123e9b61135f5fd78e21dfd722885cc56e87d5 Mon Sep 17 00:00:00 2001 From: Brandon Cheng Date: Fri, 20 Oct 2023 13:04:21 -0400 Subject: [PATCH 394/708] Use java.import.exclusions config when determining trigger files --- src/extension.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 09e715995..a113e1222 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -918,7 +918,10 @@ async function getTriggerFiles(): Promise { } } - const javaFilesUnderRoot: Uri[] = await workspace.findFiles(new RelativePattern(rootFolder, "*.java"), undefined, 1); + // Paths set by 'java.import.exclusions' will be ignored when searching trigger files. + const exclusionGlob = getExclusionBlob(); + + const javaFilesUnderRoot: Uri[] = await workspace.findFiles(new RelativePattern(rootFolder, "*.java"), exclusionGlob, 1); for (const javaFile of javaFilesUnderRoot) { if (isPrefix(rootPath, javaFile.fsPath)) { openedJavaFiles.push(javaFile.toString()); @@ -926,7 +929,7 @@ async function getTriggerFiles(): Promise { } } - const javaFilesInCommonPlaces: Uri[] = await workspace.findFiles(new RelativePattern(rootFolder, "{src, test}/**/*.java"), undefined, 1); + const javaFilesInCommonPlaces: Uri[] = await workspace.findFiles(new RelativePattern(rootFolder, "{src, test}/**/*.java"), exclusionGlob, 1); for (const javaFile of javaFilesInCommonPlaces) { if (isPrefix(rootPath, javaFile.fsPath)) { openedJavaFiles.push(javaFile.toString()); From 418e36a8f50f88679ede0ca02a2acc6ee935f1c6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 25 Oct 2023 22:57:32 -0400 Subject: [PATCH 395/708] Changelog for 1.24.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba40476a6..0fa9f8e99 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,28 @@ # Change Log +## 1.24.0 (October 26th, 2023) + * performance - Exclude certain folders (eg. `node_modules/`) from "trigger" file search on activation. [#3348](https://github.com/redhat-developer/vscode-java/pull/3348). + * enhancement - Move snippet suggestions above matching keywords in completion list. See [#2584](https://github.com/redhat-developer/vscode-java/issues/2584). + * enhancement - Add new alias `public static void main(String[] args)` for public main method. See [#2105](https://github.com/redhat-developer/vscode-java/issues/2105). + * enhancement - Add aliases for `sysout`/`syserr` snippets that will see more usage. See [#3041](https://github.com/redhat-developer/vscode-java/issues/3041). + * enhancement - Add "Surround with try/catch" code action. See [JLS#2727](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2727). + * enhancement - Automatically add the existing static imports in code as favorite static members. See [JLS#2903](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2903). + * enhancement - Provide quick fix to "Configure static import...". See [#3339](https://github.com/redhat-developer/vscode-java/pull/3339). + * enhancement - Support named pipes for client/server communication. See [#3282](https://github.com/redhat-developer/vscode-java/issues/3282). + * enhancement - Track the LSP request data from syntax server. See [#3278](https://github.com/redhat-developer/vscode-java/pull/3278). + * bug fix - Re-implement smart semicolon detection through text document change API. See [#3290](https://github.com/redhat-developer/vscode-java/issues/3290). + * bug fix - Completion returns no results for method declarations when `matchCase` set to `FIRSTLETTER`. See [#3214](https://github.com/redhat-developer/vscode-java/issues/3214), [#3186](https://github.com/redhat-developer/vscode-java/issues/3186). + * bug fix - Allow filtering methods by parameter names, and order by number of parameters. See [JLS#2907](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2907), [#3206](https://github.com/redhat-developer/vscode-java/issues/3206). + * bug fix - Reconcile AST node to provide accurate type definition snippets. See [#2250](https://github.com/redhat-developer/vscode-java/issues/2250). + * bug fix - `BasicFileDetector` should handle inaccessible directories gracefully during project import. See [#1156](https://github.com/redhat-developer/vscode-java/issues/1156), [#3137](https://github.com/redhat-developer/vscode-java/issues/3137). + * bug fix - Ensure line delimiter exists after the file header template. See [JLS#2906](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2906). + * bug fix - `o.e.core.internal.resources.ResourceException`: Invalid project description. See [JLS#2845](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2845). + * bug fix - Error when parsing resource filter. See [#3345](https://github.com/redhat-developer/vscode-java/pull/3345). + * bug fix - NPE in `SemanticTokensHandler`. See [JLS#2876](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2876). + * bug fix - NPE in cleanup action handler. See [JLS#2879](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2879). + * bug fix - `UnsupportedOperationException` at `org.eclipse.lsp4j.services.LanguageServer.setTrace()`. See [JLS#2891](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2891). + * dependencies - Bump postcss from 8.4.21 to 8.4.31. See [#3335](https://github.com/redhat-developer/vscode-java/pull/3335). + ## 1.23.0 (September 28th, 2023) * enhancement - Improve JDK detection on the local machine, and ensure they are registered. See [#3301](https://github.com/redhat-developer/vscode-java/pull/3301). * enhancement - Update current method snippet and add `static_method` snippet for interface. See [#1697](https://github.com/redhat-developer/vscode-java/issues/1697). From 6b472aea270ca024007c383e1d37b924ba1c0087 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 26 Oct 2023 13:49:51 -0400 Subject: [PATCH 396/708] Upversion to 1.25.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ed425f3f3..3a8f24df4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.24.0", + "version": "1.25.0", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/package.json b/package.json index 5fc75102c..a85a3e289 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.24.0", + "version": "1.25.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 31f7f3f8c0ae0eaa5d39c3d20d080801e92b20dd Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Wed, 20 Sep 2023 23:22:12 +0200 Subject: [PATCH 397/708] Provide support for Java 21 Signed-off-by: Snjezana Peco --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3f2189a8f..ba9d904e0 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 20 +* Supports code from Java 1.5 to Java 21 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-20", - "path": "/path/to/jdk-20", + "name": "JavaSE-21", + "path": "/path/to/jdk-21", "default": true }, ] diff --git a/package.json b/package.json index a85a3e289..4d9a16bf1 100644 --- a/package.json +++ b/package.json @@ -806,7 +806,8 @@ "JavaSE-17", "JavaSE-18", "JavaSE-19", - "JavaSE-20" + "JavaSE-20", + "JavaSE-21" ], "description": "Java Execution Environment name. Must be unique." }, From 5c742ba98664ee92ba546e6b51c37251ad8fe26c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 3 Nov 2023 14:17:38 -0400 Subject: [PATCH 398/708] Update from Node 14 to Node 18. Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 2 +- CONTRIBUTING.md | 2 +- Jenkinsfile | 2 +- package-lock.json | 9199 +++++++++++++++++++------------ package.json | 2 +- 5 files changed, 5770 insertions(+), 3437 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 3ecdf22c6..b89a15752 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -14,7 +14,7 @@ jobs: - name: Set Up NodeJS uses: actions/setup-node@v2 with: - node-version: '14' + node-version: '18' - name: Set Up Java uses: actions/setup-java@v2 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6598ba1a3..53edde00f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -34,7 +34,7 @@ The following will be a start to finish guide to get the entire language server 1. Install the required software: * latest [Visual Studio Code](https://code.visualstudio.com/) - * [Node.js](https://nodejs.org/) v4.0.0 or higher + * [Node.js](https://nodejs.org/) v18.17.1 (with npm 9.6.7) or higher 2. Fork and clone [this repository](https://github.com/redhat-developer/vscode-java) Keep in mind the final directories will look like: diff --git a/Jenkinsfile b/Jenkinsfile index c4a000769..da9baff3f 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,7 +1,7 @@ #!/usr/bin/env groovy def installBuildRequirements(){ - def nodeHome = tool 'nodejs-14.19.1' + def nodeHome = tool 'nodejs-lts' env.PATH="${env.PATH}:${nodeHome}/bin" sh "npm install -g typescript" sh 'npm install -g --force "@vscode/vsce"' diff --git a/package-lock.json b/package-lock.json index 3a8f24df4..24800bdc2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,26 +1,95 @@ { "name": "java", "version": "1.25.0", - "lockfileVersion": 1, + "lockfileVersion": 3, "requires": true, - "dependencies": { - "@colors/colors": { + "packages": { + "": { + "name": "java", + "version": "1.25.0", + "license": "EPL-2.0", + "dependencies": { + "@redhat-developer/vscode-extension-proposals": "0.0.21", + "@redhat-developer/vscode-redhat-telemetry": "^0.7.0", + "@vscode/codicons": "^0.0.32", + "@vscode/webview-ui-toolkit": "1.2.2", + "chokidar": "^3.5.3", + "expand-home-dir": "^0.0.3", + "fmtr": "^1.1.2", + "fs-extra": "^8.1.0", + "glob": "^7.1.3", + "htmlparser2": "6.0.1", + "jdk-utils": "^0.5.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", + "semver": "^7.5.2", + "vscode-languageclient": "8.1.0", + "winreg-utf8": "^0.1.1", + "winston": "^3.2.1", + "winston-daily-rotate-file": "^4.7.1" + }, + "devDependencies": { + "@types/fs-extra": "^8.0.0", + "@types/glob": "5.0.30", + "@types/lodash.findindex": "^4.6.6", + "@types/mocha": "^5.2.5", + "@types/node": "^18.17.1", + "@types/react": "^17.0.37", + "@types/react-dom": "^17.0.11", + "@types/semver": "^7.3.8", + "@types/sinon": "^10.0.12", + "@types/vscode": "^1.77.0", + "@types/vscode-webview": "^1.57.0", + "@types/winreg": "^1.2.30", + "@types/winston": "^2.4.4", + "@typescript-eslint/eslint-plugin": "^5.18.0", + "@typescript-eslint/parser": "^5.18.0", + "@vscode/test-electron": "^2.1.5", + "css-loader": "^6.7.3", + "eslint": "^8.13.0", + "eslint-webpack-plugin": "^3.2.0", + "gulp": "^4.0.2", + "gulp-decompress": "^3.0.0", + "gulp-download": "0.0.1", + "lodash.findindex": "^4.6.0", + "lodash.template": ">=4.5.0", + "minimist": ">=1.2.6", + "mocha": "^9.2.2", + "request": "^2.88.2", + "sinon": "^14.0.0", + "style-loader": "^3.3.1", + "ts-loader": "^9.4.2", + "typescript": "^4.6.4", + "webpack": "^5.76.0", + "webpack-cli": "^4.6.0" + }, + "engines": { + "vscode": "^1.77.0" + } + }, + "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==" + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "engines": { + "node": ">=0.1.90" + } }, - "@discoveryjs/json-ext": { + "node_modules/@discoveryjs/json-ext": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.0.0" + } }, - "@eslint/eslintrc": { + "node_modules/@eslint/eslintrc": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^9.3.1", @@ -31,211 +100,257 @@ "minimatch": "^3.0.4", "strip-json-comments": "^3.1.1" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@humanwhocodes/config-array": { + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", "dev": true, - "requires": { + "dependencies": { "@humanwhocodes/object-schema": "^1.2.1", "debug": "^4.1.1", "minimatch": "^3.0.4" }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@humanwhocodes/object-schema": { + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@jridgewell/gen-mapping": { + "node_modules/@jridgewell/gen-mapping": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" } }, - "@jridgewell/resolve-uri": { + "node_modules/@jridgewell/resolve-uri": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/set-array": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0.0" + } }, - "@jridgewell/source-map": { + "node_modules/@jridgewell/source-map": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" } }, - "@jridgewell/sourcemap-codec": { + "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", "dev": true }, - "@jridgewell/trace-mapping": { + "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/resolve-uri": "3.1.0", "@jridgewell/sourcemap-codec": "1.4.14" } }, - "@lukeed/csprng": { + "node_modules/@lukeed/csprng": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", - "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==" + "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "engines": { + "node": ">=8" + } }, - "@lukeed/uuid": { + "node_modules/@lukeed/uuid": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", - "requires": { + "dependencies": { "@lukeed/csprng": "^1.1.0" + }, + "engines": { + "node": ">=8" } }, - "@microsoft/fast-element": { + "node_modules/@microsoft/fast-element": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz", "integrity": "sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==" }, - "@microsoft/fast-foundation": { + "node_modules/@microsoft/fast-foundation": { "version": "2.47.0", "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz", "integrity": "sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==", - "requires": { + "dependencies": { "@microsoft/fast-element": "^1.11.0", "@microsoft/fast-web-utilities": "^5.4.1", "tabbable": "^5.2.0", "tslib": "^1.13.0" - }, - "dependencies": { - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - } } }, - "@microsoft/fast-react-wrapper": { + "node_modules/@microsoft/fast-foundation/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/@microsoft/fast-react-wrapper": { "version": "0.1.48", "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz", "integrity": "sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==", - "requires": { + "dependencies": { "@microsoft/fast-element": "^1.9.0", "@microsoft/fast-foundation": "^2.41.1" + }, + "peerDependencies": { + "react": ">=16.9.0" } }, - "@microsoft/fast-web-utilities": { + "node_modules/@microsoft/fast-web-utilities": { "version": "5.4.1", "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "requires": { + "dependencies": { "exenv-es6": "^1.1.1" } }, - "@nodelib/fs.scandir": { + "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" } }, - "@nodelib/fs.stat": { + "node_modules/@nodelib/fs.stat": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "@nodelib/fs.walk": { + "node_modules/@nodelib/fs.walk": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, - "@redhat-developer/vscode-extension-proposals": { + "node_modules/@redhat-developer/vscode-extension-proposals": { "version": "0.0.21", "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.21.tgz", "integrity": "sha512-jSal4qflxLWNKzG7ObwpLwn2gzznuZJ+qvwx8IV/msJrUWxh7A8fzYuCmusKT09bzpwQNKDwySAVeSUS2xUmNg==" }, - "@redhat-developer/vscode-redhat-telemetry": { + "node_modules/@redhat-developer/vscode-redhat-telemetry": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.7.0.tgz", "integrity": "sha512-Nhlg2iuOVYAX7/GCty7wOJ8/E19XcGuRioRxoyg9+S+dhf9Sxnqu17kyHBrq3sbW3uNOPjHw7QMuKHvN0SXnFQ==", - "requires": { + "dependencies": { "@segment/analytics-node": "0.0.1-beta.17", "axios": "^1.3.2", "countries-and-timezones": "^3.4.1", @@ -245,342 +360,394 @@ "picomatch": "^2.3.1", "ua-parser-js": "1.0.33", "uuid": "^9.0.0" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "requires": { - "pump": "^3.0.0" - } - }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==" - }, - "invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" - }, - "lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "requires": { - "invert-kv": "^3.0.0" - } - }, - "object-hash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", - "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" - }, - "os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "requires": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" - } + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "dependencies": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "@segment/analytics-core": { + "node_modules/@segment/analytics-core": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.2.1.tgz", "integrity": "sha512-FaKE7uIBXsclO4GcA7cEgb4iyQ23aFHRcxqLpxaCGeB5nqIdVQHigmGgL3hAjCZeBqtojLEV6as27ozXHQXCkg==", - "requires": { + "dependencies": { "@lukeed/uuid": "^2.0.0", "dset": "^3.1.2", "tslib": "^2.4.1" - }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } } }, - "@segment/analytics-node": { + "node_modules/@segment/analytics-core/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@segment/analytics-node": { "version": "0.0.1-beta.17", "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-0.0.1-beta.17.tgz", "integrity": "sha512-LwrhrPEJXfCTg/WmFVpRikR/M4q9S8Mq0EHy3oEYkudP2ybeRg2pPDftvwRxdlp7aULn4Zyq7N/hVCPE6/BoUA==", - "requires": { + "dependencies": { "@lukeed/uuid": "^2.0.0", "@segment/analytics-core": "1.2.1", "node-fetch": "^2.6.7", "tslib": "^2.4.1" }, - "dependencies": { - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" - } + "engines": { + "node": ">=14" } }, - "@sinonjs/commons": { + "node_modules/@segment/analytics-node/node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", "dev": true, - "requires": { + "dependencies": { "type-detect": "4.0.8" } }, - "@sinonjs/fake-timers": { + "node_modules/@sinonjs/fake-timers": { "version": "9.1.2", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz", "integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==", "dev": true, - "requires": { + "dependencies": { "@sinonjs/commons": "^1.7.0" } }, - "@sinonjs/samsam": { + "node_modules/@sinonjs/samsam": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", "dev": true, - "requires": { + "dependencies": { "@sinonjs/commons": "^1.6.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" } }, - "@sinonjs/text-encoding": { + "node_modules/@sinonjs/text-encoding": { "version": "0.7.1", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", "dev": true }, - "@tootallnate/once": { + "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 6" + } }, - "@types/eslint": { + "node_modules/@types/eslint": { "version": "8.21.2", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.2.tgz", "integrity": "sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==", "dev": true, - "requires": { + "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, - "@types/eslint-scope": { + "node_modules/@types/eslint-scope": { "version": "3.7.4", "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", "dev": true, - "requires": { + "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, - "@types/estree": { + "node_modules/@types/estree": { "version": "0.0.51", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", "dev": true }, - "@types/fs-extra": { + "node_modules/@types/fs-extra": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.0.0.tgz", "integrity": "sha512-bCtL5v9zdbQW86yexOlXWTEGvLNqWxMFyi7gQA7Gcthbezr2cPSOb8SkESVKA937QD5cIwOFLDFt0MQoXOEr9Q==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*" } }, - "@types/glob": { + "node_modules/@types/glob": { "version": "5.0.30", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz", "integrity": "sha1-ECZAnFYlqGiQdGAoCNCCsoZ7ilE=", "dev": true, - "requires": { + "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, - "@types/json-schema": { + "node_modules/@types/json-schema": { "version": "7.0.7", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", "dev": true }, - "@types/lodash": { + "node_modules/@types/lodash": { "version": "4.14.146", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.146.tgz", "integrity": "sha512-JzJcmQ/ikHSv7pbvrVNKJU5j9jL9VLf3/gqs048CEnBVVVEv4kve3vLxoPHGvclutS+Il4SBIuQQ087m1eHffw==", "dev": true }, - "@types/lodash.findindex": { + "node_modules/@types/lodash.findindex": { "version": "4.6.6", "resolved": "https://registry.npmjs.org/@types/lodash.findindex/-/lodash.findindex-4.6.6.tgz", "integrity": "sha512-quPh7tw70yhryaubH6wBvgIQgeU1PFjdoT4eaW6WCKzjIlxgImLKIv4bvJhMTUlRkMgf5VAfECKKXKuB8cexgw==", "dev": true, - "requires": { + "dependencies": { "@types/lodash": "*" } }, - "@types/minimatch": { + "node_modules/@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, - "@types/mocha": { + "node_modules/@types/mocha": { "version": "5.2.5", "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.5.tgz", "integrity": "sha512-lAVp+Kj54ui/vLUFxsJTMtWvZraZxum3w3Nwkble2dNuV5VnPA+Mi2oGX9XYJAaIvZi3tn3cbjS/qcJXRb6Bww==", "dev": true }, - "@types/node": { - "version": "16.18.12", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.18.12.tgz", - "integrity": "sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==", - "dev": true + "node_modules/@types/node": { + "version": "18.18.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.8.tgz", + "integrity": "sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } }, - "@types/prop-types": { + "node_modules/@types/prop-types": { "version": "15.7.5", "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", "dev": true }, - "@types/react": { + "node_modules/@types/react": { "version": "17.0.53", "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.53.tgz", "integrity": "sha512-1yIpQR2zdYu1Z/dc1OxC+MA6GR240u3gcnP4l6mvj/PJiVaqHsQPmWttsvHsfnhfPbU2FuGmo0wSITPygjBmsw==", "dev": true, - "requires": { + "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", "csstype": "^3.0.2" } }, - "@types/react-dom": { + "node_modules/@types/react-dom": { "version": "17.0.19", "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-17.0.19.tgz", "integrity": "sha512-PiYG40pnQRdPHnlf7tZnp0aQ6q9tspYr72vD61saO6zFCybLfMqwUCN0va1/P+86DXn18ZWeW30Bk7xlC5eEAQ==", "dev": true, - "requires": { + "dependencies": { "@types/react": "^17" } }, - "@types/scheduler": { + "node_modules/@types/scheduler": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", "dev": true }, - "@types/semver": { + "node_modules/@types/semver": { "version": "7.3.8", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.3.8.tgz", "integrity": "sha512-D/2EJvAlCEtYFEYmmlGwbGXuK886HzyCc3nZX/tkFTQdEU8jZDAgiv08P162yB17y4ZXZoq7yFAnW4GDBb9Now==", "dev": true }, - "@types/sinon": { + "node_modules/@types/sinon": { "version": "10.0.13", "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.13.tgz", "integrity": "sha512-UVjDqJblVNQYvVNUsj0PuYYw0ELRmgt1Nt5Vk0pT5f16ROGfcKJY8o1HVuMOJOpD727RrGB9EGvoaTQE5tgxZQ==", "dev": true, - "requires": { + "dependencies": { "@types/sinonjs__fake-timers": "*" } }, - "@types/sinonjs__fake-timers": { + "node_modules/@types/sinonjs__fake-timers": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.2.tgz", "integrity": "sha512-9GcLXF0/v3t80caGs5p2rRfkB+a8VBGLJZVih6CNFkx8IZ994wiKKLSRs9nuFwk1HevWs/1mnUmkApGrSGsShA==", "dev": true }, - "@types/triple-beam": { + "node_modules/@types/triple-beam": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" }, - "@types/vscode": { + "node_modules/@types/vscode": { "version": "1.77.0", "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.77.0.tgz", "integrity": "sha512-MWFN5R7a33n8eJZJmdVlifjig3LWUNRrPeO1xemIcZ0ae0TEQuRc7G2xV0LUX78RZFECY1plYBn+dP/Acc3L0Q==", "dev": true }, - "@types/vscode-webview": { + "node_modules/@types/vscode-webview": { "version": "1.57.1", "resolved": "https://registry.npmjs.org/@types/vscode-webview/-/vscode-webview-1.57.1.tgz", "integrity": "sha512-ghW5SfuDmsGDS2A4xkvGsLwDRNc3Vj5rS6rPOyPm/IryZuf3wceZKxgYaUoW+k9f0f/CB7y2c1rRsdOWZWn0PQ==", "dev": true }, - "@types/winreg": { + "node_modules/@types/winreg": { "version": "1.2.30", "resolved": "https://registry.npmjs.org/@types/winreg/-/winreg-1.2.30.tgz", "integrity": "sha1-kdZxDlNtNFucmwF8V0z2qNpkxRg=", "dev": true }, - "@types/winston": { + "node_modules/@types/winston": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/winston/-/winston-2.4.4.tgz", "integrity": "sha512-BVGCztsypW8EYwJ+Hq+QNYiT/MUyCif0ouBH+flrY66O5W+KIXAMML6E/0fJpm7VjIzgangahl5S03bJJQGrZw==", + "deprecated": "This is a stub types definition. winston provides its own type definitions, so you do not need this installed.", "dev": true, - "requires": { + "dependencies": { "winston": "*" } }, - "@typescript-eslint/eslint-plugin": { + "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/scope-manager": "5.18.0", "@typescript-eslint/type-utils": "5.18.0", "@typescript-eslint/utils": "5.18.0", @@ -591,121 +758,211 @@ "semver": "^7.3.5", "tsutils": "^3.21.0" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/parser": { + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/parser": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/scope-manager": "5.18.0", "@typescript-eslint/types": "5.18.0", "@typescript-eslint/typescript-estree": "5.18.0", "debug": "^4.3.2" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/scope-manager": { + "node_modules/@typescript-eslint/parser/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/scope-manager": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.18.0", "@typescript-eslint/visitor-keys": "5.18.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@typescript-eslint/type-utils": { + "node_modules/@typescript-eslint/type-utils": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/type-utils/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/types": { + "node_modules/@typescript-eslint/type-utils/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/types": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", - "dev": true + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } }, - "@typescript-eslint/typescript-estree": { + "node_modules/@typescript-eslint/typescript-estree": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.18.0", "@typescript-eslint/visitor-keys": "5.18.0", "debug": "^4.3.2", @@ -714,241 +971,307 @@ "semver": "^7.3.5", "tsutils": "^3.21.0" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true } } }, - "@typescript-eslint/utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", - "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, "dependencies": { - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@typescript-eslint/visitor-keys": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", + "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/utils/node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@typescript-eslint/visitor-keys": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", "dev": true, - "requires": { + "dependencies": { "@typescript-eslint/types": "5.18.0", "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "@ungap/promise-all-settled": { + "node_modules/@ungap/promise-all-settled": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", "dev": true }, - "@vscode/codicons": { + "node_modules/@vscode/codicons": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz", "integrity": "sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg==" }, - "@vscode/test-electron": { + "node_modules/@vscode/test-electron": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", "dev": true, - "requires": { + "dependencies": { "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", "rimraf": "^3.0.2", "unzipper": "^0.10.11" }, + "engines": { + "node": ">=8.9.3" + } + }, + "node_modules/@vscode/test-electron/node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, "dependencies": { - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/@vscode/test-electron/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "@vscode/webview-ui-toolkit": { + "node_modules/@vscode/test-electron/node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@vscode/test-electron/node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@vscode/test-electron/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@vscode/test-electron/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vscode/webview-ui-toolkit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", "integrity": "sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==", - "requires": { + "dependencies": { "@microsoft/fast-element": "^1.6.2", "@microsoft/fast-foundation": "^2.38.0", "@microsoft/fast-react-wrapper": "^0.1.18" + }, + "peerDependencies": { + "react": ">=16.9.0" } }, - "@webassemblyjs/ast": { + "node_modules/@webassemblyjs/ast": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/helper-numbers": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1" } }, - "@webassemblyjs/floating-point-hex-parser": { + "node_modules/@webassemblyjs/floating-point-hex-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", "dev": true }, - "@webassemblyjs/helper-api-error": { + "node_modules/@webassemblyjs/helper-api-error": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", "dev": true }, - "@webassemblyjs/helper-buffer": { + "node_modules/@webassemblyjs/helper-buffer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", "dev": true }, - "@webassemblyjs/helper-numbers": { + "node_modules/@webassemblyjs/helper-numbers": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/floating-point-hex-parser": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/helper-wasm-bytecode": { + "node_modules/@webassemblyjs/helper-wasm-bytecode": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", "dev": true }, - "@webassemblyjs/helper-wasm-section": { + "node_modules/@webassemblyjs/helper-wasm-section": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1" } }, - "@webassemblyjs/ieee754": { + "node_modules/@webassemblyjs/ieee754": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", "dev": true, - "requires": { + "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, - "@webassemblyjs/leb128": { + "node_modules/@webassemblyjs/leb128": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", "dev": true, - "requires": { + "dependencies": { "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/utf8": { + "node_modules/@webassemblyjs/utf8": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", "dev": true }, - "@webassemblyjs/wasm-edit": { + "node_modules/@webassemblyjs/wasm-edit": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -959,12 +1282,12 @@ "@webassemblyjs/wast-printer": "1.11.1" } }, - "@webassemblyjs/wasm-gen": { + "node_modules/@webassemblyjs/wasm-gen": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", "@webassemblyjs/ieee754": "1.11.1", @@ -972,24 +1295,24 @@ "@webassemblyjs/utf8": "1.11.1" } }, - "@webassemblyjs/wasm-opt": { + "node_modules/@webassemblyjs/wasm-opt": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-buffer": "1.11.1", "@webassemblyjs/wasm-gen": "1.11.1", "@webassemblyjs/wasm-parser": "1.11.1" } }, - "@webassemblyjs/wasm-parser": { + "node_modules/@webassemblyjs/wasm-parser": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@webassemblyjs/helper-api-error": "1.11.1", "@webassemblyjs/helper-wasm-bytecode": "1.11.1", @@ -998,423 +1321,555 @@ "@webassemblyjs/utf8": "1.11.1" } }, - "@webassemblyjs/wast-printer": { + "node_modules/@webassemblyjs/wast-printer": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", "dev": true, - "requires": { + "dependencies": { "@webassemblyjs/ast": "1.11.1", "@xtuc/long": "4.2.2" } }, - "@webpack-cli/configtest": { + "node_modules/@webpack-cli/configtest": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", - "dev": true + "dev": true, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" + } }, - "@webpack-cli/info": { + "node_modules/@webpack-cli/info": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", "dev": true, - "requires": { + "dependencies": { "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "@webpack-cli/serve": { + "node_modules/@webpack-cli/serve": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", - "dev": true + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } }, - "@xtuc/ieee754": { + "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { + "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "acorn": { + "node_modules/acorn": { "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } }, - "acorn-import-assertions": { + "node_modules/acorn-import-assertions": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", - "dev": true + "dev": true, + "peerDependencies": { + "acorn": "^8" + } }, - "acorn-jsx": { + "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, - "ajv": { + "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "requires": { + "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ajv-formats": { + "node_modules/ajv-formats": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": { + "dependencies": { "ajv": "^8.0.0" }, - "dependencies": { + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "optional": true } } }, - "ajv-keywords": { + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } }, - "ansi-colors": { + "node_modules/ansi-colors": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", "dev": true, - "requires": { + "dependencies": { "ansi-wrap": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "ansi-gray": { + "node_modules/ansi-gray": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", "dev": true, - "requires": { + "dependencies": { "ansi-wrap": "0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "ansi-regex": { + "node_modules/ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-styles": { + "node_modules/ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "ansi-wrap": { + "node_modules/ansi-wrap": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "anymatch": { + "node_modules/anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, - "requires": { + "dependencies": { "micromatch": "^3.1.4", "normalize-path": "^2.1.1" } }, - "append-buffer": { + "node_modules/append-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", "dev": true, - "requires": { + "dependencies": { "buffer-equal": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "archive-type": { + "node_modules/archive-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", "dev": true, - "requires": { + "dependencies": { "file-type": "^4.2.0" + }, + "engines": { + "node": ">=4" } }, - "archy": { + "node_modules/archy": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", "dev": true }, - "argparse": { + "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "arr-diff": { + "node_modules/arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-filter": { + "node_modules/arr-filter": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", "dev": true, - "requires": { + "dependencies": { "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "arr-flatten": { + "node_modules/arr-flatten": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "arr-map": { + "node_modules/arr-map": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", "dev": true, - "requires": { + "dependencies": { "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "arr-union": { + "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-differ": { + "node_modules/array-differ": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-each": { + "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-initial": { + "node_modules/array-initial": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", "dev": true, - "requires": { + "dependencies": { "array-slice": "^1.0.0", "is-number": "^4.0.0" }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-initial/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "array-last": { + "node_modules/array-last": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", "dev": true, - "requires": { + "dependencies": { "is-number": "^4.0.0" }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-last/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "array-slice": { + "node_modules/array-slice": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-sort": { + "node_modules/array-sort": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", "dev": true, - "requires": { + "dependencies": { "default-compare": "^1.0.0", "get-value": "^2.0.6", "kind-of": "^5.0.2" }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "array-union": { + "node_modules/array-sort/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "array-uniq": { + "node_modules/array-uniq": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "array-unique": { + "node_modules/array-unique": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "asn1": { + "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", "dev": true, - "requires": { + "dependencies": { "safer-buffer": "~2.1.0" } }, - "assert-plus": { + "node_modules/assert-plus": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8" + } }, - "assign-symbols": { + "node_modules/assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "async": { + "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "requires": { + "dependencies": { "lodash": "^4.17.14" } }, - "async-done": { + "node_modules/async-done": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.2", "process-nextick-args": "^2.0.0", "stream-exhaust": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "async-each": { + "node_modules/async-each": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", "dev": true }, - "async-settle": { + "node_modules/async-settle": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", "dev": true, - "requires": { + "dependencies": { "async-done": "^1.2.2" + }, + "engines": { + "node": ">= 0.10" } }, - "asynckit": { + "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "atob": { + "node_modules/atob": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } }, - "aws-sign2": { + "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "aws4": { + "node_modules/aws4": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "axios": { + "node_modules/axios": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", - "requires": { + "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" - }, + } + }, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", "dependencies": { - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - } + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "bach": { + "node_modules/bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", "dev": true, - "requires": { + "dependencies": { "arr-filter": "^1.1.1", "arr-flatten": "^1.0.1", "arr-map": "^2.0.0", @@ -1424,19 +1879,22 @@ "async-done": "^1.2.2", "async-settle": "^1.0.0", "now-and-later": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "balanced-match": { + "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "base": { + "node_modules/base": { "version": "0.11.2", "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, - "requires": { + "dependencies": { "cache-base": "^1.0.1", "class-utils": "^0.3.5", "component-emitter": "^1.2.1", @@ -1445,130 +1903,155 @@ "mixin-deep": "^1.2.0", "pascalcase": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "base64-js": { + "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", "dev": true }, - "bcrypt-pbkdf": { + "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, - "requires": { + "dependencies": { "tweetnacl": "^0.14.3" } }, - "beeper": { + "node_modules/beeper": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "big-integer": { + "node_modules/big-integer": { "version": "1.6.51", "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "binary": { + "node_modules/binary": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", "dev": true, - "requires": { + "dependencies": { "buffers": "~0.1.1", "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" } }, - "binary-extensions": { + "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } }, - "bindings": { + "node_modules/bindings": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", "dev": true, "optional": true, - "requires": { + "dependencies": { "file-uri-to-path": "1.0.0" } }, - "bl": { + "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, - "bluebird": { + "node_modules/bluebird": { "version": "3.4.7", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", "dev": true }, - "brace-expansion": { + "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { + "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "braces": { + "node_modules/braces": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, - "requires": { + "dependencies": { "arr-flatten": "^1.1.0", "array-unique": "^0.3.2", "extend-shallow": "^2.0.1", @@ -1580,104 +2063,136 @@ "split-string": "^3.0.2", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "browser-stdout": { + "node_modules/browser-stdout": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "browserslist": { + "node_modules/browserslist": { "version": "4.21.5", "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { "caniuse-lite": "^1.0.30001449", "electron-to-chromium": "^1.4.284", "node-releases": "^2.0.8", "update-browserslist-db": "^1.0.10" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "buffer": { + "node_modules/buffer": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "dev": true, - "requires": { + "dependencies": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" } }, - "buffer-alloc": { + "node_modules/buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, - "requires": { + "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" } }, - "buffer-alloc-unsafe": { + "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", "dev": true }, - "buffer-crc32": { + "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "buffer-equal": { + "node_modules/buffer-equal": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4.0" + } }, - "buffer-fill": { + "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", "dev": true }, - "buffer-from": { + "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "buffer-indexof-polyfill": { + "node_modules/buffer-indexof-polyfill": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "buffers": { + "node_modules/buffers": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.2.0" + } }, - "cache-base": { + "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, - "requires": { + "dependencies": { "collection-visit": "^1.0.0", "component-emitter": "^1.2.1", "get-value": "^2.0.6", @@ -1687,407 +2202,517 @@ "to-object-path": "^0.3.0", "union-value": "^1.0.0", "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "call-bind": { + "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "callsites": { + "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "camelcase": { + "node_modules/camelcase": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "caniuse-lite": { + "node_modules/caniuse-lite": { "version": "1.0.30001466", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", - "dev": true + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] }, - "caseless": { + "node_modules/caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "chainsaw": { + "node_modules/chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", "dev": true, - "requires": { + "dependencies": { "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" } }, - "chalk": { + "node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, - "requires": { + "dependencies": { "ansi-styles": "^2.2.1", "escape-string-regexp": "^1.0.2", "has-ansi": "^2.0.0", "strip-ansi": "^3.0.0", "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "chokidar": { + "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "requires": { + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", - "fsevents": "~2.3.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dependencies": { - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "chrome-trace-event": { + "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.0" + } }, - "class-utils": { + "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, - "requires": { + "dependencies": { "arr-union": "^3.1.0", "define-property": "^0.2.5", "isobject": "^3.0.0", "static-extend": "^0.1.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "cliui": { + "node_modules/cliui": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", "dev": true, - "requires": { + "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1", "wrap-ansi": "^2.0.0" } }, - "clone": { + "node_modules/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8" + } }, - "clone-buffer": { + "node_modules/clone-buffer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "clone-deep": { + "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, - "requires": { + "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "clone-stats": { + "node_modules/clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "cloneable-readable": { + "node_modules/cloneable-readable": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", "readable-stream": "^2.3.5" } }, - "code-point-at": { + "node_modules/code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "collection-map": { + "node_modules/collection-map": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", "dev": true, - "requires": { + "dependencies": { "arr-map": "^2.0.2", "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "collection-visit": { + "node_modules/collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, - "requires": { + "dependencies": { "map-visit": "^1.0.0", "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "color": { + "node_modules/color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", - "requires": { + "dependencies": { "color-convert": "^1.9.1", "color-string": "^1.5.2" } }, - "color-convert": { + "node_modules/color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { + "dependencies": { "color-name": "1.1.3" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, - "color-string": { + "node_modules/color-string": { "version": "1.5.5", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.5.tgz", "integrity": "sha512-jgIoum0OfQfq9Whcfc2z/VhCNcmQjWbey6qBX0vqt7YICflUmBCh9E9CiQD5GSJ+Uehixm3NUwHVhqUAWRivZg==", - "requires": { + "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "color-support": { + "node_modules/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "dev": true, + "bin": { + "color-support": "bin.js" + } }, - "colorette": { + "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", "dev": true }, - "colornames": { + "node_modules/colornames": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", "integrity": "sha1-+IiQMGhcfE/54qVZ9Qd+t2qBb5Y=" }, - "colors": { + "node_modules/colors": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.3.tgz", - "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==" + "integrity": "sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==", + "engines": { + "node": ">=0.1.90" + } }, - "colorspace": { + "node_modules/colorspace": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.2.tgz", "integrity": "sha512-vt+OoIP2d76xLhjwbBaucYlNSpPsrJWPlBTtwCpQKIu6/CSMutyzX93O/Do0qzpH3YoHEes8YEFXyZ797rEhzQ==", - "requires": { + "dependencies": { "color": "3.0.x", "text-hex": "1.0.x" } }, - "combined-stream": { + "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "requires": { + "dependencies": { "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" } }, - "commander": { + "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "component-emitter": { + "node_modules/component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, - "concat-map": { + "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "concat-stream": { + "node_modules/concat-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, - "requires": { + "engines": [ + "node >= 0.8" + ], + "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" } }, - "convert-source-map": { + "node_modules/convert-source-map": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "~5.1.1" } }, - "copy-descriptor": { + "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "copy-props": { + "node_modules/copy-props": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", "dev": true, - "requires": { + "dependencies": { "each-props": "^1.3.2", "is-plain-object": "^5.0.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } } }, - "core-util-is": { + "node_modules/copy-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, - "countries-and-timezones": { + "node_modules/countries-and-timezones": { "version": "3.5.1", "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.5.1.tgz", - "integrity": "sha512-DlsW+qxiJI6HJ83Yjjmuokgul3KKs0BmraPigFZ1sjWHPZcOTJ0LwB5iewZT9wsMAbmgGSVUdY4nZ4JnHD6NBQ==" + "integrity": "sha512-DlsW+qxiJI6HJ83Yjjmuokgul3KKs0BmraPigFZ1sjWHPZcOTJ0LwB5iewZT9wsMAbmgGSVUdY4nZ4JnHD6NBQ==", + "engines": { + "node": ">=8.x", + "npm": ">=5.x" + } }, - "cross-spawn": { + "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "requires": { + "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dependencies": { - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "requires": { - "isexe": "^2.0.0" - } - } + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "css-loader": { + "node_modules/css-loader": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.1.0", "postcss": "^8.4.19", "postcss-modules-extract-imports": "^3.0.0", @@ -2097,82 +2722,114 @@ "postcss-value-parser": "^4.2.0", "semver": "^7.3.8" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "cssesc": { + "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } }, - "csstype": { + "node_modules/csstype": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, - "d": { + "node_modules/d": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", "dev": true, - "requires": { + "dependencies": { "es5-ext": "^0.10.50", "type": "^1.0.1" } }, - "dashdash": { + "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" } }, - "dateformat": { + "node_modules/dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "debug": { + "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, - "requires": { + "dependencies": { "ms": "2.0.0" } }, - "decamelize": { + "node_modules/decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "decode-uri-component": { + "node_modules/decode-uri-component": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "decompress": { + "node_modules/decompress": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, - "requires": { + "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", "decompress-targz": "^4.0.0", @@ -2181,480 +2838,574 @@ "make-dir": "^1.0.0", "pify": "^2.3.0", "strip-dirs": "^2.0.0" + }, + "engines": { + "node": ">=4" } }, - "decompress-tar": { + "node_modules/decompress-tar": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", "dev": true, - "requires": { + "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", "tar-stream": "^1.5.2" }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tar/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "engines": { + "node": ">=4" } }, - "decompress-tarbz2": { + "node_modules/decompress-tarbz2": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", "dev": true, - "requires": { + "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", "is-stream": "^1.1.0", "seek-bzip": "^1.0.5", "unbzip2-stream": "^1.0.9" }, - "dependencies": { - "file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", - "dev": true - } + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-tarbz2/node_modules/file-type": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", + "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", + "dev": true, + "engines": { + "node": ">=4" } }, - "decompress-targz": { + "node_modules/decompress-targz": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", "dev": true, - "requires": { + "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", "is-stream": "^1.1.0" }, - "dependencies": { - "file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true - } + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-targz/node_modules/file-type": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", + "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", + "dev": true, + "engines": { + "node": ">=4" } }, - "decompress-unzip": { + "node_modules/decompress-unzip": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", "dev": true, - "requires": { + "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", "pify": "^2.3.0", "yauzl": "^2.4.2" }, - "dependencies": { - "file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true - } + "engines": { + "node": ">=4" + } + }, + "node_modules/decompress-unzip/node_modules/file-type": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", + "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "deep-is": { + "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "default-compare": { + "node_modules/default-compare": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^5.0.2" }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-compare/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "default-resolution": { + "node_modules/default-resolution": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "define-properties": { + "node_modules/define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", "dev": true, - "requires": { + "dependencies": { "object-keys": "^1.0.12" + }, + "engines": { + "node": ">= 0.4" } }, - "define-property": { + "node_modules/define-property": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, - "requires": { + "dependencies": { "is-descriptor": "^1.0.2", "isobject": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "delayed-stream": { + "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "engines": { + "node": ">=0.4.0" + } }, - "detect-file": { + "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "diagnostics": { + "node_modules/diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", "integrity": "sha512-8wn1PmdunLJ9Tqbx+Fx/ZEuHfJf4NKSN2ZBj7SJC/OWRWha843+WsTjqMe1B5E3p28jqBlp+mJ2fPVxPyNgYKQ==", - "requires": { + "dependencies": { "colorspace": "1.1.x", "enabled": "1.0.x", "kuler": "1.0.x" } }, - "diff": { + "node_modules/diff": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "dir-glob": { + "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, - "requires": { + "dependencies": { "path-type": "^4.0.0" }, - "dependencies": { - "path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "doctrine": { + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, - "requires": { + "dependencies": { "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" } }, - "dom-serializer": { + "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "requires": { + "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "domelementtype": { + "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] }, - "domhandler": { + "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "requires": { + "dependencies": { "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "domutils": { + "node_modules/domutils": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "requires": { + "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "dset": { + "node_modules/dset": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==" + "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "engines": { + "node": ">=4" + } }, - "duplexer2": { + "node_modules/duplexer2": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~1.1.9" - }, + } + }, + "node_modules/duplexer2/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", + "dev": true, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - } + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "duplexify": { + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", + "dev": true + }, + "node_modules/duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.0.0", "inherits": "^2.0.1", "readable-stream": "^2.0.0", "stream-shift": "^1.0.0" } }, - "each-props": { + "node_modules/each-props": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", "dev": true, - "requires": { + "dependencies": { "is-plain-object": "^2.0.1", "object.defaults": "^1.1.0" } }, - "ecc-jsbn": { + "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, - "requires": { + "dependencies": { "jsbn": "~0.1.0", "safer-buffer": "^2.1.0" } }, - "electron-to-chromium": { + "node_modules/electron-to-chromium": { "version": "1.4.328", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==", "dev": true }, - "emoji-regex": { + "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "enabled": { + "node_modules/enabled": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/enabled/-/enabled-1.0.2.tgz", "integrity": "sha1-ll9lE9LC0cX0ZStkouM5ZGf8L5M=", - "requires": { + "dependencies": { "env-variable": "0.0.x" } }, - "end-of-stream": { + "node_modules/end-of-stream": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { + "dependencies": { "once": "^1.4.0" } }, - "enhanced-resolve": { + "node_modules/enhanced-resolve": { "version": "5.12.0", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - } + "engines": { + "node": ">=10.13.0" } }, - "enquirer": { + "node_modules/enhanced-resolve/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, - "requires": { + "dependencies": { "ansi-colors": "^4.1.1" }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } + "engines": { + "node": ">=8.6" } }, - "entities": { + "node_modules/enquirer/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } }, - "env-variable": { + "node_modules/env-variable": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/env-variable/-/env-variable-0.0.5.tgz", "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" }, - "envinfo": { + "node_modules/envinfo": { "version": "7.8.1", "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", - "dev": true + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } }, - "error-ex": { + "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, - "requires": { + "dependencies": { "is-arrayish": "^0.2.1" } }, - "es-module-lexer": { + "node_modules/es-module-lexer": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", "dev": true }, - "es5-ext": { + "node_modules/es5-ext": { "version": "0.10.53", "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", "dev": true, - "requires": { + "dependencies": { "es6-iterator": "~2.0.3", "es6-symbol": "~3.1.3", "next-tick": "~1.0.0" } }, - "es6-iterator": { + "node_modules/es6-iterator": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, - "es6-symbol": { + "node_modules/es6-symbol": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", "dev": true, - "requires": { + "dependencies": { "d": "^1.0.1", "ext": "^1.1.2" } }, - "es6-weak-map": { + "node_modules/es6-weak-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", "dev": true, - "requires": { + "dependencies": { "d": "1", "es5-ext": "^0.10.46", "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.1" } }, - "escalade": { + "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "escape-string-regexp": { + "node_modules/escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "eslint": { + "node_modules/eslint": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", "dev": true, - "requires": { + "dependencies": { "@eslint/eslintrc": "^1.2.1", "@humanwhocodes/config-array": "^0.9.2", "ajv": "^6.10.0", @@ -2691,391 +3442,545 @@ "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", - "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - } - }, - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - }, - "glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "requires": { - "is-glob": "^4.0.3" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "eslint-scope": { + "node_modules/eslint-scope": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { + "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "eslint-utils": { + "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", "dev": true, - "requires": { + "dependencies": { "eslint-visitor-keys": "^2.0.0" }, - "dependencies": { - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true - } + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" } }, - "eslint-visitor-keys": { + "node_modules/eslint-visitor-keys": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", - "dev": true + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } }, - "eslint-webpack-plugin": { + "node_modules/eslint-webpack-plugin": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", "dev": true, - "requires": { + "dependencies": { "@types/eslint": "^7.29.0 || ^8.4.1", "jest-worker": "^28.0.2", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "schema-utils": "^4.0.0" }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/@types/eslint": { + "version": "8.4.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", + "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", + "dev": true, "dependencies": { - "@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "requires": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.3" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - } - } - }, + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { + "version": "28.1.3", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", + "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/eslint-webpack-plugin/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.8.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/schema-utils/node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/eslint-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/eslint-webpack-plugin/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } + "optional": true } } }, - "espree": { + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", + "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/eslint/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { "version": "9.3.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", "dev": true, - "requires": { + "dependencies": { "acorn": "^8.7.0", "acorn-jsx": "^5.3.1", "eslint-visitor-keys": "^3.3.0" }, - "dependencies": { - "acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "esquery": { + "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.1.0" }, - "dependencies": { - "estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true - } + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" } }, - "esrecurse": { + "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "requires": { + "dependencies": { "estraverse": "^5.2.0" }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" } }, - "estraverse": { + "node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "esutils": { + "node_modules/esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "events": { + "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "execa": { + "node_modules/execa": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, - "requires": { + "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", @@ -3086,32 +3991,45 @@ "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" }, - "dependencies": { - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true - } + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/execa/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "exenv-es6": { + "node_modules/execa/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/exenv-es6": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" }, - "expand-brackets": { + "node_modules/expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, - "requires": { + "dependencies": { "debug": "^2.3.3", "define-property": "^0.2.5", "extend-shallow": "^2.0.1", @@ -3120,91 +4038,103 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "expand-home-dir": { + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-home-dir": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", "integrity": "sha1-ct6KBIbMKKO71wRjU5iCW1tign0=" }, - "expand-tilde": { + "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, - "requires": { + "dependencies": { "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "ext": { + "node_modules/ext": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", "dev": true, - "requires": { - "type": "^2.5.0" - }, "dependencies": { - "type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - } + "type": "^2.5.0" } }, - "extend": { + "node_modules/ext/node_modules/type": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", + "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", + "dev": true + }, + "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", "dev": true }, - "extend-shallow": { + "node_modules/extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, - "requires": { + "dependencies": { "assign-symbols": "^1.0.0", "is-extendable": "^1.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "extglob": { + "node_modules/extglob": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, - "requires": { + "dependencies": { "array-unique": "^0.3.2", "define-property": "^1.0.0", "expand-brackets": "^2.1.4", @@ -3214,566 +4144,700 @@ "snapdragon": "^0.8.1", "to-regex": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "extsprintf": { + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true + "dev": true, + "engines": [ + "node >=0.6.0" + ] }, - "fancy-log": { + "node_modules/fancy-log": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", "dev": true, - "requires": { + "dependencies": { "ansi-gray": "^0.1.1", "color-support": "^1.1.3", "parse-node-version": "^1.0.0", "time-stamp": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "fast-deep-equal": { + "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "fast-glob": { + "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "requires": { + "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-glob/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/fast-glob/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/fast-glob/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/fast-glob/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "fast-json-stable-stringify": { + "node_modules/fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "fast-levenshtein": { + "node_modules/fast-levenshtein": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", "dev": true }, - "fast-safe-stringify": { + "node_modules/fast-safe-stringify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" }, - "fastest-levenshtein": { + "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", "dev": true }, - "fastq": { + "node_modules/fastq": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "dev": true, - "requires": { + "dependencies": { "reusify": "^1.0.4" } }, - "fd-slicer": { + "node_modules/fd-slicer": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", "dev": true, - "requires": { + "dependencies": { "pend": "~1.2.0" } }, - "fecha": { + "node_modules/fecha": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, - "file-entry-cache": { + "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, - "requires": { + "dependencies": { "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" } }, - "file-stream-rotator": { + "node_modules/file-stream-rotator": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", - "requires": { + "dependencies": { "moment": "^2.29.1" } }, - "file-type": { + "node_modules/file-type": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "file-uri-to-path": { + "node_modules/file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", "dev": true, "optional": true }, - "fill-range": { + "node_modules/fill-range": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "is-number": "^3.0.0", "repeat-string": "^1.6.1", "to-regex-range": "^2.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "find-up": { + "node_modules/find-up": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, - "requires": { + "dependencies": { "path-exists": "^2.0.0", "pinkie-promise": "^2.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/find-up/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, "dependencies": { - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "findup-sync": { + "node_modules/findup-sync": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", "dev": true, - "requires": { + "dependencies": { "detect-file": "^1.0.0", "is-glob": "^4.0.0", "micromatch": "^3.0.4", "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "fined": { + "node_modules/fined": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.2", "is-plain-object": "^2.0.3", "object.defaults": "^1.1.0", "object.pick": "^1.2.0", "parse-filepath": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "flagged-respawn": { + "node_modules/flagged-respawn": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "flat": { + "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true + "dev": true, + "bin": { + "flat": "cli.js" + } }, - "flat-cache": { + "node_modules/flat-cache": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", "dev": true, - "requires": { + "dependencies": { "flatted": "^3.1.0", "rimraf": "^3.0.2" }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, "dependencies": { - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - } + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "flatted": { + "node_modules/flatted": { "version": "3.2.5", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "flush-write-stream": { + "node_modules/flush-write-stream": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, - "requires": { + "dependencies": { "inherits": "^2.0.3", "readable-stream": "^2.3.6" } }, - "fmtr": { + "node_modules/fmtr": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fmtr/-/fmtr-1.1.2.tgz", "integrity": "sha512-GYZV5D+SI/2AZBWF2HHKTxdQ7fty+2C/Jq2lyTseyZ1VBkkznSE2wzlbUPAutesC0hmJFpe+KXt6mzPE7qUXiw==", - "requires": { + "dependencies": { "lodash": "^4.17.14" } }, - "follow-redirects": { + "node_modules/follow-redirects": { "version": "1.15.2", "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } }, - "for-in": { + "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "for-own": { + "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, - "requires": { + "dependencies": { "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "forever-agent": { + "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "form-data": { + "node_modules/form-data": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, - "requires": { + "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.6", "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" } }, - "fragment-cache": { + "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, - "requires": { + "dependencies": { "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "fs-constants": { + "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", "dev": true }, - "fs-extra": { + "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "requires": { + "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", "universalify": "^0.1.0" }, - "dependencies": { - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - } + "engines": { + "node": ">=6 <7 || >=8" } }, - "fs-mkdirp-stream": { + "node_modules/fs-extra/node_modules/graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + }, + "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.11", "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" } }, - "fs.realpath": { + "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, - "fsevents": { + "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "optional": true + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "fstream": { + "node_modules/fstream": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", "mkdirp": ">=0.5 0", "rimraf": "2" + }, + "engines": { + "node": ">=0.6" } }, - "function-bind": { + "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", "dev": true }, - "functional-red-black-tree": { + "node_modules/functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, - "get-caller-file": { + "node_modules/get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", "dev": true }, - "get-intrinsic": { + "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "get-stream": { + "node_modules/get-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", "dev": true, - "requires": { + "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "get-value": { + "node_modules/get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "getos": { + "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", - "requires": { - "async": "^3.2.0" - }, "dependencies": { - "async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - } + "async": "^3.2.0" } }, - "getpass": { + "node_modules/getos/node_modules/async": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", + "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + }, + "node_modules/getpass": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0" } }, - "glob": { + "node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "requires": { + "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" } }, - "glob-parent": { + "node_modules/glob-parent": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, - "requires": { + "dependencies": { "is-glob": "^3.1.0", "path-dirname": "^1.0.0" - }, + } + }, + "node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, "dependencies": { - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "glob-stream": { + "node_modules/glob-stream": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", "dev": true, - "requires": { + "dependencies": { "extend": "^3.0.0", "glob": "^7.1.1", "glob-parent": "^3.1.0", @@ -3784,20 +4848,23 @@ "remove-trailing-separator": "^1.0.1", "to-absolute-glob": "^2.0.0", "unique-stream": "^2.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "glob-to-regexp": { + "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "glob-watcher": { + "node_modules/glob-watcher": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", "dev": true, - "requires": { + "dependencies": { "anymatch": "^2.0.0", "async-done": "^1.2.0", "chokidar": "^2.0.0", @@ -3806,995 +4873,1267 @@ "normalize-path": "^3.0.0", "object.defaults": "^1.1.0" }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/glob-watcher/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, "dependencies": { - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true - }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - } - }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "requires": { - "binary-extensions": "^1.0.0" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" - } - } + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/glob-watcher/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/glob-watcher/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-watcher/node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "global-modules": { + "node_modules/glob-watcher/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, - "requires": { + "dependencies": { "global-prefix": "^1.0.1", "is-windows": "^1.0.1", "resolve-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "global-prefix": { + "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.2", "homedir-polyfill": "^1.0.1", "ini": "^1.3.4", "is-windows": "^1.0.1", "which": "^1.2.14" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/global-prefix/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "dependencies": { - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" } }, - "globals": { + "node_modules/globals": { "version": "13.13.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, - "requires": { + "dependencies": { "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "globby": { + "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "requires": { + "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "glogg": { + "node_modules/glogg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, - "requires": { + "dependencies": { "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "graceful-fs": { + "node_modules/graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "devOptional": true }, - "growl": { + "node_modules/growl": { "version": "1.10.5", "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "dev": true, + "engines": { + "node": ">=4.x" + } }, - "gulp": { + "node_modules/gulp": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", "dev": true, - "requires": { + "dependencies": { "glob-watcher": "^5.0.3", "gulp-cli": "^2.2.0", "undertaker": "^1.2.1", "vinyl-fs": "^3.0.0" }, - "dependencies": { - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - } + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" } }, - "gulp-decompress": { + "node_modules/gulp-decompress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-3.0.0.tgz", "integrity": "sha512-F7plBXKgjS2yBWRNqhLnPR5peOWbmKU1dTUHgUSATo4/Eet9FJC55S0mc13S+WptNvEx0cR8DMlFU7zGZJuYDQ==", "dev": true, - "requires": { + "dependencies": { "archive-type": "^4.0.0", "decompress": "^4.0.0", "plugin-error": "^1.0.1", "readable-stream": "^3.4.0", "vinyl": "^2.1.0" }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gulp-decompress/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gulp-download": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/gulp-download/-/gulp-download-0.0.1.tgz", + "integrity": "sha1-VKMBj8YZs0HM9kkWBvet8L08c5c=", + "dev": true, + "dependencies": { + "gulp-util": "latest", + "request": "latest", + "request-progress": "latest", + "through": "latest" + } + }, + "node_modules/gulp-download/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/gulp-download/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "dev": true + }, + "node_modules/gulp-download/node_modules/gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", + "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", + "dev": true, + "dependencies": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/gulp-download/node_modules/lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", + "dev": true, + "dependencies": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "node_modules/gulp-download/node_modules/object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gulp-download/node_modules/replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gulp-download/node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gulp-download/node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/gulp-download/node_modules/vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", + "dev": true, + "dependencies": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + }, + "engines": { + "node": ">= 0.9" } }, - "gulp-download": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/gulp-download/-/gulp-download-0.0.1.tgz", - "integrity": "sha1-VKMBj8YZs0HM9kkWBvet8L08c5c=", + "node_modules/gulp/node_modules/gulp-cli": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", + "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", "dev": true, - "requires": { - "gulp-util": "^3.0.8", - "request": "^2.88.2", - "request-progress": "^3.0.0", - "through": "^2.3.8" - }, "dependencies": { - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true - }, - "clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", - "dev": true, - "requires": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - } - }, - "lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", - "dev": true, - "requires": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", - "dev": true - }, - "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, - "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", - "dev": true, - "requires": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" - } - } + "ansi-colors": "^1.0.1", + "archy": "^1.0.0", + "array-sort": "^1.0.0", + "color-support": "^1.1.3", + "concat-stream": "^1.6.0", + "copy-props": "^2.0.1", + "fancy-log": "^1.3.2", + "gulplog": "^1.0.0", + "interpret": "^1.4.0", + "isobject": "^3.0.1", + "liftoff": "^3.1.0", + "matchdep": "^2.0.0", + "mute-stdout": "^1.0.0", + "pretty-hrtime": "^1.0.0", + "replace-homedir": "^1.0.0", + "semver-greatest-satisfied-range": "^1.1.0", + "v8flags": "^3.2.0", + "yargs": "^7.1.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">= 0.10" } }, - "gulplog": { + "node_modules/gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, - "requires": { + "dependencies": { "glogg": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "har-schema": { + "node_modules/har-schema": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "har-validator": { + "node_modules/har-validator": { "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", "dev": true, - "requires": { + "dependencies": { "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" } }, - "has": { + "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", "dev": true, - "requires": { + "dependencies": { "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" } }, - "has-ansi": { + "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-flag": { + "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "has-gulplog": { + "node_modules/has-gulplog": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", "dev": true, - "requires": { + "dependencies": { "sparkles": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "has-symbols": { + "node_modules/has-symbols": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "has-value": { + "node_modules/has-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, - "requires": { + "dependencies": { "get-value": "^2.0.6", "has-values": "^1.0.0", "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "has-values": { + "node_modules/has-values": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, - "requires": { + "dependencies": { "is-number": "^3.0.0", "kind-of": "^4.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "he": { + "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true + "dev": true, + "bin": { + "he": "bin/he" + } }, - "homedir-polyfill": { + "node_modules/homedir-polyfill": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", "dev": true, - "requires": { + "dependencies": { "parse-passwd": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "hosted-git-info": { + "node_modules/hosted-git-info": { "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, - "htmlparser2": { + "node_modules/htmlparser2": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", "integrity": "sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w==", - "requires": { + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.4.4", "entities": "^2.0.0" } }, - "http-signature": { + "node_modules/http-signature": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, - "requires": { + "dependencies": { "assert-plus": "^1.0.0", "jsprim": "^1.2.2", "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" } }, - "human-signals": { + "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true + "dev": true, + "engines": { + "node": ">=10.17.0" + } }, - "icss-utils": { + "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", - "dev": true + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "ieee754": { + "node_modules/ieee754": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", "dev": true }, - "ignore": { + "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 4" + } }, - "import-fresh": { + "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { + "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" } }, - "import-local": { + "node_modules/import-local": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", "dev": true, - "requires": { + "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" } }, - "imurmurhash": { + "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.19" + } }, - "inflight": { + "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { + "dependencies": { "once": "^1.3.0", "wrappy": "1" } }, - "inherits": { + "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, - "ini": { + "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "interpret": { + "node_modules/interpret": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "invert-kv": { + "node_modules/invert-kv": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-absolute": { + "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, - "requires": { + "dependencies": { "is-relative": "^1.0.0", "is-windows": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-accessor-descriptor": { + "node_modules/is-accessor-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, - "is-binary-path": { + "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "requires": { + "dependencies": { "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "is-buffer": { + "node_modules/is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", "dev": true }, - "is-core-module": { + "node_modules/is-core-module": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", "dev": true, - "requires": { + "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-data-descriptor": { + "node_modules/is-data-descriptor": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-descriptor": { + "node_modules/is-descriptor": { "version": "0.1.6", "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, - "requires": { + "dependencies": { "is-accessor-descriptor": "^0.1.6", "is-data-descriptor": "^0.1.4", "kind-of": "^5.0.0" }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "is-extendable": { + "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } }, - "is-fullwidth-code-point": { + "node_modules/is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, - "requires": { + "dependencies": { "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "requires": { + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-natural-number": { + "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", "dev": true }, - "is-negated-glob": { + "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-number": { + "node_modules/is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-plain-obj": { + "node_modules/is-plain-obj": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "is-plain-object": { + "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-relative": { + "node_modules/is-relative": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, - "requires": { + "dependencies": { "is-unc-path": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-stream": { + "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "engines": { + "node": ">=0.10.0" + } }, - "is-typedarray": { + "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", "dev": true }, - "is-unc-path": { + "node_modules/is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, - "requires": { + "dependencies": { "unc-path-regex": "^0.1.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-unicode-supported": { + "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-utf8": { + "node_modules/is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, - "is-valid-glob": { + "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-windows": { + "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "isarray": { + "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, - "isexe": { + "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isobject": { + "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "isstream": { + "node_modules/isstream": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, - "jdk-utils": { + "node_modules/jdk-utils": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.1.tgz", - "integrity": "sha512-BEQZ4JOmnWvZtuda+CRaCj8WbcgUs4RPZ07ZaM5bei+iFtx8fWrF0NpXDe3zM1k4SQajjYQ9zFc1/PhYT1Z6Og==" + "integrity": "sha512-BEQZ4JOmnWvZtuda+CRaCj8WbcgUs4RPZ07ZaM5bei+iFtx8fWrF0NpXDe3zM1k4SQajjYQ9zFc1/PhYT1Z6Og==", + "bin": { + "jdk-utils": "bin/cli.js" + } }, - "jest-worker": { + "node_modules/jest-worker": { "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "requires": { + "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^8.0.0" }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "js-tokens": { + "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, - "js-yaml": { + "node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, - "requires": { + "dependencies": { "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "jsbn": { + "node_modules/jsbn": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", "dev": true }, - "json-parse-even-better-errors": { + "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "json-schema": { + "node_modules/json-schema": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, - "json-schema-traverse": { + "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "dev": true }, - "json-stable-stringify-without-jsonify": { + "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "json-stringify-safe": { + "node_modules/json-stringify-safe": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "jsonfile": { + "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "requires": { + "optionalDependencies": { "graceful-fs": "^4.1.6" } }, - "jsprim": { + "node_modules/jsprim": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, - "requires": { + "dependencies": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", "json-schema": "0.4.0", "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" } }, - "just-debounce": { + "node_modules/just-debounce": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", "dev": true }, - "just-extend": { + "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", "dev": true }, - "kind-of": { + "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "kuler": { + "node_modules/kuler": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/kuler/-/kuler-1.0.1.tgz", "integrity": "sha512-J9nVUucG1p/skKul6DU3PUZrhs0LPulNaeUOox0IyXDi8S4CztTHs1gQphhuZmzXG7VOQSf6NJfKuzteQLv9gQ==", - "requires": { + "dependencies": { "colornames": "^1.1.1" } }, - "last-run": { + "node_modules/last-run": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", "dev": true, - "requires": { + "dependencies": { "default-resolution": "^2.0.0", "es6-weak-map": "^2.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "lazystream": { + "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" } }, - "lcid": { + "node_modules/lcid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", "dev": true, - "requires": { + "dependencies": { "invert-kv": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "lead": { + "node_modules/lead": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", "dev": true, - "requires": { + "dependencies": { "flush-write-stream": "^1.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "levn": { + "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "liftoff": { + "node_modules/liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", "dev": true, - "requires": { + "dependencies": { "extend": "^3.0.0", "findup-sync": "^3.0.0", "fined": "^1.0.1", @@ -4803,389 +6142,457 @@ "object.map": "^1.0.0", "rechoir": "^0.6.2", "resolve": "^1.1.7" + }, + "engines": { + "node": ">= 0.8" } }, - "listenercount": { + "node_modules/listenercount": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", "dev": true }, - "load-json-file": { + "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", "pify": "^2.0.0", "pinkie-promise": "^2.0.0", "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "loader-runner": { + "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "dev": true + "dev": true, + "engines": { + "node": ">=6.11.5" + } }, - "locate-path": { + "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "requires": { + "dependencies": { "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "lodash": { + "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash._basecopy": { + "node_modules/lodash._basecopy": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", "dev": true }, - "lodash._basetostring": { + "node_modules/lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", "dev": true }, - "lodash._basevalues": { + "node_modules/lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", "dev": true }, - "lodash._getnative": { + "node_modules/lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", "dev": true }, - "lodash._isiterateecall": { + "node_modules/lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", "dev": true }, - "lodash._reescape": { + "node_modules/lodash._reescape": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", "dev": true }, - "lodash._reevaluate": { + "node_modules/lodash._reevaluate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", "dev": true }, - "lodash._reinterpolate": { + "node_modules/lodash._reinterpolate": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", "dev": true }, - "lodash._root": { + "node_modules/lodash._root": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", "dev": true }, - "lodash.escape": { + "node_modules/lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, - "requires": { + "dependencies": { "lodash._root": "^3.0.0" } }, - "lodash.findindex": { + "node_modules/lodash.findindex": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", "integrity": "sha1-oyRd7mH7m24GJLU1ElYku2nBEQY=", "dev": true }, - "lodash.get": { + "node_modules/lodash.get": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", "dev": true }, - "lodash.isarguments": { + "node_modules/lodash.isarguments": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", "dev": true }, - "lodash.isarray": { + "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", "dev": true }, - "lodash.keys": { + "node_modules/lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, - "requires": { + "dependencies": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", "lodash.isarray": "^3.0.0" } }, - "lodash.merge": { + "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "lodash.restparam": { + "node_modules/lodash.restparam": { "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", "dev": true }, - "lodash.template": { + "node_modules/lodash.template": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", "dev": true, - "requires": { + "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.templatesettings": "^4.0.0" - }, + } + }, + "node_modules/lodash.template/node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, "dependencies": { - "lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "requires": { - "lodash._reinterpolate": "^3.0.0" - } - } + "lodash._reinterpolate": "^3.0.0" } }, - "lodash.templatesettings": { + "node_modules/lodash.templatesettings": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, - "requires": { + "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.escape": "^3.0.0" } }, - "log-symbols": { + "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "requires": { + "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "logform": { + "node_modules/logform": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/logform/-/logform-2.1.2.tgz", "integrity": "sha512-+lZh4OpERDBLqjiwDLpAWNQu6KMjnlXH2ByZwCuSqVPJletw0kTWJf5CgSNAUKn1KUkv3m2cUz/LK8zyEy7wzQ==", - "requires": { + "dependencies": { "colors": "^1.2.1", "fast-safe-stringify": "^2.0.4", "fecha": "^2.3.3", "ms": "^2.1.1", "triple-beam": "^1.3.0" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } }, - "loose-envify": { + "node_modules/logform/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "requires": { + "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" } }, - "lru-cache": { + "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { + "dependencies": { "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "make-dir": { + "node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, - "requires": { + "dependencies": { "pify": "^3.0.0" }, - "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - } + "engines": { + "node": ">=4" + } + }, + "node_modules/make-dir/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true, + "engines": { + "node": ">=4" } }, - "make-iterator": { + "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "map-age-cleaner": { + "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { + "dependencies": { "p-defer": "^1.0.0" + }, + "engines": { + "node": ">=6" } }, - "map-cache": { + "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "map-visit": { + "node_modules/map-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, - "requires": { + "dependencies": { "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "matchdep": { + "node_modules/matchdep": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", "dev": true, - "requires": { + "dependencies": { "findup-sync": "^2.0.0", "micromatch": "^3.0.4", "resolve": "^1.4.0", "stack-trace": "0.0.10" }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/matchdep/node_modules/findup-sync": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", + "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", + "dev": true, "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/matchdep/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "mem": { + "node_modules/mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", - "requires": { + "dependencies": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^2.1.0", "p-is-promise": "^2.1.0" + }, + "engines": { + "node": ">=8" } }, - "merge-stream": { + "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "merge2": { + "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 8" + } }, - "micromatch": { + "node_modules/micromatch": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, - "requires": { + "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "braces": "^2.3.1", @@ -5199,76 +6606,98 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "mime-db": { + "node_modules/mime-db": { "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } }, - "mime-types": { + "node_modules/mime-types": { "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "requires": { + "dependencies": { "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" } }, - "mimic-fn": { + "node_modules/mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } }, - "minimatch": { + "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { + "dependencies": { "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "minimist": { + "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "mixin-deep": { + "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, - "requires": { + "dependencies": { "for-in": "^1.0.2", "is-extendable": "^1.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" } }, - "mkdirp": { + "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "requires": { + "dependencies": { "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "mocha": { + "node_modules/mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", "dev": true, - "requires": { + "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", "browser-stdout": "1.3.1", @@ -5294,253 +6723,350 @@ "yargs-parser": "20.2.4", "yargs-unparser": "2.0.0" }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "requires": { - "ms": "2.1.2" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "dependencies": { - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/mocha/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/mocha/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true + "optional": true } } }, - "moment": { + "node_modules/mocha/node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mocha/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mocha/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/minimatch": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", + "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/mocha/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/mocha/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/moment": { "version": "2.29.4", "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } }, - "ms": { + "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, - "multipipe": { + "node_modules/multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", "dev": true, - "requires": { + "dependencies": { "duplexer2": "0.0.2" } }, - "mute-stdout": { + "node_modules/mute-stdout": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "nan": { + "node_modules/nan": { "version": "2.17.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", "dev": true, "optional": true }, - "nanoid": { + "node_modules/nanoid": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } }, - "nanomatch": { + "node_modules/nanomatch": { "version": "1.2.13", "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, - "requires": { + "dependencies": { "arr-diff": "^4.0.0", "array-unique": "^0.3.2", "define-property": "^2.0.2", @@ -5552,32 +7078,35 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "natural-compare": { + "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, - "neo-async": { + "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "next-tick": { + "node_modules/next-tick": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", "dev": true }, - "nise": { + "node_modules/nise": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", "dev": true, - "requires": { + "dependencies": { "@sinonjs/commons": "^1.8.3", "@sinonjs/fake-timers": ">=5", "@sinonjs/text-encoding": "^0.7.1", @@ -5585,224 +7114,297 @@ "path-to-regexp": "^1.7.0" } }, - "node-fetch": { + "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "requires": { + "dependencies": { "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } } }, - "node-releases": { + "node_modules/node-releases": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, - "normalize-package-data": { + "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, - "requires": { + "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" - }, + } + }, + "node_modules/normalize-package-data/node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, "dependencies": { - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "normalize-path": { + "node_modules/normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, - "requires": { + "dependencies": { "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "now-and-later": { + "node_modules/now-and-later": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", "dev": true, - "requires": { + "dependencies": { "once": "^1.3.2" + }, + "engines": { + "node": ">= 0.10" } }, - "npm-run-path": { + "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "requires": { + "dependencies": { "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "number-is-nan": { + "node_modules/number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "oauth-sign": { + "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true + "dev": true, + "engines": { + "node": "*" + } }, - "object-assign": { + "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } }, - "object-copy": { + "node_modules/object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, - "requires": { + "dependencies": { "copy-descriptor": "^0.1.0", "define-property": "^0.2.5", "kind-of": "^3.0.3" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "object-hash": { + "node_modules/object-hash": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==" + "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", + "engines": { + "node": ">= 6" + } }, - "object-keys": { + "node_modules/object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.4" + } }, - "object-visit": { + "node_modules/object-visit": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.assign": { + "node_modules/object.assign": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", "dev": true, - "requires": { + "dependencies": { "call-bind": "^1.0.0", "define-properties": "^1.1.3", "has-symbols": "^1.0.1", "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "object.defaults": { + "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, - "requires": { + "dependencies": { "array-each": "^1.0.1", "array-slice": "^1.0.0", "for-own": "^1.0.0", "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.map": { + "node_modules/object.map": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, - "requires": { + "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.pick": { + "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, - "requires": { + "dependencies": { "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "object.reduce": { + "node_modules/object.reduce": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", "dev": true, - "requires": { + "dependencies": { "for-own": "^1.0.0", "make-iterator": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "once": { + "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { + "dependencies": { "wrappy": "1" } }, - "one-time": { + "node_modules/one-time": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/one-time/-/one-time-0.0.4.tgz", "integrity": "sha1-+M33eISCb+Tf+T46nMN7HkSAdC4=" }, - "onetime": { + "node_modules/onetime": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "requires": { + "dependencies": { "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "optionator": { + "node_modules/optionator": { "version": "0.9.1", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", "dev": true, - "requires": { + "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", @@ -5810,493 +7412,684 @@ "type-check": "^0.4.0", "word-wrap": "^1.2.3" }, - "dependencies": { - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - } + "engines": { + "node": ">= 0.8.0" } }, - "ordered-read-streams": { + "node_modules/optionator/node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/ordered-read-streams": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", "dev": true, - "requires": { + "dependencies": { "readable-stream": "^2.0.1" } }, - "os-locale": { + "node_modules/os-locale": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", "dev": true, - "requires": { + "dependencies": { "lcid": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "p-defer": { + "node_modules/p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==" + "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "engines": { + "node": ">=4" + } }, - "p-is-promise": { + "node_modules/p-is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "engines": { + "node": ">=6" + } }, - "p-limit": { + "node_modules/p-limit": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "requires": { + "dependencies": { "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-locate": { + "node_modules/p-locate": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { + "dependencies": { "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "p-try": { + "node_modules/p-try": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "parent-module": { + "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, - "requires": { + "dependencies": { "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "parse-filepath": { + "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, - "requires": { + "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", "path-root": "^0.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "parse-json": { + "node_modules/parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, - "requires": { + "dependencies": { "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "parse-node-version": { + "node_modules/parse-node-version": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", "integrity": "sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "parse-passwd": { + "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pascalcase": { + "node_modules/pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-dirname": { + "node_modules/path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", "dev": true }, - "path-exists": { + "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "path-is-absolute": { + "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "engines": { + "node": ">=0.10.0" + } }, - "path-key": { + "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } }, - "path-parse": { + "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "path-root": { + "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, - "requires": { + "dependencies": { "path-root-regex": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "path-root-regex": { + "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "path-to-regexp": { + "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", "dev": true, - "requires": { - "isarray": "0.0.1" - }, "dependencies": { - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - } + "isarray": "0.0.1" } }, - "path-type": { + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/path-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, - "requires": { + "dependencies": { "graceful-fs": "^4.1.2", "pify": "^2.0.0", "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "pend": { + "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", "dev": true }, - "performance-now": { + "node_modules/performance-now": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, - "picocolors": { + "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", "dev": true }, - "picomatch": { + "node_modules/picomatch": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==" + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "pify": { + "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie": { + "node_modules/pinkie": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "pinkie-promise": { + "node_modules/pinkie-promise": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, - "requires": { + "dependencies": { "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "pkg-dir": { + "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { + "dependencies": { "find-up": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "plugin-error": { + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/plugin-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", "dev": true, - "requires": { + "dependencies": { "ansi-colors": "^1.0.1", "arr-diff": "^4.0.0", "arr-union": "^3.1.0", "extend-shallow": "^3.0.2" + }, + "engines": { + "node": ">= 0.10" } }, - "posix-character-classes": { + "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "postcss": { + "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" }, - "dependencies": { - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - } + "engines": { + "node": "^10 || ^12 || >=14" } }, - "postcss-modules-extract-imports": { + "node_modules/postcss-modules-extract-imports": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", - "dev": true + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } }, - "postcss-modules-local-by-default": { + "node_modules/postcss-modules-local-by-default": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.0.0", "postcss-selector-parser": "^6.0.2", "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-scope": { + "node_modules/postcss-modules-scope": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", "dev": true, - "requires": { + "dependencies": { "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-modules-values": { + "node_modules/postcss-modules-values": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", "dev": true, - "requires": { + "dependencies": { "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" } }, - "postcss-selector-parser": { + "node_modules/postcss-selector-parser": { "version": "6.0.11", "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", "dev": true, - "requires": { + "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" } }, - "postcss-value-parser": { + "node_modules/postcss-value-parser": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "prelude-ls": { + "node_modules/postcss/node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8.0" + } }, - "pretty-hrtime": { + "node_modules/pretty-hrtime": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.8" + } }, - "process-nextick-args": { + "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "proxy-from-env": { + "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "psl": { + "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "pump": { + "node_modules/pump": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, - "requires": { + "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } }, - "pumpify": { + "node_modules/pumpify": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, - "requires": { + "dependencies": { "duplexify": "^3.6.0", "inherits": "^2.0.3", "pump": "^2.0.0" } }, - "punycode": { + "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "qs": { + "node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.6" + } }, - "queue-microtask": { + "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "randombytes": { + "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.1.0" } }, - "react": { + "node_modules/react": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz", "integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "react-dom": { + "node_modules/react-dom": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz", "integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1", "scheduler": "^0.20.2" + }, + "peerDependencies": { + "react": "17.0.2" } }, - "read-pkg": { + "node_modules/read-pkg": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, - "requires": { + "dependencies": { "load-json-file": "^1.0.0", "normalize-package-data": "^2.3.2", "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "read-pkg-up": { + "node_modules/read-pkg-up": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, - "requires": { + "dependencies": { "find-up": "^1.0.0", "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "readable-stream": { + "node_modules/readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "requires": { + "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", @@ -6304,110 +8097,142 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" - }, - "dependencies": { - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - } } }, - "readdirp": { + "node_modules/readable-stream/node_modules/process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "requires": { + "dependencies": { "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" } }, - "rechoir": { + "node_modules/rechoir": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, - "requires": { + "dependencies": { "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" } }, - "regex-not": { + "node_modules/regex-not": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "regexpp": { + "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } }, - "remove-bom-buffer": { + "node_modules/remove-bom-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", "dev": true, - "requires": { + "dependencies": { "is-buffer": "^1.1.5", "is-utf8": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "remove-bom-stream": { + "node_modules/remove-bom-stream": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", "dev": true, - "requires": { + "dependencies": { "remove-bom-buffer": "^3.0.0", "safe-buffer": "^5.1.0", "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" } }, - "remove-trailing-separator": { + "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "repeat-element": { + "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "repeat-string": { + "node_modules/repeat-string": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10" + } }, - "replace-ext": { + "node_modules/replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "replace-homedir": { + "node_modules/replace-homedir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", "dev": true, - "requires": { + "dependencies": { "homedir-polyfill": "^1.0.1", "is-absolute": "^1.0.0", "remove-trailing-separator": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" } }, - "request": { + "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, - "requires": { + "dependencies": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", "caseless": "~0.12.0", @@ -6428,285 +8253,364 @@ "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" } }, - "request-progress": { + "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", "dev": true, - "requires": { + "dependencies": { "throttleit": "^1.0.0" } }, - "require-directory": { + "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-from-string": { + "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "require-main-filename": { + "node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", "dev": true }, - "resolve": { + "node_modules/resolve": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", "dev": true, - "requires": { + "dependencies": { "path-parse": "^1.0.5" } }, - "resolve-cwd": { + "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, - "requires": { + "dependencies": { "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" } }, - "resolve-dir": { + "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, - "requires": { + "dependencies": { "expand-tilde": "^2.0.0", "global-modules": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "resolve-from": { + "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "resolve-options": { + "node_modules/resolve-options": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", "dev": true, - "requires": { + "dependencies": { "value-or-function": "^3.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "resolve-url": { + "node_modules/resolve-url": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, - "ret": { + "node_modules/ret": { "version": "0.1.15", "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.12" + } }, - "reusify": { + "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } }, - "rimraf": { + "node_modules/rimraf": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "dev": true, - "requires": { + "dependencies": { "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" } }, - "run-parallel": { + "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, - "requires": { + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { "queue-microtask": "^1.2.2" } }, - "safe-buffer": { + "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "safe-regex": { + "node_modules/safe-regex": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, - "requires": { + "dependencies": { "ret": "~0.1.10" } }, - "safe-stable-stringify": { + "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==" + "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "engines": { + "node": ">=10" + } }, - "safer-buffer": { + "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, - "scheduler": { + "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", "integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==", - "requires": { + "dependencies": { "loose-envify": "^1.1.0", "object-assign": "^4.1.1" } }, - "schema-utils": { + "node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", "dev": true, - "requires": { + "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", "ajv-keywords": "^3.5.2" }, - "dependencies": { - "@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - } + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "seek-bzip": { + "node_modules/schema-utils/node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, - "requires": { + "dependencies": { "commander": "^2.8.1" + }, + "bin": { + "seek-bunzip": "bin/seek-bunzip", + "seek-table": "bin/seek-bzip-table" } }, - "semver": { + "node_modules/semver": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "requires": { + "dependencies": { "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "semver-greatest-satisfied-range": { + "node_modules/semver-greatest-satisfied-range": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", "dev": true, - "requires": { + "dependencies": { "sver-compat": "^1.5.0" + }, + "engines": { + "node": ">= 0.10" } }, - "serialize-javascript": { + "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", "dev": true, - "requires": { + "dependencies": { "randombytes": "^2.1.0" } }, - "set-blocking": { + "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", "dev": true }, - "set-value": { + "node_modules/set-value": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^2.0.1", "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "setimmediate": { + "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "shallow-clone": { + "node_modules/shallow-clone": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "shebang-command": { + "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "requires": { + "dependencies": { "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "shebang-regex": { + "node_modules/shebang-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } }, - "signal-exit": { + "node_modules/signal-exit": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, - "simple-swizzle": { + "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", - "requires": { - "is-arrayish": "^0.3.1" - }, "dependencies": { - "is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - } + "is-arrayish": "^0.3.1" } }, - "sinon": { + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/sinon": { "version": "14.0.0", "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", + "deprecated": "16.1.1", "dev": true, - "requires": { + "dependencies": { "@sinonjs/commons": "^1.8.3", "@sinonjs/fake-timers": "^9.1.2", "@sinonjs/samsam": "^6.1.1", @@ -6714,42 +8618,56 @@ "nise": "^5.1.1", "supports-color": "^7.2.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/diff": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", + "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/sinon/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "slash": { + "node_modules/slash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + } }, - "snapdragon": { + "node_modules/snapdragon": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, - "requires": { + "dependencies": { "base": "^0.11.1", "debug": "^2.2.0", "define-property": "^0.2.5", @@ -6759,116 +8677,147 @@ "source-map-resolve": "^0.5.0", "use": "^3.1.0" }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "engines": { + "node": ">=0.10.0" } }, - "snapdragon-node": { + "node_modules/snapdragon-node": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, - "requires": { + "dependencies": { "define-property": "^1.0.0", "isobject": "^3.0.0", "snapdragon-util": "^3.0.1" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "snapdragon-util": { + "node_modules/snapdragon-util": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.2.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "source-map": { + "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-js": { + "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "source-map-resolve": { + "node_modules/source-map-resolve": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", "dev": true, - "requires": { + "dependencies": { "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", @@ -6876,83 +8825,91 @@ "urix": "^0.1.0" } }, - "source-map-support": { + "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { + "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } } }, - "source-map-url": { + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "sparkles": { + "node_modules/sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "spdx-correct": { + "node_modules/spdx-correct": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, - "requires": { + "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-exceptions": { + "node_modules/spdx-exceptions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, - "spdx-expression-parse": { + "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, - "requires": { + "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, - "spdx-license-ids": { + "node_modules/spdx-license-ids": { "version": "3.0.10", "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", "dev": true }, - "split-string": { + "node_modules/split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, - "requires": { + "dependencies": { "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "sshpk": { + "node_modules/sshpk": { "version": "1.16.1", "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, - "requires": { + "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", "bcrypt-pbkdf": "^1.0.0", @@ -6962,142 +8919,191 @@ "jsbn": "~0.1.0", "safer-buffer": "^2.0.2", "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" } }, - "stack-trace": { + "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=" + "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", + "engines": { + "node": "*" + } }, - "static-extend": { + "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, - "requires": { + "dependencies": { "define-property": "^0.2.5", "object-copy": "^0.1.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "stream-exhaust": { + "node_modules/stream-exhaust": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "stream-shift": { + "node_modules/stream-shift": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, - "string-width": { + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, - "requires": { + "dependencies": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, - "requires": { + "dependencies": { "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-bom": { + "node_modules/strip-bom": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, - "requires": { + "dependencies": { "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "strip-dirs": { + "node_modules/strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", "dev": true, - "requires": { + "dependencies": { "is-natural-number": "^4.0.1" } }, - "strip-final-newline": { + "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "engines": { + "node": ">=6" + } }, - "strip-json-comments": { + "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "style-loader": { + "node_modules/style-loader": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true + "dev": true, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } }, - "supports-color": { + "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.8.0" + } }, - "sver-compat": { + "node_modules/sver-compat": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", "dev": true, - "requires": { + "dependencies": { "es6-iterator": "^2.0.1", "es6-symbol": "^3.1.1" } }, - "tabbable": { + "node_modules/tabbable": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" }, - "tapable": { + "node_modules/tapable": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=6" + } }, - "tar-stream": { + "node_modules/tar-stream": { "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, - "requires": { + "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", "end-of-stream": "^1.0.0", @@ -7105,379 +9111,514 @@ "readable-stream": "^2.3.0", "to-buffer": "^1.1.1", "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.8.0" } }, - "terser": { + "node_modules/terser": { "version": "5.16.6", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/source-map": "^0.3.2", "acorn": "^8.5.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "terser-webpack-plugin": { + "node_modules/terser-webpack-plugin": { "version": "5.3.7", "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", "dev": true, - "requires": { + "dependencies": { "@jridgewell/trace-mapping": "^0.3.17", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", "terser": "^5.16.5" }, - "dependencies": { - "serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true } } }, - "text-hex": { + "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "text-table": { + "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "throttleit": { + "node_modules/throttleit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", "dev": true }, - "through": { + "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", "dev": true }, - "through2": { + "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, - "requires": { + "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, - "through2-filter": { + "node_modules/through2-filter": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", "dev": true, - "requires": { + "dependencies": { "through2": "~2.0.0", "xtend": "~4.0.0" } }, - "time-stamp": { + "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "to-absolute-glob": { + "node_modules/to-absolute-glob": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", "dev": true, - "requires": { + "dependencies": { "is-absolute": "^1.0.0", "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-buffer": { + "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, - "to-object-path": { + "node_modules/to-object-path": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, - "requires": { + "dependencies": { "kind-of": "^3.0.2" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-regex": { + "node_modules/to-regex": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, - "requires": { + "dependencies": { "define-property": "^2.0.2", "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, - "requires": { + "dependencies": { "is-number": "^3.0.0", "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "to-through": { + "node_modules/to-through": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", "dev": true, - "requires": { + "dependencies": { "through2": "^2.0.3" + }, + "engines": { + "node": ">= 0.10" } }, - "tough-cookie": { + "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, - "requires": { + "dependencies": { "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" } }, - "tr46": { + "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "traverse": { + "node_modules/traverse": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/triple-beam": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", + "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + }, + "node_modules/ts-loader": { + "version": "9.4.2", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", + "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" + } + }, + "node_modules/ts-loader/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ts-loader/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ts-loader/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" + "node_modules/ts-loader/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/ts-loader/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ts-loader/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "ts-loader": { - "version": "9.4.2", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", - "integrity": "sha512-OmlC4WVmFv5I0PpaxYb+qGeGOdm5giHU7HwDDUjw59emP2UYMHy9fFSDcYgSNoH8sXcj4hGCSEhlDZ9ULeDraA==", + "node_modules/ts-loader/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, - "requires": { - "chalk": "^4.1.0", - "enhanced-resolve": "^5.0.0", - "micromatch": "^4.0.0", - "semver": "^7.3.4" + "dependencies": { + "has-flag": "^4.0.0" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-loader/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - } + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tslib": { + "node_modules/tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "tunnel-agent": { + "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, - "requires": { + "dependencies": { "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" } }, - "tweetnacl": { + "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "type": { + "node_modules/type": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", "dev": true }, - "type-check": { + "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, - "requires": { + "dependencies": { "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" } }, - "type-detect": { + "node_modules/type-detect": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true + "dev": true, + "engines": { + "node": ">=4" + } }, - "type-fest": { + "node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "typedarray": { + "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, - "typescript": { + "node_modules/typescript": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", - "dev": true + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, - "ua-parser-js": { + "node_modules/ua-parser-js": { "version": "1.0.33", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", - "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==" + "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } }, - "unbzip2-stream": { + "node_modules/unbzip2-stream": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, - "requires": { + "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, - "unc-path-regex": { + "node_modules/unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "undertaker": { + "node_modules/undertaker": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", "dev": true, - "requires": { + "dependencies": { "arr-flatten": "^1.0.1", "arr-map": "^2.0.0", "bach": "^1.0.0", @@ -7488,87 +9629,113 @@ "object.defaults": "^1.0.0", "object.reduce": "^1.0.0", "undertaker-registry": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "undertaker-registry": { + "node_modules/undertaker-registry": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", "dev": true }, - "union-value": { + "node_modules/union-value": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, - "requires": { + "dependencies": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "unique-stream": { + "node_modules/unique-stream": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", "dev": true, - "requires": { + "dependencies": { "json-stable-stringify-without-jsonify": "^1.0.1", "through2-filter": "^3.0.0" } }, - "universalify": { + "node_modules/universalify": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "engines": { + "node": ">= 4.0.0" + } }, - "unset-value": { + "node_modules/unset-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, - "requires": { + "dependencies": { "has-value": "^0.3.1", "isobject": "^3.0.0" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "unzipper": { + "node_modules/unzipper": { "version": "0.10.11", "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", "dev": true, - "requires": { + "dependencies": { "big-integer": "^1.6.17", "binary": "~0.3.0", "bluebird": "~3.4.1", @@ -7579,135 +9746,173 @@ "listenercount": "~1.0.1", "readable-stream": "~2.3.6", "setimmediate": "~1.0.4" - }, + } + }, + "node_modules/unzipper/node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "dev": true, "dependencies": { - "duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "requires": { - "readable-stream": "^2.0.2" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - } + "readable-stream": "^2.0.2" } }, - "upath": { + "node_modules/unzipper/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } }, - "update-browserslist-db": { + "node_modules/update-browserslist-db": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", "dev": true, - "requires": { + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { "escalade": "^3.1.1", "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" } }, - "uri-js": { + "node_modules/uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, - "requires": { + "dependencies": { "punycode": "^2.1.0" } }, - "urix": { + "node_modules/urix": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, - "use": { + "node_modules/use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "util-deprecate": { + "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "uuid": { + "node_modules/uuid": { "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } }, - "v8-compile-cache": { + "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "v8flags": { + "node_modules/v8flags": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", "dev": true, - "requires": { + "dependencies": { "homedir-polyfill": "^1.0.1" + }, + "engines": { + "node": ">= 0.10" } }, - "validate-npm-package-license": { + "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, - "requires": { + "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, - "value-or-function": { + "node_modules/value-or-function": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true + "dev": true, + "engines": { + "node": ">= 0.10" + } }, - "verror": { + "node_modules/verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, - "requires": { + "engines": [ + "node >=0.6.0" + ], + "dependencies": { "assert-plus": "^1.0.0", "core-util-is": "1.0.2", "extsprintf": "^1.2.0" } }, - "vinyl": { + "node_modules/vinyl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", "dev": true, - "requires": { + "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", "clone-stats": "^1.0.0", "cloneable-readable": "^1.0.0", "remove-trailing-separator": "^1.0.1", "replace-ext": "^1.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "vinyl-fs": { + "node_modules/vinyl-fs": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", "dev": true, - "requires": { + "dependencies": { "fs-mkdirp-stream": "^1.0.0", "glob-stream": "^6.1.0", "graceful-fs": "^4.0.0", @@ -7725,14 +9930,17 @@ "value-or-function": "^3.0.0", "vinyl": "^2.0.0", "vinyl-sourcemap": "^1.1.0" + }, + "engines": { + "node": ">= 0.10" } }, - "vinyl-sourcemap": { + "node_modules/vinyl-sourcemap": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", "dev": true, - "requires": { + "dependencies": { "append-buffer": "^1.0.2", "convert-source-map": "^1.5.0", "graceful-fs": "^4.1.6", @@ -7740,84 +9948,103 @@ "now-and-later": "^2.0.0", "remove-bom-buffer": "^3.0.0", "vinyl": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" } }, - "vscode-jsonrpc": { + "node_modules/vscode-jsonrpc": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==" + "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "engines": { + "node": ">=14.0.0" + } }, - "vscode-languageclient": { + "node_modules/vscode-languageclient": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", - "requires": { + "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", "vscode-languageserver-protocol": "3.17.3" }, + "engines": { + "vscode": "^1.67.0" + } + }, + "node_modules/vscode-languageclient/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dependencies": { - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "requires": { - "balanced-match": "^1.0.0" - } - }, - "minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } - } + "balanced-match": "^1.0.0" + } + }, + "node_modules/vscode-languageclient/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "vscode-languageserver-protocol": { + "node_modules/vscode-languageserver-protocol": { "version": "3.17.3", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", - "requires": { + "dependencies": { "vscode-jsonrpc": "8.1.0", "vscode-languageserver-types": "3.17.3" } }, - "vscode-languageserver-types": { + "node_modules/vscode-languageserver-types": { "version": "3.17.3", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" }, - "watchpack": { + "node_modules/watchpack": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", "dev": true, - "requires": { + "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" } }, - "webidl-conversions": { + "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, - "webpack": { + "node_modules/webpack": { "version": "5.76.0", "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", "dev": true, - "requires": { + "dependencies": { "@types/eslint-scope": "^3.7.3", "@types/estree": "^0.0.51", "@webassemblyjs/ast": "1.11.1", @@ -7843,37 +10070,28 @@ "watchpack": "^2.4.0", "webpack-sources": "^3.2.3" }, - "dependencies": { - "@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true } } }, - "webpack-cli": { + "node_modules/webpack-cli": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", "dev": true, - "requires": { + "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^1.0.2", "@webpack-cli/info": "^1.2.3", @@ -7889,96 +10107,166 @@ "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true + "@webpack-cli/migrate": { + "optional": true }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } + "webpack-bundle-analyzer": { + "optional": true }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } + "webpack-dev-server": { + "optional": true } } }, - "webpack-merge": { + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-cli/node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-cli/node_modules/rechoir": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", + "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "dev": true, + "dependencies": { + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/webpack-cli/node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/webpack-merge": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", "dev": true, - "requires": { + "dependencies": { "clone-deep": "^4.0.1", "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" } }, - "webpack-sources": { + "node_modules/webpack-sources": { "version": "3.2.3", "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/webpack/node_modules/enhanced-resolve": { + "version": "5.12.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", + "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack/node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, - "whatwg-url": { + "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "requires": { + "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, - "which": { + "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, - "requires": { + "dependencies": { "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" } }, - "which-module": { + "node_modules/which-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", "dev": true }, - "wildcard": { + "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", "dev": true }, - "winreg-utf8": { + "node_modules/winreg-utf8": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/winreg-utf8/-/winreg-utf8-0.1.1.tgz", "integrity": "sha512-A4tBCO0bx3FCA/s8RowK40h3BQhKOWRFmsn6gYrXj6WjRAbOGnNJkTOpVmtA82UeGNMtpn3Wr0TWb742C1AS+g==" }, - "winston": { + "node_modules/winston": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/winston/-/winston-3.2.1.tgz", "integrity": "sha512-zU6vgnS9dAWCEKg/QYigd6cgMVVNwyTzKs81XZtTFuRwJOcDdBg7AU0mXVyNbs7O5RH2zdv+BdNZUlx7mXPuOw==", - "requires": { + "dependencies": { "async": "^2.6.1", "diagnostics": "^1.1.1", "is-stream": "^1.1.0", @@ -7989,134 +10277,160 @@ "triple-beam": "^1.3.0", "winston-transport": "^4.3.0" }, - "dependencies": { - "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } + "engines": { + "node": ">= 6.4.0" } }, - "winston-daily-rotate-file": { + "node_modules/winston-daily-rotate-file": { "version": "4.7.1", "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", - "requires": { + "dependencies": { "file-stream-rotator": "^0.6.1", "object-hash": "^2.0.1", "triple-beam": "^1.3.0", "winston-transport": "^4.4.0" }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "winston": "^3" + } + }, + "node_modules/winston-daily-rotate-file/node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/winston-daily-rotate-file/node_modules/logform": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", + "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", "dependencies": { - "fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", - "requires": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "winston-transport": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", - "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", - "requires": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - } - } + "@colors/colors": "1.5.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" } }, - "winston-transport": { + "node_modules/winston-daily-rotate-file/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/winston-daily-rotate-file/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston-daily-rotate-file/node_modules/winston-transport": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.5.0.tgz", + "integrity": "sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston-transport": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.3.0.tgz", "integrity": "sha512-B2wPuwUi3vhzn/51Uukcao4dIduEiPOcOt9HJ3QeaXgkJ5Z7UwpBzxS4ZGNHtrxrUvTwemsQiSys0ihOf8Mp1A==", - "requires": { + "dependencies": { "readable-stream": "^2.3.6", "triple-beam": "^1.2.0" + }, + "engines": { + "node": ">= 6.4.0" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "word-wrap": { + "node_modules/word-wrap": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", - "dev": true + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "workerpool": { + "node_modules/workerpool": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", "dev": true }, - "wrap-ansi": { + "node_modules/wrap-ansi": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, - "requires": { + "dependencies": { "string-width": "^1.0.1", "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "wrappy": { + "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "xtend": { + "node_modules/xtend": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true + "dev": true, + "engines": { + "node": ">=0.4" + } }, - "y18n": { + "node_modules/y18n": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true }, - "yallist": { + "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "yargs": { + "node_modules/yargs": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^3.0.0", "cliui": "^3.2.0", "decamelize": "^1.1.1", @@ -8132,57 +10446,76 @@ "yargs-parser": "^5.0.1" } }, - "yargs-parser": { + "node_modules/yargs-parser": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^3.0.0", "object.assign": "^4.1.0" } }, - "yargs-unparser": { + "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", "dev": true, - "requires": { + "dependencies": { "camelcase": "^6.0.0", "decamelize": "^4.0.0", "flat": "^5.0.2", "is-plain-obj": "^2.1.0" }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - } + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "yauzl": { + "node_modules/yauzl": { "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", "dev": true, - "requires": { + "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } }, - "yocto-queue": { + "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } } } } diff --git a/package.json b/package.json index 4d9a16bf1..0a5d3cf03 100644 --- a/package.json +++ b/package.json @@ -1488,7 +1488,7 @@ "@types/glob": "5.0.30", "@types/lodash.findindex": "^4.6.6", "@types/mocha": "^5.2.5", - "@types/node": "^16.11.7", + "@types/node": "^18.17.1", "@types/react": "^17.0.37", "@types/react-dom": "^17.0.11", "@types/vscode-webview": "^1.57.0", From 6bb208ccbe5f6be1f7ee418ccd159f6bc426afa9 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 3 Nov 2023 12:32:05 -0400 Subject: [PATCH 399/708] Fix unix socket path for MacOS on Apple Silicon. - vscode-jsonrpc now reacts to IPC path limits on platforms - Update vscode-languageclient from 8.1.0 to 8.2.0-next.3 - Use vscode-jsonrpc 8.2.1-next.1 - Requires engine bump from 1.67 -> 1.79 Signed-off-by: Roland Grunberg --- package-lock.json | 34 +++++++++++++++++----------------- package.json | 5 ++++- src/providerDispatcher.ts | 2 +- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/package-lock.json b/package-lock.json index 24800bdc2..156b49694 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,7 +23,7 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", - "vscode-languageclient": "8.1.0", + "vscode-languageclient": "8.2.0-next.3", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.7.1" @@ -9954,24 +9954,24 @@ } }, "node_modules/vscode-jsonrpc": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.1.0.tgz", - "integrity": "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw==", + "version": "8.2.1-next.1", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1-next.1.tgz", + "integrity": "sha512-L+DYtdUtqUXGpyMgHqer6IBKvFFhl/1ToiMmCmG85LYHuuX0jllHMz77MYt0RicakoYY+Lq1yLK6Qj3YBqgzDQ==", "engines": { "node": ">=14.0.0" } }, "node_modules/vscode-languageclient": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.1.0.tgz", - "integrity": "sha512-GL4QdbYUF/XxQlAsvYWZRV3V34kOkpRlvV60/72ghHfsYFnS/v2MANZ9P6sHmxFcZKOse8O+L9G7Czg0NUWing==", + "version": "8.2.0-next.3", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-8.2.0-next.3.tgz", + "integrity": "sha512-Ojo6L2cb7GSiyD864k8vGb9fHxBdZeciHQQOF595C3IDHWg0w4KQ7iN7qGWVdl4wDNwlGTX3wWZawGfPTxnrPQ==", "dependencies": { "minimatch": "^5.1.0", "semver": "^7.3.7", - "vscode-languageserver-protocol": "3.17.3" + "vscode-languageserver-protocol": "3.17.4-next.3" }, "engines": { - "vscode": "^1.67.0" + "vscode": "^1.79.0" } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { @@ -10008,18 +10008,18 @@ } }, "node_modules/vscode-languageserver-protocol": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.3.tgz", - "integrity": "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA==", + "version": "3.17.6-next.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.1.tgz", + "integrity": "sha512-2npXUc8oe/fb9Bjcwm2HTWYZXyCbW4NTo7jkOrEciGO+/LfWbSMgqZ6PwKWgqUkgCbkPxQHNjoMqr9ol/Ehjgg==", "dependencies": { - "vscode-jsonrpc": "8.1.0", - "vscode-languageserver-types": "3.17.3" + "vscode-jsonrpc": "8.2.1-next.1", + "vscode-languageserver-types": "3.17.6-next.1" } }, "node_modules/vscode-languageserver-types": { - "version": "3.17.3", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.3.tgz", - "integrity": "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA==" + "version": "3.17.6-next.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.1.tgz", + "integrity": "sha512-7xVc/xLtNhKuCKX0mINT6mFUrUuRz0EinhwPGT8Gtsv2hlo+xJb5NKbiGailcWa1/T5e4dr5Pb2MfGchHreHAA==" }, "node_modules/watchpack": { "version": "2.4.0", diff --git a/package.json b/package.json index 0a5d3cf03..644628726 100644 --- a/package.json +++ b/package.json @@ -1533,11 +1533,14 @@ "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", - "vscode-languageclient": "8.1.0", + "vscode-languageclient": "8.2.0-next.3", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.7.1" }, + "overrides": { + "vscode-languageserver-protocol": "3.17.6-next.1" + }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" } diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index f5526ee07..e2a8da58c 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -188,7 +188,7 @@ function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { const feature = (await getActiveLanguageClient()).getFeature(WorkspaceSymbolRequest.method); const providers = feature.getProviders(); if (providers && providers.length > 0) { - feature.dispose(); + feature.clear(); const workspaceSymbolProvider = createWorkspaceSymbolProvider(providers[0]); context.subscriptions.push(languages.registerWorkspaceSymbolProvider(workspaceSymbolProvider)); disposable.dispose(); From c3c57e7e6a70dae7a94aeb9ed7404cb780fb7176 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Thu, 9 Nov 2023 00:54:28 +0100 Subject: [PATCH 400/708] Delete client log files when deleting workspace (#3374) Signed-off-by: Snjezana Peco --- src/extension.ts | 13 +++++++++---- src/utils.ts | 13 +++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index a113e1222..29f155870 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -29,7 +29,7 @@ import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; +import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; @@ -110,7 +110,12 @@ export async function activate(context: ExtensionContext): Promise if (!storagePath) { storagePath = getTempWorkspace(); } + const workspacePath = path.resolve(`${storagePath}/jdt_ws`); clientLogFile = path.join(storagePath, 'client.log'); + const cleanWorkspaceExists = fs.existsSync(path.join(workspacePath, cleanWorkspaceFileName)); + if (cleanWorkspaceExists) { + deleteClientLog(storagePath); + } initializeLogFile(clientLogFile); const telemetryService: Promise = Telemetry.startTelemetry(context); @@ -137,7 +142,6 @@ export async function activate(context: ExtensionContext): Promise }).then(async (requirements) => { const triggerFiles = await getTriggerFiles(); return new Promise(async (resolve) => { - const workspacePath = path.resolve(`${storagePath}/jdt_ws`); const syntaxServerWorkspacePath = path.resolve(`${storagePath}/ss_ws`); let serverMode = getJavaServerMode(); @@ -254,7 +258,7 @@ export async function activate(context: ExtensionContext): Promise errorHandler: new ClientErrorHandler(extensionName), initializationFailedHandler: error => { logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); - if (error.toString().includes('Connection') && error.toString().includes('disposed')) { + if ((error.toString().includes('Connection') && error.toString().includes('disposed')) || error.toString().includes('Internal error')) { if (!initFailureReported) { apiManager.fireTraceEvent({ name: "java.client.error.initialization", @@ -315,7 +319,6 @@ export async function activate(context: ExtensionContext): Promise } })); - const cleanWorkspaceExists = fs.existsSync(path.join(workspacePath, cleanWorkspaceFileName)); if (cleanWorkspaceExists) { const data = {}; try { @@ -1049,3 +1052,5 @@ function registerRestartJavaLanguageServerCommand(context: ExtensionContext) { } })); } + + diff --git a/src/utils.ts b/src/utils.ts index 61477829d..b68b010bb 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -35,6 +35,19 @@ export function deleteDirectory(dir) { } } +export function deleteClientLog(dir) { + if (fs.existsSync(dir)) { + fs.readdirSync(dir).forEach((child) => { + if (child.startsWith('client.log') || child.endsWith('audit.json')) { + const entry = path.join(dir, child); + if (!fs.lstatSync(entry).isDirectory()) { + fs.unlinkSync(entry); + } + } + }); + } +} + export function getTimestamp(file) { if (!fs.existsSync(file)) { return -1; From b62332150e2f97d0fab68f4cdf5aebd17e994ffa Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 8 Nov 2023 22:43:23 -0800 Subject: [PATCH 401/708] Add textmate definition for kotlin dsl (#3377) Signed-off-by: Sheng Chen --- .../kotlin/kotlin.tmLanguage.json | 571 ++++++++++++++++++ .../kotlin/language-configuration.json | 27 + package.json | 15 + 3 files changed, 613 insertions(+) create mode 100644 language-support/kotlin/kotlin.tmLanguage.json create mode 100644 language-support/kotlin/language-configuration.json diff --git a/language-support/kotlin/kotlin.tmLanguage.json b/language-support/kotlin/kotlin.tmLanguage.json new file mode 100644 index 000000000..eaa053b90 --- /dev/null +++ b/language-support/kotlin/kotlin.tmLanguage.json @@ -0,0 +1,571 @@ +{ + "information_for_contributors": [ + "This file has been copied from https://github.com/eclipse/buildship/blob/b848d9a08283b68860671a73ceec3c99bdab27c2/org.eclipse.buildship.kotlindsl.provider/kotlin.tmLanguage.json" + ], + "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", + "name": "Kotlin", + "scopeName": "source.kotlin", + "patterns": [ + { + "include": "#import" + }, + { + "include": "#package" + }, + { + "include": "#code" + } + ], + "fileTypes": [ + "kts" + ], + "repository": { + "import": { + "begin": "\\b(import)\\b\\s*", + "beginCaptures": { + "1": { + "name": "storage.type.import.kotlin" + } + }, + "end": ";|$", + "name": "meta.import.kotlin", + "contentName": "entity.name.package.kotlin", + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#hard-keywords" + }, + { + "match": "\\*", + "name": "variable.language.wildcard.kotlin" + } + ] + }, + "package": { + "begin": "\\b(package)\\b\\s*", + "beginCaptures": { + "1": { + "name": "storage.type.package.kotlin" + } + }, + "end": ";|$", + "name": "meta.package.kotlin", + "contentName": "entity.name.package.kotlin", + "patterns": [ + { + "include": "#comments" + } + ] + }, + "code": { + "patterns": [ + { + "include": "#comments" + }, + { + "include": "#keywords" + }, + { + "include": "#annotation-simple" + }, + { + "include": "#annotation-site-list" + }, + { + "include": "#annotation-site" + }, + { + "include": "#class-declaration" + }, + { + "include": "#object-declaration" + }, + { + "include": "#type-alias" + }, + { + "include": "#function-declaration" + }, + { + "include": "#variable-declaration" + }, + { + "include": "#type-constraint" + }, + { + "include": "#type-annotation" + }, + { + "include": "#function-call" + }, + { + "include": "#method-reference" + }, + { + "include": "#key" + }, + { + "include": "#string" + }, + { + "include": "#string-empty" + }, + { + "include": "#string-multiline" + }, + { + "include": "#character" + }, + { + "include": "#lambda-arrow" + }, + { + "include": "#operators" + }, + { + "include": "#self-reference" + }, + { + "include": "#decimal-literal" + }, + { + "include": "#hex-literal" + }, + { + "include": "#binary-literal" + }, + { + "include": "#boolean-literal" + }, + { + "include": "#null-literal" + } + ] + }, + "comments": { + "patterns": [ + { + "include": "#comment-line" + }, + { + "include": "#comment-block" + }, + { + "include": "#comment-javadoc" + } + ] + }, + "comment-line": { + "begin": "//", + "end": "$", + "name": "comment.line.double-slash.kotlin" + }, + "comment-block": { + "begin": "/\\*(?!\\*)", + "end": "\\*/", + "name": "comment.block.kotlin" + }, + "comment-javadoc": { + "patterns": [ + { + "begin": "/\\*\\*", + "end": "\\*/", + "name": "comment.block.javadoc.kotlin", + "patterns": [ + { + "match": "@(author|deprecated|return|see|serial|since|version)\\b", + "name": "keyword.other.documentation.javadoc.kotlin" + }, + { + "match": "(@param)\\s+(\\S+)", + "captures": { + "1": { + "name": "keyword.other.documentation.javadoc.kotlin" + }, + "2": { + "name": "variable.parameter.kotlin" + } + } + }, + { + "match": "(@(?:exception|throws))\\s+(\\S+)", + "captures": { + "1": { + "name": "keyword.other.documentation.javadoc.kotlin" + }, + "2": { + "name": "entity.name.type.class.kotlin" + } + } + }, + { + "match": "{(@link)\\s+(\\S+)?#([\\w$]+\\s*\\([^\\(\\)]*\\)).*}", + "captures": { + "1": { + "name": "keyword.other.documentation.javadoc.kotlin" + }, + "2": { + "name": "entity.name.type.class.kotlin" + }, + "3": { + "name": "variable.parameter.kotlin" + } + } + } + ] + } + ] + }, + "keywords": { + "patterns": [ + { + "include": "#prefix-modifiers" + }, + { + "include": "#postfix-modifiers" + }, + { + "include": "#soft-keywords" + }, + { + "include": "#hard-keywords" + }, + { + "include": "#control-keywords" + } + ] + }, + "prefix-modifiers": { + "match": "\\b(abstract|final|enum|open|annotation|sealed|data|override|final|lateinit|private|protected|public|internal|inner|companion|noinline|crossinline|vararg|reified|tailrec|operator|infix|inline|external|const|suspend|value)\\b", + "name": "storage.modifier.other.kotlin" + }, + "postfix-modifiers": { + "match": "\\b(where|by|get|set)\\b", + "name": "storage.modifier.other.kotlin" + }, + "soft-keywords": { + "match": "\\b(catch|finally|field)\\b", + "name": "keyword.soft.kotlin" + }, + "hard-keywords": { + "match": "\\b(as|typeof|is|in)\\b", + "name": "keyword.hard.kotlin" + }, + "control-keywords": { + "match": "\\b(if|else|while|do|when|try|throw|break|continue|return|for)\\b", + "name": "keyword.control.kotlin" + }, + "annotation-simple": { + "match": "(?<([^<>]|\\g)+>)?", + "captures": { + "1": { + "name": "storage.type.class.kotlin" + }, + "2": { + "name": "entity.name.type.class.kotlin" + }, + "3": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "object-declaration": { + "match": "\\b(object)\\s+(\\b\\w+\\b|`[^`]+`)", + "captures": { + "1": { + "name": "storage.type.object.kotlin" + }, + "2": { + "name": "entity.name.type.object.kotlin" + } + } + }, + "type-alias": { + "match": "\\b(typealias)\\s+(\\b\\w+\\b|`[^`]+`)\\s*(?<([^<>]|\\g)+>)?", + "captures": { + "1": { + "name": "storage.type.alias.kotlin" + }, + "2": { + "name": "entity.name.type.kotlin" + }, + "3": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "function-declaration": { + "match": "\\b(fun)\\b\\s*(?<([^<>]|\\g)+>)?\\s*(?:(\\w+)\\.)?(\\b\\w+\\b|`[^`]+`)", + "captures": { + "1": { + "name": "storage.type.function.kotlin" + }, + "2": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + }, + "4": { + "name": "entity.name.type.class.extension.kotlin" + }, + "5": { + "name": "entity.name.function.declaration.kotlin" + } + } + }, + "variable-declaration": { + "match": "\\b(val|var)\\b\\s*(?<([^<>]|\\g)+>)?", + "captures": { + "1": { + "name": "storage.type.variable.kotlin" + }, + "2": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "type-parameter": { + "patterns": [ + { + "match": "\\b\\w+\\b", + "name": "entity.name.type.kotlin" + }, + { + "match": "\\b(in|out)\\b", + "name": "storage.modifier.kotlin" + } + ] + }, + "type-annotation": { + "match": "(?|(?[<(]([^<>()\"']|\\g)+[)>]))+", + "captures": { + "0": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "function-call": { + "match": "\\??\\.?(\\b\\w+\\b|`[^`]+`)\\s*(?<([^<>]|\\g)+>)?\\s*(?=[({])", + "captures": { + "1": { + "name": "entity.name.function.call.kotlin" + }, + "2": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "method-reference": { + "match": "\\??::(\\b\\w+\\b|`[^`]+`)", + "captures": { + "1": { + "name": "entity.name.function.reference.kotlin" + } + } + }, + "key": { + "match": "\\b(\\w=)\\s*(=)", + "captures": { + "1": { + "name": "variable.parameter.kotlin" + }, + "2": { + "name": "keyword.operator.assignment.kotlin" + } + } + }, + "string-empty": { + "match": "(?", + "name": "storage.type.function.arrow.kotlin" + }, + "operators": { + "patterns": [ + { + "match": "(===?|\\!==?|<=|>=|<|>)", + "name": "keyword.operator.comparison.kotlin" + }, + { + "match": "([+*/%-]=)", + "name": "keyword.operator.assignment.arithmetic.kotlin" + }, + { + "match": "(=)", + "name": "keyword.operator.assignment.kotlin" + }, + { + "match": "([+*/%-])", + "name": "keyword.operator.arithmetic.kotlin" + }, + { + "match": "(!|&&|\\|\\|)", + "name": "keyword.operator.logical.kotlin" + }, + { + "match": "(--|\\+\\+)", + "name": "keyword.operator.increment-decrement.kotlin" + }, + { + "match": "(\\.\\.)", + "name": "keyword.operator.range.kotlin" + } + ] + }, + "self-reference": { + "match": "\\b(this|super)(@\\w+)?\\b", + "name": "variable.language.this.kotlin" + } + } +} \ No newline at end of file diff --git a/language-support/kotlin/language-configuration.json b/language-support/kotlin/language-configuration.json new file mode 100644 index 000000000..56225afa7 --- /dev/null +++ b/language-support/kotlin/language-configuration.json @@ -0,0 +1,27 @@ +{ + "comments": { + "lineComment": "//", + "blockComment": [ "/*", "*/" ] + }, + "brackets": [ + ["{", "}"], + ["[", "]"], + ["(", ")"] + ], + "autoClosingPairs": [ + { "open": "{", "close": "}" }, + { "open": "[", "close": "]" }, + { "open": "(", "close": ")" }, + { "open": "'", "close": "'", "notIn": ["string", "comment"] }, + { "open": "\"", "close": "\"", "notIn": ["string"] }, + { "open": "/*", "close": " */", "notIn": ["string"] } + ], + "surroundingPairs": [ + ["{", "}"], + ["[", "]"], + ["(", ")"], + ["<", ">"], + ["'", "'"], + ["\"", "\""] + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 644628726..5344efd10 100644 --- a/package.json +++ b/package.json @@ -174,6 +174,16 @@ ".properties" ], "configuration": "./language-support/properties/java-properties-configuration.json" + }, + { + "id": "gradle-kotlin-dsl", + "aliases": [ + "Gradle Kotlin DSL" + ], + "extensions": [ + ".gradle.kts" + ], + "configuration": "./language-support/kotlin/language-configuration.json" } ], "grammars": [ @@ -186,6 +196,11 @@ "language": "java-properties", "scopeName": "source.java-properties", "path": "./language-support/properties/JavaProperties.tmLanguage.json" + }, + { + "language": "gradle-kotlin-dsl", + "scopeName": "source.kotlin", + "path": "./language-support/kotlin/kotlin.tmLanguage.json" } ], "jsonValidation": [ From a222cfc989830fd5accc85bb101f5c5e5c1edba2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 11 Nov 2023 15:16:33 +0000 Subject: [PATCH 402/708] Bump axios from 1.5.0 to 1.6.1 Bumps [axios](https://github.com/axios/axios) from 1.5.0 to 1.6.1. - [Release notes](https://github.com/axios/axios/releases) - [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) - [Commits](https://github.com/axios/axios/compare/v1.5.0...v1.6.1) --- updated-dependencies: - dependency-name: axios dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 156b49694..7243cdd2a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1842,9 +1842,9 @@ "dev": true }, "node_modules/axios": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz", - "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", + "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", From 3cbb67dd0e0c4bc9086156fb158f29caedeb1a72 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 14 Nov 2023 14:11:19 -0500 Subject: [PATCH 403/708] Respect setting to disable extension recommendations. - Update vscode-extension-proposals to 0.0.22 (extensions.ignoreRecommendations) - Update vscode-redhat-telemetry to 0.7.1 (for proper axios bump) Signed-off-by: Roland Grunberg --- package-lock.json | 18 +++++++++--------- package.json | 4 ++-- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7243cdd2a..ee90b5401 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "1.25.0", "license": "EPL-2.0", "dependencies": { - "@redhat-developer/vscode-extension-proposals": "0.0.21", - "@redhat-developer/vscode-redhat-telemetry": "^0.7.0", + "@redhat-developer/vscode-extension-proposals": "0.0.22", + "@redhat-developer/vscode-redhat-telemetry": "^0.7.1", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -342,17 +342,17 @@ } }, "node_modules/@redhat-developer/vscode-extension-proposals": { - "version": "0.0.21", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.21.tgz", - "integrity": "sha512-jSal4qflxLWNKzG7ObwpLwn2gzznuZJ+qvwx8IV/msJrUWxh7A8fzYuCmusKT09bzpwQNKDwySAVeSUS2xUmNg==" + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.22.tgz", + "integrity": "sha512-hH/0YRkCmYsGTPScE6xFd5bUkbDWU1iu7/LJqcrU4drqYLsFWe/6gLEaaOxm6koFwI3ItjGt8t0o0q8VMC4MiA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.7.0.tgz", - "integrity": "sha512-Nhlg2iuOVYAX7/GCty7wOJ8/E19XcGuRioRxoyg9+S+dhf9Sxnqu17kyHBrq3sbW3uNOPjHw7QMuKHvN0SXnFQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.7.1.tgz", + "integrity": "sha512-IhCoMA4KAz2giQwAywgCiqvp1q/XSZEtaSWzpkxjceUyvkU9Uvp0MiIHJ300qHJ4c+lQVbVe7DG7D8yj8lVlRQ==", "dependencies": { "@segment/analytics-node": "0.0.1-beta.17", - "axios": "^1.3.2", + "axios": "^1.6.1", "countries-and-timezones": "^3.4.1", "getos": "^3.2.1", "object-hash": "^3.0.0", diff --git a/package.json b/package.json index 5344efd10..5f522abb0 100644 --- a/package.json +++ b/package.json @@ -1534,8 +1534,8 @@ "webpack-cli": "^4.6.0" }, "dependencies": { - "@redhat-developer/vscode-extension-proposals": "0.0.21", - "@redhat-developer/vscode-redhat-telemetry": "^0.7.0", + "@redhat-developer/vscode-extension-proposals": "0.0.22", + "@redhat-developer/vscode-redhat-telemetry": "^0.7.1", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", From b1d08312b3d986368afbbe56e9271b4f9d6758fc Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Thu, 16 Nov 2023 14:13:22 +0800 Subject: [PATCH 404/708] Group Java settings by categories (#3386) * Group Java settings by categories * Remove the unused setting 'java.recommendations.dependency.analytics.show' Signed-off-by: Jinbo Wang --- README.md | 1 - package.json | 1343 ++++++++++++++++++++++++++--------------------- src/jdkUtils.ts | 21 +- 3 files changed, 762 insertions(+), 603 deletions(-) diff --git a/README.md b/README.md index ba9d904e0..502544db8 100644 --- a/README.md +++ b/README.md @@ -194,7 +194,6 @@ The following settings are supported: * `java.references.includeAccessors`: Include getter, setter and builder/constructor when finding references. Default to true. * `java.configuration.maven.globalSettings` : Path to Maven's global settings.xml. * `java.eclipse.downloadSources` : Enable/disable download of Maven source artifacts for Eclipse projects. -* `java.recommendations.dependency.analytics.show` : Show the recommended Dependency Analytics extension. * `java.references.includeDecompiledSources` : Include the decompiled sources when finding references. Default to true. * `java.project.sourcePaths`: Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project. * `java.typeHierarchy.lazyLoad`: Enable/disable lazy loading the content in type hierarchy. Lazy loading could save a lot of loading time but every type should be expanded manually to load its content. diff --git a/package.json b/package.json index 5f522abb0..4caefe86b 100644 --- a/package.json +++ b/package.json @@ -209,9 +209,10 @@ "url": "./schemas/package.schema.json" } ], - "configuration": { - "type": "object", - "title": "Java", + "configuration":[{ + "id": "java-startup", + "title": "Startup", + "order": 10, "properties": { "java.home": { "type": [ @@ -221,7 +222,8 @@ "default": null, "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", "scope": "machine-overridable", - "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead." + "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead.", + "order": 0 }, "java.jdt.ls.java.home": { "type": [ @@ -230,7 +232,8 @@ ], "default": null, "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", - "scope": "machine-overridable" + "scope": "machine-overridable", + "order": 10 }, "java.jdt.ls.vmargs": { "type": [ @@ -239,29 +242,110 @@ ], "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable", "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", - "scope": "machine-overridable" + "scope": "machine-overridable", + "order": 20 }, - "java.errors.incompleteClasspath.severity": { + "java.server.launchMode": { + "type": "string", + "enum": [ + "Standard", + "LightWeight", + "Hybrid" + ], + "enumDescriptions": [ + "Provides full features such as intellisense, refactoring, building, Maven/Gradle support etc.", + "Starts a syntax server with lower start-up cost. Only provides syntax features such as outline, navigation, javadoc, syntax errors.", + "Provides full features with better responsiveness. It starts a standard language server and a secondary syntax server. The syntax server provides syntax features until the standard server is ready." + ], + "description": "The launch mode for the Java extension", + "default": "Hybrid", + "scope": "window", + "order": 30 + }, + "java.configuration.workspaceCacheLimit": { "type": [ - "string" + "null", + "integer" ], + "default": 90, + "minimum": 1, + "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", + "scope": "application", + "order": 40 + }, + "java.sharedIndexes.enabled": { + "type": "string", "enum": [ - "ignore", - "info", - "warning", - "error" + "auto", + "on", + "off" ], - "default": "warning", - "description": "Specifies the severity of the message when the classpath is incomplete for a Java file", - "scope": "window" + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to share indexes between different workspaces. When set to `auto`, shared indexes will be enabled in Visual Studio Code - Insiders.", + "scope": "window", + "order": 50 }, - "java.configuration.checkProjectSettingsExclusions": { - "deprecationMessage": "Please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.", + "java.sharedIndexes.location": { + "type": "string", + "markdownDescription": "Specifies a common index location for all workspaces. See default values as follows:\n \nWindows: First use `\"$APPDATA\\\\.jdt\\\\index\"`, or `\"~\\\\.jdt\\\\index\"` if it does not exist\n \nmacOS: `\"~/Library/Caches/.jdt/index\"`\n \nLinux: First use `\"$XDG_CACHE_HOME/.jdt/index\"`, or `\"~/.cache/.jdt/index\"` if it does not exist", + "default": "", + "scope": "window", + "order": 60 + }, + "java.jdt.ls.lombokSupport.enabled": { "type": "boolean", - "default": false, - "description": "Controls whether to exclude extension-generated project settings files (.project, .classpath, .factorypath, .settings/) from the file explorer.", + "default": true, + "description": "Whether to load lombok processors from project classpath", + "scope": "window", + "order": 70 + }, + "java.jdt.ls.protobufSupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Specify whether to automatically add Protobuf output source directories to the classpath.\n\n**Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher.", + "scope": "window", + "order": 80 + }, + "java.jdt.ls.androidSupport.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders.\n\n**Note:** Only works for Android Gradle Plugin `3.2.0` or higher.", + "scope": "window", + "order": 90 + }, + "java.trace.server": { + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the Java language server.", "scope": "window" }, + "redhat.telemetry.enabled": { + "type": "boolean", + "default": null, + "markdownDescription": "Enable usage data and errors to be sent to Red Hat servers. Read our [privacy statement](https://developers.redhat.com/article/tool-data-collection).", + "scope": "window", + "tags": [ + "usesOnlineServices", + "telemetry" + ] + } + } + }, + { + "id": "java-projectimport", + "title": "Project Import/Update", + "order": 20, + "properties": { "java.configuration.updateBuildConfiguration": { "type": [ "string" @@ -273,150 +357,207 @@ ], "default": "interactive", "description": "Specifies how modifications on build files update the Java classpath/configuration", - "scope": "window" + "scope": "window", + "order": 10 }, - "java.trace.server": { - "type": "string", - "enum": [ - "off", - "messages", - "verbose" + "java.import.exclusions": { + "type": "array", + "description": "Configure glob patterns for excluding folders. Use `!` to negate patterns to allow subfolders imports. You have to include a parent directory. The order is important.", + "default": [ + "**/node_modules/**", + "**/.metadata/**", + "**/archetype-resources/**", + "**/META-INF/maven/**" ], - "default": "off", - "description": "Traces the communication between VS Code and the Java language server.", "scope": "window" }, - "java.import.maven.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the Maven importer.", + "java.project.resourceFilters": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?!\\*).*" + }, + "default": [ + "node_modules", + "\\.git" + ], + "markdownDescription": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named `node_modules` or `.git`. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", "scope": "window" }, - "java.import.maven.offline.enabled": { + "java.configuration.checkProjectSettingsExclusions": { + "deprecationMessage": "Please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.", "type": "boolean", "default": false, - "description": "Enable/disable the Maven offline mode.", + "description": "Controls whether to exclude extension-generated project settings files (.project, .classpath, .factorypath, .settings/) from the file explorer.", "scope": "window" }, - "java.import.maven.disableTestClasspathFlag": { + "java.import.generatesMetadataFilesAtProjectRoot": { "type": "boolean", + "markdownDescription": "Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Click [HERE](command:_java.metadataFilesGeneration) to learn how to change the setting to make it take effect.", "default": false, - "description": "Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects.", "scope": "window" }, - "java.import.gradle.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the Gradle importer.", - "scope": "window" + "java.project.importOnFirstTimeStartup": { + "type": "string", + "enum": [ + "disabled", + "interactive", + "automatic" + ], + "default": "automatic", + "description": "Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time.", + "scope": "application" }, - "java.import.gradle.wrapper.enabled": { + "java.project.importHint": { "type": "boolean", + "description": "Enable/disable the server-mode switch information, when Java projects import is skipped on startup.", "default": true, - "description": "Use Gradle from the 'gradle-wrapper.properties' file.", - "scope": "window" - }, - "java.import.gradle.version": { - "type": "string", - "default": null, - "description": "Use Gradle from the specific version if the Gradle wrapper is missing or disabled.", - "scope": "window" + "scope": "application" }, - "java.import.gradle.home": { - "type": "string", - "default": null, - "description": "Use Gradle from the specified local installation directory or GRADLE_HOME if the Gradle wrapper is missing or disabled and no 'java.import.gradle.version' is specified.", + "java.showBuildStatusOnStart.enabled": { + "anyOf": [ + { + "enum": [ + "notification", + "terminal", + "off" + ], + "enumDescriptions": [ + "Show the build status via progress notification on start", + "Show the build status via terminal on start", + "Do not show any build status on start" + ] + }, + "boolean" + ], + "description": "Automatically show build status on startup.", + "default": "notification", "scope": "window" }, - "java.import.gradle.java.home": { - "type": "string", - "default": null, - "description": "The location to the JVM used to run the Gradle daemon.", - "scope": "machine-overridable" - }, - "java.import.gradle.offline.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the Gradle offline mode.", + "java.project.encoding": { + "enum": [ + "ignore", + "warning", + "setDefault" + ], + "enumDescriptions": [ + "Ignore project encoding settings", + "Show warning if a project has no explicit encoding set", + "Set the default workspace encoding settings" + ], + "default": "ignore", + "markdownDescription": "Project encoding settings", "scope": "window" + } + } + }, + { + "id": "java-unmanagedfolder", + "title": "Unmanaged Folder", + "order": 30, + "properties": { + "java.project.sourcePaths": { + "type": "array", + "items": { + "type": "string" + }, + "markdownDescription": "Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", + "default": [], + "scope": "window", + "order": 10 }, - "java.import.gradle.arguments": { - "type": "string", - "default": null, - "description": "Arguments to pass to Gradle.", - "scope": "machine" - }, - "java.import.gradle.jvmArguments": { - "type": "string", - "default": null, - "description": "JVM arguments to pass to Gradle.", - "scope": "machine" - }, - "java.import.gradle.user.home": { - "type": "string", - "default": null, - "description": "Setting for GRADLE_USER_HOME.", - "scope": "window" + "java.project.outputPath": { + "type": [ + "string", + "null" + ], + "markdownDescription": "A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", + "default": "", + "scope": "window", + "order": 20 }, - "java.import.gradle.annotationProcessing.enabled": { + "java.project.referencedLibraries": { + "type": [ + "array", + "object" + ], + "description": "Configure glob patterns for referencing local libraries to a Java project.", + "default": [ + "lib/**/*.jar" + ], + "properties": { + "include": { + "type": "array" + }, + "exclude": { + "type": "array" + }, + "sources": { + "type": "object" + } + }, + "required": [ + "include" + ], + "additionalProperties": false, + "scope": "window", + "order": 30 + } + } + }, + { + "id": "java-maven", + "title": "Maven", + "order": 40, + "properties": { + "java.import.maven.enabled": { "type": "boolean", "default": true, - "description": "Enable/disable the annotation processing on Gradle projects and delegate Annotation Processing to JDT APT. Only works for Gradle 5.2 or higher.", - "scope": "window" - }, - "java.maven.downloadSources": { - "type": "boolean", - "default": false, - "description": "Enable/disable download of Maven source artifacts as part of importing Maven projects.", - "scope": "window" - }, - "java.eclipse.downloadSources": { - "type": "boolean", - "default": false, - "description": "Enable/disable download of Maven source artifacts for Eclipse projects.", - "scope": "window" + "description": "Enable/disable the Maven importer.", + "scope": "window", + "order": 10 }, - "java.maven.updateSnapshots": { + "java.import.maven.offline.enabled": { "type": "boolean", "default": false, - "description": "Force update of Snapshots/Releases.", - "scope": "window" + "description": "Enable/disable the Maven offline mode.", + "scope": "window", + "order": 20 }, - "java.referencesCodeLens.enabled": { + "java.import.maven.disableTestClasspathFlag": { "type": "boolean", "default": false, - "description": "Enable/disable the references code lens.", - "scope": "window" - }, - "java.signatureHelp.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the signature help.", - "scope": "window" + "description": "Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects.", + "scope": "window", + "order": 30 }, - "java.signatureHelp.description.enabled": { + "java.maven.downloadSources": { "type": "boolean", "default": false, - "description": "Enable/disable to show the description in signature help.", - "scope": "window" + "description": "Enable/disable download of Maven source artifacts as part of importing Maven projects.", + "scope": "window", + "order": 40 }, - "java.implementationsCodeLens.enabled": { + "java.maven.updateSnapshots": { "type": "boolean", "default": false, - "description": "Enable/disable the implementations code lens.", - "scope": "window" + "description": "Force update of Snapshots/Releases.", + "scope": "window", + "order": 50 }, "java.configuration.maven.userSettings": { "type": "string", "default": null, "description": "Path to Maven's user settings.xml", - "scope": "window" + "scope": "window", + "order": 60 }, "java.configuration.maven.globalSettings": { "type": "string", "default": null, "description": "Path to Maven's global settings.xml", - "scope": "window" + "scope": "window", + "order": 70 }, "java.configuration.maven.notCoveredPluginExecutionSeverity": { "type": "string", @@ -427,7 +568,8 @@ ], "default": "warning", "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", - "scope": "window" + "scope": "window", + "order": 80 }, "java.configuration.maven.defaultMojoExecutionAction": { "type": "string", @@ -439,148 +581,322 @@ ], "default": "ignore", "description": "Specifies default mojo execution action when no associated metadata can be detected.", - "scope": "window" - }, - "java.configuration.workspaceCacheLimit": { - "type": [ - "null", - "integer" - ], - "default": 90, - "minimum": 1, - "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", - "scope": "application" + "scope": "window", + "order": 90 + } + } + }, + { + "id": "java-gradle", + "title": "Gradle", + "order": 50, + "properties": { + "java.import.gradle.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the Gradle importer.", + "scope": "window", + "order": 10 }, - "java.format.enabled": { + "java.import.gradle.wrapper.enabled": { "type": "boolean", "default": true, - "description": "Enable/disable default Java formatter", - "scope": "window" + "description": "Use Gradle from the 'gradle-wrapper.properties' file.", + "scope": "window", + "order": 20 }, - "java.saveActions.organizeImports": { + "java.import.gradle.version": { + "type": "string", + "default": null, + "description": "Use Gradle from the specific version if the Gradle wrapper is missing or disabled.", + "scope": "window", + "order": 30 + }, + "java.import.gradle.home": { + "type": "string", + "default": null, + "description": "Use Gradle from the specified local installation directory or GRADLE_HOME if the Gradle wrapper is missing or disabled and no 'java.import.gradle.version' is specified.", + "scope": "window", + "order": 40 + }, + "java.import.gradle.java.home": { + "type": "string", + "default": null, + "description": "The location to the JVM used to run the Gradle daemon.", + "scope": "machine-overridable", + "order": 50 + }, + "java.import.gradle.user.home": { + "type": "string", + "default": null, + "description": "Setting for GRADLE_USER_HOME.", + "scope": "window", + "order": 55 + }, + "java.import.gradle.offline.enabled": { "type": "boolean", "default": false, - "description": "Enable/disable auto organize imports on save action", - "scope": "window" + "description": "Enable/disable the Gradle offline mode.", + "scope": "window", + "order": 60 + }, + "java.import.gradle.arguments": { + "type": "string", + "default": null, + "description": "Arguments to pass to Gradle.", + "scope": "machine", + "order": 70 + }, + "java.import.gradle.jvmArguments": { + "type": "string", + "default": null, + "description": "JVM arguments to pass to Gradle.", + "scope": "machine", + "order": 80 + }, + "java.import.gradle.annotationProcessing.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the annotation processing on Gradle projects and delegate Annotation Processing to JDT APT. Only works for Gradle 5.2 or higher.", + "scope": "window", + "order": 90 + }, + "java.imports.gradle.wrapper.checksums": { + "type": "array", + "items": { + "type": "object", + "default": {}, + "required": [ + "sha256" + ], + "properties": { + "sha256": { + "type": "string", + "label": "SHA-256 checksum." + }, + "allowed": { + "type": "boolean", + "default": true, + "label": "Is allowed?" + } + }, + "additionalProperties": false, + "uniqueItems": true + }, + "description": "Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers", + "default": [], + "scope": "application" + } + } + }, + { + "id": "java-build", + "title": "Build", + "order": 60, + "properties": { + "java.autobuild.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the 'auto build'", + "scope": "window", + "order": 10 + }, + "java.maxConcurrentBuilds": { + "type": "integer", + "default": 1, + "description": "Max simultaneous project builds", + "scope": "window", + "minimum": 1, + "order": 20 }, - "java.import.exclusions": { + "java.settings.url": { + "type": "string", + "markdownDescription": "Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences)", + "default": null, + "scope": "window", + "order": 30 + }, + "java.compile.nullAnalysis.nonnull": { "type": "array", - "description": "Configure glob patterns for excluding folders. Use `!` to negate patterns to allow subfolders imports. You have to include a parent directory. The order is important.", "default": [ - "**/node_modules/**", - "**/.metadata/**", - "**/archetype-resources/**", - "**/META-INF/maven/**" + "javax.annotation.Nonnull", + "org.eclipse.jdt.annotation.NonNull", + "org.springframework.lang.NonNull" ], + "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" }, - "java.import.generatesMetadataFilesAtProjectRoot": { - "type": "boolean", - "markdownDescription": "Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Click [HERE](command:_java.metadataFilesGeneration) to learn how to change the setting to make it take effect.", - "default": false, - "scope": "window" - }, - "java.project.referencedLibraries": { - "type": [ - "array", - "object" - ], - "description": "Configure glob patterns for referencing local libraries to a Java project.", + "java.compile.nullAnalysis.nullable": { + "type": "array", "default": [ - "lib/**/*.jar" + "javax.annotation.Nullable", + "org.eclipse.jdt.annotation.Nullable", + "org.springframework.lang.Nullable" ], - "properties": { - "include": { - "type": "array" - }, - "exclude": { - "type": "array" - }, - "sources": { - "type": "object" - } - }, - "required": [ - "include" + "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", + "scope": "window" + }, + "java.compile.nullAnalysis.mode": { + "type": "string", + "enum": [ + "disabled", + "interactive", + "automatic" ], - "additionalProperties": false, + "default": "interactive", + "markdownDescription": "Specify how to enable the annotation-based null analysis.", "scope": "window" }, - "java.project.outputPath": { + "java.errors.incompleteClasspath.severity": { "type": [ - "string", - "null" + "string" ], - "markdownDescription": "A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", - "default": "", + "enum": [ + "ignore", + "info", + "warning", + "error" + ], + "default": "warning", + "description": "Specifies the severity of the message when the classpath is incomplete for a Java file", "scope": "window" - }, - "java.project.sourcePaths": { + } + } + }, + { + "id": "java-jdks", + "title": "Installed JDKs", + "order": 70, + "properties": { + "java.configuration.runtimes": { "type": "array", + "description": "Map Java Execution Environments to local JDKs.", "items": { - "type": "string" + "type": "object", + "default": {}, + "required": [ + "path", + "name" + ], + "properties": { + "name": { + "type": "string", + "enum": [ + "J2SE-1.5", + "JavaSE-1.6", + "JavaSE-1.7", + "JavaSE-1.8", + "JavaSE-9", + "JavaSE-10", + "JavaSE-11", + "JavaSE-12", + "JavaSE-13", + "JavaSE-14", + "JavaSE-15", + "JavaSE-16", + "JavaSE-17", + "JavaSE-18", + "JavaSE-19", + "JavaSE-20", + "JavaSE-21" + ], + "description": "Java Execution Environment name. Must be unique." + }, + "path": { + "type": "string", + "pattern": ".*(?` or `}`", + "default": true, "scope": "window" - }, + } + } + }, + { + "id": "java-codecompletion", + "title": "Code Completion", + "order": 90, + "properties": { "java.completion.enabled": { "type": "boolean", "default": true, "description": "Enable/disable code completion support", - "scope": "window" + "scope": "window", + "order": 10 }, - "java.completion.guessMethodArguments": { - "type": [ - "boolean", - "string" - ], - "enum": [ - "auto", - "off", - "insertParameterNames", - "insertBestGuessedArguments" - ], - "enumDescriptions": [ - "Use 'off' only when using Visual Studio Code - Insiders, other platform will defaults to 'insertBestGuessedArguments'.", - "Method arguments will not be inserted during completion.", - "The parameter names will be inserted during completion.", - "The best guessed arguments will be inserted during completion according to the code context." - ], - "default": "auto", - "description": "Specify how the arguments will be filled during completion.", - "scope": "window" + "java.completion.postfix.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", + "scope": "window", + "order": 20 + }, + "java.completion.chain.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable chain completion support. Chain completions are only available when completions are invoked by the completions shortcut", + "scope": "window", + "order": 30 }, "java.completion.favoriteStaticMembers": { "type": "array", @@ -596,7 +912,8 @@ "org.mockito.ArgumentMatchers.*", "org.mockito.Answers.*" ], - "scope": "window" + "scope": "window", + "order": 40 }, "java.completion.filteredTypes": { "type": "array", @@ -609,32 +926,30 @@ "org.graalvm.*", "io.micrometer.shaded.*" ], - "scope": "window" + "scope": "window", + "order": 50 }, - "java.completion.importOrder": { - "type": "array", - "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group. As a result, the empty string (e.g. '') can be used to group all other imports. Static imports are prefixed with a '#'", - "default": [ - "#", - "java", - "javax", - "org", - "com", - "" + "java.completion.guessMethodArguments": { + "type": [ + "boolean", + "string" ], - "scope": "window" - }, - "java.completion.postfix.enabled": { - "type": "boolean", - "default": true, - "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", - "scope": "window" - }, - "java.completion.chain.enabled": { - "type": "boolean", - "default": false, - "markdownDescription": "Enable/disable chain completion support. Chain completions are only available when completions are invoked by the completions shortcut", - "scope": "window" + "enum": [ + "auto", + "off", + "insertParameterNames", + "insertBestGuessedArguments" + ], + "enumDescriptions": [ + "Use 'off' only when using Visual Studio Code - Insiders, other platform will defaults to 'insertBestGuessedArguments'.", + "Method arguments will not be inserted during completion.", + "The parameter names will be inserted during completion.", + "The best guessed arguments will be inserted during completion according to the code context." + ], + "default": "auto", + "description": "Specify how the arguments will be filled during completion.", + "scope": "window", + "order": 60 }, "java.completion.matchCase": { "type": "string", @@ -648,7 +963,22 @@ ], "default": "firstLetter", "markdownDescription": "Specify whether to match case for code completion.", - "scope": "window" + "scope": "window", + "order": 70 + }, + "java.completion.importOrder": { + "type": "array", + "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group. As a result, the empty string (e.g. '') can be used to group all other imports. Static imports are prefixed with a '#'", + "default": [ + "#", + "java", + "javax", + "org", + "com", + "" + ], + "scope": "window", + "order": 80 }, "java.completion.lazyResolveTextEdit.enabled": { "type": "boolean", @@ -656,35 +986,61 @@ "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", "scope": "window" }, - "java.foldingRange.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable smart folding range support. If disabled, it will use the default indentation-based folding range provided by VS Code.", - "scope": "window" - }, - "java.format.settings.url": { - "type": "string", - "markdownDescription": "Specifies the url or file path to the [Eclipse formatter xml settings](https://github.com/redhat-developer/vscode-java/wiki/Formatter-settings).", - "default": null, - "scope": "window" - }, - "java.format.settings.profile": { - "type": "string", - "description": "Optional formatter profile name from the Eclipse formatter settings.", - "default": null, + "java.completion.maxResults": { + "type": "integer", + "default": 0, + "markdownDescription": "Maximum number of completion results (not including snippets).\n`0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit.", "scope": "window" }, - "java.format.comments.enabled": { + "java.signatureHelp.enabled": { "type": "boolean", - "description": "Includes the comments during code formatting.", "default": true, + "description": "Enable/disable the signature help.", "scope": "window" }, - "java.format.onType.enabled": { + "java.signatureHelp.description.enabled": { "type": "boolean", - "description": "Enable/disable automatic block formatting when typing `;`, `` or `}`", - "default": true, + "default": false, + "description": "Enable/disable to show the description in signature help.", "scope": "window" + } + } + }, + { + "id": "java-codegeneration", + "title": "Code Generation", + "order": 100, + "properties": { + "java.templates.fileHeader": { + "type": "array", + "markdownDescription": "Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [], + "order": 10 + }, + "java.templates.typeComment": { + "type": "array", + "markdownDescription": "Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [], + "order": 20 + }, + "java.codeGeneration.insertionLocation": { + "type": "string", + "enum": [ + "afterCursor", + "beforeCursor", + "lastMember" + ], + "enumDescriptions": [ + "Insert the generated code after the member where the cursor is located.", + "Insert the generated code before the member where the cursor is located.", + "Insert the generated code as the last member of the target type." + ], + "description": "Specifies the insertion location of the code generated by source actions.", + "default": "afterCursor", + "scope": "window", + "order": 30 }, "java.codeGeneration.hashCodeEquals.useJava7Objects": { "type": "boolean", @@ -750,247 +1106,135 @@ "default": 0, "scope": "window" }, - "java.codeGeneration.insertionLocation": { - "type": "string", - "enum": [ - "afterCursor", - "beforeCursor", - "lastMember" - ], - "enumDescriptions": [ - "Insert the generated code after the member where the cursor is located.", - "Insert the generated code before the member where the cursor is located.", - "Insert the generated code as the last member of the target type." - ], - "description": "Specifies the insertion location of the code generated by source actions.", - "default": "afterCursor", - "scope": "window" - }, - "java.selectionRange.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable Smart Selection support for Java. Disabling this option will not affect the VS Code built-in word-based and bracket-based smart selection.", - "scope": "window" - }, - "java.showBuildStatusOnStart.enabled": { - "anyOf": [ - { - "enum": [ - "notification", - "terminal", - "off" - ], - "enumDescriptions": [ - "Show the build status via progress notification on start", - "Show the build status via terminal on start", - "Do not show any build status on start" - ] - }, - "boolean" - ], - "description": "Automatically show build status on startup.", - "default": "notification", - "scope": "window" - }, - "java.configuration.runtimes": { - "type": "array", - "description": "Map Java Execution Environments to local JDKs.", - "items": { - "type": "object", - "default": {}, - "required": [ - "path", - "name" - ], - "properties": { - "name": { - "type": "string", - "enum": [ - "J2SE-1.5", - "JavaSE-1.6", - "JavaSE-1.7", - "JavaSE-1.8", - "JavaSE-9", - "JavaSE-10", - "JavaSE-11", - "JavaSE-12", - "JavaSE-13", - "JavaSE-14", - "JavaSE-15", - "JavaSE-16", - "JavaSE-17", - "JavaSE-18", - "JavaSE-19", - "JavaSE-20", - "JavaSE-21" - ], - "description": "Java Execution Environment name. Must be unique." - }, - "path": { - "type": "string", - "pattern": ".*(? { + const config = await getContributesConfiguration(context, "java.configuration.runtimes"); + cachedJreNames = config?.items?.properties?.name?.enum; +} + +async function getContributesConfiguration(context: ExtensionContext, configId: string): Promise { const buffer = await workspace.fs.readFile(Uri.file(context.asAbsolutePath("package.json"))); const packageJson = JSON.parse(buffer.toString()); - cachedJreNames = packageJson?.contributes?.configuration?.properties?.["java.configuration.runtimes"]?.items?.properties?.name?.enum; + /** + * contributes.configuration can either be a single object, + * representing a single category of settings, or an array + * of objects, representing multiple categories of settings. + */ + const categories = packageJson?.contributes?.configuration; + if (Array.isArray(categories)) { + for (const category of categories) { + if (category?.properties?.[configId]) { + return category.properties[configId]; + } + } + } else { + return categories?.properties?.[configId]; + } } export function getSupportedJreNames(): string[] { From 86bf3ae02f4f457184e6cc217f20240f9882dde9 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 22 Nov 2023 00:07:22 -0800 Subject: [PATCH 405/708] Add capability to select projects to be imported (#3356) * Support to manually select Maven pom files to import - A new setting `java.import.configurationFileCollectionMode` is added to configure whether manually build file selection is required before import. - A new contribution point `javaBuildTypes` is introduced, and will be used when the build files need to be manually selected. Signed-off-by: Sheng Chen --- package.json | 27 ++- schemas/package.schema.json | 20 ++ src/apiManager.ts | 6 + src/buildFilesSelector.ts | 258 +++++++++++++++++++++ src/extension.ts | 36 ++- src/languageStatusItemFactory.ts | 15 +- src/serverStatusBarProvider.ts | 17 +- src/settings.ts | 35 +++ src/utils.ts | 17 +- test/standard-mode-suite/extension.test.ts | 1 + test/standard-mode-suite/utils.test.ts | 10 +- 11 files changed, 419 insertions(+), 23 deletions(-) create mode 100644 src/buildFilesSelector.ts diff --git a/package.json b/package.json index 4caefe86b..ddd68693d 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,16 @@ "^pom\\.xml$", ".*\\.gradle(\\.kts)?$" ], + "javaBuildTools": [ + { + "displayName": "Maven", + "buildFileNames": ["pom.xml"] + }, + { + "displayName": "Gradle", + "buildFileNames": ["build.gradle", "settings.gradle", "build.gradle.kts", "settings.gradle.kts"] + } + ], "semanticTokenTypes": [ { "id": "annotation", @@ -346,6 +356,21 @@ "title": "Project Import/Update", "order": 20, "properties": { + "java.import.projectSelection": { + "type": "string", + "enum": [ + "manual", + "automatic" + ], + "enumDescriptions": [ + "Manually select the build configuration files.", + "Let extension automatically scan and select the build configuration files." + ], + "default": "automatic", + "markdownDescription": "[Experimental] Specifies how to select build configuration files to import. \nNote: Currently, `Gradle` projects cannot be partially imported.", + "scope": "window", + "order": 10 + }, "java.configuration.updateBuildConfiguration": { "type": [ "string" @@ -358,7 +383,7 @@ "default": "interactive", "description": "Specifies how modifications on build files update the Java classpath/configuration", "scope": "window", - "order": 10 + "order": 20 }, "java.import.exclusions": { "type": "array", diff --git a/schemas/package.schema.json b/schemas/package.schema.json index a147e2d3a..6b24ea87a 100644 --- a/schemas/package.schema.json +++ b/schemas/package.schema.json @@ -21,6 +21,26 @@ "type": "string", "description": "Regular expressions for specifying build file" } + }, + "javaBuildTools": { + "type": "array", + "description": "Information about the cared build files. Will be used when 'java.import.projectSelection' is 'manual'.", + "items": { + "type": "object", + "properties": { + "displayName": { + "description": "The display name of the build file type.", + "type": "string" + }, + "buildFileNames": { + "description": "The build file names that supported by the build tool.", + "type": "array", + "items": { + "type": "string" + } + } + } + } } } } diff --git a/src/apiManager.ts b/src/apiManager.ts index 03eebfda3..b4f155c39 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -10,6 +10,7 @@ import { Emitter } from "vscode-languageclient"; import { ServerMode } from "./settings"; import { registerHoverCommand } from "./hoverAction"; import { onDidRequestEnd, onWillRequestStart } from "./TracingLanguageClient"; +import { getJavaConfiguration } from "./utils"; class ApiManager { @@ -22,6 +23,11 @@ class ApiManager { private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { + // if it's manual import mode, set the server mode to lightwight, so that the + // project explorer won't spinning until import project is triggered. + if (getJavaConfiguration().get("import.projectSelection") === "manual") { + serverMode = ServerMode.lightWeight; + } const getDocumentSymbols: GetDocumentSymbolsCommand = getDocumentSymbolsProvider(); const goToDefinition: GoToDefinitionCommand = goToDefinitionProvider(); diff --git a/src/buildFilesSelector.ts b/src/buildFilesSelector.ts new file mode 100644 index 000000000..88d1a38cc --- /dev/null +++ b/src/buildFilesSelector.ts @@ -0,0 +1,258 @@ +import { ExtensionContext, MessageItem, QuickPickItem, QuickPickItemKind, Uri, WorkspaceFolder, extensions, window, workspace } from "vscode"; +import { convertToGlob, getExclusionGlob as getExclusionGlobPattern, getInclusionPatternsFromNegatedExclusion } from "./utils"; +import * as path from "path"; + +export const PICKED_BUILD_FILES = "java.pickedBuildFiles"; +export class BuildFileSelector { + private buildTypes: IBuildTool[] = []; + private context: ExtensionContext; + private exclusionGlobPattern: string; + // cached glob pattern for build files. + private searchPattern: string; + // cached glob pattern for build files that are explicitly + // included from the setting: "java.import.exclusions" (negated exclusion). + private negatedExclusionSearchPattern: string | undefined; + + constructor(context: ExtensionContext) { + this.context = context; + // TODO: should we introduce the exclusion globs into the contribution point? + this.exclusionGlobPattern = getExclusionGlobPattern(["**/target/**", "**/bin/**", "**/build/**"]); + for (const extension of extensions.all) { + const javaBuildTools: IBuildTool[] = extension.packageJSON.contributes?.javaBuildTools; + if (!Array.isArray(javaBuildTools)) { + continue; + } + + for (const buildType of javaBuildTools) { + if (!this.isValidBuildTypeConfiguration(buildType)) { + continue; + } + + this.buildTypes.push(buildType); + } + } + this.searchPattern = `**/{${this.buildTypes.map(buildType => buildType.buildFileNames.join(","))}}`; + const inclusionFolderPatterns: string[] = getInclusionPatternsFromNegatedExclusion(); + if (inclusionFolderPatterns.length > 0) { + const buildFileNames: string[] = []; + this.buildTypes.forEach(buildType => buildFileNames.push(...buildType.buildFileNames)); + this.negatedExclusionSearchPattern = convertToGlob(buildFileNames, inclusionFolderPatterns); + } + } + + /** + * @returns `true` if there are build files in the workspace, `false` otherwise. + */ + public async hasBuildFiles(): Promise { + if (this.buildTypes.length === 0) { + return false; + } + + let uris: Uri[]; + if (this.negatedExclusionSearchPattern) { + uris = await workspace.findFiles(this.negatedExclusionSearchPattern, null /* force not use default exclusion */, 1); + if (uris.length > 0) { + return true; + } + } + uris = await workspace.findFiles(this.searchPattern, this.exclusionGlobPattern, 1); + if (uris.length > 0) { + return true; + } + return false; + } + + /** + * Get the uri strings for the build files that the user selected. + * @returns An array of uri string for the build files that the user selected. + * An empty array means user canceled the selection. + */ + public async getBuildFiles(): Promise { + const cache = this.context.workspaceState.get(PICKED_BUILD_FILES); + if (cache !== undefined) { + return cache; + } + + const choice = await this.chooseBuildFilePickers(); + const pickedUris = await this.eliminateBuildToolConflict(choice); + if (pickedUris.length > 0) { + this.context.workspaceState.update(PICKED_BUILD_FILES, pickedUris); + } + return pickedUris; + } + + private isValidBuildTypeConfiguration(buildType: IBuildTool): boolean { + return !!buildType.displayName && !!buildType.buildFileNames; + } + + private async chooseBuildFilePickers(): Promise { + return window.showQuickPick(this.getBuildFilePickers(), { + placeHolder: "Note: Currently only Maven projects can be partially imported.", + title: "Select build files to import", + ignoreFocusOut: true, + canPickMany: true, + matchOnDescription: true, + matchOnDetail: true, + }); + } + + /** + * Get pickers for all build files in the workspace. + */ + private async getBuildFilePickers(): Promise { + const uris: Uri[] = await workspace.findFiles(this.searchPattern, this.exclusionGlobPattern); + if (this.negatedExclusionSearchPattern) { + uris.push(...await workspace.findFiles(this.negatedExclusionSearchPattern, null /* force not use default exclusion */)); + } + + // group build files by build tool and then sort them by build tool name. + const groupByBuildTool = new Map(); + for (const uri of uris) { + const buildType = this.buildTypes.find(buildType => buildType.buildFileNames.includes(path.basename(uri.fsPath))); + if (!buildType) { + continue; + } + if (!groupByBuildTool.has(buildType)) { + groupByBuildTool.set(buildType, []); + } + groupByBuildTool.get(buildType)?.push(uri); + } + + const buildTypeArray = Array.from(groupByBuildTool.keys()); + buildTypeArray.sort((a, b) => a.displayName.localeCompare(b.displayName)); + const addedFolders: Map = new Map(); + for (const buildType of buildTypeArray) { + const uris = groupByBuildTool.get(buildType); + for (const uri of uris) { + const containingFolder = path.dirname(uri.fsPath); + if (addedFolders.has(containingFolder)) { + const picker = addedFolders.get(containingFolder); + if (!picker.buildTypeAndUri.has(buildType)) { + picker.detail += `, ./${workspace.asRelativePath(uri)}`; + picker.description += `, ${buildType.displayName}`; + picker.buildTypeAndUri.set(buildType, uri); + } + } else { + addedFolders.set(containingFolder, { + label: path.basename(containingFolder), + detail: `./${workspace.asRelativePath(uri)}`, + description: buildType.displayName, + buildTypeAndUri: new Map([[buildType, uri]]), + picked: true, + }); + } + } + } + + const pickers: IBuildFilePicker[] = Array.from(addedFolders.values()); + return this.addSeparator(pickers); + } + + /** + * Add a separator pickers between pickers that belong to different workspace folders. + */ + private addSeparator(pickers: IBuildFilePicker[]): IBuildFilePicker[] { + // group pickers by their containing workspace folder + const workspaceFolders = new Map(); + for (const picker of pickers) { + const folder = workspace.getWorkspaceFolder(picker.buildTypeAndUri.values().next().value); + if (!folder) { + continue; + } + if (!workspaceFolders.has(folder)) { + workspaceFolders.set(folder, []); + } + workspaceFolders.get(folder)?.push(picker); + } + + const newPickers: IBuildFilePicker[] = []; + const folderArray = Array.from(workspaceFolders.keys()); + folderArray.sort((a, b) => a.name.localeCompare(b.name)); + for (const folder of folderArray) { + const pickersInFolder = workspaceFolders.get(folder); + newPickers.push({ + label: folder.name, + kind: QuickPickItemKind.Separator, + buildTypeAndUri: null + }); + newPickers.push(...this.sortPickers(pickersInFolder)); + } + return newPickers; + } + + private sortPickers(pickers: IBuildFilePicker[]): IBuildFilePicker[] { + return pickers.sort((a, b) => { + const pathA = path.dirname(a.buildTypeAndUri.values().next().value.fsPath); + const pathB = path.dirname(b.buildTypeAndUri.values().next().value.fsPath); + return pathA.localeCompare(pathB); + }); + } + + /** + * Ask user to choose a build tool when there are multiple build tools in the same folder. + */ + private async eliminateBuildToolConflict(choice?: IBuildFilePicker[]): Promise { + if (!choice) { + return []; + } + const conflictBuildTypeAndUris = new Map(); + const result: string[] = []; + for (const picker of choice) { + if (picker.buildTypeAndUri.size > 1) { + for (const [buildType, uri] of picker.buildTypeAndUri) { + if (!conflictBuildTypeAndUris.has(buildType)) { + conflictBuildTypeAndUris.set(buildType, []); + } + conflictBuildTypeAndUris.get(buildType)?.push(uri); + } + } else { + result.push(picker.buildTypeAndUri.values().next().value.toString()); + } + } + + if (conflictBuildTypeAndUris.size > 0) { + const conflictItems: IConflictItem[] = []; + for (const buildType of conflictBuildTypeAndUris.keys()) { + conflictItems.push({ + title: buildType.displayName, + uris: conflictBuildTypeAndUris.get(buildType), + }); + } + conflictItems.sort((a, b) => a.title.localeCompare(b.title)); + conflictItems.push({ + title: "Skip", + isCloseAffordance: true, + }); + + const choice = await window.showInformationMessage( + "Which build tool would you like to use for the workspace?", + { + modal: true, + }, + ...conflictItems + ); + + if (choice?.title !== "Skip" && choice?.uris) { + result.push(...choice.uris.map(uri => uri.toString())); + } + } + return result; + } +} + +interface IBuildTool { + displayName: string; + buildFileNames: string[]; +} + +interface IConflictItem extends MessageItem { + uris?: Uri[]; +} + +interface IBuildFilePicker extends QuickPickItem { + buildTypeAndUri: Map; +} + +export function cleanupProjectPickerCache(context: ExtensionContext) { + context.workspaceState.update(PICKED_BUILD_FILES, undefined); +} diff --git a/src/extension.ts b/src/extension.ts index 29f155870..818b4cb7c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, ProgressLocation, Position, Selection, Range } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, version } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -24,18 +24,19 @@ import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; -import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, onConfigurationChange, ServerMode } from './settings'; +import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, getImportMode, onConfigurationChange, ServerMode, ImportMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionBlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; +import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; +import { BuildFileSelector, cleanupProjectPickerCache } from './buildFilesSelector'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -323,6 +324,7 @@ export async function activate(context: ExtensionContext): Promise const data = {}; try { cleanupLombokCache(context); + cleanupProjectPickerCache(context); deleteDirectory(workspacePath); deleteDirectory(syntaxServerWorkspacePath); } catch (error) { @@ -381,7 +383,7 @@ export async function activate(context: ExtensionContext): Promise } const api: ExtensionAPI = apiManager.getApiInstance(); - if (api.serverMode === switchTo || api.serverMode === ServerMode.standard) { + if (!force && (api.serverMode === switchTo || api.serverMode === ServerMode.standard)) { return; } @@ -467,9 +469,24 @@ async function startStandardServer(context: ExtensionContext, requirements: requ return; } - const checkConflicts: boolean = await ensureNoBuildToolConflicts(context, clientOptions); - if (!checkConflicts) { - return; + const selector: BuildFileSelector = new BuildFileSelector(context); + const importMode: ImportMode = await getImportMode(context, selector); + if (importMode === ImportMode.automatic) { + if (!await ensureNoBuildToolConflicts(context, clientOptions)) { + return; + } + } else { + const buildFiles: string[] = []; + if (importMode === ImportMode.manual) { + buildFiles.push(...await selector.getBuildFiles()); + } + if (buildFiles.length === 0) { + // cancelled by user + commands.executeCommand('setContext', 'java:serverMode', ServerMode.lightWeight); + serverStatusBarProvider.showNotImportedStatus(); + return; + } + clientOptions.initializationOptions.projectConfigurations = buildFiles; } if (apiManager.getApiInstance().serverMode === ServerMode.lightWeight) { @@ -496,7 +513,7 @@ async function workspaceContainsBuildFiles(): Promise { // Nothing found in negated exclusion pattern, do a normal search then. const inclusionBlob: string = convertToGlob(inclusionPatterns); - const exclusionBlob: string = getExclusionBlob(); + const exclusionBlob: string = getExclusionGlob(); if (inclusionBlob && (await workspace.findFiles(inclusionBlob, exclusionBlob, 1 /* maxResults */)).length > 0) { return true; } @@ -922,8 +939,7 @@ async function getTriggerFiles(): Promise { } // Paths set by 'java.import.exclusions' will be ignored when searching trigger files. - const exclusionGlob = getExclusionBlob(); - + const exclusionGlob = getExclusionGlob(); const javaFilesUnderRoot: Uri[] = await workspace.findFiles(new RelativePattern(rootFolder, "*.java"), exclusionGlob, 1); for (const javaFile of javaFilesUnderRoot) { if (isPrefix(rootPath, javaFile.fsPath)) { diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts index 12c310ec8..e882ee8c9 100644 --- a/src/languageStatusItemFactory.ts +++ b/src/languageStatusItemFactory.ts @@ -22,7 +22,7 @@ export namespace StatusCommands { export const switchToStandardCommand = { title: "Load Projects", command: Commands.SWITCH_SERVER_MODE, - arguments: ["Standard", true], + arguments: ['Standard', true], tooltip: "LightWeight mode only provides limited features, please load projects to get full feature set" }; @@ -38,6 +38,13 @@ export namespace StatusCommands { arguments: ["java.configuration.runtimes"], tooltip: "Configure Java Runtime" }; + + export const startStandardServerCommand = { + title: "Select Projects...", + command: Commands.SWITCH_SERVER_MODE, + arguments: ['Standard', true], + tooltip: "Select Projects..." + }; } export namespace ServerStatusItemFactory { @@ -57,6 +64,12 @@ export namespace ServerStatusItemFactory { item.command = StatusCommands.switchToStandardCommand; } + export function showNotImportedStatus(item: any): void { + item.severity = vscode.LanguageStatusSeverity?.Warning; + item.text = "No projects are imported"; + item.command = StatusCommands.startStandardServerCommand; + } + export function showStandardStatus(item: any): void { item.severity = vscode.LanguageStatusSeverity?.Information; item.command = StatusCommands.showServerStatusCommand; diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 57003877c..12c4fa216 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -43,6 +43,20 @@ class ServerStatusBarProvider implements Disposable { } } + public showNotImportedStatus(): void { + if (supportsLanguageStatus()) { + ServerStatusItemFactory.showNotImportedStatus(this.languageStatusItem); + } else { + if (this.isAdvancedStatusBarItem) { + (this.statusBarItem as any).name = "No projects are imported"; + } + this.statusBarItem.text = StatusIcon.notImported; + this.statusBarItem.command = StatusCommands.startStandardServerCommand; + this.statusBarItem.tooltip = "No projects are imported, click to load projects"; + this.statusBarItem.show(); + } + } + public showStandardStatus(): void { if (supportsLanguageStatus()) { ServerStatusItemFactory.showStandardStatus(this.languageStatusItem); @@ -112,7 +126,8 @@ export enum StatusIcon { busy = "$(sync~spin)", ready = "$(thumbsup)", warning = "$(thumbsdown)", - error = "$(thumbsdown)" + error = "$(thumbsdown)", + notImported = "$(info)" } export const serverStatusBarProvider: ServerStatusBarProvider = new ServerStatusBarProvider(); diff --git a/src/settings.ts b/src/settings.ts index b79c6f3c9..49db09f0b 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -8,6 +8,7 @@ import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; import { apiManager } from './apiManager'; import { isActive, setActive, smartSemicolonDetection } from './smartSemicolonDetection'; +import { BuildFileSelector, PICKED_BUILD_FILES } from './buildFilesSelector'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -366,4 +367,38 @@ export function handleTextDocumentChanges(document: TextDocument, changes: reado } } +export async function getImportMode(context: ExtensionContext, selector: BuildFileSelector): Promise { + const mode = getJavaConfiguration().get("import.projectSelection"); + if (mode === "manual") { + // if no selectable build files, use automatic mode + const hasBuildFiles = await selector.hasBuildFiles(); + if (!hasBuildFiles) { + return ImportMode.automatic; + } + + // If the the manually picked build files has already cached, return manual mode. + if (context.workspaceState.get(PICKED_BUILD_FILES) !== undefined) { + return ImportMode.manual; + } + + const answer: string = await window.showInformationMessage( + "Java build files are detected in the workspace. How do you want to import them?", + { modal: true }, + "Import All", "Let Me Select..."); + if (answer === "Import All") { + return ImportMode.automatic; + } else if (answer === "Let Me Select...") { + return ImportMode.manual; + } + return ImportMode.skip; + } + + return ImportMode.automatic; +} + +export enum ImportMode { + automatic = 'automatic', + manual = 'manual', + skip = 'skip', +} diff --git a/src/utils.ts b/src/utils.ts index b68b010bb..5ca920ee2 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -110,7 +110,11 @@ export function convertToGlob(filePatterns: string[], basePatterns?: string[]): return parseToStringGlob(patterns); } -export function getExclusionBlob(): string { +/** + * Merge the values of setting 'java.import.exclusions' into one glob pattern. + * @param additionalExclusions Additional exclusions to be merged into the glob pattern. + */ +export function getExclusionGlob(additionalExclusions?: string[]): string { const config = getJavaConfiguration(); const exclusions: string[] = config.get("import.exclusions", []); const patterns: string[] = []; @@ -121,6 +125,9 @@ export function getExclusionBlob(): string { patterns.push(exclusion); } + if (additionalExclusions) { + patterns.push(...additionalExclusions); + } return parseToStringGlob(patterns); } @@ -173,10 +180,10 @@ async function getBuildFilesInWorkspace(): Promise { buildFiles.push(...await workspace.findFiles(convertToGlob(inclusionFilePatterns, inclusionFolderPatterns), null /* force not use default exclusion */)); } - const inclusionBlob: string = convertToGlob(inclusionFilePatterns); - const exclusionBlob: string = getExclusionBlob(); - if (inclusionBlob) { - buildFiles.push(...await workspace.findFiles(inclusionBlob, exclusionBlob)); + const inclusionGlob: string = convertToGlob(inclusionFilePatterns); + const exclusionGlob: string = getExclusionGlob(); + if (inclusionGlob) { + buildFiles.push(...await workspace.findFiles(inclusionGlob, exclusionGlob)); } return buildFiles; diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index cfa9db42c..3fd5828b7 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -54,6 +54,7 @@ suite('Java Language Extension - Standard', () => { Commands.CLIPBOARD_ONPASTE, Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, + "java.action.configureFavoriteStaticMembers", Commands.CREATE_MODULE_INFO, Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, diff --git a/test/standard-mode-suite/utils.test.ts b/test/standard-mode-suite/utils.test.ts index 7659ba2c3..8ec72f1b8 100644 --- a/test/standard-mode-suite/utils.test.ts +++ b/test/standard-mode-suite/utils.test.ts @@ -1,7 +1,7 @@ 'use strict'; import * as assert from 'assert'; -import { getJavaConfiguration, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, getExclusionBlob, convertToGlob } from '../../src/utils'; +import { getJavaConfiguration, getBuildFilePatterns, getInclusionPatternsFromNegatedExclusion, getExclusionGlob, convertToGlob } from '../../src/utils'; import { WorkspaceConfiguration } from 'vscode'; import { listJdks } from '../../src/jdkUtils'; import { platform } from 'os'; @@ -77,7 +77,7 @@ suite('Utils Test', () => { assert.deepEqual(result, ["**/node_modules/test/**"]); }); - test('getExclusionBlob() - no negated exclusions', async function () { + test('getExclusionGlob() - no negated exclusions', async function () { await config.update(IMPORT_EXCLUSION, [ "**/node_modules/**", "**/.metadata/**", @@ -85,12 +85,12 @@ suite('Utils Test', () => { "**/META-INF/maven/**" ]); - const result: string = getExclusionBlob(); + const result: string = getExclusionGlob(); assert.equal(result, "{**/node_modules/**,**/.metadata/**,**/archetype-resources/**,**/META-INF/maven/**}"); }); - test('getExclusionBlob() - has negated exclusions', async function () { + test('getExclusionGlob() - has negated exclusions', async function () { await config.update(IMPORT_EXCLUSION, [ "**/node_modules/**", "!**/node_modules/test/**", @@ -99,7 +99,7 @@ suite('Utils Test', () => { "**/META-INF/maven/**" ]); - const result: string = getExclusionBlob(); + const result: string = getExclusionGlob(); assert.equal(result, "{**/node_modules/**,**/.metadata/**,**/archetype-resources/**,**/META-INF/maven/**}"); }); From 505fbe764fe8f3f2758e6aa7b3a7d38785466dd6 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Sun, 26 Nov 2023 21:41:08 -0800 Subject: [PATCH 406/708] Fix missing prompts when there is conflict between pom.xml and .gradle.kts (#3401) Signed-off-by: Sheng Chen --- src/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils.ts b/src/utils.ts index 5ca920ee2..a0e6ecf42 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -162,7 +162,7 @@ export async function hasBuildToolConflicts(): Promise { // ignore the folders that already has .project file (already imported before) const gradleDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle"); const gradleDirectoriesKts = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, ".gradle.kts"); - gradleDirectories.concat(gradleDirectoriesKts); + gradleDirectories.push(...gradleDirectoriesKts); const mavenDirectories = getDirectoriesByBuildFile(projectConfigurationFsPaths, eclipseDirectories, "pom.xml"); return gradleDirectories.some((gradleDir) => { return mavenDirectories.includes(gradleDir); From aea6d6f500b0e26afd8e6357a0197ec119c2d1a9 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 29 Nov 2023 01:09:56 -0800 Subject: [PATCH 407/708] Support add/remove imported projects (#3398) - Reuse the 'BuildFilesSelector' and enable change the imported projects after the activation finishes. --------- Signed-off-by: Sheng Chen --- src/apiManager.ts | 7 + src/buildFilesSelector.ts | 284 +++++++++++++++++++--------------- src/commands.ts | 1 + src/extension.api.ts | 12 +- src/extension.ts | 16 +- src/plugin.ts | 27 ++++ src/protocol.ts | 1 + src/standardLanguageClient.ts | 59 ++++++- src/utils.ts | 19 ++- 9 files changed, 292 insertions(+), 134 deletions(-) diff --git a/src/apiManager.ts b/src/apiManager.ts index b4f155c39..97fbe6135 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -18,6 +18,7 @@ class ApiManager { private onDidClasspathUpdateEmitter: Emitter = new Emitter(); private onDidServerModeChangeEmitter: Emitter = new Emitter(); private onDidProjectsImportEmitter: Emitter = new Emitter(); + private onDidProjectsDeleteEmitter: Emitter = new Emitter(); private traceEventEmitter: Emitter = new Emitter(); private sourceInvalidatedEventEmitter: Emitter = new Emitter(); private serverReadyPromiseResolve: (result: boolean) => void; @@ -46,6 +47,7 @@ class ApiManager { const onDidClasspathUpdate = this.onDidClasspathUpdateEmitter.event; const onDidServerModeChange = this.onDidServerModeChangeEmitter.event; const onDidProjectsImport = this.onDidProjectsImportEmitter.event; + const onDidProjectsDelete = this.onDidProjectsDeleteEmitter.event; const traceEvent = this.traceEventEmitter.event; const serverReadyPromise: Promise = new Promise((resolve) => { @@ -69,6 +71,7 @@ class ApiManager { serverMode, onDidServerModeChange, onDidProjectsImport, + onDidProjectsDelete, serverReady, onWillRequestStart, onDidRequestEnd, @@ -97,6 +100,10 @@ class ApiManager { this.onDidProjectsImportEmitter.fire(event); } + public fireDidProjectsDelete(event: Uri[]): void { + this.onDidProjectsDeleteEmitter.fire(event); + } + public fireTraceEvent(event: any): void { this.traceEventEmitter.fire(event); } diff --git a/src/buildFilesSelector.ts b/src/buildFilesSelector.ts index 88d1a38cc..8a5f2695f 100644 --- a/src/buildFilesSelector.ts +++ b/src/buildFilesSelector.ts @@ -1,41 +1,69 @@ -import { ExtensionContext, MessageItem, QuickPickItem, QuickPickItemKind, Uri, WorkspaceFolder, extensions, window, workspace } from "vscode"; -import { convertToGlob, getExclusionGlob as getExclusionGlobPattern, getInclusionPatternsFromNegatedExclusion } from "./utils"; +import { ExtensionContext, MessageItem, QuickPickItem, QuickPickItemKind, Uri, WorkspaceFolder, window, workspace } from "vscode"; +import { convertToGlob, getExclusionGlob, getInclusionPatternsFromNegatedExclusion } from "./utils"; import * as path from "path"; +import { IBuildTool, getContributedBuildTools } from "./plugin"; export const PICKED_BUILD_FILES = "java.pickedBuildFiles"; +export const BUILD_TOOL_FOR_CONFLICTS = "java.buildToolForConflicts"; export class BuildFileSelector { - private buildTypes: IBuildTool[] = []; + /** + * The build tools that are contributed/supported by extensions. + */ + private buildTools: IBuildTool[] = []; + /** + * The extension context. + */ private context: ExtensionContext; + /** + * Glob pattern that needs to be excluded from the search. + */ private exclusionGlobPattern: string; - // cached glob pattern for build files. + /** + * Glob pattern to search build files. + */ private searchPattern: string; - // cached glob pattern for build files that are explicitly - // included from the setting: "java.import.exclusions" (negated exclusion). + /** + * Glob pattern for build files that are explicitly + * included from the setting: "java.import.exclusions" (negated exclusion). + */ private negatedExclusionSearchPattern: string | undefined; - constructor(context: ExtensionContext) { - this.context = context; - // TODO: should we introduce the exclusion globs into the contribution point? - this.exclusionGlobPattern = getExclusionGlobPattern(["**/target/**", "**/bin/**", "**/build/**"]); - for (const extension of extensions.all) { - const javaBuildTools: IBuildTool[] = extension.packageJSON.contributes?.javaBuildTools; - if (!Array.isArray(javaBuildTools)) { - continue; - } + /** + * string array for the imported folder paths. + */ + private importedFolderPaths: string[]; - for (const buildType of javaBuildTools) { - if (!this.isValidBuildTypeConfiguration(buildType)) { - continue; - } + /** + * Mark if the selector is used during initialization. + */ + private isInitialization: boolean; - this.buildTypes.push(buildType); - } + /** + * The build files that are found in the workspace. + */ + private foundBuildFiles: Uri[] = []; + + /** + * @param context The extension context. + * @param isInitialization Mark if the selector is used during initialization. + */ + constructor(context: ExtensionContext, importedFolderUris: string[], isInitialization: boolean = true) { + this.context = context; + this.importedFolderPaths = importedFolderUris.map(uri => Uri.parse(uri).fsPath); + this.isInitialization = isInitialization; + const buildTool = this.context.workspaceState.get(BUILD_TOOL_FOR_CONFLICTS); + if (!buildTool) { + this.buildTools = getContributedBuildTools(); + } else { + this.buildTools.push(buildTool); } - this.searchPattern = `**/{${this.buildTypes.map(buildType => buildType.buildFileNames.join(","))}}`; + // TODO: should we introduce the exclusion globs into the contribution point? + this.exclusionGlobPattern = getExclusionGlob(["**/target/**", "**/bin/**", "**/build/**"]); + this.searchPattern = `**/{${this.buildTools.map(buildTool => buildTool.buildFileNames.join(","))}}`; const inclusionFolderPatterns: string[] = getInclusionPatternsFromNegatedExclusion(); if (inclusionFolderPatterns.length > 0) { const buildFileNames: string[] = []; - this.buildTypes.forEach(buildType => buildFileNames.push(...buildType.buildFileNames)); + this.buildTools.forEach(buildTool => buildFileNames.push(...buildTool.buildFileNames)); this.negatedExclusionSearchPattern = convertToGlob(buildFileNames, inclusionFolderPatterns); } } @@ -44,7 +72,7 @@ export class BuildFileSelector { * @returns `true` if there are build files in the workspace, `false` otherwise. */ public async hasBuildFiles(): Promise { - if (this.buildTypes.length === 0) { + if (this.buildTools.length === 0) { return false; } @@ -65,26 +93,18 @@ export class BuildFileSelector { /** * Get the uri strings for the build files that the user selected. * @returns An array of uri string for the build files that the user selected. - * An empty array means user canceled the selection. + * An empty array means user canceled the selection. Or `undefined` on cancellation. */ - public async getBuildFiles(): Promise { - const cache = this.context.workspaceState.get(PICKED_BUILD_FILES); - if (cache !== undefined) { - return cache; - } - - const choice = await this.chooseBuildFilePickers(); - const pickedUris = await this.eliminateBuildToolConflict(choice); - if (pickedUris.length > 0) { - this.context.workspaceState.update(PICKED_BUILD_FILES, pickedUris); + public async selectBuildFiles(): Promise { + const choices = await this.chooseBuildFilePickers(); + if (choices === undefined) { + return undefined; } + const pickedUris = await this.eliminateBuildToolConflict(choices); + this.context.workspaceState.update(PICKED_BUILD_FILES, pickedUris); return pickedUris; } - private isValidBuildTypeConfiguration(buildType: IBuildTool): boolean { - return !!buildType.displayName && !!buildType.buildFileNames; - } - private async chooseBuildFilePickers(): Promise { return window.showQuickPick(this.getBuildFilePickers(), { placeHolder: "Note: Currently only Maven projects can be partially imported.", @@ -100,54 +120,60 @@ export class BuildFileSelector { * Get pickers for all build files in the workspace. */ private async getBuildFilePickers(): Promise { + const addedFolders: Map = new Map(); const uris: Uri[] = await workspace.findFiles(this.searchPattern, this.exclusionGlobPattern); if (this.negatedExclusionSearchPattern) { uris.push(...await workspace.findFiles(this.negatedExclusionSearchPattern, null /* force not use default exclusion */)); } + this.foundBuildFiles.push(...uris); - // group build files by build tool and then sort them by build tool name. - const groupByBuildTool = new Map(); for (const uri of uris) { - const buildType = this.buildTypes.find(buildType => buildType.buildFileNames.includes(path.basename(uri.fsPath))); - if (!buildType) { + const containingFolder = path.dirname(uri.fsPath); + const buildTool = this.buildTools.find(buildTool => buildTool.buildFileNames.includes(path.basename(uri.fsPath))); + if (!buildTool) { continue; } - if (!groupByBuildTool.has(buildType)) { - groupByBuildTool.set(buildType, []); - } - groupByBuildTool.get(buildType)?.push(uri); - } - - const buildTypeArray = Array.from(groupByBuildTool.keys()); - buildTypeArray.sort((a, b) => a.displayName.localeCompare(b.displayName)); - const addedFolders: Map = new Map(); - for (const buildType of buildTypeArray) { - const uris = groupByBuildTool.get(buildType); - for (const uri of uris) { - const containingFolder = path.dirname(uri.fsPath); - if (addedFolders.has(containingFolder)) { - const picker = addedFolders.get(containingFolder); - if (!picker.buildTypeAndUri.has(buildType)) { - picker.detail += `, ./${workspace.asRelativePath(uri)}`; - picker.description += `, ${buildType.displayName}`; - picker.buildTypeAndUri.set(buildType, uri); - } - } else { - addedFolders.set(containingFolder, { - label: path.basename(containingFolder), - detail: `./${workspace.asRelativePath(uri)}`, - description: buildType.displayName, - buildTypeAndUri: new Map([[buildType, uri]]), - picked: true, - }); + if (addedFolders.has(containingFolder)) { + const picker = addedFolders.get(containingFolder); + if (!picker.buildToolAndUri.has(buildTool)) { + picker.buildToolAndUri.set(buildTool, uri); } + } else { + addedFolders.set(containingFolder, { + label: path.basename(containingFolder), + detail: "", // update later + description: "", // update later + buildToolAndUri: new Map([[buildTool, uri]]), + }); } } - const pickers: IBuildFilePicker[] = Array.from(addedFolders.values()); + await this.setPickerUiComponents(pickers); return this.addSeparator(pickers); } + private isImported(uri: Uri): boolean { + return this.importedFolderPaths.some(importedFolderPath => + path.relative(importedFolderPath, path.dirname(uri.fsPath)) === ""); + } + + /** + * Update the picker's UI components, including detail, description and picked flag. + */ + private async setPickerUiComponents(pickers: IBuildFilePicker[]) { + for (const picker of pickers) { + const buildTools = Array.from(picker.buildToolAndUri.keys()) + .sort((a, b) => a.displayName.localeCompare(b.displayName)); + + const details = buildTools.map(buildTool => workspace.asRelativePath(picker.buildToolAndUri.get(buildTool))); + const descriptions = buildTools.map(buildTool => buildTool.displayName); + + picker.detail = details.join(', '); + picker.description = descriptions.join(', '); + picker.picked = this.isInitialization || this.isImported(picker.buildToolAndUri.values().next().value); + } + } + /** * Add a separator pickers between pickers that belong to different workspace folders. */ @@ -155,14 +181,10 @@ export class BuildFileSelector { // group pickers by their containing workspace folder const workspaceFolders = new Map(); for (const picker of pickers) { - const folder = workspace.getWorkspaceFolder(picker.buildTypeAndUri.values().next().value); - if (!folder) { - continue; - } - if (!workspaceFolders.has(folder)) { - workspaceFolders.set(folder, []); + const folder = workspace.getWorkspaceFolder(picker.buildToolAndUri.values().next().value); + if (folder) { + workspaceFolders.set(folder, [...(workspaceFolders.get(folder) || []), picker]); } - workspaceFolders.get(folder)?.push(picker); } const newPickers: IBuildFilePicker[] = []; @@ -173,7 +195,7 @@ export class BuildFileSelector { newPickers.push({ label: folder.name, kind: QuickPickItemKind.Separator, - buildTypeAndUri: null + buildToolAndUri: null }); newPickers.push(...this.sortPickers(pickersInFolder)); } @@ -182,8 +204,8 @@ export class BuildFileSelector { private sortPickers(pickers: IBuildFilePicker[]): IBuildFilePicker[] { return pickers.sort((a, b) => { - const pathA = path.dirname(a.buildTypeAndUri.values().next().value.fsPath); - const pathB = path.dirname(b.buildTypeAndUri.values().next().value.fsPath); + const pathA = path.dirname(a.buildToolAndUri.values().next().value.fsPath); + const pathB = path.dirname(b.buildToolAndUri.values().next().value.fsPath); return pathA.localeCompare(pathB); }); } @@ -191,68 +213,86 @@ export class BuildFileSelector { /** * Ask user to choose a build tool when there are multiple build tools in the same folder. */ - private async eliminateBuildToolConflict(choice?: IBuildFilePicker[]): Promise { - if (!choice) { - return []; - } - const conflictBuildTypeAndUris = new Map(); + private async eliminateBuildToolConflict(choices?: IBuildFilePicker[]): Promise { + // group uris by build tool + const conflictBuildToolAndUris = new Map(); const result: string[] = []; - for (const picker of choice) { - if (picker.buildTypeAndUri.size > 1) { - for (const [buildType, uri] of picker.buildTypeAndUri) { - if (!conflictBuildTypeAndUris.has(buildType)) { - conflictBuildTypeAndUris.set(buildType, []); - } - conflictBuildTypeAndUris.get(buildType)?.push(uri); - } + for (const picker of choices) { + if (picker.buildToolAndUri.size > 1) { + picker.buildToolAndUri.forEach((uri, buildTool) => { + conflictBuildToolAndUris.set(buildTool, [...(conflictBuildToolAndUris.get(buildTool) || []), uri]); + }); } else { - result.push(picker.buildTypeAndUri.values().next().value.toString()); + result.push(picker.buildToolAndUri.values().next().value.toString()); } } - if (conflictBuildTypeAndUris.size > 0) { - const conflictItems: IConflictItem[] = []; - for (const buildType of conflictBuildTypeAndUris.keys()) { - conflictItems.push({ - title: buildType.displayName, - uris: conflictBuildTypeAndUris.get(buildType), - }); + if (conflictBuildToolAndUris.size > 0) { + const buildTool = this.context.workspaceState.get(BUILD_TOOL_FOR_CONFLICTS); + if (buildTool) { + result.push(...this.filterByCachedBuildTool(conflictBuildToolAndUris, buildTool)); + } else { + result.push(...await this.askToResolveConflicts(conflictBuildToolAndUris)); } - conflictItems.sort((a, b) => a.title.localeCompare(b.title)); + } + return result; + } + + private filterByCachedBuildTool(conflictBuildToolAndUris: Map, buildTool: IBuildTool): string[] { + const result: string[] = []; + if (conflictBuildToolAndUris.has(buildTool)) { + result.push(...conflictBuildToolAndUris.get(buildTool)!.map(uri => uri.toString())); + } + return result; + } + + private async askToResolveConflicts(conflictBuildToolAndUris: Map): Promise { + const result: string[] = []; + const conflictItems: IConflictItem[] = []; + for (const buildTool of conflictBuildToolAndUris.keys()) { conflictItems.push({ - title: "Skip", - isCloseAffordance: true, + title: buildTool.displayName, + buildTool: buildTool, + uris: conflictBuildToolAndUris.get(buildTool), }); + } + conflictItems.sort((a, b) => a.title.localeCompare(b.title)); + conflictItems.push({ + title: "Skip", + uris: [], + isCloseAffordance: true, + }); - const choice = await window.showInformationMessage( - "Which build tool would you like to use for the workspace?", - { - modal: true, - }, - ...conflictItems - ); + const choice = await window.showInformationMessage( + "Which build tool would you like to use for the workspace?", + { + modal: true, + }, + ...conflictItems + ); - if (choice?.title !== "Skip" && choice?.uris) { - result.push(...choice.uris.map(uri => uri.toString())); - } + if (choice?.title !== "Skip") { + result.push(...choice.uris.map(uri => uri.toString())); + this.context.workspaceState.update(BUILD_TOOL_FOR_CONFLICTS, choice.buildTool); } return result; } -} -interface IBuildTool { - displayName: string; - buildFileNames: string[]; + public getAllFoundBuildFiles(): Uri[] { + return this.foundBuildFiles; + } } interface IConflictItem extends MessageItem { - uris?: Uri[]; + uris: Uri[]; + buildTool?: IBuildTool; } interface IBuildFilePicker extends QuickPickItem { - buildTypeAndUri: Map; + buildToolAndUri: Map; } export function cleanupProjectPickerCache(context: ExtensionContext) { context.workspaceState.update(PICKED_BUILD_FILES, undefined); + context.workspaceState.update(BUILD_TOOL_FOR_CONFLICTS, undefined); } diff --git a/src/commands.ts b/src/commands.ts index c19b75192..0654ec363 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -162,6 +162,7 @@ export namespace Commands { */ export const IMPORT_PROJECTS_CMD = 'java.project.import.command'; export const IMPORT_PROJECTS = 'java.project.import'; + export const CHANGE_IMPORTED_PROJECTS = 'java.project.changeImportedProjects'; /** * Override or implements the methods from the supertypes. */ diff --git a/src/extension.api.ts b/src/extension.api.ts index e0dfcaceb..4c8661062 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -111,7 +111,7 @@ export interface SourceInvalidatedEvent { affectedEditorDocuments?: Uri[]; } -export const extensionApiVersion = '0.12'; +export const extensionApiVersion = '0.13'; export interface ExtensionAPI { readonly apiVersion: string; @@ -136,6 +136,16 @@ export interface ExtensionAPI { * The Uris in the array point to the project root path. */ readonly onDidProjectsImport: Event; + + /** + * An event fires on projects deleted. This API is not supported in light weight server mode so far. + * The Uris in the array point to the project root path. + * + * @since API version 0.13 + * @since extension version 1.25.0 + */ + readonly onDidProjectsDelete: Event; + readonly goToDefinition: GoToDefinitionCommand; /** * Indicates the current active mode for Java Language Server. Possible modes are: diff --git a/src/extension.ts b/src/extension.ts index 818b4cb7c..8f519e796 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -36,7 +36,7 @@ import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; -import { BuildFileSelector, cleanupProjectPickerCache } from './buildFilesSelector'; +import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -395,7 +395,7 @@ export async function activate(context: ExtensionContext): Promise } if (choice === "Yes") { - await startStandardServer(context, requirements, clientOptions, workspacePath); + await startStandardServer(context, requirements, clientOptions, workspacePath, true /* triggeredByCommand */); } }); @@ -464,12 +464,12 @@ export async function activate(context: ExtensionContext): Promise }); } -async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string) { +async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, triggeredByCommand: boolean = false) { if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { return; } - const selector: BuildFileSelector = new BuildFileSelector(context); + const selector: BuildFileSelector = new BuildFileSelector(context, []); const importMode: ImportMode = await getImportMode(context, selector); if (importMode === ImportMode.automatic) { if (!await ensureNoBuildToolConflicts(context, clientOptions)) { @@ -478,10 +478,14 @@ async function startStandardServer(context: ExtensionContext, requirements: requ } else { const buildFiles: string[] = []; if (importMode === ImportMode.manual) { - buildFiles.push(...await selector.getBuildFiles()); + const cache = context.workspaceState.get(PICKED_BUILD_FILES); + if (cache === undefined || cache.length === 0 && triggeredByCommand) { + buildFiles.push(...await selector.selectBuildFiles() || []); + } else { + buildFiles.push(...cache); + } } if (buildFiles.length === 0) { - // cancelled by user commands.executeCommand('setContext', 'java:serverMode', ServerMode.lightWeight); serverStatusBarProvider.showNotImportedStatus(); return; diff --git a/src/plugin.ts b/src/plugin.ts index 886ef2c52..2ba87b479 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -97,3 +97,30 @@ export function isContributedPartUpdated(oldContributedPart: Array, newC } return hasChanged; } + +export function getContributedBuildTools(): IBuildTool[] { + const buildTypes: IBuildTool[] = []; + for (const extension of extensions.all) { + const javaBuildTools: IBuildTool[] = extension.packageJSON.contributes?.javaBuildTools; + if (!Array.isArray(javaBuildTools)) { + continue; + } + + for (const buildType of javaBuildTools) { + if (!isValidBuildTypeConfiguration(buildType)) { + continue; + } + buildTypes.push(buildType); + } + } + return buildTypes; +} + +export interface IBuildTool { + displayName: string; + buildFileNames: string[]; +} + +function isValidBuildTypeConfiguration(buildType: IBuildTool): boolean { + return !!buildType.displayName && !!buildType.buildFileNames; +} \ No newline at end of file diff --git a/src/protocol.ts b/src/protocol.ts index b2e267705..a8f605239 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -58,6 +58,7 @@ export enum FeatureStatus { export enum EventType { classpathUpdated = 100, projectsImported = 200, + projectsDeleted = 210, incompatibleGradleJdkIssue = 300, upgradeGradleWrapper = 400, sourceInvalidated = 500, diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 41d39898d..b04fa8802 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -34,12 +34,13 @@ import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./sta import { TracingLanguageClient } from './TracingLanguageClient'; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; -import { getAllJavaProjects, getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getAllProjects, getJavaConfiguration } from "./utils"; import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; import { ClientCodeActionProvider } from './clientCodeActionProvider'; +import { BuildFileSelector } from './buildFilesSelector'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -195,7 +196,7 @@ export class StandardLanguageClient { case EventType.classpathUpdated: apiManager.fireDidClasspathUpdate(Uri.parse(notification.data)); break; - case EventType.projectsImported: + case EventType.projectsImported: { const projectUris: Uri[] = []; if (notification.data) { for (const uriString of notification.data) { @@ -206,6 +207,19 @@ export class StandardLanguageClient { apiManager.fireDidProjectsImport(projectUris); } break; + } + case EventType.projectsDeleted: { + const projectUris: Uri[] = []; + if (notification.data) { + for (const uriString of notification.data) { + projectUris.push(Uri.parse(uriString)); + } + } + if (projectUris.length > 0) { + apiManager.fireDidProjectsDelete(projectUris); + } + break; + } case EventType.incompatibleGradleJdkIssue: const options: string[] = []; const info = notification.data as GradleCompatibilityInfo; @@ -641,7 +655,46 @@ export class StandardLanguageClient { private registerCommandsForStandardServer(context: ExtensionContext, jdtEventEmitter: EventEmitter): void { context.subscriptions.push(commands.registerCommand(Commands.IMPORT_PROJECTS_CMD, async () => { - return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); + if (getJavaConfiguration().get("import.projectSelection") === "automatic") { + return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.IMPORT_PROJECTS); + } + const projectUris: string[] = await getAllProjects(true /* excludeDefaultProject */); + const buildFileSelector = new BuildFileSelector(context, projectUris, false); + const selectedBuildFiles = await buildFileSelector.selectBuildFiles(); + if (selectedBuildFiles === undefined) { + return; // cancelled by user + } + const importedFolders = projectUris.map(uri => Uri.parse(uri).fsPath); + const allFoundBuildFiles = buildFileSelector.getAllFoundBuildFiles(); + const foldersContainingBuildFiles = allFoundBuildFiles.map(uri => path.dirname(uri.fsPath)); + + const filesToImport = new Set(); + const folderToUpdate = new Set(); + selectedBuildFiles.forEach(buildFile => { + const folder = path.dirname(Uri.parse(buildFile).fsPath); + if (importedFolders.some(importedFolder => path.relative(importedFolder, folder) === "")) { + // update the project if the folder of the build file is already imported + folderToUpdate.add(Uri.file(folder).toString()); + } else { + filesToImport.add(buildFile); + } + }); + + const folderToRemove = new Set(); + foldersContainingBuildFiles.forEach(folder => { + // for those unselected folders, if the folder is imported, delete the project. + const isSelected = selectedBuildFiles.some(buildFile => path.relative(path.dirname(Uri.parse(buildFile).fsPath), folder) === ""); + const isFolderImported = importedFolders.some(importedFolder => path.relative(importedFolder, folder) === ""); + + if (!isSelected && isFolderImported) { + folderToRemove.add(Uri.file(folder).toString()); + } + }); + + if (filesToImport.size > 0 || folderToUpdate.size > 0 || folderToRemove.size > 0) { + return await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.CHANGE_IMPORTED_PROJECTS, + Array.from(filesToImport), Array.from(folderToUpdate), Array.from(folderToRemove)); + } })); context.subscriptions.push(commands.registerCommand(Commands.OPEN_OUTPUT, () => this.languageClient.outputChannel.show(ViewColumn.Three))); diff --git a/src/utils.ts b/src/utils.ts index a0e6ecf42..97acc7ac5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -145,9 +145,24 @@ function parseToStringGlob(patterns: string[]): string { * @returns string array for the project uris. */ export async function getAllJavaProjects(excludeDefaultProject: boolean = true): Promise { - let projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS); + return filterDefaultProject(projectUris, excludeDefaultProject); +} + +/** + * Get all projects from Java Language Server. + * @param excludeDefaultProject whether the default project should be excluded from the list, defaults to true. + * @returns string array for the project uris. + */ +export async function getAllProjects(excludeDefaultProject: boolean = true): Promise { + const projectUris: string[] = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_ALL_JAVA_PROJECTS, + JSON.stringify({ includeNonJava: true })); + return filterDefaultProject(projectUris, excludeDefaultProject); +} + +function filterDefaultProject(projectUris: string[], excludeDefaultProject: boolean): string[] { if (excludeDefaultProject) { - projectUris = projectUris.filter((uriString) => { + return projectUris.filter((uriString) => { const projectPath = Uri.parse(uriString).fsPath; return path.basename(projectPath) !== "jdt.ls-java-project"; }); From 1b1d3236c9dc489537b653fd3a18a6b61ec51b8a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 29 Nov 2023 14:38:29 -0500 Subject: [PATCH 408/708] Changelog for 1.25.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fa9f8e99..47116562d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log +## 1.25.0 (November 30th, 2023) + * enhancement - Provide support for Java 21. See [#3292](https://github.com/redhat-developer/vscode-java/issues/3292). + * enhancement - Import projects by configurations. See [#3356](https://github.com/redhat-developer/vscode-java/pull/3356). + * enhancement - Support add/remove of imported projects. See [#3398](https://github.com/redhat-developer/vscode-java/pull/3398). + * enhancement - Host textmate definition for kotlin language. See [#3334](https://github.com/redhat-developer/vscode-java/issues/3334). + * enhancement - Categorize the extension settings. See [#2548](https://github.com/redhat-developer/vscode-java/issues/2548). + * enhancement - Add `maven.multiModuleProjectDirectory` property. See [#3380](https://github.com/redhat-developer/vscode-java/issues/3380). + * enhancement - Add capability to list all VM installs and update project JDK. See [JLS#2977](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2977). + * bug fix - Update to `vscode-languageclient` 8.2.0-next.3 (using Node 18) to fix IPC path length limitations. See [#3371](https://github.com/redhat-developer/vscode-java/issues/3371). + * bug fix - Avoid refreshing language server when contributing extension's dependency closure includes it. See [#3349](https://github.com/redhat-developer/vscode-java/issues/3349). + * bug fix - Wrongly encoded semantic tokens around `class` keyword. See [JLS#2920](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2920). + * bug fix - Cleanups & Organize Imports should only react to internal project preferences with `canUseInternalSettings`. See [#3399](https://github.com/redhat-developer/vscode-java/issues/3399), [#3370](https://github.com/redhat-developer/vscode-java/issues/3370), [JLS#2975](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2975). + * bug fix - Fix missing prompt to select build tool for Gradle/Maven mixed project. See [#3400](https://github.com/redhat-developer/vscode-java/issues/3400). + * bug fix - Respect the VS Code setting to disable extension recommendations. See [#3381](https://github.com/redhat-developer/vscode-java/issues/3381). + * bug fix - `IllegalArgumentException` on `completionItem/resolve` of package declaration. See [JLS#2924](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2924). + * bug fix - Add trace to understand the probability of document out-of-sync. See [JLS#2954](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2954). + * dependencies - Bump axios from 1.5.0 to 1.6.1. See [#3388](https://github.com/redhat-developer/vscode-java/pull/3388). + * dependencies - Update buildship to 3.1.8. See [JLS#2974](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2974). + ## 1.24.0 (October 26th, 2023) * performance - Exclude certain folders (eg. `node_modules/`) from "trigger" file search on activation. [#3348](https://github.com/redhat-developer/vscode-java/pull/3348). * enhancement - Move snippet suggestions above matching keywords in completion list. See [#2584](https://github.com/redhat-developer/vscode-java/issues/2584). From 16055f9bc180f115aa2ba66a33d155aa592b8f9a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Nov 2023 11:49:46 -0500 Subject: [PATCH 409/708] Upversion to 1.26.0 Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package-lock.json b/package-lock.json index ee90b5401..5b8bcab6a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "java", - "version": "1.25.0", + "version": "1.26.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index ddd68693d..625f4eddc 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.25.0", + "version": "1.26.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From d244b6491d78e2b82e41419f4d70c4db7935a93c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Nov 2023 14:04:29 -0500 Subject: [PATCH 410/708] Ensure all version references are synced correctly. Signed-off-by: Roland Grunberg --- package-lock.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 5b8bcab6a..b210a5d6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "java", - "version": "1.25.0", + "version": "1.26.0", "lockfileVersion": 3, "requires": true, "packages": { From 5e4d93ac128cd211d7cecfc4e9c01f5748e4b9fe Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 22 Sep 2023 16:18:35 -0400 Subject: [PATCH 411/708] Migrate Jenkins release job to GitHub Actions. - Preserve existing Jenkinsfile as a fallback Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 193 ++++++++++++++++++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 .github/workflows/release.yml diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..f6b6276ee --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,193 @@ +name: release + +on: + schedule: + - cron: '0 8 * * *' + workflow_dispatch: + inputs: + JDT_LS_VERSION: + description: 'The (optional) release version (including qualifier) of JDT-LS to use.' + type: string + publishPreRelease: + description: 'Publish a pre-release ?' + required: true + type: choice + options: + - 'true' + - 'false' + default: 'true' + publishToMarketPlace: + description: 'Publish to VS Code Marketplace ?' + required: true + type: choice + options: + - 'true' + - 'false' + default: 'false' + publishToOVSX: + description: 'Publish to OpenVSX Registry ?' + required: true + type: choice + options: + - 'true' + - 'false' + default: 'false' +jobs: + should-build-change: + runs-on: ubuntu-latest + outputs: + repo-cache-hit: ${{ steps.cache-last-commit.outputs.cache-hit }} + steps: + - uses: actions/checkout@v3 + with: + repository: 'eclipse-jdtls/eclipse.jdt.ls' + fetch-depth: 2 + path: eclipse.jdt.ls + - uses: actions/checkout@v3 + with: + repository: 'redhat-developer/vscode-java' + fetch-depth: 2 + path: vscode-java + - run: | + pushd eclipse.jdt.ls + git rev-parse HEAD >> ../lastCommit + popd + pushd vscode-java + git rev-parse HEAD >> ../lastCommit + - name: Check New Changes + id: cache-last-commit + uses: actions/cache@v2 + with: + path: lastCommit + key: lastCommit-${{ hashFiles('lastCommit') }} + packaging-job: + runs-on: ubuntu-latest + needs: should-build-change + if: ${{ needs.should-build-change.outputs.repo-cache-hit != 'true' || github.event_name != 'schedule' }} + steps: + - name: Checkout JDT-LS + if: "${{ inputs.JDT_LS_VERSION == '' }}" + uses: actions/checkout@v2 + with: + repository: eclipse-jdtls/eclipse.jdt.ls + - name: Cache Maven local repository + uses: actions/cache@v2 + with: + path: | + ~/.m2/repository + ~/.m2/wrapper + !~/.m2/repository/org/eclipse/jdt/ls + key: maven-local-${{ hashFiles('**/pom.xml') }} + - name: Set Up Java + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + - name: Build JDT-LS + if: "${{ inputs.JDT_LS_VERSION == '' }}" + run: | + ./mvnw clean verify -B -DskipTests -Pserver-distro + mkdir ../staging + cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging + - name: Check Out VS Code Java + uses: actions/checkout@v2 + - name: Set Up NodeJS + uses: actions/setup-node@v2 + with: + node-version: '18' + - name: Install NodeJS dependencies + run: npm install -g typescript "@vscode/vsce" "ovsx" + - name: Download JDT-LS Release + if: "${{ inputs.JDT_LS_VERSION != '' }}" + run: | + version=`echo ${{ inputs.JDT_LS_VERSION }} | cut -d- -f1` + curl -LO https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${{ inputs.JDT_LS_VERSION }}.tar.gz + - name: Build vscode-java + run: | + npm install + npm run vscode:prepublish + npm run compile + - name: Test vscode-java + env: + SKIP_COMMANDS_TEST: true + SKIP_CLASSPATH_TEST: true + run: | + $(echo "xvfb-run --auto-servernum") npm run test --silent + continue-on-error: true + - name: Clean tests + run: npx gulp clean_test_folder + - name: Prepare Lombok Support + run: | + npx gulp download_lombok + - name: Prepare Pre-Release + if: ${{ github.event_name == 'schedule' || inputs.publishPreRelease == 'true' }} + run: | + npx gulp prepare_pre_release + echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV + - name: Prepare JDT-LS + run: | + rm -rf ./out + mkdir server/ + if [ -e jdt-language-server-*.tar.gz ]; then + tar -xf jdt-language-server-*.tar.gz -C server/ + else + tar -xf ../staging/jdt-language-server-*.tar.gz -C server/ + fi + echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV + - name: Package vscode-java + run: | + platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") + for platform in ${platforms[@]}; do + npx gulp download_jre --target ${platform} --javaVersion 17 + vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix + done + rm -rf jre/ + vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix + ls -lash *.vsix + - name: Upload VSIX Artifacts + uses: actions/upload-artifact@v2 + with: + name: vscode-java + path: | + java-*-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix + vscode-java-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix + if-no-files-found: error + - name: Publish to GH Release Tab + if: ${{ inputs.publishToMarketPlace == 'true' && inputs.publishToOVSX == 'true' }} + uses: "marvinpinto/action-automatic-releases@919008cf3f741b179569b7a6fb4d8860689ab7f0" + with: + repo_token: "${{ secrets.GITHUB_TOKEN }}" + automatic_release_tag: "v${{ env.EXT_VERSION }}" + title: "${{ env.EXT_VERSION }}" + draft: true + files: | + java-*-${{ env.EXT_VERSION }}-${{github.run_number}}.vsix + vscode-java-${{ env.EXT_VERSION }}-${{ github.run_number }}.vsix + release-job: + environment: ${{ (inputs.publishToMarketPlace == 'true' || inputs.publishToOVSX == 'true') && 'release' || 'pre-release' }} + runs-on: ubuntu-latest + needs: packaging-job + steps: + - name: Set Up NodeJS + uses: actions/setup-node@v2 + with: + node-version: '18' + - name: Install dependencies + run: | + npm install -g typescript "@vscode/vsce" "ovsx" + - name: Download VSIX & JDT-LS + uses: actions/download-artifact@v3 + - name: Publish to VS Code Marketplace + if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} + run: | + for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do + vsce publish -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + done + vsce publish -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + - name: Publish to OpenVSX Registry + if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }} + run: | + for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do + ovsx publish -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + done + ovsx publish -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix From d186e1216311723b285d0506be4ada06b35e6284 Mon Sep 17 00:00:00 2001 From: Per-Steinar Karlsen Date: Tue, 5 Dec 2023 07:52:58 +0100 Subject: [PATCH 412/708] Improved grammar for kotlin based on official documentation (#3407) Signed-off-by: Per-Steinar Karlsen Co-authored-by: Per-Steinar Karlsen --- .../kotlin/kotlin.tmLanguage.json | 150 ++++++++++++++++-- 1 file changed, 140 insertions(+), 10 deletions(-) diff --git a/language-support/kotlin/kotlin.tmLanguage.json b/language-support/kotlin/kotlin.tmLanguage.json index eaa053b90..53b07a1b1 100644 --- a/language-support/kotlin/kotlin.tmLanguage.json +++ b/language-support/kotlin/kotlin.tmLanguage.json @@ -1,7 +1,7 @@ { "information_for_contributors": [ - "This file has been copied from https://github.com/eclipse/buildship/blob/b848d9a08283b68860671a73ceec3c99bdab27c2/org.eclipse.buildship.kotlindsl.provider/kotlin.tmLanguage.json" - ], + "This file has been copied from https://github.com/eclipse/buildship/blob/b848d9a08283b68860671a73ceec3c99bdab27c2/org.eclipse.buildship.kotlindsl.provider/kotlin.tmLanguage.json" + ], "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", "name": "Kotlin", "scopeName": "source.kotlin", @@ -21,10 +21,13 @@ ], "repository": { "import": { - "begin": "\\b(import)\\b\\s*", + "begin": "\\b(import)\\b\\s?([\\w+.]*\\w+)?\\s*", "beginCaptures": { "1": { "name": "storage.type.import.kotlin" + }, + "2": { + "name": "storage.modifier.import.kotlin" } }, "end": ";|$", @@ -91,6 +94,15 @@ { "include": "#variable-declaration" }, + { + "include": "#constant-declaration" + }, + { + "include": "#variable" + }, + { + "include": "#object" + }, { "include": "#type-constraint" }, @@ -100,6 +112,9 @@ { "include": "#function-call" }, + { + "include": "#property.reference" + }, { "include": "#method-reference" }, @@ -141,6 +156,18 @@ }, { "include": "#null-literal" + }, + { + "match": ",", + "name": "punctuation.separator.delimiter.kotlin" + }, + { + "match": "\\.", + "name": "punctuation.separator.period.kotlin" + }, + { + "match": "\\?\\.", + "name": "punctuation.accessor.optional.kotlin" } ] }, @@ -234,6 +261,9 @@ }, { "include": "#control-keywords" + }, + { + "include": "#map-keywords" } ] }, @@ -257,6 +287,10 @@ "match": "\\b(if|else|while|do|when|try|throw|break|continue|return|for)\\b", "name": "keyword.control.kotlin" }, + "map-keywords": { + "match": "\\b(to)\\b", + "name": "keyword.map.kotlin" + }, "annotation-simple": { "match": "(?<([^<>]|\\g)+>)?\\s*(?:(\\w+)\\.)?(\\b\\w+\\b|`[^`]+`)", - "captures": { + "begin": "\\b(fun)\\b\\s*(?<([^<>]|\\g)+>)?\\s*(?:(\\w+)\\.)?(\\b\\w+\\b|`[^`]+`)\\(", + "beginCaptures": { "1": { "name": "storage.type.function.kotlin" }, @@ -359,10 +393,41 @@ "5": { "name": "entity.name.function.declaration.kotlin" } + }, + "end": "\\)", + "endCaptures": { + "1": { + "name": "keyword.operator.assignment.type.kotlin" + } + }, + "patterns": [ + { + "include": "#parameter-declaration" + } + ] + }, + "parameter-declaration": { + "match": "\\b(\\w+)\\s*(:)\\s*(\\w+)(\\?)?(,)?", + "captures": { + "1": { + "name": "variable.parameter.kotlin" + }, + "2": { + "name": "keyword.operator.assignment.type.kotlin" + }, + "3": { + "name": "entity.name.type.kotlin" + }, + "4": { + "name": "keyword.operator.optional" + }, + "5": { + "name": "punctuation.separator.delimiter.kotlin" + } } }, "variable-declaration": { - "match": "\\b(val|var)\\b\\s*(?<([^<>]|\\g)+>)?", + "match": "\\b(var)\\b\\s*(?<([^<>]|\\g)+>)?", "captures": { "1": { "name": "storage.type.variable.kotlin" @@ -376,11 +441,52 @@ } } }, + "constant-declaration": { + "match": "\\b(val)\\b\\s*(?<([^<>]|\\g)+>)?", + "captures": { + "1": { + "name": "storage.type.variable.readonly.kotlin" + }, + "2": { + "patterns": [ + { + "include": "#type-parameter" + } + ] + } + } + }, + "variable" : { + "match": "\\b(\\w+)(?=\\s*[:=])", + "captures": { + "1": { + "name": "variable.other.definition.kotlin" + } + } + }, + "object" : { + "match": "\\b(\\w+)(?=\\.)", + "captures": { + "1": { + "name": "variable.other.object.kotlin" + } + } + }, "type-parameter": { "patterns": [ { - "match": "\\b\\w+\\b", - "name": "entity.name.type.kotlin" + "match": "(:)?\\s*(\\b\\w+\\b)(\\?)?", + "captures": { + "1": { + "name": "keyword.operator.assignment.kotlin" + }, + "2": { + "name": "entity.name.type.kotlin" + }, + "3": { + "name": "keyword.operator.optional" + } + } }, { "match": "\\b(in|out)\\b", @@ -401,12 +507,18 @@ } }, "function-call": { - "match": "\\??\\.?(\\b\\w+\\b|`[^`]+`)\\s*(?<([^<>]|\\g)+>)?\\s*(?=[({])", + "match": "(?:(\\?\\.)|(\\.))?(\\b\\w+\\b|`[^`]+`)\\s*(?<([^<>]|\\g)+>)?\\s*(?=[({])", "captures": { "1": { - "name": "entity.name.function.call.kotlin" + "name": "punctuation.accessor.optional.kotlin" }, "2": { + "name": "punctuation.separator.period.kotlin" + }, + "3": { + "name": "entity.name.function.call.kotlin" + }, + "4": { "patterns": [ { "include": "#type-parameter" @@ -415,6 +527,20 @@ } } }, + "property.reference": { + "match": "(?:(\\?\\.)|(\\.))(\\w+)\\b", + "captures": { + "1": { + "name": "punctuation.accessor.optional.kotlin" + }, + "2": { + "name": "punctuation.separator.period.kotlin" + }, + "3": { + "name": "variable.other.property.kotlin" + } + } + }, "method-reference": { "match": "\\??::(\\b\\w+\\b|`[^`]+`)", "captures": { @@ -537,6 +663,10 @@ "match": "(===?|\\!==?|<=|>=|<|>)", "name": "keyword.operator.comparison.kotlin" }, + { + "match": "(\\?:)", + "name": "keyword.operator.elvis.kotlin" + }, { "match": "([+*/%-]=)", "name": "keyword.operator.assignment.arithmetic.kotlin" From c2f5a6a165a3a3f32577dce03982952b1b99ca6f Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Tue, 5 Dec 2023 00:10:28 -0800 Subject: [PATCH 413/708] Fix the typo: blob -> glob (#3413) Signed-off-by: Sheng Chen --- src/extension.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 8f519e796..6afeaf57e 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -516,9 +516,9 @@ async function workspaceContainsBuildFiles(): Promise { } // Nothing found in negated exclusion pattern, do a normal search then. - const inclusionBlob: string = convertToGlob(inclusionPatterns); - const exclusionBlob: string = getExclusionGlob(); - if (inclusionBlob && (await workspace.findFiles(inclusionBlob, exclusionBlob, 1 /* maxResults */)).length > 0) { + const inclusionGlob: string = convertToGlob(inclusionPatterns); + const exclusionGlob: string = getExclusionGlob(); + if (inclusionGlob && (await workspace.findFiles(inclusionGlob, exclusionGlob, 1 /* maxResults */)).length > 0) { return true; } From f09b712f5d6d6339e765f58c8dfab3f78a378183 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Mon, 4 Dec 2023 15:41:08 -0500 Subject: [PATCH 414/708] Fix escape characters within textblock Signed-off-by: Hope Hadfield --- language-support/java/java.tmLanguage.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/language-support/java/java.tmLanguage.json b/language-support/java/java.tmLanguage.json index e8147d683..2bdf9bf0e 100644 --- a/language-support/java/java.tmLanguage.json +++ b/language-support/java/java.tmLanguage.json @@ -1596,11 +1596,7 @@ "name": "string.quoted.triple.java", "patterns": [ { - "match": "\\\\\"\"\"", - "name": "constant.character.escape.java" - }, - { - "match": "\\\\.", + "match": "(\\\\\"\"\")(?!\")|(\\\\.)", "name": "constant.character.escape.java" } ] From fd9e005d06206b0fa6f6f54aeec961a49e686057 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 6 Dec 2023 11:57:42 -0500 Subject: [PATCH 415/708] Changelog for 1.25.1 - Bump down from 1.26.0 to 1.25.1 for service release Signed-off-by: Roland Grunberg --- CHANGELOG.md | 8 ++++++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47116562d..75132d46a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 1.25.1 (December 7th, 2023) + * performance - Avoid unnecessary (Maven) project updates. See [#3411](https://github.com/redhat-developer/vscode-java/issues/3411). + * bug fix - Out of sync editor content may report false compilation errors. See [JLS#2955](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2955). + * bug fix - Improved support for textmate definition for Kotlin DSL. See [#3403](https://github.com/redhat-developer/vscode-java/issues/3403). + * bug fix - No completion suggestions for package references when `matchCase` is set to `firstLetter`. See [JLS#2925](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2925). + * bug fix - Closing Text Blocks immediately after an escaped character produces incorrect syntax highlight. See [#3384](https://github.com/redhat-developer/vscode-java/issues/3384). + * bug fix - Fix the typo: blob -> glob. See [#3413](https://github.com/redhat-developer/vscode-java/pull/3413). + ## 1.25.0 (November 30th, 2023) * enhancement - Provide support for Java 21. See [#3292](https://github.com/redhat-developer/vscode-java/issues/3292). * enhancement - Import projects by configurations. See [#3356](https://github.com/redhat-developer/vscode-java/pull/3356). diff --git a/package-lock.json b/package-lock.json index b210a5d6b..8edc46d4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.26.0", + "version": "1.25.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.26.0", + "version": "1.25.1", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 625f4eddc..80846dfc4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.26.0", + "version": "1.25.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From fa70956be46d17f1b891dc96d5514fe4d7fa971d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 7 Dec 2023 10:23:14 -0500 Subject: [PATCH 416/708] Upversion to 1.26.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8edc46d4b..b210a5d6b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.25.1", + "version": "1.26.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.25.1", + "version": "1.26.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 80846dfc4..625f4eddc 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.25.1", + "version": "1.26.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 65a64315a6703eb28ae4b70b5d4b025568c52191 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 7 Dec 2023 16:24:52 -0800 Subject: [PATCH 417/708] Make the server status as a normal status bar item (#3419) Signed-off-by: Sheng Chen --- src/extension.ts | 2 - src/languageStatusItemFactory.ts | 72 -------------------- src/serverStatusBarProvider.ts | 111 ++++++++----------------------- 3 files changed, 28 insertions(+), 157 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 6afeaf57e..e8a94e011 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -129,8 +129,6 @@ export async function activate(context: ExtensionContext): Promise cleanJavaWorkspaceStorage(); - serverStatusBarProvider.initialize(); - return requirements.resolveRequirements(context).catch(error => { // show error window.showErrorMessage(error.message, error.label).then((selection) => { diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts index e882ee8c9..0ddf89398 100644 --- a/src/languageStatusItemFactory.ts +++ b/src/languageStatusItemFactory.ts @@ -3,7 +3,6 @@ import * as path from "path"; import * as vscode from "vscode"; import { Commands } from "./commands"; -import { StatusIcon } from "./serverStatusBarProvider"; const languageServerDocumentSelector = [ { scheme: 'file', language: 'java' }, @@ -47,77 +46,6 @@ export namespace StatusCommands { }; } -export namespace ServerStatusItemFactory { - export function create(): any { - if (supportsLanguageStatus()) { - const item = vscode.languages.createLanguageStatusItem("JavaServerStatusItem", languageServerDocumentSelector); - item.name = "Java Language Server Status"; - return item; - } - return undefined; - } - - export function showLightWeightStatus(item: any): void { - item.severity = vscode.LanguageStatusSeverity?.Warning; - item.text = StatusIcon.lightWeight; - item.detail = "Lightweight Mode"; - item.command = StatusCommands.switchToStandardCommand; - } - - export function showNotImportedStatus(item: any): void { - item.severity = vscode.LanguageStatusSeverity?.Warning; - item.text = "No projects are imported"; - item.command = StatusCommands.startStandardServerCommand; - } - - export function showStandardStatus(item: any): void { - item.severity = vscode.LanguageStatusSeverity?.Information; - item.command = StatusCommands.showServerStatusCommand; - } - - export function setBusy(item: any): void { - if (item.busy === true) { - return; - } - item.text = "Building"; - item.busy = true; - } - - export function setError(item: any): void { - item.busy = false; - item.severity = vscode.LanguageStatusSeverity?.Error; - item.command = { - title: "Open logs", - command: Commands.OPEN_LOGS - }; - item.text = StatusIcon.error; - item.detail = "Errors occurred in initializing language server"; - } - - export function setWarning(item: any): void { - item.busy = false; - item.severity = vscode.LanguageStatusSeverity?.Error; - item.command = { - title: "Show PROBLEMS Panel", - command: "workbench.panel.markers.view.focus", - tooltip: "Errors occurred in project configurations, click to show the PROBLEMS panel" - }; - item.text = StatusIcon.warning; - item.detail = "Project Configuration Error"; - } - - export function setReady(item: any): void { - if (item.text === StatusIcon.ready) { - return; - } - item.busy = false; - item.severity = vscode.LanguageStatusSeverity?.Information; - item.command = StatusCommands.showServerStatusCommand; - item.text = StatusIcon.ready; - item.detail = ""; - } -} - export namespace RuntimeStatusItemFactory { export function create(text: string, vmInstallPath: string): any { if (supportsLanguageStatus()) { diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 12c4fa216..4bff57ed8 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -1,123 +1,68 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment, version } from "vscode"; +import { StatusBarItem, window, StatusBarAlignment } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; -import * as semver from "semver"; -import { ServerStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; +import { StatusCommands } from "./languageStatusItemFactory"; class ServerStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; - private languageStatusItem: any; - // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. - // See: https://github.com/redhat-developer/vscode-java/issues/1982 - private isAdvancedStatusBarItem: boolean; constructor() { - this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); - } - - public initialize(): void { - if (supportsLanguageStatus()) { - this.languageStatusItem = ServerStatusItemFactory.create(); - } else { - if (this.isAdvancedStatusBarItem) { - this.statusBarItem = (window.createStatusBarItem as any)("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); - } else { - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, Number.MIN_VALUE); - } - } + this.statusBarItem = window.createStatusBarItem("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); } public showLightWeightStatus(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.showLightWeightStatus(this.languageStatusItem); - } else { - if (this.isAdvancedStatusBarItem) { - (this.statusBarItem as any).name = "Java Server Mode"; - } - this.statusBarItem.text = StatusIcon.lightWeight; - this.statusBarItem.command = StatusCommands.switchToStandardCommand; - this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; - this.statusBarItem.show(); - } + this.statusBarItem.name = "Java Server Mode"; + this.statusBarItem.text = StatusIcon.lightWeight; + this.statusBarItem.command = StatusCommands.switchToStandardCommand; + this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; + this.statusBarItem.show(); } public showNotImportedStatus(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.showNotImportedStatus(this.languageStatusItem); - } else { - if (this.isAdvancedStatusBarItem) { - (this.statusBarItem as any).name = "No projects are imported"; - } - this.statusBarItem.text = StatusIcon.notImported; - this.statusBarItem.command = StatusCommands.startStandardServerCommand; - this.statusBarItem.tooltip = "No projects are imported, click to load projects"; - this.statusBarItem.show(); - } + this.statusBarItem.name = "No projects are imported"; + this.statusBarItem.text = StatusIcon.notImported; + this.statusBarItem.command = StatusCommands.startStandardServerCommand; + this.statusBarItem.tooltip = "No projects are imported, click to load projects"; + this.statusBarItem.show(); } public showStandardStatus(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.showStandardStatus(this.languageStatusItem); - ServerStatusItemFactory.setBusy(this.languageStatusItem); - } else { - if (this.isAdvancedStatusBarItem) { - (this.statusBarItem as any).name = "Java Server Status"; - } - this.statusBarItem.text = StatusIcon.busy; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = ""; - this.statusBarItem.show(); - } + this.statusBarItem.name = "Java Server Status"; + this.statusBarItem.text = StatusIcon.busy; + this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; + this.statusBarItem.tooltip = ""; + this.statusBarItem.show(); } public setBusy(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.setBusy(this.languageStatusItem); - } else { - this.statusBarItem.text = StatusIcon.busy; - } + this.statusBarItem.text = StatusIcon.busy; } public setError(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.setError(this.languageStatusItem); - } else { - this.statusBarItem.text = StatusIcon.error; - this.statusBarItem.command = Commands.OPEN_LOGS; - } + this.statusBarItem.text = StatusIcon.error; + this.statusBarItem.command = Commands.OPEN_LOGS; } public setWarning(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.setWarning(this.languageStatusItem); - } else { - this.statusBarItem.text = StatusIcon.warning; - this.statusBarItem.command = "workbench.panel.markers.view.focus"; - this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; - } + this.statusBarItem.text = StatusIcon.warning; + this.statusBarItem.command = "workbench.panel.markers.view.focus"; + this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; } public setReady(): void { - if (supportsLanguageStatus()) { - ServerStatusItemFactory.setReady(this.languageStatusItem); - } else { - this.statusBarItem.text = StatusIcon.ready; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = "ServiceReady"; - } + this.statusBarItem.text = StatusIcon.ready; + this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; + this.statusBarItem.tooltip = "ServiceReady"; } public updateTooltip(tooltip: string): void { - if (!supportsLanguageStatus()) { - this.statusBarItem.tooltip = tooltip; - } + this.statusBarItem.tooltip = tooltip; } public dispose(): void { this.statusBarItem?.dispose(); - this.languageStatusItem?.dispose(); } } From 7ef38c61b2351dee4cda0811b0c0f26f965a59f8 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 8 Dec 2023 10:53:49 +0800 Subject: [PATCH 418/708] Remove the compatibility check for createLanguageStatusItem() api Signed-off-by: Sheng Chen --- src/extension.ts | 8 +-- src/languageStatusItemFactory.ts | 50 ++++++----------- src/lombokSupport.ts | 24 ++++---- src/runtimeStatusBarProvider.ts | 94 ++++++++++---------------------- 4 files changed, 60 insertions(+), 116 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index e8a94e011..5246d3b37 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, version } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -22,7 +22,7 @@ import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } f import { registerClientProviders } from './providerDispatcher'; import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; -import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; +import { languageStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider } from './serverStatusBarProvider'; import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, getImportMode, onConfigurationChange, ServerMode, ImportMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; @@ -399,7 +399,7 @@ export async function activate(context: ExtensionContext): Promise context.subscriptions.push(snippetCompletionProvider.initialize()); context.subscriptions.push(serverStatusBarProvider); - context.subscriptions.push(runtimeStatusBarProvider); + context.subscriptions.push(languageStatusBarProvider); const classEditorProviderRegistration = window.registerCustomEditorProvider(JavaClassEditorProvider.viewType, new JavaClassEditorProvider(context)); context.subscriptions.push(classEditorProviderRegistration); @@ -410,7 +410,7 @@ export async function activate(context: ExtensionContext): Promise if (event === ServerMode.standard) { syntaxClient.stop(); fileEventHandler.setServerStatus(true); - runtimeStatusBarProvider.initialize(context); + languageStatusBarProvider.initialize(context); } commands.executeCommand('setContext', 'java:serverMode', event); }); diff --git a/src/languageStatusItemFactory.ts b/src/languageStatusItemFactory.ts index 0ddf89398..d647bf6d2 100644 --- a/src/languageStatusItemFactory.ts +++ b/src/languageStatusItemFactory.ts @@ -13,10 +13,6 @@ const languageServerDocumentSelector = [ { pattern: '**/{build,settings}.gradle.kts'} ]; -export function supportsLanguageStatus(): boolean { - return !!vscode.languages.createLanguageStatusItem; -} - export namespace StatusCommands { export const switchToStandardCommand = { title: "Load Projects", @@ -25,12 +21,6 @@ export namespace StatusCommands { tooltip: "LightWeight mode only provides limited features, please load projects to get full feature set" }; - export const showServerStatusCommand = { - title: "Show Build Status", - command: Commands.SHOW_SERVER_TASK_STATUS, - tooltip: "Show Build Status" - }; - export const configureJavaRuntimeCommand = { title: "Configure Java Runtime", command: "workbench.action.openSettings", @@ -47,19 +37,16 @@ export namespace StatusCommands { } export namespace RuntimeStatusItemFactory { - export function create(text: string, vmInstallPath: string): any { - if (supportsLanguageStatus()) { - const item = vscode.languages.createLanguageStatusItem("javaRuntimeStatusItem", languageServerDocumentSelector); - item.severity = vscode.LanguageStatusSeverity?.Information; - item.name = "Java Runtime"; - item.text = text; - item.command = StatusCommands.configureJavaRuntimeCommand; - if (vmInstallPath) { - item.command.tooltip = `Language Level: ${text} <${vmInstallPath}>`; - } - return item; + export function create(text: string, vmInstallPath: string): vscode.LanguageStatusItem { + const item = vscode.languages.createLanguageStatusItem("javaRuntimeStatusItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Java Runtime"; + item.text = text; + item.command = StatusCommands.configureJavaRuntimeCommand; + if (vmInstallPath) { + item.command.tooltip = `Language Level: ${text} <${vmInstallPath}>`; } - return undefined; + return item; } export function update(item: any, text: string, vmInstallPath: string): void { @@ -69,17 +56,14 @@ export namespace RuntimeStatusItemFactory { } export namespace BuildFileStatusItemFactory { - export function create(buildFilePath: string): any { - if (supportsLanguageStatus()) { - const fileName = path.basename(buildFilePath); - const item = vscode.languages.createLanguageStatusItem("javaBuildFileStatusItem", languageServerDocumentSelector); - item.severity = vscode.LanguageStatusSeverity?.Information; - item.name = "Java Build File"; - item.text = fileName; - item.command = getOpenBuildFileCommand(buildFilePath); - return item; - } - return undefined; + export function create(buildFilePath: string): vscode.LanguageStatusItem { + const fileName = path.basename(buildFilePath); + const item = vscode.languages.createLanguageStatusItem("javaBuildFileStatusItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Java Build File"; + item.text = fileName; + item.command = getOpenBuildFileCommand(buildFilePath); + return item; } export function update(item: any, buildFilePath: string): void { diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index bfdd77d4e..bd23144ef 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -7,8 +7,7 @@ import * as vscode from "vscode"; import { ExtensionContext, window, commands } from "vscode"; import { Commands } from "./commands"; import { apiManager } from "./apiManager"; -import { supportsLanguageStatus } from "./languageStatusItemFactory"; -import { runtimeStatusBarProvider } from './runtimeStatusBarProvider'; +import { languageStatusBarProvider } from './runtimeStatusBarProvider'; import { logger } from './log'; import { getAllJavaProjects } from "./utils"; @@ -157,11 +156,11 @@ export async function checkLombokDependency(context: ExtensionContext) { registerLombokConfigureCommand(context); isLombokCommandInitialized = true; } - runtimeStatusBarProvider.initializeLombokStatusBar(); + languageStatusBarProvider.initializeLombokStatusBar(); isLombokStatusBarInitialized = true; } if (isLombokStatusBarInitialized && !projectLombokPath) { - runtimeStatusBarProvider.destroyLombokStatusBar(); + languageStatusBarProvider.destroyLombokStatusBar(); isLombokStatusBarInitialized = false; cleanupLombokCache(context); } @@ -245,16 +244,13 @@ export function registerLombokConfigureCommand(context: ExtensionContext) { } export namespace LombokVersionItemFactory { - export function create(text: string): any { - if (supportsLanguageStatus()) { - const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector); - item.severity = vscode.LanguageStatusSeverity?.Information; - item.name = "Lombok Version"; - item.text = text; - item.command = getLombokChangeCommand(); - return item; - } - return undefined; + export function create(text: string): vscode.LanguageStatusItem { + const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector); + item.severity = vscode.LanguageStatusSeverity?.Information; + item.name = "Lombok Version"; + item.text = text; + item.command = getLombokChangeCommand(); + return item; } export function update(item: any, text: string): void { diff --git a/src/runtimeStatusBarProvider.ts b/src/runtimeStatusBarProvider.ts index ae86d9112..08fa38962 100644 --- a/src/runtimeStatusBarProvider.ts +++ b/src/runtimeStatusBarProvider.ts @@ -1,35 +1,29 @@ 'use strict'; import * as fse from "fs-extra"; -import { StatusBarItem, window, StatusBarAlignment, TextEditor, Uri, commands, workspace, version, languages, Command, ExtensionContext } from "vscode"; +import { window, TextEditor, Uri, commands, workspace, ExtensionContext, LanguageStatusItem } from "vscode"; import { Commands } from "./commands"; import { Disposable } from "vscode-languageclient"; import * as path from "path"; import { apiManager } from "./apiManager"; -import * as semver from "semver"; import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; -import { BuildFileStatusItemFactory, RuntimeStatusItemFactory, StatusCommands, supportsLanguageStatus } from "./languageStatusItemFactory"; +import { BuildFileStatusItemFactory, RuntimeStatusItemFactory } from "./languageStatusItemFactory"; import { getAllJavaProjects, getJavaConfiguration, hasBuildToolConflicts } from "./utils"; import { LombokVersionItemFactory, getLombokVersion, isLombokImported } from "./lombokSupport"; -class RuntimeStatusBarProvider implements Disposable { - private statusBarItem: StatusBarItem; - private runtimeStatusItem: any; - private buildFileStatusItem: any; - private lombokVersionItem: any; +class LanguageStatusBarProvider implements Disposable { + private runtimeStatusItem: LanguageStatusItem; + private buildFileStatusItem: LanguageStatusItem; + private lombokVersionItem: LanguageStatusItem; private javaProjects: Map; private fileProjectMapping: Map; private storagePath: string | undefined; private disposables: Disposable[]; - // Adopt new API for status bar item, meanwhile keep the compatibility with Theia. - // See: https://github.com/redhat-developer/vscode-java/issues/1982 - private isAdvancedStatusBarItem: boolean; constructor() { this.javaProjects = new Map(); this.fileProjectMapping = new Map(); this.disposables = []; - this.isAdvancedStatusBarItem = semver.gte(version, "1.57.0"); } public async initialize(context: ExtensionContext): Promise { @@ -39,15 +33,6 @@ class RuntimeStatusBarProvider implements Disposable { this.storagePath = Uri.file(path.join(storagePath, "..", "..")).fsPath; } - if (!supportsLanguageStatus()) { - if (this.isAdvancedStatusBarItem) { - this.statusBarItem = (window.createStatusBarItem as any)("java.runtimeStatus", StatusBarAlignment.Right, 0); - (this.statusBarItem as any).name = "Java Runtime Configuration"; - } else { - this.statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 0); - } - } - let projectUriStrings: string[]; try { projectUriStrings = await getAllJavaProjects(false); @@ -59,10 +44,6 @@ class RuntimeStatusBarProvider implements Disposable { this.javaProjects.set(Uri.parse(uri).fsPath, undefined); } - if (!supportsLanguageStatus()) { - this.statusBarItem.command = StatusCommands.configureJavaRuntimeCommand; - } - this.disposables.push(window.onDidChangeActiveTextEditor((textEditor) => { this.updateItem(context, textEditor); })); @@ -111,7 +92,6 @@ class RuntimeStatusBarProvider implements Disposable { } public dispose(): void { - this.statusBarItem?.dispose(); this.runtimeStatusItem?.dispose(); this.buildFileStatusItem?.dispose(); this.lombokVersionItem?.dispose(); @@ -176,63 +156,47 @@ class RuntimeStatusBarProvider implements Disposable { } private async updateItem(context: ExtensionContext, textEditor: TextEditor): Promise { - if (!textEditor || path.extname(textEditor.document.fileName) !== ".java" && !supportsLanguageStatus()) { - this.statusBarItem?.hide(); + if (!textEditor || path.extname(textEditor.document.fileName) !== ".java") { return; } const uri: Uri = textEditor.document.uri; const projectPath: string = this.findOwnerProject(uri); if (!projectPath) { - if (supportsLanguageStatus()) { - this.hideRuntimeStatusItem(); - this.hideBuildFileStatusItem(); - this.hideLombokVersionItem(); - } else { - this.statusBarItem?.hide(); - } + this.hideRuntimeStatusItem(); + this.hideBuildFileStatusItem(); + this.hideLombokVersionItem(); return; } const projectInfo: IProjectInfo = await this.getProjectInfo(projectPath); if (!projectInfo) { - if (supportsLanguageStatus()) { - this.hideRuntimeStatusItem(); - this.hideBuildFileStatusItem(); - this.hideLombokVersionItem(); - } else { - this.statusBarItem?.hide(); - } + this.hideRuntimeStatusItem(); + this.hideBuildFileStatusItem(); + this.hideLombokVersionItem(); return; } const text = this.getJavaRuntimeFromVersion(projectInfo.sourceLevel); - if (supportsLanguageStatus()) { - const buildFilePath = await this.getBuildFilePath(context, projectPath); - if (!this.runtimeStatusItem) { - this.runtimeStatusItem = RuntimeStatusItemFactory.create(text, projectInfo.vmInstallPath); - if (buildFilePath) { - this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath); - } - } else { - RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath); - if (buildFilePath) { - BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath); - } + const buildFilePath = await this.getBuildFilePath(context, projectPath); + if (!this.runtimeStatusItem) { + this.runtimeStatusItem = RuntimeStatusItemFactory.create(text, projectInfo.vmInstallPath); + if (buildFilePath) { + this.buildFileStatusItem = BuildFileStatusItemFactory.create(buildFilePath); + } + } else { + RuntimeStatusItemFactory.update(this.runtimeStatusItem, text, projectInfo.vmInstallPath); + if (buildFilePath) { + BuildFileStatusItemFactory.update(this.buildFileStatusItem, buildFilePath); } + } + + if (isLombokImported()) { if (!this.lombokVersionItem) { - if (isLombokImported()) { - this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion()); - } + this.lombokVersionItem = LombokVersionItemFactory.create(getLombokVersion()); } else { - if (isLombokImported()) { - LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion()); - } + LombokVersionItemFactory.update(this.lombokVersionItem, getLombokVersion()); } - } else { - this.statusBarItem.text = text; - this.statusBarItem.tooltip = projectInfo.vmInstallPath ? `Language Level: ${this.statusBarItem.text} <${projectInfo.vmInstallPath}>` : "Configure Java Runtime"; - this.statusBarItem.show(); } } @@ -302,4 +266,4 @@ interface IProjectInfo { const SOURCE_LEVEL_KEY = "org.eclipse.jdt.core.compiler.source"; const VM_INSTALL_PATH = "org.eclipse.jdt.ls.core.vm.location"; -export const runtimeStatusBarProvider: RuntimeStatusBarProvider = new RuntimeStatusBarProvider(); +export const languageStatusBarProvider: LanguageStatusBarProvider = new LanguageStatusBarProvider(); From 7bd5ded251f3906ebeddf2654943e768a3a9ede1 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Wed, 13 Dec 2023 19:04:15 -0800 Subject: [PATCH 419/708] Remember the choice when asking project selection (#3428) - Remember the choice when asking project selection - Update @vscode/test-electron to fix macos ci Signed-off-by: Sheng Chen --- package-lock.json | 207 ++++++++------------------------------ package.json | 2 +- src/buildFilesSelector.ts | 2 + src/settings.ts | 8 +- 4 files changed, 50 insertions(+), 169 deletions(-) diff --git a/package-lock.json b/package-lock.json index b210a5d6b..14d8eca41 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,7 +44,7 @@ "@types/winston": "^2.4.4", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", - "@vscode/test-electron": "^2.1.5", + "@vscode/test-electron": "^2.3.8", "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", @@ -1081,18 +1081,18 @@ "integrity": "sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg==" }, "node_modules/@vscode/test-electron": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.1.5.tgz", - "integrity": "sha512-O/ioqFpV+RvKbRykX2ItYPnbcZ4Hk5V0rY4uhQjQTLhGL9WZUvS7exzuYQCCI+ilSqJpctvxq2llTfGXf9UnnA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.8.tgz", + "integrity": "sha512-b4aZZsBKtMGdDljAsOPObnAi7+VWIaYl3ylCz1jTs+oV6BZ4TNHcVNC3xUn0azPeszBmwSBDQYfFESIaUQnrOg==", "dev": true, "dependencies": { "http-proxy-agent": "^4.0.1", "https-proxy-agent": "^5.0.0", - "rimraf": "^3.0.2", - "unzipper": "^0.10.11" + "jszip": "^3.10.1", + "semver": "^7.5.2" }, "engines": { - "node": ">=8.9.3" + "node": ">=16" } }, "node_modules/@vscode/test-electron/node_modules/agent-base": { @@ -1157,21 +1157,6 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, - "node_modules/@vscode/test-electron/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@vscode/webview-ui-toolkit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", @@ -1981,28 +1966,6 @@ "node": ">=0.10.0" } }, - "node_modules/big-integer": { - "version": "1.6.51", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", - "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", - "dev": true, - "dependencies": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - }, - "engines": { - "node": "*" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2031,12 +1994,6 @@ "safe-buffer": "^5.1.1" } }, - "node_modules/bluebird": { - "version": "3.4.7", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz", - "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", - "dev": true - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -2169,24 +2126,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "node_modules/buffer-indexof-polyfill": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", - "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", - "dev": true, - "engines": { - "node": ">=0.2.0" - } - }, "node_modules/cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -2260,18 +2199,6 @@ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", "dev": true }, - "node_modules/chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", - "dev": true, - "dependencies": { - "traverse": ">=0.3.0 <0.4" - }, - "engines": { - "node": "*" - } - }, "node_modules/chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -4703,21 +4630,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "inherits": "~2.0.0", - "mkdirp": ">=0.5 0", - "rimraf": "2" - }, - "engines": { - "node": ">=0.6" - } - }, "node_modules/function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", @@ -5518,6 +5430,12 @@ "node": ">= 4" } }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6037,6 +5955,18 @@ "node": ">=0.6.0" } }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, "node_modules/just-debounce": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", @@ -6128,6 +6058,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "dependencies": { + "immediate": "~3.0.5" + } + }, "node_modules/liftoff": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", @@ -6147,12 +6086,6 @@ "node": ">= 0.8" } }, - "node_modules/listenercount": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/listenercount/-/listenercount-1.0.1.tgz", - "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", - "dev": true - }, "node_modules/load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", @@ -6680,18 +6613,6 @@ "node": ">=0.10.0" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", @@ -7498,6 +7419,12 @@ "node": ">=6" } }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -8372,18 +8299,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -9330,15 +9245,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/triple-beam": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", @@ -9730,39 +9636,6 @@ "node": ">=0.10.0" } }, - "node_modules/unzipper": { - "version": "0.10.11", - "resolved": "https://registry.npmjs.org/unzipper/-/unzipper-0.10.11.tgz", - "integrity": "sha512-+BrAq2oFqWod5IESRjL3S8baohbevGcVA+teAIOYWM3pDVdseogqbzhhvvmiyQrUNKFUnDMtELW3X8ykbyDCJw==", - "dev": true, - "dependencies": { - "big-integer": "^1.6.17", - "binary": "~0.3.0", - "bluebird": "~3.4.1", - "buffer-indexof-polyfill": "~1.0.0", - "duplexer2": "~0.1.4", - "fstream": "^1.0.12", - "graceful-fs": "^4.2.2", - "listenercount": "~1.0.1", - "readable-stream": "~2.3.6", - "setimmediate": "~1.0.4" - } - }, - "node_modules/unzipper/node_modules/duplexer2": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.2" - } - }, - "node_modules/unzipper/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, "node_modules/upath": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", diff --git a/package.json b/package.json index 625f4eddc..fa55079f1 100644 --- a/package.json +++ b/package.json @@ -1678,7 +1678,7 @@ "@types/vscode": "^1.77.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", - "@vscode/test-electron": "^2.1.5", + "@vscode/test-electron": "^2.3.8", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", "css-loader": "^6.7.3", diff --git a/src/buildFilesSelector.ts b/src/buildFilesSelector.ts index 8a5f2695f..e654e872f 100644 --- a/src/buildFilesSelector.ts +++ b/src/buildFilesSelector.ts @@ -5,6 +5,7 @@ import { IBuildTool, getContributedBuildTools } from "./plugin"; export const PICKED_BUILD_FILES = "java.pickedBuildFiles"; export const BUILD_TOOL_FOR_CONFLICTS = "java.buildToolForConflicts"; +export const IMPORT_METHOD = "java.importMethod"; export class BuildFileSelector { /** * The build tools that are contributed/supported by extensions. @@ -295,4 +296,5 @@ interface IBuildFilePicker extends QuickPickItem { export function cleanupProjectPickerCache(context: ExtensionContext) { context.workspaceState.update(PICKED_BUILD_FILES, undefined); context.workspaceState.update(BUILD_TOOL_FOR_CONFLICTS, undefined); + context.workspaceState.update(IMPORT_METHOD, undefined); } diff --git a/src/settings.ts b/src/settings.ts index 49db09f0b..e7b06c78f 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -8,7 +8,7 @@ import { cleanupLombokCache } from './lombokSupport'; import { ensureExists, getJavaConfiguration } from './utils'; import { apiManager } from './apiManager'; import { isActive, setActive, smartSemicolonDetection } from './smartSemicolonDetection'; -import { BuildFileSelector, PICKED_BUILD_FILES } from './buildFilesSelector'; +import { BuildFileSelector, IMPORT_METHOD, PICKED_BUILD_FILES } from './buildFilesSelector'; const DEFAULT_HIDDEN_FILES: string[] = ['**/.classpath', '**/.project', '**/.settings', '**/.factorypath']; const IS_WORKSPACE_JDK_ALLOWED = "java.ls.isJdkAllowed"; @@ -370,6 +370,11 @@ export function handleTextDocumentChanges(document: TextDocument, changes: reado export async function getImportMode(context: ExtensionContext, selector: BuildFileSelector): Promise { const mode = getJavaConfiguration().get("import.projectSelection"); if (mode === "manual") { + // use automatic mode if user has selected "Import All" before. + if (context.workspaceState.get(IMPORT_METHOD) === "Import All") { + return ImportMode.automatic; + } + // if no selectable build files, use automatic mode const hasBuildFiles = await selector.hasBuildFiles(); if (!hasBuildFiles) { @@ -386,6 +391,7 @@ export async function getImportMode(context: ExtensionContext, selector: BuildFi { modal: true }, "Import All", "Let Me Select..."); if (answer === "Import All") { + context.workspaceState.update(IMPORT_METHOD, "Import All"); return ImportMode.automatic; } else if (answer === "Let Me Select...") { return ImportMode.manual; From 72a6b03b6abb418e7d5afb74750f3e0370013fb7 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Wed, 1 Nov 2023 13:28:36 -0400 Subject: [PATCH 420/708] Support for pasting a java file in the file explorer Signed-off-by: Hope Hadfield --- package.json | 15 ++++++++ package.nls.json | 3 +- package.nls.ko.json | 3 +- package.nls.zh-cn.json | 3 +- package.nls.zh-tw.json | 3 +- src/commands.ts | 9 +++++ src/extension.ts | 11 +++++- src/pasteAction.ts | 34 +++++++++++++++++-- test/lightweight-mode-suite/extension.test.ts | 1 + test/standard-mode-suite/extension.test.ts | 2 ++ 10 files changed, 77 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index fa55079f1..f8d057cd8 100644 --- a/package.json +++ b/package.json @@ -1487,6 +1487,11 @@ "command": "java.server.restart", "title": "%java.server.restart%", "category": "Java" + }, + { + "command": "java.action.filesExplorerPasteAction", + "title": "%java.action.filesExplorerPasteAction%", + "category": "Java" } ], "keybindings": [ @@ -1504,6 +1509,12 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "javaLSReady && editorLangId == java" + }, + { + "command": "java.action.filesExplorerPasteAction", + "key": "ctrl+shift+v", + "mac": "cmd+shift+v", + "when": "explorerViewletFocus && config.editor.pasteAs.enabled" } ], "menus": { @@ -1622,6 +1633,10 @@ { "command": "java.server.restart", "when": "javaLSReady" + }, + { + "command": "java.action.filesExplorerPasteAction", + "when": "false" } ], "view/title": [ diff --git a/package.nls.json b/package.nls.json index e01775313..ca4690b3b 100644 --- a/package.nls.json +++ b/package.nls.json @@ -25,5 +25,6 @@ "java.project.createModuleInfo.command": "Create module-info.java", "java.clean.sharedIndexes": "Clean Shared Indexes", "java.server.restart": "Restart Java Language Server", - "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection" + "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", + "java.action.filesExplorerPasteAction": "Paste clipboard text into a file" } diff --git a/package.nls.ko.json b/package.nls.ko.json index 359ee31b1..2e7214d92 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -22,5 +22,6 @@ "java.action.showSupertypeHierarchy": "Supertype 계층 구조 표시", "java.action.showSubtypeHierarchy": "Subtype 계층 구조 표시", "java.action.changeBaseType": "이 유형을 기준으로", - "java.project.createModuleInfo.command": "module-info.java 생성" + "java.project.createModuleInfo.command": "module-info.java 생성", + "java.action.filesExplorerPasteAction": "클립보드 텍스트를 파일에 붙여넣기" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index 771247f40..ebe40f3e8 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -23,5 +23,6 @@ "java.action.showSubtypeHierarchy": "显示子类层次结构", "java.action.changeBaseType": "基于此类型", "java.project.createModuleInfo.command": "创建 module-info.java", - "java.clean.sharedIndexes": "清理共享的索引文件" + "java.clean.sharedIndexes": "清理共享的索引文件", + "java.action.filesExplorerPasteAction": "将剪贴板文本粘贴到文件中" } diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index c2e2031ae..43ca820ce 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -22,5 +22,6 @@ "java.action.showSupertypeHierarchy": "顯示父類別階層結構", "java.action.showSubtypeHierarchy": "顯示子類別階層結構", "java.action.changeBaseType": "以此型別為基礎", - "java.project.createModuleInfo.command": "創建 module-info.java" + "java.project.createModuleInfo.command": "創建 module-info.java", + "java.action.filesExplorerPasteAction": "將剪貼簿文字貼到文件中" } \ No newline at end of file diff --git a/src/commands.ts b/src/commands.ts index 0654ec363..5ad0a8085 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -191,6 +191,10 @@ export namespace Commands { * Custom paste action (triggers auto-import) */ export const CLIPBOARD_ONPASTE = 'java.action.clipboardPasteAction'; + /** + * Custom paste action in files explorer + */ + export const FILESEXPLORER_ONPASTE = 'java.action.filesExplorerPasteAction'; /** * Choose type to import. */ @@ -341,4 +345,9 @@ export namespace Commands { */ export const SMARTSEMICOLON_DETECTION = "java.edit.smartSemicolonDetection"; + /** + * Determine if pasted text is a java file and resolve packages + */ + export const RESOLVE_PASTED_TEXT = "java.project.resolveText"; + } diff --git a/src/extension.ts b/src/extension.ts index 5246d3b37..30cf1b506 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -37,6 +37,7 @@ import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib' import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; +import { pasteFile } from './pasteAction'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -93,6 +94,14 @@ function getHeapDumpFolderFromSettings(): string { export async function activate(context: ExtensionContext): Promise { await loadSupportedJreNames(context); + context.subscriptions.push(commands.registerCommand(Commands.FILESEXPLORER_ONPASTE, async () => { + const originalClipboard = await env.clipboard.readText(); + // Hack in order to get path to selected folder if applicable (see https://github.com/microsoft/vscode/issues/3553#issuecomment-1098562676) + await commands.executeCommand('copyFilePath'); + const folder = await env.clipboard.readText(); + await env.clipboard.writeText(originalClipboard); + pasteFile(folder); + })); context.subscriptions.push(markdownPreviewProvider); context.subscriptions.push(commands.registerCommand(Commands.TEMPLATE_VARIABLES, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.TEMPLATE_VARIABLES}.md`)), 'Predefined Variables', "", context); @@ -650,7 +659,7 @@ function enableJavadocSymbols() { }); } -function getTempWorkspace() { +export function getTempWorkspace() { return path.resolve(os.tmpdir(), `vscodesws_${makeRandomHexString(5)}`); } diff --git a/src/pasteAction.ts b/src/pasteAction.ts index c500f0f3e..4a3f83adf 100644 --- a/src/pasteAction.ts +++ b/src/pasteAction.ts @@ -1,9 +1,11 @@ 'use strict'; -import { commands, env, ExtensionContext, Range, TextEditor, window } from 'vscode'; +import { TextEncoder } from 'util'; +import { commands, env, ExtensionContext, Range, TextEditor, Uri, window, workspace } from 'vscode'; import { LanguageClient } from 'vscode-languageclient/node'; - +import { apiManager } from './apiManager'; import { Commands } from './commands'; +import fs = require('fs'); export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { context.subscriptions.push(commands.registerCommand(Commands.CLIPBOARD_ONPASTE, () => { @@ -48,4 +50,32 @@ export async function registerOrganizeImportsOnPasteCommand(): Promise { } } }); +} + +let serverReady = false; + +export async function pasteFile(folder: fs.PathLike): Promise { + const clipboardText: string = await env.clipboard.readText(); + let filePath = folder.toString(); + fs.stat(folder, async (err, stats) => { + // If given path to selected folder is invalid (no folder is selected) + if (filePath === clipboardText || stats.isFile() || (filePath === "." && workspace.workspaceFolders !== undefined)) { + filePath = workspace.workspaceFolders[0].uri.fsPath; + } + if (!serverReady) { + await apiManager.getApiInstance().serverReady().then( async () => { + serverReady = true; + }); + } + const fileString: string = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.RESOLVE_PASTED_TEXT, filePath, clipboardText); + const fileUri = fileString !== null ? Uri.file(fileString) : null; + if (fileUri !== null){ + try { + await workspace.fs.writeFile(fileUri, new TextEncoder().encode(clipboardText)); + window.showTextDocument(fileUri, { preview: false }); + } catch (error: unknown) { + // Do nothing (file does not have write permissions) + } + } + }); } \ No newline at end of file diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 495e90624..b3424da6c 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -25,6 +25,7 @@ suite('Java Language Extension - LightWeight', () => { Commands.OPEN_FILE, Commands.CLEAN_SHARED_INDEXES, Commands.RESTART_LANGUAGE_SERVER, + Commands.FILESEXPLORER_ONPASTE ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 3fd5828b7..c364990e8 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -118,6 +118,8 @@ suite('Java Language Extension - Standard', () => { Commands.UPDATE_SOURCE_ATTACHMENT_CMD, Commands.SMARTSEMICOLON_DETECTION, Commands.RESOLVE_SOURCE_ATTACHMENT, + Commands.FILESEXPLORER_ONPASTE, + Commands.RESOLVE_PASTED_TEXT, ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 1cb8d0c77fb2a0da1381520bac65e36826a40c84 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Thu, 14 Dec 2023 10:47:55 -0500 Subject: [PATCH 421/708] Change scope of 'java.import.gradle.home' to machine-overridable Signed-off-by: Hope Hadfield --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index f8d057cd8..2ce350485 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "java.home", "java.jdt.ls.vmargs", "java.configuration.runtimes", - "java.import.gradle.java.home" + "java.import.gradle.java.home", + "java.import.gradle.home" ] }, "virtualWorkspaces": false @@ -641,7 +642,7 @@ "type": "string", "default": null, "description": "Use Gradle from the specified local installation directory or GRADLE_HOME if the Gradle wrapper is missing or disabled and no 'java.import.gradle.version' is specified.", - "scope": "window", + "scope": "machine-overridable", "order": 40 }, "java.import.gradle.java.home": { From eaeedf791546fed4eaa9312b6252faa951ce1b5e Mon Sep 17 00:00:00 2001 From: lukas Date: Wed, 22 Nov 2023 09:27:40 +0100 Subject: [PATCH 422/708] Add SQL block highlighting support --- language-support/sql/inline-sql.json | 46 ++++++++++++++++++++++++++++ package.json | 10 ++++++ 2 files changed, 56 insertions(+) create mode 100644 language-support/sql/inline-sql.json diff --git a/language-support/sql/inline-sql.json b/language-support/sql/inline-sql.json new file mode 100644 index 000000000..9d13e384f --- /dev/null +++ b/language-support/sql/inline-sql.json @@ -0,0 +1,46 @@ +{ + "injectionSelector": "L:source.java -comment -string", + "patterns": [ + { + "contentName": "meta.embedded.block.sql", + "begin": "(?i)((/\\*\\s*(language=sql)\\s*\\*/)|((//\\s*(language=sql)\\s*)))", + "beginCaptures": { + "1": { + "name": "comment.block" + } + }, + "end": "(?<=\")", + "patterns": [ + { + "begin": "\\s*(\"\"\")$", + "beginCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "end": "\\s*(\"\"\")", + "endCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "patterns": [ + { "include": "source.sql" }, + { "include": "source.plpgsql.postgres" } + ] + }, + { + "begin": "\\s*(\")", + "beginCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "end": "\\s*(\")", + "endCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "patterns": [ + { "include": "source.sql" }, + { "include": "source.plpgsql.postgres" } + ] + } + ] + } + ], + "scopeName": "inline.sql" +} diff --git a/package.json b/package.json index 2ce350485..c9901d81f 100644 --- a/package.json +++ b/package.json @@ -212,6 +212,16 @@ "language": "gradle-kotlin-dsl", "scopeName": "source.kotlin", "path": "./language-support/kotlin/kotlin.tmLanguage.json" + }, + { + "injectTo": [ + "source.java" + ], + "scopeName": "inline.sql", + "path": "./language-support/sql/inline-sql.json", + "embeddedLanguages": { + "meta.embedded.block.sql": "sql" + } } ], "jsonValidation": [ From b8fd15872fabe5e5b22c73730dd47021f601c40a Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 21 Dec 2023 15:53:39 +0800 Subject: [PATCH 423/708] Reduce delegate command calls when classpath changes Signed-off-by: Sheng Chen --- src/lombokSupport.ts | 6 +++--- src/standardLanguageClient.ts | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index bd23144ef..f40885e48 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -4,7 +4,7 @@ import * as fse from "fs-extra"; import * as path from "path"; import * as semver from 'semver'; import * as vscode from "vscode"; -import { ExtensionContext, window, commands } from "vscode"; +import { ExtensionContext, window, commands, Uri } from "vscode"; import { Commands } from "./commands"; import { apiManager } from "./apiManager"; import { languageStatusBarProvider } from './runtimeStatusBarProvider'; @@ -117,7 +117,7 @@ export function addLombokParam(context: ExtensionContext, params: string[]) { updateActiveLombokPath(lombokJarPath); } -export async function checkLombokDependency(context: ExtensionContext) { +export async function checkLombokDependency(context: ExtensionContext, projectUri?: Uri) { if (!isLombokSupportEnabled()) { return; } @@ -126,7 +126,7 @@ export async function checkLombokDependency(context: ExtensionContext) { let currentLombokVersion: string = undefined; let previousLombokVersion: string = undefined; let currentLombokClasspath: string = undefined; - const projectUris: string[] = await getAllJavaProjects(); + const projectUris: string[] = projectUri ? [projectUri.toString()] : await getAllJavaProjects(); for (const projectUri of projectUris) { const classpathResult = await apiManager.getApiInstance().getClasspaths(projectUri, {scope: 'test'}); for (const classpath of classpathResult.classpaths) { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index b04fa8802..b98c184e7 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -143,8 +143,8 @@ export class StandardLanguageClient { showImportFinishNotification(context); } checkLombokDependency(context); - apiManager.getApiInstance().onDidClasspathUpdate((e: Uri) => { - checkLombokDependency(context); + apiManager.getApiInstance().onDidClasspathUpdate((projectUri: Uri) => { + checkLombokDependency(context, projectUri); }); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); From 392a255188f4b72c6e9004ca7982e06c7dd9669e Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Tue, 19 Dec 2023 18:24:18 +0100 Subject: [PATCH 424/708] Add java.compile.nullAnalysis.nonnullbydefault property --- README.md | 3 +++ package.json | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/README.md b/README.md index 502544db8..0e54caa4d 100644 --- a/README.md +++ b/README.md @@ -239,6 +239,9 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. +New in 1.26.0 +* `java.compile.nullAnalysis.nonnullbydefault`: Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index c9901d81f..03a31b16d 100644 --- a/package.json +++ b/package.json @@ -772,6 +772,16 @@ "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" }, + "java.compile.nullAnalysis.nonnullbydefault": { + "type": "array", + "default": [ + "javax.annotation.ParametersAreNonnullByDefault", + "org.eclipse.jdt.annotation.NonNullByDefault", + "org.springframework.lang.NonNullApi" + ], + "markdownDescription": "Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", + "scope": "window" + }, "java.compile.nullAnalysis.mode": { "type": "string", "enum": [ From 295947f7b0c4842bc15991e371a8d332ac09892a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 10 Jan 2024 14:20:15 +0000 Subject: [PATCH 425/708] Bump follow-redirects from 1.15.2 to 1.15.4 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.2 to 1.15.4. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.2...v1.15.4) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 14d8eca41..b9e3fcd74 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4501,9 +4501,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "version": "1.15.4", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", + "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", "funding": [ { "type": "individual", From 2e7cc038c5537ff9460fe1a50a6cf2b732fd52b8 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 10 Jan 2024 10:22:40 +0100 Subject: [PATCH 426/708] Inject json syntax highlighting via language=json comment Signed-off-by: Fred Bricon --- language-support/json/inline-json.json | 44 ++++++++++++++++++++++++++ package.json | 10 ++++++ 2 files changed, 54 insertions(+) create mode 100644 language-support/json/inline-json.json diff --git a/language-support/json/inline-json.json b/language-support/json/inline-json.json new file mode 100644 index 000000000..9bf278b5d --- /dev/null +++ b/language-support/json/inline-json.json @@ -0,0 +1,44 @@ +{ + "injectionSelector": "L:source.java -comment -string", + "patterns": [ + { + "contentName": "meta.embedded.block.json", + "begin": "(?i)((/\\*\\s*(language=json)\\s*\\*/)|((//\\s*(language=json)\\s*)))", + "beginCaptures": { + "1": { + "name": "comment.block" + } + }, + "end": "(?<=\")", + "patterns": [ + { + "begin": "\\s*(\"\"\")$", + "beginCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "end": "\\s*(\"\"\")", + "endCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "patterns": [ + { "include": "source.json" } + ] + }, + { + "begin": "\\s*(\")", + "beginCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "end": "\\s*(\")", + "endCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "patterns": [ + { "include": "source.json" } + ] + } + ] + } + ], + "scopeName": "inline.json" +} diff --git a/package.json b/package.json index 03a31b16d..a0a9f8c1f 100644 --- a/package.json +++ b/package.json @@ -222,6 +222,16 @@ "embeddedLanguages": { "meta.embedded.block.sql": "sql" } + }, + { + "injectTo": [ + "source.java" + ], + "scopeName": "inline.json", + "path": "./language-support/json/inline-json.json", + "embeddedLanguages": { + "meta.embedded.block.json": "json" + } } ], "jsonValidation": [ From 8c747106acb188dfd5bd306bad9e9ab61c5c8cb5 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 10 Jan 2024 10:43:17 +0100 Subject: [PATCH 427/708] Inject xml syntax highlighting via language=xml comment Signed-off-by: Fred Bricon --- language-support/xml/inline-xml.json | 44 ++++++++++++++++++++++++++++ package.json | 10 +++++++ 2 files changed, 54 insertions(+) create mode 100644 language-support/xml/inline-xml.json diff --git a/language-support/xml/inline-xml.json b/language-support/xml/inline-xml.json new file mode 100644 index 000000000..69ec0a491 --- /dev/null +++ b/language-support/xml/inline-xml.json @@ -0,0 +1,44 @@ +{ + "injectionSelector": "L:source.java -comment -string", + "patterns": [ + { + "contentName": "meta.embedded.block.xml", + "begin": "(?i)((/\\*\\s*(language=xml)\\s*\\*/)|((//\\s*(language=xml)\\s*)))", + "beginCaptures": { + "1": { + "name": "comment.block" + } + }, + "end": "(?<=\")", + "patterns": [ + { + "begin": "\\s*(\"\"\")$", + "beginCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "end": "\\s*(\"\"\")", + "endCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "patterns": [ + { "include": "text.xml" } + ] + }, + { + "begin": "\\s*(\")", + "beginCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "end": "\\s*(\")", + "endCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "patterns": [ + { "include": "text.xml" } + ] + } + ] + } + ], + "scopeName": "inline.xml" +} diff --git a/package.json b/package.json index a0a9f8c1f..bc69c886d 100644 --- a/package.json +++ b/package.json @@ -232,6 +232,16 @@ "embeddedLanguages": { "meta.embedded.block.json": "json" } + }, + { + "injectTo": [ + "source.java" + ], + "scopeName": "inline.xml", + "path": "./language-support/xml/inline-xml.json", + "embeddedLanguages": { + "meta.embedded.block.xml": "xml" + } } ], "jsonValidation": [ From ce49c30cb5fe8b9f594469b9af04f951914d2694 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 10 Jan 2024 10:47:23 +0100 Subject: [PATCH 428/708] Inject yaml syntax highlighting via language=yaml comment Signed-off-by: Fred Bricon --- language-support/yaml/inline-yaml.json | 44 ++++++++++++++++++++++++++ package.json | 10 ++++++ 2 files changed, 54 insertions(+) create mode 100644 language-support/yaml/inline-yaml.json diff --git a/language-support/yaml/inline-yaml.json b/language-support/yaml/inline-yaml.json new file mode 100644 index 000000000..e0051e518 --- /dev/null +++ b/language-support/yaml/inline-yaml.json @@ -0,0 +1,44 @@ +{ + "injectionSelector": "L:source.java -comment -string", + "patterns": [ + { + "contentName": "meta.embedded.block.yaml", + "begin": "(?i)((/\\*\\s*(language=yaml)\\s*\\*/)|((//\\s*(language=yaml)\\s*)))", + "beginCaptures": { + "1": { + "name": "comment.block" + } + }, + "end": "(?<=\")", + "patterns": [ + { + "begin": "\\s*(\"\"\")$", + "beginCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "end": "\\s*(\"\"\")", + "endCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "patterns": [ + { "include": "source.yaml" } + ] + }, + { + "begin": "\\s*(\")", + "beginCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "end": "\\s*(\")", + "endCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "patterns": [ + { "include": "source.yaml" } + ] + } + ] + } + ], + "scopeName": "inline.yaml" +} diff --git a/package.json b/package.json index bc69c886d..12bcbc384 100644 --- a/package.json +++ b/package.json @@ -242,6 +242,16 @@ "embeddedLanguages": { "meta.embedded.block.xml": "xml" } + }, + { + "injectTo": [ + "source.java" + ], + "scopeName": "inline.yaml", + "path": "./language-support/yaml/inline-yaml.json", + "embeddedLanguages": { + "meta.embedded.block.yaml": "yaml" + } } ], "jsonValidation": [ From d9640417a57b58d2f1491e0fbeb3f7265e38139b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 10 Jan 2024 08:27:22 -0500 Subject: [PATCH 429/708] Add custom Lombok 1.18.31 snapshot into lombok folder. - Fixes #3454 - Base version projectlombok/lombok@0089374 along with unmerged fix from projectlombok/lombok#3565 Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 1 + lombok/lombok-1.18.31-3454.jar | Bin 0 -> 2036547 bytes 2 files changed, 1 insertion(+) create mode 100644 lombok/lombok-1.18.31-3454.jar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f6b6276ee..fe62d525d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -117,6 +117,7 @@ jobs: - name: Clean tests run: npx gulp clean_test_folder - name: Prepare Lombok Support + if: false run: | npx gulp download_lombok - name: Prepare Pre-Release diff --git a/lombok/lombok-1.18.31-3454.jar b/lombok/lombok-1.18.31-3454.jar new file mode 100644 index 0000000000000000000000000000000000000000..5e4bea5f7c2c479c3d081e5b8d58b950c0f5b9ff GIT binary patch literal 2036547 zcmb@t1#n!umNjh07&BvR$IQ$eGq#y2#+aEojxlCtW@ct)W@g5i+4h_ELBK%(B1!_Z5;CInZ^IxUa(_<> z4TAojw4EkvsPa8IHYf-P+WY4}k^%%|Bt%6NmFNJXo)L_&-3&2^0PI*ojW<1#N!@*ED;1}U18lQ#|j3o9Wr!e<7Oz9eD<{rJ*h zs;TG5n!@?nrLgY@++T80YpAHcBK&Nk*7D%xBqya#)SEG7(yv#Tk6N}F_;z+5mevsN zsjK_;a943}ZrYkSx8a}n(+-VKnEph?b}c}Ki}YTG=kht2$?eEPuQa9&Czv&mO{F6d zX8LS4J*?Y!s6ubK9UW8VDgud+BAJ9jRYsB+Z2Hm7P5_s)pe*rre0`V;jjF?0f>&o% z>=xA@PJIITF4-(sl9pPhf}(VXp}9SimVKMcO=+-HB2?<;Xy)~SE>}RQQ9>4yp4l8F z<2>rob60arax}-3>S$h{tSerqw6Xr)ZRf!}Hk;7a%CnRHD3~@fC)=b@=87xip4Qth z8%1@M1-z%>C-uTCODSwl^l}h2%*LB-Vb_vnNfctSrn*`Ke%%5MccGkR1GurST{fS> zhEx^k=eT9}qG;QoU;rH-+N%IsJ*&Qe{7+mQImhiDs7=CCLRj_QR`1PdEt4ixJpcGl z%iE9FF-JFsPsdXMT2OmYM9s0dt;4P(GF$L1T&QBd?8CRalW);cnTk2sbXgK#zwa|T zg5iThM?%it?D1^|BgF}`<#fMpsRgP;+#qkLHio&#`bHgrC$i1-%{QML%LX6y$YTCINpf{_V0|$EnT65)?%2WY>E^LUjLY02ZExU*m=vnc z+YhanWyEF$c3B;?!={YohH;lrTG|UNxkPPuLHKsEQS+_9UkwBf-x)t^U{ZTruNehD~vECXRmMO2~Tp zTUM`axrJg9rp3jDD6zK@Y>ApFnWY0{a=Q1{c454NoGKYlJZt@gi^N$v1@Vug8*e%i zb3se2kYh731};MZdiNvoz7wFIsjblBTQa)cS;%^r8nZ^CbQu;~B!}l7JmiQ5KTpHC z9N0jfWvoANyV@|OWMy2&V1|r%RN*}ek?6QD)!=wyc#$9y!YrY}ifQDT0&tdFUT78) zZBNlHdr4I)uo*CPT3uYPjt!p%N#{^Q$9~I>M?3i4`wI(x(&#a6KZLbIvqm(tl4vKj zHHBv*W-Gs7a{Rssznq_>Vi0fb8Hl|1OfbrK6;P?$$5d`AHDrnI+(JaMMOYjHrsu|S zEM9N{!W+Hktp90lKTDQeOq8Va)pCf6rEn8ug~ zv85~k^XtHIjVk~ryLWVpscOCzq@c8;_C6pcCHN{prFs6Eyt!hgcn&r&zHZ(yKDKQ7 zNr!tDN3w)m$EQP%F{8`+D}kCmCyvV#k?z*M6=~!zHDQG>d@;XGHYZ z>mNc^LRmgYvcnVU^5apB5q-TXsMjlFzb3L)L7=r$;oYcJvv6UYL6;&7m(9-?#q|Fk z@X2dM&3S!^`Sd9nb@`6c%w^BkXt+oGN|c7(5h7-JmAKt53nftGoW z=pZOrim);DXqCqVS4#EQaIH<9y$@{Vx^mrynTo0Wq}KgM-?dhh)|*c{u47l z=JV_CbOL^cOOQox+oY~GN0Fe2CaT>%CV8QvJvYj z*4>SK;R!SRq=@y=k@q&PHyMV39u9$U{0 zz(;4u3*x(oRvS0Wq7n(gm`MT&8U#`v`@r^7X+nw#=ear|;``;cXca2Ic=2CVQd(`wre%Z(lokbl|4*TYGe38P5DY@z#@m$Uj)v=2$t|)g6}E5)=Jpug!k-9LS2SmG5dyhjI018x zmiTt#_AQbt^n!tv3VBxa5NU`y97gnR7l4E)K#%wch&5~bmrnvNTqd?$gP`B*BfmpJ#kj4r@6d1JEbNjF--RziK*1KNp^O=$EcOT){p^HUO`NjDP&q{;p=bE>4X}>t zu7yc#sZ;G8P8ssi29pfpYFJg3>DMkOZF(>*eew9OGT0J4PAgMukHw~NT5?J_!W`Vb zaQpBF7LCs;o-JRf(p_Wt4orSWh#xwq2V4bmf6hzG9IRhsv_G$abMDay+ z>*;ssr9&>~o8_11eS!3F_Mw>&`M1IEr1NXmkp8bjn~L|0Y6X^%naEHzm)>tpKI@Dp zcr}0gX-E9_3j61j@LvNAq<7u_N7P_!r)OwkME_@MXb`mb7-Q12pHlEWRp9%>_`U-F zYid&~13M#2BP$0z3pzb3D{BWm2UBY+IvYD{10#ETYdd@3R0GTm1ds@bk)a8|@WlLx z1kIS#_@w>l$Oydz&CuusEXA;_3@zO_{nenf1g%0BQC5t4Y6ckEu++gY;W*MkYVW94 zrW=juKLervY7)vj|34~eZ)E3W`d*R07=^wEQ0IJ4XaD}N|Ep2|NN=X+r04SA7-VW? zOegoJZ9vn26hHv!fcRgV))gm|ssglVb+px?k>OuLJCyfkmr(BGdVHtD`~U(%{@>Qn z!rD^b+MLe7+Rlhh`j7twY;1rv0%idMm>r0)NCDXoj7a_$FTrFsv)@Fb{BY?4Oy&)9 z!A0h-be_bS3Qpa`ov&u#2ytyvmBkfjAnlEd7tl%T4DdPRUNs z%Kn?Ro#h`x8`#7^4j_PhKo|{I!Mq3Akeh9?wv);u>Sg{`GCzFLs5!{T5aaVXn|dYJ z*N29z-z2$+zW{y^r{GYlLrNz*xWE%RH!`R)HXc9xyM4XeC5X1~b#Z=w#QsP7>>RBe zOf8Lsjckmp42`S|OpWa66#nwgRl@3ddf0RmIYL4z^?uL zaVS~1$pvUv!ZGd^j#^*8H{%l0ee)IH5ft)TlLnKNFEMlbTyE0ia4QJU&b?i3eg9gY z!`d*aJbhnS18ZgzlaQ#}2mgVe{(k626#*sUqfYyyAKcH#O0C@@?|--SXA6eA<$E1fOo~>LMgkx&UaSO7 zHwgEq8f`16K+6KAe_OM!0}?_ZPR(DqfP(oJo@azEF+V!Kt*c*=Y`$lP;!=csH&HMi|M@p`^*cKRY2= zR;xH;=9XPtb3L!_g&CH~5MMmCv=_d%NL4DJVF%$_@g`Q6VSontv7V0;nH z-!bu`AY6PhwLg&rYv~f;l6l|AGi{GHY>kN62D5sy_wcrgo^-|THBFY1f+H>8%zkis z#9<9cVwS>dhQN;UHn8c6Zh<%-guaP`U@>32z+DK>yKRL0X3HJ_-50vdp$2yMls_`K zHS1f#$2H$^u!i;EoQ|x!LwnjMK6nbeT`7ItV<|LMaZA{C;p${XiefYLDsb7Up$yZi zY+<<_siaLx#VWFf@SqQl2W30zZOD~e#%JbGZtPZEvfiY)b3^8$?)H!Kot;BvC_SdI#gdtM)5w?ooxhA)g5hkzg!lgFdhZwI z|4k>G{H;&z{~W%G?{kl%g`S|?@itQHUNMH00Arvh`h)yptlNN zyaxO0u=bkK-q87He-^%MwZza4m5@*n=ve=O(W+q$*5eKrBPbHjBRW0F^To0CzB~^p zRaSu`D!ofkFbsn!sq71eQ9E4%#HbOSk^X9#t*SuT7F}dx=3IaWlFwNaJ4fzVOR-z) z4g&Wr<%7hVn1=kSU63~x!Xj33{{om-s6{?K7JQ5>7DNx?#t+PY_i2=lET7o-$~M1O zp6x%ij;WRX`%>e5tkX#t8cACl{GrM3GqRJZ;or;$G5`T&10pW`-^^duI0RG%i3o&l zasn{m`*SU_Cp%PskwK4{(p`*6BWOB^Gi3*Ofior&yZRHl4BItkrg!}iBF95(rSMq* z)S1Pzj=J`_etXTicmAdoG_64rFq};IS+nJ2MsnG5xlNS`=Yp?}J}2sp`;5H+R=c9d z;fa9^G1V$q;V_nan`W5g3DXPg-))ClwU#%3uPJbqME9R;2QEqs=p=!E|6R-eTweiM zfcXDK%SI$=q@?HnpGtOF4EJA^j9|xuE9|`koZdx<^?z&1f2U$V0w927K;+Gi$?Py7 zfoyWi>U|7vQLcv#=`Ew>SMF0Oq>Md5Li~But9Z&N<>E#IgF-$qwO+c5YtEB?nbj;9 zf&gCUcBs_E%pOjClfKrKwVe5u<%MnrsuC7*Sw$r?A@i2{%BRd95|hpG*^0o0+wBKt zp(wl>;PA!dttwIJ+0sJ+;7b@rH;}qR3?2>Y;7{A3EAu5F75N8zORe5XpTFcHo~MeB z$+p?=vw=?d_!sX>Y7d0|Ed1&bPUu`vl=&*-=)-MJkjI~M_P@qL9V5KZYu77ZL#8Wb zmZf}i6DH3iU{$7ho&1S-Y1zbAn#iKXap&QyTl_GG6;5iqOPLM1t=0@zZ_%*pc1KUD1Gi?M)^nik zSYEGL{>82e9QM&Sa6Zom?#xIT3xnJvh?#S|e;>XdtX?XB&Q|o^RkHtcpZ`PF{usx9 ziq}6x?cd)1DQQ4zApZ2}v#HgoG!5KU5K2i$2d)ImS zJY$}_w}G$!Y!u+W+pP+N7jPkN0uBQ5@x4(LLo&loDDUN)1jZk`XhvkNGdt2hUe29jTi15s*zVRVlrw5(WfSkHHt!Yea` zXw%Q|D7j`IfPn|TY?_=2N2HKq1Z9|_R=wIIBlUbT*S9vdcjjrtE#C&W z1=kg!{0u4 zOi*%J?E3cRcU7N%w;}-Tw2QG_%W(J3BBN1@ zf4dov$}0b6evA9(i2AQFF6{f@Q52G<``fbcAHnT^O^EvM356{5?Cn_@{zC?w|31V2 zSP;>F%=hwhSh;(wK2&-i_#;U6r}Ai%f|?{^3lGdu_g{3j3)g?CT;mv;Hn+`rfU z&szMAO z8|z@6VgaC>l+p8xuEiUhuPW1QD5qUHTx_mg(_I>7%lv-teLglEcFL%UF$uk`9k!YNxXY6WX=o@c3 zuh_Hq9F%mBwQK12LS2t60%W{GI=f9NaI4psEeM%8eDV#dI$NW&v|1u1!W^us6)lVdYa00TOLixV6qD|abER(t_!ZNthG~|(#$_iv@hRTV9Q!F|8jDe z&h806AckhCn@|!PAO#11!8o7&6vPxh3A3p)R_+8rDCufS*v{7 zOC?O$9`L+5r-&!a+LCN`!9W9BYYfKj#sy#37(-x=U|}doF5yxcko37OK5TSZ979;7 zyEbod5Qy-ZYfPpSH|8NvKu%=t(mKWnA83xoN{cS65ri|Hx`kZ#=LdgUn?%l&(w+yyR>fh9Q>Jq27Ha%bDhPvBOprfYZ$vTHqEL^+f7u<;t8XX$RLm;B4qaGe%u`25Bc z@-^W-q}keRhR62t@ERCp$?eJ0mSWb<9IA`M451d5k^~m?yw>O{Hyv#qR=e!DVTa>i z4TK*oo3C##)K?S6&gnvr9?*n_Ztt1A`3*MdJXA8Htn?OgxyE(BkXKd*M>vlU?wUC= zZg!IJcb+qG5f%ivFLi&bp0p)6bpKjKMhRG$JphL0mGA@>Dep!Tfz0rVn1O zNY^L5#aiR*6VX>_Z(1t-t+5*Q=}WH%F%m2qZ}deflzjs~)T^1BGAgWeU>;N<-*EVI z?U}~cb%G6z4V@bg9bHuM=Qgd4q+d)VrEd&t$_;87U(_=Djo>fGNaelFHcemJLSx1> zvB?3R%t0o#dk-#hEV&Eb!csgWxP>kW$?6X8V?#R{UFA9rEF&}zG{E*2&OT=}$mJZL_Pz>oJl zYGGc{2oDkswce2`&~J7%BV7L=qH9Hj$J9r;mR0*P2P3^rB zcIon*Ec-=yD|(G5QhF>a+^z`GxK^Moq_O4OjFS8~E;f}i>DkGO`aNGbOg1M?q21vV z?sHkPfr~Q{6-u3oLze&zPdM!>-agwkugIwj+68|AD6_JkqVN+#cfO`DnVwodo$r<(<#1E5nIIMrOQNoW?oumsLcF?36R$@cBU*Bu_2~?qZ?UH z88R&DVf$-a)>$QASzDrC39r+0dD0D%_PfOUY!$2dEm)r_zm;^oXil@1c%?XW#}#ZMn>vXGG|dI?BQT)_w$z36;Og$SK1VhewF3+ zUC2)&k5nJ832z|E>lUj${d8fszDeht6zphHCex{~Tb2vFjopJ6ZAhs{qe|F$j_h7`bk7(7Aly>bU89hdWT@5~q=xx%hQSExK zB$k%M2v&9&BPq6wL?ee@W5*(!m8^E?p|+Oj?T|qOTJwgV9p|2Bl4R{FTUc#jgrEp;!F8alf(}xxx%Lmzv+0eKV2zlDAllRWGAB| zWEb{8z2zF#1eV%}A^-jrIqIl`{l=Eg8B}O^FWYr;X<-=kaWGbe2FKzT?n= z&KKa#?Zai8RIT7jk3p#!=hd|Ry;>ox(!^3Z{ceHTOt@UF$U=qSW+LNyf%#Z6OUp@p0++XH0D;2sia+g-f zVhUOT<|6DJ+wKgX-J(!Z9@N{x!W$8Uwq@W#pdvBEDy3eaTl!#a;*7AARknME-BwF2 zL`09oR9p${hC!}|p?UVW&|+~b#hM`8<5sF zJx6?~LeOPAOLVS4Fkn3Qel-4shEP~w8}an%9A3nRfcEK84(>iM`IrBs=C3b@D4$@; zIx&r$ky|R&?t<)`x5{U=8)2KJs4pjM3bsGosy@iRV7f~eJi(QjR29J&@w$MDE!m3B zS-r43bFpgt_)VCAvzqs*^Y^xh+x2%lOr7qL*6ZAAoQ|wlc%B@Z{*ninmF=2gqSgT0 z`u?vYzj=1($eR0H1tY&o-vnV~*(`Jp75S|528&in%uafX=}jx{5Rr77WOsNG60MG9 zEu^F1IFH?|83-O&(eXYo@CTVs3i5ji3pbhPvE#{)q={tEp+G*?P5C+pajk}6z21S! z%PvE@(S2u|CV%!ciPcdf*N-iTclvsfA!2fSEkaDmvivNm7fg1yM5aZzAN0+yPfLT< zANHUetpZuLhY5bdV2(`5 zHmJrahJC&j2K~H1S7FnMYlxK8-N}A2&91xd?r}vY{Q|(6@z~+f@#6~bw;$;>9#CJ{ z&p@|7CK$@KS?1L8Nlrj=LuM~092=4I_RYO9E|ex0ad}hTXHO>=)W-9R?9)QF{0;U0 z4rdA91FC<9Tl9Yk+br}Ptqe^5CF%nnOaDgpFdzYY-!Fv(0TKR>QQx20ff1glsf&@l zIB=(!MA*o}$XL(8=r3^|kPiqTHxOY;mWn9ySiGuoNbFzbq#0QO@ReWO*#Sc8wcQDR zsRH~Qn0HhuC*?IXM!$;?O_}#t6lV^+lxAvRb3bsxGq1K8PuSnBUh}kcczHjAZsHpv zCS#GY>@XOA>SfWHzV=^)Y`F5zb)yNUE+!hS@|*1CYw&}z3K(yA!6VOaC(xW|Lw60y zvLW+=^@#)lLbjry&!*jnn-E>(jJ_{}zvwMNBHZx#<9b|=5J9qK`& zHI|!X9}}4-CLxN&YSSOhqb;sKk=zguZmuXg=6!DrL1xaO$XmH$+i+wen2Y zL`7Vd#XmXC6pv`=9g;s6SZ5!05%p}wtz~f*-38*9by%ap8GZShO$L6plv|R?>r&gi zm6yRA!ncfv+HaC})sVKeToTl=@`~qEI&vYIvGrsOC;Z|&rc82D-rYm4w9^g!`YeHb z$_4L8@TA7CPxF2vPdaTWfYrbt+Hxs12!58x>y3`ds9}jY7F7YA#!+u+I)HQiJC67R zQDSZ#I&Y&QrOxNsc1(^wkR)d#ZDc0bd-D8_&9?!ZsxDZ4P@aBNF$-vB^r{4sd13Pl z%77GVef4`o^^7tlOBCm;EHvsz62lfSF&hJhELMOxVf{;(g!rxre5~MXW zf=28d=yYOtj+U}hQw^Z=(u;@kvyMv?;h^*dE0Th(=%|*-5VK>pS{YP`TXT!%a3V?* z#)67dRwvPE6;R@ei*1RsXGaG=RLsRH)7iI4+dK-g>7+{J8^;`R!qP$i+?sw%XCY)` zD~Wn}rOJ@MWrFCNq#R({9lM+EK{8zm(LzxkpJa|1?%fZ;rzZ>up>L_GDuQ8HA2yp1K3bQ4)-@B&I)ZPp5=hyH#{>}3NqS0udv+XIC8>pZT7 zu^>-$-1D!P<3uQ(oWXmK_jmC{W+-I8Aot`o6^FO2Bq{b1^JmTA$OrD$$80B}%h=Gt z^Hwc?B~R8jDyx8MEjvEqNm1vHppb}p&P77A)ey_7odP|4oKJc+ z)&_;xFIB-YeZ7>%p15KXQ0G=bLAji*Ul@N%2bspT>A=$Fo{1HHUY~XCboPW3SJ0y> zvB7VtYLDsBNW8_Hnjg%zphQ*ia~8IZa`z-4f#3j;WM*XKaS<)zF5fLCS4cVe7y{p} z7&%pCeBCq~ZEtt99#}0hc`jC7KBHXa*^dS=I4tBW^L!&!v_QeU4No^SkUcMVAsGDL zB_-qcR;*8f&J{P5u$Q>`f}YU*nODVu)oXtV=tE-1yD|sOK)z_`WyX z{xiFJaJtcFun){EZ&=3rJz3XpL@M)N&3iP2+L z1m>G|#+0P+UtcMBYKQ7GEt(g}9i4N(leWqlkbB;HZQ^WXE0^#*H84t~KESjy7&!(+ zb4hi1KZyCZTv#|0hkuNh|8T0F^ldcVHn|SDmqkS@i1mj_fvpMd1vt)Um^XWj(X#?Q z=PBqrUQdZvT?2nS&C+Hyq1}ltoF8Te>NSqZkI=U`Y+AG2R{CHoL2MEhh}#i|#{90; zxP`q9>6V5o+OuRLS1ASiZl5h8*_6(HN9avrWn&A$r_3^qPdEA-{B@eh6u4@Ke?JEU zeg9>T(Enwc03H+?S{wXjdH~V^0i*_^PDRssMil9dEu40s(7zBVS}rpHBpkGaT~f2a zCz7Lgvlld_)`~zuU1tTRdY5>_^f|?ileR5#2H!-M;5o;Qi~3__9?3vkn@e4d{p0>h zlKStJNE0E%s8t_Ejedq@R|t><2Dw7 zY`G?Nvv!_=Cv-wrPFc-uD%$jnqwzYQxLZx9o0`Yh>emKij`m--MIGJSKga(Zcl=x)}rP z0}F0CS*5XIbo4lu&0~&?Nj1%BQZy>W91J0+3me1r>aMQAh-7IqdOrpnVK|E%kJRs> zBq|S_E1kCI*ncD+avT)x9!2tPw+4NR4OO*GCY)m_4Vb{{X_F=~L0cq8PJ8sF*ZTlx zY}6YiPBdndD@CXETe{md0JnZd0nBYKEudtY(V1pU$+2aIRrY9hJW24K=_v81m^a-G2yZ|=MenZe5XeNsRUm%65?h5JIF;ah z;tCrO4QaL^eJ#{l?u6b-x8s?h7RGh69?ST5d61Bu>kVq*nz_0xNjRdWwtjd8ToZR1 zKX9SSKc|Q!(TnPW=V6lCZM}3Rkd0AUaI(L**2U!)Bp?^7t%GqiSY7&SjXsa7 z`LyOvt;}Z;H!+iY^dYRW45}-9o%R&v@PQ27VhqK6>N;Cem8G83dyW`oofwZxPQvt( z+3n#zN!lz!5C2my7*$9#yA9Vwoq~<`o4Q5g-P8sW$@Cl&|yQ9B^z45k+ zv@`^gESL=R`oTt))WYmuo*HOjo)7Tc>u{Z>9GnYxUu=15klTEC?0i6w7ywTc;}H5d zU{*!5)h?}z>D6=7Kxp0JvYzh&yV{Gg>ABX;lqUN*EUvRcz-z!1z%Qucc78vL57Qg; zdAFEgTc4x1LMN!yI+O_1@7@uUl>R5neAO1Hcupu_Tfwgl6F!BT<}}V`aYGE+-J9YR ziz+>W3V*VA60-+`uNyAxjkdWkspDU6-2oS>_LCSK((f_>`w;|0^#7tj(tq5#eZNBa z*TX^}BM?A#Ai|Wj?QxW`ybv~WSIF`xEi1p~|Ad$pEK@G|Ifo>U+oKAWYqSkl(+y%d=t-(@e98_o_W7> z7d~z22Nk=ulv|T4Hx;mI3}sueX^afRu6q`;G%?1Y7nrUeJ#FbFx=``Qd@Qjfg}p6k z)r&S|Oe;5nZBo*!i>HreCJhk31Nrs~5N9*=iCxppJ{=*%U!kd9X%JntI;l>hSdy+z z!PS!Vx9)DG93>{T5!WcqK9&`tt4e$Vvw70Z=Rv~d16UdsB@xBZXSj0{i?ptqTy|Fw zW32ttUer{iG&(N{Nqg08CvDRMTIEideM5VEwYul z!)tUs77m$oq%(50Wsi&BB|7)PpkqQ;Etc~pPRK6eZ$t6+^tCUNOhr^~Y5D1*2O}E@ zqJ#j|%B8>PB^pDi;S5rO=WA2Ceo=4{@#AdwLz6jqc>C%$l6Ap;1(`w1n3@T8ThN+b z!4ugFAYg_o4~vCxm;FJ&$Da)s^Fwwj#y@@OD2ZfruipQs6tr4m3S7cdqLQ_J3~noD zC_o&#TP#^!Wam+*Wjw4}OO;cIqJ-VhQJW3T`~nNi$(ti?>r^}dZmWlnJFR_Vm%)Y5 zE8|x?1f#Km&5prGf^D?1l_HW`iJR>$I>K{w8?U~C$cnLP)|zCa7?8FZvpiH2LE4#Q zqF|uIcLnF$3Q1EG+#IbqKlXBx%==1^ke(<8+#l&Q9c^^`Ql7}nti(E+_TkvfXR3MD z67*1ZOVzqdxQm(-J3OKHtL|i7uV2_?9U}nZit*iAySeFYS@GQ#7{3xQOhhjkq*yP; zW2t-88;wJ%w0Yi?RY>%Qk?;}|MP?j6GJBqQb!oSDF|B8Zf3;1KA%PhRte`03u6^E& z+@m{7bhJzZkFM4D=(4l1Ni5Y(N^)B2wOT+7a=wMC;S0T^IG|2gGEzK-U#{@uyqH@? zZ$iHFnqSxK-qu64F`YbNB5iRZi0QXz{Dv*4H?&VB;D<;q$Ys5-HJmATq$9s86k}K@ z@pB$A?t0H@(CO`37RlSENod8iZ+@a!h<*Wm&ynLQ!q?cgnlP}rx{m>ONY@-NKVJJ8 zp1*>T!Vrd}QcSU25vR%q%?$Ha2Wqza6qc-~u-&gR+;9ANPCgS^g+O)%7eQ{iy$f2` zy3s^UCyffogj8W20whCDkF8-1j z2!7_J9}z7=gp9MDqaR1$n7PT#h$eDDtzH<~(hH_keHQ``bPNd;EaW1W&CJnCHk1o+y=_qMIf5Yu zqe32)D#;86n!06jxV`kBxgn%Vyfiu8ao$*!&S2+jg;vfs)% z-{gwpKB*ks*2BYvD*;PNH;#+Xnlgh*5G;@lq_f)0_l4}a+tvwJ%;R0{whTZ=4q%c< zekPGNN4UuLaOPRFLt?hn?!xP`m=<@>zJ10N+2Tp6p1J6Lj`SV3fOlp< zM&XXCK&!xoa&}vUCD&Zg9q1X>8XN2>0zSrJ>$Z07)Mt3-DS;itKR0Xt_9LL9mg5>i zQV@`zn*YbC@{jv9f9$^gWq1J@fdH}t(dPl{p)_~-dvq0We!d?d_PI0QJ4KKy6qqR7 zAoX`huq<$aNiRs4_p?WI0Zog!`uXK$4NLP9 z&-;aYp^~u+_wlxrH4C;BVegFJzjMA_qz|NWGH)a?Gar=8{=T0w5LP0uNFtFo$`V)A zG&Hvy+(5P3&}vyGu-<6pY2-!X=3hh(8W;CuAL?WI7UG>kV9=9drny`XzPuxiiosr? zUhi@gFrrdnYN|EA+-z}VG?IduG0+Q;_797)p*cq!Sa=lT1@$c_*B{OxfP>nBO$@ER za+EIb7Z>Z4f<)KYC8VD@+}Gu(EG{UaMbbX8hJ{EBP9{Eko8I6t?~p92cHKKa4c<%+HnP z6R}lOrX#rgs-k_;C~=BSM0ZoNI87yixW%t2Yx&B>anQ)hie(b4(lY@lg(5YF(qxE< z8fOuZ-MW^LB%HbU(#c@}IIdG(-Z!~QW~@WCy^9ZtiR0CULH$V%Y%Foh)C#AruroNPtgR8g_Gpymc0DKDjHo=d)Lg_xrH1>oQ#LESkX=}T*tA6I{#0=5OX9K+!S1dm{Zs8HjJX3<*) zRJXBW)J{Y%jJ5S zXBucTV1$ZghxFi?${6-Bq>7ItBPgGllFhi&Hv7>TG2t08gk2n%eCpWDA4$shwFncc zhcq;g4l0trX&5l)@?B}06~!Z~yT4vzLk{^cJGATX8{Thl;wwqex8#BJE4W+{QoD@2 zP{nQrBi|^=SCDZ`+RTP#(*OGNB7TGgyq^JU+4w@;QwcFFyMN+3bLiR}$%J1X)?uJ% zrsl(wC|qI{A5Q21m>y~G;*~Czu}^d#PLNYd8_Z`unm&-KvtfgkV+tIK&tXyfx-{)% zHl!HvwSLdPswBCSnC*2*%qEHeDHU0hIXuT~`NdJAz5Cfi1<6rmKYJK)g6@TTM)V95 z(+O-59t zvfN+}MVC#dpSO^oWUCIrh65Y*yGl0k%5xBlGq=96#InX!DAw>Jm95M|&X%6Evn?76I?$in46D3eB0FR6}^$kaxHFH*TD6o?W=*SV8dX5#zPzlU! zS|ZTQD`*zn#F2hLdb*JUAQG#{gB$(l`u-l%CL6 z@}?#AeGf)8e>iBYv)@t5#F(MxW2cDk-9_2gp-~xmM+JqpXPQt z%@OS;QwfJ7nZ7X`D9adXEjiqk;G*#5NyGLKNB~oztm=wMRe&2vK7Z*)3_Q7U7r5FP z`fi&UUj#F=*cUU6dWdX!zZ5IC#3GWp_2rp0_;7=h*C~cU!XTNOkOhk-`lF8lweD`h zA5)KlL?Wi;zYt_f{sdJh#nF`qb2yw#R&5^#M1TgSmAEepb~!oL@>osTqT3a(EiS`2 z9DbPs$m$w4;Bx?MFC9bL1<1F+Ue?xpelZBnyqUKgrA&GqY}c#t99u`U9GQCDa&P2Q ziu0OJH5_r@*>?2bks!IH1)JIxDufBFK7Zo1p1x1a-~D7Vbsu-UdKom9n&S2S0Z{Rl z&1K;2XF|B3U)EKAF875JSE^l@KIJAx%LV}7aEM-KQw4MCE|`Uf-T8>!NTI0JYBoh5 zo8;1>$EFSXkd~ODV-QVM=KGZr?}ba~M*YLR^we(*wBZ9vn8;~@Cy@?wb}?erWq}fI z6nHC`Z3h2u%{fs{x=OCYKf+_t!K{dF$rDdy2a35(Ul;X?iSLtE*x_c$bfRK4i`wRq zTj3)umz#?a%y~fRjiZYdU*WnQyDdQP{c#{r_?HPSKS`?Y4Go ztKw8_+eyW?Dz$DrN8&NgtshIWSQQtVoa;BVyU^xSvdl; zQ>gx2itmLk(>VU!Apl+=>RPxy9^n=?8j&^@O#L$gCn@bn%80wO%^wTq_29d1a(|gwut%Wi%zFj6#`p zty?3Pw~AgZ4cZAzpfg5g+miam7}VnMS`qoXu>6CwMBc}qU+D84SJ%kFqr8Wz=sPaI z0sL01f*}rzlEsX=q`em=KpSDlujG&A@szslJvMaRwCHQYIs>k_ zn%S)Kv%Dz8?7U7feX&Kg5bIFsAiU40B9r^zO``#zT`Zn|-< zCigXo>pHuTvUSkP`tfwp--gyqucBbn#Oa5-IBvy*1i4=5Mr7`K=}TA}(KMvka8^oY zQA30SqRy2yTqv+>RFl+}7F4#1!>wo6{6(dpI^rRHxykAAF_a$B$Rk=t8shem>T<|Z zld18eAyra#5Zc)#0ks-Nl<+_$p%i%C{AiDQG^BK%55}*+QI2%U zOsQ0oPUA~WjAtvwD|VAxJTLNwOQ_d6AC>F)gUhJkgelQ1_nzruv$oM3(FN`mOvLM> zcIhv;`99ZHtO)+{20lL8Z*v*opZsM3hAKy=eanN_zn!G-Ln?tfccoi>buQm^0B^3M zpqvKeY)sEtb$?js;4RAw;;sZ55bZTV%~P|ojdMOx-|ol?A3jJUx+`EjsrJqwJ(I3= zb8X%mt~rdM4D47hGe9pjQ^59}9XGs?P}lu$Q%4aW+m|f**x14Ib$nt8YB};STp;^L z!OR@2ENj-QBKqc-$J0e>1v)65`1*#?qjI)Ubd)7r?bzL+(gA82viKX<0suEAh6O8m%?X z5;xWzM_;OUq)?O-1z=kMQU zdtKcaN(t~E+}^!jb2r~NDGZnex-imNZQnof#Ne-X05j&Nm9-Y@*KqFAyG2ABf_;oX zGq?m1{wg~biSR81P@1TMS1mA0`-GM1zjRQP6yEP265NktxW5F#IQUxJPQM(NC9llZ za)1$>Nma+~s4Mj^LuG=9l@|SOEpI$` z#*J1H&`EL%jn%B@Eo-5$Dj@wd-c+aV)9rI`@$1Yxcn|=kb&S+sJ6?6Lwh=_*>Bc&G z;1m=wi{+{Rn|+1sVx+4{#kWFP;Wqbulxcw)pORsadu8#nhca1xOy6Azx{I>F&ct*( z!MmH#5NYPw8Xy2uG!k#mwDlAkF<&Us??*5pEqp(OlN{Be!>w7=(?C&sAl8%`H90uyjIX428wj&@Vz8p+5Nc@2QKhQ zW8^Lr1JSnd zC#!YHB4ddo=3Z2Q?vAG(J%9T@N1dnQ`c}@wH05v5RE5SSpuYYX!)sew-6NkU-+vjO(sV z^C7@2k=Vg~&Rw-zKDJ{}E>$DcF^(tp0`pgz96Lop0~@k7yqi~T*kri1U_y`&y@0A?V%S`(b)3{(>%USE)U zy#6Clzz^2NVBslxmmQe5LBgJK*Sk@)vCCjO8gkIzbbhUNTQTZ<&tD^aUexJOPD&8B zjzm~ySmM%-zh10-i#tqA_Q?fB{uQ0e^z2?FzFH)|Mj zUs-$Espd6YwS7cVg+>-6%NU6EMc7&kUq~8G3dFK|fyG^BNM_dK6?56W)w15PA^fHT zWQi5EMJXaY?gh_&PPW`nY&~aneAdGeJ@$KVVp`6!?b?Xl+~q<4)L*lP$+$|(yjLzg zzdo6I68BqmN@{c!tYqeH#`f<5N#)9(0m{IHf1_$_ufe3`i_}nbE22NV#4`57#0KA5 zO9`vuf)9hy;gouUYrD9+E3TRsU>yTGaAU!k{fWHyqiD;Fq_t1h+#}eRQnnAgrmJ2&%HVnX%szIi z1xq4mTZQ34Yx-p$XQt9h4qvkH%JV*!SZ@xIcda8mEh)$$Ipu|5Vr^Vb8W8_e` z12?pCJ@e9%M<)f*$`GO}Rg;6FOjnBE;T{JwFI zX6z;s+>an5EdfKEkDi|ZOPb8-$N=nGE=t^$#-J)UM~Ide_p_LO@i|oHbPxmvnkeyp zF+TK>s;9qjlYHRH>|865^2^n~f^%i)E=)+*{3vXFkz@2^W1ZoVPm8fNl<*J~mo6Iu zNb^|OOgp!1?%HuL?z;H(UrI1(?+l5Xnxn{E8J31>>7A16oua1?@E0liutp`7>KVtG z6tP4l{c`98|N3EXNPrW8$HsS1qX5blJ%a)u4wQbe84>sG*DWlE_L#O|g10-6G%b&$ zI_>kZ>O^Srkum6s9JR<1s$&8)K58bP|@W0L^iw!tv%T_-Jn` z{WR8_7{1P?ExyTeVwL(3p0&*TQ-Bz30=F=REOCPKy3)HTS~hwu*^!^9*EAP z{_U1nwGQ;T)#DUuV=*)zvV-@eVE%~w1~orcwyzvTdkOF#D+6!6}c~pol2TDC(?z&yB<2G__NRKX21ph zGac5&Ixa_2l>W~()2ZkOtgk)JY@yB}<${{E9DZ8_U&OAfVGAtS+2Yp$;iX!rsj~Ui zJrzPp6n;K$c^S$BXXkiuhj+t5O7ZjR&RwhQjCZ?P)3kHumF39uA^FJ{aRY(2$*f=w zwDctaS_F|(PPLJK8zY1$_t5@@g4Z7$fwiT~yQ<$wJ+JY^5}HeO_1N1*!Eai{iAYec zYPnO+_#s;Kx>>oJi9QE5lP@9nIzR6O{G)f7fb3-W>|Ac~r?&4X3o{*Bn_OVs&I3;HcfaSy>G5MlnBP_Sq~*3B&5{vgf( zn;Nx5nrx0HP1rOd2D>PbPHY_`O_Gr_$YsR*fig`tW(1Cli21Z6Q*b+$$wP1qSypw9 zT2aI|#loaiKV`x|s?5!Q;;58K3^WgQEin5eriOV=?i=*6-scVV6Uzg4eE)58b@`lkGpo_@dJJ>KjxiRKzMz2*lRqk1WZ4>K%{Q2vH9Wtj-9k3%Q>#}6=t)c!-_8ju z8G$o(!Jrx?mHY?0QOGNUY9mh5UN%hVd&R-TmX9+gFIsLN?Q+Al<1(Cg0 z^7rbQr`$z|ZNl`S!#@CczIP-qrGOYK3oT#^m|*&NHQ@e3feAs$ERY-vhEqNkN~3(| zx<0vX)dbi}%E8VRktR-4gw*+v#W2uz79Qv0mfqv2$u@bPZ{FAt>Q<^rZru_AYaXcc zfEiBZxQD4EF-+jOvH~8@enP%-;NEHVoN}(-#~$FEfb6qkk8cp$!TT7;0Dp#^mKz58 zzo+S9gMYz|+xN}|786^4)CqMfb;NiP)!w%P&1 z$4~AE_d!kI7Y`1#%`JMi*XQYLbRHWizVY~r5i9D$6P7sy=rIdyBhQp zZI%7$hxK=FsQtQm&~DJ`b3*0=bpUskNNkdbv`OKRrWSo3O?rs6 zDmFEO^wzENZ|)BMqPPx7=}s0Kf7BvjzaeRj8$bN)5O;AX@cNTda7omfMjwZGdsvs% zJYv1}!Dqb>T-=lMNQt!Pay3&d5DK~h4HmWgd`Gqgckt4Z6wm?Qo;L32M!j}d5;x9R z2m5lKuY+)YuZQ!QK+K@dzKO7}Y@ZpDoyToorWIA3azfSxQjTtioWD*1x3p(46XqvM zIN<^_+zNRonO@a-##T{w+UK;n=Hx3PlHFW7asZKF`lCxG;ZbQ`z5GY5eBRxymf;;y z`}WoRQ_xM2Oc%<)VvoNTC|*SQPwHWc_dmTr@(*1yHb)lj38Ie%Pj;c6BMFv?bq9xD zI(K$^cwFIL7~9Ay^Z8>3yUGcXIC6ILbm_sM#S(+6&|NT1^7et%s_w!mAjRhbbN#+4 zN-LRV4!>T(@}s%U;x{Ce4il8gbMotFngm=dE0j-0oRM`wClh=;auD!_=iu;8VM?SI z%pTC8rAR(18biqKij4^p%ePY+?H2`%elDA?at5k7ULZ{ zJ|>j5uwAL+rnnhztCx?hp=NF;Tf0I&rFoTA>(MXB*McPIFC(UV{${5it<(fZ+V7-| zg;UjsVCW;LEE?IuKo5^B-V+DyS%;=~_+Pk7>5+@!JF8aSX!6-1us?1!cSP#zT@Nlc zm}9eS{j+TSvWk1Bm;-9=!MkiJT%K+}5x6sOOXZ{ti&0ETP)KSXL_V6o9n{3Qh}lHD zVMVh8hF^5jB>|6&j8WZvh!3R$H$9i0FXiGz%E_fb^0UEAY@eJE!{-Da_ro_ zhD?XQjTZtc)s1V*r({dA>tRVBUk6{?OGFyIwl{i)~bG&+?$q&Nl~-=+ad# zhD=n}5#{C{&I&&E;VZiF_HsxZ*~=x9Fr5U>_6*bxYdbreRS7A4z-d*63_m82eN@21 zs*4e3N$n;{eEVMSO{o&Qfl_>fyuYGkle&eRzjIgbljU)5q|3B7}TLx|OW_RHN|J6rIDRn6rkz>=?#eSw-B zD8O6)o!Bfk8TpKHV~XpaJoxTSXs554TX>O^uyCtWy2nbaj?dyr$YFeSZU+IY=$2VD z+ZEwChIfEvc{2Tyf|2`Biz*Jt%>zk*DJkWGPCw&QQfzaqq<86!HTE4mm;?Lv?xvG1 zURHmkv;o2j&LG3Wr(&f^w?VTQov1Cn$N2z=s(^nFa{^HV-FsPoqccR5vsO*dDAq7{ zhLz~7F$f_8iL z^zA@4%JF%Y6TQf}ybN`Zk1z;|d~x2MQW^P>1It@@2!`^UyEMMof6PJ*q^}6QCce1F z_?APHPS(0rv^bZ~sx=TMYLsP(qG)soEnPoTvOaSDgvJnJl6A}s`7I+7hBh3W&5}uh z%uJzyBmZXZS6bmCF9!ZFIVsXA95#JI5nB0V-$?f;S||r8#YAFhbnZ~xxpflJ2GoRd z>Yh957AzB|2mrpPw^^SH#(@?+l$|>I5^%3f!u2=IF~f)+FjeV5YUGg=EqMq>T6br! zXfIqQyv!yyC%kN^*xAbw&L1f@O;~Epo15?p=aM<8631Db@_5E=pXO&*HUQIfUfPgu zl5r}}G19$ZPCYgF3q!m>wxD~Eay6>h(Wq$x_@4O`j#Fj|;k&mo${EHcmt-zblvPUOfkQr)TTDGp+2X}lHFQ~;wf zdRzI9l5pDBydmu4PXzcW&Yi?~A~?@%!Jk@r4EWepG%*w2{gwkf*eIzl+rTB57cFt{ zAuepgied+^B`lnh-W74!s0j1gTOF?HmO%fPNUW41=t{_6niYL1e0k^((3LfEX0U_} zq?o2NbAG>Y5-1x)#muCP(=PR616u{6P6o$_>u@>G_{MZ~?SXFP@d+3(PAbeN0OQx&WW_Ea0uNlua-_7EtH7}|x8N82>S4Rq|cnvL393(nbtO$p3 z4yh@cv{J|isy*yd%dM98%R)k^HcpQWTx(5julEOE?N-%8G<(6&=E&!9sIj$Xrg)Xv z4;eL9cbLu=-`-0a@;SP%C=ZWC-?awax$o6k8?Gjf_qpX5p1}1;-;PDwzx#wn9N?c?BNW&KRo-FHhQMTf%MF zt3dH~0`}HG7sN%xzq*Y60&o9$E!dHBHj(bP8pFHF<>j5h_t`SC=hp z3tTBCj4GNV;%QbTT$3JwpPQC0iEr@d6r1D~o8)Rl~F^K@m*C^zDGvDa1q-Rizm0oCH# zh<5dgg0Z0=Y`8Jm^=#qv<%b)GrjeIQR)1ljAv{v8MA=(9VD!>`Rr!au$2 zO1kr{SxMP;yb!KNCF}9qqzC7fQ$gnxkG?8rzG|i$BJM+`qfA!-g`s2nKig8ILqE*Y z?Fk~i2>R0A?cIFCK!#Fw-JknQx`mtbznO=C+m<>7vGwjp`x4R+QcaN6h0qAep%9(fb}9xZ0y@ERtT&k24`rWd`EzV{bk4S8-~Xo{<=^~Yx?7Z}!{2G+9Sk5K!T-(t zpR%#z|6m>cGyA81#{bl)?(U?eg7;;!CA~Fqkkm8}Fj`ZDK}!Wd&kqK>DE?k=$n$f` za)MSF8=sK6i(hrSC$rWDYNVpFK-UU~QJpPAgKrE*D-xZ_2bT^HS2f4&~u{;*>qB}#`x z*?`F`K}+2z8*Yp`RSz*~D8*Bd=~+*QDxbY9%hTMhPe7>Gl!MmVb#%E_Y zGjSy%x~b`A)pr7Kuv3-;GziEIz}-}u3@n=c%nT)cEHMFFNW@a#jAMdl%|zFd0$!At z;YGH!GRI@3HA3mIlxeG1V#X#9-DsjOjT+3*MVJQlD}|x+Q`_l{D0d|z`60AV6CZgB z!YqmNi`pP)4XUC`FCbMMutxavcdBMsLz*=6sKuE3yd>@#q1~tZZ`zxYZ*unsvx7Yo zISBcoLy(kYcj_H#>XV_QRPuc)zqD19@zO@Rje4$4^!Ys#$==15;1`)DhbFpp_04wL z8F3=%RW0ve)L;y=rA9Ln>T&pwk|ai5y+!ahrCyK)#_qm?-&Tu?rxd9Ar(n2i$`qoD zRsFxPfc;3139IywF%m}lUS*Nh*?^53+;nq`da@4wH0KEpDU!Kxx>B{^kE_FKW3#sn z>1t(=jI^?ug6Bu6da76Fg0n-nnC0?PGfeV#56r1rCDsb+ zc`PYOOopDC=+%G9*Fa}bn#%zcJ#t(MT&k$8Zh!QmtBCDa<+BbEAvT)M;a-A@H+PxMKY^Wa|$aHDU8Z-PuIGg+YbG=3RWytaoQ^GIW;2ttnhbjZP$ zvCQCFRsWzhbRH#(!E=xiByU>*dT`UtPq~759TzKVL2{9)(Q*PTo;;ixDMpA@?2Dtf z&6fWR$5fHOH1`W~KV7KACcJ!Vz(BNgUn%$*MMttS#6!0s8?*XolqMR@N;{tzX`a^t zc)CiM9j3t-F+XQR@pLFIA{x~AO|qZp+%!i0BpQ)3-X_tLg+0k{Yo7?l6Wn$Tz+L3d z=V^gfE?kK;O>By#AIj{%LjYmELv)wkyAZTB@0y|xf27FP7|kLJl4jkIg2oXW3W0Lg zK_}U_xwGM9AAO-9Rv-#FEd6Qv!7r)(zI!dgF|t-(yg1OYuV1HF$ZV+TM8Cs9w^B7Sh;a7iiE< zTWd@G5=}~Wj)iP_r2sB=t6iQyhcT@<1gK9&fpNRxJ|?ND{sF;ibc?WASejIOkvEd1Op7XgUbn-_awpI8t=jD3B|Fycoz!_yXHD{B z6@TK7?D#gNr-pg7@|xa_eE5zucq)J4+6rvGaB7Q~-8I7!f}VIn8bq#+s4bjKIX#tjC$w^*%jh=X z4NUBTNx|Z2dz8_)H9;$A)i>O(vHcYVKf(*RF}_!lrgx)jT2MDJ&zdvg05JJ=|h0cXum7IuCX_SBA6BZ;({? zv?sESd0@M7uJgJxM$@hj#R0*<8@+L`t_D=!+u-Gz3p?J4B?IsEtto=ZT{ zZa!*8FF|k;Ly*QaDYyDq+^>lK2?W5RZtS%6f!|CKFLC&_PnZN{27ztL7*(~@yM`?x zF1{O6BY)@5NtTQ|@ydBeUNhY{5Ir^;5oKH3opX*%^9wK3jrvT(nefz25-g zV+r`qFoqfq-*O--$>!Aap771?#A6@yw`?3&CI2{{vl7<>;^%}C?ey)YDLb@S&Wo$> zqY9g7f>&jdGTn{U5h;4Wri;@t?b+^eI;Bsg{X~Z?>L#T4#LFo3-BCTwk>|Wh`Z5l2 z>D2z4DUR$7My{2DJbeb2>0oChxdIY>jeP{NNvkH3UiN zb&D(bbP404{*I7fx+2Jn9CkUP@);L7jJ&*I7LWngeuw>F8VBZXsZY{k*2w8j|Lw<( zU=Yshq%KsvALg+Vn6!+7jWt95G+9d&kuksKb7UuPk z->`@3roFc$hK4tbYG$6G3recWK8(fCWx_nla0f8G%F?)(LH<3FRaLg5*s(SKtY zTz{F!BLAyR-v3`<@E^nX{|x`>pZPyUDQhdOt0M7Q;uxU`8pOrVC9~uet^}`;O7P1_ zXoJ94!lQ8-&G8x0-GNhMjuMA?edK%ruca-_r#;moz6yDtlB`l=4ez8riL|e^yH2lm zw!iNk68HkQ_*uh4_gT$zuiQRG$k?B(MePBgE{DqQl_6ZS+8#_Ty6gh9r}<}MiL~5E z@L^q?pTlvuV+!$5L@hKAoh_XW%O%~a?~XQ7+GSiQRE<||&Paa&&R=HQbhkFNT7@um zoV3Wbh)C*Nt$$gpmP_GDU_#7c5@uF&RB7?^ti<`qT(FS#R=72p*}!fqeB&8XS#bap zs=em4GGruzm<+ArkB!S9gQ3gS*itt0g7k@i3SllW`nj@d89XEasqD5ukm>*Z>z_h< zy5wna;zpo^&9}oMtB=_di3n}z$#ii`E^XondUDbd9>XGy3Yea{)j45-pV+}Bq_xt7 z=$!!3*OyNRt(P-wicpDlnKuWoo1xv2w4%^t6`?Wx8N(^dY!=$~EIb(Mk6iV*_dD;p z#j~gjP0C#Bm=7iLZ@lB^eAt2yyy(bpy~u9Si$C`*JxtXwtF0ffp472>)tKKn zr3GF%*QpPguBW)=Y7;T*BdW)fuWT^g`d(Wd$dt{|L>Mq8>1jaUO!X-oA!;KGb708V zSzxw)Bru8L6k1{WH&}e8X}jnT;FcF5_FiGtsiLJqEKM|Zhn7twg4o3#cv4m^n-X6c zq3?2;3jT+OAC6w*iR&HhCK@6=qv%PYa&&m0Wh|F&y1J2qET#pSk|p;HI1$Q1Izy& z!I3vSS9bjyZeRET1SIgkSp-y^%&q?8`~T1DpZ@v&Q@6a?h0*kni`gx{ImNk9|QIPM_?*UQi?^D38$Dk&BfQf9V^*jw8P zZH!Q6{eltt!x5~aFInf82i_(Y?rn6m@S}BPJs*P-8H4= zatj5F#~Vh5TH<8aVJ*Qy&JDs+7io4Xby`(=ni*G3gLgz~5#R;==91O>tj6J<(o5+I z*ll0}HRBbCyB5U<589be>mdxx{SIkOUD8CQ-et;}hkMJ;lImO3!Tf@_KA^x9=;ZZr zN@B>AOuQqon<-PM6^itcou}ms3>lN5%(xRu*$iW=bkr~F7R-wb!oC{ahn6LSq?|J& zz(MX$s>X|uriPi|f5e7sHB^eym(rSB%bK8gXFQ2c5>h8i zLnS)>7IkthXFQ12t^gl`6puy7xvw z(o$!e58!#Dz+A(UdT2~v5~!2gX*=U7zE859POyJZV{#qRP=Rlf#6Fptr+npwZB(>E zm}H`}bgt+>1c6NzR7;y}iDRl)ucARJM?7c?rUskJ(6NznG06vg%BKeQUg{!@@BAsp zYNMHa z6HtJ|UiX>NY!b=AOXZ5HpF?D+W|NR@HD8Ozz6!m{Nc>{l$^r1~o8+?TC0{9-OLPq^ zFTXd2y={{bqK~OagT-O0Z8_^oI*IL(#^auqLwLfxja=X~04AzhtKz$8){nu$%*Lte_t+dgtDk1TR3G;Z)$ozsEK!(zm@1fQv&gomNY zE)QhJw)vsXBnHB$K2K}sZLs~O%>UZGX9Z(6WwC0PyvS6H!kfI3uwgCx*zmYm4{Mvl zojsK(J=gB+1@X)v+2r6i4s+1ATGsyK+5CkDaolUTN#1)Q7O!Gly!K}uyv*>i-54(8 z4>bzcOKeYT6-0K}Fn4?{*f<|G+5qu{GIby%a>C=63SP`!Y=^7tHn3`~@1z6tj!b>W z4h-UTMN~s@HL?pZqo350Gb_6C3{S>jMtfUHCs{Y-C>q^LFxW@(W^4F?(vwCsIINnL z{yC0hS{>0u?DefYJq;8hyS!^11qy{|RS>C>}mZTMnc}hm&cT+`y8aUT+$rz%hIuC3? zTA~wI2;*e0&bKe9Bl?SuF8Yf}m zrc)J(JS}ilgKYPc=~wB`Euz^`WnW&z`xW`MitRu1M>%Oyy9EXD``#9F-h0q z3O^0m6l=i_Yu}#@WbaJ&>;R${(|zJ4g@n0=n;7B0zA zpfR^)4O!R1pusV$fNq7Z46XGr5zL(*7FrsQH@4v4EN*SAG>9`hVzq(uix&1p4m%iB z3I0XM+Z;suC3x1QSYrLqhib7zN=rwSC^m=E;lhPUK`@@wbbW(fk{)z|#I98}x3+mI zxIM#m=1V8WV<)@|hx_#;ib~wUfZ3+Dicz3V>!ZDfQSZ#wtg4MXY0-zd(yEM z`2zSAaa6&>A(f4GN~zAo?TZ<~;i_b|LPIrEymnE}C%R_~CaX9`t5b6rX_mLns4jh) zYM8|LrG~|Ys61!5tPqBrg6uW>3l1>f%@dy-isz*F80juY+)3VH{RcZ=CtUAg2BazhAZjy&mWb(gg>g2`>D!_XD{0WpIPf-NSSLt7lM@H6I`}NrURdAs@=M`Edv&aB8IVze#_LgBlEmT+jcOUtY z=Lzn6Xa8O&7-4g@-V-m5&(<>;m1oCp+?0LC%5R+A^5$X9{${ndklk~>G69{QXr~o> znu>f*{~$NNd-}a!xXzr7Ackew2PdidmV}!GYUZa-i+oXSCn(dT>!i16;6-OCiBiLz zPGMUO3&I?CbEs)P)4|(LN9$)6S+8WeNpe-0cB<(gDqmDN^=>G|=^!e8*?<{g!?t)syt|!rvPwyue%HQjy#8l|Ji#s=oUc5Y{_&T%gS^s~vKGnu(%iBfS1M=Xg7<)Y z9(5fjqdQg!ct=^)e$<0K2GFlek2PFYDp4KMJ4Tlbdm`T`cdtzFcZjNfFu6=r9$4AB zJ6Zc}_-xUUSj2{UTO9t@7*lR3q+TF#~QxG^I+ z{iy^4ImIADsd9K*`!C}sk!NnkXPAe{-Ny4a;HJv=p*Oi7?-QWkuNSlDz5I*U-8Z%> zDswZwH~3{=|B*G1{^my&{tNfpg#!ZO|KDtMRsS|o{&$AKKdXQGXZuf`s+LMP|9C9G zD0-Ib@)Si6qMF!>(jLt)stHJvRzF$tlz+40yU2~iPujGtDxXCXd|*Wre1Q6xE%rt; zbNQS>e*gI%y5(($4J=Gaw9nL<;GleT}Gf~-tuuZk# z>>9vpR8`%*viEYmDqJ>`>Z9K@?t4zvb2>q~mI!E_p0UV{V_#)oGk0 z$FbFmD=wWLBN=u4H0WWk?)YABnD3ZI)2>m=u7$X)k3>gynjFKl{&Ww6CDW~2))qAp@(&;cKVmb@KQh)}8# zrj@AFH4CY7nU*rrkbXW3}#061w?DwA|rl{K&cD6j?zoXF}oQFTg!e79va5b{?~~YXd=&D|Th45pyVU zA)|1yt(NwVhuaIM=#_9kxu?(Y>7syJZp|7V0(!RLhpDu1KeFzJYy!tyBphgJ{xw4z zaIz4+X1-}?d&|(BTgm|p=e04ePF|;mz#O&Q ziaR;DZ;1GKTB-H3KHda|UH-V_UEEa|_S3e|88rA)c{Bf(!F~S^4h>HfwRrpAQ$!-D z|K$c0HwWHZ0$`5mtOlu_n9+j8yw zbs}{faeSCz+OFRYVY@`Rxm5G$y3Lf!#kzX0#d!0i6yNnRda$5HQbV>^q$mQVYd{Sy zjCcMD!DHx#hd0i=E zDD<G59h8)}vw$A7g-l!d zE$`~7mD&l0V-t$vln4KoYd_eKz;PM%fbclfM}rw4lc41qtregqtvjvcVFZr4snlqF z^#*e9gZ2Qc$)zM3ui2qG_NpLv22xb?ZH*aWP-WgoVY1jysO4&Ci$W=XFX*=^lD?y2!h**xAhOfS$UWL=ya!un1Q4+P! zx*LruaI*+{YA)v|WZI@s(56^O&l(HgN_YPfM!+6%sMgiX6D)$b7=!%w}iVyN7 z;czVeAYW>idtyBB9Zen*oME1&kR1^BL5(}wJsy6O#Q3M5CFs9pFX zVuQignb_}1`D`co>9JbH_VVZ!5Yjf0!!wh zkixp4dWr)$m`7aXbtBMGVDbNi{Q7A6MT|aLdw8F%4+O~}pNdQ)=Cg9I z`#TQ5Rd0rC(VT&!=?9s+wGb+GA~@{vTZT!%dGpruluRrP6@5khsgz)8>pXfQqPLj^ zMc(gW8Y=(SXy>C%vlZssv?~$Onw49>=r*n<4IbI#c|RF2>a0G}Y*-6|4+?~d+DT<8 zwX^qCAOAO;V`(qUQxe9ozI?rMyNjW?FlpW5OpfPil@{6+>g3Kg@hGVZS8_7EmsoaB z(gHiV8V#NUS~UdkpYn!syMDPEG-n5k#P>QLG_|R*EbEpK-L<#(v(aU+x-d*wE z2{7eK&8Y($1}GF(P)iX-reqSO>64{3v@6*}p^Z{}?`{+&I&U!T{*4B^!waGxT}%`g z(5eyZ?dhAOzk{9@idJ0C_E{2?>Af3zp+^vQ2fP0$Km0cOTlM4DdhKK)Ur>24D%T>a zNg#FBlD%wu;DQgkADvOL{R>p;0Pl`&b;mu&OPnr&`oPd3N{gIbVGv{0s6&X4Fem=q zsA=vmxc9#ruK#DT9pc~5`2YS=&>PxX|5ri4|GXIIe_rh2YVP#6UD?Xk_W$FzP!p5yMHXWl#3x_h5<_FQ|epI-F;u~+}^hyI@_ z1g#7e{s$Qmy`tm)-k9JY*FXH@{fDk(ZAUC4^pS6ydfhc>d@AuX6=^VWql9B9V2cHf zA~Qt-@lxrGc%`a@Epg}dwX~~A%XKAF_;86hS`cDtia&aJiTd0uO%GV(RXA5kE3SK8 zD>~>oCe92U8Ciju2XPT@yxGrQIWar;(~S2i-<}WjzVA07pbz^Vo1VPUJXq2DV0MAF zsl*ak5K_zpQBs-36s!xIleP&*A`u60(KpEjQL}Le!=e3$32rF35&hx)(FWKsBfGY` zyF=bz3&$9LDxI;He(6aX*QqVJlHwHZ4h}Pa1 z0}Y!wQTuIV-Xw4otL7rPZZDw>6%Qy_(%0C_mL?f|1F0+qWHNmUAk9>o+dP>p4qc=% z7SUB2?PeTZXIjGwNs;D{f0d~;vF#T(o3RUtIVw)Cju+wmgv3Lt(HOg8WU%EIEQ$6F znLD~<|13~ofZ3;c{SAe+T!Efi!=KI3SP0W7z&=2F^i9jFwZ>hBc4~~xP^kJGPpqy_ zFxHqGL6$sdBZaO@0NSG$wKJvojUH_N`!w9Dg6OYC1n$*yTL`(Y(-O+@outZgVadpf zV$MDvf%?$s&6%=YqN0MI!DJniL2;m9LDQ0hoC-f4SqVrJM?p5rooPCPp$W)-hiu_e zXF(b$zeI6^`P*r(+11<>xiBt%4f04M6R28A6I7$pCLM#pErpqd4u|OYgFtW#R1{8u zzFCfYWv+VXVmnd!EH4vvEsq?JIY*+DFsX&(Oq2R@Y$b%53IBqmDlLyON@XKQDgAY^ zy~GRfR?(J-2CEeZeLjaeBjV6Kf=+J)Li6qg0?yzHk>wDLALoQ0kD>ZFR*x(Ka>_e# zXJAUfOIx7sE;0n+DzP3dtHI{w$uR(H&3+1kchE|HYKkq)32|q%F4Sg2@S*t2@9S@B z9e7vUqfbFlBeeDJ%hPC4t0tc-dJo;*+%I_m|P*_Pn7tPz?N#AW0g70hb5dad;2?G(lAIy9}Fko+a$@*_bnc* zqjW2ZUqjD>eMaZvc$#;fv)h;KF>Y!FzG9%SzKmp>NQx)mobp;-+gn>} zA}z4{k(L!tQDhI`?LbY27+=&fo$9!y^3omcdISr=No-e#P>L~=26)cy1MWZYyOy=Sg|g_&@SxKM-?XsxbCjfI@L^!hAFcXb$oA1vJuJ%hP{8FE1vD z*P3CjlE`-R*GQ<}8d_BDtD;^9c~GG)q#U6y{5t_(atw#)rU!8+Lam(W$4pLl$NT#w zTU$`8SkqLw7Da*c!9?8LIt&x+m;8jc?iuzkFh{jw?4BuNT_G)l#9BzWvl|ZR-w3$- zJNx0QWYz6%S;e&XY)tUx$Qo)Q*ZkU%fkBP z7XmujPO1u7kM3N@-dCif6caFULpE*S(EeXizBWMLApcXV|9Ahd={tKxMgssaV*&tR z|F6%s|Bd_qe>~a#Bl(Aag#R$44&kb}lEfpL{6O@o7s>Cd2IBX}5~ANY6dz`g&$jk= zAI%^>1o+vSN-Qzqm}QaGJYR#Oct)dHULsulqPnK3zn@&L*>bU22Gd!58j00{Ge=hQ zf|n%fG4C@sb+gfd%*p%k&dKxNj^|B>nQpDFhnSLSggGqlZE2jhh!BZWZ1m5ifRP=p z2bZ^y5RrMeNqS?hNrrkeEh1d!C~TbhGwi4=obcLXJ=Bh)y<1!Q3k=u+YZ~(7JuM0V z!ovnB9#NEgvZrx_#>uET*UAu*S|R78Ch_SED%c*b;!y(%=NsX> z)Z_g#Ag4OdNQYZ!x0DXo;!a8}t+RdKh=4ohiJ=CN2ZTKR=!g@@VmF#>+G`M+YWrIO zR9gGnBAV*t-x1oKLg4LEILtKNS^z2Los&bVt*t72$rA=al{H9}s^$;afEvUx98ooQ zvl=?o6OVVMu_69C)pi9DE3T&8HA&YM+MP0gGPE`?_grq@^tXFgT3dx{btsi=9B-X~ z?7D_oL-|^g?!QFq9gtRLk_M}Tt+QV+P| z%czVB7v@|w&D-K2Nei;hgyPMFKBMxk^499)e!8PtQ6)-H8{4xAZ|vtes?Ptx*mCg_ zcevlj0ASBID2-pfpHOv7a`Lp zGO77ZtSEvlM_!n%T4Ld~G%f$sNEm(>;QQlUS z5nd2HW;klNI+|Lfp1qMcIIaFohz&^-S3=}yBfYU?qu`Ij8y@hAv(R$coc^2;Emj8y zqbo(QKVAWgF7NmhGX74osgZ_~Zxg

s0*ldFPZx^QLLwLWBh<$88S&2919R)`ZCu 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

w_SMM=fE zE6SJyApBB}I}Is!?8YaB^FI4COGG7@@utw^>pH$F_AZH=AJN zj&MNVa9O)bU>MGtG`Em2iPS2i{%zbKkHOaXUZZ*mjT;plS3Hb7BPxkj<3TI5`)Fzk z92rmTuVQV6gDnmcTxsUS4hGXBtPZ?qPi!CD)YJ~ipzCh)koim7way=wMl#Ldy0Xvn zspDF)A+XF6*$M>&8KjWET^B5%kZvX7R0c7<{|ln!t5o1$S@UQwzMn#)LBrhKh1~(L$_^J%P%W@#980*cPQv+( zu%Y-hnRp#0>hoSYdTBZy=I=zA

ALhgSyAc!CeULPF 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%0D6HnC-5XQ!6W{*duzg2#eoMO-DKY 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 (wY?=A0Ox< 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�VlvMZ$r-+QLpM^Kt*}m_*7D&M#ZPgMxwp$5!^`>7Mjpg|bBK@%G zB$oD`khAsnHIsEP{zU%t_5zXKr~+5OG?Bow?4(_7W~U*dy~K#09vgNVjy)5XwPnth z=o&kEB?BnXO1d(wNT9QhF(GaLSvE&0)!(2V#q6+h55d5NsC>vYrvV>?>xCvJgy-(m@0e_B1->+|(Ec;c(BGO&?$8&=(@Bj9f7aL)s|BT!g@?dFLGUKJu#$ zykc3@diWQDNc+U1kF39tcJky~Bw9(O)RI1KY_U3dlE>w+*PMnNG>-hL;DSHr%#e>{ z%B`~)fy&Y7Y~Ib6sVtDs^YUfy@6UH+2g3V|#$vbmi>@(3NS4vl3{|N#$A3^#cJo+~ zRMdALYjmb}4@2@V4D&=}93t@!p|eS=1zb_T>=exKyk_uwT!~x~@eFCTQf_nY4))os zx+M15hzmx;Q^YvxyiZB9P7ft-otnvg4;#jUA);$DZYK4%4SlD9ydiF{Qu zx=_!oyp%s`3ioHiG^N*a{%JZEI%kjrF=z^nIw4jkOdrPmhSH{+1Me}$lBY&LKPNCB zD2Vy4&^E`BCnch-SYF9iL{{%x9M%*Sa%WM;3?0~p(48QUP7zxE&7O9?`%B4>$J$_O zhrtT>358<_Stkz<4%vW|%lGa=GuAMUnF{%mcfTusyF%VUx%etoZwv`Q{P#yDbwkWp zFRt>DGx1+EM$MWK6f^L{Bwxw|3uF-LNO1MR;0BnSZHJ>fLCb3-p5c1=X{;Fwt3I`t}-uTdvbhwc#C#roPpM#KhIHTrNW zXA;k-`W_c3Hl!w8R5Gxwm@WDEgk&5*m?CM=s(K{Fzu^dpswsFQh~^;10r)JeqrRgJ z>X8byt7>hGKT`qi)%OUH_0A_&o0f2QOWKmD7kP2I2omEihGo1M;^Pm7S-b=#<8X@9 z48L8DLLEc9Fzw^h`tSB57BO$yO4WQH1df8DwOzUe|l)vXBbtk91_sa zt5-W#Z}6*T29Lp%^xI=B7vKI4wr=~mQjv0x<2)%Gn?bLTTJDU;HjCg0@j&UNNrZeV zFbeDnnU=Qxs9X zp+Z~+O=R*9<~s5-x?RfR&hSmvEM7r6n3O2$YM{o>4~a<}Bhq||+#QR_O~d*wJoO1V z$Am3e^!04V?5=3qhEAZq7ec#$&Yo2}nts}gHF0_#f@}}k@k^^N@$JAQHV`B>OlV_2 zu?}-a-OZFpY7L4-jnBm&6WGB^q-z=Say+NRjY&k&=SCE!)M7ByzQXVDeDr&M1u91} zuAFV!nvaBKzqM&1#kX2H*v;JVMmIwMc2ZVq9q3I`e%BE)wSzCmQEQ|Dn8XWd>p~ITQC_?^`x z4JsRtFev;6rLgJaI5qFt;#-_Yx?UlsrodDXY4xw zw?QT%F15VOcL zDA#Z{%IScFeS$9s}Wm|`twN-2z zy-RW#TJM+G^R-gX`iJWPPjn_b3WmuKpL-B-FD*ljf>NbsZCVH`LOq*p_ z*@n1ns)*BGwg@DpKh1htQGTg}%!|8nLB1sAnNgoU&s2Zn*eTvW2)R1fS+4l5ES6Nh z#O~2|Ps&Z8xs_-T|0`P4cS6e1L)v&W>)7y#U6M4fNc$H=?a{C0lSh~Kuh7PMu4C&b zdQS0){u_g*!8cA%!fyZW;md9CCxiD9Kj3`Zo8S)vEu^o}!*FQ=mFq^cHoT)Y4w2d& zj`?}pk8UfL(Lo1@G4dAQGdLiN9p+m^Cd|`9jzSW2c*%2Tsf;qvz`D^pQW+vq_P{LJ z6BFE_+{u?7Y-E6nTRk3Xcy1JNNd#FJ76(phfePt)fK(*mS{7y!E!zS!zD&xFM^_+Uz;_&N0nHOpAl$V*>)^pq6Al+xEBN-m$LI3O zCOEZdZk2o&c~|oRAsEb~w1}L@3XWvb$WV4hva^wv&q_)ed}zJXc5Je8&!AZd0_)c; z{T%3ft#Yrcms{jpFPfUWH<5~IB&d>5DB6%zA-ZISRf&v3RGgs;zmh2?+OzP{VHQP@ zNYm{}Pob0@#+=#2>5DKUjX^PuE>BTOB9$?DP})T%6AHKyQINa33m0%BuPzJh3=+LR zIDAh8!yWMX`o2{6?ESglsI`Sz4iMMw zJ3xQpX^}p&C;5X>l}m%x%jUIL(fz z2eiGYJ2*v|;@cHDMe#FFn?j}>2e&;uiO03#2?=Kw?t^4O;#?93CUS_x!?HsNPHMV0 z`?|{_Rgzk)T*62biW0IoTXu4WE>^6?#4FM6cBXPH4<`YCo|^S^><9<8lJ&dkktsot zUNTmkMk&pI61}jo{YlkC{};Q;Pha9?N_YA4hi14<_x)1RaytQNMdU+La{=ogwRQhAhAtMc~6{`7IZk48)VaN}LM-(E)`51rAu1uLE z0@cj2?6ZVmJ5Ym1kSl<}6jE*XM*IR@KR$pAq~8C&>osmC%c`G)5TGm_ISLMJEk<60xYe9&stXZa?_y$#0FmyS!oAvoOZ;JV=>cg#b_HR^QNx9F-dk9Ns+bty8xoA@%4* zQ|MH0nvuGK-78`&*>9SY;~0^~gFlyJ9ckG*-~qrG|7H2rC8w?I4${LYxlvMb~!^=ZT+M4m=#;i$ByCG$3Q*vV2`??QdCV^7*qq7dMV*aUT!tSKF(rQm_F+Vp$2*i*Zw-yFy z%9aM!&#PG!MOYS$YMTXA>=Y zs~x&#n%;*tL@EM$9QIT4|1i%|fW^3~b$Np$Y*zP)@cY9`F+-fQVBHH6 zzx$LQL4@ZL^DA8`(S${I4Q=M$O<%&2g_b-VhG4m#QN=}>A~aHP1^Z%P$T`19=L|oi z)i|2af&^M1C82wM_ar2J6bfqLxCK{D-7i<4yQ}tuzk97f(i2@g$#69OQE`&H# zAh(8#vM%vP$UxYG6S}9<1yf&(kzF(y%y>9TA061~DFBD4)*n?S@*#W5ZDP&Xv})kc z71&{w8D-dR!*rGUiz#i!sJ7b*T(@#R^r{}FIc)26=Sy^=)yw)J{b?UO5R)Zy~1Np7#U{x*( zWLuShPH`|O-;{iy`MbiE%%eC0%QQD2wZj)%NY~E!S>cTh&EpC2SDLtu*kecwCDKve zFtrQ`>#^O+tTGF_FfPx6#xpgY{kchl5K>0=q$B>gKH%rN&LFd(x!eSa%MhoP^uP1Z zi9ue68O8NLO3Nk-e&k~02dp&no>TY`j%M5zbDQ;>tSb977oD!L0!?_>C; z({(}0am&x11;t4k^bvwNqHHL;+G6dNPDm;t-V{VFDaUOH`{qohZQ5Z@<4Cu4+3~9$ zX-;^9H9RY*A*FAF*rp-dknIGCUjHuUmkED4z&TPQ;CQ*KoEWP0A6pd_=Y(h#VsiuWQcoZU;L}xLnIzRZC)4 zN801qY=Jow5pOi~2!Pdi$$_K2k#oFlJzFe;Ct3(HJv7&XXmz}CTg#T5l?m;{{01Df z)r@6(I+3)@`{Z%e^PE5^Y3Q5xl%Ze+3{ObLSdLH9`HYCTHXIrcL8!%>HA>8RFnD(O zfE9+8bE8cRf&b_GMIbk=aM$&^0y`#vH6`y0qUY>AHy=! zj>En?7cD?wN4<=M9iM-iqF2H==z9Ypo0SEgOy z$V9=L&6Q!HSn79aiynlvPftyjF97QfI87Q;G?Tlo%0#P6`-9t((&V>1&*?T*Q&;=5Q$dv}G!RpYs)SOL2+Yyy`nxmI^Fl`Bi!f$J*tUcNy;hqQ=KjM+Xd z$Eaj6qF!n?nc?r7rh&<6DC-+qcS2Mj#vK_3O{?WO=vrbosu7J2?ineA>!=O>r6 zj&Kx~r*PbL%dJIQTWHU5tHlxEid@LB#DMxH;68ydRU%;u`~V^PznVmP*_&88JJ?%!o0?Dv zWDgD1H|}wMfB+8G>}fgVZAl8r&=D_J-1l47Gp?gIN%gYntrnZ)>c`t(07VHuyoS>9 zZZbV~yI-navi@d$cz#`B%z~B`po4RTsMU)GXzW`S@8GdO&~`U4AjgfkE>>(&K?3_d zJ#zm<;JlnFfy)m}XnkBlw+X^7myr+0JJ8uMkkklvJFSC+Q?NGHy6pTxgg*r0ek0#Yi{RD2P!lU=1$7g$HnbHa8u-XrRY;}Da+5YAsE0f+*uiQZzV z+oh$jl59);p}sP9ijJx_o;T4n0zTUljCy8AA!^=z+N;Eoy2V};Zo=`6(3ks_j%6N< zac^wOh{1mltEh$)yF8dMXh$ZmPaA2l{ry3FC^w1BjcA`GBeGI$;61l<(P99F(}3#t z=fh?QI4c<1A1Gzoc9qc(5kGmd@pVH5wAXUT###;c`m4#k^a0OB7@e zuIHj!*Tk{_Ze_3#Q63Srtf&H74eb=+9s(wFJXF?>-hCRHpBGn0m+ zWm9WkY%GN);g}5C+Fsn;_-!cC#wNSwyu6TzCi83~FlyoMk2W(F;mKeuS%%q{oh85r z!rHcEcRI!#NIGG99EX9f41-x$Q40u;GAYpJIY{u|4)1h|3+f*iCmcT3m?)SP@@2R- z0X*@jBw*T9CA)@j3xg1oc;-gE9QcnQ$KK+3>spL>H^sK&(vPDj4pg80PT%!MA|X(` z`^~w>`{BrQvBCWkdhrrf45`LTnhH~rhOLuvuI>J@W~0OV3T0$rlZzieil}J>4oicm zFf>UA{rEFBP_Ti)47|h4AEM(?aAKh_P?VRDJ6X^>6D|lwe(E&$a-USYGA^>^7->e; z{ZHA1*K0_W!oJG>CyIGM$gI7{_)+_&lUH%4a9A|<8x~sb@JXAfSi!vaqO4=ErZ0F{ z@dw{42rvu_T>_<}jtgr}%=cGs7V`Obs^0({oG=gyU+s>JcZ9#iJo|R^#Al%Q?swg7 zTNK4DDT%Qw_rzd>_)2t1DE3fEZJDRE?fo-F0ff(B6Dsd?UwkoV0!lNJeGb{nduRJg z6D@SMh-SgwpDHDfjHTe(M(0*24}sEsuPk$q7m3(&xI5Fr{-Oj-p%a!jI4?(SSRN-R zhBD4zq_F9-`P$J?|Ex!w#?W%BN=)ieD4a%;&g^Ko1`YIT3H8&TWX!XEsgapUJ@2E+cocqt9BCMW&4G%B@u7GvV_QZ z=j$t7dmZ~Hsr@l}DQZZjWSdCV55AJGnF$Th1!~J*(R-#XsB3s2HoX)&`X^iLCU46l z5_UE2AYVo7X=2*?!dySBX0#k?o5!ZKN{5FVvw!uLBaluN4H3Yj?Ni0I>9V`%A zimKkF@8Co_<;TKBS=(t?Rt^LkFf#TInybe;xJmg%Nti%-0-h(4Knt zjPmKrJid0=S z`*C?PgT=7CmwC|m>{_L2(E>Qdy8<5}A^? ztpd}n64y3yvW`fE`6h|EplK>9v!spfrbbe3fT&@0-ll2=x&bnp%8fKu0pl@j6_S9O zE;$5p0sob8tsAtn@LN}rQ#s1)I0E_-N;W)tS;3*YeYDEsMd$?Oc#{|6m?&E^{4kV96Q6b=_t;1n!c{b z^Tv1Ce{$(PUln}4pYJy9K2iU|M1K~J`ThJA6?Nn?ZzWZAR~whxhfcmRAxpR`>FX`u zSOz9VUZZBx=9Do-N5LV3{I7Cb+$Mz#so9I$rE{%E{^ygkTF>N-GS#3jDo@3w2S&~% z)_9qbI!8DMbLSm-B{%4y3D=l3FH8garK1ykg0Hv3uoHm^3 z5uvs-g3;%#?!~hjnY{*pDBm^Lan}}LsyM+TmEiF-h{a_y#Q0d6^mTt28`n*}wME%n z<~1wKvjxuMa-F!{3M80v!W1iKnhnn+wbfUh4$io|T4tJnc-dvxz#@c?-rXtr zX5=tl7H6IeUn<$vpIDKf%V6oJ9Bf0@nkB^zN(nH+dGBc0rmBBPe>?(p~%}Hs{KZfhrZ^}bN zttq005Kt2=$dPH^`-{0KxwUX^+&+EWA)+QAf78KF*FCUaKlFd2EL($o;qqM(gRd<1 z72hD+o}fyf5ij4U5dN_wTV{C0Vi5^poZB&AYKFhE}+7AVO3weXR z%%wRo@CAQZV&0T$-2TM+RLBz?+BLm>pv3#+MJCE6k4 zfZ54=tnj^1Lj=8hbqJK9ME@JjF)9z9x;6RGM{K_9gJcsSMyVAw);^T_R?~x~IlQGl zAb`OkQ>B%*_U*BjO7i$cmP-Y^F(0fv`0*De`QIF13<28LBIkGUCG7VgR<(OnDUJ3O zwL8BiA||anpQmrO4{|Uch!X2hk|fN_KSPEFUh@G??m6-%Q{E%swW7xQuMYK!^p4{c z4f_Fy*MBjR*oA$-g(1IU*0R!JmxR<*3{c9h`GQ-A41>z1nZ#oaYf^Q{QRp>l0P#Ap zl2}B!d=q&2Akz$jc|ncJc%{NWO-^RtgTb}?gRI}6P{+vDPtnas2^6#@Gfed@}SwlWfFgJr3fA*FB*&y%Fo4mr{pNM(~U5qBR{Vu)b4&!|5 znK*ld^$)7OOL@BRrSMI~^^D!}%t7B{1!t6{xdW;0hpHaMv>WDRdw6iqDjwvNfc8zg z9+q(x&`)(_iXujmRB?3jg`tmCSdqqGZ*GW(u*AC&i`Us2ijNl zs9E47lc${}=@%)B7A6!Uwe&NTWfMv&Ef|z6@)W7z?+o}qnWm=9C>G?j`}!Q(&CB)> zmCeo4FQo|~l-6hD)y41Y9 zjfd1fjX21WBFljx=UWb?qll#IZLaLuTv=M4TiWfa-bkb$bh6gbD9-0Xh0=U_7r^vi zBe+R`M1H5oI+H^Jt6WqX*fKV@v0yKrA)Udv zy^NA#L|=da>w0??;+n6oNY0IQKnF&sC^C7pvbLU#U1W~MHzM+f0p2(8eCoXvs0u?m zkDdXXfrdIl2gLb9)L=43^X6d1^w>*kW5Q$jn-lMXUEwW-K`2Bv`>D3^B8%>qa;NNL zB6TA^1@$3t$H>EqAutbR9JohL;Hu}B&_lL$h(g;)fUqaQAqf1C7{jIjiFBweDX@-# zdBK67(Lh|Z8F_ljx3b7#5T65V+Cbq9l!y;Y8Yl}4dzl26hgg}X8BsN*C~{BD6wqVA zdI&N_X%&rhA9sur*vjazLDm#71GT30pGS^0FlbQiDgZ+A)B)xok$@r&Y*@EYkRkp^ zsD2gBpG0CP=k9`>3ZOKmj2Xg6-Q~GY3lpe_Sv{5(gk4;SNvLLpptO!eF8tAlX{XS` zNHBh9`PqG`My^Dn5)@1e)FXX8T!`1J2WmZ*RX)i(#r>k-Rtj-qAV%1`n;69BXn~%@ zX8OyblL@AH=C7ZlH}OU0nUdk(TWKO)6N-QV1MF z5@7$S4i3C)>oDkcQSh#^V%Z{C3a_TuaLnIt^oOohA4IzXhJhp~IU>7om!n-lGN@`+4(L=X0BXYNzgX2R*dH;}1 zH37+pK!((XF+y`kPAnbDOIFR2T)koX1uL=O%^*7V@)YAj0SH`^e;0zvLQc`yHM%HG zXCK$I5dQUO<%p$-*y2HckQbxe^cU<>IbQ&)u!vO7%(4#WSQrA?{URd6qvL)s>+VQ@!@{TT0 zc*+g8gRqJc%*2O?TPhrKK7dv3<80g54=~m0w^U)BM_*k%gLY1ELSLK4-hyI6pM_+7 zC5)D5DXc>6#j_7ZD0kc}uZz#1t%5rP8p>Ie;#1K2V%k$EXKJ6XuC%&V*_FLi3sJsI zhlr!qej&l}Pb4$L3e^h=)bvwm=KUH0v&Js0mzPkHGwI%i041G>H(E-xR>{*y)9H~3 z{<*_Eu#LS1np@zTuM>Al+N-ogyv0tXUm_l9^+Dd}e1WRC!ObG&XzCi%E*lcMm2`mK4n63RBQ6<&L66M@hUYf3Q=M`iI@e%o~-gbg^HAnPzwb-crQbkwP^<|UA``K zs)lKt@X!Nr?mp1gb!UZCJZRq2ZRSG(

    L&$lxv1co>2V^)DfGUoySFP?-l}m*C(uamc%7NTh~1dNw}3(S3pVP-4HqyKRxvKU zX&MHdU3pBN{=K^O)X0LpcuR-a4ZDfo5q6^5Jl6Cp>cudcZz`bLunxW3ykfQqe^GMBWcyJK(_jO7|HXa%b-0_c>{PJ<-L?6_554a|CiAdkJU|v5S=NGCSZQA_Lf6g zgM;A41*TMTO!bvVSStg#zB|!o%G8tJpXnIH8$e+eS^hS$xY$`kRZH7qFUKLkh*_4A zFCvxXUC6q^#>!~eR~kk1-2y>D75ak?)hG}v81Y%Icb4^~kt8PqJW*6dgMYbPNx3y& zuq=OTXps-AD^yHh0Wj*wi`)!WCpdtTKQ)8`Ki6fe2Gp=? zMy&O93XHl)2$ntB>5cZ?uxpIO)rjreF4%P|f!ySTn-O7Aa83K7*v()0j*4;XjwDuX zbAcE22{-n+K;_1;%y=#M$0sGq!gMAzXV&s@QYrdL1y&8_Vs^lNu{ByNA*})eDFjun zszLh8dQHDQ|5CP!=fviNQ$hc9Tef@94H+V;eWi`1WxN!*yX7lCtRiak1vCr7TyV1~ z1Oatcd35^vt*f7?a~B+slotWL7b6tL22;e_XL{{^u~l?WN@5av zw@lnwg8X(M5o{wa6+$a|1L7Zj)j|HQ7*d(HT>On;4!yISmw$KKaD?2mAG_}K5Hj}j z0X;GL>U!6@`fv+3+6$p-i9};6^U~T5(**n$AdO}51JQdy%?8GVC70;Pne4dI6V2=T zkNin_QGpH8jLahUnpDZ@DK;!iOYQ0{L|4K+I8s!_Eqvrz`1hU%xYwm$_f;QI0=38yT2 zfXU`a{SX( z+1u+X*#2p|mRiX3{Aj)5irM(}+*%2y8^rmdFls#ffLY5|KVNjBP8VCv`-AX@#Wkz# zAuH3w(OXE`suLu7SqaS~DM#B6q;Jh(3`!|>zF45L?>jwT)qjizAs-c;>e@gDU*Dur zNre{`xPUNIxAn-fvmxxGQK&5bLkxMg%Cdg>%fG^dX-9twS8?S>-f2S6&Y*plsz%f?#HuQH!>GS?o=pvv`@-BQ(0fp zydOi$Md${r|Dh5>yben)ydUMU>)FL;Og&gzTv*P;o!#bnaP>>udonXffvCk=~BOhmeCtVS5VBuvlz_T>GBAZ!4T z=yb6KX`ddf-=6H`>7uFR4d4MYDW{QQ9uHhPH!STHvT5g{lRV_ktO+#tr?g{f6`3Ga zeIdREoFo~AC}h*^8IF@Y0K9zBEs)h8x8(QjHi6{m&KmlTQ)eHeHJY9g5-9iLLp>ze zTbZ`QZ(GfpC>AanGezt7$j9lL1(Cw|dH1^3Dq>8+VjZJ)EG^9W%5uq(&i4*?rZkbJ zS{=k#WWzhcS(TB+##jTyB%OBoBs=udDH#O`CEt#mXb%{@IPI^ftredshQb}EUFEd} zM|`zi9tpM1REby~I;34#+D7+gxn1>6@-0%tc3YEo*k5{j`FvZ#@V0Te4LVwRjSjiF z1W&H7H-)`$tRc)8>nZDKQNt)Bo!Arl@;AuMQN3EG+#$&`- zlVQ~6o(k_wj$23Yax;gkc*(TbyHlo*891((;1AnYt80PoE%Qw7(it>7HlR*#HQhu# zROsh$WWt@6wl$a1R?H53+2);2^o%&6@}22udlPFHfU5b`Px8?sw1LVbhGX`Gkc;){ z(YHqJ44X1H*S)N@*QJzZcWo|*l;r3;`~j@(;!$H%b>-=kk-r2OS5OH7H;Jyv$Ty3k zzZvElsmShBTJOfeZKh&dBjn}4-g*Rq4h2#%Uw#l#xZ*-PfT)}%1QK2fHXDrXedV6Y zVwat)q1T?rX1+kmO;Or9pP25`sl{z4NZ#;>h)K#cG+T9XdKv|xpxv(`t0v_-l(Law z`jU>!A?ff3xJz5RP7tQW1Z`vAD7jUd7=eU}{ir4fq>zDKvsSRnMtKjs%R0%Y;_? z`)Cj}+^Mx?IHx+odJJ4IrwuCgq8P(EnpKTvrgWKXl7TOL95=K)z5k)z5FgBIVfRru{-zBX(^f|(%|;mb%el! zr2X;85hvhNnjy{hvxOG25azc(%UfCw`d$HL(PL+ZKaCj!+XKe)@dR3*L*>t^;c#G3{TWt+Q*c%R7U&+|UP@A>Avl1Uy(KYn z&%lbMvCO~A7EzsRHKuPP(dZU06unlN9k!ZmraHLJ50jg^T6Ni_n#_y@@!q_RB{uLr zUdIb;OadUdRhi290zY^JNeJ3aJ&PMs83x=ajKAHG&f*xO&)jr}HNPv$M1*&C!+h4* zaJd3CBnZ)g7ak$p0=i)~3YgE#&^ql{&CIY`5HOls+}l>Czj4FZnO(=|PFGXgk23lu z7UxU;4`tsFU1=9ColbI+bgUEGw%M_5=ft+zvF(m++g8VRI<~D&|M}KGx_5SKb|y7> z*E+TLv+Jp{^e8U#DH@t4R_;)Evv_l)L{b%VwCql&uecUr{qvEO}JzS4KX` zb6gifl8zu$*x1%xKA^T@NSMNp9@q#p#UBdqIDFr5mMa|2b?V}C#Bouu0znWGtD@1X z5t2h|$}Hev(317jsVE*@5%IIyM_nps1%=AY6@?yD*rg`ILrL+c(?r>LhPKGi<0OnYHb=)mz zLn%dc$C}J9xwuwE3OPh(2e*g5ZU30HYZieN;*lp#qldg5%YIRGC>Qbi|25{whEr=GR(lQMA8UCG!end~hxw zSgi7~%HYkzSJ}MpF_JVL>CGU>qy7WViMPlnz7u4x`orJgfTQ&hE7n8~7Gr4LVs6|CRp|+_$ zZ+gn~ajoRBRUO+WI2OMp`dUp7-S3HfbYKQQE1(?Q zh^rXzC!v6l@@%H?s}tR9-V|Ar491Db*-dHsdwS(SrTMB^?>F_hF)~2!cgn=bQF!&P zWufXQ80;0yxV*C|DuR(o>7|gyFy;wsXHe|QRg3f5t~w$}-<0CtWaXk0tNqyB#nh5r z+f$%cP+OkUbl|r!m)(r*svrlIand#{O9{_*8c%sljD+g;y5M&=4ER38Ge!{)$TSkX zVQKpoUT-W$KC{@##O6ZHN0=JX8=kFcP!%@QFYEC*MC0xiPso+lPKQCzgQI&AoX!b% zbafY`V|RaMv8vf|1+?KS%I4;D;TATj2XovEi}-ww6RR`(1ZZ=_x-A8zEBNRAV8p&& zoAIyj5=^UpSe;!At+brZFrB9oxB~>O6DMw+v4&;YrT8P+B3O={h;xG%PM~NDM9>G! zl^tbZ%_eu4<29D;QPUCFBC~`pfsVjvc9O3C^dxrnxU8;_;Ly;L6i-pc4;&wT<2%nS zQGsm1^i(++)0TV%`)Q$%Y+iHK>Za6uX8Ri66|9 zh0>?~>b|FQ`p2t^Q%CaJV?iVC^T+L!0#v6D&-x(@6MBDl=N(StgQ?{!nw7gujChw# z`4X*h#7(qpdP2lY+I9Eo8QOIBt$GFMjC_hkeLXYq4g8vOeCz8EQxf&GU9nb^?4cD;U`GaK1j>KE2g1l~uA$eAdD>5@MXeUuF zww@wY1U4C#!onT(`shF(_1ftb$^D;GDYlh+*CpDR!hd*GkTF_NjRERq$3>&Y~4fUBBA>v&L;@AagR;B zD1>rHM2wJikIgq_)>%FtE1k$*@RK~~9O|+T746}b_?)nFI*(6R@CS$(&1s(VS#c+Q zPUD~+-=G$Rr#j4`k`G^Hp(yQ6dop1c-;hVj|M)Hpb?AU&YR`?%yov72m)xDAqI#29 zYapkT9~*e<75S|?83uCv{hI8$7m1)m(t7B~_$P z3QJ(2CX~V8{Vr}BY>$-GM{6B0XNU-I@avt9G3#k@~pxc!FJk@!PbwSS@j;78puNGlv> z5GCLtcMqG1V>yt)5v^PR<;2eYUV{0$KU-S14 zf((6^r4}3|9l}j&F^atQIx@YElBTdl{e}3j6T3G33Mljt%0=_Zxa9ELBAp1=#2w#s zOIM&XT`ef}(A7m-zCb1;hFhB8h{oJFM;VHd7V~S*0?+{@oL13x?3s@M{Fc`((v2lJ z(5%U+{}Y1H0~Oj~v6QS->B zYgOHEx=i1;xgK?_^}PGKY+aw&2*D?>U6f9nnxy{<=ECozpEatKwLVSx7k14JJB6;H zT3NSm?OU@W#g9?JbG1F;uOn!f*%oORn|uhKb#B>!UNTx+HSaL&S#!`R4mxf5)Hj)` zYhdN9oR)XHYon$dIYQSmLV@<8B0CO;~X_S^Wz&*m%h`$X+%Ctbp<|p2OeCFzy zZ2`ca#7A_7yk)YGVc3f!xY-KH6G~udn7dN z!;Tk3RlbNvD9UsL3j0TB>VBYP7_|2=T#`rX!Z0Ne5MT^O-;R=Fz#Iz!J%sEJ~T#K-bs@k#CdJ1&Fqk`%IHx^DVDM?tUJMYKUF zW!fLOKu&%rr!ID<4}1R)n`USM56IcLZB}-YvLovZ-i7d7_TmbREBA21Sbe2+x)(pe zW)C^pnh$}%N<)mApLDw4+Yj6@cCFfwEAxM?a~M|h4yHCrbu!cj|+(?O&#*E(`O0Qt#27pGZ1<$-_j;>e({J zO`WuLq^U2l1{*#3Y5=%3q@gP^BYaQ@NzAyOt=S}W*v=99cT&O)tk6R`@wJh5iGO)Q zNBlmmCQJ^X(J@}aH4J3S$E3X`b=3Mwn*lDGD$+TM0&t!ZqD9?B2N9zza2R+PzWRxt zPbet%jP-OADu_{jJ@nM6*cu~Pt@kfq1M(nhE;uR)XDNkX; zDL&4LVp3`Wt4MG#ykZYJ@DtQ{7o40~UP|Mmu4dN6W#?+Q{YeK?34X8jgdDK~;Zu|4 zt6k*dM_;!0R;0nG!Ytot8tn1k*{Vw7Yh8y10~F&Q35q0;GH zOx5Se8P(2Rb(Wa-iY;^y12C5yzYCId@6+n}-?#ty(oAL!iE{pBl5YLKny=MdENv`Z zJVk6k&d&eqwfR4;|L`C0f2h`i%Thgb{YU6#c71UHNL>pr2qNFXWydq(uYh+@1 zcQAJw|FP%g{?x$B6gS1E&VeIRxLg$Dxk!OhB`pgl@S#@J2chhfk2>-4_=^y~CtGok-qAlSJ{SO6ffM3jd+aeKpT6!kWu zYKz0JSRBobVxvXQ9m@Gul#g>MrLI8>f}tPb_yUQmS};ZWxJs8V+iBVqGRFNa>|>DF z|9W}1fBVMJ-~Z1KvO3eYT0y3rILLReFo^4O*oVrTJfoEwhJI7$=SRo^(7)xMh5_0g zZmu2@O!LjQTzh};V5{8HHSuN4FP1(XOdg*+tW+=IVfoI-m1uG{epDdDh=6Nocr9}5 zlnWzRA<&^Tm9iSMf?r@yH4m$B^CmT*+Sa=`k;q?dpq@T#e~9XsSPfiBmo{+IrcC^5 zgD03*aiTVIrAR&dPF@H-0Z9v`vi30~%9GS6@lJ6OtuAS3Fqxx>&zQPT1EB$H^`x1k zt}`GV(;VWQ;bAp71glG5HeK8~QXMUrR9_<5n(wHg0fc;{*erY4(eCdU^Wf8&=~egL zW|s4nT`S4au8q_B4f{yy=DP{vwo5<}12umasqf%IS6J(QJqXW^&?Nn?qlha#S~V1( z5>e?0YH;da&cg&+usK4=vLx*f2c{~%dYqCGn`_0}Q4y$eSZ9Vz#HWmHtWD1wVyGLQm@p5|Axe_yEWzG(jbeaPDNw?67mk6-Ar01kallM1)KF3IoEf9{Btbr_u3 z4Xyk05Acg`zAY0kl^usY3yNL`7aCORqR@?A5a2rPHieZGz2Zv={ zl~}J-U4kgChTQsHnQ6=?ucYEe+(*j={Hbz=_JW8sfL(#+QhurJJqi47bfYJIDLTJ{;#eLq>>BZU zYlJb9D6WPDLibJPXdzLnNO}ob90{+?SuW1bPmw~iIQtFlnF@BC^{M$iemJ<7BUJe? zWFOcDZupKe;Lq*K?-oJy6lUSzP*+wb=?tDNUG zbC)Np(wv)=;^oXCFx@;@dOU?^b>Lx7kv)!xLeJiAFCNySHaktuR%41N4bND8fmbgh z(CHs^B)F8|ts2rVE)J9Bt7d8vnb*2!gHF0okig%s+{u@Ix^$dMJ_s7XCXiGt2PC`He8J8;<6} z;OGxT+zpQ~Pw8wI-)paeHUOP4_BZec9XVRh*AOmsp(WI7c{W(X^D(wHcTF5y*25}* z=KC~Wxu{iA-r8%xTqlPdyT-WK?M%HR@bODsLisKCl7H9H8e?a^UCazouG!SP>%5BE z#nN|0bCt^Z$aQO0V!7b2UswyO=qlH-EP2T@8ER)szPmL-b_TFFMhVKk2pe1J8KWpVa z5VlFCjf*p}wI`bX0qhp?Pp@S^_&);(5^!gjT&I$UeUO{3J0NrM>fAT5d4bO0+kzP{ z<{xnQ3fyXfQM75g`UIcH8~w;Ao0=TLum#x4#BJqWD$^p|MY-hPYw3_VLlUIvWi^<}Zr@ux zELh4(=A5S3Cg4rWFgA5d9$@=u_Rd!?fwgq17j#B;)SRO;?OKlZk}-MJx_amg6w<}Z z$rA@o;^#JwsZ4qrH6N@+RG-S?CvZy&yNRWfihQ^l?doSH8HpRCxQws1B0;8y(keBH zKp!kK<5Q0uDrF6G$p_6s!^)K1fA-A+av{&kIm1*dlSNFtrhRHPR_;?(hd;w#NwU8RaT)bvy&F$`DAcLOXtTcwxkZE;ag3!11Vb*>x7+6d z(6k;;ALZ4C(2aQp)!Lu4C{N1mk=juSjky>(SyHl$BayXAVXYZuOxo9yb&9gr(-(7b zAqAG#k89brOvY?WHfti`YkON;84KW4*|#izd$C{MBH7?ye18yMJb+T+s2D#ZqFv1s zMBl{5QoQ$5;W%HXTwFOsD$k%Vfn1bTODBUEzSogkD~YJ!vG-uYV+zL66VQo$E*Yf5 zeoRvEmuA`_HwW1+U$wopI1PU&)LAcj3e5oGS*|O6GYAcRAYN5tD}TFca!)7bOKT*b zH2z3KdU6RR^H{ESHE?{oKzga+460CNP^AckN3}iH3@VpegIIBJ2lV+*ER8xmrB*7e z|A^7hN;77!2p#u@<30<6JDWNComNk!?T8mOsI=m!OAy;(UCRY9coD0r>JH7utUtqg zrtfq8s9q`+kbBGRXKB%BNbJ_H4Roe=OkD-U&@92BhJp~zk z9MzB#Nn0PS(dVc3MBd=9BHR(*qd0A})InaD|uZU8V@wt0GAq?V#{!bKMSsRzuJf%F+G| zFASUY zSq#y(y<~?cc{5EiBXRX<_2BOT$$}VFhqT@FN(|L3d(+Tv#s9E$s zsj9tee#jG;Y`tUt#J{KA&=&0x|C_k2^hjZNg#x`KgY;DB)IMZ1bss?$L=_yKPABYGpr7wK<^9vHQSlMEc!YX+388HDFF2( zazbI(`ZDEVUShTb;auCMcNCL@uF>&#J1K8A7CZ_EFP%FT_K>sZM-!>r^ch~*N^AOK72=PXLYv@;8mGK3&7B0Mi!gg7wcO;bL z-)Ty3|4`o6%s6z@g{x;J0J8Mel$4n1Yi^{Nr^7kVSQlrDtlQhI9h(M@cjr-Ah+OBE zE!zX>#_v>|TpMS6wQIJRGvPxONB_($7(!!dAs-cW!l@094%8Zgl$m==V`1hdI~M#IoeTjaN^$L!UO9`itQocCNpUe4#V-)#+(-YG=yZhZ0*HA}zF4a5|4@ zqLP1Y82^6PD}zo8Mi)ADB!HZ!^|h&d)x13J?F?igq9LwS$n_>85y|xV2mL=U*CAj1 zN6k=RV0vE{Vb1@HjawaL^S|!Y|55yh|LFchwT6y6ni~2iq8v{W7XW@yn~@8>n7TOP zr>e~%>Is0XX;vnlBz57SD4QiCf;Gvgd*`oTua3{--O0dk1%uuMfU)C&@Z}^*;SE~% z%qe%A%~oZ0j0Neq!~EL*`fs+cyx+(9x&1erQ3+UeW*fH4fnZ+>>V^^}7cr+u9c~pa zySqHWF$Wc)aG_e%bNc7<-2~NGO#WS_#Xr`Xp{-&04BM$782mbCl1Ls=wqT{1Itp7& zqde7gd4O@)WPTc`*FtrjubJK&zXuilQi_p5G9(qm| zPr5lF|2?uPytMQcUg6i~FIfVn_H(y?NRGO(J+`v_wlcT8C^kbB0D5>%s3>R~T6@{l z-^9FhW_k#%`-q`S8LD1gjM-;|g!uB0&nz~2Khv7=g{Bf`)TvI@=cJ<_AeKYj06G}$ z7ykNUl|-^Sb3(!N*N+)KPK$?0$sK67rX>rXZFnjFz$~TO!uUt)D12jWMU@A$0|rH8 z@YL(Kp8F#97+h#p#~l`y?hAMAE{qhNLrEL9EfRwFzrr}_+1)HpM!HQv${z6NQXVMV zJ40;L#8;Q)8SlO(f##*5{8tfybzLxS#<`*BPbxn`PHXA2JVNzWyl4(HF6L&V1R~R_ zc%e9BB)%erFWIdwecMi8R#M*3@k}f#l-(0uv}m z_EQM~8;=s!!%fT8RUHDJ<&}~xTFPBDXX243_L9mY??|;2FKmWDdnkWTC{(%9uC2q= zyCbN=b+K>L6+22P{Q6HG5Krumv!A;Yq!M3aHR-xo$2NJA3+7bl}jf zb(f)=_pv6%2_D-ODkVGjT~l7IqGv;4S#lW`tYD07kcim9N;D7G6I)wC@)jIl@fS)+ z3%#5;It3j75Zb(SY!HM{K}rLJ`R8S**&3~I$V&K!Nw?i;Bk%WH?yY%h@%tHI%*6Zz2U;=lKZpDqE6!x3DU9sjzhFpg0Q|@5^0Xbp*nr3Je{fhmnJz(}4fyS{JeX*v=RN}t!23QN%kQs#@ z=?#RtckCs~tDiC5cX+It8^9hB7LzD7RX#nI&S8j! zW%hL#jV^y&gg(XAIvAT%wdC``aE4Bk&SMG0&4!H3;x#=n=8barhjuF>059%+aQCQE=u9+zTL_M+95i?8NJELU%1Q&O!^2uVstn%Q#UIiPvwK`+a4DmX_ zgmi-8`h1l>crVN?{x6KsKcNDtMk9gk*AAr@M~-F$NW*4Fw>QA5T%9I{{f3_Cd#OJ= z3r=b!#nTEC+?(Q;^3vjz#k+Q2MlkJJF@;9Ei~LbpSZ_!8cZXl%Vh`~?jQZk)0wtBt zXq#a(j#z?3F@((FxsrF7@VgrD`Qp-Y|wu18YK`yTN(B`El0$#}6 zxrm+-!7=qg1}%;cHU6T87)ednYBw3#w6ZeJ; zrVK4JGwM@_dL$jfYWt17Mlow^9iR#6+3|i@?%z!9%japE#I0a5T)~g{P1ffe=PT|% z_ig6Af3GU-!8W5T0qo%PCH&l0xe@2s3uB#LKDvz!C0A{?`ng#1lYuovWDYBQBQ=I{ z+Nqb8IUt>YpQLrnvvam5W>4t?B|zC3;E5!ouL{6h_y@wYx64eDv^xVS!HrT4GuH`^ z&a5n_rKvZ&d)LDB8Mt?gZ6R`M1yp6hz*Id@33`9h4| zM0gsripZtVAWN4Bc%}A6D5UUw8H_rpF!HfX!vPmq1GWT%Q&*1&E~tzmUL7b0zEK&# z9;iv=5e5sW1lj<@Ymp~meu3k=SCol}_Paqf^U#r6d>6e|u7|1!xr{bLw2US0mB}Qw-!$C5(xfo*3mMY{yn{d4M4H%0 z#LWQ1XHF^RTaq%>I1(QBLdC-Ar^x=9Z0DV|9eJ5LMZ97pOV=utlubr;_>r1h>i6$n zDlq!K_h&5hU5K=9{^Hq;gGRqFPfU5iiex6$aPT<|d!W`B4&owG6ik*ya?8Gwr}UOb zdZP61z{-c+U_A_kTO?E8CsGpJ<3;T!##3_8%xl*j>{8?o$^lhK?olP>Ef&erbDmgn zlW^)r=&qOg)~Xw+c?t8D4$Dpb9+rv8v!x0&K2iSx-AV_<1@fN&HIo*)(Hk`yS(++} zo2zAuIcSv$Pym9UUOFTjNXrLm4^6{`y*cGum{_<)^gEM%_9zd+ekpjW6HE((DpYA{ zT15g#Ru$$=c@<|ZaUD#y>Buf@tr&^5=s*h&T)Rfw43#N6;@nnzg_*lXE$eAXwa#LD zQW}E6eelX=o0bVj6Z7us$D`TO+oH$?k4U-XK3FzYu(z?3;GEm=owB~3Gii_^O)Vj5 zCI+OQkQ+nI+iTYqR#L~IQpHS52STI_*r@6O6GNSwuJbVorGrBIl7Onr%8DdDn`{{u zM3SqZrFjf<5DGFf^=U=%fH=RS`@>uy$n4w!qXv8cjownujHTneC#HK+0AOjR!UzTgRVuUo}xar`{;}q}juLXa_ zhwX3a9w$A3d~S_be6H488TP^(;XbJTwR_xrGd=9aLxEw=%Q-_xEfUK@aQdpZ(4K1h zlWMHj)~BKDlDp(U#(m&4L(Sx@?C^!M7I!gf<)F2PNdGzbc!j~ix(sMo( z(8=~tu4d_=o()I#l7e*9smxgEKSmmcU3#}R?AoM~3>PQ65bKqSz!ttNxP&&q)3idu zq0xGzyJ{D$@j6?kz%jqXc_XF=*4*z7`Gt8jSdqN(j&}FM!EcmD?NMLl)7}%x`eT)J z+D$c13?TF8^n?KL++=(WL;nHymkm<5k z_!DdQAHqk+56k{X!*|T^7XO&gT}B6Ql&^AVGEU6;5EHcVBa)T`8{+oD@N6<2sTR!o z^T^ufpnsVjoORH|pSpT+?{(k3>mlA9kisS*pWW|O5w1kCI*Gc&y4Vj=c%Gy)hb9(D z9?^Mgj11Tu@ddZpW2V1KkzrhA_w#Wj31LPDRvhy))vtr<${E;a{HUqe)hM${umvx2J-tWPUg7o zCAYlFyuN1u;vde8lBh?jfAyMwSsi(uHBTO_egpb;(5*b0{uB|^6J5Xr##v#`8V?cYViZ< z5>^>@{-2ocE*RQ?|Hq4ua^ynkOY}JotnTigC3JyOSHq6)Jq*=U1QCA;|EGfH@5?Se z;DUjLeXaL${a+MR!_vj#e+lS+9RJ}zzW*@A``u7=srh&_V>~m1FEQQ(90{BZhb(|D z4+{h?2@?Tt5+DmhVc|F?n;0-Io0S1p{&!FRe15qju)4V#r*aiM5m}UO8AIFJx_P-c zYF)c?b*e?ZQtb73lT!y{k8J%9(zv%f|MO;J?z>&i$4=IK+|=OOK+X?*GR#7Ap5@BI3&~|@M9 z7a>F>CPy)jF*?3s==?b}jTj3y>K971+PBtGSSUp`rXT=u_wxDk;`7ZA#fn)jG;t%x z?9m;2XP|zK1WwGZygf{Q-qYZBm4NuA-COU#n!2hL$UwR7El6YA-J7)p{zWu-;P``D zOS7kNzV-}9Tx~&fnOcBN@S-FkqiG0UdPN_4aC_;1GufKztRc=ok-P@gG-vQ@NVAUa zhOVhVT5n<1?_=1I5z+dxCD?W*l>ls*1$ln?5UqHL$&(vo`v$lu)Mbm+uHglY8pR#9 z;6{l4*wqL6D~F5~!Y9bT3{d6gS7>1pl4yDTN=(l|%3(na*~NC2A2P*!9*y>G3p zTQWN0KfB;ZuL*Y&jR8t(cLAIUa#%y9U3QVm3a zPMWS~=kCgcMI_WhK0l0&==B#LC^p5{rW(SMuF$ZDXhR8}Bi|W?95~!nrJjnfr^gRU zE!R$*ho#N>4hQ6d11*QatL@rQQHpkfFzCd|D5bjzjEpi!=k*g{qxx$4j8G2}x@lCI zUSs@bVwnoNR6|T17y^YqX4M?dn5qhYYk>l!%ajcP^|noZKy_jE!156#z0SmVT>NnG zW8!4W(M_BqVQ_b?Hhh|@PVDOs$3zQKoQ3 zS{RLjf43c`-B_sPcI(?bW>Q=L>RBPZ7|!hSspSR^vvos4tGE@0UL|=>ZumiroO%+ zDyB(=`8niuG62C$nM_(UT2Bbq8YU%jlMp)?8VBab(Ue-6o%;mS!USTV@DH1MkB*MP z?yBXc4`lXOO+c_MjZGN-;ugk3G;+?>z#JE=Qh*hH&*u#fuYC4r2eOt(K#rk~Xo0M4 zw*JUC*>i9_vkwPu5HUf@81S}&HY`Rjk<57CufhnsUtz8rS2)k1Y%K!8+U?bg@1So4 z!A~}A)Wp$?_oK!^Azr=L#*fX3)sd}YwsvhtTt6OW{6oXC}?)Ti;Qz_uD)`^iPckflN<)mm%U zZMC=$--Kk;r~tNeSN=}$fD!*warMyt{v=1B$7hp??2ZB0up>jW2{52ow>8%6fF=}+ zqo4g|ptM`*KWm zecOu3sp)G8*7Tvz=x0z!FTAZxd`yp+=L{SuY>Fn&A4CYke){q??U;tz$GgT}NpsX= zZ&n6=e?q~BjpE>`GD#&=-vxWP@5_WhIL^46I#OxRDrm* zNkaqatVs3l1Zv?@xUKHWb{7^aXjZ`?XvEk9QUB%)4|^re0Dj^F=?ALjXoWKYhm5K( z<&9kmhluc6JX<-hl*8!oZ7f`YOAeH$3f;EkE3A{f->W z8$$i4noPbITt~{jizgEnxc^jl zZ3WiqIySEmYVvZ`6?Y6^R6>Gq3jyNo{~7}!WWlLO7Tq|=-{?^ zfDa2{U1@K;lB`CN5V5DO-(~&r;AmGaA@`aD_qqa+PFvlc1no0x#Acg5K+K&Cn54k~ z7`-!+urd=&@y9(pPf`ZeTN^q`9n`oi6n%m?paNeJHY*EOz3XTglAvqV)~~AldD06} zx(xj&Ro!SeRF~RZ?m{HtHj|6OZZf^|BSo&0NN{{7Gwvr8{YXD95#~>>Y%ba=>q^QF zhleqVI8wTrGD_m44*sJT773Q%JG3;$D)&-x=_TF{Y9&_p;Uel{TH(rJG&8V)_VL4S zIrv*Sd94%sNNBU^B1JIrLeK+RXfW)^)}Q~rKl{@of5J$c1f}X?*jZy$tj9J$>eamd({3vB9&T4Q3V)!O`_;SICY@}Fh z@V^(7t^HsIuj6n3F${N$hHe(Z1Hmugj&Erk<2O>zR$dDzbvUTT(1iwc{gfG=S{2XG z%VgYn=Hl;h)9b8#(WG0JkcNVhcqm()j)-SJ`Th)f*v@0TRbGJEioDU4KNcYXXtc${ zCZ5FM&9PUDFXQy@Ql6@OQ-e3;6t-hSjAG1u$ym&MkXq*&S2>2YdxS(|i%Ed3z!FYe zwoKkqz16@{s0&4UY=I8c$)wInpsL1|h-JM{b#;j+JKAsv3*11#i1u!X?DnxpK_f3* zIDb-YZB6Q}`tHSN_O2ktWGW@U1gZipyj0`q| ze+qe9mqmX&I<-bNUI$iRe%f^Z1%W1H&7(L{V|VF5in;&^O0OFxB&1L*u&{~QRG@mV zdF=SZ2N4-suI4@VR@r19(oK;qfV=8*rP2dJg`VB-3RC%}5vEuw5YFwPF0*wn=Eala zH>YDyZ@txHFnnTR*_!ZAtJk@{ldXz9TMyna;RM(49Js`7D-(Hu#Am1KX3PhW7_aQi z1wcx7M0!P|e@iMZTy1_Xm^UZxZ(d?$88nHBaPi#r48qW%rNj z2XB;OEN@O7H`=@q&RuHczvR=Mqo19e%QX1+y{bNGoedI`B}EC)A3DQmd_Q*E7sa1& z1PwP88dh9y!~*aFDv+~GS6}W_`waf<-;=+f5r9-fq>2;?P~o^Nqoci0uB3SCBJpZP z?FVH)9Eh}VF^#oCNG4%S_p^#&Xa_RJaY|o|L_P8=j8GL?Lkp&e5ld^#t<1`d8pev? z<)86m(9dn0Uk6Dg;~YLm6S8BSVwbDJZGsb3@DX_Vckc@%ZfLzSyNMYycq_+Hxyg8p zU{Opr%MBU>2p@**(`TC$mh^$2j?GlMjDv9M& zk^Ec0xcKd7~C4cb>fz`2so6)J9v0#O1xtW17cUyFwd3 z(CK#DI)qL;jcnUxJs%7Fo|(O~@&hiwT0<=CgbZ9Y_u7Gjo3q+tO?5-DwE!eHuo4^x z<`+fN!t&C@<+1KU>h4-TFr&Bp7Fr_b#i{ndR6H_~rm?W^FRc6<9cP$MoC*8(n4R>R zuN+aZox!q^pI9v3s0axS*Z}nw^KUVjFUm?SLY>X|K%AJ6>b2-Y-9%H1gL;6-1)ZxnN^VjK)%Y+e;_V3J|*UZj5*7bxLqv4~UFV^^a) ziRf9aw~1EW0>;~*FH1ZjnEpDB{Q=OV#R~Uq6=lQ*8J$2hn(=^@rj@QLQ`m>fxCa%h@2JVfbMi@HpK@f^E7zpOJ!@`vH88b@NvvC zl#H{Am|3oo&rX{kbM(t{iNql&Y}ul8Z3Cn{^1Y5a-dMw;9+HjmtbeEEb~4nu@sR%5<0&49RU+$~|`3se~{IJVeCU@8%irGvwY;KWqL zZzQYVWb)HApQNN7OnIP~3u;RQvQH{4gXJHVPzn@6@Y;gcqai`4KCqu*(rMyk2KH-G z^s?KQMDohc(j?d};B^CfP-$qJv_%+tzGWl6V}v};Hjruv*PoXGq=M3z6A+Apb0 z@Bg+DUIm~k5_=sdp zPJ}!B2(Fu5X0iiRUcrVm2zr@5D+oxB&Z3+J$cn?0}4R956C$XZjxxt zmf7=<1PZ(e@KI~cLJR&ZCEN485h3XcSZ)LQk$sI_=BI6#=d}IW!W<;?fg6TMDd^*= zeC>LnPi#U95|`02>r#d3YB*HaB2vL(*MmlY9x=g;(^DV0Cne=Zs!~5X(lyf+;5HjHdHMGBYxd$Efz(WHR1l*d@q(se7UlA2O%GZm8 zUZVKrWOxym_a=Lh`gGo1bnGZ38zYehdFeB*34;BtEg^3FFi7~JXORgEzGnfv&HGO5M6@;!}I`Z z(stsJ4YO5JyOtdhDM_%#H11Ht-9tM{?8zeI^1RI{IbAKs1XzygO!$Kpc94gBV97Pb z4EPOj?^$E~*eB*-mw?6D*F^W4(%>2FwFP<{?vgmhKb-9nmyFt53hOz6o+t_GZ_zyj z+Zj=e7bF2`?lUU&%8X>&HnEe*z&?FJAya3;c$c*s;Cpc+|*l;Y(oB3~T-rbu1z|9`tY*6%E6 z2FOTWD2)1@22CkOaqcMp0uf8=OFaesErV;_XL$iy%2B!vUYBbC1nv5r$GzkN@jXzu zm!zGl;SAww@|1ZlkLjuk=1m5AAT?0M7A%o0HDlO=U1hb%<#~;{>LaDwJP7(tO??q4 zvVU5_cDaB{ODUx7OR?CWDlJXLR5BpU(XzwV6s&yBuP>a$PYaUJbL8aRgoj?!DEWi@ zi&_Q00aX2vO0tT6zbr!>cv~nr2UV_ZQt2BF!_UWBO`+FwrY7zi4s<&vfw+HK|5kZb zGpJctuALq`Z!Xs`@S83gY^yQd{^mk3gz)5IDb8YJ21{Z)LTA%mwW&FY+Utm^X*&`P zUtxX9VJv7zLcT;7c_H+?= zVd0J8=Y%YH*kqn~r>z{jW4f4bls7Hn5khp@8{N#lux6A<<1Hts?~Y|}lb}vvo@fV7 zZvxKBg1C2lp{1Ql-%Qy1gRz;=etF(91^2sQY9pcj+`J6bO|0KXL2B&Z7t_~|Up`Nk zr}WS_{d6BArhi|EzS3j7Tc)~jkqAb@bP$btw=h^?Sx__Qp^+?9jO^$oCZxiP1ZUW# zuFBU{E%8bxII%}%wPs^TV{A%k7WI8&QwvS^`{XC+JKJ38SD;MkW1vrjTJ?lY#kVDv zN8PXpBj$IA1iWB+{~u*v6;@Xdv|HK&#ogW6xVt+WcXxNEIK|yJ?yzxpDDJRn}7f9Hw+1VYqf@qrGz%*>8^tUUq^lT?)Myw>!S__BWz_8$#V) z%6&{Lr5fy81uV;MEvsfMve~tJQe2z{+1P**yLlw((4q@T?Ptl#v=SZppM(}or?lds zQIaxXEW4wSU}YYLMqQ2xQIqWNBJxD29lv{wc9Ejln{T^W|Gq=z$W0q1M|aD69%40~ z)eR6f+FSM40Xlr+uA?@Tm*4sRbZ-n`KN8(0w)};2QkHm-zD5WnKY7Q=deZVjS(jjc zMRMD`;6Zo~YT9DVf&E8`@W`bD2}~OHMIpL$vJb^DXWbZ;+xpU#hCcCvCR>L1h?{lE zE8nlB(%&{4dr>3_9)L3$lr^O;je^c#O4~GVAY>2w(li7!iCv?<5z4hSNazBm_;F9X zx(m0h>8G-o;tcwDwVrpxUzl~Kd0t zn#D-yZTYc*)X&2@ztiI49t*T(aF-(?-yt9>*t#(K;Xlpi>Z=F@lDsvAQJI&~Jkkuo zgbi@#=rI7TTyj6>l=>L>3_7O5yENr&>e`S*ZMw964j0U{XxXpcKfPe)hC6OL|8dpjZ+NSjq5prn8s<(Qx zUKW6zrwK4vPcA{P3Sy%6+)S3JUMaRNf2er?DNvS%>^_R?cw4+IO1Z` zllcDrX~{%&0J5|Mb13ijn4AYRMB4$ITf=QfWT4a3sJLqL=o(B;ypnl!?TU1(8-qF- zR8WP>vH&X!5ChHb#p`AdV1^>*^}%#K+3 z-e^`~!irjI!WQ-JF%1Qxp$krM`h9l9{F`P+ zo{ulrxPRV9UziZy7I`<`uUo~YWT_fBlg88o~etUg$>k&!7Dz4aIwpZg!I`=0Y2 z8kDP7b2BF*=+7zglCG`WQ)coYE(PD)so;~ zmbdoIR4F}T_%O3|ZBjxuO$pSI#ndHDN1n0TC=YP*t^d#v+!VmDP;eKxCe97229T@S-f55nsL17V2yx6PO%r%O&c^g~*~q z@Fa8K&88oZE3=+mvr6%*PEPFTCZdjAM)vorCb)ltmKe`SSg=#;v{mLY55$G+X&-Q3 zERaI+2o4axjsTp2&V!ZLd`cQ`l`FvQlU! z3q;Y0Wd{H9<+$rCAoS{qGq!{B5XphzYKS~&W~A}+95z2GrnPYx2f?Jo7=h`_NFw)~ z#>Q5Hm)X|0Y34bRy(g+~Wk{@nvh7X0ha}C%?nw4sw#Wkj@#;$CVHieUwJ-e4nR3`1 zL&;gr);k59H=NEQ_zw^c8Q3^qD;t)P!`vFt@LBpL()mLT>rD=yRQy;@A34r3HlGE2 z^AO9BJxVRvFLL!>E^{UuBLv-2NYuF9ocM1@&kI&t{z*F+&`)Xx`^^EOZ^py7i?E7 zJVee$rm-a>t_53Ym=q`gqn2_kLo%U?NAF~FC0)$<&iHQpXC=6Wj)P)%WXYk}4X*h` zoYkp*X!#G6khMloYn}`F9PHmj7=l716ZvfJl?zxjOR6e&$r*w;WI309U0D0z0{H9{ zT0#M(5Kq$Gw73Aa-#M?rV8P>T?k7D{3p)2i+i(g3j0x^1Q>q~4NfJ1;V#cle_)jW^ z+i@d6?MXT7EN=3sR&iW%e2F0EzkdgXxMsc)QEL7*MsR5!OH?%^&B8&3?z}F_B_i6A znY<_-6>u^{V9&&fS5C)<@gJU?K8Oh?b%KKXK11H&t{KJsc zhMr!A8dyrZe3JTmEWpFp*DBVdE<8sw^9xhhg!&`f07xmbvR`Y{m7EfleKP4)T|dCS zooa!)i-D*%v`V8r8Z+Rs9A@bfik9qOD{jiG22u~q5?Q%BdAM|*GvR`Zk%46d!R86w zsthdm?{*mO{;6+^mB)}QDv8w@8TEFoLXMW5nr$^1J|oQwC+m75PvuuTq^~w{Iby$P zdoA5*Wu4BP5hNaWvhi1;zNa?M9w2ZW2FY%bF(o zvQ*Um(|;51w-tJP;b8h;TOyaoM`oY8_?9xI9TE$Q_bIQT z-E3)o(&Ng`Q~ZpyKeoJ`-2g({FQx6=kbj=d;KJh6{ z{%!17{7Yu`1HRjwF6587|HZs9vt3JZS8Z)iVa|=n;($NCz_8-{o`RRWWx*l=MTZ2D z^C#rWOF{e#?!IVemc#TU&dUDzOMlamjdipW)A`af*o?*_Jk-3|O&uPIvKjO%ltPh% zJrobVVvWj{QMJB~6fzfa7s6R*EAa4dayvP_A2#(sCR!+g0M5=IP*-VR%|}+LMyCuC zw^i;(%NoN%g{LBIziqt+{i0@dXyINyD(mAky&Vka!;Yb;XWfnSkg|R_3E%J+or?Ox z)o|rKZyAx_H?95%;B|E~l;ru1zr1W?{m(TJ=V-(3l8;Is+#w*)1M1DjKC?2RAw?qCug8zygAT1gd zZ0$jde-p0zD)o4=(X*jOnQy`8we^7i3iU3N)*R-7XX5{@sZ|{1wGJjQT$*bU3|jopW%WZAsxW_n-gW}Lsec$EHcc(3EBax061v*B z0iD7&UJO$xaj3$&7I&cTd}kCG0qc#oJzPQk?I0?g|x#Zc`)l) zY-~BDTNOD;03-!^I)KCI5&pgzl-60}p^)2GxC6StD&cJ!D}{i*2zE|}A#&FW#;tg! z;^1CEjqg0DdX=A9+sR>hbd%*ca>B~g_|PM>zEgv665=hHHvM^|2iY&>=X9gZ!)rq+ zX5T~I`s=ae`Y#p3uBI29iGNAYn3@bW$GtRd(HFK1?l9sKI@-(V_V&aJfOUM)68*L{ zSFZJ46VK*ifcfKEf>Iq9zpCQ*o(2L2n_6K^y$wL;`;5RyvV_Xc#lF@q(j$Qlq)i=s zrrl1ch@}I)ow!hI3@jWK7k2@{7=D1py|jIM#zio!>Rw-y3!IUFL0>l=Qu;O<(4m`% zD4=#ECj6&8?pHQ$(w^zUQy)|_2HTV)Yr`1#Y453b9xTh-$VO$oSgP5NlZDivZuO2U zlfAv$YpR0S3O%Z3tmBeq{9c%MRC0Dd47B~Ot-srb6y5A&bZdoBt z_P7jU?e?#KuVm^b+Rv2;@g&6i_|B14w`{P_n;2N*BGb?Ek@hl`Uy$`9ppdw?Ea#m5 zJ>{+&-?mS1+`!ix*C71`ko=ku=F}}P_4?5l%Nu**heRPmJ9qfwZ#SrBl0;18BwR!o z1oIs|VN_?oV)pg(cSG-0J(<*~7H>1}>R9h}Qj3_LT7ll(o8Pn~tC~n{WD5gkW+rM( zE&Gh%*J$H%xolgZX9Ui!Z_K4%lzxePczB~|lzO&sxf)SSd!FaZ9_X)D)I(B}DyY?l z(SJ$|%3Vzi*^mxdnaGQ^J3nUEV-DK5abRDKBq6u&61;WX!2?3}4UO zt~K~_832haa@hJ+P?yF~0VzM71|FHdel_`CL)0c7%I&2*7;$M*S)?1hmAJ8k(u$wv z{pVoYK}hXdkz>0UKOh?cM|z0lBz6qJy!5#fUno3bz5%*ue}Qu^moaCYR31<0pJCND z#{=mE^38(TfVNPg}QW%!`+#Myr%PH&H{vcq^CS96* zy_U8tQMf20v$xjN0Q%%Lp@K!h;bh2;;EU(?&8kN=Pdnk_$n4(unY_Uzj5@V)J??AN z{_j3cwvX8FIo9B;U>m8iX%adNqR%5%ZwN>m{olvguN5SOZGn`n3AeFJals+MD%B-}RY?66)T1>lOr~De%I3oPEA=R<`5@uZs`Q@uTMYO`hTBc{vpT?LZky&0zodap5;J#~>PvE@u+8dSk)9$QVr>vFcL~H!iZ%`6FqjG(f|Q$uJMok= zM;Ix|=nVKl=Ze~x;AWW<&L_cD-4=Y6&$#YVX91y-a$t+6-WmH7t zeGALK_t@gdgu%0jq=uJ7OEuWzw1Z>|5KMkoh_;go4l$^vogHFu;UkJvaiu}J$>!Wp z6oh*Fz4k5#r#3f1?T6?#raO#B5ve`ST(yZ*q>kY>ECAul?w$>5$h^>~tdjPZW?app z#Xu;(+*9oc-oL#N2&Rvxbp0o6FpjbtVb-f%9@X>|J+XcFq^=UbspxWI%(6-zVks;Z zp*=L>7jD3S?soX4tjg2|Qa4(Y>;avc!P*;(Q3Od@0Vx3dz$^~+AE3Y1$Mg|-ghNKM7BS-pG6QLCB(J7k&;W7G>v)(b>m;{s_ zp;f}^!F+javCjcvMrW5%p48cqd=EFIw&e=yvq8%4MF=hl!mS+d3xnIW3qjUD*zhC1 z#eB;qrow8H))%X571wsRHH}#YJ~@G+gE4y#IOfTo&~qcwuaM#o=Z2uS#ol#kwo6Ef zsmyCCW+ZMiPQm2e{l0GKE)DGxSVl#YwqG}B)RocPkuy`7SBs+LhSSICFSF$cu(@4S zdH5vQ*!(3i(qrgpnH`QuMB1-!x`^-@yK+Muz;a|( z6E0e4-*$GKu6#olS|T4Y9-xbsQso0rpuABUdTHHBEV@p78Q zVW%YvAAY`IgK#Qbnd*JXtYskH?`lj*^tyA1*P8uvq&EOLu2I|6TjFVnf)cT6m&`*9 zJwCkAtb4E&IoebrcMWZK*3gXdj@CRTT;`Ix2vC>yu z6LVvpvTfs`^}LPBvxM+seC%hm3d&ru?`O+Zn0<+1CsDi*0X=hns zS0P)^1`5YjEM@S9;-8tr3iV;K(AD?q0;ba=dz+NIpjX}?c#O=GgU5-DDCFBHoQxA3 zG;A7Hen_3uS?IZiLKk^}#OHE>ww3u!va*iC(jHHjw`(wSh|rg361#1hSfOGPLDuf* zh=31N7q2lDt&RGA+)`MIi7NQ|58Rno{w&ipw1GJco()mq*_YoB!_CL2VJ3KiuPPc{ z3fS&B=ZS9w!rn4Ul}m>e>Vuaxb-6bl!j3M zWwp#UY0b1e;rQENnQhVf$1>Y&+a+^)XVSClk0Og+u3lM4oJ?y5_R7_RqcY`pmpL_~I$p?U7P zG1D^Ejda}O-9pRt$kM-*zo=kXYXoRANJj{0N+FpN3OuaDyDq{z1)0A%R&L<5(>&tM zyGHsB_ppe%iYOY2VoDcyi3VdaMqHzkz&q->3%53A@j0Hdzu>KWj$`b0x9jyMX$e*7 zs&dR!r5h;WB+Dd3gPlun?8~V4mW)*~&D@iQcq4EPK(j4Ccatb4^4S(S_kgJQJCnPe zYAt6b|HY)^&s_@94+yH~-(^HM!UVifuDATP5qrNf`+dS0sN0l!L?sS48l=A@c*JJv=$ zM~iFD0XA9m4)*MRHn8OoCS`__N=L!3T&fO^dA^LqpQ|XA-@o=3g_XlU+>xH) zIII)*Pxm+e1i?xHAfh(qeASrbCk86b^dvXl2=iYw$|z<1@U&s6ED4q%6+P$=dqe2L z?SVeJ3heleTs?Aa_?8-z%%l5&3usw3WK?54EDFS>Tx@Gu;*>a$7+B`8zvZFo{^bC^H3~{H;ohI&% z06Y`cKr59OCYv*we`&E#EHb3WZKb?Hd;`<99A1FJRYvg5^}C%{kgX{YHg)to=)V3p24?YZQUq3qoWEnjF_ zVootMUrv(L8`51zDpH3BNw7lkZDB5dmaIpLKJq5kN3@zHV+fN2kKy3I&`9(kB4?8u z!3c9m_Do_veU1J)jV4cqcyuYyCDM(f(9KQCjAq^zi?od!G@l%1Tt9tvYQZJ~C7jH4 zOE&=}C=mvnUc&YmOlVp^3~7^jSWiJG9e+J0^?FFo{H!O%{dyF@hPcNvUdVF7tP{w1 z9Mao4|Gc@Os@d(_{Ae;hjy@l$qj7z-@rd`cr92&CBdK&E*$4*stQa;Y;r6S5;>^b4 zEf0Z7jxD#Q`&j|9ztU#U*`gcM)xcfBgcGTh<5ea?`f|3foXcOAMEO@m;5{hD@2J~h z98*8;+;s*ep0@B{H-XLThV3Vlnhj!@lFPy_9S2=h8@)plN*t(O>1BltNyqDBM>B6m zx4qsSnhAZQMm#50NzX87*-HFCKGxs)o-FD(l6wHwIiy(Ug1Q6ID*Ej>9_Zyi5vY%C z#Wvqk3MS(vu}ZhUwNOQITl@&rPACh9uSwEPr|`m_DDX*e0qvK5zR%Uss4 zL7g@xG?$Vw-DI*zqZGT^Ykcw=0@w#yF4AQRMrqI!*{inrs83S$B=KUTN9g7UGdsLpw)zJ&ILliiML>OoBP2lvcW2Xv zt=H;O-V1v=WbiQT-~$hNbn5c6Asq9z#wGf?;#uw`{JP`~aq!Y*=Os+fH>d6F%d}>Y zVI$exPrToxEIs+jg25%b@D%;|I2}5t$q>^uyR=xfqgRLi)S_0mnAh z&;-U%H%{jzJVSx?QaDNd1LuO zbxqE5>D!>F&dOk!=zv>OZvgeLM39_Rjqr!LITIYR_j=8$WYkdb2N2ja~ zg74@3{A+k~D&`RNUnS-{g6U~=Vb!x6D^SSk+wOBsd0VPJmr!h?Yl{(`K9^{MX52#L zZQ^YhYi4lc-#z=Z*%}?$09nm{#ibS_{JS52BacN5HeDSFy#|d6Vz22GfpS#hRgaIu z`5t(V`twEx`8VJXSEqs+Y8Ich9kOM$qw}bj%LE0Vv^=|6 zn)CjDoLpH4u4kdV`>yNZ>GUJlIgh|Kect|}lYPh_%Q|j$U-C9<+We!xSLjfyPflsV zcfNTcM7C03~C6v@rRuWfmv-t#nqpYIS)(V}0Q$EV!|i*4G*Cb4zW z@4u<;;aJ$xbq7uBr4$v^p~43rD*>lC;7A?lq6@a;HorRc8Zab z>HR{?S|XiOtu#A&7pZm!fCRYUyX5?3ygq7|Xeg7O^t6cSjKns`--fi_MzMPvzZ<%w z{ow4}G!Gvo(Z5a9w*8c8fHy_>GDN=O*C6nHP3#5Nhlxa45wQ+T)VNLfW-z7Nc7~>KE*s`=dWM_<{_8=1AI02G zbCQD6kL#Z-^apHmBrV(KG9jSD1!vy*D3wFP71?~%u*XD-$uD`^e zvr+XV!jj`1VNAz_e#K}%LD~Wo#(ESio*$alesMk`#0QyW z1bt>7x8k3b{B!wra$p>!G(AL^BbgY+gG}!%Pzz3y0=g`jGPQ0=*q51Ki)DEO@+6Q0 z;MYUTHVt@?NQTv1nDfG6o%!BB-CSV}+%hu^B{axrH)xxiM&U*@Nf75T0i9bjV%#Jc z^T_Zo<+lbq$U|?2uydGe#oF45Cx&vp(%Nxwq9d;C8(?u_4(i3a;^l@Sv;ps-8rx3o z>VBaU3_ljqSld^V!#LBTwCyqzJkmeI_Cvp(mstB`0XwMO9|2cqI{Wan#@Tchh#oEUBaazh@? zTG*#*km0*fDgtC$gkdDmr@g*;U}k#~t#dzFiMk)r_M$ErQv}Rx zg(|BIjzMtbC~1*;6=g9U%9M^68$a}CKPfgCoc@S1Mc9>F{<<>$<7nFim%TJ=U&@6%qR_}0_Y{WDw?Cz=-%JGt+?&lSdx9;Ew_rK210MwTczlM z?tu72M*9x?v#4~y{X!>zo1ok?9K(FTuy2$fvCO#UIu;QZS`sg9s49RAYXdx0Y!%_M zaKEUUemn^@8mriP_OMwtOU|f6$6h zj6Cp6VUeo^(W?m}JCnCJh1Z%Hw|~kpW7M}SLPPD*<#7esAU_;lg#}q^3+sboGweF} ze+~~SM2L9XE986K_Nm41vHvttVkYz`T~M3qw3KS|ip~H1IFE4)&OmV%6r|k0n-e!( zF*G!f5f+qGii)_nN?h|BP&*vQCwUe^;f*aTr5PGbNJ?-`YvVq21S4IOB9?UzMt{m?2^^;&$d$L$0-` zeEZk;fN(`Xv7U7B-@0 z;Vy0AXyIz&ZecFwt!d+C18f5ngd$L_!KAM5|ha4wu5h9tqr#-C4N=pCYDkisAO zCHk)4A{{yaR=k+%hz=_-b6{$Ks=9!R%Gcp9SZI>aC<4m1%BWY^U05greR@MLizo>f z{%t87xkuopaox9Zd(V{Ie>Yujr>B$DYi|$5{GST)i@ou25!w8LlD&hVGxPlN+cqP2l@1LHax8&=DPvM@|dL~~* zWGir{e@#NNe@z?D*sp?*+{%>lviZH|GCDAtuBlm!ckl?)FfJno90R>d|7z`5BqVQ= zye5c-C>JnfT$m(g>hX^e!DHB~7WA=$M0X%+Hv{L!xPTp8j!FSGh!LuCzVdudj0cq0_wuieaF~E>KNt1mV~{d8b&`^$oZ$lNbZ%MP1gz z1>7)vCaB%Bl=m=o;&-pwOo*=b-#&+IVVm)yO}pcGUkki{W)B^t4IRWoROG^e3`okt zQ0XX+mEtc9TrgejO8yPkxxDoZ1j4ZK2zk#UO6fG`9NghN38W~`a3~eh99|vx%Ac5x z^R*ses7=K+x~e3L$_4^w%sh|jQttS=yVNiFQo9u8e%ZCG($eEl;el?;D0S)W)l z45fVqdxDR-tWu_U5yMLp(e}2BC_|DNfX`~dToGlIiTx5)L`E!!O!>O|_udHId7nGf z5yqH2sm#tGsg3R*BSkI2-Izcb5{oV1v)ylwB){m|-hHV%r2=ii?kmyKX2 z1;Mzd<|Xt^Hr6kt+pvi%eiO&@{1IlDk23u+`0FE(;0@6KDWQ#7hzGy#ohz_k;ya+% zFRlgm?Q4*5_UAz4`z>WtV%NzRa+W@)N`KvH`{8~M8Q#3ebr z+Xf%5+~fZiv8UJ`%oI@r&w}!O=2gOQL8LO@!v&iuz)~_P=8CSd75K7Eb0DVE{=svX zkEWVBX6lQmQxc9+!cCd)aFr+^BxyzHAZ$SNdw^FFjXohQt`3&X{5gK3FGdI&z*360 zgI4DtRBz0ArAtJ#gZEVD%So;?0g;`==p(HS5<{7J2nN@jo&%T;^<~vSvHfo~6;;sZ z%He+HmO?d6h)X>S-vJT?am^p|=SvIh#;ZEtwB&e*qE}?NqyqL_oUFcdrLQph!hmr> z?W>Cy`}S~;aRZIDZe(Iu4dSz|Q0^}emBuN!zf)um`cPTJ#D$;Z`(S|QMZ0h`0y}RGGyW^<2>e_$)a+j<=3D<&zy6P!wW>7cBqM=VO9Dr8WEj>7 z4t=;HE{bNw&2N=X!&4?g*ql`w`ow-zx&6vJOa`QyhHyj} z%9Jm;=l>(rh{~>F4Emd)6^M(VTkiRuzTs(;&5jRcrX8Q_eN@lS7@N}|CMcFmK|gh7 zbNL!#Qn4%X=Rffnl7qWnpaGXM;RVhmW_wTu=2pK{37wAE>x0adw@WDT0=HQ@-^H>T z%uyH5vFx%^=6RNIzA@0!Pfc>w@jV5pB2JyUFNWL!%>?mol@;pZD+O3uT?1j(wfJ>l zPU3bNlv|>-VCZXpiRk6lw?00(8&@Y_{2T~!cdidm^kg^*_aIGWF>?u{b@%$CK(~z; zyds*#;mY*ZRG2vXX6))@g4_(l7t&O{F*)%d_Dt>ScdlFx`D!*;&f-MMPm`Ft!>FHw z@ogYUJ0RA)!g%K^8|`8~HZ2|dsG}?njTr?1eM5y(N{zD71=lL|{elh~@~eL&KEqmIbwBZwP0qZ zq~$e3^L8kEoyVzM<(Avn)Hvd6n)@=UDlC88OxYnyAarADRkDCuhL}c%^x87eRapdC zv5uZh^$!*rG5^0GTtb-FUk5cFwg6vEgrEy~D=w3wP2a{pseBE2!oKy5d99HBUayLN z+QyP#DA_U-XzBZQZrmY=^MeI|eEg7)o*g8u$K9`n))_g(WS(dOXI%&jLH1ciurD7% z_T-W^sNVPjXAVR4Gs|t2EP*k3nqpk;7RHZlSqyYFR4>@_K%VRu6aa!|3xQtAidpN| zXYSd#FCl+aMfYoX|1Bl3I56CII{oCW^YmoRjWs**kz(}x0OXv(!#uVtgKbys@G_9~ z(PBAth#T7^cZl1M=lz-&R7UO1uO*n`1-q0OqVcTcPB}AZED@bt{hNOk4)la@+L5&` zqN43kxIXRq%{dGguU_)T0PJ1-jzvyvXY!kcO_^)@pkXW8 zlliDyI`FqLk^M(wC746sQ7)1@W%uPy8tL<&0fX6ccF5_m0-emQ`16Apc~*ZWHnx=i zx}OtIE$2bIKVTtQTE<`ELKh?x9QN+_yQqHDXcI7o0NedePGI|Nwri3d5NO!+2}bB_ zL9~t8TpGhaI8^wTu?U+!f`3~xdSzXQD>h#M_9k8y^kc}bu=I8QoLw!axm95dnx?2) z#-LZw{_SzfbGpo1?N3xPgKi_L+X+p&9Og~rzsg(dq?dNsbov5I0}^A0pVm1?h2N5b z_uFJ|va!?NBwJH?V1rw&0}?ncT2K$XYQqYr+QsyC&uKbHw7tr!Sqy9L#iAZTDM;VV zWBtX}W{F*|@H!sH#B6BV=Exo*VP(XiWqD-Kh1%*Rgnqq>Y4%vT77B(WImz^CJ==|P zUNcVqiof|g%lIZz**l+~8&}Lm+xXmP3$K-6R1W4&+TD=3R{BS0@YDV^A){AMTNrq| zR*qS8i6gnCt$K?B;8Q<{9vZ`iIcDh-)53fSm)P@ZV2qnCSE3_)wrjOT^Ej1=wxV!N z9@+d%(3_Ov7sj5WzO|oJPff}2){9O(T){hT1KC_P-~D~dS%+zBL_aqd+>e_Lex<1e ze>KiiIl{Ak`f&~s3fArskhj1bIhjGq13*~3d4_^ z&T;(UxO+n3ke$Vo0LC}5TurCS--J#C2k<*C#O}xr7{5gYh6Vq;B@Ii;i{c1p)wUnx zUQjDH(NQ0iN+}>j=P0U$mUStlp^Qr!ht${X#TB>9Q;TBA%w+t;rX03FA0KOBc>|r~ z9bC=6)*>Or=b3RZ2#nG;)Et%?VaYn?Y0e3TxF6`uFg7yEi|@glW{h$xQja&?mKAO{ zU>6C@66tTkjrgnag|)iUwWO9%1~5hC7n3;2hJ`IuMeRFPXY_8f51%RQu^Le1n|I!6 z)k!pm>6*@KS43J~qEMU}&Yd^ZBb)B9zaxj_1##@3)R`>Z3iNu8>N-@=(QHnSt`FzC zl87ov;s?By>7bX_&%9GZ2U9ub6P-<)%%~-Yhm}!MwT36{Z(kQN@Klck2r* zih*d9vSa@JWp9w2mdB5|D`sfG(=V^`g>Q{VN9oxyI0e+dv<{feG=WCYVKD4LH~AeY z&y+r=bL~I+y=9LYyv2^u(VIa1+MUg>+&y4YBgLLHo%U0CxX^*Hb;qRe)we_9df2o26SwU3J~@H^!MHiQdV z@@o>MwRLi=s@b~I=!?2um~_-+b=AKynoD|hmGB*B12KVAg^C6;Nvk4Ej!LC0WjMa# ztzVP#Kpb4uH*q(%@W*o@m{LAIbL}($I8Os%5>mK_g_5rTc$B2jDeQB3hnyq7jAgys z3wgDS?P@|&_4Sn%H=}FXsEx{vubA+-q1E2?N5`8io{2$ci0*;U1^XKZ)f9KC-TukH zFPbOYYL0}&U(2eclnBojlY9U^oicB3*m*i_C$fe+lH?bQftCh-!CEgmiZ4<~w+v-h zjqmIybH<{bPFR5|^kEGf#96JYO4l3YPj!0Q^S|gH4sc+<1l){3;sXMh0bY9lj?S{6 zwaaT-G+n%I>gdyS@1?oeT44B$Cntut=NVdb92nlKbh^`8VoGe z?8mTWVI8k+Cg|1S)<}z>;l3@@o=op9b4aK4pefTtN@pSBt{d z$@()ZJi=RW#h2R);D@~SeAi^{X)bnh<{+KDyL~YXvfqNuu=MtaemXaXNAN?I=Bsch z|0k}(y5C!+RvnJ)gT1h2o@n?)Fj?GvOMiT3`$|F5eN?ty$h=4Z`{{Rt=VKkzdC68D z6jCAd8xn@!TJSqzRENVro5GdbC;F?VsRG_oMrS9uJgZGl;8j& zlSdnBbd%qK4lslFb7mvDUkjYPHCyYHIs7ju>F$h*GsY? zTnm))Wk=L9!PP7ruiE<74#PLlGJ{kbB2>?(2;9g3^|0WEI|D{X!910+cn}qu%Qv*< zGi@lE>o>ypcNrB(9IXWsumi57S`xrr4Dz7e!!7}-=tHcT_7I6v&j~rhi$`wW;QX>D z5|l6z_P9XK{J{1vRQ4ip1S$i$E|2G|e&2_bwjamgUoqpycV6b7JYj@|)P^=f9u*>c zajqW7-UEh&3x=k*A5$=)UD!r*1|F35pk44c@+UTg4HzOLlt-{ZDnV?-Qg~>f1}uba zGz-!84v@D#q+1{O+gnH)>-w!IPp{xn$66|zDC5zyI)qwq3g<6@mIx~mO@m$`D8C`` zz?nMABf~U7D)ZA{R)56dbCHIGLDFTo4-02(1dR#402U1oGc^wiG;@&?edP_{@xhX>^VlH3$s8jjb5%m5U z7>HKV3kC%wQThYY&$sUCFkp=)`zIdXE&P1FHGkr*xoT`m<_ zy=X$~Hle#!gSwI_>h@ojF3(!XuN@?MLdLoy{cw^l07*-3yGVo`u@n)P)lR!(Eq?zj zdjjb14xQM3CfUB?KR>4<9EP-a7+p(CAHnR9ygTqmZ*uW zsS^eM`0n%_VwN^JdSf@NHfU_(KB(P*sMU}e?4IbI<`|b1GAo1w^`T>{lDCSS8m%cf-6|6^US8CI4N1d2dZP{{OQ5U_F4@O%rb=Pl8kM|x8yT~TbG{9E` zs`ohbe?g9j1t?}L8F-Ln-;jxwV(Tj>*HwPMK<15}iG-Ohmhz)TJ(X~((ehy@7phdH)q1B zqj;B$RRX^ddpy)-Poj5ZjMr3jQ9z3rC3j*rc(gU#z=@&78CXSg{~b!pVM@!b&O16P z)4SOFCzT+U5&{HwQHNYYn3hTCKNPe2}IDntpm5aj`5jk@@jZglUA&woNGyr(P~ zc^XS138TkMA_?QiFi?5LqU?v0YRsTjq9(T@xd_Lr$nBQg5Zp4)aysgBn<%{bM{$;a zWyZwIovjj%HP~aOh7?H^m8-Bs#)aE+Q7dXI%4;LT^8>qzn(pDFh}wsWpWa!^3*AbF zeo;2ashi@cnOgDHCh`zdDT+jO(7KQVb3)N+=&3wwsFP-yE!?7LOlsY~FOU|8=@_KSF3Iw!>zZO0qtdi;!~}LX&n;hNN$F->_2Ie4}uYY7b2nqni5@; zli4JS2=jk5QV)b@fwsu^Fu^&M;Mh$Nh7NX_IZeSUstGT(1xUt)!Xhu3P3oFWGlESK zj7eT16M}xnCR(QNDhc@veguJJlheofKmhU*On?mAwd|h4rUnL)SrjI_ zCQI<@M6l_B8KfXO_#o?!oFa?{HAzT^46l-GCcQVWAk<#vH@9q%Uy>`DYFZ`jK1(m( zaIrW56EKnJnh8UN-(aek*$-ee1AV*6ii9RNh35GK;gOiYEuspq8j@&^W#3)`fPTny z;K%6~Gl1B^&d?sTWJ#`qs*cL45K72^?x06$q;|~KPaV8kSAc$uon#Ib`69(O7u7Z) zTmx8hsDs>;g8W>a{8u_E&LQS#7`X)o_GmX`TbmARbeIn$Cjqep3zUNyQfSkUl$me< zC=^shV0|(b%|rb#t!R*g%%57YK2^(uMho`a0=X#-_8SJIsFzFgcFASPHrLsJSv60T zVwx^)l{U;S4tb9{sgVG{Obg(a19|X;xyHzNLj&sQ04F749W{$$9R?Do{bJr~IDK(fEV@K*1Rh65hl*BisQQ6+&nuz>5P0&n&UcUZVY*RY=;k&OTNbqeys%y z095jTBD|O;O4%SQNl3oTliY{#wOC*p(D@rP4cnws0TT0h*m&kQ3kb7pch7t!J8QVdnd|Cp0OpX2R+Ifh;qBeDX#1KLX$_-T+|h{NOQEsT-9o;Og;s+$D;4Es zB<80~Z<-%z9q}z4{i-nZkyg~D3(JHg8>A!&gk^}2hg`k(XuC)-_vF(QNRXc*q+FNC z9L0i|fRGzi_9tMOtv{pcPl}R=Mq7V+jhYL0+Km{{y3Dw`Y5<5~<+@DohPu|1a=46=5JGTHQLMJzxEuiy^lPgCN)4_Ij3_>IX>GVu(-9@aLiO&u9>fD&)VuD9fb? z$=Gx1k}?^9G{n?mNJ`d_&7HPe5`qrSsS=IyIZFBA>N#|1r}`WNLP&B=N_I`!-QyvG zh$OiJRMY;O9n2D!JX?5VB)xM+vl!>cWAq@UnRd-L7pej6u*fP-R23Ww^dVdOA)Z;V zc?@U)x9TLdA=&aGE{PA*rF*a)4q*4+GR)AGOQm8Ps4co=I=jc!~rNT9sH+ z)lv?`3rCwS5vwK-u_5160o$voDyGw(>mpd>MS2k;Sd=v?!-K_S>*xBjq+-QVR2fwB zq$s9oN1tjaDQ+-A>G@KvB4da~n82r+;Z+iqgM2YW;qA*NU9ljok4iR z*rFI&Qs3OASrW)kwdXh<^NT!&jH!`lg`y!%7mmz}}3hDdSL zJ`q(}=TByxQ&D-&`#w)*#xlWB_OVjT2ujqaA%E8y$k)ciRpj$fySd2(-?ocmMkX-+ zy9OIv3FyM3Ao=@Ll=KqXNadJHzx!EEO&;*QPeNN>16Df!6^EGpR?I1dksHcW08w58q9W+BxmMNkH3*GM)t7xz~ z&!ZzQ>9J~8lnzF*)L?OAonn}g$S-EcrYDGENr`5B|FP6Y?V#nY7qU|V{rsJH)@IJX z{s%jV#80Ivx+;of_f6mVe!u-q1NAM^Ve<9@q}9})fS2^sUb`X7G%`{(`liW}qY^`6dPXrf@g z<^8q79~u4aj$U8+<@5VUqF|NV@3Xo4icRAgilSh@3~}8F2J~TIB4Ea05W0uEp-56O zmVy5J$pHbOeV^Qae2M>fr~NhxLI65T8!LSq3;O>wMh2EsX5aG_ z{>ugY=l&o5h5CmEWetTjQIt=#tx&-bhcYt>;Cx+cWx=%BLAVmel-aN`-CmXnA<7AdfkOC?A0NLnvl2mBox2eV;TO%PvaYz7cyG79-e1uFa9Wa04_yP6 zBegtq4uTlc=~SK^%cz?7N-ND4ymIE&?9WUGmf-JMJJcZI$90i{;sgmIbcdLc>YRI>Vi9^c-rko;k4eri3p zaM-Y0zZHO>WcaAYQz+Hr0xVB3|q{hE7ts@2{ABEi;7~m_! z2xd?fr=saRVYjWXBtgNLO|UuE2x*Z%Q9WRcN@Q@v~Cu_sjqNH^%{X3C4YG>)IrZAJ#OX<{lEXhX% z6xwxiTBpWqC_5FEA)J;D5%#cS7KWO?7dpnCPrNidR@7?M|TQJ=Hz6zjc^Ae`TV89jDI z@j@R2!C}FA2z7*Pao+QgUh80yI70Y7K(8X?j-A+CstNH-0WvX)%4CeJybd8%Ts!9! zTOhe52!4mf&6MhMAXt;aHUmsI0HSyv;T-0d3)j{LLhm4%y;<7cDdXJKWx`HQREe&E zZM9yc3ZeZ=Cgtidn9e+<@SIb*`E1F@*0QB&LmKCea<@#F;gh;ENSJj**<$EXh2K$ z2GEA7ip5*uQkVs{DpfJ*wQ&FL&SLgCxFJ}e)4TPN)kNSHKn!Prk7)k7M=qzhsoPHyMFv-!uC$$A&9FJ>-#y;iHH=~2ga zgZ>b#k{&c@jVUNL=9*7P+eJOFaF2ynJ9{X}U`|)9Ux}kfi3@D5h7`ast^-6QDDfPl zcL_YH=m_b8iAKMB*38EaLCDfZzn`Md!6OvfRHq5(!o;K`DIP5~yPL>vnA*_V>5fsx z)v9|ezU%ie1SItKMiT^;M{sK9?Y@B*4$1wlYUeFpv1Vz}fnU9lOWV*{%}6n+^-u1- zcCB9Gg!PWsPueh^-enuGW*Pr0GS8^T8UcHW&oNlIm^-kQi{J%=lw^u+8Z;x3MPM|B zlnNaYV1y*E3k9rD{IY%l!MVE6#{1T8ZaI*zGsD2R1pDXild zqF#c#4x<3~xv(I>KJ?X#Zcl-ya1`HUR;_esS@1C-uGN5j+*p9F-YQ}A#}a&thLf2a zKj-BRo{{)t=X3Jd=No&$7CUE*#&K64_WD8NBsh zIOwlIf+b7ysIUSzyr;Ngri9AcT#_tCie$rV8W{)AzH0jh^Vv^sD{=jJy@yjP(YB7Q z5K1mngL_$h2;^N05u1_g$j)E8_ZRN6Gpv3VhOr~HfgJr;GOry=&7V+vC)_81SO5Ec zi*=8{6Mn&InvJU1#~jDSZ_9<2I(iHAetH1n;kU2l9QW$ornb>t4jeuOi8S z!4U)^7o3=D_yRSieGO-U?uwQhp$Ud

    DcjOS6Ac%V50qL0( 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⋘1oda~2GxrDL1D3JqM+E!8x#rm6|IWd)_p{MnJWl%s4e(M)>{4BxPrxn<4C~=nOK{9Ou z)mX3)1lu22n2P*b7u4V}S+1wchMkgK@4jT#*-Ls?h9e6|+)%I_9YXOJLC9{N-&&6dXwL}6 za6m$%c=ESoxCTBKT5cmz=}U4)7#jmhXLcYv$kXifx~L9l+1T<^`w*al@?K|9JvQX7 zkg^T}^Kru?=K&&+r_$a0#Tw@(dsnTNic3I{*+cx#+rLeXqffCQn*I16LHaohciFLz z3pv1bs6w183%kJsxkNgT-hx_!zI1t2Js2Fc|ef4 zx?V1vO;0+c(&7qT7gEHh+E%%BdG$;5!Z)C+(`5x|zk~E9^Zn)ll#>d-p2Q=6tt(_0 zDrZ~eWVnri{1yitUZ(`Xo#>Ty?bw8Goct}i{n?BgmqvSX>e*nc02FcGhIq*wPT1d= z7eN|4TV0)36rleVK#kMP4X<3LarLV%h4p6aB%Sf=^gfG36=vIcuO+ZdFdm-lwBN^pKJJvaA6iGM8w2pTUq}{3W)&^pfR= zG}lr^8>OvE##f=foZC3^i~_QHza>)SqTj66q|m<^G*9d#`f~2j4m1iVkR#1ECM}{8 zkC{y%m?MTwUNf^0&Y+)w*>rztC^1g=-bo?M!5LRs+s~7s6+Ps+`5Hx@J#D=!1%+w_ zLItz64If?{#{@&${7Ix@gho=%=SvpANMyg&874Y8!dq?^=)xYo(qOA>I#ZvL6M^MS zteQ0)$Inctzl_sthi;n6oh;NEcbEevp{tIBR%$*d^`0#VV+xDa>GJmaa%ZV@32kc! zRYc|pnNCukE_I6&B`^oWGE|+5O$=D#u9DUh5`9yV-&sNtRLU6?HnGDP=-jegM`gw~ zl+oXOKu*VRc4%^4URheK+W*y}7&Ukxci#r%ud{L{->56+VpLWo+QgQ)(cD9ff;i7u zwkj+f*blgTp%h>RD6}QaIAq<^CVt6!%Q29?SqbXSgix*0Orycn+1f{AYL0>hH@2Nh zsM9KzXWy>IOBTIoS~bSdXy-5jO)GE8L%sVofVS*fQmdJF%!JLD>9koMWv640g$~ip zvN)WPKmt+9CG0Mpa_mHLnBq2F90g-} zOyyIEe|fX7v|IsUC+#85 zqj9K8%S=8-po;_en&r2YX$qs6*D4uQN(I6fDJtue9ks}Ys3TpBtWJOn#UpXucIo52(?N-^WHUUG*2Ufpv z9m3BT!5K!uUjs^9ke(5+z`Fq2q@xwE_CI}&hbH$MD~HA$15?GGa(N-A7nUtL+#qK? zPF51$#MH?DW9fM8F*kyUY$tRZhYV2T1?#iib~GXb>*Ng%7myY zR%0eQGbb~|SYoMnZlk$R8MH~8Xwiqf2^P+*I{H%m@Q?FVTfK4RwTFyucE`tsJuPP> zbvW&+!x$ zSS;!v$ap3H@J%~xCIsKj*EnbnVpF(!6Wg~r)$#j5j4m_`qiZ9c*&xw}xlL>sO3j&# z>|$q5C=}m!=uf9dnsJHL)4giiCO#+*&r3%CK8b~u8^p3qIn#&PcT}XRD`%A2&ydoG zL(2KlM&=nczuka9#^s;GFKC!Nr{eTqGd|I(aJWX$atwu4caJd`?1e;Ci9)O#RH&@? zyG{K~GY42CJvw!C{ide7Z)W_M?`|#r*TM?m$>0vc)m(BSI`7=KC_|HVQG+E!)g;Si zR?T>7$b6A*gx)fUnQJC*;x?UuW^MzzbWkq08Se=U@p4%=pi<3QGvo;r&V(?)M721I zBUmJOeKTfxO_nj@&*=j&K3xoN%7Y1-&-T$w0~gUv&RxPt=m@r`q@)BiPRzkLQz(>V zn_z>Jjr4%`NI_k6{{c8j+Q^n(S_}0u{R^9W{N%wkPudFn1sP}b#lHhABOUolgA=<; z35J*sn*_JrV^#fcii)N|`kanTab4S=E}6@cn>F7n@#q)+W7*_ykC=l!qKDQGEC!p5 zJvbnVNy=c!$5ezKt-%~8<3FRG*T*wh#~&U=&PI^Z5VF`K-u#)Yx{lVKj~KW^q(CAQ z`vp76b2+fTs~R-y{Dr3#WJv7lPZrWH@018)AQ!ZOL|%qP|0K>ur`(PYr`YNrw5~+& z!*rN!pO5U|4sq73OTEI4QGd{AqApO0{QTWdstYCUdT}KNqRw<-$%n1_Y=*$35hShV zqpco<)f#G6v19dgMYoz%9e^?&q0hEM^zICxe#L0s-ii_I7 zDQX>{$LhdIYF(&A`A3=$sYR3D`_}9JXk@}2$+cSF@n`MFd z7SOCep>WcXXz82=!Ih!jpR)VY@9kD0qqWYVyn6+Qk9ef>Jz0t0Gp~~N@3Kf|JJJ$A z7(B8vKPy7-Iiv+AydmPeGleq@XEE{``y_AKQNqbX1OW`vs1Z*ZkfVzU61;6l^q@**>;&~&?FUVm6JG>Qm_lJ z^N9A(3x`4~cy?R2buepcP-|-G<^))x3sS`wsb=X}EC$D8upQp2NudM zJW)-3O^DE+zn13<7Uysdet;}G3<~G&P5OC+G?85sHE+JTGaDgVaz6- z@FjPdpZ4_WB&*1nHeon6;ZFQ{K^&!Q02rEv#o^Gi zgO3UU?ah<9+S!uQC+dx&W$G+s$^GD}#|n~`gUJUMhZ*;K#Se7R#=4MMF#^%;_R*|x zDEZOG`wA5P5<{o?3|a#;TYYs68RK@mBhx(5=_Rd?JYp%k;8QDCZWtzzEQw|_cAk+t zVpW#I$Q-hIh@!CMIl3A{r57?3>(PA0XX|_t){X)yJD4pX9 zx8^Ex$sT%PxccWv`!-m+&B(q{C|U#k%fCa0hLA+_AZSSCJN3hCWQn^E9tT$hs~sIo zx6ZXz_h_k^pVHbeuxUF?H zAJSbNEx0_FzJJ*^+g>1;wdq$mZQ2iGQm|IK?d%3KUqRrHhc-FePMCX21~V8`!CDuM zV9t!jZkSqmW-5e9sYRQ6R||13KQthu98h?dd%|Ar zo4{|p8oI%+=%HC3omjP^dAyoY8nQ{J7td{thuJnozSxoo;DdJxV3m_Xa9ix_ji<6nTcyUe-prb{{~(Ek9lGWMh-TX zPX8n%MD#@T|FKv2kKrHwvHe4o(vBjMD)P5Xyir0eU#M6FK|W|8$mVdl70eJGGN&`a zbST65M!lAvQv>VPmfROyCI-yhFjj9Gb;Mw{u!nDXq7HT_cP)U=M5%a#-G zowglr)}POha~R)()VVkUX!rW&-!|&3S122G-U>641c^F?_Cj zxD=50FU4ht>8$bVIc86#9j{=6cfdI2DhmHWKNY}_VS0ylG=RhBX5gsl ze#DxMvl;;ab-FZ>Y*Apg1ptFkcR8SQ7Zqu_*P%~_K8z)GRM!48$zl#g&}vER>WMm3 z?r3SV4XgE(?Tc~5xVH=IJjmlRDctOE;jbODa*j?2ZP_C=0<5>woQ?2k#F>fGQm~qI zaWyN)VhfClb~17cxPA59eZe-Jbw3xU&c0%sY{Dgv+|V71c&w14oy(!T33y2GLCu;`F?--Lq7DyjL%Do&H(f&OTf~FXIB20I+rbi|KZEs|Ti^(8X zmVD3?o@kCdyne7shOE@_D=6PwWta(fi_CtQCi>bzCiq0p!4il2c#y+=3hi}%veKZ2 z{Tr6!D`@jo@{+LfV3u)O${;jHxGDTPKjB&r?JFEVIs}6?HD%2foscW$o{aDb_iOa@ zH%@UhAkG0r;Y<0Yv?+!6LaP4<5&12}OnCi{*1-12EQ2gN+as(72dvIMW&c7{J%=0U zS1|ThG{M)Lf`X5vxTOls1X+%0{ypPHZaqml1&*=Cl@Cl;g>=*N3Y+s4h)k!Ixwqge z)11d%{*bTmWuv2CjZAZqul&W%A9n;Um#A(Y+|r+ogq)+VMxr-5U8ZOVC0B zYO!TPnXL%3N4+;0y*Oizfw|LzKJEa0exU5gTv{Rfv_6N3v~?lgzM!<-=BK>F`+rDi zq7)AYfd5Kgl>YW^|Bvy$|8*4q#~A*1{y+TV`iCsVD{~}%WbTB*H4<&<`sMefM)?Bk z=AokRy7+lse&TlJ+M?5$DQB@38Dm3U$Zp?PHb`oaARb>h;_WpWHGQ$(pfrz@=`_ZZ z?Y57Lmly{C*;?z|-dci1(_Ef*(eFCE)|$u9=n;uR@lr#N0lu)jYF6#NiM$VI+rfZA zzO=q~tSeHkdoX{-#2BwR8U0{l+6@xSz2`)D$8hitXa@{`y(Or{(I~|;5{WQ2H26}W z>uay?K?wD2NTXCsM$7etF=IN%XAB8$4V7LwMm=2}4;UmAr3$kB^e_-A24pLkD!05t zoB26kQ4h2+wQNYwx*O3vos&KVdvpbFY8&@Gu^-RUiTKjcay=KCqS={)z_QC=!81}b zp-EX%|7K&uwk_sb0r%nwGaIEjAxTotl)Wx)$uA$Y&i0CVvRzsM?TR7#{gHRz0ZE(A zy!P#$DJD)k_l6S&cna7f+Yr)_^WI*<;3KoPwA0?aZOBAuPxFD5=ST|@)qF;Nx->Md^ob#tEgA4n!t-T7;j`|P=PvF78-to`x^@9=g9&3NcSuuk(GCKMq@_7}PaEiaE0Tdx znYDo)80X$HYr_Fl@9-?kqYY%mckdQDsl5OFd127GAH4c^hG+V#MiKd+-YET-JB{Do z#Oa@Ki{H`FUct!N(#YUHbuRxH|KT6|KO`w@%VLQlbE839bX;IYM&L^$#ghyfWhh!E47o6X+m2#PI?Y#4^3XHp7|4cYKmpE`cSTlceE7DRgMI5#W$@T{8O>GEj zQ2#9yk!;Z6tVZx?;&2ftHnf3k=NT9Xnib0-EI!p@K8Z$(|eT1X}WK482u|5`>&QQS0z%)>7-K!(3nG>hoH02`&u ze2PB6wqSxtfh<72fn+>HACNn1P#V&GWsPEglSBa8U%~-OSGvcjaz9)1K95)>7nEGN zR;^~n${M&s$BNzezQ{G~P6cmz{5e67zO3yP2Hv50Vp zYqGD+qc^EF6<1V#WK3SqC)X$L_uoEgUV|a}J-Teni4s?YUz{|b;iC)O&JhGdO-^xo zG<62yfP4*`Jdk4YaUKQ`DQh%(B(HlmV@Oe5Yqm$b$N{4JcE5ihRbLWY1~C&w+6$g9 zaKN+%oNx_Ze}%0A7l$DgrXnU*}{+KLmrv%@Zr)|3xr+T0lSI& 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¥e;Jf(fF^jLwvoaR!#K&CQ%34YcF)j$6~w{}szW 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%0Dpb>_qvk%=g?>r3Yaw{_(-8Gj^ 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�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

    Yg8L`aaltiiTJ`_3E)_~n%`^?-}ccA7<2jciB zpFI*Y4xedrR`P({f&EO2x_DX0TS$=PGJA{~Md+e0xg=zWQKMp?#g-gA+Q`sPS{ z_&~JJsFq)1NSYpkUs3xy15SD2tYu?LjJN~Dq_c`3gbDSCpiN0zQwkDvS7MSuSm=-) zZ_DBpj@ba@?s(ghn0ckXWWJyij4zoqG&G*ScuLQdneW=+5FB))ssdwRgg=sL$-&XKzJ=dT=VIQMU9&~izS?7+-#!< zOJdc1=9u4AeJ*Fp_K6Lg*L6Kj?lFRGdVfdHO%jOa#ky`9KaUK6>w_DcQD>OLW>m=a zHa5GfQRg~gGsf9gFxnANx7Lqfc*psWDX!A4j|~>v0)l|8;p_SV%-RR3y@HyDPR9rd zf^}LvT0%!6LwBU`D}(1}2B{iTU$5g(fm} z8Sz~t>p$QZzuX!AdQIuCLEaVuuoT-q@OO!K0LCZ^vg&f+ z=48qAxLj~d|Gha*qM76m4BpzOlr}grINu)hp#hPk;;nS*H968472x0(<6VrTk^NA} z?PV1P4McPBsR6*XSQ4x^+K;QO=Vu=8U$m;ro?~COt9~C27lP}1_^X||=klRbd{;)w z>*WCYZwDqDy_uA@c|Jw(^^Gmo9%1E)z;K&kwNA>%ny#MO!5SM8*M?%Bo+-UEx9i8a zqg%l)xJFm*>6#C6rdtPUBg0xl!W&aF3fF&ClW@C;Vs#M5YQv4xh8w5??dmI2kiBqw zNXG=(7;X#BzO-jpw_EQ4_DCLalT=DOW(>KuWLr(U_LVR044>LeKKag5Ev=gH5AT?i zpQ+~}hoozSh(EMtEnV12o!Ki^0>Z43Iq7Y)<_lnxmksZ1le$ya4VBB|i={4KUvV~( zDj>PF#UDI=@Cq`~)uVKUsrKXyf_Dxv9LYm50HX}Y9~{SD8xyMnWUj4yr`jmP)#An{+miyUal@~A)k7NJy@Mu%Hxc4pf$+Ge#4qUx zO}u4-^;JsSimF+8iiookKRNnk0$55pH&E?BZ}sd@bno{43a|BX=D&*65TQ4#F|qw2 zK~rPXno96CS9SDWQzhf370HvF8OO=HV_Unspm~=){i50D>|}O7PVKm4)nWS~R3IT$ zYMgI_J3sm;XmU4kfUnlq_y%-z2UhLi8KX9)bcH9PeJee@jh=c1x|nq72F!|ub33vvW?m0 zVg{ON{z>0GxW5ZtFH&Q&@q3}y?ZSUmrdD@9x9564#yI_f-39dLsc7K5pwDisO-6Jv zS|>ves@2HdZ9U%W)0)b1&aVGVsrFi`bSr`g?zhf>$8M#N(6JpQr#obOmWH>Q{L zIf4)d++=Cr@!8R60VM<;P5J;PB-pKre53jHJLF6T0d*-Qv4!)sx{>suA-H z66rGT=zv|qtRj{%61Pa|0lJxTq%+eq&Ye76wp>{KX-(3v*s|YsL=P*YA{o zu~cbf+3-ByXpiN*I=WMbiV=+;BK*J?Cy_wCJV!IgfsO4(MM~pv{V=&ASclVWf{j7y zCz^X|7u3rz#XP5a)S1#nDV|krIb-Grj@OF8cSXD@&Y*n9ykgO)OtL}jpOcK(bgJgPIR`ws7 z8#YQ;Ml<#+2^OhL71gbr=j{=QQqaSe9>}`R__japfi_(ns|Ky!BaT#}IS{$VbM=2* zxN-+($z_dLLn*jv6XuXRvY}y7_xQy}9hy3)W-n=v_OJGJCsM7Uwkx-$iE1xU%Mx`K zA!8f8v=$lMbPS#9O|qSE=y2*E*9^J9oz5O%&{egShI?0K#p_JBo@kY$_C!~(lukd& zq3lU0OCK%}kVwizp#ot3n{dm{V~n z#m2%`aIUkRwLgVh>h;r5Y83J4tWG#?asJw}7Imt`ae82Pt*;2^5*hGr9dn zniZBjl+H>I2Z|&E|Hg*rTYq7oD|&igT~J2n6Iu{t#Chb8&dayPyItUj`bf#-;A;_%Ei>G;%epY=%iM9<7l~`hb!->L9Da<|t0%<3 z4;CPnv1b%+g!IiGz~zv*C#7`!^T7Ek<|AALmY}^80XO11Io4`hKSTCMt)6Njl(>@>H)+z8v z5+#TxmYQ?V{{~;HFBa&i(-|!bTSV3z8dgiv+57Ra=yQ;3kN(rE5P8FU`RYlLMOxJJ zesO)~4xpyvjwg}05GPe#jb1S!75vTkd4h^FCRhF{*WjO5p^U#k|E=7Fqr|yVooBf! z$6}?JQswX!&wMi~6q!wLbl+4^fdETU0^Wikh8^;b8uHE(@(!EOwfM9nr+NjH&a3BW4|V-{>X3 z5$*HRv7}l^T}rtXfV}}L;P%0dcdx)tV6M-&;72?cue`6XhfOGSnL8-4Hj43M0{GXOFHQbSPN|}ub``hk|q{s2S1@eg^>1j_3&Tg zY8Rw;I?<2zT7)of7@=%AtRV!P5P{m+q<^7A9e!O@B0e3MTB&COpE8!(*n$^#FP_@; zz5*;`*b!0XUxVjgq!qIDC^^*1=GXHgNh%P*np_cy0!b=rz}v^GvI}$DcJ9TXWb+P& z_cQ9R-v+kdInnpR5pz72o{av;4%l2ZU7|gJ|G6EPTi79Z0|Nle|BGSq{BO5oQ414m z(4^K*#(-3pd?W3RK&WJ`DOBmsDAx0t-%*cOcAWu9X_=iyNm< z)=dp2m?JpT?Jky)d5>9oDAO!G*Y>_3&y_lpe}o{y4ZzU${nzh+(n2UQ6p%coW;Sfm zWIX%vX>PT=_hlBRWaw^@u)<-i>TTsBN^`!F2-Vsaib#B2?j(rZj%+vzz z5F@5&m{XzXMxt%4SsKn3{o0r+mdK&rBg+eZP9=RO=Ag0MlVyTIJ)n-^Z)zk4E#>(D z393$bWcUXLEs9Mo*S1<>UCYW8Si219f_6FOAqK)q?{t2(0&%NCLdeqVl43j2R27LV zhn@j@(J%Cv{lB7JZj+uge&zQcnLJkOP=i+yx7N|PUHO!Z?L>|_B^Wq?Q%`Kq?zr&j z1!we{q1r`lp4-Vx!k0i9r>I%z74KHg@x1LfuWzClZ7SJgpbu!b^xcKqxOGaIdC)~r zq6A*2rRN!+%fP8OV)FA+TG}JP4xE8u%zUNQES9OU*#?gzHII~SX)YVQnzNLbC4sis zhBr2pyhuW7zEjT8jCAd|XH}&h#nc*Ft_gD(B(c1U3qTBjbCCo5s#F^`%qWnk9B2`az`mz;M$d@UOsb(1y%w z()Ff^X*OZ+Yb7MB#9Nt#7>kHJ=Wna`Mo%QY6lp*U$WnrvMd$l;UU%sR<3}o@3Y+KG z>wG_kCuoD$2p}nwR)+TuQCt!T{aD|#2unb$6M{gTnd}fw%!bT=k#~A(li~RMC4X)S zLK>6#p$B7cVR51{3Vp(0b+5UW>-|gfa;jrXg~W_nd0+;Q$t@&EjneSELTu3IB%0yq zu6Py(hmSW`C!{f#?Rbs|sQ>{Bl49?eMiP+F@lxGlCPMqr`ry7-;6HN`2Rf-poNo4W zYfF?3QHflKo@?za5fk^~wWi#6TFDw-%kz=# zDsodgX`@!vi&~z=Nc{Y-H6jo`p#SGm4>tRP`9lZ*a4Q1S89gCXWA|xc~1W zy8pQT!+*U0p+*bxpH6p+F(JP=kOAVLGz8bAtSUq(h=jO0B|R}RW9D@5 zbnpnQwq%Lsm1anwwV~z}kUA*=)NQlsmapEGT2)@_yM~rljgIzZ*~(qE*Ijovj2*yV zpARpOvt75n-)yhhj z`tIA@e)D@5QNf&2nLfCPer3oQL5IUfRYEeotzdd){cWW)__fe3k#5Xj8xP_mYVWI` z7{zHSY0E1$ly&7)TG}n;y{-&F)0UphwKM42T(z`|m=Lu&0|Y~h8mp(!VP@_9BLp4J z8a^YHA0|JE^Lyqzr?Ss;sO|DL6~IT_r4BqP-+%5<^N(r6^iTpeZK}?Mg=1*^-s%243y4 zC5*7N&*PdyGZjqPCQ!ZpV46fOP$&|tI6_A#56Kf%l&UJ~&iboZm|v`{S8FLs8Z#wA zrzshaj04Lap)7Gks8-pjZpgx61&s#l>tj7duOCPJiJd;HBhQ2Q+BYWTi>r!#H z>7OY|?E2@RrXjZAR%AjIx)P}9$SuDmWRiWjB9VN!E+{Ry@dXjW|F zUBo%NfKAkwtLvR@*1G!93(DXmH4!zyw{MNJt@Jxz$m%5UZ?#|Yvj@)cIOs4T3(SlT zNH75p@EfxRRSISqEQZ1c*aLj~h^}P(c$>~)Gz%~S1c8RA{OW~+DGRh}y`dg|7?~RM}5sN=^Gu={I1b3E&15^uSkbZhl$$*tj6-4eK>DOza^-1_#Qj z2eQ&7Yh&-s14u2HCaeM&qUVh49UTEtvbF4RYJm;SRvX)CImlodJ^ zh;OKM2$ZcPu3W*9tTk?}kONq{Wz>)`e7p`K-L&+8b!GNuI#Uj@Z zZxqa;Yk9Yq&yTuBc+dH}LUb0u3W6mIKs9KEjf#vX_EH&C<5~``81Q2dfoz%Zb0{NR zgEg1d0iQ9>tr8v$u6UfM3Ji4UXWO#?lgXBfQosE8Xe-JL`db}vvS|Znl~7K}bYa`~ zcsl}TH~@0|$h0e#FfpjR={~Us=?Ug+JV&V*NIo-!jf?XfEd=f=e4J z!Ox$UWUUTKjDc5p=4TyaExa;erlll4(r8Lp#!^KF+kQQLe43cIPxW?Y6w9a2K-zaI zC~=Z1=$}wZdI;1hXkBa_JcGSkUCF=`WUEC zC{d*w*3SGtDEaG}^@RR6`hc=jNamFB5-THM3dMf#RXnU1WkLY#5-34SO$qG$F{mMFfZrk|L!y7g=lcX)8yW7+ux3T~XGgK9ZJ5_VI2?&i@$q}K#GF{yjW>8e6++O0kAaK3)AC`;=P%b& z1JKl0G!_H8Nait9hhSNil!L8Rr;BE2LXu_#G7!>M9a403^+~FkLuO1&%26Bi1ULqL zj>ns5jHXj+!$SCG!hArKM1GdHvk6{l+15*{Ge-}=1fY}Di$19z*7>;vtTu=|pBSGB z8B;SqoLPgG)$H`cv&B#%kI^=3Qkx{u(8@>I;!VWLgC6zDfn|z{5Fbwaw-zBUV{eEr zOW`Eu`|rWVZ75kZrW+L!^{~0|~%@R4|qi(V%My)3(xX4z(tQ9gUOfVb~4LtxJtmzU|(iYz^z{ zdlS>#KsB=%QJSiCZLl;COp-r=DueW}+aYjZuTO0YVe4EkSXAVF} z@eMPcvH};ZSi-Ul@SE7B5AY&!(}+K`_!Tprq5|Chgn3ytB?_1%h)2A~raB91Z!QfUQNQYMEZ$30Vt@5V3XyF9$Zo_Pw{|3ISWgug(dCuRq0%STo%_0Wk)eV&wz zAxj2j1{(V1otv0#fBo{*%ZsM1I4T+_x57sqF8^JPA;9 zcnLp(gl9eqG6punoWpJmoM4)j!^%3&m6U4Bdnb_}VFR*FZ4;^Z5e`!$?8KIxo8(@E zh)|N6df1g?@&zu6yV4Q!0dBZx5;8T#gQ#X)R^@lNR=K_flFuB5`1CJ8y1KGZ-`PGA zfqo$&>P>v%t^F{CdKY`apy+xEB$UD|xdZQYQ-D^2ft2QVgThUtdI+UO-={#;5IzT_ z(k$hF1LesmcSn+7UMWB6P(r#4v5R(S_yA)p@@1%0NhAmxMg-6bVA-uQa!I&EmQp2;LBLQWoaWZ{t?!9=Q@afrFXin; zXmNE&(K&_Cvy6!wv=VGH2#euPvqiwqrUMVv%kxguw!h~6?{QlW!K z4m6_Rqd<9cl)h)B;*G3ui{iz9>RPhu~Ey-fh*)PdM{^Q0l2;sFVP;ckcw9KR}7Gcf_NbT|-&Zw}2J$^4gq|G(YR${~0SC zn^gr0{?(6;qDzw^RjrrinTtbo;I+KByPs-+I;Mi{RaVaMW*Lol^<%$AW*F;(yDF|9 z$WmviHKs)mua>`{U*M-#lmYd?mgQO9#^~S9j5Z)8&EuZYKHmygR}23}9V;9s@uUiz z0kb2!6=SC)ubBu7SS@S_i72{R^U$|#VJaDOwx#?dTGFl~rl9)!ORoTLja#1-W)WGA z32s@R)H@&9qubc$R%^@fS3Ns-W4V-9Z4n*$;+q*ZNROtM^ug*QTYuHLrLI8OHz%qW z5l;P&960o{&hWdSbI#R6NvW!y8Q?dAm!0s8QAbFM!0`2uj6o^89}R-vjPEv4X8ANNC<|gPmo~Z@=*eisT7jY|HW3!lnS96I@ z_zgp9EBKbKR2RgS5zUREbzD>Pn2}dt2@m2{67|i*daj{`+{o)l>MO~5uBnCG*ei^b z7ip`R#%5Ck&)8yalqT%}>wXW)jp!R=!I|_&EX8dKJ^a`n>F8Y8iMoN>0MPYc+E?wE zRo8uvNEEogb%B;7<3Zu^!EX_{+g~_h3h?jTV+D{K zZ1@3aazBXXFURL%`%rSRN94{p0kQ(sd_dSZ$mBb}`IWl@W`BXP{^~F< z;)fJBk)SIrM$|_vQ;;WSKt~#{f~ZgulSCT3LY(N780!Yuc&^Sdv9^&zY29}=fcI`t z#cTEZ1XGXIuhJ4GH zy9oTi+m2dtTUyf~G2!AZP!QrF%MH9)*{tTii|~oRn0Y#ui5{Ho%woU#xvbj_D)k2* zx55C!Nrkqch6g+3$%91F;SoCUJ(!g+U)iY#7cs6!f2CMG62|U7_{-4D zYt1NLD9fr1faU0)Nl_Gc&Pu1}K!1Cp&`Q@fl!aV81-1sBX@WW~3*>l8sF}&#hO2cE1c=h{{QEvx!!Xx9iMGP{Y@enNv zfc?462PA$cs;oogXC{gyfKXA zV`R8G{D7BaV#y>8xQCpCZl}If>`(ie==WN{EUQs)C*JqIXw(OI#upeNUzy@>9trxX z*e&y=vmR}qC>%a_@Hbuf2+*-f`UqeX2|unbjl0d@m1?)^kxTmSjQ>yuzUdDS69*K& z+t5uzt=vqlm61+fhK|~BCofwUmXVHLy3R>MtzVW7vZ0P%rjF3RF++#-(y~7t;u=kP zt){$oOP{t27p;LSKXwOH=GxZWU@z$9T6cZ8b%?bU*w%#0fNTr2Ys1z(`X*q=8lQXW zbqM+zpnDQ8cx@ei|Lxi!YEmwXk}rl*E`hR4-dP~@n?ceOgycqG2(O8a+9;Zeb`#Xm z1FVBPN;_AKmX374kZE!^n|FqimaT9}k?~1!RoqRdO$c;eWAplJ+b2Fp%z(qsFu6l* zu2W*@_{CS(&Njj7L@j>SH%3}-Wc|eoW60O&^sjWaom&OtpjG6-$d^Yar* z>k%W~UV%`Vw|E=J2F+^&Ay0LIFPvU}$X^?WU}q<|i%Fp9-d3t*aCyhdpi$`djZI}9 zt+_4mKOk||J}<);aMWy13Gl0>$8b${iwn5B(N!((NW>0g&quTv(@6#xZbKN>aYvyV zRtL5buwuBJ^@Z3ZUqLwb-4r|SB)AHHff~hJ&2>YFFU29ie{)~Wl(v(3KWn{M)Gt#le0~ZQuT;!5OX+Q%D}KZ zSkgJcH-hs*BznLVJ8h3VXk$!1=@ZY1*}w!yc#}(y{d9PzTjWVklXfk4OGz`(@usbm zjmUYxT<$u-RmqJRiWkl*CCv%Wqh-@(?RZD0IJskO9#+!(Mu0L;fy@jxhVZ+5tk&_j zRirZt0L_wK8$EATd;7fbj^~qdjasrZyZXJ*wme3~HjH2~kD3_pLT7uk!t6WAJCV@m zrfIq&AWI{Xk|Tx}woEL*dwrM8F6(DxT1AFcw-dijlMK;`_*Jw{GmRK07N!&AbIfs~ zN+~)>A(_PF7WT$lJjb)`dzym;(X|LCDI>G4B=e|D%+`NNQa@mxz7`By%@RH=Hc4{R z=pM2rx8st)<+cq^8LmL29%fRGh`7^?-bZRs>7KvDPqMA29a45Oei+2^nAY%|nhtL} z!cCu?7WN4%$Gq1a>#Y ziTgjoVkdhcp73fVPa)@1w+U=Skat-tsFLz)7z8zel13OiFLQ^uSAB_ zdnSg?P~BS=4bn{p3cotimMYQyfV96mOf$(1^7{fg%}8L(=7GZd!A1Ukq7UhVSbC>O zAJJ>9KHE6GOrH^~%+0W=J%eM?U(N&sKGR9I>U-85(tp?j88FoiWTR zx)yCdU!`_sQZ)arQE-)l?^00?-YqP;j%^19{DHT>_Y=hWg^2lJK!eZgH~*oaKF$*W z{@o_(J>mD?sesuC|0Gy!$?}CW?#$&jwYV?$A^d5B@N5fBddP%S4ozs9vN7b4-w2T8 znZD(5Pq!Jn`gFe;v|`isdf1Fx3kb^H)f7nP#R{9qgiAA*pjUDl(4K)k$pn0AVJ=@? zG)PE=e9`oaqQDMzi>Dw2j@{`RKoEY!n}_#+Z^Gvej|$>}-72~+uq}Va zGl8dj&Nsy`N;%3m0`Ev)4lG=83Qx@_J7?Dp0{v?cJf9cXYLeMj8-^RvXw*ZR9;*w! zDL=jpMIeO@7u14ipWuq<-mE|`iw%ozWuzZ^8o-f>PT69po*xs0Wdqb~nIygBZqLI* zIPI@QAA=HpLd0$%>)e%TzVTPOnO{a(_Rw7+k0LvqYP2PTJw$^&go8b#gFQqsTM#qZ z5*3XBJi{>czee#?e3CDq>aqpbWQOMH)ni`MouMn7%LH1tl4`}EJ9XdrjL0RUl&(67LFHy|h^%1wGiJ3BH|Q6O`3bFRu!%SpmeneE`QVLd{qqnxtu==$mB8 zL_ry4bh%TyTs6d&^0-!jdCV@_m!*))pa3eq=J1LImbf>Xa=d9eh2)sAaPRUO>e(lZ zOGrG$1pKP1O}}glmex9>$V`$&MB231um=tAzJpRGI$%QSP-#@3`ecn*+rowLCM&*n z+o*3wX^lQwg7Iqc+B$p+eA0khRqwuv$e@s@;yEv#--u5joi>f?wv+*Z{4_P?pVKuE z)28D^zyW-F6Iu+@E{Bu(HDTM&W7z*T?60)mHirZD}CXO>_8Uw#u3vB{fW$m3tN55R1` zgRtNWfZdEg;IcVXFXIK$Tf+n8W*#>ndqZ%&2sgxV1HoM(a)5h7-d%uf&~=NTa6r-76>j*K#jVyMoNt=vDO$$ukD(;c@cQbD(`$%ew~~)J z&K*w!ur@`?PW%l|!^#y;0UNqk%b}^y%c_3Kn3l5w+UFb3UYrluA%a_JzFCkEK7g$c z!tq6rL3XayM=A0Z8dx3lm8NVF``Kf*1@{_9PRp5qA4}}m>6qm(BWKdHZw?Zzr4!R%iF7n%u#a%>&#NVw0)9e}LGBz&Ay{yYg zR}(G=TcxC?q&&kq8Mm``r{|*XJXRJGE)p&ae3)qmuO_8P2L!^Eo#eoIqD>R7CLIpX zSgy&YczI5{724+bzN_5?dt8MyRN zG)!1EiV(mr4D>h`f;|wCFAek>bfFd>?CB+OVMsne%9qFmqIn=OAI9nxa)5ojsDd9O z_B6Y8%Vh&OAI|F)bN=5S((dAUpx`eX_b9JCWoi9Uo)q1MX#;l8j_*9Xdn;52_#fQw zf_ZZ|o~TpvXAJ=#f~j?D^@yG{*hO?myNDylB?BUt)s3i*peaC~2KDzoz_$uzZWQv6 zYmW!w91J?H4xD|?27=~Ce-b1|u?FVo4vYMMU=IKuLZNv_6ZI79`hgynA)EGHWcwDx ziQ*WKipfr+#3l5ID-qxdok#9L@q-%A&!_V2;T7SYrRzF2GOJ{zM#Shp7$-7UJo@C0DFEhVmBvEuna z44&l_tn8k ztC63Rq9QAv6of)RJRJ?}0SW!)kYK6LMh2%vG!Z>;{b6*XtTTKZr%s{UPg^8I_!y|! zIY@>OROltoJ@_2I2mTzQSgP}cFT-PSJ0YnIln@oceS5thdFaOvlKLec*rjOo!ZQkJ zvK@(i40Ug(L%gkO8hQ|&YNNCLu>`xSLN*I^2t(e6OWSFq`*5h`nU=uD05(v(F?eSL zT`GWK2zI@Qi-i{eI2RC&DR`~LMagF_Uk1+f5qL&ppV3Yxg%n8w$Q9QMN(F-HIsv%v!&caN1cb-5;_^eFfw>p^rr< z?8!lal7$gVYyX&+NxkPBb{;vR}WG_cfWC zzgvWZGwQMScK1}h!MDpe2jh+^tssv&R9Ou7m?PDHZ2pe3QV{ zNZ1C&f(mo=UZzmg@u5nZrkg?(*m~;gn!NAT!PV|G?68;T$;si@_q6P=m+A@HVK3*e zox@(%-;(ybxi86Wc;kneKzGt8J49gvv_8P^Ux!ygv_1)hIg^K)KzEX;J?ij0(+4}~ zLotdk)%I6?q8W?Ly`OlKrtkTN-5pfmV##VZ@tx z7{aeExK$wxRv~nv9f?VhvH!>J>c2cG0RZhPS+`>X0DuMA{~wZV30o&;M;D|2G~568 zw2c4Q{=M1*2cvtC|X9^@d!kZyfHWi9eM1pSi??Z?dYc9;5q_Tb?=_pWYkg2(B0 z+HN+R!|8PTnzruiWt$h^d{7aQv0KF?r(3Dc3H8&oqtw+=Rn3|5RaM!YXC>#6d!@HB z(=c!AYJ$>1^+Q_)(I0|_&YEHRBEBCTzzD|ix2Sg;uw0|Vkg zyGHgzR!*Y~Xn`Ea5Rqs~yZ74B%!Ng8$o1yQ>I%Z36!0N_-=E!_|FzsFLrwRV(kV6W zk;A8Udt;eku9eH+V7wAjG|%p_?~SipUZCvxS*jY zNSL24v!wfAF#)C>il{K3Ek1(TtYb|hFy8o#b+FAH+~>e@SAefk%y-~kfK)P77}I|r zBV8{Z6=W{K@Nw-tJ8%K`(Mjen0R_Ib|Lng{0)#EUg2BB{uQy+G@kUTnEkg;YB4;2c zCQJK%rasx4_yhUBk5DE@8emaLqIW3eUznIACS_sM!p9Ua>G(ja3PA~2m2~2%qzNcx zytNU4vSeu%lI2oiNo^28B&1}C0cKuk;{BT1q{0gU#Fff;qFd&brtD?45|ruvUKK?{ z{ubrbQ~8S849k9Lja-qF$V^Az)A7d_ZM8RPVB6%Ata9y>N_zcV>bbMqb4n)t0&2QL z_oec0LycaM|iAV60ae0VAnHymh>k$bDHBKH^ls#bF z)hAh#s-h{zrx<(&>3j|m9l6a^Qk-Nvrj$;zO#6)*ZJM_30Tded)8LA!(|-H4hy2?9-2QdX4ZKjR6|?E7i)I-KoH8rp)p$LNp3 zF(sQ_J%~~eJDv##yCe1Ow8I58RRgyHn|?Fl!04Gt5#lF;0kN zTVv1B9N`BG;hfXE*wJRB6(5@%s4!2enW%fleB@0uNNG1wL`L?qM_yMmyeL`)DfCjd zl~E_blZLheV!pbYY|?CPEJK&&1KJHKfW!XaV#Owj+Vy)m?%yp@qsuv=%ALiU^)pcL z$N~An|^XWARiR zIide~ZpHjta)5Eqk$nvOHxPl!N?I7WH*vA<#8hk2g>_$x;wv^-c?Bgmad3%wYF7gf z-NvhOOhaJECAqyas%ksMkSZG4C@m`w$NO{-_shNZ#biD)>^Tp09suSY(f3g6;x}HY zorkGsNoOUc*08N9d+WXL{Dk^zcI-6_lxs=nq{=~Y{avb;LriMuS{^G_k^Tn=6IP?w z{wYNFlG+us97?G`^zN8*<}o??aa9>Lsikmd#bY2d87i8rk1dTJd?G`L)dgK@3RQPA zp4RzmpgDC)Cj&03_E-aBRKAd5<%(pk+);HBGMOD>X6Q{|!YD^{pnN2W z6&p72%2!-Qqy)zldh0y#F8h)a{iE_$aSaA9m{xJBU-&oxB`f>`FEiLwab6o@(g%!G zN&uRWya?W~yW#N)zH%k?jV%789&BY49~Q{w*+q zLvYs$oua!@Rh*?u!r*Q5RJo}PoJu%fKAd%HhCkvaSjFrpieVkSvZvY^?~Rx8-lU`AF-Puirnx?GjLsuWwD z08tc#E$ItsDJLt`sSu*rnJRE_j@&Lq&iKLuEOwLurNx0-a7z;(>!zZ%qPkeKHW8@T z*?&(a2SBJWmdq4<_#J{D|4Cke9Uw?2I-hEV5L>V(P#P)b*TC&>K9|T~#(GfW9;I?cxkm-k2=@VNA?2sv>fwk5NhI?1-%YG8~ zF%O$#ZP9&3M~6Ia*aOD~x1$~6Ow(Lz&2&)c`umx9^ zM`9ET$Q4sbAMD^bKM&iu4q9cl1~6U-FZZjkch6@OB}Q2Wl!655#BAdrg{JM^LyJZk zy2+=(+9^nM*s=v)I8~Z{7;g-=2VJ(Or+}@YUrw_pCP)!!-_YY4@_06QcnK*34yO3B#ef%IQ_SOZ|TPQQigk$7+~Df>rk;guD2s&<7AFASm8O zBa@WRil2bCy(y1PoFXG?_bR>Jx=J52;PM~9aVjzYe)Q#>Pyp;5s_c>W2Q2$m`bVTq zRm@L$!4jR_hrHwU&Y`b>YxXe_{2VnflA);AN(Oup)=5${tjm{XXb5UQ{Ivoqcp;(2 z$=F9rAH(!T6&(74;X51nEe52M#P+k;=bZ4Nc`W?6)%sb*MCv=~<=3dw)I2G9pY(1{ zVjULk-ulI8PoP6Z?PIg2dJ{wSW8PPKk9Oi)8V=K(RM9y3XUR>QGNGiZ5TdyH>M=Bi z0yBe~aBvSrwE8zQ?6#Ud1`3B$puaW59yLLd3>Z*Bk2hV4ccl%p7zx z9U7t$;<15lGln5&A;Pu74=x9(Qo2;UcpUD%azu?!yZ9}7wlkbjHKm_G9a$R90ppIm zdl&;7%a7<*_@rVv~yDz0`0tsY5WJOupSt%@iLb$1QO#tuTt8k zffu(%#u#Vm>qflz5pe5>UcAU5fC^oP*%v`noBS>w4rDB$ObHZX3BW96wJ*L0%3uL# zzV2@mdd?HC-VB}DTOXs#m@4gu4Uw-4vWR_nKxq!;qYjaKS3>UoviqrVheqjfio^PVGhj<%P7GK+&@1C*v8d zwkkJ4E&z>^oGPq_;L;88!bm|DEGmAe{>vxcky@Tyo_OwAm=%$VxFgp5@GBlxBMeyh zEnJ7tBlV29uqMoh@C}&1$Xx+f2vS%oY;2cuUE@k{DVi*iETzn^EUYZ8EWjLP4!EFL z=oNuSrE1-C+9VGrS=a8jfc#2JFl z0CR=~9bv2E_GTGjIb;PstQe_J|8wGnH(@`89CIS9C|{0+6ye~SGvtIH&Y1|=kE`Oo ze}mL-+Kp`M`~({3h9H^Nd2x~NvE6?B&9f2VNnAv4vB}P89gfTpK=Tt-T`|c83845J z)#p;;VUZ*ncz%-JhJ?5C1P$Q%r5YX~Z|m_Y!1FT|e6dX!FW~u|+ASfimVFx{o4mbK z#1wLNTzf%aS8V%1V3y#v_&^L{t-SqTB)e)oOoE5-E0TYm{2|=x&%aLl5FVB0K78?S zGVfa;2>Z^AZ^@`IFQ;@2h3_*GZ^ZW%l1K9Unw@9c*EJdM#P^kwr`y*x9#6%$RjpF# z$c(F)bC`#6h47ZJ0?y%W(zEH?x}sWa8%QIrU851t0kv@#)>oDK3Q>*tUnjUiOryG* zd1;dVH%GwrzFv#_8C$ZQHhOJ00%+*53PIt#$H`s}73Kyy~Q8 z%`wNkANL9({lup*Z?$o|mjh)bu}w3oj)mA4X&gs)=`|<*ZEDlOEmBjO4-Gog!L}ls zBqEA`mkQcs(3jsFYiZ%pLu52Z(IEN0*YepgluQNHtV!YOwIGPnG!dr90|P>p>wlE@ zQTVL(S>22VR=R0mLa_4Cuwm1~YMUAsQu2_(h2%RRc}{Zi(X2AgvP6`E4VpQ~mEvid|gxUqAS%Tbmb`)c6Z$52*OBra@P)fl!Yg!!s|( zx{Vw+)ms@!!wzAuc~Y?O%Im!jMRZXL%m#(?fQUpwM!hoxv?NeQ$+3{KaR*8@F`+VM z!tuoLT{Wp)t|Itx3?vmwmfniVP^lxRQYB2Grh06vL~es(C#*>|wLW}Pgw5PaAYPIz zqq-;jF_nBTm?;IVid)~*IG;u(et>pT$}annYOC%qSm~sfUAZF&T4lb_qwy4nmV1Os zh3Q_YBXNzQ%#fw=oLVtajf(Qy09?SuqJ@Voh5bH>%Gn1GYTx>|7pByUxUf7XBo zJzNBcrGy@eRlkGIZ8$5ZgGkPWJT!H|YD(REtGPuR@=w-AeL(E9W?`YM&V0 z$}{~`2z!mi{Wx^E-77|W;&do}^XdHzTGFqo){s4xS9_Jop#B!Rd-7G#nG0|8ie3E7 zw#d}$$cv3}rPd+XWwO1Lwy0v(^sJ4R*cF~kauxj$wutPrc7tN;KV=r}`pDO_R#miP zrka*g3#*1O*P%LPys?!VDVS6@LaUm1SH(7f>J|)!+E=PJHC;fpm1OgqTJ114>^)%yT%$sBVanb9aNdZm^Myid!vT z0=dPN1Cy;-<;M|+@@|C4r>xWY7lX2Hq>?k>Y*kP2!V^cG4u1sUr|;wWh-2s%L*+cb zV2&TE^<#}g@)yDMvi!l*8-s_jtzY>!t_)SUw_0K1=*&2C+@MkU0NRYOWNaja6A}u; z2wD?)J}ETiUcgCsdokHV7uq#P4o$r1J>VhCBUDBb!sX|=>>+76@i;lI7;CZx7u~%t zDCduXeu+MeQG)9Lc({>oiD{4@v|Go~lf;s~RoUK1-6{>flpg8{7#tB)( zM*aZD62|I;Y~Qn02y7W}(SarGM6+_hnH)Z1M7jwLX$4E(m1+f7?}ODrsBl229B8T~ zBm&_l@E{rh8sJp}vszKIN9Y`oi2!4pNSbNy#0!&|@6e7s&i-@EuV4=Xw{4cU2gQ4+ z;SocHpdMkA8$rKB5|jF-_8mY4a0niMXh|<7STt}ZgYekmX31}>iU7kYGXh%{;zP({ zUk%C48z8x}8o(jBLmE5-38vQa0tt-Ry@!xKC(Q=kSTayHwr#{NP0d)0@SIvaw&=If zY4S*z@ynR;gNfgodZ6k5E_lWD38)$1zmt81-$6`^nW;K^-As>}*+X#VI#saAp3&oo z4Hw1f*xTB>XJs2?Jp#>VZSX1ji*Jz0rBbmEZ0;mv5g!i)3xxLG8*{#s%{Gb@npN8!*hzXPC3 z!es zp(%`Oi(tu`i6Xqe`7%fq`2L$SY5N<7KW(Bk#IrOfr5Vl7^7cZ^B0e#I(VcE^PB5cU zcG0cRej^_Bi;JTLm|Y47H@k;<>LBhrmg<()=Hs+r5()Bg2Au8#1IyVm5UiUFXs^Pl z4&^jbl`!BUZGf@p%g;rK48_L;AJC+YGPz^?P1Z}gj9gqN#+bzxYPAeuR&U0bLI!An zPZqA9WJV&9X_#!7WS(K3;8~#U)FTy(licWqFq9y`yp<+dKq{Wav$GS|YR4C_$yb}V4CjZfcFX+cW;ccAeBrKTn$dxJJe~J$4k{_fV zzD@k5Kr0q-6Xr+ymUVu|z8Qy$dIu<;g0_sWr9sImWzshK%t5Qd#ZO8`=`C*DyE8|f z2|DvkBf`8hFDJ6woniMYJ)UXi>7QqbKIwbB+yw$Y*4B`~N-Bs#@6D0;O&-kcyZ7cA zVsqFvyq+I~x%?54ud#Y{2z5?>r9xwQAvU@8K?s_ky`5ATXakyc8^u7J4?=G$P!ybAo=z}r!SgbMeBpKX5#eGR4mf%47%2Vj#Z8yq-#as;qh~pJK$iyU`69i5Wa}sKTTJkR?A{|tGTh!f>0_#pJV-_GEeOE3 zcowS{mv~dEU(@<@Qn+6ew9^nlM1j7VdjClG@t(Y4NETG5*PdqA3zeQZBofSnre_)i z3y_l9PX^kVuw&W_gSy=Wl|Pm`JB_62v|DHCbola`ht?97XkZAUu9$C%m@ZumL za%srX$G@uM5jhovwCeL3NcV$C7sh<;=lw*+7zLIwPX}beYSn7QRw%(L>V4Nn9Z?53 zbe(AvVL%XF4{p?p^7t^XfiB|}Y!^@#ardqL+6C#r6?iIZRyH@B+XJ8o8{BM4jmo+?b%17)WV8ti}jT9Bct7n!SBKOcb%jSI4QZPU7*MI?`&4lNA@37 zeqT@)ndtm8J}5*v=mJt88x&-dKm;CyGQAWFB8s6`1s!UI3wI5* zc*S#ByaCl_3s#!<^z`AQliPtB@%A( zh~GiA>T+_y-^oN0Vv@-T?%br-+Q_f&beR$K#U?Cg;?qsis&QTO?4|s_BR@WM!ioxL zcPYouNJMV61kLB9gOq>%PzrAZ4#ZMv9ynCobxVgtQnUs$I^@g(Lf-oXxwfQQ1G zpg4X+%(Q4YGz&0P7+%Y5BuRX3rcCJ1MPJJ`L6(BnPON97Tv^X`Ay1@lrkrM^{O8)! zjw0o*ofywZiDskVg(79Iop{loE7K@=CQRvTt4RHCzh3Z6o>H@!GRaVZd?WV|S*n^& z%9T?-+vsL2Xe{C3{O&Mqk5T%P=>g!Z!JF#bZz$I=f-jg#a?#hxgm2cyYesAsQw{B` z$2lqGJ?R*%se*Le?~uypJ!uVaHsVc<959@29?29+o%Uk1hXZZVyZD4@|?>D zR@KHy`Q2UsNVm6({%LpHFwfz7XQsTFidIh(x{cXom}SA9dbVcOI)nI&*O=q0gZ^Gf zNY5lTswB8Llbh~&L*fg8>A~YWTx9t83@4*b^382@1B{oYd7zgLIUyNjLUh_a24YRg zAq6>;+z!X_V*#oy$47;-+LS>enG(<5t*(o6rMEY>aZ6a0yB8eN~k~ zQb&S!Os7Jo;IxYD{jjEJm8yiHz$Cic)_q{WJ@%z4A&_KT%|qA|EQU(He`H+wHu|15 zQ?a>E)08{E9=sqaYgND#DuZe!R0p07YsVRE8qz$Yb-~QdwWq1!iQS#u@m4w@iJktN zhcmH@SX;ZXsfpL3DjVha+>&}zag~J{^!h0%8>GUP@kJQzDBzQ6UMmCdTu`5E_NGCQ zU*Z%=ct^}V zC=YYD;Dx*}KwRA-%p)15zZkU2guf5PJy-*{%kV<(2o~P70KVD_@u(shwK#-jTq4gP z@4r0#c!meQ))MT?2fsS=hN*`LZ`uG~`Ga4zdBc1Mi0$fxKZ20IE1~QBIYoL9@}*GJ zhrEy*28j8LfTgJUZjK^f9ctc#;EPAhoEg2Ni_T};cm_EE0?j<%loEVrIw*lxUzp2&NyKg;ag?{*c?gsQy@s;={^ zF19T$+Bvv9wkG`53CM#stuh45|9wtmD=Fwc@#WHU4=gWrvNS9|u7v*TpBu4FKLSdu;J|I>PB2Jzi5zAOjRzaYnc;HhDuI|u!o;>rHenOcW` zX7yzu^sVi~{_z3psUXbHEaS6q6ls8cmO8IG5u~4e%~{~_Lpv){@kuI7sY57m9RatL zH@9e=MI;hk`v2d`AP57A&;Qlk8Sx2K<&Jl>X= zJm#8z48yXUF*D^Nk`o|lMg#Sf8slj-L@_JB>}f~+=agb06`9yJ2!;b6BGUzVR>*dkA|V;Fyb+1GWAW=metc3S#O=V(N%SRFlJ16T?-1*3gz}^%(_P_HmYt zG!%~fwHmdkOH)}zH7b}LCAegsK4+%KrhBcKy<+G43yF%U*pji;c*kqqbEm2QBfPF# z0M*#{H!1lmBkETeSQs*m*{*> z_1%X(@RjmygMC}jU-`iGEd!lM)*tP_bBL3x_XZ(7;PoT{+#^@*FVly2(7E=kEH5nY zqI+)38=*=0&A`$*)2LFcaLgMqypnt`@)HSmu^&9iqP$_^8%~s>yinX5q)vq&WWrL7 zVfh=KO6ksTao&Gk7YqH!Nr?)NxflsQ?vrF9C+b@TF*zpp#WZ!|hGd&LnKf?{-HUqvL_X5};fWtP>oh0~^k?f4PeWz}WAMTya?tWvS%eC}U=pvRe zj4k1PHRzmy`c%8$GJ(Dk{;S8cxkCbtnA$T;qzw4`DBOb(LN*FWM!!QePJ+~uHL&PW zel`so@>wJ~#8uX@QB(ypmD&m~n{ZfngNHitpnJ4?ti(xCbt27v5&iG53r~e{Lm(6g zNGl=;i2VN)b|Iy#Bxz@3`Hy(<|CLpc{#R*XXy;=2zxep{%EB`AHukng_ST>v$p1_F zzv7Djn)xrP)HdwVP0_!7H@e&@kCbwC;8ZM1bdx(C<)~UhY~kpz$^xdZ{cKBY%>Q{< z2`P5&6DSgS{GliSM2Cm}X_T%7oWhAdfz{XDe>&#g2jWPUIWPVO=ckVM=6lA+uqnxm({A(GWh_BvKLLSx1e$O)q0R zx5kce>hCZxPvs!)W)n)w+b33X>KkG-meGTE7R!onm?ucjd+FFE8)AZ{mw-onNbJK= zcd5pKZ$r&66Q$Zo3pbI7jf0L}h)Xs|%~IX7EuWi4P)g{ZOC2ULtCBD`bC5A8ba1FV zjC&%{KM_+}ks%(4D2py-7HdhT)ScM%P929C&{9>7_6lt>;#U*RlCZ_R*vnfXFJIdH%lMgtn9`MTR_)X5C?qhbx?x`3t zg=&_sfNl>bJf_0xl(!y-vgw^r+_D2?B@FpGe`0{Bab)+i92lz|L;_p0U zI6Mm3rd<;>HQ`<>v1Y;vI)0gB6uVFm$0P)HG0gj9?S7_h{K5mevGS*>40h=xPRIg( zM9%1045_?I^ zsovQEiUP!RY$B+`At-LPpEZ<_9V+@RVe8h9#WFYu($Kg@gh#M z)M&%uhML5gkv{1Lf6j9v)jrgs-TdBg8bVGUT~Scdv}I`C>2EiB|DpCuZ+ylm6$@{? z6lbl$+ra~w!w}L$Wz!itVh@{DZuQ>V)!}r6TyC<1tTviN@`%6=a>HmfTI>e%bkEp4 zZ+w89uF=G6-%v2B$P}ha#p)mSxnDLK*Z*Z@UdIw59CD4Mpm+I!&$d);^bSJ`SF%oz zlwX!=vN9J38~~?G4B2x0%bW?}J>3U&?d!8N`DXjJBj_0v-8*2n;J%fTI@H}S^vuRy z$8BNYUYF$?1oDn4zUJOY-Cc5Z3;wni%Q@oL5BbbOU$5^F{uvRwYTr8UH-hjC-TfmA z<(YyW*$;0?wjYW|6r=gzC+2}=c>~;u0yHEs=bSWCFbdPV3*P2sya(!MeVTl}vFB-@ zqf2~MmPw=RLRMc%Aqgo$;&X&3Rc0#$bcYawG*q7E%{@k28mTH>x33`XZhNHYiGx4;ka0GTN_BH&{2G1!{Q`o#j z3zGOrv_6x03r6JvnxsPXYgrp1u4`*P<5&&aCDdB8C3)OGSAyusfWijW6 zX-VCo#-dkf3s>q^gwm-DWg|1mFt_AwJ-zVW74jr*em+>idvmM5XF zc4%1gzZZ-#=#XyGd#1nt558MYwx(g+KRPNc`G3`h|3lpB|J4uvA3fiHV*kZ|!v95= zrnk@HQqp(!80o_(Qn0`*=-e%0La;>$2p~V;M;~&czSPoP8nV7_RdcoN zouIXLjztA%5mNgfi3JSzju85d^{T7t=elKImz8DLm8GTT4UA{+YkP7QNpi4r^Y77* z>zi%o8Qz(jUoR;K6y2Zr0dPm;f}*r@ngrGxRxKrNtF}vdChD% z!3AzclH!!v^=O1)2IIE~Wx=-UHOHnNvmhS)fug31EKu{^E5GNdB6#ZSHu&_6j(73i~8$Ip$kSm zXVFDZVM7XJw`{|)9VA z9U2?1UCjP5OVYP=K!|>XC9Qn-5Lz38f%&yE#y!te*D#HEJ5={>Se7J<3Q4Y;>HNLK zCp4>{?)T)}i5;Uv%goWOj1{?@Rw$&xkXoCtw`e(#3y{G;PvkCHBy)CU zyhYpyuo|tX>VNB?tRWY~Rukt|`nFsL2g9r=Q@yMb>t>@ciIxuz0{5RaSVdQ*^$gJz zq$lt~$ejF}=F*=z}KirL}rXOGr?`Hc6I>r_-$8;6a^=o*Y+&*?{|n!{zcTYFR%E`w6UU%8Mg-fZnVDavc>?DXSIM#@oCqjI6CxS~!=W}9YVVZJpjO^-{u0Y@8)%vd6-8G++*CS^_JI`$idB zocj`Q*#=YP_(9@pFiqFqkb|$L>;ba)W!WU37?0PS49HbB>$V<71GQpV^76X7#6`q0 ztxfKA6(gga=h(1}*kliA61{Xu>UYJN!8p6P8t5D-UYKkZtDYYQ@t&altnAd|(Z`uU~St z`il&kV#fsr>CbG8o5m~4$>)!Y*kOcdp#{$OvrN6mvoCYY=tsq;b2C&tw==9`L2)lm zV`t7d83ef+vJ9Mh9LRJRq6acI6=FdLQY1v>?CmtJ%-n2T5hd1o*n)a_IF^A8zfN#H#===BI2FsRq_q&iK z%at2A=9r&Vu#Y4ksi$MVO5U4q(afJqSSKai6t6Pef-Tc&PkKs(2r@`qo+i%MQ*K#` z+d)l-FBn+C^!phe^e8fI!iSn&M}W+}LqPpK^S1}-sfA1}v6NVo^38bh*l1}4tdwTL zxwCK=Lfz)&J@NJafOFLP(h(!s>M~B}B zB1>WnSqG<~`%v=+4eJu!2h#QYUw-DYCMBe{f-PsU^_a?l-?Pf>J_GFVp6Z`F1Aw8+ zgkZqFB;`E5R506eJSM{w?CieL5F(P=!9eS8kT#O!RZM`j{@UUn2CjRIng!DuHX9+m zYTQ#rZ}HFEYEN48WrQ--$k0{GK`k!)@Fy43HOA3I^IoUfVR-4Wjb-27+P@CNybGz^ zBpbfiBvW=~5E*bTv{L@uE#Vj>?D}i$79yn+ZH}Xw%%POT#xs>U#$H`y2Vtbl*^Ffb z3+V)nRR)e<@m}qAwI+d?Rri_3d(vKA_;hFphe~CR0bwbrP7`a!&}& zWtpypuF+s2yDBjOXJ#h^w3wy&$g!w4+Jx!j+lXKahZz=3x(&>>t>0#6nYA(B>h!E! zCoH#_UM7BSCmtH<(LqB$Mriz85Y=!BM~hGC{?^@QrL9-F*nIh{m!V&nezRroy&6|j z(B?br*uiP^a%!tIkuT2im>w&yBTZ{W!$q7x18h$m!uH$wCJN#sh>qK2W$Y&{k?1T( z_btB`305!OsIDW8YfT!;)5`{C$dP36qeh@)_H4`lN*C`=h94k{_1UDT;>_iTrc+Tw zvrMXJqG(FEO15z#uWoYq%>p~ea(r$f$xZDV>gi&gZNXEO7Tb&d6my*MiC(14J!Hem zm9<|Q>_@V1jl15N=FT2;W|gtPnaKIBj?ljDH305g60FHjB0TlVmy)+vBvAWCQsse8 znO)lgG~OD+PxF;slTW%fokqy23f)@WS{lB{k}A;WaW0aUm&4{6LzZXIcv6fo?0&ME z*tL&vrC4866SI*q1Rg`>VL(#OG5i6^A;X4_Lm#1!Ib)W&dth6NY(O+~*PN<>{rpu8SwT;`kPaS~V?bsJcn+L_{nQ_Kv)9(U-v+?|vH zqL}63GZw7D+%poW=Ee)1hB3(zyQ)mZZA4*jQnD7n-7!(`E&oFifg&YTq|A8sNhT1S zfo1b`KN<5KX*s|&;nVNm?hCh)a(9qwc*3NZhGa`L_ikMtru=!5k`X6?e1$*WZxDNJ znkEMCpBZq9pfxMBYMqo=qGT*6Z@hho!VUR%0zECRd~fd>qt&N(+D=#>D^q0+__ixp zc`dr|py7{P6`e3_bVDd}bV#NObc}{W%3tg(T>2HI0IF3#F2e}DJuz@yV0=?D+MyW9 zfGrw0%>*8?m`7J7L6AOYCuE4pH7g_v!H%#8vpS4XlwJ)@1odz!hz|XZyr&=KoI-F^ z!RH-^Z?()Y&@T*M3mkh_l<7B44IPPQO&(yOi6Gl|# z!AQ+p8uGL6TDL;!bD+)?*)rrI>KBG=>JStVpr0HYk(+vq zw)!h;5i!ucF{+E&NnD&O@Jdjp`2BTpNfL9SCLf~b>M2Kx#aL{mI#)+Lpu$}37ckW7 ztBr{Y^|p?Tq8Ej}gI_AUQ%Uynx{GEgC_OopXQtVi$FM)X`qTZFTDq%?Q|Ex;DaDIO zoQkNMf{{z(oav<9dXtyJJ*Ax}_+4OTECaf;HBk#}hRNg`)z2rz@QasrP;r{b821B2 z_LW%31Jv*XhWpmo2aI9g?E~F?pR9OsLZ%=GZ^QQZI;3=@1;>%_x?GH3T<gXfZeAH7wv;3uziG>x*`_(O(yYS4(Jvppt!mUPBBj{HT1brc< z8r?TS5W73H@;DNbNo-4{en3vd)ggUQq=BoI!OT}YcSxcYYS4*_uE!?UqhHjDq`G3> z7TIj{%PS+s(b@bV`Ut@g-@s*YsQTg5#3Rj*^ zXzqoPx_kH1)OEn(TjMjN574x3Vv)565D*cNb6rD+h+aV`ZB==lm>}9PayJISHsc|8w&>V#F0M<;7be8Qsj7ZeNfR z6GYSCoGNcMNO(DHFG%^k0n!?gTJ>Zw3$zMlA<3922n@3x~s&) zS&i!(4KQnTolU^4Oi1XHD{wAWcAeTVFABj|q_A!4F`8`#)Xw@5!}ry~cj?=*yToC4 zOrUsXVEhE#_D$R3D4o%^<1!qD?2I9H=+TZ6m}RdMrT!+WOq7`BRhlpR$WH6Ya$S@p`2zoxdQHYl(KliaU0#VJ^;zA~)Jl@LkoRq5!DmJV)6_nP zbW+MmqV)voo7q|ZQ5q-lYOLtgbR?s&HRsHhD0c=6bmvtx{_%9JgBcT=umpC3u@c*{ znH&Wy&{f4*Hof61@FOqxq{XM@ko8;I9o*?I7| zn9jl>D3hw553$N5EeieaoHTIWvuV$ktB!VmdcvM73@NVP4-ZYWNrSJ`qwP0}PIIje zh@4#SPr(~sdD2ta<@sw`hNY*RCIwo1z4e%Gn#iP-Q1^y^@1t#d9xF1rrxS zE(atlk$X6=B;3=pUS91nge0q;r_n-#;f}S7Z@osmKTEW3TcL7+(y2gJC}a%xDs!*` zt(ms?@f^xUq8kf4<_jqX04IPZd}kJh@+0R`@deDRP?MD-L)nZtKao(X6_%1_da`mXQIBEwy z`2CG}yp=l7I+50RmBOV}Dnq+6kx03sT7j>_bjd$T@n8|Fv>Cr)vx;>ZxvD$$$C(rJ z8qC%cKs0j7w9$w1<9J2u^&iR6M27`xrZrqJuM$yFMTY&i|keH zCa%`D#=6?!crBT;_#4lp@nW%XEhso%Jk>XVA+Hx0h)5R7G{Xu#^4F`^x=^A$ib{3g zt}L5)+2Lyy+#?Kg)~QJDJLR-Pev&tGu13uwkN%JjK=1Q0X7h!k&Ut}kfiyLQ0u<*YZMD950PPA+orL+tD-}KQg^38F4{83eov2Akd<)go0zs1y88T&dC%Lw7 z>g~h6yBW0K_TyOjW8?l%WIaY^P)ZoMUz}ou_>%;h?!nN_lzokZ0zpGPdmQ6Fv+%{f z~xid+)VajA(Dml z5PlT1%FpH0Ud%^6zS&!IpV8`J?|*I{Ci2vbg%2ZHX^h4j^lYgL&%wAx_%Rh&b!&!$8&iG>&O%?>8Cu$v41~;TKoY3qc}{Ns5Y9gg(8x-f zPEN`+C+yX2P73>0DGPWjXPLDnBpKgd(e_N+i7()NnK-}a>roD&fN?nqPawtkf_=p( znQoT>M$eGnQ;OmnV}9Ugh!LA%J4$oek#3)YEgVa!hWLOO*h;mkVVx*aKWo{3j&feLzV*wWMlej^qk3u=4! zZ9daosR!<_I+4^{eX{bon>U2Re>XgxX30Xkxd`E%Zjj4|WjK`qtfysC)b;ocb!bDU z{nRc6Nf%<5{cbwtljX(Y>T}i;9_w^VGI*s2U=sqmY3W6jmgTaF^D5ju&OS`C7}|9F zH%L7BoH`@oVk0Bw0rG@7$T^xm^am^%GxU6Zd^?BAhFRP*TrG=S?%l4{^IR`~bdZch z7m%ru@?$3UgES_J9)HjuGJpTTZJYcRcq}Vkn+<9=Wl1zV+{@Sue-Mvy$%zRM0S6PD zMRH2`piTA(f+(9MF{>=;Wx-L$62Mt4z+XK`DAfb2{$Q`buBkKA)AdR}asHCX&@z9s z^(dFx-FRmfaW1c{UR2h{D(YY4+nwW<&bK3fHh?cI};Ng%7O)f z3R}=+5>;08g50T9(^AbOTW%t)xD`%xC=s6+C>rSvEr+a+QX{lky>MBDPr_JGsc zavImy+-dn#Fo9)+CGvp|bNoJt&-~0#M{bBlrw_8o)UQM26{Z?LfmPPAJL7prIC!(7 zuqnM|VgCMX&QnUuj|=c{hX7abH)>@GHtz2$CKWKhI!{e*bjNcg-s!G6s;F$o@jfN2 z>W;fiw0$o$d5YI60_FQi}fOc}>!x+4p$>XmRNTR~;ax=wbg zYj+UiVwzdhS@HFMv;Gw(F<$>EDz?FPucKe1-sE%d)7#WLc4jDleC369{02WYJ65&2 zKk9>K3K^|j3{{}mAyT@rK6*#}+b!Q!^XKN_=$&E7JIm+gFYnB5FG1@03r{pS@J^%% z6aG!dFZ%1*Tg)M~@v!&acFX0L2KUtljZToAm~l#3c2)m@GnMpnzHoJYpjCXVt2*~x zwZ3Wo%-R`UwgukXd7nY=iK2J#HB2`ATNdrH@oiTYBr0eB zD84C*UufJn+jM_J)W^fe(KlE*r{v;3*;lh4j%+4A*DWmla0TsB4e>Z2kH{W*)V@Bf zdq|^O*6)T9uubCkC4tCr`v}eRMBL*S><-vGc!fLiqrH3;nd~jeN6rcNeAUSeVi;_D zRjM517v=pbQgBDRn;pdb0T(GoS6z}V9v)5BDoi{lD`&l!O+FXbPg<5CD--WEZUZP3 z3n$LVk8zx-E-h(03CNkxAwC-X$&~Rt;o=>c{3$l(ky5m;sf3!)Gvus>W~uOrhONUG zg+-`V)*A?4QJ5;bcUTfSW5pN!Co3Z)_0<}`e=V3G1$8)M;tZZ61>|q{q$~M~dYco3 zM;5_;w6UOFr!E2Q;XTm6kjhc5m4RT&_41^*r%q3GQl#ZJPkmB||Efpn)iHWh9c5KgJ9$Cr?11)-OO&ms4B?;QLOSz2 z`e#BldJy%9Dd~gw)3H;7r^@ZfT%0?EtzXD6x9<-+U-I5jw#Zp)%L%;Gf_gna>gy zbaFJUoK?F<)Rej>A~PXkGK^S;23v5tmS0`Fxxk-uzf7)n#;+CeXDXfaxVTW;%Q6|`nOE#26NgsCoaBW zJEN>|$jsVoGzo10(n?O(Ai50F_^l$FzPYzglS$kL4?2Cb5wi_5lc3R61p|lUD?&(m zTBnF;ckFLw)}A9Pp~9&YN!)MrS0L)?E5rXjc0#PBt9|%~s)<7b0b&22j-6ypT`cTP z{*OuH{}ld<|J44ABy~*>v=xjmaa>JfO?DxJKzLSCTQpDP)Iaq&B$&p5Fi_AP#i6xP zM}nAfWTvb}09(lf@~Qa{a#=Kq09sNPVg!gk2&@9^^Q5vXHy76W@4mk0()#NRk3B5L zn)Rj*`jssI22455-_F-=TNXRra@x9Wff7O{M)g%0u9jQ7WFaypJ#^ci?~llgy) znyt&3M^9o&n9I3mD_JVKEQ@uMHLty71!L_=v`Ey$M)q837(48`E7oWet~!~(8u^)_ zXp`khY*bt>_K|gC-MZ`MEL~m#Tke%c*JisIR~Os$O)A6qt89*hvSK$n>79_H^yIo% zV>ZP%)h5yfNfzq8>st{W+zztVf#@y2SH+W{C`mt+K5Yan^7p*ed33vlOZj8c&9*(Y zL8g$Vq@S@*7hHdqQf%?;1xeYf?$far$Ydl>iwPWM0b{m%-~6+yCZ86)@I*qXR2F4V zae+0p>7jPV(TxuAjJ`aafTr}gQKVB#WuJtG+15NV6)bmRVlAnRyc@YWpVY}bAC1l9h|3^S#;>abjE`VITuHQ9kzWK=C0NQ)yg84@CM zVv6RSrWOH9#R4=?rCkbllaj%v#**tU*Ln=fzfhR4Qkafcs9yHVv^aX8awiKR{Jpx0je5)`(7t#&=RR> zN(%k4O8VwW#znfxzV747mv+8@z`*`KOZ8L5a;-AkY-1Y!UvkNP66Y}E6q8V!bg{uu zterHO-Ib)Oh&pzw3IpxBPp$8S9pFrZ`Cz7LgQa=-CpQ(xdoEVjs3U7P2_2tMph#C| zrQ~M$o~l7OlE09Q6SA-h-?FU|bHzB{PGyj@V&8Kh_r!sTOLmGe%QXbzSN;s&(KBb+ zR8p~clp~8dnb=+n2C?T#p(ga_UT515BB9P~$$+ zY=cJT1%<7s1kJ3+b-{5Dgb)P|8d4Yfvous*$7$zCZoFEDfv^aAf_AT3YAs6j?;SQ_ zP2bC{uM%s0`L1L(qVP8*23@J&SShw$ki^*SsN70eZ)p-?~d3r;c?GA&>#hs)ICRL!FcvgGpd)jj#r-^ zpbQZT42~`)lYVomeRVDgaMq5mV5)CTI{wzh@-GLey88zz&4bF*krww7o-1?n)OXf= zo%B!vog4|5$`0`(x!Qf&v_9-J{S0LauYl%$hFj_1pEO1-f zEGmuE9w`XxDPu3i7S7q_Y_PDKFV`w!EEw>L4QhR4W{ENn?=7&LkVh)ySqctGkrx=9 z@(()x!@KvuMHlMVRD_j`u|gNRs$De5%i#355z2`smjP^M@{hqx=4EvrQ?7*Y#^GsW zT1^$fPOAhgL7$>c^c!FKpS1uM$lIj}SVwcT666%M) z*J27h3RI9o4~abp`w+tYSc$r&eWc?)O?Nj$rDu85Q#+F9Kfum2;b6++;8MMonZF7k zNeou*?4txO6h|@+1ifyLELw$#R^m2FBfuu%-#SMy{4^Ri(tp4!l@$?<`Hq_ zl}}k}=smWPF!Qb;WeSJD7gW=_pnZBl$>iKcLqGwzKm7vjQO(pF7@U7v z!ii5L{(k8-v52^NOASOz#F}T;rIwBT8EM0VqPr-XPh0^c10Mai?|irg&Qbbb1ASLBfRY)b<|^Wcpog z?L~pXe#LW)c6nvTR~oB?rcEwYuM zSt<1)U2aPyIrl1Q@51H@OKOz)S`EJliQk~rM=(6$aq1h@#?3FDfRnW@PkLcXhQqhebS!oL2i!;BbEujwVCrFoT7BKrWg@Sg3ypf=q!A1 zrm!uEuoc63vfioV!^e6N_RUe8*ppF=9LOMr>#B@-o?D#ssJrk@X01-c;hT$cBJG(M ze10qL*Pwsu_s-C~6X9Ha*F=1EM2xj?36mVU#QX>#L$~;#qRB;gy+Q3&K>33t0)2~O zem|4*z^5a=_y17#PSKTx-O_N_NyoNr+qP}**zR4@lf_G9h1t3>_ycQO(2{BH)ZIcuehMg_jz{SXr+vVqZK!G*7|i8pgzVZ@VU2n3&!hlG}_rhR--Hq zwN90o*bM_Z6auzd4B@-5`P6%=n@f6|1Fu&4R(H5{TafS?f+Ks!o30J6Bk1*DeT`rV zA*t^#s&`nd6UbUPq1m@tiqU9<+IYg1WGzQ>NJh_w_1XFez^{CTUv!%y^DSy|^E z4e`jmZhC|3W^84)ojlfv{xrGRxD)(OX?1XIp>6>K0y2*S0wVB#lUDyj_Ub>TfB47x z50zT_-l`VZU)}O^iSZcFiSfy|%Dfu!i8KluCt|RWr%UEi+N*w`#ix1j4bt)|xuR*f za>Xvby_p#~qI$>g0lhdJLCnqJ&IR+Zzq|@mtDoj!9TvatvJ(;-_=CeX*si#beR7V! z-gBm#mp?z&03d`t>cK~9Ub*ax&D&8Hh-p5R66P)J**F9WoDlu#@n5{oXBn3!aQ=_8;GXrJ2CPgsg4q>vpO(-+E zBLPX*CcYqt*V80JIFPZ-@k&ZrFtCVYOOIwON$hpuYIXe^7EuTQbbAMbQN#>12A4E=O z)b{1Au@6Kxuo_z4{Eblz(e9CP9I5o?ZCK8@#M^uoyiO@SI^|3@WQ-9 zqgZVfYS=Ckl>6zLw}!Y;JGeuiHfoU_3heqLLK}euf*DD*MKha}B1eKt=@6+78W!R} zUQ3Tl4sZ>FZD#+ul8y%M2l4X8oyxJOK4RaRJ;Y5N^e%wbn?`*j-%EyHmnm@Z0@`!L ze~6l|!(nR(7j_QKlyDcB9W}QcE*eLLvm??j+}x8@K=Pnn(tWQjZx;+!j0`ED(_qCu z7`6c83KQLn97eN#RVlTl$e6mbw=4qclEFX%UC8DG#!o=$mSwJ&up>pIK} zwpXSAy@wEBr0VWLo0V*PwaZ!h>+=V0IH2mhBMWyCnCuW>-&nc?;~Ik<{+RlsL_b1? zV9b@Q&CeU2QtVbb-y-isY9Z|G+b^0qQzx(W*-rBDwLj7G8owpe0*8p~$g% zoop3wpC)P_=UISQb-*9$02AP#{lGaHPQz9Jfna7{mow<3^ph*Am@2kyrA{>&usy8{ zY!|MMQ^0DgMBFrcc-@}7oLHX99uS%vi2=%EfO5PkayyC7Hn zeIQHrHrb!~9f+&F@to84SyAUAalia>`xS*E*pJP8M2G5W4i5w1<@WMuh1{J)=$XhO zS;0S&T8nZ)yE+d2yX$^(FTEL?*+;P4r3w=@S1ntuu?J?5(E5Rn?e06(%Adrrv((7% zH-7s!C(I&YBlqV~W|i1nR5Zd<+Nqt!02C!;=to^0QFwT>8(SJ+^rX>z8_XJ;qr$z3 zn%T^R+sTudvmeq~bFVDq9L4|xeQRgF^Zji1s=~2`1!XetjE->Z8uk+%wMV!P%wt!+ zDp?y>IhxzgU~-TzA}%QmL%f4!Ex^O6nF=B3oZ4Nu`4(J9HO(NL0&)8`#N5WqZ~E3wm}}UH*BSkDgzG{%?mHdtzNH=&D){6>UZiKc zaxm7B%LniiIK7_k^WKgZomh21U}A$^e_;h3I&De}2*o@`if&ZWk1UC7kWi67f*s=E8sf->EN`g&Ydrc!U9=WLJaijx+|MQLNzxkL0E1)=zwGJK zVp_>~&>j)-+W{|WH~IH82H;&r6bCRP=upE8*3NS<9K=K;F6K`$o!5B+QSnZ`g@w*cn0 zoGSz+FOmKB{`iv}n}JP^E{W(exoU`{&|`Wv1K(r)ehIgzrpTBz$B)0GP04sm%bwDD zBg5(l_`xF$duE9lh^hy>$2Bs_%cbQYd5Lhc*`pozfhkJ0`vo5}!$0eVR_>nU)MY(GBjq?pYug z)i2%nKxMmHX3I+o812V!Cl6ic+F8NzTFPP{+Vv^emB#<{+xPxLJ9b#^rr&cEO|CP_ zAA*h2o%*6t%+5VmK-rzw>N`GseubO5^2l`HncB91Dn>`z^EN=RRZF4Lb!|ZH`P}hW zEvd{YcD(1FFvdXEfiEz6uE0Hr<2#6I90u(a`P>Y-ik~}9lP*qeES5fnjp}te>Whr( zn0I}U6*r#0#F~kzuoG%G{jZ;$UxftrtN>4JeWTqN;WM3j2k$}W#E91UT?KVD^>IJ- zLa;acA;wnv?IJ4IoJ&V$?~O;f(QK8Z?Hh~xE|)W8tPB_)Z7RC?B9sBpW19JPdcM%b zo3j@z(Ns^5s8ADo5w#)%v(YN!yE(_cG>JsiANQy~OW&wF$BHdEO|P8n%s2}i>Mt>I zZ@9B?Wh7kIN9f&E%NSb7LMe;gfy>(c)o5-&Ye|nrRN}=%#W~I+X@}u9naA@`AVk7Uai$5t+ zu+IOhl&bR_56|rx;ZElC@9{%3Uw+(rd$K6O+o`zuJ7=E!`p)9^4s-3E;pK()BXNxkBpT26o?3K znZ3k07VyvE@a4h@R?#>jK*eg`vU>GVvn#a`82uR%4Pm&KhO4n)sb2_;)s@id&~fPd zsrU#vOvWfKk*#_oTds4_yoejqtnaU_C4NK#te5POD!y+06iGxcVvV!2;3J{oa^C;KQU;8oEDC0 zg|e0y(RWgG0TG4=<_h?4 z4a9$h|L~9eACfe5RaG_7KHUSjM@M%_aL7H&E7ifQ8#Jtm8^NsQaSPF*NvwaOAP}d* z@^itP=oKnM*9X{2ycwG^k{Wbfz{ubniWcJ!)e9>vYt+TCz z`}uynTnwVHmo3y_X^}s;keK9dUZJ)?cUW+0B49|DnEx?&<2==7mP}Ep61%^$s^tvu4#Zk+sorN*6E-ipvfJ?gpA7dUPb^yMCm?U})(!D}u z&UF2#;y}D#d0FLQw&pmB_|NI$8N!?Yl3fmLCxag+^r1w>Y z=rODP<1*v`+ONG#DUY)>u^9V48naAkk>60D(^`y`bzr^s)}jyyw!KgV7?cz;80C+L zG{_J4g;r0=loVzl(^`b*ikQQdG>G8pP@~vTC2lSvkZ1FN^(L692+huc_4>9Que{7F zLv4#qdgVt=qWF^8NBJghwejR9-$fd920hly_CM?9VIf)k-KXy{QsC`BD>(mJT&Al? z>%<@D|2f?{K4pg+4__@N4Ue0YT$3*`PMp^7O?RSfI~sCP8+OzmX5TRCod*=N3_-0o ziCFLWcoR8Y&)RuDuFn2GvQ4V9X2`k35w>qQR{zk`QuW56Cu&k`U#z=OboY^!C#cd7XLV~d zjplF);*qv31VT8_nvJULojqMj{1t!_rrU1 z-JKKc(TFjZEL@CA+T?~xI{$i)mi#9TPiGlxi3>6ZjrZGg(lZabLC-crkXE0+#T^~Z%@Y)A6KjvrWP7STxHC&fQVMpNeordpm%`n3O<2qn$RGd@7alU% zF<;gYJ#b5b)GP?>DX!u<>#VHUNegkAaj!8h;umWTJ5Fbod>&A#-=`r6S5#hR z^Pztxlj10SAn?~00#twWoWs=4X)(Z4qThE2rmiYT>K?&u zJa8r@eODlg!fR8Eq}**m<@#MU)de4ze{=>W#S0~+F9fD!0V7`!+=#xCd9*z)HV=A#=CFD3w1VWTYd+O{I%Qh;S&k{I$Bno9 z&wghENd2`jJfYfem>>61KWT5U6`WSuzkh;NhDb*bniQ`@pWY_m^<~K zD5*hOwn`!wvObcF|IV5HrjC2~I;~lnevIW^SdvZ|;1W^xW6!ZPoiaT&-#QzcTpjf2 zJ#oeRK1~(f_6_kr4;If}I>QHW5D@9_|CfHre;q9UL%-x7(?9%U{fA05eN9|-v`x-5 zHnObWVDQNphy5y|Qelu0Fzij@IyK*mlx_;nbP|~MjN-!+Vl}qgG`@nWyPp5(tW_N9 z+@1sqihTvQU1dqDh|E3ur=+=DW!66lylt`m`gnUo_A75;L~70oY{(L1gKd;F7qC;4 zJq^&OSv|DovA9}}Jc`j~p+TSjE&?r=IpJRaSW%{4pLT$W#cja#%aRSwA9Pq3R&VN& z(oVe+CbQK(sZvM6h;*x92kYvroM`Iu1sM#2V?U!9qQn%$qW@YLbH;jGOWl6}mL?Xr zAA_{$SQ-*&P$p}1guc)|7Scb%l)n!bKx`fL{W&^Jbe6;t}QmX>M%OyJv}}v!wFrZy4et-dAZl{dzC%6-q25}%|92S zL1I;-4AULs2}^NeGPin%(QdH`{>oITb-_mcu4T#k7+mG4%Y>S?#S~2Ik&o0=15c&Gj(NDn{e{u@LetwArdy;R+kZP_7qCs(SLCIoxK8Vk-=CUUIPT@7jsHNLXYrO<& zTAbP*k?1xsg1bk}H*OsvurP+2asuem6oMYy1O)Ru%eT5@anI-lF4Ih_1Fjyp9$IaA zmJ*u>9P$tjdn|cDcrm`eZzxbUe`|{zy$VhJ_?-!kcuU-#@FA}I+ab0%UF+mqr{eFd z<3C|d!UbAtxhy*Q%mV28``Ltw2a8W(*~CH#eohl|l?8EPwWk8zQjJv`1`i`#F+O*+cMHI#C!?y&5=5 zKxfU(mqZZsF50o9Q{_SEk>)XS=@M#B+edlJxhwoBrL3}KqVigMXt-pe6Ys7kHOM9% zA7$lg>ikqH!TD)*cbo0AK-^XGcackbUu%)M_X&=`7&JENH@QmCGiD0G2yV+ta>I#q z{H*@tIjKa1>2GE5)=Dg}FYy0-$>76qvGf0Z9pwEr^^pF*saF+%i-WD(e}%IA4+{1l z=|B8?z&~WE**KsmBk^NW73tRKpug31CGCOhRx&n>mA8$;z$C7*h0xt6S247kd(^&e z5*CK9iJ|`T6CC4us#D2tkbke^b+I^_NOSRcJg#;S1ew@p?uTEuD*7`-yLI36gS4pq zLT%o@*=}5(zmb!Ng3)D}gE!k)7kkG zT~S$b#DjOK0iF8!ZJ|bq#q!xppR>7mISUiJlv(M%n&GE4P)>EMP8hpKvHthhvwu#?vTcHa~H_;oUt$alA@A;;&d7ZR+$ z)50?YuGFf{I;Al1wvBTxjZ_HxsR2kalFT8y$PkVJejW7v0Ih}3eS|riWmHJ{WDFbo|(km#kS=nz0%bd>gxDp3Xh$`HV5kghZDXx#uJgS85%Wy zxNvct_|uxla(hH4R2WXOXj`A8`YFo-b1wtZKZzrMQ=Q8ezQ9PVy|zaba~iTn{VrXV z*M|nOdHGnyBI0l-7cef)(^msC@U2nDM(s`0jc-hfH+K}&9a3Fc7;bFZOrf_0)o9#@ zt!@GR2ltXNGch2dsbX078NwQL93%&^_b)In1wOus?^-#(!sv8ZYmdxkLuObdw@@P> zPw?eq2sefKxIZ9KbIioEvqOoNy2P?_kY8QUMj}1#zW;*xy_EWgRH@i!AtSN>1YhBs zhodv5Vq7DmWjcE}`i1$67V*ShV(d;l<;qYOX^s1jBU%QenPCDYEesCwkpz2_SS2`2 zC+Q(mDJ43hO76OVIhnn>M79uGR}Qku@)n6y;zGww%4`2K2>W+lj3sx+I|EOa%=f79 z>Xv#Q>@C1tQi*(u@h;UL0f`%e0qzA=Rd-K_(%Q^Nou-^sKRKUz$bgn zGW8y3^v1PF6=kGC&ph@Z`7(;8#NR`qc4-EV>+I{5Cs)^!&t>5vB;nN*pH%y4r#k6M zL|qfvtjC#G-p3hfA0NlViXgBf%!Tsh*&MV#JFKtnWOS|?=G5yKS=O`eVO^SSuJi2| zTRZL7HR|UYTM46#Z_Q?f0y2zEEHB=(KMgFPJ6K)Y&2{KQqzr6};5+pdF{#S+r^B^E`N}si!KVfJrVoKcrL)svSuauu!o7aQRTQ5t@=^7}cq7Xc=S0sx}Wu zJE`f3tMzhGV2Ld5dxfmJoFtr?S1#>xfX|OGd$!wiVkKIOHrH+H$osX7ao3t&-fAjT zO(V_6jiDCDPVH$8)4z+^JkCuj+xb+2oWJ-2Y(gMo_h^haq-MF zqSC+)*2nDqI2Hn<{}An6DtEvRFguzoW4PC(`RIaUJ*GYxmA-fET0LTHuY_ri@EY9N z>pw`UK&vZaBnw^4tQnBTddcAVt}KS>WOmPihz^YU#FAa_XEV|Xnal{!Jfj4!={ z{zbkWY|#+YBY%#fE+7Uyu0`okkrEr(0wE>4!xE0;q=ZQwI=h@=7TV$+RXnmrd9AY4 zR*|HQkPM~CbVlS#Em;Fk*xQ(p9^r++B&}rlswALYCY?HIV4b6arJDLTCB&SGHY3C- zny$Iw$WcE6We9%lPUf7#B zl-63zYfSh98}08taqD_^A*LltEK>dy@?I>BYblf{<3(aD(Ga@Wh9$CIBKZ4MS5#38 z0Ogh8e^wV!3!Qc7-$RS$uV9w^-=2yp08XK@P!rHkH)DPtDiO@vvc-d zdezb)CxCvoOzIG*G(Xs08H#oPDUH4pFs!k(^)Fm)amq((XkoyKqXCY5NPYVj+yu6G zP7OGK$?`(h9P2FwTK~Zb68}UQS-c{0@5B`P96r#0)BMDjUawew-r04yMlK{=PI{qP zYksnEPjr}LqH(my7Nq#ss3zy_Q{oU)4-)CmWX^IpO0bhU-e$EzN3~v}n9>tT6*0C6 z$3knD&E2ke=W_BK$ekv1v7dQmQl@IIgHGQ7!6dcOA#~>6l=Q*0bsc*9iFf27qOa~; zA^Ua|Es{&;v+Lisb?SqAfJg>UZpViQ*|25#e#~*_B!fFhdTG^j{T_TqILLoD;u8b5 zUJO(f7%gRq>N|w5!Xvsxpk4%bA3b^{{%xk$G9#6yk~+dJK4-tJ6Adb!M|Gg0|n zg1vg`KA>s5?6S&RXcUH>qK_t`8bv1O^jYKtx(y7E9!d3^6g$k+A9Tc<;cFi`&*Cri81w|%mjp)mq5KIc0ksa!6VsLYdl8< z#rg=DZ07!Saoq$;AwX@;#0hR)C^+E`Tg_)NlDtDGQMuJmc?Q&zez;@qMy%l&aTw{0FJLOuW4)8qit! zk_aIZvjO^$0wc&(B~{LqDnHE6FJecH!9Yp51GeKhlT1Fr)zwxp{x0V(>&g4rr~8Wc z_zLxkuK}t@xsTk@lWj?t@M6{a8|wOGwioG^CSla$gE;BUD?djo&^5tqFNLL_}v~`-WrBX#hMqSknLoEkljt!yDr=)s9*D zViXi4#t+R{#*MTv?YOO>!54k7#h0FQ#uLu0RD~7;R$@X3FvwjPMLX95FjhS($)ZOo zQMv~O^Issj+9l3;(2HhKT_cr)6`x{k6inl~M!fbD{*qOEnmy=abyai?ZmpeDmUMYq z4lesjcofG|sHs^tohCgnp@sRO?KMJY`5U#b6H*)b-|X@7jv4Y3RidP%a);LAuS{UV zvb}1xOkN;>s5XEVGOdV<)-7-)6rn6Vt8k&sM7Ak|8&T)M0tgutW&V?)+4verE{WVs z`v!3ob2^it^=N_lXh8bJz7!I`)s%az5C`7tjVH56(>^m7QZSCRLC=(;Nla9Qo>O7Y zMPbS1J}kRlWZDWD2}96MjT$J*ok-tcF^A6#J%?KNkt|(cnaPSB4rXuD7Zk6S$THut zB@d}ZKSLR)YG+s3GXb`*kV*X4$-4lVl~ae^MeJn23zNr@Vsz9!%w7$BO}hhP>N~nP z3RWFwatW3Pg;=lhW`BjnOtlgZjGe^;|1 z%J5eC1j+Jnm!gqQolgW-W~4~V7kc_H4ga~SM!U-6iYtTWxo9Q@Mu0<((Cl6niWqfL z+##sX**JtIkI2~Gs&Vf`EFgJy&K-Lfl(m=wm^ON4vUA{Ik%as`SR1`L!Act)9ykTb za_q5FpeF|Ge+p0e zt-&*h7&i+u$j(YxE1o`yqup>kXX=tMN=Mh+b+1BZQ&%=y(F?RG%31!-=Cv-6YJuyf zwn^k9K+7bUvx%`Z6ND_?V1UH@T9J#IgUS`9Rv9LNipF{Ig9k%5A3QDyms9%FWA~0O zHDP^>%Yio4n{yx5`4w{$tA}H>C*^Qo??t@mD89OBr0L{``B4rH1@8=mAD*3PX4T75;Q-f0}EP!~Bb(wxyD}Veuj^vlfe` ziy5d6Cq@U?%Uv^?;{JjK60e--CN6=qv0U;(>Es$xJ&N-ZDZ`(*=IGVlR4cLxIyIj| zRIc`!$}$j>6!c~-I@qm71f$ELf)(2R2VS~z2`0DJyTiaF!oo7SyT)IV055`K7J7leqQBY~897Ge=^n$kUoeqrJ$zeZav5 z=%}J7X_t``O?!2VLEZ9ILe{_rL?>%;KBy`qp&~=L+rGi@W5_8!sYBrHQ6BAZBtwT^ z&iULbUbq;lL_o^^5dM z?CKGl@oIo0-2F*{KsC^!?A+m6*Xn~8BR`njGn$gsM!BzsgbpFptk``VgLG+>HUay4 z`kB}LH(y4JPyb$Q4${tWdi!_jY{rahiuM3D2L;PwosDPMPa4TBlfg7-D+u+i&n(JL zbcaSSdiG**hHJ$4`QYXo#!FV5eW}8FLAucKIRO2GZ8I78hP|2r6&q`j2HAWzvoGt! z{b~|Dcql2pITH?SquAT)kGm+chF({M3f6#Q>`rRz1verb9Oze_xj|%J;_9uRPY;H1 z`U5VN>GV`L)MV#LLzR$ARuY4L^^*^pJa2M>3p_5_IK*qU5&s^jb#)MPC(IEu{kbX7 za^_xOg~ic*R-}Dr-w^XWoMo7wtQY=+E2-MPyavtA8(epgvuwT=qr4XMVr4>uaB4@r zLDlXSEB;{LU1JZ;eo)q4@i2;HEy>B9{;j1I4ia;Z%|!aq0sw8Nh^%w^3(uXI#L7+u zm)m!v{uIW7wUkB5i79ex49=aLze0V*CakoUaF@^OXTH+F1-3|!VS7XG(cMbC*0Ryl z%9F9ij*}cIv3_j6seJB|>6Kcd0PYHuh0tu0Q~&Uw9~I`M#kqGE#{d(qQ&}RB75K)d z`-0OSOM}_NI(fa0Oox{_W?cGmbaMBmbJd{P#))qVWW5$8&z1wBt28EWg>do?Gi%hE z)qjBX$8dd@gmJ>kR#7AkA%%8U)$8>W8XXe`fa*HmPXg#!lf`yz7el zcWdXDk_YaIkTh?HJxpa_=#kipU2WmQiMaSF%xsJn=P=g3wD6PC24OTKa~Zj z>MxZO=LeAmuCT;XV|kZmW?{3M`>YD|2IWmxX6b)=zqf_4EFp5DQ_fXg|3glc{+IPX{haRe4Dy} zt2GYU&VtKqA358!?BR#2u4a|H1Soh1zHs$5ck$MuKB?w7sH8wS@)I1;!s_=>UG~`P zkgwh$RSTM~M26mw-R)a#1sWXP(XN!E@kYKb5s4lAEDcB0&tw;ow;v*=F}n~mh<$63 zLB3gbCdVG)WUe73YKoSUEMcL1sue7F^sVA6b9UkEN`g6oQf+P3JLb@c?VT{Xx%o%>03qL+1I)S?z?nwc`k zLZK^lRGJ~($&TBqL|y$Sx9>nDhEr3lmf~zDcWP`7(zFB_B6E&%>l@uDt%k0pR1!ld zT}kX=Hdr+viCWT}AIet(kJyYsG_kNEXTMtBz(@6f?M8aaC3-j5UU0h9@F2fCDfn_M zx1EjW>npxDL7+CMj7{8MFUkXLh>t(Lmr5o}weA5$w+`VWBD@-PE~8A8_b_{zeTA<{ zjk^r@MstC(_E*}b={&q-Qs)TA31)q* zi02Fqf_OU@+@=YE*P!=(WPhzZ-GI1B++J=Vz?{MDD;DMka^a)fmV0K>@iXUaKZX_V zLahUO@wMATs%cAkI4hy_xvK0*9rhN=a*imDNSVk|^@avy*3a@8HEgw$)B#3i<8tE9)RPZu zee=WHq78^@i%e>5mRE08MOfLBmKsdRI*ro%c2?fz`G)gX68 zL7c&#s>O#jmh^qswyGizw^Ledwph6T20{dDW+t4$3f@ZUrIzjd7Keg$nxJwpNKBnw ziEcf}X0;&iAmZn@!)26Vs=Tk?buQxYq+AIDR+)egptZvUvVHq$Eipk;G_akK-BZ8y zjpactUUnKeziAn1YAX!_^E*C#za8BgdmheM;(qGy#Nb~+T$o)`Gf1JP)u*b|0=0OpC>US7GyraI=bo96J^c^+j>R;zJbNw|@I=dj~P+Wo6R( z=&UbhP}~&Lrzs)}@9hF6*8UHQkX-ZrO9O^+Z=g-?pk!du#(GEWqqRuY!&*BPV=(&> zYrLQT&0{xLe;8KpuLlh6-<$3Ky7&D5TSEV>dj1jq!$0zWsMP%Ksi%(q>2PblHF3}= z50qZFTBAr5p-ceQDv4wy&QWXvfmVf)`Xx-#2JzJOLE1VII1v~F@W{$?)FnjU@}Q~Y zbwo1i!Xl_5BdBNsRFu^=goVz3UHwcOWkEZ!=yJHdbiQmoen0L$&VD=jb;S#2ludPT-L9b~$@V1fw)0atb@Q#|3uJGaXLS{n?Ol~=gw7NVm&X%@dPY#ke% z5A>tNlT8bMM52VCu%B!c7gk{~MCKs1OH4BhFI3%?auel4$un%oHj(G1#9+^k`f`gb zt<+~>BsVU;=U*Nym?9-tfWuCzHzioC|2A6+L zBRqqF<#HcUmRKc(iyxHsT1s=s4_egoZVS$d==l zYvt>Jm6JV?T84gzJ0jpVvvkIG#DN88QC@2kW;P@nMJ*@Hp;C+%Xk|3p(0Z`gJ|KZBj!4sc5kQBwph5xFag8R=+Z5V-N?7Z;VRd6bGEZ)EPWi< zUlkV}By^a&_)Q?nKJA5}0A^?@d+xow$SP%@)cLXiEJ1SJAO}Hm0pJx3r8x$t(Zv@R zMmgr;9ztr~+K4xBSU9$F`e_G-elz^hgscy>7+#qTI{H#rLcQvYtqazSWSRhX8Ax`$xYEJohM)OEOsos=|@Qv5Hn0TwWV>M?EAGw*vCiEDJ|C zA-q4~jQWplqpluz7&b)3P|P)h9=^*W{t^|P;_`)k8cTHdQ@WB1QauWJpp`i6HeM|! zgep1`UBFXdh;=V=$HwY0NGrZ1R6&X=B5Pi({UnQ zLj%wbjZjPM*m2_s+;lZQ(t<7zM^Q?wickML+2j&i?Y8%4nq~x*N5uqm+CH|rAicVN-{lpRuq!*s5S1oONFF>7mosK zc3uLix>VG5eXSO}7+G<2z>)mK(XB1@gYghdQiUYjr02&_pGF;4aW-$BmUV%;eakWc zR;7}7YiK%X$Z^6}MpAcTz)KoLJ7GZAN+#@EtplQ0GGciHMRelIB0CwtEE3~~Isf_I zsaSby04IlnF>vO&@Uh0+{jM9y;PKYzdRWJxk#faw>E>*F%)m!Gubh$Au_~ivE#W1@ zWc*DcS`mMi6YE|@Za-|H4*LZU(i`;Ze#|!!>eaE0^GX8^uBW?|Fe&h91dt!})j769 z5aP-x-{!x*Nk!pg7GDJ7q6As8q^IVBD&KYc$1Y%lBFB(liKm$GYLw=oWU$k5kE5t! z17)0Qo;h|4b}`=iZslmbPvea@=Iq@bR*qID;Ieb3(ZKQr%28v-AagNrO=uA`6F=1* z1QuMtf)ImH`~sBjJ6vw|6gytet*r~72^%g^q5RfLAar^)_Q^aNz61oXQ21%~4ODLU z!#j`wXe?QS6sQ$aP%%T;_u{F=T|dUcus^}Uwl-y}DmKD{dI7?bgb~f#+&-jzMuhXQHMyilEv|_mw9QvM zpuHG-he$jCCCjK#yL35-1_Ln+&7=hr;@hyr4-+(O)rac3CtY`KRd)&rc7v<7*KFAn z>3WAH;>iu($3`cKi|;N|&*~_K4lUBy!GW63qDaM+kIj{DNePW0bGvI4c%29@QV-dO za^*fg?*xkOLxM~U!B0g+-=`jwAGLiP20NIN(=)BLG@a&1UE>D)6zNb9-0o4sImi4_ zf&r;TL1Fe@e)Q+}uSx8$bkbG z)<$aBWLjw3>$=dtsaV$rH}UDmb*ADPHLYxh@^^AIDj!9H>WzZmGhYqAU0Yc(3Hm(K z&5yYS`ulqC5}e^pyYBXf+D2N8U`5O`8B7e3A^RylhdV)HM9^fC9+}ULt0nGwc`L7W ztUQV`pO$0z@Y2-5IJ#g!IT32EO)q;{ zl#5Q7iR*dj=F*^Lb*83$Xm@_a8N=;q7j%rCJM3yiv2y;HPo>~^xkW~g{B<&Q*Cn}S zs>Chf`=d~D(kH^)muZyj&AQSAsS!3G1IvY47fsN@7ufjwrucv0$j z7kVqc+!7M*>bh9?q@J6Ac{uEITN{!^1O{6qhb=mCLl{+?cogC`RTX-QQO?N_{T|EN z`lRN#0$iZR92%xk7)YnOgi* zmiOh|_99vJ7|fHs;&}LOzXy9aZZlsp)SLYz`eM2l4Jf@S8F45h*)Jmtj$PoowaFx( zLK&XalF;CpE?K1YdF>S8CA;S<0iOSMtmm$TGFYXrDP4h0Iiu<2SBQ5O%I<%+wZ{le z?{9q8|2j5A z)yl%&*wxJ$@IQR&|3~%@|A_ygQGMM7^SPl9%v}@snCl@<&rTB%m9Z7}Gs3TjF91xC{FMk+*aVm8UnZ6V_ zpRNr{JfnSPbO?v3H{>eYta@L9p`{JBz+X940ybVj;^KeVJJ@rDR>I0J=PwWNc4<8z znI}b(FG*%Eq+plL1t_U}x3J|$zGRnw*vPeCWwU1V=o;sjE0N&iGs$Q}-fqokVsCd9 zZT5hTYNC(%xVyF^ESKOXVp_s@5u8D%>#YMRtI_MRP&}=WURLFk)fs*Fu|vizCI=zZ zfT^HTZP%&5D6w~eUxq*uD-Qs{Im3R1gk&#Cnu~-vQ(`QFZ_t=;^9zHf%ZlTE81KU8 zPgz=NYMRq%h?P#!s*vLSb5L9V5fq>~Ljm3lYwPW9XFW@-B)b~j(yBKwM+&Kbf{=@9 z49RF(PdB2WF|yO}oh@mtUQ59qxqoIN0KzBP*T4k^LwP2Ull;mKk6q!X^$@jCVJDk3 zByWvs`sLmsO^iBh%t_had{-0>oRnpSRvG`Jrn*IMOsK*OqUuUOInXZp{826Vv%X&x3&98xfjK(JeBgo_Qqt_^ z(MT-U{}7O8y0&p$$lF+PK{Zt9rI))kCZ|P^k$-!1iZ}e-%15Oa*WP7&-x0{twA@Zy zJozvS`6IkJ+oXR^N@%pR-MX9M6uQDa#E1w$u^5EsCt4=W&yO~+A;e~Ii6#AzYJGMl zCZdYu(Wu(WySKsV5!6(ZAE|={19XzeCm&fCK3Aom%#dtK)La&l!6{sgNi`Rj=fAME zn`NA7ag=;h!6pUvxX-fSc}q5XFq9S9@dKo!AnU8V7$o^kn6{W#4CSwwprFWRP+3TChcS^I}N8%pgehgr~jBy&hfU zy>&ba>ZN|yEwHe#GW&uh-_2`octhQd(!-!zQzvGm+;a1@piluCPTt z8bmyq7#9Isr0QKa5!hCk4I~rp53|x^0QAeaNjqcmpzbfz>0Zhcz>rUtHXPl0qIi%p zR2>%=*+m-}{T|ePHl#e!^Z`ik&U-y($!rcwLN4%S=q^vNn zy4H1ENrP{&--B299ML&UgSLSMg?thHSpCv?fkTza1K%fZE_f8UM=w3*M<{u($k!)0 ze1%FQs3@J%RoI=pa#e0`3Q&4UMe${z4Db(9p3pc`A z&}v?IigR^hDUfa)uf~OQ7zNtd8O8ClPX)3t~hWiu%6eT(@%idfXKvaPcl|rjb1W zZVYf4x6%X?4*w25bYn2VAEo(TXubXS5$m)6$JskZSKfZvq7_!fwko!5+qP|6746t| z#kTG2*r?ccQmLqtoTPj7Ik(^LbNheq92=kZ{IJLPt!F)RVODJf1b%dTX@4vN`sgbgfwouQ1a0d08EVhJ_kakm< zh|nMq#@gGVMfXbU%(Z~$rZ@J4S|aY2kZ_agrU230j6L&SoTvif&w88l6{q=S7ykRp zR<1wT^KWKE&}F$8z8D-7 zj^)gb#|1AtD3gULw@grT0xJ0?oL_SH@r!y$kG0DU*mij1wrcL6xsudDIjo1Wm8;cw zl~A3U#{(=6;3+UQ5EV*5=);@NxnEUw8q#1B%k(>Fm%24Ah%2 zz(96hAYrTQAnX(jCLSaw)3uIX2&uFY-x8M^B(IsiChWwv5jw^-I?gU}u*TcZfsi%#yEkrM)X)lkKb5+9BhhZ^p4J3zL&g-?g*H+%Za`k__mb*Ro$KHj%o}ItKKEB zXX_0CKr19di;X7>URw^**fxq@7iCa)#RI&~oT&jsg}DQcJ9zO+lgTyZPR=M;Kp9@g ziI(6pxw+T8wZy&Buj=*7W~;faCaV~H)fzia?-ctA-~Fr;SNz6U_hR+z6!w#uip4Ginj+YF^aJkOx zC}MkXyF%K8&*-*6*2n2lPg54n&VSWxIz&{`p5m(ha+?tks|4QQV_gx4e$8;?n+U_Y zYYiUHpp50zqFhzKb{o7#DFC*qMfe-OWu~@jaSeLUM}|@)S*kp8f>%A*mzdAj#8LM2 zKH5AVX$Yw4+h-nlSB~0;7%+Nzq~uG#}O0&(n_v#SEH_0bg5@ynNtjgCmHt4(iEAiNizCcD3BYFWWBo| zsf(rk4QNCBuU8oNg2i448Ba#rw3lr_^^YHK-a-CzHW|nuSSSYmk-;Pu@>ttJ*4m%x?M7NlHkh-X;ji_JKAp)xr(76TnJ*p|_M>;^+%bZX#>udLNfM%s(t+4LYaHrv zfK(2aerN{rThu{>xgd^(xH&fMF>=^fZTO1O+#k<1j19Ffr)Ys+}#)_l(cCy`SLeZ?h0Uw%Gfxj0_9h@MgZj&vc#oCEU zbhC}N+Ddt=Qn-Nj;)+Yv&qM1DwfMKrO?hs+@2_x?Q>Y_QW#CgM&_a^mlH_rBvBo(< zek&z5FP%-Iij|%hFeXscYCLtCC2I&w8+y_mx1tPCL)KirSawDtfYaf_Ig}hGEiIaM z^@ShwYx*S(WAc5NYO55E=Znk5yCny%!s2VT7;7-04zFe(GR%jh8WNGj&zp!0}JsDczJA6Xc zFXI`1$Dh*d7$os%TR5T0DW9)_qbVaCzM&0Z-sFOEnc%9_=Jmb|a@YF5>% z_YwCM&pZ*WIb6H#R!+b);@|Um+|%&{TDVr6eUvCBRcmaxm%;U0+_H{phHAt`23woc zH}ID4WLTe5yMK(P zS%{l{SV{z1tV99~z)v?H3|nWW&DQaVBsF3H?~t0Khy_9fk!EO^JF>*;mFfx?T857A5Cmr$I} zMXod&*ZxYzkXSRP=@A^kwbjElF!oDnd$^h?)x0B%-hU43)yQ|cOCN=O!2g$-8xAUTK&j!kOE={6K-Knc@(IzXG%> zc|pvsR6M=g&KcFV46-aM`ETUHr zq!1@-*VQ$VM6dv{v|AsZ)X9WNQUv9g0b>j#rzyEQqQfq()Vrb z1_Z)15g;<9VZy2mVUz%eI9TCo{#KKigzz*a?y2i`Z8qL^r~46?aKl36G}Frkk!-D* zuk!7MyXbb*D%Y?B!N;&8j27zRXMoz_pIR~WoyC+i$PtEl7zU#^+4TpJoe>Zu`3erH zgs!T8zFjiHKKEaP3+H2quar7ylT{c&l~JI_o29+Tiy@hmCZ;GK5Ik%$n0Qlls^&?- zDTCuoL+A}h1k$*0ZLOD;yS$UqQ!@KW(m{%*C_uMjV!FDgu{BK=snj6!ei-&}MrR5t z=gzFqO8wGUaeB0CP~6!JP^=qeR&`-}e9FJFZJ)g0-+d6@q3D1Fj> z;*rjSEILKx6aX3S>+=kof0^}mrUDv(hw)-)yXB zN{M={Rem8)c|gcWVQ)zLf=M*~sy~3v7!w!{8v(04aHa0z0hS26hevn@B99EPwDt@Z z#<3Qa*+~m8pkSnd=WiGM&c$OPNhfOjVV-j$o)>@xs7w~iW@d~8Vmdjkk=q@`H4@BK zVGqP#TBuqW;A?W6(mn9xDH+m{DtmwbbPL0PCXEhoKtTFApo)+e@MmKmE>itjH=s-u7HwR{dQ z^sCyAa&pIp!T9NTMQ0pfNc;y^%8mg{To7y3j+7%=KtDz8jFP<6LL$3p&_!|2MeJ?RNDWG$_$Ird4vyFeDJQ@V##c7Kl2 z58iiF1nhY=o<$0XvN8W4w=Gw?Hzxrsa;z3 znh)~8-}-{XVoPUDFdHnRRGEwvD8E4swlMN3q9_P|4-5|jM`1xiIdh-7Fos9jAUN7| zp1Sh(@44EHedqGR?ZqX*DmV7}g>$xA3W=hJMfu}EtG z`zLw~eF#Ujv9?9DRMWty6q8VEpa^s9wwWu*Ldg_!Sx3QM`WT5;2dL0VkuQpT4-3D1 z@1XiMXjFBPumGG5ha_o?0x%Ro6lEBP%p1=!P8P`eO_j5JXAZ_p2UyY0C zMuMm~a^#$Nujyx?jF>8I)-h7RR}-0D5ggn!5rJCqS)7s7eQ1>@)Ab*exNY%$$g@JH z%_(+}4b+I+TFQfO|u3!Vyf$p~8Mc^y8=Lc_EBbFD;kjO4VRKQ-m!1~Be zT{Bo@gH)MQFlO{-dhx$gO$>q!bg>@qn9!q10gQg?`n10mm{kNKE*DppU_4@li7nP5 zPd<$>_XXC%@ludlRcKKx3rG@2%qjpq)h#DPqp08zw53~+a(GzT_&Sdg_|b`yZx6$Y zt7ZPUA@O^jJOY`~Rr1@E%;;@x>k9EzGKmz?k_Y|5yU$6+dg2=sE%ZUDdD-X7!mo+E z*49G_J1P+J&cA0z{G4xqCA*Q2V@TaUB9tqE0EbwLutb+@08Q-3gUUDsFbI3aId0dZ7IGXt$vr!)^h`CA8+8M{=? zJr8u8F zUuOFaVFE|US4Vt=9U`}FgmYwGtD-lxgg2&BJ4Vm7C~iyg_}2qe!5>C>oBP}zaPITG zj0ip9dgzK->ZQ}N3$I=KlQX6kQ}-BtLL4wsp8m3nNxx5p`q@BurLKSgq+*tGjXkV=MAu^#eXS!?vFvPPX1ZVXYW?!dAMa=VfR%KD39nlt5e~cRi6m{8!V>BEVLbIvtdcKz#0v#ZZr5Sqj`sn$=;Sq z$gPGajsf&t8tn*Yn&3N{C>R?QKND=adJ?)i+sE{aUV0mh>e{ZyWZsyHbIHF`ImIj6 zCg;S@aEM6k$R(4gq7ZCIdsX|w%xVanfr2ukhzP8JU-$92 zDBNi!`l(=>j(4!Qx%-4OZ*nB)#s$dp*6xlCA;#USqxUdu{G66xgAH#t)MU$j!wwg3uy z98_JSv~@O`fsO%0=~Oi?)-NLQand?;iB9Qp(oyIs;F#42gDEn~ zENyLjEUziGo&7DYvwvXMB81IbnZhc(VhmZGyA9dERsTvMOV5;^gN@&>*{I_oQukVe+~PM+mUqbjJsHanaqe? zcVa=efB%FCC{T|f%_6+|QNi8_o0)XiIVr_cXjtwX%9Zr(G+{DhY%S%?alFEDK6P>b z0&p(6QY$iKkEi4e`lPi|?cAU)x13(N+O3QsI)GYd%_8n{aNHu08ix<%Bc>KyeF(ZS z8<0)%Qbfod!pR9}%q2aCrJEZ)GI^Cy3x0EFCT}gYcE;OxvF#4B)$LgCqt)%0>jPBl zUVJaGhQV8(X-ehR@QN6Ek*{-k2d}YOj=5>~i~7x|CLj08TksB;1X5Y1FOA=(e@9}J zYKh@Zs*Qz)zYgJ2F1tbBgj|r5D*Os{Wl%+Ztve)gHU7gXA?8O7fI=fT5NSIl-vi;w zol-4X_IRSEgabQ*7%j_<6O#`UYz11>j|1|S0=115^0q@^{}1NKm2i9uP~Z(QqLUf& zwnSlH{Ly0}^!16K?>q+E9I$@8@@P6}vk#nk=TLdym>tcHlF-AHy#aoUAllgdv0Ho_ zs_>VSB=`OR<3Ul6~Tn_!G&h(heWl>6;zO^S2Y~M%3f+W~xzIL_t(rm{qm%WF_b! zBf<1GS^5K`3>Q0O3tzZ`D7%FaI#l#sA#vSDx(is2R^_ke>!sQ)r>*m|MSJd-oSa>j z$`qOF&hk_5yl?OP?_D=ri)UZlcEbXu8oANr<+JKgR-FHctdGe6nWt37#twD3`7-qJ zoU<%UO#v5*)PT42q9SZ9@{KbaC;vlmqKrzGW8s{1Xi<~6R^OB9U+~K2c4=cGk>gCG_IGeH)fB;m{koj^DtZdYy?VjuJ}TN z&i+aZ0H|({E8vNdmJ5{%Rs|Fvmvb2z?`{JSr4-D+r}19IdA`ipn$&Xtfc{Z8D+txh z8T`FDxDI~@x}PmXF@mYiim~>jQX;?6*Trsl$q#O!2KA(jT0G>NU5Tf)*|3}}H2-Uz zDqe^q`6cr3RdKvg8hdn9#0cg_Vd=PliD_qm)wGEJ+?dJp94Fy%j)jdar82Kb931|L zLByuKCX_aaYvhob0a~>uX*|iBzBBhfv7Fk!paBHG^5abCC0*P8N0oh^Uy4z)2rbwCX7u&stMkTgYJF*Z+x z|DtJv-d6!ZqQaDKY1s1nxCgAO9N_O{v#MB$Gtp-)AZvcEoOcE;k=BNhJEYx0e)9;6 z5$BnSW>N@&0s%-O+`x&$v5o4G!zQ+HP+uHV4s;4Ocw^m9bZxCv8sgXhB5q zNJ!gD^2_3p&qI?Z1|;(NDc@xt53KBGumXI5T#iAFIhcCQ12abV{n!6Gk7jN&lS;r z?RiGf-8CYeJ#tHnI#=E`RNgsP_QCMQkWJqFIONFVSWV%e^1U`fqn7%O9Ii(;3*q*M zn&!NMFP}~J_cj#-r)J~#nwuxD*+7>(?VaCcDX>sk!~H3V6!y29T?f{6advfxUbV~A zK)#J#ax}fjlC$Hn=1aQ$xaAXDqpksM52VS~{XMH$9oqJ60xi<7?6h618JX3LVbjm~inm>PJn-vDHFaiJrkd?yqFcD0NulEt2#T(7q-FMH6B$qxd!xHtDv>i!ZGnXM+hr=#uLM}ko zwJ`byt6ZZ(W~sO#^41*lDZTOu82OA}z@V5ggsQ=rc=(*5Z0)SqGf5NK7X7!>52s+w zVjr#{lJKh$^;d|jfaD-Qoj_K-*4m|5wCl#+0O{9nsp_fmi|dv%@hOZOGOA9(b!k6B zQBUaCepGZvik+NC<;WY*o9iN?+AxR5d2Kl}KlCf97`!+UQNn=#2LGpYAiZgD`H z)8#GpvYpc>yw8Ho*Xegx!*Y~`$d8UQ5@EoisTAy;Q;^h1!S&J`HkI)@H#$67Q+U%5 zTNxO9C(P6ScJZBqxX(JvnT-amtx$48K}=;w8~ZJ)6+{fux@;#EO8ji9E(GNbc;2h* zK3$$1es@1xoajHOR$lnl;M7W~E_vVnzQ=K(+DGBPSvf(gaL!8Z{c)8{XRCI`Iv-ke zAR5YVuJM`S-5n~>psqEm&h&orb5OAB3-w^LDk!+Mv0-3Zd-VX7A8WXw1ZY#qpf<2- zyIAW&dOTyH)o`Y6$b^?2ObXJn3$7=y4c}&PD(Q9P1|?{3E;&34go{vf~D{F3LH z1{|TZtX_lehOl*pdDOw>iggYGieBe!A7OXdaQG6BX>jbwFKc%i!c$kSIS0pWA9Z%` zY#x1fVQe0S%mUQ;?pb@ak#p%Oyy7Yp-~gQ^qtlR{?8-fcq(=n+>Bj@2Ya+#nPI%8) zc>JOEZB6l7zGIHSaef6UyDs!Y_IIHf&$=A^~zI}_p%Q=810MS)S(t7S@0-*)6`Vz`iwvyd&TV?l)c z!IHex9;xuwq`!72jL9}n*qPax`$ou60o8wE*lV@=|48cW^_olAJ2bTk*;Wr=CdFRd zIu@J>NBM=-fx+J#@^2-qrOg>FSTVjSN6uFlY30!!;y;G1p5F!|@qH$L>(g zd6m%zOgj>H_uBb{d*7g)J(A*+Tzr=+CHd_fr&hb@wu7$L9#YSF>g<5Jqy*S1^^xn6 z)wB<-YN^js&UX0biTXWl%yHd{)g&H$SaDZs=^#UD?MbLl@;nh~i?Cv^QT2#hJM+nb z{8DMmw>1;wdd^5yPU*64B5iEqEh7ElW5;dVqG0loyrX#kO4I41mpTx68OK6@5eeF@ zG)kT`o^RX4sYhSc)vQeE8jL-KpzST3_z!W%srkV=SNEN>jx*I)7>-{|ICS^10WYIa zO;p_HrhWtlQ+Q+dP8tbkKZaD{cKMpOggsj4{JvTih5!DrmGI*Z1YRFsEAqI3YiDH& zv1b3mE58^tmOxl$omJ%N?%O!Da&Aa8*=lYhzi9*$F0Y6QRk2@{!5j-#wC+z!geq7P zspSH6t$PLNr#0xeP5&L1d5d9v4Ej2kdmh*00A~63cP|~G$CdN8;Lf0Pe~5eV*HBSr zKH>}O9p$FhbS%9A+H0)E0_~NyX{Q4-GUa4D-b^sv%cUclZg-mQF7z$G$XL#n_Gj=S zI;D=$iZTC(f4C`N%~Z#le$?>#5x#uk{@0FIJ3IT&)+zh{?r{C2`NSvXCz92*U35&* z-rm~wNfHU++L}&6(51(9m}ILOX9^1oB}+)Mi|3M(3Pm|2<>sLh(>a)-iii|w^1gp7 z{VBK)ve3EIB*oOEG^SO3JV)M#6ER+7-IhY%{Y2yU!f#HO4O{)2(EP38;qBq=&0ha4 zQUCqHeEEwHl0CJJbP@TgazWyf#ve!P#*GP?CiD4}#m#J);(9Z-94Yw1VOlUL!!xP* z{6z&Gloz0dTCjhzX6J`)8v=RLc zwh`v?=BD1{@HP5Tv!lbR4n<$dA)Cj*prs!$O?WBj#p=)^RFzH{tY!h7#e+z5G!WZ$ ze7%G360wB@_Fy#-9|3q7y5?iVWpNO|fmdTWM;iz-`enQw$97(3@rxYrYV^zedokP# z6*hd>jw0hZ`}GgD^BM~d3IK43!OB1aM~oVqj|4Da^vim?knOz6;;|OfF9a=>rG%yo z+;SbKV^uOyD4H%YXf&NNr0cy$g-@MmNLinbwKvYX@xe%+0#{Ep${++?n-R!Wl>V0q z=@$=Q14-C4Jaw|llS;)MeR7XppiSy`N+!!yx(d8GjlY|9%uBzFacvLNqToXW3{<;A znB~d*rsj-`r(-pF=r){Eu5gX#RDJuBq3-r@yUE<-sRq?BEL|_I#L?wP8FT*-)1piV z-Qh|yrAQoCnYC$eN>xNm)j2tlf`U!IFajK*?g9x=IEX9kp~J91Zt4l3WWvwU_=UcW zpR%G`{|UFW9;rTLC5^KQmp2D`TGHgE5w`u%Y8-`5`ptuxE0M91&eG!L#nFZJ9bH}v zj9Ixr?YWgRV+Jk>n;AvejEn9nruIOL5QGbQ%fO0^*GzN|3Z~^w24C-pPR}0qCC)mg zAY=N`>tHcD;PAXtYVSsjrbRiUdc5eHb(W=I1;~JUG=UTbzLY5Dwaqrc| zi{Ny2GPC?E|Ifl9w;$2Jz>gPg8x^@^vQZ8}R$HI6aaL=C*Mx1a46SD!v(@kdFu(@g zRk$~dGBL82cHwObm^H(_Q}t|*YFY_)Y9#*hgghejg#LVVPkrPU+jcw@(kyS_<}M8;&RGd;cEQF5OV57#-gvkp5>sr$Db2G`CJ+}6N?^vv+&(o;NZQ9 zf)0Q>)BT`1M#m+d6L&m^4LpYsA~#t8toi|TsS5>sGW91VzCueUNhaMHh2!d0cCF`BndfzY27LoCOA(xK7O%ho<#nMBU`)dBM6+4n{-&X zb)dItL4WaC>I(N0S+{nZ2TR6-G2)#AYw^?nQj@hx!T1$!tThO7UZPbvH#9i5G}qML zIF0ryLgY`pRy-gh<{$d`lww~af$1O*zU%O&d@41AE z_juti2EyC7F3z7$?xe%eE%%!fgks#-AWgbGm3-wl2W%c;c8ZY@TsJPKk0NkR*3?1z z_ciM*S#*RE%S`lVhoUdG=XFkae(e@qr>k6K?Y4zjn>Liw=j`0iHsl=iO=xMGVWM*Y z=wyk*907*{6gYM_(QZCWDo%^g>^NTCG<&hIdY5N(O{!iQ*oriHWpri0<@Hsd^S!7Cv(Wq`L$%W$Y>8YJ;vHUM4ua%%Ac6pa}EEJG_YS&nJn*!?mv+D$j$vm zz;naTYF;v8&&%ukb(&cyOvhLK0qAI^#c{X$(HA~deoP&;YbWpLh`2^`srPj5-^uqt2yXN5QYXdAkCgHk?{{=_&f4eXX+ZZ}K|2H?~Pliu? zvVEfJW0R)JBGQ|ALuSY%TyXGmg26uNC>bH#5QYVf(2oVgcnb7|U9z^|MHBXojUO7+ zR4P&x%_;|m+S;X{b6QQL;S!=n*otdLqIL8ywN*7*(%Sk>2wcunUGD7cA5q@#$!R)^ z^N!2e>~La*{Qb2Tr2gWy7iH`G?IrI2(B-qAP#RMW8 zhToHkG>|1l66#tBID-x0#~a7{EBe9TshD%Z2J^wo$@c-;S`#9H+tC1S86m?U1=W_& z0^3E|Q4f+;wnzpRB+E#^N9|mByIPKUvos7W-eNAQ=34`}P{852l-Ozo4pBJCovd5l z6edMy$|z{KhI;2v7KWvHx~CV@vdyKH@g0{@m2P0p0z;TMIu+G!=t^c}lMTdE|Ut4#`&dQG6T)d#pgkzM>uz3D!8c*0JYU&*A3no^$88YXpP)<*A z!+U@F%IWF!$uZ8^G0yi@3^}qr9yRkkBeq1bj1_LFQlxM(T8s>WL4teuOk;h&1sM{I zL1f7n0h8{Ta|^biMk4rv7zrlJW;R#WmS4}%yJpffn_T2evsjTCvm^x{Ynlxm{ndam z>u5*~UCE@ABWiOzh7OOfcvMyzy`wA8Gma_s+ffoM36-S#Ny+r1eF{HNsw=yF!UGV? zL9Y$4?Rk@NkEp`^97r+e%vRs1si@_pzlUU*8gTJp3&5EnN-0O)UtE}Jw|0et^;dS} z51l8qUhkpKsw4H5aYVyOR7ce=ga=&^x~7464E5$O9GV07c35{o_@`ihqL*Ne0BiF) z<72TX7H3u<<>qE|z)Z0-fOOy7#W(~=of3nG>z|(kR0(k=M8Onyr*$4hXE`AO78ZGZ zZ}8t-ssni7vdw#E6j1U!;y&Dgaqjm(W7Zt{SLh9;G~3O5l^Vu2hNgQ%9!0)L*CxHD z^r@tj^UM^M;~83MvU#V#p<4{_TN(rd=ne{W@~lc~RMll^z4BDKFia4$`;HE)@qUJy~f~s20z{ASGM@8?`ipc7FBCiq6aDqVYBaIo72<(FROuF^z#a2xOe8 zje97`=_#r5l7PP&U0)1LBhnf+YIemf+eDjM-;a50{U%-YTMf{hG`NNxaRHQ{{358^ zsnu6wm>Z$w!r3atozy(|R`Fds(!o&E7ZOUSi6ToUeJ8ly&B${Jqk=%6Nap<~;8^0# z=}V?VLxAI|W(zjO>#5CQn`Mw>_%9?+= zTY7AaI@um^){jDzqxQB^r{SN(j@;N86vx{ViAh{fw5t@H;$L>z86@YoL@^nE($*f7 za79f}Cc^=0*87yp{bBZi?)wT?@Z0$7-2{(hgteUar9Xfh8TALlbUiz|DCV-dELyzs9jPoJlLzTwE*dACTUqLK%9_$Dtk zfNFQ;#5+SHq^Fa|%Va^HYGsjq+3SVj>Z1|Fe6OFb^{t3J621Q2P+Qyydz+tY z3F}@D>^4MJ%78DG(<5&$L648q!CoRpAb&#X*|AKu;xr^3bq|oBu(EUTRgcK2sBGpQ zQm?Nf&@cMvuUcHWiasBM1Z-yvKhy>eq#vPuOcMv$!y=>PoH4Qqa8MBVs28ij593l_ zE17;7^_u|8Oj4BA;blFxXFMB2*|&iuINj?ImILg)mw#x?AFC7yJlJtu?;UClCL{v8 z+SawhpacqpvT*C&VueZP-6Z605c#GFmT%}wgMg{;FxQ)urm$qH2?`zHVGnQS?Lan< z!Wf}MGdSRM6Dh>|Xk5xZ=8xb_!WZsf=_5|vAD8?LSi5n}qi1snW%KR~*ubVbcnNWO zMBI0l;1f6T=1(=xNG-m0ydJV|EcDEhp7rNOsctOGHLGOCTupjL0&<7$rH5k^DK^we zUmo5Kl$TK3gf#`Pr3UXIrE8A}B;LKiKCI*Op%~Br&8xv_VudT?U#o|CtXV4K^#R|@ z4Sogf@X*&@6IaG_`?JP09u`zOHnPS@?qPHZF8k=LcBUPXRzE#9K0)!&%Vy?|+(D(} zgwt`8w;d+VA1ZtJDXscYO^?qV9(0l?0NISGu;xcNkb6R)sl65PPWwhfa=7DL2ukQK zhE5PR$aPePwuBD0vd=ekD_z;I{19Y~qw<~@Q5uq(2vs!eYxVC6pU@>xkqWuYxkZeU~PGd?$pq zp@Cn1F2-TH#L)Dch50>Ll&4^VLot!tY(Fo3SwfKZTPd?$h-J9`)ahUt(I1bsxrl^v zJ)NcKKQnrbTW6(E6l<~d?MKNGab}JxsAanGf#=!ib=yDMSz4jB#;iO=mz+%Lvme^_ z-xFGHgjNL)xo(|rC`oe*W3=kEsz~S&HFbAW7oFm)*9D)oQ=W;O-(#lFA1s$JIObqD zIGXMutO)QSd{^sp#v6)mxN=~~y{#_hBJ_0DH0t3(2;COj%U|m9aLzceOxhLY+0}}8 zIJB~_sA=9+`SzAMUiFVue26D=;*8}bPRJm9@%0V70Zz|bKX8(Hb(UzoyN8)b39bGZ z&(G~j@wI82J&Sp^+-TM#Wd`w?4jt;A6Xn=99rCnKdL@Eg(^k9KH)Oao!d+1|ST#8S zE3wlHSCZjWbW$=DId$3qW8t>WU3nK`Sod5^zvX=F8SW~wz(ND{@&p& zKK<$or#|uzMUj3Lxm+M}Zx=yc6YdrixvUqmayN_jZXDsYix<{3F+hypsu%IYan~kV zu16V)9(r+{o{JbOSKQQFXP*b&9)bJ5%ROh>B zHCngN7OIotra1i=DD%EDPSm%?S1RBoFX_|eedD%7x0)>!mN=r^cMv8{D&jH{OX z$C54^Oolsw>7ta$_HDaZ)_A^rr7`wzY%%Y2k$&bM<-aoNf1HoZQeL!76sRhcTw7jx-^EiJqE#0f3c=J4e(?;3e=(LAxL7Vkn z4dZ@kV&N<6y&%TDVCM4|<@d?FYUlXH6_e1kbJHasucc- z1);zKgsKdm`52exCnQb2n2yj9wF^3k91Jy(BaK=w?JW*LOw za=?L5o6Z5jv(h0oFF&+10gDGMVhTTjX?8J`DBbPm-Rez$URc=0V0xm=RpQQkM zFO4ef#;tMcH-s;m;FjLl-5&)%1hmTOJYArFF_^Biy^FK`L~r)q?qP3kMJs!W^YXX; z!_9pMj4|^npEI5Ied*MD|S(R+?s5D*ISrtB-X*o{(ZF~B&;{;pow=0j{bSuuWw+r)y z>8ai6!HwXmc+B4h{r8-$xg4$T zHd#R9JsuQXouVM^^KCju2X)R?IC#5~ppNN}Qcy!=-qE*Y#kRlsJ0}H*52$}P_ufP{ zU%KD_vHg;`4))-4P|NqDUd#0_Db!+?rZy)3m+J2)%P0P0^sDJV?3UEE(V@dsrBoGy z-P$TWFyg=!6UZR&BcdM->Nn)Z65Lu=vID!Hf_!EMh4RDsdkIW=m~B_J2z!GN)}9V^ zy6>`?nP2Z;UgW<>d-O3}c%co@;yFm;-Xs`4vkH4;;bgMaq&UZ1*>srVLl~#=5<7M6 z!%R1duyc$sJgdL$26$R91#b|Cdhbt+cPX-FM<^oZT&SpF3dLydH72#$Gm5C$0@1Bu z$J5t)W-;naB1KY0O(U^)XLi3CDhPwmVuDIow9W|;V;j-BB=-+>UocPX(=(wY;5we6 z6GEmKhe_|`=wi^hV&1j=Qj~*Rb`-vqXAq&*Irpnn7Gg*&N(!^o?4&zJWGYEo-!Z;>j>aHJ(;+$56`{cEr>eLMA#Yv5zxooE;dY zajBzZm#Vtr(aD#&et|PokEU(tPT;i$ytaf$@ZFQvKr@S;XKDETtIjtd4|3U+z!o@mtZnN=3+OMj{P+HN8__GKyJl%d{ ze7an~R<=$>xyh=G)q-u52Zf$}A@&O|1pE+E5>?1^6e7GW`PrmesTdU%af~8c*rB>N)-L;( zyIiRrZLtj1Qr)OET-&zVvxyvVd;~8qq6r-#Z0)&*`@5fUWr{`#Z!|Y!zK2kDi@~?x zcQoE!4xf9JjQUF4=>hFQ zXtuuk!wdc&mr!0=XMdr$13CG*+q9Vor8WTz)x2wh|EvhDVyvf%eH3KU5dT$0=--~8 z|3(q|Wcb7<+b62jy=_!fvEQ?&WJ2ZW5xz#i+X_;RxU4e4Bg6|;e1i~&i3mZO(e29C zTZNfVcRXy4sL@3le0T|on5GD4%w)~Gs4q=RGuW+mBnXckRG&Dtipn@Adox|w;(Yis z<-%nk`PcaJX^L~};l=NWd+Q8-*-Vb8#nF0fpZ_| zu@sef7wD=@$vjkV>&3>)L#rH2ZZ_J%?Ux?mEGUDKK4Vb7FCf6r*}9KuB+Hr8Y%nof za;2MD!)usPty&%yZQdpnC1(RUZ9pXE^k?PPu*}-CQq!k)i*;A(aBNZTS(oPS-80VY zaU11ZDsh3w;5wE0|gXin{gtKXM92eO8lQ|9muht5dn`OE;gk*LXZ%|kx80Y{uN$}jX8tSbHbLy0sC z4F8L=cZ$xm+qQ+PV%x0Pb}F`0v2EMd8{4edwr$%^Dz;V0NzUG<{cWwb_J6+9ub%c? z^s6!Fz#LCugX*wF%XoAMS3eVbWNIU8mcoJRb^S>uGUR%2H8g>eYv>1w#402m%c`U?ijRq3 zFec7n@T>$pwR_1dLV&-Vf>HddK~*HTVm zE7B6bIw&Kcokl(i(3`2#n^d(G6T|3w% z{bZPBr;IwtF=s>@oam|@uyyi#>r(wG-6D-BByB06Qh3If8Hv!?Be-y)w%@ zY`ZdmRkNl<(+IpB+qQnFN749SZX@itbPDhFyq(8p`ID`p98qTvIy_x6y)M*o8yYnf z?}O7SEkc?`^nvpBfs|s#sx~N}WmlCt`Q?+J6ZJKE*;?@?H%4+qZLD3<3YFc=5=9B)0m8S( z3C0QI7GVcW$I{h*G6pY^HCII8KI?)){yD1$Nil5u*!)_C7_dEI=)b%`ZX2U?duCJ; zuH)apQ2(CiFG^PP@GSha^`$yzh3Pc~Ng$3UOCW|<&B=!#iH_SR=#YpTx}%V%?NkAPLNEuvR-fhuX+ng%ahB>U^y3ft^q&>f@ z4CeKF*VQlb#NM)-18xXxpiw|P9w!PmtU^URu0mEk&WglJ6%B4}9X4`K97-X(lra zC@RQYm&sDCz>f~hsQc@L(QzHj1`I=~)EU%vDMJ_@a}B~ulf`cBK)s7-(-O~qoo7eQ z|E5kok`4>eZl3d9^^6?^PdrU+tUYySY>g#Oh@t86vy><4)A?Q~Pt#uhgV|%w4}soP z7yF{1G0>(A*4hVb%&0hON09?ZL?Q`3oM1wK7$;G#uBkD>8Z~25UXQc)vJ7H}1#m^4 zv<=HTz!p9^dyrKyF(TZv>DC}!vP+_lEUdX8q$BsP|3-6QL*X+9u$y=}XxjD?HeO|@ zcV8{A#aM#QIIpO><_QM1&v~bR|3!e?^diuC5Oay}euO)Cp?9{ihY0TT{)_aW*r|P< zQ+se#L4Sh2LT)is-$I;)!MtOpVUvuvX>1DD&~AzTLYe(?m7&3|F=5w|gCMF1M3fhR z7Ls6fL{YxDv`o)Q0FNV>h$y%yINcto zT?XZLHr%v5;{5=)iRa@|$krxV1}j6u%MYfXCg%-{+Q~Lrqc%R9o#47ewLoPzK~h}5 zu^46-F^N!@!t?CPbTO_s{dvq`_Jd*R0=rw?>fPmq%d(3qIyD(gsMkt|aF-o2UVDu?srZ{`{aGNnTv5wyU)xf*ChVY0vgm5Wqo@wDTFRImZvLFCQw730}H4!T?*1q z#>|OB2+_lJvDbSBvt>J6CUI^f!-c#c7NidX5Jtn!I>)4&_`Rt|Jmhdil3{v23pfz z>v=M|GM>c1z?a4h0(Pgg5DO&P7Ig1Pctmn=)TLOgthdsF;fc5_J zmK&!xrl?%Eo$9n*+ALFoRE)cHL29)EMF9l`Wa+PYPI+2k8i7D@$5=YgguEIt|AhmyX=DwNrwVb zl()=Vy`+Qu`e3+kf%xlv?OQ@iD6>jR8v>9XV?nw7QB;kuJx)r;r4tPr1?0GA%(`(c znFHT5`Uu)bklKZxwhqp5jRr*$5{UzlwI2>`c|9=?9xbEBtA;m z5c^+lRq;FcT7C_2_!_f~^*h{hfaMl+0#8*wa+Kq2ERseMkc(Z)9ueEP)1oeg1^w<_ zO#-gn!?*%Y&xCoKVZyldX~svfz=3&6P>xNiBX!N>EdWdP@^^`HO5s&wIL{zMcgj`nFzj=a3*DyQ#&&r4A=l#v`k3506 znf2#Jv;Wxk{zdYIFTyW0DE_w&ZW7w!pU);-C@2WAHl@YODndxz2x$qOVqz?v!ZmTV z*$dV+vjsN%Hx3?CAd;DW{OvC#T(n|o$QxbOl@^Cf?!zn(6BD1m@9)UnT3m*zR{>$? z$q#`U5levmEJCAA&j|2l5K-FCE%HfWM)01^iuBUl)M{@ejCL` zX~)3n%AHx?F)uaY^E|jVH*ESLiQGbV9n<0@0Y7eYPN8kQo`B0d6Cq$XyAN~RF)NKC zUr9Q=XP#wDoom74ug+i({ich^9f^&+6sV>wN?Jo4L|D5b$&}%yi>p&Gc;%`~=15oO z9j*&7(VF$ZUM*&fmF4S1HzM6eX*X8`dX5DikOF!rbzvo91!Aq~!Cj--V-#a=y^Ok@ zCr^JdiX(0bW2TS;!v6Umo8UxVWrv-$tZ_zWM_5lGWsxGv!w4 zvales2)dzpxpVi*<8hg0$st=z1uav*b^_t_ng{U>o?R==I!3GU%n+P8ebx}8c#zKN zh!MC_(QPhkQ%q>p{FGg9$%&Hke)zymoEd!m6?39nrBjZX=h9#nyYaMcn(|+7n|AP{ zd8-{&3pBC!d>Vp2|7P4lBd922-@kp6`W&$RXN{-g)}Pz1{-<7*FPblWQGOv({=dze zHbE;Go&r?pk08isuBDV~?I1c*JZXXH59uqbR;kgLbK2C6UMioF{DppSZ(rU~R}*Ig z7OX!;mo0UN86FQ8p0DrsaNSh%n2ksq&~X<9Fm>1~utKZwj5J2m5e6mjM6reE`Qwb8IO`sN;(3JG`!fzfXZSTS4lHv_16H*;LB7^ws+_( z0rwvh`E;E5*@mm~HJ0!%S|zf=Y_(nFkizqb>ZzUVcQSE)aDRTHid#-g;Iz`hrL5o+ z7&n@fX(+DZEFcj?nYr^6T_n9gmQuZ=k3V}5jla@~s9xzrRUa*7ASUsuO(gBaFiq!T ziteur!bHgpcyRTCTh65itcSj!W^d1B)(;y}s2R>C&@j45Z4SB0=W`H(_m!SM3raBN z{}3Ey=)W7yM+2IL;bT$ z@$*8IGIMYw{<;~zK0bBC{?pd9FUBu?v40^^X+r^71?6KSoli`)lOPd|gdE^W&R_8( zWH>n6kGVMHzN|sAxtmijd1d3*+96M)j~`v8%uxH&^rY`(JyU}$=iK2t^52ZbROgpZ zb?=J{Btk$g{Rqe7MaSXWn*HXXr*yKYvAdi&o=kdYq_FIal1S((Lb%{I>PvjhE)Mz=i!j{2Q3wx2<=JRqFk2%Cs%Xw44VD1I zvp;5X(?J1@w*;V0*5!Tu^aE+LQe(=~dpuDLckPDb-;nr;XDGVJ(dLfgjf*Exr4){| z_uk?@%VQp~PyP?Z;7V!xL6q8Z71ZKAJ6B)>^O?d_iCqfmj#RZ3PC$49gxfC6gW~6BlED&3F3WQJX3B-JM69F|c7^j_p*JeMJ1*Y(epxq_; zBa4kpPR?@Kz$XMu6w%T$)(>bK@_Hu@%FfZ~t?ucM(3ki=CzIVJrgZtcK_(z6w?U$6 zIy6;MHJ>&9A*GnrHLWB@{!MZ;YV|nkL0k$MHa;CQ;}}a*P784x)*6F;(-^C8tD>Y3 zZ(*Y#e%eY;c2jBud7^1LNuI*NQ1A!zMNG~cf%*lIp)uUWIkhOcwoI;rUJo@>1Ucd8 z?$>^KY>c|15xP&RjvRfZKEyrmOpL!9IVJbX@}T1r2ppYxUt}s?EiHspf3zu7AHwc- zU0$`db#VCvb1%wfOZ*!98}-BMbK(+y7Hs7x8Ra*T=+@sr$TM(|m1t7~UOnE|)WIio z;^iv#5$`^PS6t*XOxl=m_$d ziU@!7U6IK;pumS2M@002W62<%!mnQO5`HL+1)tfF1?}Q}mdX8pZiChwGm~M*^Jhuu zgN3H#4B4l~&I==pmu~8rAoq>XNnFGK;G>lWKQ!I;uD_wIzcqKf{+8Q5ID+kL;Nhlm z{1FilBzL;X1@fES==&kXpDSb-aiY2{Q3U~YHV?#mdsL@TvMQx4j}W<)mYrM>9+_@3 zJe$Y;ALhdqM85Z?2e2Vmq{ME}FK$#Kt{4iQI+z@XlKUBD!?up-05?%#02vh{j#t)B zai6Ua<%sE_78@2X&8J`KwiHsJOj>Jzz#*d2LyBUPQsGG2;RuMUp;n;w}eoe z=d86e@*M3cdJ{D4nE0+Jq!``zVEgg(Xz2 zwKz-av1JBtT_K`1-yV0}+v<4L!G2%qjb$*HkZ+Jb#+FnSllbEN9_qxm;z`XoGsV++ zX3YkzNHhIFq>9WoLpP>nUaaGsU*=o{U+1D7Us9%>qADv5hk!g@9Pkgb>K?T%&O4@B zRJL9>Z@;nbly}FAWm!r`WH1sQI}D0hu(Qmh$zX|C_;8`(hZN3|AoO(lDeTnkEUL15 z*E&UKVUJ@U%VLjQiH#p&k?WS35GTq2h|G)}$QjH*+5-GXpGhTk(G@$kEFr@{|E##O zmO}bBrU!PgzGheCBaa{@%pShU`EjHEEhdQZ=08?tPMzh4Qb&svuBJwtq;(MLjkQa= z#nbA2*{w9?O1nT?W~~p@RP{3_!ztFYJia!Sm{uKDMw9+Ucka>?bR&nI!cnh($Vkdq~z9>2>xhQO)IC_O*x#oQO095Tn=;!`YDZ5&7JJHKxY;6!KdU zl3Qa(MyFmx;cVS=0W`44J6C;X6lvkq6aGXEt>uG#i39a#q4%Mnc*_g-pnl49B`Hdp zQ$tQHiwQc4$y1sqJ2RTzikos@badxzm6CO`BPuQ%Gq@$x`5wxKcd5{apF91*%W^j; z=TrOYZpt=HZdMdZOyKBr*Sih`#I~6-SSER)BZ{Qw55}|B_zpCP*ymG5+UxAe9(6&Y zqRB~4IY1Pw$v7+(%w|%=lUUp}7}(1IqOi&~J5`DS^U_B3^0X~%CeqDn-1x2{ zx5&W}6Yi*zXGD~`I8;0O+!=CZWGVjA{CnLTyDpBV00!)IAuB~nB%;G?oE_VUs|)O( zDZ9?>ia{=)sk23Ok6Vg(t3Ktn9_z|I(WJZ?D6icfNgK4NbEh3tv^Y=CHSYzzdqzTGiHW?rp&1^Ea5q#DLu-?e50uJLBj& z<-?HN19cj_PR|Sa(<);)W0eb*-f>cY~1AYZtpg{P(^ zB|I#KmuuQtvI97oDlq4)JSlf?&zt-1+Lrn?x#53bBKdRZj5SO|GelqH1w|j`ls3L8 zrh5yWa~C@G2`ME9n`5oj71K`UT{^V$gvfIV1;aa>#d7gECFOChhvLB&j{@~`?rODI z&Rr&~Tci(OJX2h$YD1x=TLS3ZUm{CT96rrZiC9oRY z26*lw4iN8s-~AQWu-wXwOWBjvcR(;Jk8b<=_`2~Jt|>BYc&Ps4uoiO6wWGT!e16-^ z-y6{29%@b37hqOC83D|cK^O&pWGi7xAgBbYtQXV2!p_+rHk~65yA|G|?_b*l z|D5{m+z&GW^evfzE67NDGyTb|dG4aB$)S9c2Uw*ev+w-CBzp8WX1ToETuy0K!63gF z3mnicN>`+dPHZc}Zgp$@;XJUYRs!lzMLn-fs}+uE3d3 zkP9Ca&U+>>ABXHAI<{-iB$AiX5!*Bw{c9mROKDNo{;Sd!63B@<$VoED%T@78+_=;I z?DUmU_Qbid`F1WOiR-XUE~#Q9l<5(fBTJ!;bxe_C8}h54hzhnsOB;7*St>r z#O|9_6oo0E>{B{~px&aEw(7or__=e7e> zlkZBv9xqFqK2r0w4HY4cmGv~3@Sx>tjqW7;X%?pZMV0slS}IUi-Yv4&gH|$dE+1@F zdqY}}ufcVmn%fEOtWrwRQ$+S4?UM~Ut!QY<0A-eiE z-;2o1hUDDJ!IalqaCHLUOE#gskea8}1n^xYeB*pGYW?}-I9d$YQF%Kp{_8-o6~ZX8 zAwC*V979_kV`V$$%q#}KI0ENtM3%QTaO7bZeD{Z?R)%U&Mk_Y=H|My>0n@3{fLCwC zYud^%-1BY0Rl5Au1?Fx+$z0{MBj*WjovoXaB+(C(4na1y-vSCYRW8M}Dd6T&C>tkd z#INK7^abpE6mT~-TtdHsQzTvb$bun{$o=i0YMz2cZ!x+lo{(+VJgBRJf2AcpgOM{{T%e zWt%?bIdS5>e*w9FA-;b>Vem?G_X4;Sqqk1-dq~?21pE)Qn|ly- z1Oc?c@NC)GY+2uIne?8rd!(w@xt2mzO@wxyu^+7Y%v+r)OfednF_EtG3y}Gg;`Fn9 z*?XzsefVbX81Oqs7}~mdu&cE%mxxuDfK^wR`7@UC=+cS^o@kyYFwKqhLl4uQ1j6oO2 zq05ocA+C>sJVGrFm!Wt7^rv#Ay?veCGJjO5|0r!n7IjQ1c*|>^I7{G%Rz=9;nk|*# zF#bz!HNk6hK$7uN5zziU_|4Uispu*ru7Q5C?Ith!9k>&7{#9GxPLAD+j*v4lWi;Hc z&zncSo~Krq6OE{AWV`&qK%m@DTPz@P#k3FEl8uS{pA6;TLA+`!+V;|^E6>?m%9mu2?v94d!7AC;Bxr# z8U>?oGAug@HLSaSK-e}z?{9RIi+NTmjC$WS&Wxd00z9P_E|xqdakYpqyPW_){uK$< ziSRm@RSo9Mmtf&A_f}6#yIqq&hsi1(9<3aR50yLXKQ*(uRS}s}_@O zKEB_8TMVszeJqdjOBRL5_mxxwAC%>{#6A0j;tr7gz1w_#oPLN5atE+q?x0doYrwM%F5W8MkGqIY#IaH9FjfquB))FGGAiV8N92 zhAmsNsK#K9^$X-zO~g>m= z$nl70lq054YOl*VuC=Q20?m6NQN*6tFz-<@;NAvXuv*99=@N(QG5OTi^eLj|vvWrJ zU>v|~3}f_|N^1{XI`+pe+NQg#g|M@%L-ear@fc_T%G`GjnytJIE(&F(-{+N%8V_)n zmPwNqOWS^k`*Yp96}OAZZd&zsxjUGDpv8WH|5ngy7IhK5Bwr*1tg4wfupSe#gp-$~ zq2Z=fu1xQiY_3U~f%iRiW6o@NS6-gDF5LH9H))~sM=ojXkEnPBH$Av*m%2@H+;_!S z+R??VIi%wyZ}?goOkILSx$ZQApqYA5xF6pg%?A)tNu%ATb+S%u{^Anf3t@49noHvz zTvkaVy^85H;H(#sT-4JIc&GJ!Cdb`N`BpD18?HMl4~k@XNb$2b*(@uY!C(R>?<(5T z^iqK^nZ=26^hAM)o3f83Ot}2jT_$k;kcTXfdy2U)B9|Mi&q?Z0`6AAEV5&-W>sR*H zGNiQ{6T2hW=<|6>PyNm@c(M;yDYDNZ$FK5{sfs%?EJ^~s4uoJd@+CF|1{zP&?uc+1cTIt5el?uslwR!U}kdK*@*i@=8MT? zl5!W2yQA@Q9Sy(5C`E4s;rpS;;@Um$RkBBxn*CWhy8EfO-%vNkV7el;S`LJiMh2-U zMjWhNq06{dJb{GF!NSwAsO{)hh`DOVt-@Wy_!7WiXVAr16PXW!ln_l<1GbVtp%C6=dy;L0&?DUN} zMyv*zhBXth^PdAvXsnBD zrYMGWqoa}=TDL4Zshub7VuHvSc4@M{X*tgD5qkR^R)F%_J@<)4rSmN6PV-=zTGkYE zy4~Lbk{DU10q6;H73uJ{(xcso0ZFkKml6e;9X!FNlcVvFd6svT{4v|jA>a{?v22P- zemMfSl`n!%jmHNQ-LbD}OxI2Ew2m~>oyREL z3W`9rd+FXJ)z7ti_7T54jcw z=MjkJvGe8ey7>nDGXK5uSa1dy#;Yh0ZG47Je7l?Rdlz9f>fMiU5N)C$wv?h_OVo&) zO5o8r{ghgH!v^wGFvu|SQ_>uk2ZL+reE5njxQG9~!n{x0_-C`s%KHM|IUA|ad;RW}1$&!Yu=V6N*RC~@7VB;`UlL+=xJ!MZQ2kB`M$T0keNO@g#3Nd`BW#qnZ z(2p~ks75&bSYdb$bx3I93jbM2?cAs$$-l0P@gqso%5+Ax9k|-DP-(rt-k;o>Vf;=P zUO!3iNQyjJi%H5Q!wyz++z}5N>Y!Teqhax|(CVk=VUmFdWfDWdw4yRZ)4aq0{gMM( zJ*vn|jagKQs!VyP@{Y3H+RWIo%wK0scA)3!r1lvPBX?25_maRq8Q#v!+b~>KCPm^J z(!#RP2{=fzOg+WP@;_wsIF1D$Ws7Al1-p0`(39XWrTbiQ1&CWaKA7x%VrvmcSDi5? zcElzt2i66O^c%n(zlg_NCmHVawOwd(mLlVQKE>h}adW&*mlxdzNYqwbC@b}>)r8|0 zS4EdV`HHmGF^KQuh3X1j!s?gyALm@?5j%X-RJn()Oys@9<~&qevwlfHL8-BdrB?(Q zfaLim9IgJKCx8UPA6X)A1^Z2~A-cs!=pJQ@tQNbN9N11GM`j@hJI{xk$T@h=xoA}a z{64ci1on$Bt&t=|-C>CzgD}P1@i-Y|$8Z zb+q{CFqH7eRQ~)2_P;u&uAO^gN|1|c0)+r~Yr*CBW9}A=*^^+ z+*r@b^Hlpfky>Xm>5}^Q`E-o!8{4(7-spX4tH#P<;Ris)G0!>s74Oh}q}bMDY~v3k zJ>Z$PJW^uf5oV5#lck71iqWvoCix+fC?Mx@xcW3huiQ~v#9jqsw=Buv*#bt6MaMX# zWWbXnk{AV);SPEGQjGNfavp5@0xv_Cqjt^lxTUux6IFq1bHe z{4$oxt&d&iX>B5(Oo}W8#sCJ1NeU_N9j5V5jWxxs*X)e~NK>L%6h5m^tpL!myOa(_grFr6e;yJ1#UDJI!z^9ZLm<5P!tF zSm9SaSgYF%uJWo4*JFtNkgX^vWE=OWHOI6}esZ z5r@;qr!i1cg;y06fZ-t})KiPosl;1sYco{590-%FIafUfFbQ?~7FF-hyw)RPzE;W! z(0L?RZro@!xiLwaFta3docShV)A|EtW&oW?YD%NNRhm7|MKe5u@ULGkgr0AT0-rGc zO|zg}YmWe!T1iqrU-nf-ivJoNYJD#mOy-CoV!sF5P}~3 zmHuRR*-9Z==`yi_w#ViZgU>t@XSxf2C5ma1ELqZ!zZ1}6Xl-nAkZNM={9lbioOn#s z!E$SGnM6CIkG(Z+>orEifm${#ZTvWA!8Ea;2C5un)@z|g{aS8l8OGIs+NG!`1{1Ni z8bk8=M59+O)3qv=Ww5@xLUdRA@Eq0mB`q^X!_l_HLO;pj!`Pk(KQluIF})& ziTe?&Uj-!w7mpxo&zuR+vFDkT+wvM?lH5G!1v}?nRc8pDX zyyjcb%n3S9qmj-!>G(^xr<;Pkf~d87xUT?5hw$1FMU)HX;+c~rd1T);LL|E~veUa2 z>==nGdeLnGuK7SXdkd~dXFm{i2u&^Lf$4r3!Q;-6ZzPtd7Vjyx2z^s@WTRNo3pujN zmZCE(qnDT;$~;n(&=QHs)rX}9U38ri0BUNLWsBe1{QYelp(bBNuE z3?D{ic1nJy6hvyniAsvsdhy~*Gq=PsYQwJ~>IVRMDzF6Ug|3`Ja~XKHZF)jcZaKbK zhr%=&xza1S&m!04QwOF%Jy-}DWpV5lo~;U*(kz~t@mPL^h1JQwB^V)|2_H_MrUvwR z3;(lLASp9zBN-(FK$;=4RritMJ(Xep{%#6f@`YWt9F=3zv5QDVn zqS^)f%(y$xVGC#E7jo+c7kU}XdTD?tBtK6q@=YAC zk36QvO5q*bELi;+ICI#u>Uz@)Y-PpFSQC98gjphbzH}WyR$(K2 zE?jWswUSvvGj%jghR;!4E*T|bGVVy3e3n}!i!?JgBa06mNjA4lQDbItKzDHbRPnO0 z)TH=?=LEH4ycM#?cUg@7^|FS*=*_8_oJ1DSFrihY5118@L3IH7#gYru-Q{kFoAJg| z`cUF*>Xl#$N$0ps8={5dI)SzbP_o_MZPSQ&xVs zH$-QFjDJ6dp=&)WIAlWjcaflndXvCp?_v42!AlCm+-vsBiz zH~Uh1n8JJ&V|@V`}uxilEUVG2+7C<)pAhpYiFm^0*mB&}@ect5QikzoIqWFlD)hIrCy* zmHH~ITWWHem99xL&|-z;9a1nKSm*_Hj+RWmacpcowk^SIta1Hwa+GL+B%1sx?3kA1 z)+63EE=CbMviwxlnFDje4e=WW4~zTg@?|F%PNd8=vP96U5+X=}er)|Rd= z1%Rh%AWP4%X%!=i`@0L6Y!+VwQWZLG*?}@HU}w@EWAco^hz?SO`RNKruo*nDj9G>< zivBMBUTuiMCVVDWkLkuL#KB&NvDKm031I?>T-4FLqh8yPU3XtWi%oc- zFa@px(>>03qg;)-&A4XRg3%{gpU%OhM154vDcn(lR>T436%Sm+F0ECoNtuHHYbGIz zDdlL0UE7#_9+Lbudlwao)?pNjnf16axnhq+3KGG*??@Y0>6&u_B4-43b|b{OMChG( zo9(I)fH}^1cF8_YIf)c!)W%UayUn>d7zl7+uiE?OFVFzZ3AYY2BDV_7tL*HEbK^|W4%oi@J(ws-H%f1k8*50 z>ae=enj<#c_m|1pb$XaWnsgJaG0+R@6vnwLgGe(P^A+0_{V$EDfl zJQqJM_?Ka*v#SQyE}e^M2EI$eigNitiLIRFtIn$t*J1RV;Dp!ZkFp5b84Yp>&AuO% z0r5^bn9+J%z+&NmxamM)L5jTKkh!`9anOqVM41nlZDC!`?kTDnayLS2or5N8rRhafM(kBz5 z+nev+rwiXU#Yx^x0_qzTK3yruXHdxV|9*G<2M7Jd^o1|hFH|IqeLlya z06s<<7--EDupn~srB`>^ttK*s5wMAcB-8xE2vL=zm?X3~oQ-}4p-%OoQP3hm) zWMGOW%!=ss3?BaebkPUn;@)p>54hdjTzb=7T{f;8MAkw0u1oX*euys_*fdj&nNi1U z#!EX^RYP^UFb<*zp=RubYitjOQfT6UUC=|CouL@}iSH)l^^?61f?Lk7(wwK)-TK3z z&RZ;fIkMizKbZf<7;FUxsku;}R9P6cMRns>&UV-@Hl^a4)&hMrm7rE>FDUqP zU;f{!FPEDNHYhV1TRd>wzgP9u(Rd3RE6tPlm;dbKES)a9oT;B0*|aA#j^|#Uh7ZthsA)Y3*h~Z zsa)tBgLlSpA40HItF?&-*ShY5y_IWwp}Z$;w1xeG=A-u$hw5&Z;ziH6yMH)FUtc$W zB9aC+y#8c)HakW-X4D|66W;Vbb+Ok&>mv-b15r~Kn>PdUPDx2BrJ(xh5P9N z;zXQ#D4}g`us023spCq0?eG*ApTiaZ{EW-^DbI%{pF>@%d$iW{>iBrv`FQf!<;@9V ziwx*4RvH$q7zZRZ{I*CfR$mWW1(gmjq_(K5?|9N|syh|0Go4iDn1Cj@QU(qdDl|o( zFZZ%MLpv%1XKKvhQ2^y?DFV>gvMi7Tv*cmU@`$WSTNRN{r^Z#z#8qI=Bxu*SIOK`2 zsA*%Drbd%WYm8Y0sb)A=00M~y&ynGZ23_9BoD`b&fTDqle&)v?&qexEl~cvQRFbm? zIPkbmmt>=EIyX<#OmBVDO%3&!A)3xXLk{w9B??D4g3OQaQFlkV+x3U{)>NDZIEQ+M zCV2v9m?t#8hH<@vwu#zo%lNa1mTnUngQvotZj+35&Ys!Q z=Z9*Mrb#^JApLP4$ORNkW^X9^qv{b;OYwPRccyznlEFOw&P^813JA~L4zN^go_zpP zq1j4lg@&J%C+&J*}oZDzC6c`udGEOExsv=g!Y^^L$lSz(Gg%3?NE%S_QKFP)E z&oDtuT-`AzfXayn3Q2Te2hu&Ozr1hC-4aLTCUIbR~t@o`Tyl&))gPUAcJ_ND@|( zkAK;Ln$i_$X9C3yqI^b5i{c+U)ps2%TH8v1!sLB!7MoI=;&zOCp($CUqe423l~H|f zTpC01v5cD9f~p*JtENgqhYh8hk}|7jxN=F%0^Sh-Kt(;($F>Peu!SNa(E06+r{K&# zT3&QPJ*Oe2VvkMsb8?s$E`VBY0srTQ~SVUiQkiD|3u(+#CgLN??Y9GGC&Rz(Asg9W2EBdB0PcS~hxlaf05D+0l&>PZyNp1v%-T z-4bqXK;t^35D8ksY=VvQP1rApf2$A?p9a|WqJrUvxC6YWBw+%<|4eRMtUK3cq}B(Qlre%PKA~t%{(6Df(AF;#3k*tXjAOo+Vpz@*yz1sD6`B8FQM;Ff@&U6{ zI_`D%ZA?H}bZ3OBd?HX>Hnn}qt++48%dpdBIElpRC$3lTwVE*gqL}BZxJNULdx8vz znkmfskXuU8WKd*Y<4DK)%oEM8Rmc3Kf1k5aDHp>Q_#BS$`CQrY&ys6tBS%x4|7m~D z7tI&GD8JC4^xtzf)=iC-Kgh}J7juixffg_6s>4Xlk^8}8gx=O^1-0az(>F>!lWSkz zUN)W29Xk5+|2;^yL5)g~9SYy}x$||?W3t1+A_{DohHwk zc7=n_W+_|C8<=b3f@Za+=w#kN&lY-#PhRAB#+)t9%mbv!VSA&^t%gjzLE!A%kwKx~ z$f;n+$XMQ>6!YvrjvSexE__GTY`M4x1s3?k`cr>Q(rI6ElbFS2HVLo6rRb`7wuFru z&o(QVE%*{dCUnPius0t;t38SW;mGe_Vw7T(%zR=BmM^}U4D@$%4R$qy9vucVGk05$sD&#JOKi}BI-`$XJGk-wDW z4c!720i&gcH0MrCOFc(}SnP%!x$NMAWhn~L?8i3#dvfJ=EJYA)n?rVv4ZEcnBF)$X z*_RX&v4?~!BTqpLx5y&Ln1y7rvVK{+Sft}MEE(!5OL>gYwg^DM(--opA*g6aCN3fr zoRVZIzqrQaoWizZT&por@BLZ;WB9|QD+M1)=z6)p;%oPb)WR8M4 z^ZypAEOjNvZ+_0O>3^QDfA$LaU&r+;%qC{|x0d-Yk}rG_ej!p`+6I{c!OOZ4QastS zp4k&r%uJ%Lq(9D~R6;37KK~b-Fo&%JQk_#n14)%azt65eNNK+xemAcGQ2#QdB4OgF zM5D=|&1O30Ws{ChC(se0{_;F&=>3sm#Q9H#FgIs34I-g8`DJ8oj#=cH6SQuO+#U+v z!|VA`=1n$07yj`0#iakIILzB<{M~~)jD-pxGz13a|Dx<2gDY*jZqbfy+qP}n=-9Sx z+fF)G$F^7^w|%I3fD`8Xtg=&<~F367AJV zO&gMxIg!m?85$uMF3jqMEx@qaIjo)VB1!1CkHRLErVCFfKmUR&5xr=a6>d5*{`J2S z>xU<>L9Gp<6q5&THzD2S1XO&tR%EESDTYj%brxmpLkR!&4>G2bu(>5BVR=n1Uh!~ zEb&)?V^RGbMx*RLU^B1B4C#eCAi(x)ekVtuK8|ybW=xFxAJ$8GP)D38bGXqb!ECuw zguDK!DUb}jPsY^u3pmUPxoMqWsSlx@Q83J5R6QwTOukoLWDS60n!Qb?<9Qd;@3#MQ z9#8=EgvW^aa*?t52SyD(Kp36zUjVEi3Q=NJoxh0)U|%pgu_8lyw96B zGYDO{huCifBgPK606>Iw6qMDwMUNeu(-a=zDk7RXo< zTQdS}ex>fbQRb%Pt}Agb_N4P_C@gl_bJ z{Ny))ymnS)4MAB*A&WE3tQJ^5h!n+o?FAu)1tvNw38dYxP~wr5l{a^PL9n4B8$YK9m}>5IBPT%#LZjlwU4|?Py~lNufjcCpN@D6n z#F7Ty8^qQ+C9UY+DMg7%0B7i^>_DX`Mu8&gn zOcKj2H~d5xN*@HzQsv>!^ZW%`b@i@4Iz znjd`=lqHWt?V=q}`wA(S5xFwooFe8S2PA@N5P5-z`mDH&BFt7CZFcdK-i;3wN_I*{#pggO6wTf|d22QszF5xlOs; z@StOw*e(lEyMj;jC01}~j@lYGtb$6`2DRU23=Jlk^0$UscYO!zneG9skykgap!R2Y z1vvq9*fhxDD|)W{9!$`?ql=VMJtD_)jr3KP+qvR*vlw ze3-e4DwIqa2K~&^WTMOLJTz5tDwG>K(SqESp)TagAJ%Dur)1$KAGECWf^B1b8??%m z&hr2|1X(?%6>fx>iyJl9F>c|M86gJd_S=FKgw=n z^;xll`cE6?4jyl9k2$*_tak3i0-P`);{a}2$;PR~u3uCenZB;uM4#FggBMp(0BP80A{I8>6|49-CY`A~Mw_fGH>%{8jx3MS`@+}zryc1CR9 zS+U1VM|GBhq#co>!IV-ZGk1Q9vF59$3q3z;>A7Ju+sK})M;I?;=yBlad4L-YN+7cd z+jK1{q}|?9ox1_ZewF4Oag?ByG}rA*E#5Q$T(U%f%zQi$Wc@VnkyAjU&NM#VR0{$3 zS=tvCZ0OGYAvN4xP~M>+{Sm*G=i7Oyri5DRzH~! zsEp$aa0}JwHT+|8bd5u}xf>841(33MVT2~0~w z@UX__q#kY^6nU0-VgtNMbYi30{#c2kKRTzYs1&#H8C)H=e>|KMXEd%O#qyZ33w51g+8YzUto@0ao+?x%-p^PEcam@pXen6j#?o`;g7U1x=!)Oibt?^Nq4 z8u zOm~3;jO+d;X-yq1G_RmskqyzwJ!qp)3d&WY=s^TcHwv3l2A+xXNs>i_+2O$&8!LXr zvu79b{b5{xQa0PPUsY0HJ{p%9vGMce_nRwtRJ`>S9Js>#TCLvZ1h+6wT zSelw4P?LA0KCS*gowOXyn$~B->?!vUSQY(bFtPgDGa5JMT%YigR?pBm(gDuzizi^$ zLM9g+UHN|yEF;dLq#x;AR;Jv|p}NdMacUC9=w|7L-jtp(_PrNH9UHDxTcUNhYx;3p z62)v+^_fFcdt67l->dvwh)ZA}c|MidVYb=cfp}p{QM`L2?#9B zt6V{~ZxhC2@OoP}vb-m{VVTzYwMO9X)T)`*?86ft9IJ?QS8gP`BAE8S&ZUeNp1e2N zMDJ_z4TwHweiC)AUf;PZsyy5BOq`81$+cKftKx`RC=1MyG8K@OEm%N3LRK#yrcO#WtY-2)&q6Q_0E=OEtXNM4yETz!qN z5$&K+b8BOy1RZ6FEzRWgVM^)+yJ5C2;8*$bd=n zzT*o)i6&4!cu^7eSO>YHNpxtY`Bfv3aBKZgB33)@X~n#B*8>cZwl{L^367CX6D2Qc z?wz2Y+v*{|1c2I*B5jo;oKWV+6vUk*^jFBQnvu87mrUZH78r1G(N{>}7@q@hoF4fg zI)I8r^fxq$+)r2`4i+V2756|GLwJjiD{yCK97T9b_!;AocuAd5wu-4#JqL**o>qM@ zX&wj?lh3MtFv8f}Yao_V1XGUl6XI=mj#WJ+(ICXqg&$9G{5E3%)~-n)8{3uN8;cp; z!m`2XKrQV2_rQjwQONSB#5TT|XQI{-4dd-PJ-}9Q*)=Z1Qx~#bih%^0U01OTZf&Vx zj8%r;T~VnChk*i(!$3YM`~;+WS$JE9s@q@kVO}$C1QHP6=H2mj{Z`BfVf*Q^zDDh(qz(aIJ9WTjK;AhiF-KwRwmo%+NBRs&hZf$Frb? zkZM9LW)W9~axBdJKm3obJ9@$(ICkE~Q!e7pao|{ykNwfsHMPk>1v586B%E!!y#Ts*vw%GU`f%RTdYeY%#S7OH%09F3V5KgL)PE1{Yn=&PWZG z*9vpF_vJ2XDV>teth@+WaOzyWd)e8MK;vuPUO%C49aBL60~>-B8>Eu~j*%V@G%pZZ z8~j)wA<2+IdeBi1H-(=i2g;cpRdt7*=N>d(3vMnpxB(M0p1AEG`r1?GRw zc}5OB8X7MP5rMZfbQ&*L31~y2quw|oJUKnvu7;GW&XoC(D)(eU2NeMn8b3g^*nS_lDa{fGT?kS}dBkq4#t~%*U+?~0dc-b72GjU# zBJ=RnYm!cc$t>j6)o*m~;tGVUl#s$;Mcu5@ab4;n`sNdqMk^NoHtEwKsqVFYIOLPEO2T*B7Zd&z-om}dg5!+ z!z@_0bw7R{1iS3`9*EOk@GE%)MPN({(3Smp6#pknqsB`=U-TKXAZ9HR^C%U1&S zQO@9eRf_GLE)%VQ zy$fX-Q9-lQJMu@+8Zv{pxn<0;TT248<$gPhGO3&LFig$jdQDJWv-6bG|NF<%1l>h! z+bDl=Nd_YAXSqxDyr%BFy?{)<_%Y4zj3w@zxmQZ7EI$7LoCv$!XI{jq;g+Q$_7@`h za&Q2w+E~2JtZLK+xyjG~j1&vLD_#Dby^oI3sSl%Vl5r-cbA_&k?eR2WFf6RV?-~n# zTl%L}q&;dPIR$1dT{1@j`Y?0(ahks018T%gH<-Vk0QOv#$!Z21`TV|4n9ClF%XE}0K?k#3c^^*b}5|nSfeqfhr#GTr+)&P)`sr8YL_6>zO!# zz+O>SPS~Qm;bC=|C3oqek<6J#`pHp-xHL=LlyXO2OfUSl9pJxP&-Vt~FmmQ5=tF;w z$o5NBoo2cX0(2<%AXHE{4lwi>XSC7H!_-J;{zNtR%R^@OlM^K61rfS2N8G_+2b1f2 zc{Xi<|3x&|37_}O(Z=uSG&ntr!Y8KojxBSOzOY5%A0kTr>7Z2={-~LsQ;MuRo}S*P z0!rhqW*{mE)+Sk5@!UrJTiHvyVsAS)=a@$EeSP4GD`8p$Qdj-P<7jH0$u);NIo+u~ z&ADFvpj1E=fprK{3*!ARU~5?gWsL3&tvIP`e&_-%kQNDsBBT8|mCQs#F8FhT$9{E@UMgi>n_i+bkn|D^efogC zcrR%pJ7u->5a<{IYHKV?9KM(pE>$=?VBm@%HhxvOTHDfTk!7cV%}a{pvibg8u-ZwH zWxQ%z)dE$Y;KfdVC~ika%*%6N8WfD61%gQpgcR_r5sr6V$EX0u*u3I0-1JHmRHguv z%@N<`O^gbd9ZI5ylt8LnJc0WzENQ+~z`(H!o8%*P?S3;`_@!H^R?1$akiS;t03 zs%KjfW=6I+krmQ@C|H~UnLFu3NZ4qmW0N#jAr1Yi0(@6!iVllF2u(R(b#zBc6plE2 z2Lcu7AZ!mZ@A~n%O!l|@_hzL(lO~4GX1J%;?ptp;r>i&qc-UZ!Ym#x>h(qC%uJKy|Kz~+ z;fHXzqurQ%A{)-bEm*l*twg$HH__LpL6 zAS;_bcH2>Kw52ZWmbUkf2sP&@rL4%fRtjt2bZOqYeB@Hu?dq^O%cUb(VM^JK2}XWO zQL4U;8Yft3JumkJJZmkqIhM&Z&3qY$!cGrOeX>%IbrW@K9TF)b#$e5boPsmJ{Ox*5 z(J|$Pe5(=Ybsp(*YigRv&XsFxp3PkidVMkLxNywQSuI(gp9aJrbwu*%G6X8$2p1{k zXI&!F;MB*uA^9)p&_{x)<}*TnTbFyVUi7^qkf?VAAaRth+1^nh{zpl1sJ?AsU1y)KnMehN5oWv;udHe z1B@7i@mei*`?k_Sl6+W85gyhEN-I>V8;{+g%t1*}-Y3y4U+Zfeo6!D&EHIDfsKoVn`tM#^|&J{#_SR<=q+Z-AN8lTk>M28j! zKFh!nk+$8+@x%-y)>b>G2@6+)Ha=BHZ!s+DF4N|p=l?wVqwjZb&kc5 zCeu4hv-T1{r;nnIzd2)F7QXl%zW5#6g;!*sWeDq`d}hPdI7h5rsp5Y_4c7)3qQ^_= zfNvbfYP~E??F$4KsVhD!cW>u;0dJzqwBDDMC8h`W8q8ZEq-hiBTV+V6BHaqk&BZJ@xT0nI*+xT3qhgM? zcYMuhe|R^npGV$r__Qw3rk4gnRocv|xt{&T<4@rZNIwh933rFxzzt24v|+NdcmcNJ-SZ@OqR@i*VpWFCmCjwmtacZ+L3sJNWZZ z&T}cwb1Y6P5pgW#bQWuQ8jR{m>*5rJNuJ6pPlfF#K2GE@j>KdSI}TIIx#OYGqn4Z? z%J?z`RUBlK#bL{YqPuOBAW`9d!dO1?*a5Bk7E4sUmw)IwXcF>L3xDnYC4Fs9@%+2d zl&z7om9dDMovnk@e_1H}Ci=!V={Npg@y}*W^>tc#&9YMR{A8Qvz6d-zLGdWS1m*YA zQz*H0V@1?;oBGZC=bi1F^uk56{F})EJmU@~8cJ&viR`yOPs>+7Qf~a> z?gGm%)EKQ6mc);;ro1!u9_?jKD6iI`mBA`PVfaCwmIz1Gv-Uzrcp#fMbmI6 zv=hvMJ5O6|vz`LtC_jl(`g$yt)xh^-{zRxo@@r;ks$qIbK02)Dsntj7P#sL1^P4%V z+sHsxdBD(V5mBf0Ludxpy)f?XVjzm4CK^pnq{2w!V~8Oi!$b+i5(G5(JBCRxTjR$B z38O*G+D-4TA4Zy5M~t@MB2AVlLVz)4Shtavrs;=lvxI&k_nS zzeEPZb0*;0B3a1(40oEa*t`yu3a6r)2LKdCh?$MqUr)Dm-E&;F}kCF z_bk?N&{rv`ne)J6|#_QycR{d9e9i%pB zy|z)sAgxJE(iUSiM%2w~5YzHc$H3K0@qLO*hlR5ndx%tkU?Xouan3MuVji=W;gyrW zkxX;1RmJQsAoU%Ra-Lc;brS)L`g}M|UtL+blY0bnh(_C%N03!;AH7{98$1e_Q>LPh zj-7J4_(PshwK2oulBeZ@a1m;ImOk%6oVR}*=O)MN9|wJ{zVspf>uKtLLiWD|>o>(W zzUjVEq-JS_y@>L8dAVj-9m>ugUY5u%3ohYe`awSEjN@sUaijq4f}56>mel9QqeFTg zx!OoTQQhG0=RTkEB!sV^?Bf@po~aiu<_lj|4h$kpl`L7LQuZ1riQt>Zb3A3}dSSmu z%-7*~G{JN1^^|p$<@u3Wz3qn76YQp;r@bWUVk8EK9^Mx{WEPqu=ZZ|-e}X;{BU2ca zy~-fu4{w&2Koq&qVJSMyM$Ynhwr~j-aodL=lFn;8n`*B)LBs8!T1YDw!kF#PAOC3cN{CAmh zQDeK26Nn|a`5ZaBu{LUW%1h#y4vJ+hZ4_#joDr4xxm;0HVGbtc3CNg1-v~+=F(fTK zxafH)R{x5h3}t!V0-;}N1m;2=vJyg*vo&y?UA9F0@-J>OMhrkOBHp(Lg~_6W)h@Bn z;1w^ETDizkQ-LielXC-)2P^Oiqtamxt;AGb!cM+#Dv5 z6zN-dEb7T@6keJhfHNyzZ#n*C()Np+LcvBJ8xot;$C|;q`@jwakoEqR-pblShfqjb zeP}~NN5M7gd8|&!!J?K5*bnsFQ=-saf_|9Gg(OUu+9I`@Os-;zD4v!qPF@-`@C6B9 zmu!%HpO5ZsIs(8<)KP2@HOLALy&E0L&;W$KyyMO+2&=I3CyCLG9EDmuKInZ)Et(qp z-BFb-qpU#7zLii*iZT~iH}V&&cv+%!%p(Q>4di7Mbp5FMD@^ltHaQH{+YlCW(vCHb zjR(9YsDsx7W7yeJSt+J?+dKZk74l@ zsyJRSL6B&-L2(|n>qhQ|$UFv7f=ca(Y#dlgcbmH^AO@=mDtxVbDk9F-eB9!ntE+oDB(6*|+*W_|!4*N^zB_qh zn8S9qv!26Loyz^0IrJLR167(i7!r>myftSaVzzchsL|L&xE3ox7CV213Gt}07A5;b zZ1e_QHIR)nCR%(C;Mu?dF07lMiOCLV{rzdM?>)%;a(IyIfBL9FoN%J$Eei1)@(Ry#f~($T<-V(eEQkYl=lO>PEQur_jSo z%nOyR%W{&<(*71#9Npy^A2*fAN6e;d{!Z3N93mE`X90wDbri0c-XB%eAm(upZb8^Q zk~Mf_irfmQ6@ySq0ok%O+PHT%q~KOK1k>5cy_`Q;B6)~v7p4RoMQ=HMn1MF&Cg?^_BY}_9 zfcJ_R=^5apCnNx*Xw%RiWCQ~+?m*_XA&N6q>d~Kih(CHer2TaW=!d}vewVBIr1?FiGU74&UnM`t>B zo#iCQa^?avDzVo)M~r!1z4Do-_5p51W?KIpL2V!D;F^qZiH!O3Z`9ijg-lqtJf2s?@(o-5 zu<7#;-(lU;7r1w%U;Da*VZM=v_g_XlVb0H5PJ7)3Ts(CBsdbmJvuQRZqc?HbADI-7 z{lvkgTw0p|a!o^$h^`=>sCPP?w1bXz%Vw-&=)Y;o+zNa!T^`lnys(K??&WVA`I zlo+K{{(}9_)u{nYkWYcHQZnkRto)ZNv;TSQy{^P4kU!%5VIqI#qz@nWw3s zfm%?dqKq)hTUS-T*%tv17a$-`wy=2Zn|EoYi2SZj4X%5;_n9Pq&kFBnhVzZFKQ)zp zi0|kh=Wua-z33Y+4{v{5e^|N+s^11?9IC|zA$1|CjN2?$epRO)r+5uK3KkJVIllN# z@C5cocw+u3KJ8^Jb-3vDHX3a4f*~~O_@YqFZJ`C~6Js=J- zK5G$4!>|$^2At-+{{`ajEl5B4v3DI_m-#Iu&0=Bo&4; z9(kS^hsE~EaPBb0aj;LXfG@rLmyCouhYPn#!^IMY%L=R`YL*6FPp=o+>ANJFV@ZTM6}qpdxK&` zc<;F-+u&2dRy0*Kr?6jC8@Wy&v@BxS+<*H$I{>NLin&`mmi_#X($qB=d>8R6v}C`+ z?BCsI$^0i;!*1} z8s@JW3;K?G^Pi+nXMG9!J@=+8<}4XzUXNlJR})JX{=m8>mpQG+8;-|QpYIP3Tz=M8 zOziRJ9tv-1U}r?Oo}V?x6r-(AoM%yjpQ@sUv%6plp_+Qo!G^x)o_X6>9=6cKf(d!d z$sI*^=oJL1h6r{c2K#jNWrZiMf1pnVCgOw?V~|88gLH(TQE;l|_}k|(J(HShs9psx z7_8XmAri|MQTwOfJJO4o*-n);S?flO;{>;c04tag)$8nW%yDR#3K!yYV>X8V>QvhF z!2$BhFElU(qB3b1kSh~M$MzNSK^cc^EYebM)FQu=Tsx{vw2;^D9L#wm^n>S#(e?YO_Q2_npHc_+krk0Y&_!Mwr%p%f! z^*g>WzwASNd5TT=7haTyHSPA>#Z1R2`E`E^UGQhu4=J_Y#NJLnykY+u#CC9!-$JO*54_+s?UEuz%HHww^mNC^iI|W3_djfY-c|?}wHBWCe>8wk zv(4On=57>8f}VJ~&O`P}S}r6>ruL-t{lNz3J)Qq!Wk3K6X8~}mY2t-e93ovS+}3+LC&*6rrFcO zS|V~F<4Ef%7I1*MsA}RP&ryvw+3a`P{$)CskzA?x5KE!RV2n4fm=I286G!Dm%*v4s z5rtLVS$Phc4mzFc))IV>k@H!EkdsWa9ud!S=Ay}?eOGOIXTR<*t}dJk6?x;nEa%S} zlg}Nqq_~EQ2Rof)AnaswTqB)k$O!1K9s9|CK-UtR=Ijbe-bw{D(cTV3y@mD2Im|f3 zj!S8fvt}_ys}fCd76F)KrjB5Ah5<^8uz%wM5FJ1qGg(Wne4K`+y3}v%RUHJ z(Y3Y~a*ZP5#iV*DeZ5>B1iAFg`I#Wf^a%Jr<3iS*PCDr;hirb`dkX!#K994NlevJb zv8#ZCgTDL!;_&X9?i=6K-}wKWj8HAcZ)Y_k0U^mH+fh{Cf1nVT!4pB;gAmU?e|tE` zUD(uf1z#V*-3lP_BFcE(4SsifD&_MEcY9N_xt?-7FI!zr9+$6d`F>33`|A(Em8a-# z9mZ@N8;`?Ura-edvtm{u4Cxqo~ z^V5CFkJ6j%U?Pr5B8Xpt8#F9cFEB|+P^SBrO7ZEPJYhDfDD3Nyd&QpYsn9mVo@Eha zj8oM%?O(SUrHwh0H}oFH=&qvX;n#_fcy~aN$0&sC@-()R&-7T|lQ4vEL6@2A<{!Vz zrATJ^Lqrjmy+|ZzTap>4om0l-4cmLiVtTG(dI~`I#Y`-FubEpZ%`N}5|>}jmy;nFrZ42Oz(VL(EipWsa7xY~g)Bc30u@@WFuPH{+VsT$>)&Z* z%75z;WI%z(rDL%$#maS@$?zI0+_T_F6j?SbY8geH!Qp*u_7o4VpfPU($tOpzhZ;j~6oW(Xp<>FX$}q_+ zM-4@PjZM+fgLEs+%w&&)!LP{%-rtZcBDjn@G^tvIp`k*}x$yTTsZFh2$DFeO!)BIY zqfeZwQFtpXpC&D|@Dl#iFe)?HaDxYlBX_WaGzA5*r5vMvvVztBiN45qV;Crc;u3Bl zOVGHB==PKD1LF3G!KBNK$CPussn$gHCsW!WQ3M~)g@8MCU5>f)ywRlP@8f?6oCv(n zLIi)Mvd*uF{dX4T^7`MNj$b}C|D~S%X8Fc9<2RxezShJA;JuTD3-*a;OYL;T|={P0Lro9%@J=o%k9AIi&r>EizSL2ZyhkMu_a zUTxagtjd@Leo|DgA*nZSCZ8aB;q9hOIuLyGcux}88DTL1C{&I}V#F7SRvnrE#Xfv{ z>{k*|fr_#wQ9~qs(j=+B3&&5jct)%s!5cCc*D67A)MH9s?q^)Zk!LfpHYA7xFQ?pj zQ66g3DP*=Rn!l#0PYATobh_`sb!3x2y)+bLj14+XOw*o$l7@Z|cp4|dQQ!%k+|q~X z3l`s?$fUh0CA+Te{e)<(i#Yf+E}(pyRizNoqzWr^X{v4hr53T6@r-%@>k3gFjS0_dGcw|t z!-?vLG#RKoBbeBU4rBPFW9bq5?4B#q>#|UiEcEFsmpcFWZOJ!ILx(@6GB+44k5DGygpUwiN)W(t! zU-E?1!DsGNtY|LPJmEx1ML!*aUOQpbFg~FHtghLxu;m$#LI_uL^GN*AWC3JBX60h`!I;V9zckO)x3NxC?0Bof}VsA zQ;IZZphsP(JtHfwIC?*$mJT(79f(!6+H(!^I60$bwZ!>Ik)ont4s;F|e7%0vV{bGH z=GboK0ZRZT<+*~oq1{4hxa@7KfI4D3QFAt`%{uV8DD@T6kisBOdzc6-67I5MaV2fembMT-r#N4Gf2P)=u|a9w z>4vYIwho4(H<^{z1vaYmb9**Kf4ORRZnlIv8+^HH!!Wrcl-5N6B7eeNgdH^nlz4>q z%=JWdis~42$+)3uHs-KdWzEK@Ddw;imom#4RL8e05AGRsw_YlqNgIoWgwA7(qsvd` zEsq$Dw cJ?h6&zdG;`ECW|j4{ox$)M1~aw0Ipc>BQ{{iZqpKg5Uq$KGFzKJFO;% zI>Uv2)$=Q>ZfjZTSQ*wyW)Xu~d^W&LK+g#D?5${DQ8!i#11UkP4AI{po4(mUOVQPU zNwG4aL7#mt*uh-AzdTOuGCC?jiBRU}gB_z~D&JMDC@;*#Td2X|ak#JXf_Ft?mD(6C z+z^v`%*|r&U@y!=<2rmPVcsBUZ^fFfaUWqFA2$yVc$d%rn_}$K!9-Fp{)?}E8u)NC z@h{1q&UAqO@D-zysFzXc_Q?5+O6c!XNwRyR>Kul{ji2`qg<^~lhKcFSb|996lfQIP zkh%D%;pGSO^jnNTVuEd>cvQT&4uL;>P3Ef^UpPn1oc2Z1vE6K16}zc0b= zxkGBg;U&@wv9`-2J+VqvuJR2WRUGk#Gu8lsFT~wp>tf=Cw%FP4jD6%hc5X6IJv^|*&3eGVKjRm+ajuz4YsovsHA=2lNcL}%o2%pv1p{*~?y~ybp4ebRH$4QY?2k{=imFOW z*@H{jBo*2sOE-=yxfT1tOOp=zW1K1VKH|K%@v&l~dpGvnd3HW=oEd$mv_q#k2*WBt z^RBQmkR{ddrnON&w~=QO_uVuw-f=O8cfCS#1{rx{716E~ny%`H`1C?}1&Me~RC#+j zy&~9$xvnvs?>PQk0OR&aa8KX-W)CJp@3)UKL_~VV)!h;6^4(jbdxq@ZvwRP?4T3Ta z!ZQ`Y*@k)6pzd!b40FuKIUZE)^0X5;A8?h#86GvjVIi|(BDvuBCcx^_ zfJtXSDk`_<4`o8mKQGnsW<7-NzCQfozXYxR-J_}eEspiS73uiq`o=f!HyTye9k4{; zd1yvesVi;6E1xmB!lR2CvE%gw!=iib4f2gHw4D4`HdJp7Y%MzftZ9=4k(K5@!|Rkv z-uzHeZEljj>G|09b$2BYlumk_DwT6}X8iZsE{%Qxe=Iokl_(p2 zi^UqyIJn4HB+Sa&{3XayBk?&yhmqRe*MG)591k~74yl*%t;^h)dH&Abwri?!g>xqX zywz;2xLdd-dBQ|fch$<9Sj9+j)T+ER7tEVMc&0iRX_hv~PO>+=2UB?_IITt&Ni-9f zhCZD<1j2q((?$Cu9A7j|)&|swW^-$5BmN0h@gad6eNY{m2we?6lu%KIp3!&M2w;BF zjhP(#w^P^G$_#hY^6aiYq(oF_PgPK7|*fJh1f}_en zkPeAJ-O=L=6Z<%Q!caL19a89S#6AlYGA(m0K!L>3knrbWqMAJh&}uihd3-Zot4%n% zPcp-g$Q`li=xTp~d|XI<*;Sq{7372JY5w%{pmX!Ch6cqS`GMmYkJq-sRFTFqA7*ql z&xj9%C>rgKbVF{-uM5jDBt6HO+*Evn6i{U(d(K-1VsYTwNNr+&>KW`$M>c z!{Fc%>>O)aNZl7Nihq!K%OTq3osN7EhsFT~EON9lS8mvL-K`uqqe+ICM`dcW-qwBP zuq>kboW*XmHuU;wGirCJM3l9VRcC|Zyo}uadurg1EUxZiwEEPl>-bQ)IR^XqJ>mN_ z20*yN6l%Btts3sW!y(4_HkMWB%p_SiN~7L1sb`m|E?9M<1z!$tzl8Js51_LZ0K~Hm zfRKgV5yvc!o&&nuN3wUGK6gLMEW_Y^9Wg!|e18?`9U-qVt~&v4Q5V>_lpc{e#1X+c z#Ff6ei2V*>zTi{JVh)|b7dzee5{)(4(>59<@?IAfkX@Jw6mUi23L!&CcOmQTP`!Dpa56s=Kjv|_x!FP14EK<^UQreT|>kSPnRkSTCw zzvBD0j1jK%(Vyav9uRM(yLv_`8nKs6@$s^*43D62rgiRVh2T3+X!mYeH~M zWF`!q^H3QR&R>DQ{M`!}rdjqOGi7+#e5X;r-cde*y340GgJ<~3&)Cy993M9vr@f~f zr#hdO`Fx)d`1vj&g{@2(Y)Vp%hO|>pTNKp8+hdY$3hO!aThce&wx+13SAJpy!JFwY zE=9R*)u8UzZ)M;E0$PJ*(UJ4{uLW4LSMkg3#c3moY8)*F===LM)B*Np=^Nk8Arn=} zmkzabZ8pHJSK16TNV`h!M2^g2eA3~9wS*OqXc1@3%|@lbGiNO*gz5oV%#;^wEz6#o zT{ptw5HM3#Dlud+rHh=)3qGbMTQQ@m)rU}#RaR{11&tUnqoA8IoxbBJ*?WG;@FU_5 zaCo3jyv+r2mhH22Y=x;I>^|ii`8F_08~9qn{0Ylbd&x!%``pg}vG><5^e~n6A;oXm z#5%F%$F@B)yJgTR+&tJeh|KW$IytQ(b46RkNRQGYsc~F9-R@iW1x{y4t8f;q)C zOKus0Sl7(KYWwdPS(^fPV5Z7Zhbfm+N3YRf1+_FCw@j~qhLY|fr9E*=i{(6|?3isi zdDWnN1h};NJNo?GFMnJ!z+BOwFLmkFjeB)G7ytoz2^T;VUBGx6VCB1_+gk!W(?b2J z4-v(ZFJVX>01=>Xv|;fl8t4?}>2;c9Qmv)Sq{kVz@@10g`d2( zbO3GEhg2e5bhAD|1a5!{ie6K$S-0*eFyW$7C@`U1c|^Nkp|6fSfBu>A;A)_OF5NB0 zG-9%Q0t% zPvO|`Q(Xw*&od^LTab)b;M;S`E!SGpb&=R3_GyN3Ns(Qq)8kzo&TT1{NjR;$5g+Ar zRjO$><#fV~1Aydnobi!mfE-UpqwhbaJzT;|c(-4TpI=`E4d1`&EGWC%{qF@tzp1|Q zP5X`Hg#WlBeaZ3V$!evdqG7H9OZp4$DN@6_3LMJ&BU4b$2q(8}v`C$eHPV=l@A|v_ zpp_(!+sO$PoUkE`zzhhYt~_e^+sw3&$JgxzWQT?oB%1K>QRqqz^dS4_#lU{6LRz%_ z5jRF=pGBV6N4zERSOh{?AxFWdnL(yZN^*%E(Hx*hF?Bx125f;Kx#mf+0FbwolXMkR zFVi>CPY=6@x~tRqP(9W(^c)}d<|AgTzhTSzcuNix^!BjitLv<1I3)^u3=UQDf+pJA z2iQE5YQcpV2%ulP^(@p6oC&K%y~Z936|^{SL=|DAD~yv9>-ESRSB9GyOd{CDo3B%+ z(94*Y3oE#^^*laaLLFIRd^Ii*7hERE7{K*^QTB~NlC|5?Gu_kEwr$(CZQHgzZQHhO z+qP}n{(8>6aU;%q<3^k>qx7e8M^rtvYwcX?$y`Cv4H;r7*iu9X(r}~!EE~_zwwK{k zRcC&7#Djd1Tnon?Z|YOI#K3+qSVZg)F;jpGHjy^Sc^u+xi^DMX@xT&-GpCT>{-Pdw z)A2m+h`)D}=pUrWYFZYTVQ^HOax86P4oZIF+RIIQ3tp)zZpYF)cq6tinJh9FYf?Fc zU5l#mEi$p`M;EPMK|9BIpI*bjX-y$XZL>)~I-vdUf04LYNnZ)y8sovY&ic2(He~I86pz4ON`1(u9U*jv{{#xa(L%rzIIRckR=W7e z8dPPUL=SX>)h6-;8uSk|f}x`bi@|B@i!d}7lW=5?$=4dOLs^3buB?-GG&V1To+>ii z3Br&~#2pb3MjN7RCQa4|0XD_V+k!irgj_hGcVdI6H~V0tCinVF?G~0;RV9V$zG{d< z_(dW=GfawAcI+qGaGH-Vx3U7$TF%)FqUB}L;%^U7I$Yx9Lf zr>e00-^TRzY;%TgsVdQ&$fyttb(Q_{T}@wxm=JlMTftCgg=|fEf=fpQi&_yuh;4_q zu0;StkEKq>VqNg#@0j_3i$7xxn|9W65o0To{FIKbl`Ds6CHEkwzW_EMT-%1x2*R8s zrwng5VX%sxqEk41b*Zp)_Q_jlIr5K!eKX}pz>igW@NWxOPrefdvME~C1&Auj=5d6a zQft@l&-RCoD^gYf4WyDC5jO}9lR_EiCQob4FqOWybIC%jIsaahA$yDw2-tD3v7larP2CxvN!; zi+%B&Z_s|g-X7v!dgr*b3mdltF>V-2>Vraqc&}&h3Vo~fB#w6moQjLv*#Ex%EdcKt z(ZA1yE#G&^|L7E}Xl3tc^LIAc(171U*WO;q(9Yh}+Dgzx-_XY4`^7)}bp8_m#ovSc zMTQKgI3O=V`b1JJG<+VD6PRy}O%0r^g%l8>O0g*Exh9rvpW)N;#@(K=Dk#$D58ij- z-LaHjsp=F@dTSJ;t+%B!^go>Cpy%q$iAp0(LqcnTCr%Xo4lTULup` z=2F=3qX5w0FaT%pj#UPw<0@JQM8~8bt4TnOpJFQ+Kp+krtQE5_PBvb6I8>!s^I=xZ z+?l`3gjbJkC}cJ-A=8TUWQBnweZ-pQw6?RqrnE7@>ha7yWQZUXQ{jb$ocg8PsvtEF z=aSbWLgkfOJ=1K22P9Lb23{K`H2I9#2raVvD}Ho>n{5N;^p*PyX7-me?9q|eZu2-E z0aYCJ&Ki~@>H(66PhbNkPE!FWgDXG$Bks?7k4H)TSdKL zb+)vjqCsWNtVqiE-Hf~b(QvRTK)edwz0rEOAp&$?lnSOK9vKZ* zY=m!vN>oe?Cmu_wmDb@2x&fnV6@)A=3R{T~VY#?)rWT>31`5kC1vE_u(B}=x9qndS z2q+9XXFqgivUO$kdBb^_dX+{9kB9}Fd&bHcEAV|J@Rl)|dUvXV;C958RDlbXAXU~x zB`E1@_Nz#(^2v9eogM5xex!6EXQfHprz3@{FPOCB1^||6Wq2pig;X8hcWSD)`R-k;K$O^)p z1sDeaJqZhqyWd9?ecdA^%q=LU8-bI&E~?nFr1g7Cagg(`hE5RJTS@52B-n9FkxqvF zf%RIRMH6QsF@r2VTu3Yt441K|`nFzZBE`LzPv8^NLvYpy&(ss-fGr~yP&-ac5%v=s zaIq~}l!*w0XgB6vGu#}mW8$gur?VFYv+aOr(g_(v|266lyYK!DFbJWB%Hd`Kd^c}Z z0ANypMfz5nNRa;NrE*G@m_r=%o>miU=G*hMXwxwh$F`^6gI*pQvVJSPh?JsSM|0Ax zo{p*Q19cT+BlV&`@>RsKFK37?(3BPpnle;DQJgeY^Zcrm`f496)}r5Zt-P&HAl9J0@{ZHjK{K)ZVG_8op9TTf7W=Y zO>C4InjtaDf9mkAWjaDe6_1W7G@c2b-*9`o*7-Nkh|WtD9PcH#B%j)7NMo{@qAJb_ zxxv1?JP@VB>Men}5sAE1$R+$vFHxBAEfvgr#c~a`T@O%K8XU=tJp<)-%d{0(Z!!L< z9@H_oc^_=%$@uuV0cG8>2W$te-30gq4S4BBfj47CVNMKo_0#JQM?JFj$In%t&y1c& zoJl_uD=TDI+qag5h(Gt{%PYl1oTEj;4W~*>;NSs4DhgX_1Rv^d_7zO_SYD0nZcr^|8V%O%Fbs39H2%^ z`*^Sgy%Ve#?-z+K4)+n=(nOr>SApN&AjUSC?aKoVPx)|!tdh=4`Pm`un?`F7;~u3& zhx?(RhX4|HOo{rX1cP<>7+9eUg3qZMOC6fHHdP*UJUQt+|6H zzIW2*-0+d){@rjquD5u!cQxN_qb8I!<}f!Ij~DQMR_>#5amSBQcO2~>FCQ4UQ77;b z?@+mlw{1kXZNss+UAV)@47Wi0J5?YPDS@ujNG5!J<&Umus||^!fLmFe?};xzB(HGQ z4wp>ap<`~)dk%P+KD%H)5$=T6%Nr!T2HRk)6CQG1OD#K<7#59Y-0AdJ4!xjP0c{VT zk^j9^2`ZWQ4F0aHJHM;!|15{}J5u8RsMP;*{Ka3szxbcnlmbf4M0LvVG-ucX&FF{U zM0~;hCUTU;IZQK6Cr$w3qu*0C6|euAs__wk|8{sCbuns9T%Bg%c%GhY`Hqb+o;rqU@aL$G_5lE_l==bwiXy zoabrr0%u*F?YU+J%?@=-QpX&0Ta6UsirlO}$5>E=+Af0^-$S(4W^&I$HU?z{e-Ubx z#1P8gV`}9g+9hD25`Qtyq6tUdXSQA0u7HRzJ-!QV2OC>S>SV5>X9G)LNq11j!V%1r zpL{`?R*hg6*$=031(;4?=qA!t-i@y4r9NoltYCv8Zks2;jqOTEItyC`s5;A3(p5Mr^fMPU; zu1llQqY&RBo{s2cwDKAV`WlhG-P+*c`*Nw31wRU2s(G%HU|Kh-^OKn&OmLkbtJh0- zPf>OSJGkQm+&eVg(KmtGAj}Z`s*wv*a((i!kfXf^NLdY4yZm{;d1Xki!}HNv;_r3n@C5hdpQCac-uu{pK|^etC1V{XrSXH0#>@OE1k916KSb@ zz5TX=FKh%5p2XAiWq3J9HHk_Q#EjpZZ6J7&F7BITaSmIv-k~0!Zc`?=Eo_!fHW|^8 zt{NS=32f;;NU1A#PoNnzQW}9dNXHri4J{mKIfFF*{vaI0?uyT;*^1{;2XxvMFXpM? z6XY*tPaQ$mW-^%}p*fS(?G%6bHpE&>cf$?IltqQD z4&sGnDw{Xc0k3ov&UG>6+vkf+ZhSau?3~lb-KtjUl&?1ax$ zNj2dSlI0b7tt!bxCFIxYxQ>L@=~GIvUBJp=-V%L`w*y2gZDbl#7QTk*{d_)bhzcM@ zU%lCBMhZ{cZtFNhj`-wNTqq^FiS~2VKkXf*B?Kk(Ij!KdnC(^K6gGJCIF~W!S`pFx z7lm%NYpt5rMuH9$m_vZKq)<{1@qoRCB1d+{{ByAw#4$SIoo`I-tPe(oF58CA+mfcs zaGO2snsJdpmoT-FwYVD8;>{4^6GE1s_I|>?J^8Bw2VxW^&T)^a-(;if-@uF^YQUE3 z>FYscd3l`Sn%!mtRrFF%(j0ZCo#=oARxA2WGePm`f$xqc_ymu_^0zW~H`)+0H15gn zbotS=x4rCK&lV1b9^gu0SPr#>K~}rjYL5F25y+em?qN779P2cB$gSHkfAS1-N5ep! zUvLd5{YF{Lu1DD>jebIa6H7!VYFzaC16vI3 zH5jw)t{D)!u5RIXF1;`LaynN6#Um(}{+ro0R4*@(W}zSTwQ zvrzSbHrz5_gwmo=@7O?n`g3BzWxFP*FqFqsi8Nj!TB!mDSQ|*A<^WR4#QIm@m*bxI zH6U&kKacpf8GUWU@umfvwhZCI7v@(q|0i)-7AU#=%{DQpCfet~qN*Y?gaDbIPiX;` z?|S(loa5DwCJ-_33W_JqO@48y5N~s`2ex^fE%l zL9pGnj#;H)5-xI!AV2CTgra5-e+pQbP z=dh#}ukB_@j0j6Cc5nl@z7(4Zm0Uzbcr>V>W~wH0eo9x=E3M-w{=N10Ms^O{KN1)s z(_$&cTxn41?+%?EK>bu}ZCbr0$1-f;eK?RtXJG*oTF{U?QbdgLGB;QLE4NhZ^Whx~ z63MR{D7fj0vd8`gh$in{%GWuB=Vup}`rPsY#}d8^g_kmhcKCV~*Ey<^U^TLoA*FxD zmbU9Jk@+YOxMY{>Mx*UR1jYZfE!6vul$=G6dKYdkDJ~kHuFwL}$OYR;w-J2M131S_ z7Aza(x^l^hOC#wjCy=a!w|TaK!=4luX_^|CtTv!EsU(9cSHu>Og5MZRtO6ApJR5|5 zjI~i$UssdQH@X@(SFW~pk}T54BM7;;`k9PsRsG>8I%SCF60UybDdwfMz%zbE;E6${z;Q7@m*D$NktC5|di!wrLj6%*>8r9?Bp>$g!G(6gvzq zK`kJT;tVr3Q-w(omnRiqs4%s}VkV-{jgWHUqf+6AhKh8XSs{)b7cMg|X)GrJ_A6KT zC*_F};Rn1585iwls9coDRSu%v8oD^SYFo(9k+ltN0d~WWx)Y2X8!NO2!G?a`qqHSS z`9I*c8oxDp%9ihPL2F#x!zBIKY#>=%Sh+5-ihZl^w@P6i`jrbhGuNCNeXq=Zd1&;y zsSuIH+-hb$qV%Npzjnk^+0Uu9YMfd_-a2-ANXAzwl2HxBt8qF&ViQWYCpIuCYNi79 zDgdF~BHNoBl`ZeSt60)x)#Yl8<&*L*h%VI~p26YrYAoCz$74jt%nsnN0pZ^G%P7)3 zYy@x%N{^iGJX0|d32$GR(LE`DD4Pq05HM(@lU>C2OA{EPt(xrKsQx@LB5u5X-uHdc zRF#MRc~8`;`QskbqkKlEeEt4<$8^~gJ+w0}bpZWp*H0ou6;HSx{nuK;Trx9pYtUr^ zh*OqFO@-m8pnzFMV$Vk=XV$=m#pd*Qa_*i$C`SDNjQ>#(`7no!T%nt&k;h zCuOCsYRH@F*n87A(G<%$CywSUNxo2KK7NOH27c0RCY=ys?@%w=p$sluzFjO=hX8nt z7y?}dCneeRZV;9RhDgbv1TQa=e*zXLwn2I_gpXq zB1?X2r2GS#{1BN;mdt_sskPh>&9!xPD=0TDYF{zVK^lw-O4xTU*8_T30TUj%4$WA6 zp~-ozgVr#y3{PPWW}9RnbegzKAx(2q-iTp=dY6STiLN9wWNjQ&fbZ7A@zHc^1a=6` zhWLu|+~hLUMn0d+#iN)in0H#|PZR*veXQ~e&MUQ6uw>-ZuCz5q zyvO5h5j2$2Mdx+Nme;U+*T;gJ)>tKXwB(n)msy2H zy({@_eXKEttj}?2&+!!&4E~=BbOj%^8_UuADnfF#{K?e%-h~q$8)Z8NE4owE7Cp%t zfJYVlkz0*``s%j%T|mNCk9Rz#@=n{&O6fX`3l?>(6^I9=FU6ao zs77NOp{ic$Z0ROSG-?C-#>C&g_ZfYrX{qQgv%b<=3p9uT1`o6&xcZE(d#oFG>`s!E zPOn)XcTsRlUjwSACgWYZ(@*Rz`V^VQ72V`H+o7}gY0ZTqr)GT3J)Pty4?mJtT*91W z7l{zArCXM`+@N38Dv&gqkWmi-70Vm%ytE#msn>lS3!J(pjE^WcdZ%pH2knivO0)X8 z>)!90E0m{<8=^>ThgHc6NXgc1Z1n?|bj$MPnlNgXV23aZtg_f6+r;Vik2>L^mg4r- z|7d)UZ2n;WGO!fz?pn&BHXv;CC(i=q9;j(ieVaFaV%>9DJ~Ep1+gskXzW~bm!67Ee z@ew1JH1&b9Sl(yI)l|$lmlhLt2#G?}oU2*CPc_?h4zO>~=p_f2PX zy8WjfcALzp24Kb9Qs$)_Dpf`6#_bF^!Wr^SiH_N{m^ov>*IQ|A+RgBE`~eqwyU5Mp z^8Wk)H$(d0U@=dNIZ-gKRX|roFei%uisvKuhL=4rT$?vse5Q%i=IC6+<@_1-op^{- zwVo@K&u3Z&kFQqbpH&P&lrj&+z(glwk$XdqBsXD8=hPDq2ZN$_2cdV*wVo{=Jp18s zLl8JCl<|~536w$S+rLJQ<`a#I~VELInpPm>eg?Dk-j@7 zU;jdy`uLHwjed9oNHyT4!7KHi=(Z!q_Dgw2L_<>F7BXQ+jSXl?7KM45RYmw{&!`ol zX_{zV?8(NR-m0jg+0SXuxgOYgCd&r8Bg&l>a8r0|*Xxy?X)ek|#C}_s5}Yy>*>-b@ zsp40ZN!(4bk`JaDq?4)c`C{S@?S&pkrKS&Y{ez2K8=!lAP_^<}NKrlKb6z9#l&SU} z(1o>2%-o|m6R=jJ>rJR7j8+5Wka;7m%LWso_447ir1}r*mBejJb%?9w$(>I{mnkRK z%_hw-Xp6M#oQt0x25X_7jT_I)k8oTy7kx#IRo5vOz#f(Gozt4nDpP|=ZrmOP*uGT{ zJI`TW5TB(}-A%6?9!1JK?jHc}n%ZL@OWVR9TJQPRgI)I(%T?TyHm9g~AM|whSHn49 z0#bdvRQN$0Lf)ecfijh{5*^|A#Z9ujTKYd9Xnp6GK;*giC`Rd(WWD#67`j!20VCc> zx0WUP!h=p^@)DrvH?w;NjUAeAfFK*%in}+H-XA&05cc_^vZJTmU=VX+YlbdZVnb1( zS)colW<}5jNRG(jXG|{Xmzf4f-ssL z&9P=h9?nQ`#f>P8da9P6;NE`m4A&%FgQX-*6xlIFpUpZ6vky3o2xcTI&f4CPq#Ow9V@Tjq6{?4oRH0#44AO_SaS9~0}QOE212-L zbEirne9RoZijWzPO1&y!m)`H@Vn2K`WZ0qpr0W&e5p?I8(22rZNENL^f%no6FN|{u zfaFH$GhwoyTS0r3Bb@NzRew-R9gDvJ)0{k%mp>B5->!e84|vMk-|v(Vk0s@p+9xAX zm?;P)*ocdBD5BY@atWM-LsUaqm@;{Y|0OhFmM9K$z1`be;b2CN7obL-f%_*2z#g2C z&9Wf-zL+I}XTo#YtDE>RACzLQh9x+%50^nU=g1>Y3yu?7%EVt?4BxB>t8QqW7n!cL zpno#9HrxT_TSE9M_(Uq*5OW+<-BV4UWeF%kR%_WA=ObraXU!8is3a9sI-LzeaS)wE zD@IFiXfN$?9m_*YZ^00vcj)LJzB|>@-%&C{+Y0{_B=d9)D?cx|%eIQV=%Tpdf|W1P zgVR>*Hrg$;!;qSD1*d-&V*($V6=m^>dL!UUc2yXObfiPNjiJtI3BLK6E`Dc2OW956 zP%5|fYjamct0f##>PY8uux9joazUQ{4N8~?HNE&ru0X8COM~QVc(~MltPJ3+w=U|a z+Gm?!&E@O9Hv`^+uvHnm8Z-{98cuasLV!h=D>$yOHHFt3UBgo0^1EX}}! zLdLbs15}D6CN5Xtn-f>{lTelqr%LIlxrDQZK9AP=%Gt6#hX*S)^rAB{h$>rn4y_g> z$(D(J{rNO27>>f|_#Tk4&35mm7aW-6E8r*v5SME-fQt*RHs4L*w{r_QFe+nYLTenC zEo0>UL1csgW(=ay#(lFvE7gf<2OkOd*7+Ujak%dbp#CH@SDKn4EzR9~Hfz3|(_6MU zka9f{(7Y7V_~~n^t9z z>m#yo4!G>wWQ{Fh%Y(}H@#=jqJ9-#>Oe#W2*}jW?WL^DufUWYN0wV(TzDb`??Q0`w*ZApg z!j}fiI7CYcS7hZWM;w`&>uKAk)LGa)OLhaTX16U8vuXQtaak#7zl<`MaLK2wlP@2d zdm!w>nJ>b_e2(%%;YclVzE|WL1eBwk<%n%&6BblPU#n!hJ0=t=l`^1vj535x_0sjJ zh24D{%f>`bh0H<1+d#xXxN{vV<&$pmnCL^@%)ZX^YC zDu0K#0VEAK?30qtyKNROw%^eU#4zemb z^^S>KO5VA6x`Eb?$Qzne{?ZD-7LWfXAN*Hkb`z?4hu^|I75?+nGMu(?{wFT}ebhAH z+ck)%uknezA#2gCD6$=dcl=FkhBZu{32@VT?ur4FH&sesR-KF_5th8|+MrWYoKxv9 z#^9MxDlTL|;#z19p(yp@!SWPN3XBUCjsf@1 z1l#(NU4onuY`1DoTc>aDdI8bhcm+~NU%`1;q?;${cpZkUEdNAz_QA=qv#x;5lWNQg zXRx7oIwDSUHqxfg{tAW2ODFWVyz4$cq%KzpVT3(6ufC?~Fw7N5k(o^Lk;#H{{06gA zF(paE^8$f|_zU%?JBY$tof;$RMElBK=p9@<8 z91uj1A$cnJpRq;V8(J9oSnmP0=T+0iKVJR=dhg-#;VXmbUT+42|p zXMhFTm-fo}&(eZNAc>iQkFhW?AfBr<^AhcZO3DZ1l+&iLS4=_Bhc(IvdY)B3KaW=| z1N!gW3nD|owT{P3(pG`ZG?S#d+$w=cC&c#Eh2f>j9+(R@rF%${1*?7pOH3nE<{DpX zA(=Lyv3f|cmavrz=(>3Fr?Lal11f1UXI4)O((i}d-Hv)LL%~zC0r6|n1F44M{cIu9 zbsxDwkz5;NyeoB#KotxwB{1d_DOuNip_0uR(Fg47p?2ieWAlfzckh31?;<)15;uIe zV-dbbm4yGJd8hx?qx!#Q(Ed{Xt4a0W-QEfXb!m8BgwMc6nNhnM9@ut7>-gDPykLGVe) zM{h>Phi_BT+CL<8V{}Jr$4V8~ky6|6L&==UO3lG@?BdX?Fg9fGW?d-H6Er0iG&ktj zyHQ@7Uc@WW)+x$_k@z4&0^dbbMyHQJ)Q<)Wt1-d2v^vJRFNKLZKV9gVHDDoh=g4Ll zIv0IqI**%~mev*LXqQMCho(ET(^|#xkmQLg)z}HNY%Dh@js}@gf6Gtof+5`Z!w6OR zqO`Kj1j-A{Z_Hu_o+weOUt!2XoeB8og(FibHvi3Vvn^N^ndgHxy0}p>Vsx!CjEc}AR3{t;!$Rjw1($E1ZFryRF z7um(*KN_`4pb;cR9WZ2LZ&yP!3c+1FUt;zL*iZK@Lx~F}4Xk|0XX%%q7tkzAoS=y| z>(AbWsI7ImRaxVC&05onOOS^UBT~Iz-v=L~H{3Ekb?4c8+C#_|t4KYw_0v7~PaB)= zutAOY^v;m22cEg>dh#>nNKg#0@PtY+@1AvU+>Sk)f6qX%Jk z(xPfQxPLk{TSs1Nuz3?TGuUB2%tCg-VG?)WA<$FM&H9T1ZtmdEy*GY z_YNReZU?zeI>Thhvk|D&J7W+zv)L~6xPc>w)TXU!OMGs z|M;Pa|Ko?y|KG2LPuJd5U)1W`Z^6dyuj|4;I=g=v|KczEUo5D)dMNz0>=YlSfWZB= zl5f&YDdGFGUktMU9F9%Ggb7If#_$%zuWy`%9@N)y>$Fq6rb4cwLR_&MrC6qCu|f|~ zU0uDQp+aqK)og+4^=ztftK(`Sc0?i;mZa;`_At}=s%49FjPqzSjpOY~7#olV_zNZ( zGt@!ZpG_IPb6G8~jxVaRBv=q4j}Q9P$5Gb1K36H~)l;%385UF+;&T<}mm6oFqUCo^rVjcIBys?16uojMF;mv$EsA(u-Il3wQj4{xRm%AArd3iW0O{>PEB?6e&oW6A z>92N3ZWcBcqDjx)2EHOD-DRYCNgz*1V6YVz4%F6|+D0!2)f|n-<#!pYg@6Mo zo{d=HA5!E62O)jf4PQIM;+WUF-~fAawc)HY zl;9%dfbr*65dIEC)@?kxwR7-bPHQ%!e;BHu9~^!+-`D=^sHh3n9?diwG6m4jPY?@Z zLhQYjlWsK`+%9gn-*G69e!C0*3069*D_qn)Z&1X&jLtS!tfJSi6wtbF!QT3dsDN5& zZ4cT(G)!^;=oE_ zFy;}61U7^WGMJFQ8;w#IRdLnLn+40#I>Lj{Jn~JDeoip>k+}Y3ACQq}Y>)j89{nwH z9Y-TWeM6Ir`RSQDnwt9F!=7B7mj;oI0n#1%hfp?o3XZle>W=F%dNM9(kXA?;M)UVL zF-8oK^l5^B+oI1|zJr%S!klc!A#Utdkw4F(8$AipeIPZ0R+8Kz)g*2AcYFKUfX(@H9A!Y-0;~~u2iiW+kTFZt#suiXc z+a?S2i|0s-vx{cs#;}WK?e8Mx^T9dcI3~EWlAv(*?PumT1s!w^lf&y=yytQE^YxF{ zHXh4tR$C(~bFwQkQ=<;I>j}1PDwasp7^80!6~ap5Ludt;_ZgK+vh~*zWi^?^wGVFL z0VBg0ty%cs7xVVPRkRe;5rOrcZYkBw(K@4w@@*wqDJl1HA5FW|@@Yz;a$-1!vYS04 z#!sJa*%bs?V_vuuP~gmX5hEE_S#DEo%t3za zn1$s%Y5m2FLiuT}T8WBvUyi+~#t+9o2aWg&(?;!(A9n?bp;xj%$}zQ$U`yHMB=?}x zzV~{!1Aj^Ae0YVMSdHE$)&oz8GJ4@oyW*6|uAg2!XKGw3`V>JYF1&HZMrCWS-kbYK z0#nA~D>;ETiWz#7S6g+Fv)fTJZ7Y=wq*1Nw*>xeCtYl4XKJzUU$6R|O6t4tv`}Ko| zdHPW6e2kEAFT;Z@-yqvL8WlV~`vo=`OBTVJ&b@fWKix!2LpvP9cD*;UWrP$lp3U|9 zz$pyI+SR|d`LU6ArO%+9hCGK0d3Sd^tkQwChsPEU3p4%!-52f~*m`zr0DTCSzj9TQ6z_+<*-gfwIl=7daHL_IK8uRHT0CUGts<8y16 zrH0ww^21dr&AK74ys_KNQpvnY4cN5l0DL8qh%+bGpi#fPG5Q|Dw0r?6CKErRZdGqq zYnD^tM5|GKg{#{McrD|yLS-E~>Y!(jl6q2k%dlP^ zZBcV3$ehCV#Z?o#Qko>X(Y12F;3vo(LKqFo*~zp0$vODRw)pY-*bSWaYL)CMq((rK zE#u|@zTdI~!bY4-VAR-&WiQ1X z;7wun&&BN^Y5kDRaXqc-7CZQM%-GS?+g=T<8^cHMYU|ziqkE&&yF!K8L``}geX(tz z%=YMB*-RNcm?45o>#ghke3qgW9`?PX01c*1rHEqVGyRWC6bvI9!T2v}p>4R4WuE<9 zlk-wZq`HL-M00FHZmDV+ylR4{ctGPd8YG^buTlrf1vi>V*0Mt5Hb$eORTL;CET`;r z5R(BGLvd0#im^zs9Qg%E1BMIEZaeTNZ>ieoZ`Y1x?OHks*s5YiaZ&`1vB%U{KaE&9 z6XwsTIyo~@2GZcxGe9rZK`+-pFEf8RYx}-gnK2=8lf+G7N{>!RjLw(Gt(b<0*9o{u zrDpii)x`lLRcF|GrQdjk)@*&7VSi7Y%$7$6F0`dKvd&o3>Rw&KqZ2)P@D- zNSF2HN+73ExZ2deQX9oENynSq4bZLv&`OsfC8%|%6jQ=ErV3NcwCA#Vx!I@*>rp!s zJlX+cDY>iKdG6o-J~!)hE}zSb(7px83#p&ur%)yzrx&Kr#99O+um>8k#82YZq3lFv zC0cTu9>-A_gD6d9f|9n{wVm3nu7locBKz%*-Qec@p!?+XPUBU|y%JPZF6{^!mx@J3 zt;sh;G6R})txHxm1fi=Fc`WrBL~Nk(cIyAQz|rTGU%8v$qLk5rjpt>Xs6Pc!4CpQ2 z$SIZ?WjSUqsRW6nK8t}YrK(1dh!j!~plC$!w8xv{ibbvRbjCC)QiPOvGkQ0-R?hB3 zClO#5e=tMkX7auo-`7b~W0nIJE0YcptEA9}s8y@P;xjAf6@GsOvDs#Hzjt)f6x>28 z9ZE|?!~3{xI0k)J(#p^jMcg$h7esnu(-YdJ)Yw22{3nx?+`u_|-AO!tG+ zS6h__995&mb%+=-Ew-xO-IHYc29>92o0(trtu5!8PPNVFNgUof)39Q$|7=K|Uze3$ zXCoH#>_Vfa^adE*+-Wyw*x+MMh6M=K25N|X5efaz9x7-grneMFKv5YiS5D~G!NHC$ z#b$0T5hzWTjgj5q&Q)o{*FPqp%fIkKpT0M+rhmKX|7WHl|8t4_ucBW`*TT{8ALagE zuD|%p`xg-k>hkJ}2%k<=1pa_MzoO;V)EJV%;ncw`ArS#tb7qottiTo*ag^e*hXHdQ4_g0hgQ|iN|j3%|V*v!4nE37Nxy1rfxn12|{ z7zQ_QJECk1bK)rABJgQZ{~S9HIH}O%=Nj zyoIJzmn^%Z>btp?<&6RJqsJ&Q0nzCNMkZnm-z(5%xu%n@v1~x)aIBMu8!_sQ$(y^W z&UKtZ2uBSpK^AtiiOq)vh-YGUfULUpD6&ZvkP{R6GN1iod#P~hY1dsfsv}xyQfN%v zn1LAt#U2nW*1ZeE%;QCr4y^NIj|sLg4c5&J>Kxhb>KL>Hvk*g0SC7L|OJlMrL>}*u%6V=ulatA;M&UQ@Y;e43s^^ zGi)?(bZnceWh~c=DN@gK7;6Yb!N!)H7H*o|-$y50XrWjbF}W6`UydiZjEcY(?30*So`uXRrp(GWY8uka~t_(@(bq#>qu zUcSI!&)!s8s7Y4}iR)En#6T8kXx}&pG%|&=suTu4@}v z{N2YXW*eG6K{ozF&5)tBi%WRonjn*!jOp;2D@}_S!8v%(&j+QEcZ8CT*Bjud*Bm|t zDmh}JcaXlmTh1UnzTLbV4i3?r7e(VaorexL3CWu`@R8+m`#!SOa&r%B6n#3GL(#V$7fkpER8Tbnt26l)JjMBwAv-8Er#ZohW39yO z=Wim}qI9ImoSC8zIq5e-xmU`Zhm=f@r1(c(RiB}kKSJcQ9h}Rl8%t`{ORKCDWTln` zYZ~`3M^7{e%`QAjzUoQM4ZRinJ_gd55cPIRncA~%=d*6>eZM+$AD&Y;J?D}fr3@eV zia=5x*lQfR6SQ}h4Ww&6;V13yV6MQU6L6@zh2h4*Wa4oMcvAd$4vZ~8oAI_hiFkH% zj^mfu#9MqoJo)aDiCFnr#J{thw*eL$U|A{T^Ksqo-ogJ}i;L+(%`AfY@nennKQ%M` z$BD+!&eX{Ce@P2}>Hgv`^o%$uo~h=4nu6$*m;=L*A9E69BC`eA5e5rIUZEzK#*ffT)~SXVgc0 z&43yLG?C+?LBrOSO}8+FF!_j!jNgtD8RHvLG8lSjlt((R5eGsTetUKru_(ZTHWH{k zk#sR&lFkbRXWlD7S&1>bIDUx7SE1{p01~()tj=Dl9-$(#18y~n4N_iDl^Gmx3Xd4$ zl25j(Gmf=io^!~g@6;p124474uvt)AJri7TG49f{&s&-qVgHMjBk^?6O=*I^;u;tF z$c+~E2-Meai3vR}SW&j&JQcAZVQdU2fM2x~8d=W{ii)RGXSsLuR1SSGD4Q?~?^;Po zSu+sw;S7+_%!5#Tn9He|jplLtoP!d{%(0K5?y14p5AH?{5?Sq~i4Z=uW{8$*F zyX!S*Patl(M`$5qhziSWJXKBdSJH|ud>=!$czg06II^aCkCod3#R5Y^@iB9=Sn)J{ z$_qKQoSII`d5O`ekt_B*wIh!A3^ilYmgy(RSbgt)orctYWo zrB|ZQG6AO;6oYU*%bkD5*wjF4;sdLWt(iz+P1ClJ%eoXxHq#AI6WwL~5Z4=nYjgt| zasxhOhcRdf-kx*`D{uMw$Z9z-s3QjWFdrcX0AuU5tN4XH(3HuG7uG50@bar?L%b`X zmA5Spy3SmZA%)sEgMOO>vT8Chi=JHZ$2Dv+`qImgjG)TqQK4XIHtl6Fae zmz$Q!1D2r!HSo{67N42(3RF;&p~xan;>=%04W@YeM{1WEc6#;rr8TpPk0B>gQ&y>Mvy7)vR^1As?e^MG zWa2QVuBwHL^!llD=G@qtC{?32mF0Ex1w90lhI*wi zOU{Z)ijzwlx6qyt{6dCekfavw-I%1~oT)ePp}|M}Wf*YOem$CWYXk+ge z`m4#!HjB=PGXAKCxmh@8Q3=0yET>pon)L@%lr6gxNwKwIxWuMf5$4O2*?yBNl_%#C z_w)l%?jlSN>WimO@HM7~GVVFSNKysp(Co{*44RJ-0cm&db@-h%nwiFQA_z0Ga^PM_ zPUZlo_k)CeA%tOJ3%?>o)04%@GuIPWx{Nx)0VM}h%ac(QnEK>~HwtH8HT0Y7)4k=? zAbz{fqW`Yqpd%_ zC2LW3*8mU&I2k7*WGZHN@|u}9KP@VpwyXDtoG)%%{{X!?axE)2Td8AOx`b-vr3Ph&KVHRFb0<9jEyNPfi&-%PX(Rq55 zQEv9`w%aWh&6t2h3^?l->=SO`c$w?OhMVZt%nj5zj|85%bg2mec+OiZD%Ywvh7m7b zceLkH`Zm(#>nfZ*gy+m^#er@0i5zn2!yeU>!rU$IBQZ3UU^R?rWO;Kk2VpanP=Y*d zznOQbyD%B5inHdaGf%>7Q{>fFz_9Vlco`(CumBS~b3VyBY6UB5a0YDV1i7}{pMu}# z7f642^{T=h^nFZbZ`NY;`*0)gE#dW64bi=qd?MWq;5V2)(t3OxKb)eo{18&Z>{Ejj z6JIOu&?O;PNuk+Up0%PEQ%yl%Wj_V*RIqQ$6N{@&(@y$E0Dv0j!mS% zZI;ONw^jCxf?H^jAwJE)jZevAt0KpKqMN{&qtTgz5}8YFBSb=87>8v;PCm?xBAwq^ z_#wF^>7^o15{I#S8ZTtAsakh3dH>?zqDd1hxpqbzfq5A@byHE%<5xf*m-bHIX;OE0 zmbrH{owrFWo9n6}qhfuIddsSN*U)s}&@^g9R#YFktic_R*EvA-B|kOsg#Y0dGr2&p z)IMklUB%6H%!EqBBev&JNRdy{ zyV?&h?t31%)JL1Zl-2Ow1o6pIMGIF6R<&No|OE~?r>f-dhSW<)Nv=g1)5?(DO!4JJp%4V&8qHiy!dC5N$Odjk&jDw z-5WGsS6{97V>}P(W}0Z8&(p+e%|GHZEepC814I0O`WY$_(W=@8w}?+bp##2LB*h-u z(F!sx!YZKK_`jXIM0dAx{}=|JHsyXZV&tFre_=5S{SEk67k@s6iVu9O7kfv-%il0^bF@y(-ra3^l}S+ z<&AI!Jm)0sv_(DOTyuC%XcTyzGWX8LE{I2K_!!2(pF?zV3d$f)oA~f(?$FI6NphAl z8uZSUR!N)e)ujUUxWpiAn@G^5OfzqrXz;0$R=z{H@N~r>_=k^1C0fB|Fi5Ka+;t(V ztyKX>SAVQ(sljM$nX~Fj#A?>Sua23dd1D5Pexn$ay>}!%^RYz19(Z z$u0WKuTX3$o_6hQM2Nk{Cd#rMC+%Pa8f}$Mm~k|U%Glp*)D&%nOR`__imA*rFIks*|r58l(eR zHqFh?7Y)MAZ+AHn*q%~w;#^?G96Pil1z0@VOp-meu$1PAFFybL-@}2QjDvB%)+FHE z(%(mXo8znGn3|>GEu{wSD4NUZwwiZ_tue40A3K+QpXFzOf6yek-Da6=%H@oL7koBa zlX@H9eJNv&f!3&Zpp8Ja%7qn3e88tqo~K8o$OpK{Mbqd4lP2mEDA37t{hsR4uM~pd z)ceVf6jzBPG4iMeP}QePjX(+GlUB)9^;;_Yb>5iZ#+TTrD(nOE*5x7hQWy8w2s4ok zc45s2#YG5jMm2cKSH{%m2@;417>OtxiWaP5lj0mEJ>FEs?~{ zi%|9D7tYg25I#|(^7wHKp1Y)+pfm%m`|W{v=;P^J`mgwNX~d(9a`>i5)Q_~5K2P}n zts_Do#XY!ons73P$lhK^Is^e`2aI9gA#&^{dix_X9<$f4Lwp0A%@^I24?dOpeiA<8 zK~ZdSc$pk^JN5)|uWnCoxXJKFg*tXpr`GLD?0}>qNxD2f71`c18u~7I8ozn3@z*__U=35iAdbLWt5rx9rkdP zm0rc=r=?p%Fv}M0AU?dVaWtP*G7TOeO3rQ9ZfM|EAdcw>@V< ztF#&Zq{*gD&3*z)BveE@qug^*UMn^-+Lw0Tqe2BJf@T#%DP=r_;$ljuR2N)YsJlu` zBRp%ePI+N+WfavB&-e1&tg(#>4Wu|O8vWBQ@AIR`aAISOL>sDugy6pO!i&1w0$WEq zFK4OJN6qyDfbk3Pqw~i!SbHMYxd{(Pky@{@#mi0!FwPeIsmI5cQ-$}pliO$2Gt@`l zaE5u!vgO{>ZcNF*{d0ixaJfi&}gZsc&?-Ny#DNd zGhs;UEi~4AGP!oeJNcOT&UDn})&0K6{sf@I>G893p<7hIwrcM`39Ec!M(G&18j6dZ zQN4s~-DvOsvb)QV?bs>-BuJdD$YCtGcRIM(vd-#mD@syrU1^Qj*z`-@$E5e55il{x z0AujiHcK7<`-`D`T&1#FQ$wZO%~@M`KmepN7QpWd3-Mlm59LmJiIAwHG3x_5^?-1+`LQ&F za6o@ptwn4w>@XI`sy@WaF%v8UM1Bc1`tQ&I=;Fs29Gq!C3>Pv#+sCo|_G-JqA2StI zxPmL$;q^TTXM5nyyLhSCyiy;IJ5EC6Vw$AWj(H^5di1{|y+e7eado=Z4dF zY!bb^vW;-&5ZD%6#sV>4zcPnmBW$Mx(w{XoC`apX52-KoT7^?k)SA4)aPMnUWy=@0JjqeePzdNl`Dq{q61r9^b6{BdD+g@0U4sH zOfkU%;_Q~XbsKJ_50*m<^vG+aJq~pakYuGpke<=D*tckOWl#5YZ5OpwIRvUTRk9Ta zKg$-vezs#eS9OX?daa*xkH%(?1ZO=r>!3q3gyi;iy@kBoT}Pqw!VXW14a8y3M?kid z_RyVB==2t#<$}X4_LQ?B_7IbplHLk|f-!B@S-js`s`$&>eV zW)FAez|5=7vmzV6JlcXD#JB7E-KGu)d<>bGL&cuTC-{d0#0QYiP)lt0+cJ}y3w2k( zXzF+1&aKr{nN_E_RE&y5ev)H;5{6UX-2%CYmmN%FByn!I z&Ltz#T(~E5ObMX=3nRLIC@(551aScGYLUZ0G(10u>p2`g?4JSo2Ee=nyd;IXg{#o7 zhU9sM{Jxw~Ri{OA=q9J;g|HmfVDQ#8V$ZVu1M>bav@e4Y-T__r^gFVjy2CNoEiAyvWNMZ=|MH#mvq;Cgg@4S^v6{F8lN& zO*98w0W)NSnf0Ca5;?AEjc#UH%BMH8vLP@8<+3*uW#E&1BfCJX zgi8Z!7+Pq@A}bV}J=8l-tbsa6al|3da#dKT)jY6~hm)9lMfl87@a!VNiae`$I3N3v zexNUZPjX{5HXk^FYu|k{D|foz+r*PC=ZzeHBzvXT#GTu;Iul^49>KkqvaY1NXBEDT z`edOtZ#^C$2duE?TH@koE^9SY4DJiMXjU=qUs2ySyy&u7966-qCVb+n_}_9`5mgsC&ST zs_ukGw;pX$R*|503Z}KARvF>i=Hf}&8kV#D+B;|YjwT{P(v^l>EoDHjYAhKvF)RCckK^U zQh^4QGLmZqp=?dmj3dI&SBj@E)x3BjfUqP-7WE|E_+G35BSV0$*lXUuDyy?wV96eN z#;M=FAQa#72MgvT%Ds#3;dkOMbMDxI9%3FLL_wDUF2I}w@ty;=oJY>=R41REeqR1p zQ|eD`QJr%F5Y+*zRe+NLW;+BeXi2giLzX2CmZj&0vgP`+<{0TAqXl<4i}x?Y>a+!% z0yz|)R^DkxvoiivTMsx$1$DfcyrVYg+|9yDKV%2G@&#e9A*WSgOICz-=4tGu`GS4{ zgjHhicM=WncH?QFdC`e5a~TY8dn%|q9urT0aal-ZFts5$6mZ?TUEM^b%~v6NP6cFD zK(q|2O2&iLw2?jQpgPYyizA&<^)~2aqorp7?xC4+omML}Cfr@W1XV<67{Xe3#J?e8 z*Aw=Y?9|JdiJmM8%)mhleEJSesq5)vw6IJWkgzFd62Zmnkm>#HslW|p471V$V79UT zEn;&U_J9ZVzuREM@|Oi@jO}Th)oG5r8$HtKx|q6|%ixEJ-*<(=d2Tg%N{M~7+NP!V zgHM=;>#W2+>7swUz`{2p)!Q*!lvFM?OlV7wso8E{ksz;`LS6_Xn(akYTl>^qc(!M# zwr8Ji9q~0+K)nPO{Ba&$XEKW)%yADPZ1;;khh?bl){V&`Q3^skM%NMG_*tS-Dxyq$ ztx3~Ki-ew7V#bCBj|4b8vCRaD2gtJ5C2kIQD!_{_Nln=w@p|_8n*wNM7RZ*jDnITr z%wb#Ryr6>F^2~7bRSPTgpy75cGSnltLs$nw(d+PsM7213vcBoSJ2n`tRM-VOwnPIs ztw_Q=1W|R|Oc71}z{n$*4r<-@An>T(uqaH6sC2Wa^NvdAe$0M8lM-ENlMO&C<;D%| zheULn44`3NQ3$fV#A$ZMpot^l^qn4|ztc+ctU2vsPoEQM!@sXMrQa};XaNr8l~Co{ z(#9Jan~mh$Q|(l8wxjt|N|46&PHu`EK5odyjC`2*-tHHL7s_CY;zf-s)wRT->?`8_ zG?7s7J6<6-U5xmt6e{`aksxTjL@=x@nGO6Z6Ce#gDE)a$Pbxp4ZEZX*Qf}q1A}oCVKq7& zhfK&pOsI07)=K+6>h~zb8?LwrmMWZ8HF~21kT0(sPMv8W|XGWXu=ITfa}fB%;#I8~h{n)T;vgIqb&O zrMF}F<(Z8i@_C@xt&f$+DfoahDDf z0yin|kxboFe~5sHeP<+OfBUK5mm$aO!-C+W)b}gkMd-kF0O@JyL86IX9@CEp^W@-7 zft@Bk`5;IESVdf?GI_mDBzza~46{?H9qFRb)2{3hf+ium&*My33m<2YdUyWufxa^$ zt~~UeaubNIqUqknIrc|fJHVexolx7-rq|?lpdA(30oTP}-4!;yhUe67T3uK>syD{z z@4p(#wy31HrZ3MOtxDTtjLX5*lHVyNRCY`UmXI!~o(x@@-^nSJdJKfm@z$uGh%&0i zF14t$rsf#dxTrIdEZ(fTS)!B7kye4KVyPFy*9@$|Di)9HDXj4;mT3$m8!=tNmV1-U zaaC%V8&EXBHOqq5D6TkM%3OdQEi=>-T;LxpwkAushcz0nDwRE>o6P^Jb-4I~Hm#_I zxFiNOy{HRu_AOiB)jF?_Sam(KcdUb5X0T-WG^{c=(_d<21Zdkj)?---Uy5iFcckG} z)Zvnd#mv^dwKxSfi|e!^^W>!yH3{N;_Ym?WY!?Ez%()=f?eE*iCCqj!<& zr_NPOr&575!_n_G3!#(UmN>Y`D1G-wqdTuaKjy(zF0jIWlnhHW_rVyuPWC1TZ6-U zE*sDyISAF;PjsPr>O^qU7Wc{b`K=hyMyxtjdvv0j>LidGCUQe6{s9rfS&%Mf zkS=~z9AW!P>;w(I@4{`MPq4jIC}UEbj;lh8v!<(v?Qu99C8jwjL2Ga~;waE1#3S+; z6s=YuO|eO=J2}j2eNhZ3>Y@w0DoEXcZ@UCwTjM7)4hhXm$<6MPqQdc=SksRvQb4E1 zwMQ8ZfdJzZg6Uf^ zdzd?gc(R8ywjZ<#zzAZ$XNM0jspOgbg|;S=v4%{1*u*9<>@VW64LZCX0OJBvTzfzl z(Iu<@fJ>ZnM=_Qll;=!k;gM$iZ(tlBpx=q`@J>4&q}5C^v{HQm;ysv|00)KNO}>P` zO}DOcohnP59C3QuZ?cTKus^)LVUkkqj6!^qR!fP}W_N9()45|s?gHCM&?+o1Vj1$} zTeVX?Td{^2Ag+Sz8R7|`{)MS05nC*j`^^&k3z3d_7BD7cugubvRGvaIJ4uQT z{sa6K^b_*P&m|aKCv8uZ9=j@tPGlG{aBpb6>*bpJC9|uc+jhI#OIRpE$%M&tLVBy( zI-s9{%_4s%~R0D+Qz9xC{!z(r(Cid-{@G@+{4Jn^~MEOp)-GmpC< zG1nfXRWo?N%v{e;+b&3gSyxE^!5$9ZCx+MsSyqHHEw&-aMe(o!p~!$~gBKjihzYcn zx9t!XetSfFii^yf`+jc57|c+A4Wc0`q0uEWjQwdFarIwm^p@B|WIXm2{ z#-XL#8Kvmkdt>|8n_uWf_Pf45J*cZoSE&pWE((!2ZT zSntoS(d%}SlLHIHQHJFLaq3_a3v{y|6)XjIBuf6ei584}vJ91S;IC#TC;t27s1AAf{D7GZZh4F%Bi<2d2~WnK6GzI1vvv0L>_Cz`oyT^qPi#$?0C< z{LgKnyZWO+0|o%V7aIUT=)c<*6wR&etc-t(7XDABx_^BC@Q?c+np7d3l$J2QXc!ZW z8N?t0e?egWl(|6Ti}}@?`wAHj@IgjEW+dD~2$H6;G3qxoJ6lt)t7w|{!P^1}0i6tpr7>kt7Q23Yi`U z@9zySB82pZW*d;$Kv=_&yJ2n^&=(NX(;|kCpopwIqI4QbR?sWzw>C92S1pCAZ-^G< zRNIK7*E#2j1VFbj6LeQnBSa@I1s*_VzdWa>Gsl**Z)PINgel5BL1Dz1nN=YulF=Or z2~bNLYuHBV?B+$P?HPX=fmw$XzSB4>s@>8~@C+;xg{EkMsvV54qQ!wEx|&J(jHNTj1+WyP!tvuh+qG7azEv&jsCgtFwR z108WiPRK7@XPUbRM&b$5@7gsb$hDK0@5iLHg#Np3epCf+oO(Dcl;~;qvwtqwn|j9j zNnv=e2T(aOO%0&889!pcbD>iZnxqphVw(6VDH?aCjMEbXn;|pSYeY&<2*k0ds4n@o zDSPx!vYLw=iUs9-TuV(FUZ#Lm1T0CGQ(BZ?P@dGNtH?JrD)jN97vU=9Q(!&VS6l?;|5stz_)APe98xNh6LQUA(Z~mHG{<_t}M;&XMA&t|#!WvJ0Bi8=<+UAeJBVetw=9&n#!_EcLj`3n5>XmeZ=Cd~&D;GR zA$S(#x%N~ajtvYCsM-5dS zWisbhiBSOJctZAbs`3|r>gvwC<8dcokP19h zHu#QU2!Pw@Vzv)fHdm>L1;WD19Qpn;1H0uK7E#vcl?2yl)IYOD{y#B2?lF@OQgC^TPgevVLElwNfZT=XzCyR?PI}o zTTx=pplx~UDaD7FJ0-a6LHVH0?u)cna(6dxGF&DWQm$8ao2kB;TPE`MAf&FpF-z>+ zuf*AL-ZSx0@1H7rCo5wqx#kY`HEViI@+j7p>KP(2w1^gyW>IFK1rouA>22;Vyw+7dxt?0Q$ah$s6!PEH6I||~D1Eq{HZ1!)gv15qi36CQv45?C6Hys6s7S7+NFJCBAlUI{&^s4;f1wDEZ7QZi(uI7r7>NhO)b z7`m~p6kKm8l)U`^+Qv83TNY6hts5|HveULF$LKTfp%ShxZ|V&uheo6>G0zRl8L5+@ zCc9cXD9wnMH=%Ae=csvKubXLB&Xq!m!npY1cgg|L9FCa+iMrp%<>q_{?YeG)W5e^q z?Y!mXj(pVaIR|`XRA0OROyDqnF%2DYkVRrhF1Ax{;%#GxP3?3& z0At&2iDy#On_WKeOe~NgW3NlnIzjgC;PbB2ce6&xe9K;JhV=?Ed7L?400aFBV(l*& zGYC?G8wOd;ghXP7l$i`!l*t(a$O6nB!bm_qa6x#zE#H~!P`zL#lGb6xgu&6Ic6Xm= zIIe((7^Zjq$Q?G>#nv;h5~OGIOk>2cvF9{Nv+n00Lw$VdT`WBNnz>GB-V>0jdvY;6 z4@dh=3x6%_oeN#zsz*#r^_Whu3<6Iuh;5d-=OpEP)WK$XIeaT%dL2#^n4){8a5b_` z?sTtL2wkNeN{dz&G)-f*8AFYXYZXFTMuvV`OAT)T@~tbY#5&u-%7E8mNM);ZvTvef z$jS?P!-sP{NU=Gj)PW`6c!0P$Fxqs0xjC}+;^+c@ZR~L=9D*}}PHcTNI)t>~whz62 zEwfRO)v82l0%+5RhS7(=XhbJkeyU9Bc*sC$VA)21fF~P42>l^SH(ayjg%$k%vOoS4 zLO$T|nyoXpDY~VNDO*S0x6G|`v6mEZ=2JFJOgR+XC6RmN! zU^`n9DIOBldvw7TdV!IH1-C{vS;;F#9YaTmXFSFuG8M8rqTgISvJflX6em5@LS=OH z+AQ+ynnfSp?ZUvZQMHLR?Wl0N0YQd{oXbe`%rS?U&NKwwo7Uyy^LED6W+9umAab)w zn1(p%yijo*x}59=%&=Xy(#7QC6KjPy!(Lp?rlU`%W8A81D$x};tiNGZV%5-3T)@eW+5c3L7A*kE zE`;aTqB?_G-dMm^$<3^^(Ikppb zOs^|C&WUZAa=nqz|+N6dcwSlZU5>0 z*ui@9_31{pvlP{Z!?1!PCBXJv&#E_Vi7A2dq9RRa+fe&GiRc+p^hG0bz%50VL0}1UwH*&J44&hthD0&QywwW@BbMY5fDfX$747MB%wu*XZ zjmZIVQh;hwh--e{tMAxb9;QB0pGf}cvJf4zt$t7RI)uny-)Kxjqmeg4E~}w8!er^B zVhf*OH6gp6XimBgvyw-Ba^48UfatPmFVi`jLog~9r+8Rih*v5SWK-)#ie;B6HxAHp z02yXX8)h(f3##FAg2nc|^V%Yl>64MZO8x%i95 zjxDD@#5jF*zg3vCCs=>fjxVCERDhFW02w5UD-T4Pkjklbzq&7@sCUms<#tJ1<84g^ z)QN#aFI+V9QfZB>RC|zwLwf*Tc?dALT{I|8y6AutWcOEp44E3*A&09G9mmwWUpVP| zm$_Pe-+a_U$r^)!>X8J>5sZt7nMKL?xyc0zOZssdVPH*A)E3MdOTw##0Coc{^Cs!`&Vh87i1Tof^?kVY?Q?yYF< zFQKV(>>WAnmL`dNSg>wfsIsD~(WE_8i4EDQLv%=Ak_hqe4x!(f(M8*qT+$0>sb{*n z=UzmX#7A-4L1Z9zHocJV^OiMTRegzhq*?j%A2J7|GiFoSPoR$ePnC+~e|es<*0-`! zGzO3EV1BY)YH&{>ls=lT0WL5w%*iJ}e* zVIl^kGMVemN#u8II0WG@q?wq6*E*cZ+6UB-@eAwg=ZF2Yv|LMZHYyl&H2VL`sg4^$3%Y z0;4y66W0(-$6Dq1Zkh%kcvKXZLQWK9Z*^iI=Zjlw%Qsa`(KWK#ss*=9(v^H#uDTF4 z^!-{XMf@zRGE0jh0;A95gP#{Cn!^(XArvnJx_}Z~++fiP_PP@|F}Hr%9-1dt+&aEa zUw!aumJN$J;xwmzXkmUb!}uewXzHrjAQ^S;;%HpqsVx5jv!P&5=!a2Q<_FPo7Mk8g zX_jG{gr{j!pwogQYgN5MOh0Z-$&lhp5-}(_oIKPOEVwp@;+ddSZl-2XC0_wiGD%q+ z8`4ySH2&o4<$8c?!mVxE_%2$Iz8`- z+z0Tfh~ty^_?sqtY?T|$y2^7je?GlB?gpnSX*pJiyRWvh%rJVk6W{pVT?`X?asJCyv<@503k zUY}cYqJUnKC@pXTO$Mp=jW}c7_YFW3qqUq<&f&=f!pUrjmQ-SPk`Ys;uaAz}HMS;T zo;eF%qyxjkyCer2LJ1dSysV^Bu26`5?YPPzq>I)yEYuZTKX3Yth_i3i}q zD9K8_ree!kp5hlG5D4vUue9%O)e*6P2t|_+(I8UNyV4Ojes_aumwheeTc6|cq!;7E zRHpjQ-T6BKdGK)-(Xtu5TdH8P)MTqZSvV7+WXbnJRcwu+F7Wv zh*or;Vfrjou~e^#6M;7BMDUF_P6hwO82}-DMuHj;wS=Ujp=&o{Pw3{C&~=pW0Sq&W z{jR_d2$@Ik3k;?&l7<}ol%7DEwH&y=n$Bl)3dGjR%Xzz`C__z^rWlLu?yUoy?dvng zz#cBCv@-#E>$jSrbTJi2WCX@3$73%RWf0qgj2>*TN$qsEowLJkAI#dlO#doA zV}RWmVD3tmK9Z}d5qsGq{j1$roKgila;r&0ipIO3bwaPxfc+p)A<_@T0znvew}KP~iMuZ1|-hYMHLFL_Dwo7#Eo%9rGC zGhBE|0uI+-5B2mLz3X_GSMc=Clfy18D4e2M`E!nE9U~NW2|Q!1lkXu^nLRMiZve^H zU$h5?)mNmgzOr{LJf!E)`Q3vnuTVStSRVp!l-&ciuedlLzCCw@*ZZWKBQx9`%~)6K zG{LU8 zSHM?bHP1o#~Tb_-~-X#N&+-1Mi(?`>O` zW%Ro3bhkw&%g9;;%urB6X6ra1CcXCod&YG%=C_OBU#GU+3+;s{&aRnOUZNin&f2Osozd62)w-Rz3EkzedZTg9Gk707cz}Lx9_SeH%7) z=k|;@F8rV!L7)yd(_;~?tId@uHd86-IyNG0p)l%F`Rv_=9|p0P)Gvhb!@0=#>Usl^ z0>0!%FIfbv?FnsIaNttC@AQZ+hrP;X4)`Ij3jpu3f6J?yjGD!(7EbFwf`SI-fCW$a z3^n&A9GTaygTGI%hgbHCkSrXu-sSSyh*tF2+y1RC$pAr>Dw&NKQj3oeel-BomzlpB z9ssg&*ha->QttfF;qrHY&!gZ{qX0gNR1EMvVyw22{OlizDJWqoHxw<$e^H5(g2 zT00jm)nU+6?sY!t)Ol`YCX@iPXX1D6@aNc10m~^Ol9O=@Ly>)t!^pUUanu}W0n8C9 zz4xcW#`ZV4sf69a3e9eXO;R*H8|@){27h%|Z~jw};rjC^(%SsUd&a)-Da?ubB(B8lMjvo4wyT zM~UGfz|3qAJFJVjB>vjbr3kZ9$oYtl>JTFDQ?R}uz-ifLCn^yupNcl#USVh^bvaWCfhn`b4^jt3kP`*rdW zVY8lk36c@jwsILeoUd=`WcE(rPWDp*1tA4!Myka)d=!G090oCuoSrMh7LCPb5OiLE z8JSR&s@iMFe3LW~nhfXEy=t(kpESmVlD|>1ih4gFXVe3eWkdCD2e%hHE7qt#ky|Y_ zv5u)qrFVyKRgxsUZ@qTIn7iZp_~J<@$WAP)yW7(X&OlE}f)4=(mBS%2*TbU8?Kwm=IK%+mley1MGZMHuy2)Z44g%Hl}5e%si%UyfF#a?#%V-0=p2 zqpB2TjQEA4QYm}ei6=@q0E}oIDQuqL++_wAJe4eDTY_QD`f8OZ+bh-!;fy|)`=RNY zEOlL|z#Y4RdI^WsnOA#N$4Vlr9pj8{3l}U!RV;z_>IFiV!+?hSwY{rLjg629O%ZV~ z5~s`V?=IZ1EwnA2c!@dW4_|F>g=%x(0wMEN%@2n=pjA2KtroIVJ7QTSO5V+PmiRq8 zxB8^T9>Gv@|6{uT?XF~tM7>`5OQKR8lfU_TM8E)IEO~exG$dX5xFb4*rjNLKdvIR6 zJ7(8KCwPO^e_Z~xdY$5)9mg#k&bEkuBYrV)&0<_Gh*$zv(5ei<-HET=Ju{TDrqrCR zRLcLO2IV~QEqQXqp*mUk1M^k;q-Cb*i$UeDjs6oIu5DR&)VkxXTqQ4b%LPNG3|xxc zYnZ+j=0E~d4i3$U$JwI54q0}(U6BI0)c}}ESkz%&7>XU%^X>5mcDq|yv;iJ1W7g?O zlUjRQkc@5N-_DI+eYKh!=yfK;(|srh-cF0f2W+N|vB5s)4I)9C8tLCvg~AFPq8e(< z{jLnq0ELg9+>34lZ!!MT2NFVEOPnPZi6RM3|MMo7H z*~|CL)FH=nm)hS9VlA_}zo_D_MzrBe(06OT!{B?KFToO+n=%2ewJ1a_RI+*?7 zqN7_*{jTnEf5vmGY{I!7?M2CSv+(04@s-s5r~h;zrq9XJpJZxtGmP2!#d^(&++^^^ z%O!^VBYtW_4LCD*p@{+w+=ctrWLohvjREcC1FeI^!YNl7lPaM%J4C_EKL|Akh}*q0 zXCrKyXw0HAC~@}D!Pe2ib9rp>RXA4ctsJs7zwXTz)9OVVj^aev7LImMiX4-eCzcQE znBA?UajV3eT^fj)?+p6r%g$^y6bm9JFi*Tp@p-WOtw@nd6u#^YAs$lYJwxhjVE`!$ zpw{%^4&1ls$vd#c*POGOyQkLaBMmwS1X%kin1&TR2DUpvU1XGrj8zM+WPb)>0bb$M z#pUHV{=r`q#~b}lrU`ZK%%^UH3-;%`;bQhDU<#Uj4XC7+B=)4`+$xRL@*o+jwR2@9 zDEFwPur2}HbH;A{K^sDQRL$~X&8PYsR7B-u^gcexrpxv~pm4%V9tMznAecZM(kbKbiEQVyylnrEi^HJgE##b4mF1-^yw zzmlBhllDa|RwkA&tROYJm|eDUIcMl8IlEP7d+EN^OhdS+l&EWr9B8ZdS^e`CrCX@Z zP;(=A_~CX**HfA}(C#U{5%VoJwo*b+bGu#MY*QAbH z7XYq|oa=m-83P?s&}7k7&Xtz6(;yq!V9hvz83I~*(jjTHTC882hBb@2p48k3TUn5j zNnuqk9@T73Bb2A=jrF-LcCOS2MNRt0!~+zA<+BVD?6#*sOgm%Q?Ig$6zJdSeFX4^u zRi4=&edFv$>-aC7BLC|v@Bb9&^pETx{t^E}lA`v%uw(88c+}(|0l$2I3FX2qR2AeN z-&pj)LUB-OX(V~15@$u!7HSt)`d8V+7O90@W}6%KWJBb0odPS=wyQKK^nqEH zoul9>OB6%FVsZ#ZDLn84U?Ip{V0#%~dLitKsIguL82O6h#h<8XoqM-xV=T}GZ38u~ zOZ90ye)p2YR#+VuN03IHKl(IPat<@~$_<++`4UI-!oiDm^%a}VVIusI_?Z%D%rJUt zL%;T62+Ooo-K!qtQSc)X!a9uOg4YTpK2#mcM%Def%SxSoI%e%*yG}0%mm!1el)61x ze6&r4w@#Q!PtocWVY-sx2V;5YNe3iaZokv~PdfH7k_jMQHUz4t0%BDbiV%TN8+D$M_1(^H7P1 z%-E_$26#amh2+j*m=FH0S{Z8)xx-%ve+;WZ_t+d1Lkf#wcm%5|=jxO+w`>(x$w!H_ z&jczY7E2A}x)S6e9jy&r%3v#y#nw|mn_VNB#{0cC9Ic35D{}#+&(({LD-r$kLDU;} z%O2XMmf!a@9-_%(Z)A?)#VVft!^Bd7-p>c6dPOj+uqR^&9FbkoSk&cuSr;yVj$SXhW!7mt8 zH=tay*b-(-pc4+?;`d>5q=L_XEFlKVD;4!0B}DQk;`_ghL{oG&aIkfDGPn89E1Cbe z{^1|*KO`whD#etss? z?iv3p=jtH1=BrZs(JE9InQ*R=a>8`{&d?=B2bKj1p4) zEru@(!#+_WemgP7Sa|HYM3J%SD{=3zeC1>t-7lS3Xkub%4C*<(or4?*lv=kR&Xm3X z=sHaX$;C%LatAVf_ZE6|NDZz7NAWzK?;b~mw<5I|{B1lrGNO4fBGSv7a<}nk!CYH7>i@&rqt<KDjNZ7mp6r%Qr$f=(I=nEl^YVQr5M`%Ap4}ynv@_h-jZKkpRjjlYEuP;T zYO{u2g3BK?vDJAao{>5E>{*h#OZtupmEKP%P&Si-2~26Q&X6Na0V*$WDj!DVrnj(f z0W0&3qBe*I@v4n3iMO!%3v$AQ_Ya)3KOZnIGtjpQW*l6>U%$)d78>9(ADRI!1tBwN zv^vIxtOpuLiMnyGKnhjPSB>PV-1NZjQD@j@3vw*oT|-Y^-3#M&f^!9?vby)_Z}E*4 zcLY|B=*;1l!p4{V$DRx_-OC>1M9Yj7+-?;2z<(h`?Ey(RJZwDX#`w))T!zw{^eJ`) zt!1ktL1t;cuFI5j2KSw+D$Uq4`^^t-@F!kE@ppMoS$p3#E{$P(c4*IviAhl9@4UV)?7g@#nyHf_D_ekc7SpiMe4th7ZE2o?x=1LsjsZl{`QKzv6;&b@e6OuDU% zFsRGa_(YOI_jFp)hx5Y+$FyCdnD2e5@8$Q`Lut>)A>-Vp0~0SEK2o7XT0^GX!zK4r zBEU0ui}!6ozc4Kgi>T+@;T3=@;FGN&K-u63#7mnald7khsvybzQ#xjY(j_lIc{BM) zk-3HGk@^*>Aityv%vEcddr5m?AgrncGN&J{0(CK@{uTMW>371P^V=~sO&M&U%9U88 z@2o)BYNVMr)hc!yBYuM!c-48z3z|4#m@d#%7OlDOj6U)ZlH2xsaela0)vQiBVGJ9A zru^P)`%|I%>hAXq^;VxFh?V+YN%BqpTMa&=z~@yVGG^Sz<}X3-j-PA+$!}qGEWDQy zl86bDk_DF=2mv)RB`tAHLh^=8(cFk}woHnbV;dCNTcN*g@@lH}S%SF|(2KUnU*9LS z@VTDfZ+rU_ZbVzWvDGZt7M-tRkB5;av^x9 zl2s0s;B6kC57Dg$6;DUaG)I*})3>{Oq5yBL2>%#z+gq5X)vjYQb>W>1vh?#iTI&Sy z7D`0As1;8HLpMYkUb~EIU+$2d&gFE*s8^EFc63=J)jXTc$$_Ecr&Nk*iB-D4afLR? zMv^cZtoNkl-tU>kE7a~kkC~vP$z+DhL3E*7WyY1 ztHIGy-Nk*wNHuIks7Igd1H_kcnq!gPC75hTNdmTl8ADHX+v91|Fz zYlmn7$2WTCwSjJp;lQ-rdF8qq7pskLW`W`D_3^M?RFPQF5bn3>t@7hsloC`AvVkLp z_KhF5_d#7tBfUX2A(`CPfK}uMtMgY$-;#}EQJ&K5$aPm^#PyCz@;S-xAlYcOs7FLu z#2QVuBi1d21`qz;*j`(Sw0(}{2}j#XIjmE->Vd+(ljMUv}QUdt!k_&X1lDFb94tZ`1E3r3_<-9h0bT9?nQYmDva6i z_Wj0k_1ojtGNbw8ar~=Fx|uhe2gdkif<*Qkm=lGEk6svFY!nW`Hpk3<<7e1xBTc3C z{Xz~ter`*h2~FuF76n7DWpbTpax0s4<$6}%GqNeXHv%9=>@mnMO2x!+iP=*y z-|0Qm`7r&F1scX32q;g{%r1Ah_f5jEq_TUK-=bkdvI-)f0E8JLUZlb#ObIkxK4MK^ zmJ%2Jyy_#s^C5u3zh#$Ht!r3;XW6=SrekL56fAke(GLeJ&woH9PrH{if)2J*0tqv> z%o4$fcTX>!8DS>$o8Xcc#$u5v{8kr%vV2^~5sX0Nx(;#E^~SmeFwX~zhHv6Et_A$f zcxA9KE5e!{_E-?9jPk{1QBR!+W;Sxk#_Rji(q2nM(1Zd%TSh@1S1=6;6C}pQi_XPm zwSr@gd=J;X!na!T#DP*GvD}N-|_Xq6^4?;Sdjj@c>e&_Jt&N{q zLPml(J)$kH3M3wBx~FD6M(Q}cVck({0d z(w|tvvlHM#u0t|vePVKV+4qZaY$Yy&J^ZT2eRZH%^(^miIT8TnYI}DwCOunwJiNaa z(DC^=-aiS{kt>ocdvqd|M`P*CE)RTtc=*IXSa7s4WSkq$~U!oW@c~vx8(s8W9e! z0TRR__wQ9<8FGO+KXjhfoV{2MXT4@sSK@^_0x2O}MRZcQ*#2#w?jafE$M$vL5H6#) zpoD;oniK~(X_C(B!?Jr*`5+a7Tu4p&&mX2&MsN?rV(M1M_Q);{Ufd>*=%_69l&QF@MZd4yYso9V|e>M0S?y8nk4vf9%w@A8=7sC`%mqCeH z{)#KoUN|2PB|PU7(uYg8_w0et=xkFv?FQ8NuSb5s=vw`QV|YRu>2qhfgRVG zK@h)zU+nbsjB6V0EESsu!_6NXSl+H-^2n&)&vN}nLyPT#DJ2}>rO-UsyS(7D!QG!t zy3Rw)f@{oCh_pCPG4n2)*AxFz;-79y(d7SP*ivvr8tx+?-$-tka5|KDiMPgYlbEui ziBiEk0A#B=3pXgW(VKVCVzA%rkUstI;oek#@(i~f?zqfhF+qkxcUc5|6Y$|Ibc|iE zJ8n-IzK^#Uy4~x_=%$zsk!nA#jPz{=dnH0p+bl3>+p04%Y%)lWxmM3pi%UB20+S7t zmH$dZVYdb&m9ly=>OSY)skg9Is-n&$dh@rqZ9PJ9KZG1vgMJqRP`pJpqyfZiIMSc} z!&?&tJijZe#mYeN*vq$>aB}bVD2ADsrU|Sza)AOB6riPeq~yh+p^{6L@}&)gFQO91 zr5#>zwWywP7q@(h&vR6nd_Z>vLf%eF^8rlpI`@MQ35FfnaXwmB6)i*LH8d}b34n}& zc|Sp-41Q31nDZpu1f}16%>_~+fZCFugcJQSap85;fG5og3?RVc{rk#1CTiM@uKJXa z44U{4dN-&SjBpo3R0dl|tb3zUq;XNbB!CG5PCW3K9rj0aU{LnKo4+B$-k}L*W-BV8 z>a|rrj?j7eRgQQV=_YgjfFIEFuTerCDisVtJY8O~U-ekaoq{2|0BhmlqBRZz*Xz zt!~%eC5@sUV9;(*E%j2RbTgc|pk$!GgM${H6(x~k8R6B=&Q3}wg~Qm_WY4)Z^52F5 zs9ybPg^Vs~hy0p}b-K^2?Mu!cAxe}jl#9|9DY0thwvk^?H+Fll{6c($jBZ}m2-+LE z|Nb$2n-6l87#t#Yrs;M#vT^(+xgoQ$e=4jJh&u*WUX+Cp!o@gjd922|xd+g#-)dsn zhDO(*lUfeEC$#8JCDCVwLyfEz59B2$!IgZEp77lwuHf}qXalJ8mGa&P_P96w-04b> zi2-~D!8@NraYSPgDAvfJ&iL#BkmxSu$6dDQt!x74*OrIpT2Cx`w~#^46dF9!lkKGw z+|9$ZvNadB%M}7r4LD*}0tMw1j(h?s2=P>lq(Xat2IlBJ2JF{BPa<#CaIouJ4wyuv zT&44daaKpqUQO;3!1)oT?hJkF$+FF}F2!C=4PbRe!2gyrKjdFc)-C(3^hM#pJkGTG zP6W_2jo5wj!POM$=V`lHezqYA+~?$gH0+{&e3bE&^pWWsv7t(aL5qQ~uZgCpF{prn7%u!;44(MUnB$_(ZqWtE7>bT{%Ev zSQtQ0iiiD`-k)j`&e9!H&|wk%4k{x_Sl2-?)mDM~Lip^LV=zK+)6%9@r>JA(o}~xSr}G z)m}!HyP3TcXbGh53_3qtd{z67byeTVlR^~zGahvbZQNFM`G zG<4r6{w~1n@rO5y5mtW&Al~1B`|j*rI(O2};^8ooti0a5nMSKeTFA+;M3`HnMHzS% zV6Pv0e-#1dxHrJqbm#G^{33IW! z?fV3{TU=jHHrI@vAXdDdSYHk(Nx}8CS39B1CW-CYAqHpz;ZD9dacsBW&aTk5Qx^Gn z#MzYw%17wqsaHm=)Np$THG5Np6MFC2#Wi`KzQ76}2?&~)>hhJ`)&XWU7?wGC;&qJi z(-0p4qy!$n-HWwTa5a`!*%-_U&RM9VHycJ!(Qtmf`?Erx0cQm4Er(*fsyBk znCLR#rDp<}wb0ff%(=MO52cV3ul<+CwFvH9xK>%D=C768FYQd15ZC|~4zHfN0fF2a zh(uKTtB2o}NgglT$^za-JBp-VNW0i1AweIq!%A)wkFd$1%&;)Dm}?UU4nnTmi1qA5 zKS31gPv=8>$-U3C`}%3bkHN|mboxNc6{<$0xK0;$vzP%aE-0|n^{#i7W<_oT z0v=)Q@f#iy5|er-sw>&8siJ(VJrI4<7^;pyvTqqO4xTDRM=3%`0ee*%;!Y9|02cXt zUe1VQ>tERQJCQ(8qv{|XABZO*~ivI!8x$3wi5K+2&sBWaCU3)_FpaMNon z=sf`t{7XEV{vaW^NxANjBFI&7JGj<%Fhb$kYId)A+25ez_mPu4GT9r{iN_!>@{K=g zCR5l|8G3i_DCR5H4&s|q*}7tT)}tIM`ZLlde_=~%(j`)xvq8h2O)y=S zim{c*jh0NmjR1ck{n~@?!m-@x+XpJX$ zFvQ2H4XdCB{K3=u9Kl$bVo(d`efsZ%827v>@cWy^2wbSn7(=Zd&fYe)mp=5ndRD#} zvK4z)oed%0E&h^VfX1Mx>yArmuPoIQSeLNjGmWQalL2yEFct8>uqZGeI~X~154z;N zJ(S22d5jDk4%T{u#ky+zeycXwB;h*PCDu|1LxI~q_d?|RG#x$|V!%_ion8nOrq%kM zKnZ_8q5G(rW(>p6ZKJ1uwb;Bjs2hNYYYeTulXR0p%y#Dg9^#?JwxIp@KtOwzb_6>) zA_>9Y=2i>lx>#f;Ovptk2ww5bcx4V(_=s_@kbOW3K1?sV)A$x*7%Ixxa~kA>W@R=9 z=O0;!ur-h#)nwv`!{rJ_eh zV!@75)?uTi21VGZH@(X?#!bewBFNgo@_7lm*~kGSn!9N>MvKGS1P2J9%|9!}kI@%h&E|Gj5S+0p=Md2^hAC0ctRSTK%rLS+#U4)251bLk?=D+6 zqYC-g`C7&3q+iy8_E%J{v!!98@3!oRB+6I=dC7z7)EQ4R9`(Fj2tM7TV69E-Aw078 z=(~k}h|YJU7NtJ3QHquN#?31LRKp%rFo>d|4v@(Xa}XQxq!!Q@2fwEv2CLGsFOh;r z#9c|h!bz8+X!Un51F#r%ZmR~OP(pRjHdc%no@80Nx!7Tp=~)NvKvnFKay#2KfGb1QjV(6ZoFgyE?vjmlOcZ}Zsf_s3s#a)(|cv)mw63PNZIV+0=15e_i%Qe8kq^skbd-T}8r{YZ5~4H*ZjTM`k(Dx~bStHC zE2cBU;brz|Uz$Pc^xBckTj%-!^cTJi)KC7S;t696)R2a?8NhEebii!y$ix@_R`BSk zVXq4-Ms?=TS8T(0`z@bN&*!H){13tMzzD4)FkKT|DB%t?co{~;KN=PY1#XcW*SmS8 zd#@xl;9ZV5GiW}UrUwwAcvj2H7C-)CV|3wIs7qADn44xIFNcpLcqNav642!1iS{H4cMuuL&R z@QJ-FvhJ7uJxomLr*E}}ycX?sldm{yjZ9Jbs%b~Ty)%-7N^~jkP+hVi&MX93mlu?w z6uJai;Pk>odpb7~rhe)&p9=6`a@tp)k@MPdq{^_x>giG7lNo<$M5!_-?^n3{E7r0J~ad zllTH8cYQXd*z(likA(Vl*UiqdS-zOMrT3JT~5JAB55h=&{Fl*O= z;wJTsfkjf1wWRKr;2kk0_GQ!68X<7(rY*DKU657Y$L$PaRm=m&r~f4h@1v?PojGNg z)(md-j+qfV^%GV19Qh^ABGj*$V}=OQbH&Z}k}M%WW_C-+SQ0;PTPa)8ru+Dwy7`{f z3sa!k+$Z{i$>6Mdj5~<4Hx#(4j_@-h|7y^R5S1e#i>aMz6Eqp6dptCN=csya5&5@Bimio^&lGRt}m0Zt@20vZ;t5coLUc zawX3 zVD_fhPRXGCv50(9kPP5iAC*gccsXU)w4c8b(;3?TgOG97OdNiSYC zbK;Jw_sA){HHW}A$^sXN6~T&6UM&(j*A=U7o_nv=RS*G7V|_Q2|3^0Z7jWp#>diN| z@g`e{bp2W;EryBrnkY-uZ$QJ+4`7t1m?9sp0^&;meT(CkXwZ;^7`(5?{7DIEK2B}5 ziY-rGvq~2uBmmEr%uyC>7%p9#RIS}a{kNDqEFCeYc#5me8>t+PAJ=yAsU7kR3D5TV zjdKn{eCC{*3&B#xr66`!GxIku&o@0f`T(BF2hEVV(T@_uRG5uQLWa1Fupb$*k;KO4 zq3kdgL`lL6&i&J$v48gfL79;stwjG^W=gVqVn6L8aD1`cbw2FHo6N3jZI0$Uen8HU zME{!ojGrSBWS+|{N_j~V%8BfsFJAvm*Kq5%QD>6s&O{TW5Nz;+F$;sin{y&7lg^&} z5$_)IdOi_tD@!E<)?7(C*_2<-QgQ#=pPq%{A2R@!SRM2RS~6i-Ap3)r6vh-n{@%sx z{%07y249^Lh$iZApNjSQcPKlz@0*h~-fS1Z_v`BNaU`mRNPw@WwHtpq`J$Y^QVZDW z62`*6d@{36^j5fb{e*`YuynH1DFy+8>q5k~r%LT&r`h7{tuyyi&?m5Zdr)DA)7q)` zJXZK?on*HaB|;H0|5m&5L-S=z2&hz#>z!so?V)weOdR~RWg@lJBnYbS#G!@GE=ylF z!K`)1U;4BLu;|kZk0IRhJ|HqOM+re=QVAKvl0O0u)rn7VcUbC|LWt>4`JAhc=d_v~ zo#EJ%WakFsIczZ?vXFd~>SKd}v(Grn$0CGM{)JIMF;m%|cDbTuqV&(RVl%w?$t7}J zxCb$24r3jS)5T=tes3VJiK?F(6<{K!u_9D<%aVXeu2V%7UX<_YM6bxBSxcp0A2p@ZTUa1LY#g*b8x zMSJG~a=tpm3OdFrKH8Ql^G4c??u!|mhZzfcrP0&T0)iaHPgw5f`6MoXq#Jrp#%ef9 z*UzH%+8`Sd6wsJ-aIA$+p>^v5&hsMpS$QRweUjv^AZK|g#>a@tQ0!+MJU7> zW-dgqZyP+Gy`2-z#f>z*pdoTsj#?GD#myy^LP<=|#2JoYh&f6Ebu7VZ)LvX`R1ZMczlFWa~^IcU&|SBJf5 z1s4i``xdJ%@$znfO))IsmJJh*J`cn&f}NgssiYRP<5UA4V^(eyRF>rKQ?%ygfCB>u z?g|`Y)kII@@9|-N;(*{2bI+XC&3H_>`c=yk#VxbjRQKWKFPaFfI0bdTe~IAH#Nk%; zU$Vc=d+dYi8e6AB2Y1f@B%(*z60xsQ)IgB?^XsxhS-kC5;-n~-K?Ze3wnetj)jtc^!ruZ>*%43rNkQ=0l5Q|Ktv18G z$W8x@m`WmUAUW+`_%{LbIwhKiVfjE#p2_+rV@@w!uRcsdpYPbE_e>pVkTEvkkLd6Q zIzC*xkxSw3)jJ5DEhL-+Bb9uU8HJO0Li+Z}`<*gxJmJk$n^`XOKf7C4(t-dUW>g^+pX7_|i zeUk3R zy7IWm5UG=06UeR^Q_igsGXCRJtgIg*o*N`GSh$N6+GC;yMV9(!G_Q1bdH4w7%hdc) zBZa+)26CSZn7#Zq7$&$)qX|RePXx#G8=5Pl|HO_J@%|VBG0Vg#x^5KbG|iDqKP*>H zK5g|N7gMK^v;l&7N>iXDW6Y9HC$$+1AEBpIg3N}hAvpGM?~j{Jx;7ZTpNNi=Ym=WI zdhU~;TkO#9BI?n966B6snwY{IM54?Re#!3h$e`$2wk3y_(!+rm7G8amQ@SnO=;Nit zFUrNkOZSY=_FGD}3rVn@xo0(wQUnHt^{9f&v*P;P$zu7KUwtmH<2hTD6@rLt8>_jo zVZkxe$6Uu7Pu`Sk61r&EYteD=c`Z1LSNPz#D3=#-L9@u!R%DI24P~3I=h4`nEC(#2GK?dwAmJX2pD+&0sr?VUdE4V<&#C5AsIYb1_#Z9;M zkUW%sK1DrqZ8o?*kE{mSI>o{;uFKr(LStcUg3mWL^?agpCt9fCJ5Cz|X;2)@VSYKQ z(ExlzeA8CJ6@<4wsCrpmC9Eu2{48C<+Rv)2fO^dy2$giJh*t3l@Lf?tF_K*3asmqs zApRj9G-Xq7Ielt;9}(`4&b=0H8{x+UA6vVQ#%gD!?a`S zM9Y^vH}0#?%6Ha$E21Kb&`DC+mw}{xQnNy}Ld<%OkqTe%7cO4IzaID^FndvCh5w}| zlB`7paTtP$K}Jchwd5I#gH#i4@$E#eZwwSz{Mm<_O0m507-s^-4$1sjS@X-hsi*;y z&UdAZc}4tnV!zbUQ3a`j@kf|T6OXZcBM^p0(CNAj*)`r-uu8v52sv3kBP-5AuRmXL#K zdm)phdt@O)GMye5DJZ{jb}wIvFZGe5JcldCQ3q+#F6KH>5XZ(5hlKLlRkRHAYZd8U z)b#3iP6Sw@#Tz+X`iyQ2q@3t5p8hx8Vi8^3zZ~;@mJT?6s--{?rA^DkFI=n;Pl~~O zI(&2pxgB=EHYK}`31P`+k$W5_EC00yvMBAx7GE)?s=`?^Dwhwu8%KC^$N}2oiddL!YgFiALbu8-g zv(;Frt&a|SX+yfCsPEi!hP(Hv9m)M?aoA&2Rwoq}A{O!uscisSpSWvL%_2BQlwBk? zDW#i4(0wmziP8k6$>K$XvQ*}_Ye@_=7VcQ;UflD(sw%0NuYYKL2F5D|^;65*X~&E_ z(cp1B8al{>qnzY&Q39e@K&Ph? zmf;_WWTj&CPK8kfO(kilF%p1pdskU>fWzNsMLn#w)?eJ-_WEYhdQozVFN*uILRYqC zL0g*Nd{;0Xi6W(p_0g{2Su=G>a!FGSQ0fA{z6j;6g(nB~My!^|gK)rY%>@SF zQh0Pr?oIY%Dr0dW;d4$e;!R3KMWNyPke?GrAB5AOdDq7vI?lrMneU)j3B{JMQF-!k z3f0D6Wj@r}nsp`VzT9Mu?6VC@`(_?`O8Oljt7l_Bk;FkQPI+9)Zn$>f=aPe2q0DE@szkYwppG){ z%U4PSHOESc=7}s6M{1@jr!iv!`gV7A_ZX!BsK(;Dk7au}*#>8OO8mzq6;4EFyE4|X zm_ABI_T*}>o*kWjsu#^}m_R$q%FIXERHU$2N+C5+aHJ@O_3zdobg{RW-e?=tKHhr} zQ8WmQ^+@`@UMDWkaVEf6{kmUJX1XeOR>TarK8;x+9cC|0mee_SsAC{c;K~C!dCRb! zX=4pPD?J2ApbZwe)1f1nl^!NW^%|W*N!3$Awho;1yyxHw>mn5&$!^btM3m!iVZFAT zk!yq4+ne(pAw&LMk(sVP?t}pMdlU=}K)Hw0u*&p$OYHF1R$p(N^=P!@eDgR*r`KzF zj9s(*<_PaM7A#6igpT!c>*0o4bw|vpX-#7v}5^ zlT1bO1R3=VvimFL12!gE{cZLxZI zxwi#*noYv+7F9{+lrPp6w2I?$WCxm70+Yw{o7nej*tNc|x4$+c0wO!#Pb-+Myig#d zypMPwTGDq&MEyh7rw(MXU_BH_e`VhV%+C+I{MRRK%+uv0#FpE*!V6gMLua4Du!%=ssIF8ZY&T^<>Y zq%?aZ$+l{%g4*-QEwMY9qS%=iqDZL0Vf3KdUabBn948o1??EqLd^;90BGp6gLgp$sqG(T`n0i6Gs;) znNYBMYx$fH9@X{bExY(lNg(UYo_}q16yy!EYU#2gFEdq@@os&j*reDtX5?Nwpg}SHT~(orMOZ*!S+VOSOW52y5{S z=py#~<&o&P1E$W2Uf`ywxa;XS^?1fh;15oAb=rSRhQtxg`+LJ0tMbj)BDiVJb(C*BNRfZ_cGC9-cy z;M6XFDNd-i|f6NM*mKZ-Y}F) zlRIIqjOabz%*8$x9Q5lA_|k+pms~D5%>ZQ2Vm_GQ=I~%4(u=wbEM%*5{rqqf4j21R+aPYJ`mA0ChaAkFA0hsI+ylR*ZEf*&5`9aF=na&IOC748T-9Oc3Zq0;dCM7 zEYctQu%lgkbU5i=xIRxR)JHHFbHySDti$46w}aM!i{K&k&jIDyXl3p>DtH-S5?Lce zBdj`(qhj>pUEevqJ<4;yKJM<~NL1%Hmb&j(OX5i)5qtDbYWtNy`q!^V)_lpdeZ%|L z7r0Qk4F7Q7KNDkV=ciY`4i@NF^034zKZDZ?T*G~|Rp$urLGFL98FO_qwVNnbOD57= zpglRu#kH^v(7d&ZVi7_Nn9qhz69YMEn}`P7uETX=H{M`I>$TJ}y|FDs7v~wa|D7Pd zeOJqIa-HK#?29KUYfftqD>`p{g!JSqu)zmZXPuHI_zfyIGT1@p0(Fx9hwTONl$K{Y zcu-uP(4wEc^4Naa4ed!a6~1S`jB5qAKLKhzTi&SK-U>MHh{==sLlV@C)urPE5X4Yg}SaR8bUigbQTl;Dk@ZoK!B$M)f4lS=3L}mTnblb6YNW+ z7hnm#$0djom%qi91a_J2f0x8jlN{>iJyt#iJS;O z(Obhhi@sorwieYLW*g``z;sgTU&ZN|f8Hn;u|CR*>rTw8@1I6RZ}-0YbYa-%*r9>% zre$TM=9^Ra|+o5egJ?75O$4pRP(3PRdt}&8V4Nm1q5aAnH{P5-Nm@5YyAY zMmC$v1#j8F4_jPFOEVgZsx>^6aaVqLgchao9Ydq#IEc&QLHh~5&79D^hg9XrwnwjMxtD*~)iBdc4H2s}&l8{nf%`fI(KP1JPq zKIf>&;`8y)VNzG{PuX7P=pDl6233zTSew|sK&r^RVuBK%wSuffhzYct_0zI$dtMl? zs1-pMwqsP)v?b(=>R0KP`YS&qR@a-U*&fi16T1=CtiOo5qB-P;+hw0g4g9o%F$ag( zvkh?WN4+v*ebN0UG_w=P)2(QL;E+fgn+&0&PMcf3I<$QOVd)5~TN|vw-d~wq zw@6bcbU`45CoSI7a^6!ZjKcKliW;paF6~)JAIa|?C)iX_ZjV!O;VZ}rF{*eTBY*MC z>SXtc&;k)1Q*)f{9r7?4i^IKuR17*aJ$S2tU&z!RZdNiMf(70B7W!maQgUT7?t$l0 zsKqKDfzduuddz!^s%y9LEPqHReG1Ge#?40HTGjBRA zLN(*`T8XTshydvbD7l>~NJY#wrk#&FaNHECV4_T>!n0{GTJd(WNP2&FI-%t0yLUQ4 z8kvt+8UiPom4vE;!h=f_DKQ2?W$Kp*hO^@6<~(yIV7y|JR^sSKe0Dz(ne(UL(&+;$ zC5p!v)GaCTU9zAp6tlxpV9U!ST5N99PF*O+5hVQ!M4p_xEq-4U=!i2aV%)`_TbI_D zYyzG%g`S$SBZP$KpVb0+t@eKfI@Rg3-@PH;q**>q{b*UQE@~mKK5lq}*=`sre)@PU zV4#HwU6o^7Cm1f_=l`jHliGvjJ$cfpMzJFt39jv?#_1bk8Jhsz+;pHQfqfsroBZV=#qLOGD z(I_!F^MjPaNmCJSsWI(n7yntR05)v)V>xR*4|P7WLwZBsnl(Zr+1Z0}F*~?U`8h`F zgu(l&sG(%H=9tHki^w7!Y~j1|b^Fc)xFI0PNW4O`bFE)O=V>-+BVEJDa0Sy9q{~hi z{a&3Rz?PJ!AT86NB^4(rAe1{QX!FDrIO_EkM&8+WN#i>DNjCQh<45ULv`IvlYHq*f(CnpDJBwEo#rKEgLL@O-ym^NtT7f@J6OStrE2Zo@b$# z()aStQea?H(!0~<$uVu6m#98L4CIJl9MX%>khp~IC>)T9{i2%;{~MRuZ+OG)Y2H>a zPAVE;vTWt1La+wmleV?w?|_p=pNiM_gUl5YDVrjBYCf~my5p~~7k*C2-7~T01O5_> z=YtX7=f~*rZ-96fuJIDN=a0Imj3~?4yt#}bck;ma89I*Y5Hemqb|7RaePlsaD7%vP zOPnQqkw14hNaJTnQ=Xo?j))W&-E56ir~f+vpBGGLpbBtZUqXs2MxBf_P4r=VKXafb zg&qM2HYtd@H^S@;&)tS`0Ab{PkJhlxNIHwC*Qu`%^`T{;&8?2OQC`Q@{U)W% z2PcF@WYkovd;HPqs#%`A$AWZ>%>3cPPpNCB)ppL>eDWlD9p1JJfZhb3T?FEBUGqf4 zz7$-q)6SqncNs<*`HI(+fd}}{e*F>zg}W<`5HJhY@oxe3Aub+1nzDeosva!`OyX3A zEqz!4Z7mdx_O;f@A6xn*ZY>6+aN5w1Fh*Ux&$)DQf}t;vGq(~+ub6&63bRN4@e_@|}^m;OOar2~C3c=%oz--oENn@W>&TT~m z=i8v?AjlMXBYDS&))jC`^vt8oM1L?ujs(}}Q^Un04L)cP;KbmvDdo!lS{@N1QXvUk z^-$RxTW|>W>G|8S?M(YM#96oKAJULfQuzZVX7P674NncV9^UdM3A}<0pU+KHnZ+j! z0U9e>jAI-Hayo<#!w|k6nQAV6k}kRO)EeUq!?u!HbIJ+&$XkJ^>PTtQ@ApZ4IHW@tFALk0co5gP(zs|&X&9T1b_g`FNRS}N^^|M*?)zS1en&%+T$>2 zf2pmreqP2Ab=|LbkQU{DaG_ECHYq#ipY_M@jDEif7VGY?J*N4oXg-IKjTB0o5qZL{yLtb9FfK) zc`mJZ@kWydxDNG0agojEJK_x!h=!unwZ6EFHSIftTTi2QTB4I|!4dcgBge;^de4FG z6Mk33>!ozjrN>5ncnlO1U$;%<`sav1YC$+K=M~nVYIxn$w#3*oH*4{zhAh>6&^%Q> zG-W*s9N^Kb5~r)d(8^y6fg&jE%N)A76iU@kxsLchjJ;!UZ9&^D8r!yQ+qQOW+je$r z+qP}nPIj_m+s4jG?sw05&v$OssXMBAtsnF0S+&OK?$teK_cKB)t0D>~8!aR1o$z`>rdSocniVK_qo_9{IE2@Iicf6y zrkW}TaKHT~SR|pmvoOU_^I&a|QdD=7kyNWB`Ol{#qnZ`Se2ldZWe^ zGa1M+OLF?o4m^xgT7uyNU|oozn_O#q3w>dK#W_Z{;{CnsM|hwSZ5^a)tR^klUF)7q zstEOFH{@WGO`=Qq^o{iH+|?kchc6JHjlgi`!g;#)RvMaUceNyav0M7y#8+Cw0tmW^ z`+VYj&Y(@R&oB|8yp59H7GDYcj6&RIKaXCs?z4(G^R-cg^^Xpj!W_c!U#?bha4JO* zq<{(^;R1OgAD!KhU&O}Q_C~a&JM@Ayhgy$;qXVqEUhWa- zE0yH(LN}c1Cl<^!Hx*5=yp<;HXJ!?60FMJp&g;|dJ<|C!bYijUq?l9gH5VJ^NVjME z-L+fDxwv0wvZu=ODeaiI-ruH%hGSF9k0rD-{q~TfUjRP0a1erT8Vpw=`IgwnIEY8h zc1y&_ikQu03WDi$zi5R0mx(9=VW>^Vvna!R+-=h;72LO{ZfymjsjBiartVbm(2Kbe zG2*$AnYr8nubir<{Acnv2PRzybX)Qk5OBmYx=as7gzcjNo`*epCW4`H%P4Tk!W5&{ ziW%72+Pa%(K=Y1 zHTlI5XeVAto9PL0TZ^3vb_~X0$=EmV(CG2@zy)0Bd>>zt7WJ61Hy=kQ3q}Q<(Blr? zCxt8iw|Gk}VaEc2$W`wW4}*&n9{H{ei}=*MSLF0)j3z{Ep{C_M>L8{2{+ivyP@b7xeMj`>w$cM+HChVe zNf9X2V-PeY7^7z}Z&Ys2jGYigtwZBIEKmzI1d$(fdHpZ40k@%c>9KSO__|&_!aLCh zXHfa}8=werIh;bRZB;>38SZib(=pl`c=7}RBu8EDca)hfq^j^o|bVg8L!{4A7*|H)+mGbUk ziP*#s8Td3?ERc;R?$Qi6X})bzaV>2c@{};KU_da$NSumAT5-35lZ2L}ORhx3D-bSy zGG%hKQ9_-c;`#VA;6OpLw!`zKN z7&wb1K;fX6l`heO`j<=jB@#&HWw+T9Zw?Th-!RNIVY65?C;t;c*J-WA=(R|6>LbYL zh@OsLSGzkTy9Ob}&p)X!QS7jo{FNs8C3P^qVJ#pfI7@z#HSv4@$dOBiK^eJd8|Ava zZ)I~EqP+XLm3Vx3m$u^qgF(z>+5PkGNfIqJGK6Rw<6B>qh_k`jkMv8T)Tdv^9_#q8;-^C7Z>rvg{4z{a>Ow&#gxpq}yrZ(U+(lH}zq z1d{4ie&a#ScTv2)vF4lrj}Zzvm{#=QIdbNph{s2b_*r*w5(GSrBH zyBvR);4S!0zDxjh$r7B>%1O(u<91vwkxAlsrqH(6Pg;1Gz+rqtP=G>QKdi+>9?JWM zoQ{wIB_*Y|Cv=l!A~)p+B-Rgt{;Gr{tDhc}E~oH0)wnt+_8hJpC2xwx+{n(wySW&p zXVrCu3-=7>%4UDF*K4X*%0%tKvAwhH*&^OE)&PBh^RI<#t1vOpY229iVo`RoqF;h9 z-)d*+`MpgvnARLPbv8B)2Rld}M@Ni~65w4(cO-_5cm3v-_ze_{vzT`oLi94PQL>`u zob?EoM!#g$T{c}mF;Ifrv6J~aex2+N17x`TJZpB(?sAANOom z3flpc+pi1Vwa$=UniQa;52~V}9i|Y9bABK+zy;5)?dHnFRFvxPF>*b1e|ybY_ybv` z$~ev(c?OKK3_f2Nc>xykVI7@u;$81iR2PO!-Jbm=M2k$zsO=dqDYvVVF(srqS&PA- zsR?#1L6sG=0@69RYw+Nq9OJb-ta#Gs-6U0>Sz{Z7eSiOQ8WEXu13%?BCGr-vm!{#2 zN9LsSVd^_j7YuA3W-&HDtJECqN!;^}R*&Ed$zIy(c=UxIU2&rYv^L>e>PO@*?rQqd)-l(8^3H1;737jYP@ca021HQs9nGUOP=FgRHFDG@K)q3U= z3M$rbFXKHxY7-2s!@*}VN-+&;EF9!zi^4>{oslH^l1B@y1|0?jBwrP#zAtCeE@Y;oYJ+*Fi1%VE{+42f6 zg7vBv!J8;lqcP^^!*oQW5^F)Cj!qsY^n(97{F9GMO=rb?gQrcxm{(NCti>E8EzXW1 z1ruO>5L~_>@4XWJTdDTO$R^xx{fOsHa)_y@9@6oU%RVMiLrF;i85BY?tPB0M+6^ zMXz&?pJW7dw-W5>X1j&OsXB_FTc-lyi3g?ln7f4PMgEa!_6)DiTQmi;#GhdMS0RGH zWaBUEY*ug*)-a!>*#fO`p?X{B)~ldI-$Q{jrUC=xHdzURhUlyYyJJ(>?$F6q3$qij zv^qI@)1G~>zf4cZe^PaC&Uxc1&kOXAGA*LC-?Tx(aJe)KCp|_P{PL&TsVM2pXE zG1vaUx!8u9y-D`2WiWnG8)wwsXBO%ea5qt<^9K7e-tmaqoP9~W=JtWcKvM`(%z9Ta z2=4*pne6hvW-!;$@v}Qsb>uC7etrT}S^m*jXXL<9Y5$r8$sjGW_vfJ!yqWC_2&yDl z%RQ}pBki`-OStkL6%z7dF`>EXEAUF&6%;{-4AKh9ucPLohuIx-fW{&*zh8z~{tX(r z6vVVtUlkh4^E>zjq4-^Df^#1Rp93x2w|@{~esUT$`<{k?()1DTi*B8jFQj*da_TYy z<+i=VkCG6KTut&*4MDg}wMQ(8^n@n6iCbd8zd*_oIZrXBuf4hPuMjC5v^6r#1B#q$ z;MIxj@9jZar;UMA`=~Nxr}!NA*pGbA17Yn59CAW%B#`b}=&?901-&>p4V_*{LVa>< zMJ2t@8!;l(G+MGdku4Uq^eLKWWKx`@2zutEQEYd7Om3kWIp3R*EC6bU8g!>Pj+z0N z=+Wo0;L_U@o-m;d`x>sPO-&EEpfvKnEL6}6uL`T<-CVK3{_-TBf?-Bbqgc&6m{_5t zUC`5$yoG%hwP#5~sL9!^;2ouAh(9W}z;;-h|In_sB>-^{=vb7%JGq_%zwT2T=lge& zTQU#8r)w8-8E4o&WBkH-Fy7uD&x~T)k?ai4$7;E>X7@7jb8~ZCMx$>dLSTGG;S3tY znqJy1aT#B~uFEW|blNtTb~_I|#>bDHm+1jMfMw{yEr*T)s+}Y&P;qo@Q+r0C|1`U+ieiTHX`X_ zoE_K?isO&wQdCA+W0$KYqDyc1vtr4Px*{o(fJhr-e)*O#auoB$C)E5E>Rg%J9Cp0~ z?a%7+dcW+fY~AJ)JIDs8jT(cn3g6sN`_u@~=dGzgR)1X$lY{BiYQD-^7KuQNjtq~hRT|< zpPFL|$)B82&N86J`!T2a?@1xlRbD7q@h?ZL5uLfA0&Vvh@={Fu#hk`HQPFsG=3P4J z-{Ya#;>-dTFuiLvm-4xwCKdAOG0>xbzbhxlfN-z9)LHgLm?I#GK`s*n7ny{gs9@w3{Y^CNAZx&UQIOdE{Tv^t z3q~@7Qa@5Z4^Rm{j+0d$w5l>PqozPpKeLHEsgP8`%GvmVraj{d$I;)EJY`m{MJN^2c)$3KCkZ>Di?Zz2xYc66(nd5ru zo7jUw!Ega_$QOBykN(5%OW zlmw$4{W0~WzSl&qWvuT`LpF#f_iCBK#tLr~X_q6hO_svJyY8XSlTGCQ9mryD5(s!3 zLP0jU{dcsXJTabGC`xL+;NfU@cTKIMGP&oOzwSO@Q6ViU`(WuBH{jG5`hl^jKD)@r zrvL%6<7@k9SsLU?8_Ym&MC=2}MV+sw?>0JZMbUxJrS1ChlP65Daj_yMy&>z?$%`n<#_Q9GR=?d35Ca&G!;3t)3&h|l#~*tgkXB1S_L zk)ELsxr%7OnT~aPzO?zH-PVEb?A*}Q5goj#X=NgKZy_Wt_)lY}lE}-9kv@fROy@b^ zY!QiNn3p7fw)ImH{mTbsLb(OYH>Y<(n@=|3-6K(_P&JVr%=B#~ zi1%j$tb+{q31$vVlr{_J!in0Mk^PAOAc7DbKA^P5vyKL1w*B*c#vXgMJ1AcEoz+2_E4XQFX`Kaj~Ki}7WGa%_|8-@1T7 zwC{qTdSevt2&ndMv5>=501(OL#$ef#vnP|DfIPnFyWot z^dMEi;1*)u$W&BLEC9DTp#ib`~9Y3#~zN@_Q@*p~u# z7}=z)20wd3qV(*8-ZrI}8{Wnc4X5n59ne6SX;tPDa$a5&{OtFJT-gH8|JUL)yW=Gb zNdicT>G*7^q!8pAiuCxb|2IZ6ZZ9?sW!p#7K!}iF#0nPf1i7$1OczNH!&10dTl*jl z$~k|wUfdoeU?OjCtgzAJ(uDkVz+_ReQvGhttaZ}(7pXP`>i*yqX7eWIw7c>jYR)7X z81B_DS3R!jUe?D0#ZpKFK>4rlq_9?ot)+-UDQNTt-*-7%J^#WSiG|l#P3;- zt1UIyuGGY^h$g^6pZhfzR(S~@1&Pt%!cTt)PNB}8z3sMz^Q{vC)7H?AOr^BW8_4vk@86hpgg&x@#=MkFO_0{KvW-bB!>< z1f7~@9=o8vq`tE^DI%pV#eA81N0hcRw))52dd$#|mk9?!b(aw5X}!*b%yUVwvWD`z znMgAg9ZL0#lo5QsvF)gSd_NK#4!U&^cRnXy?lOVH&v5dLG?Nq-l+VTC zM%Y5i3Ha0~+%{Jr!e)!5NY;6zBR(*TWYWDE%A(MP%A-t_(I0r*?QND*z}Xy_5&nbm zxp{1TLBr4*q5vI0sYG7Y1d);z5@=vc&C!|2s$19Tx6QD{a=6HLP^mcq${}iFLH!VYwiA#hi4cn=$jRM^Ch^rq$lz$roqTaZ zymio>bo6?-t9-*47bSlaDW|fsY~Hqwt47aX?J(B7zkipf=+I=ElJYSHOV5)@7%Ddo z8WKNrcgK3c)#@lizz`Xu^poO|vCS#vYm zu~<8hh5Fk)6o%hG)>ci$2)8;EPa;5zcPzDhZQyTj`b^Fp0aj!mj|B>uB6v?I3623>pHh=u6a}0dPW~WN<|~}cL4j%+ela(Sb>pX*q)TNA(~O$n+6x7 z*+wPiU%3ZMu-uyL1An^c=0!t{mEp!)uxSw1K8z=R)K z(ZM35yTx2ed7Tm|BMOmHRFfd_9A#?831@8?J|%cM4);Jxzlg_zvq6C79%(*7d!V%B zZTE~X!4T7iBpTIHK*k-1cKPvBrl3i2F#A<=4*p%I!lh*iryUI@E1WkB39#g&IIbQU z2}UV98_S14$e_Lb#y*RX$z!};E=4A+7Usw{34$oC`EVfxDGU2Q%WUc+cEjLIl=a#R zNv;H0tp-XqHfw)D3?{IC+IUIwF%L#CAd~UeA2WagcOHUm-jcQ`dpX!Ow}3 z+_^@*fYBXtA|9$$O76)an9<;Ri`%rALmsdmUy8FGhCOy(?|+Ys%u)tFKYh}@sp((I42P;UYS7rm>iWSvAP4p^ zH*meoJ@YW{nCOAv8{&=<)aD)d^4!fj{c5W?M?e3l+?TSD5aQXZTvVahAu{p(arLFv z2qWqHwq68Fp7icFSuAI<&JcYZ5W7f5DWD1DCPKo<6#Mj+__ey0&bRI5VY8F{+a={fo%dfhok}9Kp-B;(LbX6GZ6Y|tISx{pPX5JF zl@lHI*Va|`Ch-28>0cypNR+)OEIW*8toz^!uBO__k9r8=TWs`ZTX?T%#IPW zvcz>9A&0fGh*G226N+=lm+I9l(M07pLOBcjB<<$Mk*R2MdV?^IOkKfTTYu$6SAW=F zYLk{^kQlaM2qaCv-2z3U3r$y)zi3x}Dc*u(1hXsOCM}GxwnBezQYZ{=XJ|sI2q`Y6 zC+9F~>A@_4Bvy+wbjGnENdOdg77OG)8@zx1U>D3Ya2t0RY%$bUBE?{K5~r>CS4bvv zVua2)Iz8wS;=;*I{LE~$MFWpY*IZ%8=IkwwK zUgK8*IO{>WNKyL+7|tmvzZA}QJTo8967N>Yi`L?xwa$dg*k(Os>@`y*HmK;_03&rV zrQcM;Lw~tAJ1~%#*oS7PqaB|)XPUeM5@V}qUJpkVlA_56&{92zLME?q4Qx{}tD*V; z5?_y}IaON?i@ppuwHvw-+bbbKvZRvP9oj__qrH`H%88dkaZ!!2R>$KgI8n(4dS&Vj zhEbSg^J?ckl+q0%kGwvAeT=G`zbo7CM7QiFv1-^n-90K3A#n|Ka<|sSwoN%oRY5Hb z=u~T`s@3Z8Jk4*hP-aIk%D0su0SVXREGLPuk4!Cg!oCBVhXjnQ0I70`3(YGys>~)X zzX&OytWTR_J6-O15J-_8F79J1ZiS-Em^8EnM%#Xf7oNFdY}ybodF@?8sdiC;W| zks8F)Ey65T(@6Ezb{t`Uai0AO;4;r(=e!zF(--TG5kwDPLzxHv6lxli-fco5)~Q#| z%SXDwb80hkc`G_XV+<$wEP^DM{srZ%2hTChM}0^i))zC7nFB))izfvPTltUFRsbkZuI zy@dcWaWvdX1+z``6vu*DqcXHh2NI7xgy^BSW8VXooOAS>g%t$1Zcn22^gn6#%S~ZjKBNOixLpNSzV}BqhJJZo^<<_fVe> zgbqoDk?)S%Fwdib)DANQYKzEiuzibPx({D8mx@xy-czma$Li@_+q+o`yaa%#uwtpf-ViK|N+mp?>)M>l2fo${9MOAH%%P_zRkik&6e)Gb~V zca1f3_z|VBAd^$Lv=4xO0NpL=I{EaZpZ0DfGMur`?2^NnhVTq>`vOW4OM@ywtVIX5 z8p)$`yU>HsA)Oes9BJ#Y@yrYy1%P0}-5WsnMVdCE!BXzN!{tM&hRjG|s!03ZK zm`kHjpM!}5*9mwwe}gi&u91u!zeB~z3H zRVVsqThzzI@rYnQ$xH*J=(Ac679x(PHHinKtVUPMMDEeij*_?_U2RFY(6l)f9 zL@U<(MK_He5N?v1|0V_=*q_6WdSd4ee2N-%Pn=ma>f*m~m^E`efEN*D%9~Go(tad2 z$r!9t{goeleP(W6QZaH;AOcSapQ!CG#roR;#ZrI}P{}S0X*J!&zI&g$h-*q!XzHeH z7z%$4)fcaJVFEQ;E!N93@o*;hykZlH(l7cUf~wBY(IQ=W+s~cXwH1?B;``kyBazEQ z+b_{2(5l67$zjz(fPX8)hT3j0-a?xviLo*ZYP;W~aiG z5Jnn$AW7@6O{}>F%)m2IwJUI>WV=fk8Z|67jh6g`gSsO#3Vc{Y{8=k?58Hxaq^Rl( zD^)0kp`|@TW+h)oP?vLZN--3@FrDeE_@9reHntgYo>L6C5`kJN%<6?*NwtA9qz61H zF32THsZ`Nojx+C1Ti2p<2bWI0!}q)Uw#sJsI(E1>Gg~`95BLH!d*Vk#)T4q#oaq_ zJ#M6`r?Y~T$T~I{JJ?Bsi6C#xh2?amkZ3WfKtW2eV7oP2O^=UuV;I`Mc@{l6(tRGC zzToyN@=n{_{SG5tcQ~yo*s#_sA;GTg+hHeau zRtpSYMQ*E17fqpzXr8J-c#v#fUR!sNWxzemR}fP8EgM&6@({MBgum<{$h-INYf2GI z?&3EcpWnUV*Xt;J?U(E4=JI5$-}@Z2%h>wi4)8YcTGn%&y?ZqlObxw!zy#!iqt?f$ zCJKdN1oc8^ANhJfu*nz=jS@!rh}g8DF1UX~=<4WerOyeKYm+%0du#cF&}W8Syf^pI zffnzFS>S$|Q+5><-)BPZu{{6yTNEb1$cP2M`}@`9A&2AeioNyF{)~Ihz)LXc(WNg` zpE4A09R=Ir^MMl5hh6l*1!}lBDC-Ga4O(?>fkEUPHtqLX7U)~YQt4K39+;9<>5VVEj&>s3V*~sx1{ZY3~PS(*Pr`lls2IZcla)5l|P5U z-fDuh5zfgpXz&?l774+f)E1J{97|&&e!-e3k9hA`eYQthOI28o(^RDXusO#~`EOYxxFI;xo|RSxVC-s1+A!%sH%$0c-g z>wQLTRaKEfi!o}(Ob$4wN)*^7Fc;& z%AsPFN$?yC_QNJ_m7dV#e2v?^qTP-J3RB0%R`I|!Gv{}SN zpLRXxJcsFkSGA^QRz>vo)uM5#6da>I&M0VTsO1fAPi2r8FSH1T9*W4TxURwOT)HFK z%!IWn7ceGRi;FZ=bJkN_9sy43o}aF?57qXBT`y=nU_~ax(HG(iBEl&M;A; zwyWnZyEjXX1tHerE5Zy&^;bhfqNyV^dK??zX(uoT?^WyvL{;`i^=G;o&lMM{+b$@MwY4c~mE>JrJ!zzK1;iCD4`|O?7 zk%k7I_Qj(oB8T`qo*|s0EFIQR&dhb!Vdse^1+=fCtE#*HxiOd`ZI9`x05X{gH&arG zs8qC{2U49DjOrJvOLAj{lbCC7>{~F9CI};L(Z!36ZTza%p6~^>YQ8*>Cj?Bz@#bXu zD`34kGYMQy^_wZXklL7WS4Sq)Sf>Gl%3<8py)qs&k%5UpKe$@vo@!2JFEl|+ zXU?y$#I>se?0VUasqF4rP|5j&zD#NFhGK3H2X>-C5hl0ZdYHhy0`#lkyz)VMJOxPoeG&6JsW)d7Diwmc#M1<#;7}wR3S% zVNH7jKJ{;4`deY#S)*g@oUJ2_q9S^QVkuWsaO7eQ6lW+& zO!22E^8yF_Bv)qyzfbRoxhfL(WhEK0$UuoDg<5|Nf~^2{tU7~M z1pQl07UC0$C%RToi}M$f#Y5^-`t>%ucBOf}7S9_m%o|VMA8rg!d*nq7Nt!uk{Z%sa zohHQP#>XNJQqcHPF@&G9Aks0G_}j&q2Hr#foB+Oav+ZgGOff?Sa5%oFh_*G0Uar727I__VstpOw0M+8&p5alC`@N);H zxmPtYSqY`AZTlw!@#X-Fb{FBlKy`>}N|JNrE}8>mZn=s;8zH0XOThEP1nwoM$5c}` z`xiq%@Q25@esRU}_M&B6^@OmtO`}gNC)pUoC8H396-%RVWy#eWFFh5 z_cT?rj(hDXWxr|#jcH#`6iq3C=b|gdAC6u;#SRTa1cDKTx`AZ>oqdVjtW;9evFQN$ zA-!%fHwd&V_PO|AW^}P9aV4ple#u4&!_M?P+!lM@tnjHUV^MD(%dwujD|4 zluBrH!Xvh179gLJ&DQI$)r&4>y9`TmK+QEy)gdz!(d8tbjVTVna6|=bu_6&uZ7u^n z;scT{;S5XA4K`q=RgA+z-#?`Kz!iUivZYM!{;J58z2Kq+CH`*8fqBU@vi6bF9n6x) zcAAPR6L~cZa7lfMm!a4paF1yb^UAJ;--JC0sJ|Y96y!h?ouTa0(1aFl92aUl@TM>~ zHuH_7!*h10y@#LLJaHbB20LARZngN)Qs%Ic1UM$mn6Gq$A!6ASGUu zXUOvB<7?(V7r&tYyUCk|R;K;Zw|AQuAOHZ;x5=BefwPH|^M6^rInkLr+gSfNz5QJM z!B6B5Y!rCq2N@7HUr}Sb9m~`aL=a(2CKQs1OjmnW#5bG{WApCL9f*j~TD&@*9j@2+ zIx|mj*km!#y{xKY*df=H8^6QLnV1)4d3Wp=z zk8FHD^gdIpOjx5v9!kQHY`9}3qYc1Z3QLmI3L(uWr4W>rNw8o z1SE~<0|7aTV3vA$g;rr>Ip2N>PMA;*{$hp8b1H(iuUU=1^triM6b2#}2hc#S$ss`# zQqoLgI{nax|37&F0QfP#`>)^mU!UOLU)FXuhIUr;|1$^z0Qo!UoLUYj76y7qrZciOaB}*g@F(U6Kk+|sNwE30y+s)PnoQn$^pv7i0D+>o zn?oxK2!O8+(yXxH&>U!%rR(WfL58obJ_Uxn1%6eXgbowiv*J&3aCM50XqL1)YUTb~ zOJDnZJwGS?4QoA#VF=MV?b-awmtMYn;i}atZ><&*yL(jcVo0h}>5w$V+Trq@KI1hw zXO=1I^h-*qsaJ1<_M9`Muiv0PX)?vJ6Xs5ktTWXkd4J2GCxJ5lm>LDzIG|m~!!JK! zev&iL;Nx+pN~+_C3%0aznqYVjRmm*V&Kh)(3PX%F${;I7&WkWU%~z#m-hwl_P?=8` zQsE*f#NY*W45x%;34r7uQ>r!OSRB}74wy!0|g zXY~dl*1Su#(jGKn4FR(KHMr4pIhspXW zvY}?#wiL|d^?hv)wnD7&Z^artE?=I4-V-aH)F;M_;^3LHR#UgLY!06ClB=azwyj`+ zIL)=pofhcWM2-p%_D$8<8bND5rLRlTgW`s4ltK=|Jh|b&_ZQeHnC*laL_T4WKAYU% zl7NeYKm|aipFl?-8_A$k(CP{xG$9|`ki~dJA*bgC3k;!NVOS--p`3$BUTN$y#i646 zFq3*GFN8y<*l5Ed@%=DQ43R)3@d%wC^6*>Kp4nmqA#v*AIYx(6{<%Oq;Viq8>W7<) zGFL{^iFWe`Z9EHu4ejKlbki)gu6h|g0*;UO&DIz4kbs_WTDmbH)i*k8j3J6k7bM;9Y!J4X^hTMt27 zTRUe1XA3*q|Frg>ia+?d$q$0#W~G1`5k`8KTCA)pANipQz{}auyF4{jLGu;XD$wQE zTqv{_MG~y@YmfTDZ}NxM@U({_{3Xc}x7nG~V`p340MP%yDj;+GGR??HWl*AOFha+^ z?4o6|yRaxaj$av(&c(*fqnpbdONU8b+P6=Wqqqmm02)+@zmvW-CXHs967RqrxWn4&;RI$hY z^qb=@ytAGOI5K~U8(IYtpG19Lh#6=8)4rTxT~*|C0AziS{|~1|;Ca;j9SDfp8aAmi z=Jzv}>b&O0U+d71o)NRqayoH|5Fz26Kx_0w1YRD@_c7-M9N_&zEZZrnb?cq?ZNk(g%qYyk$G)=#rd zZGEW0uo^@#Wds-rNkn6ij_;2%sKR$X9RGi4*|$si4Errg`**?lkCs9%7S_fljwB)` zrUow7&i@heC+-J7b$$>Ww<$F!fDk;})KcHP@&-**5cbdjXxF{)Pat2xqLN+LW>3Av zmMy^=%7>NS8vtJ_OQ0SC5Z(28YKk4)w5Nxk4{&4Wk8rrX;T}cU_Q$(SCc0dW*GC1@ zK94n`CUmoMkD}{UY#?Z8LNyW{n}&(aMbcvZwcjCoZyw+HsFbAm=G zvF}1T9E{z%(!gukoM%Y_XQ!5sNx2MJirTRDw*An`wCZ)%V4#8D60tVgAhPQ~1X9x{ z{2c-|ZVgD4+-Pi~tzHP0=A`6m8O!0)AYuNiTP%oO_c)usLW-84@5IdktpPUc>#WFf zamzi7AxmAPDIVj~+&~Y2N4)*-Lf1?1|K3fY5cTRzziCqaZu@xuUuxwIoeeB(RV@tu zL+(%H4}NO>AXrgW9*7aa2h;!%Rq8CPkRO9C2aM!_P=u2`j~e5E8`;7l_93K~V8dK$Cc2G|4)9jKDoHZaGy zs2Tudfw*CoZ<2}1dh{?y;I8Q|&bU{5rumcNWIlO;r0&7yg~pb?ZeMhy0&%la!G(4D zEflEuNV^vo6K1R-b4mRyObc)JxIIJ6*xKw)it+Vq-G&XMp_R4Pb>CH6e#g9Lj(CzQ zMqTw^sN=cSawY@grtPMOODev*4GgFY?O>b`_&d<+cA+8sqCqm~mwbX+gdf#-pi|r~ z4YnDfBMi+y(3H9lU><_mJybYk3jO3+;+U1Tu76=5`C-xSe}`0I5L@a4bxaQt^g2V8 zINw44yJ~3}iu|kJ{3`w>O%tWMAc}V_D#$M&ozhbG`ck{GC{)99n2C8Dx6bqYLKi*R0pi z<70XN{F|BntiA*|vA`XzZbWJy(fmLU|72{=6c^g*x+^%_u~s-Jpia!>5fD{P)U>zx zK*~ClmR)3 z)w9q(A^I@kTt3Qa4{3{uXGt%h%*{XQtOZV}<^CmA{4>3aIh@?`A;Jw=^!zDYM{)0s zF0``5Oe>wAax^*5bX>GGw@ruNd8k0qGOsjd&z~}L{-XZL#4V6cA+8$+r22|?2CDw} zYYfBNx^3fFvk=aBIz{PdKZfk{VGY+HEkg^g;vem&eAOpqGJ_gh`J%4|qNftm%cH01 zpPL&hZzIBcO{c;k#k!>B$o!P_=O70AjXEtsP);v{w+o5isY&30VpFS`Z5 z<~cs9r58tRZA7l2OFBvSge2!4?bBs&iX{z?p+Y6vb=a*+`S1T|9QvQN6KLOp_kWlF zt#Jrjn;6)-*#D<-{9OORPwWqZXvnplHM-U@3%7ujC^yI_>S6fjyHfD3PR9ch;kdnU_)9c^ty*cBNd*lGB9VPuI5g z8FqHQh7j^KykqNUpNnE;bJpLevnT*>5>D%b9q@vQXo3QK7wo$TZ}`{{{LFX{MQoY^%p>Z{x@Hq z--95*e>&dx6wcJb%*FBlnYKxrcsP+T{)gwE*dP4V`$4qAxD>D;f)DEGl<|DqNSi-6 zJl3%J4H_Z~MOYyOB7D0G+2tRu(+~|1{>j9he)yZhp^SN9A%u&PmMgW|l-b&6cmUa| z^)WQID!MNJX0kXl+-h3;t4 z0_MH*;ljnAD=*S+?=kw#vU+HY{z90EW5`rB3wK^Ih9S8E>%;yQj!$TNwuO` zK`>knU%gF*`6+VIkVSLVMpqS%CEa}@8+*x7_%hogO!-f%RY7;bD@@klL=nb8un2Z6 zyh8(4CRUAZz>)MjOKz^K+dEwixx(=-e8PAILmmGD1u=hNh6Y+FH~4`wUmP;op*d*} z4tS5${~n%FtshzuihhKWj=!fc>SzD&L#4eU^nmI&^Sa+E5dL2kWB89`KfyovsrZ9v z1zGt40R*4OWGO*Kz*+<((lm@pbeQMjDwF05vQLKH)fa4@boU$Zm%^yU z3BX134dbn;nVxhXX8c^cYk-+LE26==I)6z`4{3n^IuV&elT<911oI{*32^s^O0;NEMEmpm=yu>9%4F^ z4@u7DM;6<@IBW^ETZX%EXWK77(QHsabWN{-O4n2tl=q2SXMq4)5srByWNw(`Z80MX zZA#LQoY6o5kg|Yzp#8xy^T-3)h_|HZd(+RC15|2y6jOafQ{+A7yP#z|C@6JV%`|mk zMi2ISIYlrqwuA{JHss!5n>(o!x-^VMPD|_#eO|~Lr@13lWO-9)=%ib%Sk{ub5QAP?Gq3jU}8Cek_ z(fB=I*G1Ibec#^i-{bT6ejlIj^|#kQot@`-oX2^b$CHVT9Pc1dC_@kR-Qw+Sn@Bvi z%-=z|_2)R*Gc=b?FTD^yKXeYniHlbxLEkXqO4+dWNExXOUz0k81a})0r%NDCFUxLB zihX1@`dqWV_@qaER-iw%Su9|%mto5Ic+CmoI183q&9E_RUfj889PdVTr_I=1pR4BH zcNt3@IFN!3KgS$TgMAS#txQvOA-s)<6FE#(P0o^KFHWaGoR$>S*0_14h24KV%^tda z6RX6h@nVGvdAOm#hATWyLktv`e#S|;?Y#u;39UwJzcmx{N||**8N-fNk2*J(ui<$l zn0yZC6&Pz|9!-m9P*6CSIqixwQ|iZb^H`9uY!xgpmck~UF?nEFG-0Mn*(D9UJ4A6o zEX_{Dg?N4N&+YQB3B`MmP|zPkKj=f~7o~0p^%_yL^z_ z(nMo~OD-%aFUw8d#q`AVoJZTp$*xPsX}QJkaDJ|<#%kpWJe?Lt1ma9boHtzxXztsW ztmG1Sip1(0hNs?8FG}YoWpi$l_ws*(qn#a0H=dw~${F0uu$ysy?S5zCg%2nhTB;0T zlsKf3)zny6O6@ack^E9`lN1d?`m;Xnc+X=7`j}@{VZgSOt8SWJcfm8&25hJ zxX(s#FzW_2E2HPOOd*f1D3vEeZ(=WVOW>m3sb{eZ3UX_-8=)??Ae~;KyeaLxLvi<9 z_IWSDC}P*7)q=PpADd5#$ONK-<<06lw#LD4f;5|K>)w10is2Zf$fW9MkW;`^syb*i3_z%6b}Obp2`2<2g-l-J^?_Y8EPOCikQyon?&2zXnmU)V9DTk%U4;&RmJ@V9OSoDhY>bM7conHQ(v`qWxmrh z?KiNfsr=1mx+}0zJsr>P1BTOi-7xZC7bP~bO0uo360h&imrm=bJ|VfTDfIG`6Spz9 zu;;0Vy5dYRGPz`!Nm}oOZ^MFy-%IIm6LQ)+yFU{p8@I~Di_GgTvwcaH`69N+DR0mv zTk6LtO~s9m5q-w(TQ2jj-xO~Ak37I#c4pP8y9pogKaWb+46)tp1O;mVusH+bI` za;&QhDni&lAyRHqLs5KU z;#hWLJiXv-&cw%2Oj1)5Ygx>siq&q9&rCK%u2$sYMO!>8v;Dy%9zl0`TCr$BTCP#y z4Qt*MTHXueP1l)o?=)NQCR{L#nMQ@xG`JAqFx-`Yzx6|BAcMdmtBU!tjjOy=`8`TC zv{Uo4fo7t-P65;dDvJw?!^Z?chca*IVqR?EN5Es%SC_Sz6mj8WN!vI#1& zi6C7Aoto~q{LGuPxj|t>V68?_L}+1b%vs1`BDzK~a_U;9vMwD+s#||aDswH^!%Ii1 zfC2|`+OL4nhlmO&ss`fZ6T!?(6P``qnxY4p5@1$yaPC!(c12P7^2kjC8t{k z9tgftCWTdzH4bIaehx@1Fp+gHBb$rlYUIEWDvcpC^s; zl;vcwomxl+=PQd11=cK2N(^pu&pr(ibW!?o{U4V#Y_UJTnSB-2P1So>EZj0(nB67u zgU#L1di+M+7-c)2gdgN7bT_gRJ_?`y>@$^fLe@44n;~ahlb>}7pM1*l!^e3PrS63M zSjM~2VXN(N54_!#Sl-qqH_y@)Hu1?$)<}s6jn^I;L%89TeaBTM#TZ{ zTmURGUzR<(HvWm($i2pC@yWCJjw?)Y0mlP+dl}+dPVjng(7#kK%f%m_GH0n5qp9`J zvc8gDhqUryUJNP9n8PR7(Dv0am0*KJ_L6)8svYJy&FqlN38+%l_oTXs-}CO|Ca8-> zBa`xqF0fDsQpa5_`SGAYAjE6M>3!?_=y^37nF^IVM714mRciJ|VaCOBOx2_vH%@lN zK2=w|PL;gd@KNJl^-gR*DzeZ>hCC$C+u@X<%(P6H4MP z_m}*7)im)TA*{G1QKq=f5h05Sx;{?G#rP@;Q#8L1#015&+_{(dsYvfZkvuthnutw#%K8!xL4N3tIn^9 z+qkmk`&KzxHW?SZM6cdLuAwQGJ}Fhpm8~-gxJl%zp1JmPp}kOMIwnQHkQ~ zanQ!M(f7enl-L}pRD+wAK4r0!h9_0moSV#uT;c0MZ|$=hshWfJn73c7>9Y~;&ANdP z$Aee6&Ao&->>N+$s3~F$PRrk<>yM9qCozw=Ftqa{T;KWe`_t}My;nlNZ)ot34d`VR z+3D;K%q60?dYYR?WPKfe2K$1Q7dY%#vx-GS#I0}ZLQ3`_DO*7=xd;7>ZHOF~u4g`f z5XTo6<*(w=-m~fcB1vW#1nex&SDCa~l^UPv8|Xdvq&!om&?_G1oywtPM?CyHcn`x% zcyqLH3H_(xdJ7B0YJC3K^Z1$w$24zkSBg){N4*SXk?rH(LvNTY8wyzq;xjL_4QLI! zeBS+kt9Q}-x4rAp+=D(%(1HxW`1Fr-)1grd`djD+eFy!18HQ^(%Z_3At!^}nO;}_n`UFnamyU+l}F&!gYTog@@J9e|??ZzXX92~`& z>P>9xFbg@hHC#10`s*_cm$|hlKRDfJM@oJ3UWOs9J$9-`uk>lNx}8JbpxyoHkMwjM z^4mx?=4GhD*anUa@n`On^?eGwnZ+HO@lJyhcfRAxkKkIY6QxyKC^~njudsYhTw01n z9*?ljZe!XawdwS2Rj<9Mh+N&>tR7ep(EI%s;4Q)kRXTRGR2D5iZ7fsSUQ3uWj_bZB zP9d|tc^O?%SB+KKF7x)5ik)UsfM1ErL;nx_E5^y$er#XJQ)R4^UcLKmgEFXVk$NP8 ziT6Jxm?TR7N-$Y@@UBhbeC*!F`Hi?(z5C$WF?}!*n~Z$gaLJ{i5G`5Bqxb?RF7(uG z1yo33n?jAf4Yaz(c{ZdEsS3?UEY6;-q}e98cHN*RN@8AVwz@wxhc2ME-^|1Wqvk{s zATCBB;zAhzI~9$Gf0nszh?mq#=eC#{`IIy&YG^*;VpN-1$ zyTlWyQFUQ3{G5d^fLWLnJ7yWo!bM;fu7YOas8dcN#@wSIpE&5^n|b?S9+#j-6@q9~ znAOyd@LBkMCZ2L`ciA;A(#*zK(MiRk*IFUpJ#rJ~r%3WzjW=E9qoj3Y?-CN+w>mrv zfBQisK;lrh*Qk~?`1J?$8ggV2v#|2U$a8F|1uzRcL9_4&Xcq1`Gz(*cSy)?D^>W!d zz!k*sMwR6KCEcG=8#F50_O?}~A*fNw8t6T-SGU0{QRkI!+umMi>TRV_Fq7^x(+wW?tD=0>o6q9L@$Sf~HYq;2+Dxx? z54jupRx`}DG^A`mOJ9bwsWEGpB}3*ViKp(8tY2SqtM_byT-m54EfoiCdNX|zx`)mc z50aQ&-p3?9m+>)6*8(R9{1o5zXA?zf$&a}IAkCD}Ekw89Ft>a6kwYWx)5icORfk$8 zY!Q#VTWaCX_wR)rqZ_*@#hHE9xG!iI#L5b0Kt8RMMZvihyK3EihK`~(v9}#&w~VX! zG)lJJ(3UfxnyX1Ym?hx4-wV2idYM;(IoLY!wT7Z%9xdxw%`nPnjN{L9_)g!r5Zi3S zW@2{oi&lH9a1M;aF82l$uKY@p%fDjvd+fMuIv_~@N(J)%fn9<= zMD!=bXw^D6o5#Xt8i|31PZS00D-hTZwHqmtyS6L#Cz$X}D0iRDq{C-UT}e~iCzlFL zhGqTB-lsWsi(I@Ud%nPAK1`gWGy) zV6ZBeXE%66pn83IL3$|tjb3TVZs}UhOA4~cu4k>-S=+!skLxuWr-?P3UA+rgk~o zTQ;L`f6^xdF`ont`v+Zg9)|VYomKbVM42}zA@QEH}DiWOX1YLYxgyAOlH)tBvRuIo$)`n#zJ1+ zqmgrmNm1@4Z-s}7gML1{D9ofd+$0kBtN0a#S68&srb5hPCaYAE0@tNyV>l8F+?|k`bT7&1=jt_Or%(Q1 z7yc^cgB5iW0pO>O=ul=)MPD=9^%Sw?52RqbhF45g<&De9tw`b;Idy6l`o;`Kvc zanV+jiaO_0Uf*_Kx-`~J>SLs#SXg47vJA5ge zilHn^c|v?_Ddi1AtF|LrBCq8`Hp=WP-$KP zLlKr;Lel(M{Zs1Cg-NN4WB^i8z&eoahJM$ z<&jVfyCA@$$~+>{SKHULK^W&A!~hNUvJ2ikRc_v zUe}zT6Y^ql*?7ix9F)GPc9^{#UdL0PsMx1N`aAY&$bK;O<7+3Tr6}uVN(J4iWX;}` zQc*uKT?iT@e0baJL_s9w=frE6>$<9^z#1eL{k87wX%sBm7v^|N3gge1bg&p-SwwSG zu%`Y_*4{dO_mS?AGU^Ys67(S=N_(|$k6D+6_KF(VMzjW@(BOO2;x`70-*lSBFrxTL zAc`L|D1K0f%JzXom2`vrO=#eDvm!Rq+XSHQ}z5l^()76hTY#(Aq?Zun4$>g3?*CRT- z{bnu-7My?0EJFROt+C{mqU}PJ!PIV_9L94%0j|xCJ5`ezazn*$ew#>%3q~OC9EqGM zYEGKmz}RjoR9#l?Z(wI`mZ))pc<5b+$k24XpUNv@Ov(uF{^I<{#J{zvdbfDRqXEA^ zP)Y~D@7GW@14rw>%(R7--I zfhW6Rb#vuIygNoUaa@uX8$pyPi92B@Bh;y|JX@1*`xY>HqA%q4v57D)FAL+m(;E=U z8rNsuNOYr!?|RGGXp`E|Wr~_AVj0Io2>R4T{$<4<`YxghEW-KB^_QlKw#ArA95PQd z<@3!Vos=x4uk6jq3iHnyxndf8`IebvwHf_W=5DR8@>iNRxdmy>g*yi6BfW{og#cgc z9KO{>u%be1;34XHE9yc+q_Lp%#H^=Z*Qf~A>`m-yd%TG?21xk zz?pD1S?FPLe(vv>qOww0U+YNK?+~H1U;UsD5qUMHC@Dc`IHsCWpI~7ji!6qoXvlH* z1cdxlpO7}h2rmpcqP}AMSOKjUk#-8K@5bW<6P{e|028ld%KOkrHHSdTx^)Tvk^2J`^piOL{zZG~pr?MWaO>|*A zB7+^nqirK-j3^^~LTn3Q)y+_9blY3m+%a@@BbYzw#w?)< z*66c1oOa4hRaxWsou+j#umQZq^ z3`_57dsXkT>ju})8W<1D2Agyb$NTwSajEpYWn_LGNM8v0Gu^HJaStN&4Z=#}zbi5yTjQ1o~ z@U5bdH>=JJ)4RpiL1tv!%XJZ(XAr~$q^M|-X2rNc`yQdFxN81YR!GK^oPc}Av+sgP zB+Re$&5vsZ0?d>8wwE0S?c#$?bx!(F#b$cpMQ^sZVoO={c9UX0QpD(A^S})~c9DDZ zvNtIiXI!?5Uh;j%@lu+*^=7kCeK5-P*U0nqY7IMB632^xcai{Md_$CL2X9$foN`iG z>T|H9uT*EcOy`XL@|ND$-vD3YQ1pN@2$JEy&ANPt7$oSAp&#@i^xIcd3?Bx3CDZ~K z&uK?JdAw=>0lc^B^W(Y?l0#45ZZ9dW`-BnVb2d!DmCoDFqZhsl9 z2nO9Loglb1ez~C>Uo_A~=?YOLhS%<^fb00KI`fWTMXwl>t}v6SRwitDssgd1$3TIA zgen>U5=c7u;n8H6kGMpL2Az8_ncx+VqvzDjeE=lV(|WE+D~6E)yodfe1LH|ny;d)C zUf`nRDe?A=0o@4NjTC_Qen^+h9J8m+>KT+8-ZpsKZfq(mSdBhAA;>WEpfbs*ji`ak zM@!uM={z0M+nY*4shnXp~r;fqCa(zz}NDEU@aeHSL~GJA5`_Y0K;+6ooA7`C~ew{%y^$;%;iE_ zXj}e(=VuULoQWc@o4Y-%3{Wle#^b z&%HP8Bw4&WlFHVbAaVY*Ai zqw{O+(v2F+`~uB53Q@5ODebGB)!{U(sx{QDsDUnWHTr>Zz=j;^NMEz;y_%k21hPM9 zi+T8V=Eb^I?P}`Hw)%vr9++J*fg+flV$Tih?{Gq>yzJz=s@9OR*B=?!%UX4{)*HS) zf4%W5Uo#=^ZL{O^gnF%Gm+@!HVs%G!rNww2mOp1f!Rl17I?k?O*g~#@CG(0g8dk)* z(8By{tk&8eojua*#Pg2$PecKVlXk8n?r02V?{ZDb>44PN%9GTR!qBI2pmt^@b^SjuKCtYOgEV z0Pt`U0uRCfJdA*uc_ea)xcVQ!!;8?%+DD7hp|-RS9{w>(+Na@BswzKHlqO+gg7|?{ z!;xNdg`>PX5+|k9kUQpWh1NQ&;8DWg0a3Elb>5E>D0sipM(q-Nw9!p1;s|(@)&(g) z=ejd{mY$lS>L_szK-KOoTd_ z4{J!{&_e3Th_W;IE>T=U-_)ZvaV_sF7M014ymh30UcureSvPAr&;CKXHFaFD@qT(n zmoer7Wj>Eo`#HtVCF`CzUnLh21zjg)o$L0{)I?uW_5hlirjUpv-IT0zLXZehEe$c3V7d2Bv(ti zHeYIWg8GwUuup$Qxh%`~O%ur#N!x{CQ9NW`acIQFar}6-W;Bu<)V(KhL3 z(um7h$5UA)HI@xHG-r&OR=ZzPi zLZ4ueH)|oX+%c)>;-kP)m(To_0Mc45gAl@+BB>v2=hH#NVAQi*BZvJiB&Ls*8n;O@cCD~ zcZfQI{uuf}A40z<^?lm>qWD@ExmlB+vyOc8;L90OsN6HjrUWdmCaDG^tw!=W1SO{+5q!i2$yyWoi9{VX-&5zOJSiz~iOKIHGRqyxEW!_l zGagkLF1wpnI@o6Sg~&TP7-Le3Y=`-dcYConXDp12oU;42=?tHDhee?LI{thY%CB1> zzZM}}AuQtA@)fI@un)o&WMr*D5Pz=BVaGw2O!`{aGQmG6G1r;MR>80hRR_!C)g{U+ zf5@*1mH>hy=_dI8Kp{aN{u(kO>7Q2wYmOg}O-XX|lp1|>q&D6Y(yIE#GZR1wW&!CY zLZ2(t*5zv&_V>eO&(UR98DvI2c4eAT-&e_5O`!NfuO)l8(?nfNtlR{TjX`1<(6Ts# zx;Q5JrInZzfhG3ujYPukGgn@+4{7MTYJdB64V|t^e>|Bo-JKSGOLU0uBReVF_Y|K> z4dVMSS7iYVjFD$wF1lH^pu8;}#jOLn*3>iUMu}y9!Dg-(baefKaTAI6*nD%j=W1yv zaQndPMR>Ae5m%wEB_`pui1Aq%x3r#ItV2J5xwFazge%5_uDN01wJrnUj~#A0ul%Zw z^bGV9WSPhZFp$&I>}~1t$`jMAAQMcoSLMexB8A}VjubTzE?OvD<{(^oxqLCRxuwR5 zML{Rt)5`@9CT#pJb8!>I3o-=%>i@c!;yXkl?UzI7!+!`Dj~_z!ynPmjdr$LsV{-L6 zSj+DTpM&LZ=hoS>K?MzwWYle? zCBDE@vTo1~bg!Y-)H@XZgZ!eYjf8!A%4We(jwSbIGJIq2T{}g$no|1lDnz4)RyH+Y zqNl$K#2G+$w#bU2##Sbze6DK7_w^PfKCeB&7ekNx@8mGeN_WeT(~WDF5}V9a%nyC} z5xz)Jc`w7^0n$`Q(Ns>c!1ad)O75ZrA5%zpm(w$%1SHoU;1E2t(pP%A5Jnq&T#?qu z);l!7y>rlVz*KPVL&wTncFW78`LR=!SmNC&W(GS+v=LvPH?^K{3X6-9k!97@RTTcD ztGbA(jR1t^x+)4>zq3i_2%k?LExiu0N&E5om-OPrJq@pjH1ChMTDYY007Wg|S3+nz zf9!n6NS#v;ZdkmFyGmYd{=M^J6K{`Gnv8?3$5g6Bn}}Ar>;x-(>miohoayat3g~oM ze?(0zr*2X2f_UNSiyh$I%J{j@HM2Yk*+I6>ziy-U(HxYDu;WaI_(L2yJXB+b*2>9c}2tr>t?W zmSs>4;ZqiwGlVwGdG3NKOZ+rI8|?sXC@EM`cPbb*vgu%yqTy$Xv;=u|MqT zk~+gq6xO>{JMkNHdwQPY;K)*M;sv^-OOP%p80eCufG)`n=#riRU6Pdy19@kx$%Iky z)0c2vl1ujVM-I3yNyw^gx%aLUq9NBl{P8sF)$N=~tAI zl-E>$B$YbIm91_guiAa( zcXYmDso}#B;Yz7kY*g#1&u{sd-)Gb~BT~wAP&T@3E?r_+WFQTs6c@I1ZX`%4hff92 zhDy#q1LG8c8Ok^&i@H~c?%-Bej|1YurlH5EgbGE`D~h9{A9O5db}D7s%g;{bqsssd z1sP5)?_+$!%lL|=3m8usP9(mO%O%>pD6i|@=A9{#@|qCpSkFyF9Xq-{DmjTej51++ zu4^&IB=D8)h8?Gy(9R&%pe&nj{q`d~y3Jb6XUZ_7DPE@;TnS9Q2uV5t#5dy-Vjc!lklN;L9`BbRPP9QS_6^7 zxo0AHLL)WV?~SJw|xY1)c*W~P=I1Z!V6NwD@6d%0{xP@F{8&S4q*!i@NeWTS?@ zk!()JMqT!Mg{FsQJ56=O4dJT6fV_M%` z*J_C&yk~%8h9sGvW5C(eZq*z02`FB^_hfiBJ;4lQubW2GyS8o~RK4QGG|9tdewH7J zVkxli8V%D-cV&`qCxHYlQi4SN&^CNU|FYnvUDue`E*e*gmt~4%k~7CKQM$IrUl}E+ zKZONFp%CITP((y(mX#&AoHk=DEYh8}$!f289%muI_+%UT*W5xTx?*^=XdR-N{+e6+ z(b|K9IN(-Ms+1^?I&X*V@ET}176QXD z-yGSs8%nXwl3=BX_XVsJ@u8I>^Bt7pQ?5j|20*5ieD+T(#Uhl(i${yrA-d^rqcwOK zyt~4g3>~gRVDP-fJNN~N9GRC6pfVh9t&|pO4R36;y&pSwlc9J_9#2q&Z$2f&rhoq2 ztZV~%V()t=(gd|=d)>ee`5u9WnGGp{A*qx?_L3%46Wg&G61D6_j1SslSq~~NQCPWM zMc3}%Fh{*0Z^aWuCix1=t$^r_2hwfvf%Rs!O?7x6w;1{`cR_9m6NsrZbR~kN;#qDD z2i$W}FF_@gZ?9CDai1*&6mDeAN*kbXFC9?0_toIJg$*d&;FyO)lP{b&$2XOqfl63* z%~Nm)z2&Kxa(l)VFyArzi=(pmT`yUq!+y)Dldci*I^_|2o!5gDACnZxU?{iDq8%45 z`E$$>U{PSTGs+4QljRwkur73&2^F&I&LU_h6DYTSr=4Ce_M>$`W&GSM z@L@5RJ;KRH}X1@gzAGlU?%9WMQI2uJYk z!G@pIuaF<`?f!Rc2ElY3gCYv}_VZc^cUf^}XH5+njhun&#|PgP7ngI2O$7j1kq zM_*t)*Z_wI8!lXqC}qY#Y1;@KhJt0*hlvIi!V6HaR)O@-+B$pktXo(b&O)DElL{WXD`*hNAT^>HtYf4 z4%!x+Z&&%9Z-)l0(=?O~rYor?n0nBlDdh~zEQl_yr%2#j%g;(tGE zZ(QDAj-322VY~DDE{dbo!9%>$er6qD48+}Hz&++r_%SdcBv~@EL) zu=$4|b4f@TJbB*cf#3FW-cojpZl*#6gZk@D?}U-Mxl9gJG{86&lrAhxz28N0$)Zy%DCCS$UhEo&a;*6j1uE>ZI;SY`T z&{*SQ0wEyvh6?2hvuY}tuL3r@>ezD$os7bnIK@_1E*{#Mv5tQFa3tdK8c4Mixz$DT zR)s~xL-cx56hTI@%l*0r4391)vdyk1Q5H=dmuZ*?yQ`8UI!R1er0i~9FL{CJTD`0l z7}ti~+$Olcb#SAFIMW|HsbO5d#wmfvR~Qtfm!Qc&;T-8y#(mc4+OW$54A0Ai3nfu zy6@^P6P+@23P@nw3UTg!Qv<&O`F|+6{Qk@2(imaQJ6gE@Q^HAOx@GUm^skaYtgqzI z*`m}b)xL3o#Kp7>-yhyUb`j_b*80I#s8nFB{}W~yU2Kb*4#Y%|}|_K#9$6eTCQNM8d*x7iVWd`veJvHaxW*8~GyHAjX6#jVNN20(vIKOtn;4@P z)E*D}Im`}z)EFWc(JRfX%fPtag+;cd(%ni9eL(T~QN;n-t8T*9O zfi+AwWI6J^Rq%`sfP@j))W8^leLfeR5w&-yp2;K6Wn>y3FIu$ArJV zN*yU?fCL&|M(OZ#wnbcgvN!1c34YdVMT zWR)edfz1c3(lq-%_2v6n50LO(*qh>fD}gaW>Sw;-rYg-Q7jJ50dU2x2EfN}8S*2X- z3qyG}29K6P!sp9vPNekW|-u5*riecW$XWsi@Kt_IeS)rd9Z8L)TgbR3 zN&QJu*2me_EJ*zeP}(*@YsejF4SDil4Qa!Z{?W}9BvpSm%-P{A^NAibOVVrJO6t$- zY)s6sTL#)&MRF)PICAeWa^$;WbONQVkj`03?F*y7?~G%=9Y1ljX#F$gga8<}Ln8cQ zX3~L_C&YMUKPJQ~h0>N9;ctp4v>wJ6$Id_R#`PMeOvpUjGcF+Gs-pJPr@sEg+16mN zhwSIe$*6fy4X#2Ed&tvm60^CM&GgGE2g)WFAeRxu7(4gs&UHdK=Z*n5_Z|KUFBM4H zRFNXV6r-05SDukYdG@V_XE0-QMlWEk>i@26(!u*p+4KQYHeG-wEho`PFlj|2Cap7& zTxJ_AjWIs6;g&8()0jVb5l=LVP&R>U)t}0y^Zk3uCUw*`edylcQmJ5$U$)ekfx zW-DQPlU6k4^m;O~M;9}(AhEi9q#XyZVq=qLUrl6UZmDThQ4sxme7PiOrS+Q%ZNkZ@ z9qL%F|F$$1I7B%?e+>N&07fI^8|-soxU_oEW>6n&_$5kAt0qBqu@LHT5v`?FU!fRR zp{--zfWyIKKUyy1S`AYtWRs?(Cby+0zo>`8Wo_In6I`~Co@ql7N0+&O6B^2)BMuIgKWRhKAF7j2sm z-p#jhR`uT)C5~ei21UpaUSJ?misW@DyX}@#c5CQjv7@W{oWWFkIfMs)V==@hLQ0S1 z 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 hp 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�o9NiErf;=+$2@}uK>k=y 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%0DPl>{B(M{A^ePNTN>S^RcK-lkr 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 T0i`+Z8`*zdk0oS3k`(+O!{mqq literal 0 HcmV?d00001 From 1caf449e194844d4abd78d99d712431e7d700aa8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 10 Jan 2024 16:49:35 -0500 Subject: [PATCH 430/708] Changelog for 1.26.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 75132d46a..53babaeaf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 1.26.0 (January 11th, 2024) + * performance - Reduce delegate command calls when classpath changes. See [#3439](https://github.com/redhat-developer/vscode-java/pull/3439). + * performance - Ensure initial import of projects respect resource filter settings. See [#2972](https://github.com/redhat-developer/vscode-java/issues/2972). + * performance - Improve the performance of "Organize Imports" when "favorite static imports" are involved. See [#3383](https://github.com/redhat-developer/vscode-java/issues/3383). + * enhancement - Add String Templates (Java 21) preview support. See [JLS#2994](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2994). + * enhancement - Support syntax highlight for embedded SQL, JSON, XML & YAML languages. See [#831](https://github.com/redhat-developer/vscode-java/issues/831), [#3455](https://github.com/redhat-developer/vscode-java/pull/3455). + * enhancement - Generate correct sources when pasting Java code into the file explorer view. See [#3323](https://github.com/redhat-developer/vscode-java/issues/3323). + * enhancement - Quick assists converting string concatenations to `StringBuilder`, `StringBuffer`, `String.format(..)`, `MessageFormat`. See [JLS#3007](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3007). + * enhancement - Quick assists inverting `equals` comparison & handling of lambda expressions. See [JLS#2996](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2996). + * enhancement - Support "non-null" assertions by default using null analysis. See [#3431](https://github.com/redhat-developer/vscode-java/issues/3431). + * enhancement - Make the language server status a normal status bar item for better visibility. See [#3416](https://github.com/redhat-developer/vscode-java/issues/3416). + * bug fix - Fix multiline semantic highlighting for `implements`, `extends`, and `permits` keywords. See [JLS#2995](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2995). + * bug fix - Use wrapper distribution when `gradle-wrapper.properties` exists. See [JLS#3012](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3012). + * bug fix - Fix false positive parameter mismatch error. See [JLS#2992](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2992). + * bug fix - Document pasting should defer to other contributors when there are no changes. See [#3444](https://github.com/redhat-developer/vscode-java/issues/3444). + * bug fix - Use Lombok 1.18.31 snapshot to avoid errors for annotations with parameters. See [#3454](https://github.com/redhat-developer/vscode-java/issues/3454). + * bug fix - Remember the choice when asking project selection on import. See [#3415](https://github.com/redhat-developer/vscode-java/issues/3415). + * bug fix - Guard against `null` completion context and insertion text. See [#3422](https://github.com/redhat-developer/vscode-java/issues/3422). + * bug fix - The assignment to variable `workingCopy` has no effect. See [JLS#3002](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3002). + * bug fix - Change scope of `java.import.gradle.home` to `machine-overridable`. See [#3430](https://github.com/redhat-developer/vscode-java/pull/3430). + * bug fix - Filter excessive logging of artifact download from m2e in "debug mode". See [JLS#3011](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3011). + * dependencies - Bump follow-redirects from 1.15.2 to 1.15.4. See [#3457](https://github.com/redhat-developer/vscode-java/pull/3457). + * debt - Remove the legacy status bar item implementation. See [#3081](https://github.com/redhat-developer/vscode-java/issues/3081). + ## 1.25.1 (December 7th, 2023) * performance - Avoid unnecessary (Maven) project updates. See [#3411](https://github.com/redhat-developer/vscode-java/issues/3411). * bug fix - Out of sync editor content may report false compilation errors. See [JLS#2955](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2955). From 174e8a8f0c26fbf2b6b08e3f7dc01cb37be86de3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 11 Jan 2024 10:01:51 -0500 Subject: [PATCH 431/708] Upversion to 1.27.0 Signed-off-by: Roland Grunberg --- README.md | 4 +--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 0e54caa4d..d0feefcb4 100644 --- a/README.md +++ b/README.md @@ -209,6 +209,7 @@ The following settings are supported: * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. * `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. * `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. +* `java.compile.nullAnalysis.nonnullbydefault`: Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. @@ -239,9 +240,6 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. -New in 1.26.0 -* `java.compile.nullAnalysis.nonnullbydefault`: Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index b9e3fcd74..9d9663158 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.26.0", + "version": "1.27.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.26.0", + "version": "1.27.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 12bcbc384..a6922f89f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.26.0", + "version": "1.27.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From d5536acdd087ec7d3a27de7a8d8acd4f5226ae21 Mon Sep 17 00:00:00 2001 From: Mavaddat Javid <5055400+mavaddat@users.noreply.github.com> Date: Fri, 12 Jan 2024 15:08:55 -0800 Subject: [PATCH 432/708] Automatically suggest updates based on JDT-LS Java language support. - Checks for JDK updates, that JDT-LS adopted the language feature, and creates a PR - Create bump-jdk.yml workflow - Create check_and_update_jdk.py script --- .github/scripts/check_and_update_jdk.py | 93 +++++++++++++++++++++++++ .github/workflows/bump-jdk.yml | 58 +++++++++++++++ 2 files changed, 151 insertions(+) create mode 100644 .github/scripts/check_and_update_jdk.py create mode 100644 .github/workflows/bump-jdk.yml diff --git a/.github/scripts/check_and_update_jdk.py b/.github/scripts/check_and_update_jdk.py new file mode 100644 index 000000000..382fb942c --- /dev/null +++ b/.github/scripts/check_and_update_jdk.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + +import re +import requests +import json +import ast + +readme_ver_pattern = r'(?:(?<=Supports code from Java 1\.5 to Java )(\d+)|(?<=JavaSE-)~|(?<=path/to/jdk-)~)' # After resolving current_jdk, we will replace ~ + +# Query the Oracle website for the latest JDK version +response = requests.get('http://javadl-esd-secure.oracle.com/update/baseline.version') +latest_jdk = re.search(r'(?P\d+)\.', response.text) +if latest_jdk is None: + print('Failed to retrieve latest JDK version') + exit(1) +latest_jdk = latest_jdk.group('major') +print(f'Latest JDK version: {latest_jdk}') + +# Query the vscode-java repo for the current supported JDK version +with open('README.md', 'r') as f: # Open the README.md file in read mode + readme = f.read() # Read the file content as a string +current_jdk = re.search(readme_ver_pattern, readme) # Search for the JDK version in the string +if current_jdk is None: + print('Failed to retrieve current JDK version') + exit(1) +current_jdk = current_jdk.group(1) +print(f'Current supported JDK version: {current_jdk}') + +# If the latest JDK version is not the same as the current supported JDK version, check the test status and update the files +if latest_jdk != current_jdk: + print(f'New JDK version detected: {latest_jdk}') + # Create a formatted string template from the URI structure + uri_base = 'https://ci.eclipse.org/ls/job/jdt-ls-master/lastCompletedBuild/testReport/org.eclipse.jdt.ls.core.internal.{package}/{java_class}/{method}/api/python' + # Define the test URLs to check using the template and list comprehension + tests = [ + uri_base.format(package='correction', java_class='ModifierCorrectionsQuickFixTest', method=m) for m in ['testAddSealedMissingClassModifierProposal', 'testAddSealedAsDirectSuperClass', 'testAddPermitsToDirectSuperClass'] + ] + [ + uri_base.format(package='correction', java_class='UnresolvedTypesQuickFixTest', method='testTypeInSealedTypeDeclaration') + ] + [ + uri_base.format(package='managers', java_class=c, method=m) for c, m in [('EclipseProjectImporterTest', 'testPreviewFeaturesDisabledByDefault'), ('InvisibleProjectImporterTest', 'testPreviewFeaturesEnabledByDefault'), ('MavenProjectImporterTest', f'testJava{latest_jdk}Project')] + ] + + # Check the test status for each test URL + all_tests_passed = True + for i in range(len(tests)): + response = requests.get(tests[i]) + data = ast.literal_eval(response.text) # Use ast.literal_eval, because response.json() fails + try: + if data['status'] != 'PASSED': + print(f'Test #{i + 1} failed ({tests[i]})') + all_tests_passed = False + break + except KeyError: + print(f'Test #{i + 1} not found ({tests[i]})') + all_tests_passed = False + break + + # If all tests passed, update the README.md and the package.json files + if all_tests_passed: + print('All tests passed') + + # Replace the ~ with current_jdk + readme_ver_pattern = re.sub('~', current_jdk, readme_ver_pattern) + + # Write this to a file for the create-pull-request workflow + with open('latest_jdk.txt', 'w') as f: + f.write(latest_jdk) + + # Replace the current supported JDK version with the latest JDK version + readme = re.sub(readme_ver_pattern, latest_jdk, readme) + + # Write the updated README.md file + with open('README.md', 'w') as f: + f.write(readme) + + # Read the package.json file + with open('package.json', 'r') as f: + package = json.load(f) + + # Add the latest JDK version to the java.configuration.runtimes array + jdks_config = next(filter(lambda e: e['id'] == "java-jdks", package['contributes']['configuration'])) + jdks_config['properties']['java.configuration.runtimes']['items']['properties']['name']['enum'].append(f'JavaSE-{latest_jdk}') + + # Write the updated package.json file + with open('package.json', 'w') as f: + json.dump(package, f, indent=2) + else: + print('Some tests failed, aborting update') + exit(1) +else: + print('No new JDK version detected, nothing to do') + exit(0) +exit(0) diff --git a/.github/workflows/bump-jdk.yml b/.github/workflows/bump-jdk.yml new file mode 100644 index 000000000..12c77badf --- /dev/null +++ b/.github/workflows/bump-jdk.yml @@ -0,0 +1,58 @@ +name: Update JDK Version +on: + schedule: + - cron: '0 10 * * *' + workflow_dispatch: +jobs: + update-jdk-version: + runs-on: ubuntu-latest + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.x' + + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install requests + + - name: Check and update JDK version + run: | + if [ -f latest_jdk.txt ]; then + rm latest_jdk.txt # Remove previous records + fi + python .github/scripts/check_and_update_jdk.py + + - name: Read latest JDK version from file + run: | + if [ -f latest_jdk.txt ]; then + version=$(cat latest_jdk.txt) + echo "Latest JDK version: $version" + echo "latest_jdk=$version" >> $GITHUB_ENV # set the latest_jdk environment variable + else + echo "No new JDK version detected, nothing to do" + exit 0 + fi + + - name: Check for existing PR + id: check_pr + run: | + pr_number=$(gh pr list --search "Found JavaSE version ${{ env.latest_jdk }}" --json number --jq '.[0].number') + echo "pr_number=$pr_number" >> $GITHUB_ENV + + - name: Branch and push changes + if: ${{ success() && env.latest_jdk != '' && steps.check_pr.outputs.pr_number == '' }} + run: | + git config --global user.email "redhattools-bot@users.noreply.github.com" + git config --global user.name "redhattools-bot" + git checkout -b "update-jdk-${{ env.latest_jdk }}" + git commit -am "Bump JDK to ${{ env.latest_jdk }}" + git push origin "update-jdk-${{ env.latest_jdk }}" + gh pr create --title "Found JavaSE version ${{ env.latest_jdk }}" --body "See [Raw logs](https://github.com/${{ github.repository }}/commit/${{ github.sha }}/checks/${{ github.check_run_id }}/logs)" + From 56f2cfb3fca762170595dbef08534be2f6063f9e Mon Sep 17 00:00:00 2001 From: fwcd Date: Mon, 15 Jan 2024 00:33:08 +0000 Subject: [PATCH 433/708] Use source.gradle-kotlin-dsl for Kotlin grammar --- language-support/kotlin/kotlin.tmLanguage.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/language-support/kotlin/kotlin.tmLanguage.json b/language-support/kotlin/kotlin.tmLanguage.json index 53b07a1b1..c2a4cd18d 100644 --- a/language-support/kotlin/kotlin.tmLanguage.json +++ b/language-support/kotlin/kotlin.tmLanguage.json @@ -1,10 +1,11 @@ { "information_for_contributors": [ - "This file has been copied from https://github.com/eclipse/buildship/blob/b848d9a08283b68860671a73ceec3c99bdab27c2/org.eclipse.buildship.kotlindsl.provider/kotlin.tmLanguage.json" + "This file has been copied from https://github.com/eclipse/buildship/blob/b848d9a08283b68860671a73ceec3c99bdab27c2/org.eclipse.buildship.kotlindsl.provider/kotlin.tmLanguage.json", + "NOTE: This uses the scope 'source.gradle-kotlin-dsl' rather than 'source.kotlin' to avoid conflicts with other Kotlin grammars." ], "$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json", - "name": "Kotlin", - "scopeName": "source.kotlin", + "name": "Gradle Kotlin DSL", + "scopeName": "source.gradle-kotlin-dsl", "patterns": [ { "include": "#import" @@ -698,4 +699,4 @@ "name": "variable.language.this.kotlin" } } -} \ No newline at end of file +} diff --git a/package.json b/package.json index a6922f89f..6081ae70e 100644 --- a/package.json +++ b/package.json @@ -210,7 +210,7 @@ }, { "language": "gradle-kotlin-dsl", - "scopeName": "source.kotlin", + "scopeName": "source.gradle-kotlin-dsl", "path": "./language-support/kotlin/kotlin.tmLanguage.json" }, { From b59c43a2f7e5c2963084d8f7c6f55ade50e8cd02 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 12 Jan 2024 12:33:05 -0500 Subject: [PATCH 434/708] Adopt the Lombok@1.18.31 edge release. Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 1 - gulpfile.js | 12 ++++++++---- lombok/lombok-1.18.31-3454.jar | Bin 2036547 -> 0 bytes 3 files changed, 8 insertions(+), 5 deletions(-) delete mode 100644 lombok/lombok-1.18.31-3454.jar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fe62d525d..f6b6276ee 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -117,7 +117,6 @@ jobs: - name: Clean tests run: npx gulp clean_test_folder - name: Prepare Lombok Support - if: false run: | npx gulp download_lombok - name: Prepare Pre-Release diff --git a/gulpfile.js b/gulpfile.js index 2c6166654..f2bc8072c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,14 +127,18 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.30'; + const lombokVersion = '1.18.31'; // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + const lombokUrl = `https://projectlombok.org/lombok-edge.jar`; download(lombokUrl) - .pipe(gulp.dest('./lombok/')) + .pipe(gulp.dest("./lombok/")) .on("error", reject) - .on('end', resolve); + .on("end", () => { + fse.renameSync("./lombok/lombok-edge.jar", `./lombok/lombok-${lombokVersion}.jar`); + resolve(); + }); }); + // TODO: Switch to stable version once lombok 1.18.31 is released. done(); }); diff --git a/lombok/lombok-1.18.31-3454.jar b/lombok/lombok-1.18.31-3454.jar deleted file mode 100644 index 5e4bea5f7c2c479c3d081e5b8d58b950c0f5b9ff..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2036547 zcmb@t1#n!umNjh07&BvR$IQ$eGq#y2#+aEojxlCtW@ct)W@g5i+4h_ELBK%(B1!_Z5;CInZ^IxUa(_<> z4TAojw4EkvsPa8IHYf-P+WY4}k^%%|Bt%6NmFNJXo)L_&-3&2^0PI*ojW<1#N!@*ED;1}U18lQ#|j3o9Wr!e<7Oz9eD<{rJ*h zs;TG5n!@?nrLgY@++T80YpAHcBK&Nk*7D%xBqya#)SEG7(yv#Tk6N}F_;z+5mevsN zsjK_;a943}ZrYkSx8a}n(+-VKnEph?b}c}Ki}YTG=kht2$?eEPuQa9&Czv&mO{F6d zX8LS4J*?Y!s6ubK9UW8VDgud+BAJ9jRYsB+Z2Hm7P5_s)pe*rre0`V;jjF?0f>&o% z>=xA@PJIITF4-(sl9pPhf}(VXp}9SimVKMcO=+-HB2?<;Xy)~SE>}RQQ9>4yp4l8F z<2>rob60arax}-3>S$h{tSerqw6Xr)ZRf!}Hk;7a%CnRHD3~@fC)=b@=87xip4Qth z8%1@M1-z%>C-uTCODSwl^l}h2%*LB-Vb_vnNfctSrn*`Ke%%5MccGkR1GurST{fS> zhEx^k=eT9}qG;QoU;rH-+N%IsJ*&Qe{7+mQImhiDs7=CCLRj_QR`1PdEt4ixJpcGl z%iE9FF-JFsPsdXMT2OmYM9s0dt;4P(GF$L1T&QBd?8CRalW);cnTk2sbXgK#zwa|T zg5iThM?%it?D1^|BgF}`<#fMpsRgP;+#qkLHio&#`bHgrC$i1-%{QML%LX6y$YTCINpf{_V0|$EnT65)?%2WY>E^LUjLY02ZExU*m=vnc z+YhanWyEF$c3B;?!={YohH;lrTG|UNxkPPuLHKsEQS+_9UkwBf-x)t^U{ZTruNehD~vECXRmMO2~Tp zTUM`axrJg9rp3jDD6zK@Y>ApFnWY0{a=Q1{c454NoGKYlJZt@gi^N$v1@Vug8*e%i zb3se2kYh731};MZdiNvoz7wFIsjblBTQa)cS;%^r8nZ^CbQu;~B!}l7JmiQ5KTpHC z9N0jfWvoANyV@|OWMy2&V1|r%RN*}ek?6QD)!=wyc#$9y!YrY}ifQDT0&tdFUT78) zZBNlHdr4I)uo*CPT3uYPjt!p%N#{^Q$9~I>M?3i4`wI(x(&#a6KZLbIvqm(tl4vKj zHHBv*W-Gs7a{Rssznq_>Vi0fb8Hl|1OfbrK6;P?$$5d`AHDrnI+(JaMMOYjHrsu|S zEM9N{!W+Hktp90lKTDQeOq8Va)pCf6rEn8ug~ zv85~k^XtHIjVk~ryLWVpscOCzq@c8;_C6pcCHN{prFs6Eyt!hgcn&r&zHZ(yKDKQ7 zNr!tDN3w)m$EQP%F{8`+D}kCmCyvV#k?z*M6=~!zHDQG>d@;XGHYZ z>mNc^LRmgYvcnVU^5apB5q-TXsMjlFzb3L)L7=r$;oYcJvv6UYL6;&7m(9-?#q|Fk z@X2dM&3S!^`Sd9nb@`6c%w^BkXt+oGN|c7(5h7-JmAKt53nftGoW z=pZOrim);DXqCqVS4#EQaIH<9y$@{Vx^mrynTo0Wq}KgM-?dhh)|*c{u47l z=JV_CbOL^cOOQox+oY~GN0Fe2CaT>%CV8QvJvYj z*4>SK;R!SRq=@y=k@q&PHyMV39u9$U{0 zz(;4u3*x(oRvS0Wq7n(gm`MT&8U#`v`@r^7X+nw#=ear|;``;cXca2Ic=2CVQd(`wre%Z(lokbl|4*TYGe38P5DY@z#@m$Uj)v=2$t|)g6}E5)=Jpug!k-9LS2SmG5dyhjI018x zmiTt#_AQbt^n!tv3VBxa5NU`y97gnR7l4E)K#%wch&5~bmrnvNTqd?$gP`B*BfmpJ#kj4r@6d1JEbNjF--RziK*1KNp^O=$EcOT){p^HUO`NjDP&q{;p=bE>4X}>t zu7yc#sZ;G8P8ssi29pfpYFJg3>DMkOZF(>*eew9OGT0J4PAgMukHw~NT5?J_!W`Vb zaQpBF7LCs;o-JRf(p_Wt4orSWh#xwq2V4bmf6hzG9IRhsv_G$abMDay+ z>*;ssr9&>~o8_11eS!3F_Mw>&`M1IEr1NXmkp8bjn~L|0Y6X^%naEHzm)>tpKI@Dp zcr}0gX-E9_3j61j@LvNAq<7u_N7P_!r)OwkME_@MXb`mb7-Q12pHlEWRp9%>_`U-F zYid&~13M#2BP$0z3pzb3D{BWm2UBY+IvYD{10#ETYdd@3R0GTm1ds@bk)a8|@WlLx z1kIS#_@w>l$Oydz&CuusEXA;_3@zO_{nenf1g%0BQC5t4Y6ckEu++gY;W*MkYVW94 zrW=juKLervY7)vj|34~eZ)E3W`d*R07=^wEQ0IJ4XaD}N|Ep2|NN=X+r04SA7-VW? zOegoJZ9vn26hHv!fcRgV))gm|ssglVb+px?k>OuLJCyfkmr(BGdVHtD`~U(%{@>Qn z!rD^b+MLe7+Rlhh`j7twY;1rv0%idMm>r0)NCDXoj7a_$FTrFsv)@Fb{BY?4Oy&)9 z!A0h-be_bS3Qpa`ov&u#2ytyvmBkfjAnlEd7tl%T4DdPRUNs z%Kn?Ro#h`x8`#7^4j_PhKo|{I!Mq3Akeh9?wv);u>Sg{`GCzFLs5!{T5aaVXn|dYJ z*N29z-z2$+zW{y^r{GYlLrNz*xWE%RH!`R)HXc9xyM4XeC5X1~b#Z=w#QsP7>>RBe zOf8Lsjckmp42`S|OpWa66#nwgRl@3ddf0RmIYL4z^?uL zaVS~1$pvUv!ZGd^j#^*8H{%l0ee)IH5ft)TlLnKNFEMlbTyE0ia4QJU&b?i3eg9gY z!`d*aJbhnS18ZgzlaQ#}2mgVe{(k626#*sUqfYyyAKcH#O0C@@?|--SXA6eA<$E1fOo~>LMgkx&UaSO7 zHwgEq8f`16K+6KAe_OM!0}?_ZPR(DqfP(oJo@azEF+V!Kt*c*=Y`$lP;!=csH&HMi|M@p`^*cKRY2= zR;xH;=9XPtb3L!_g&CH~5MMmCv=_d%NL4DJVF%$_@g`Q6VSontv7V0;nH z-!bu`AY6PhwLg&rYv~f;l6l|AGi{GHY>kN62D5sy_wcrgo^-|THBFY1f+H>8%zkis z#9<9cVwS>dhQN;UHn8c6Zh<%-guaP`U@>32z+DK>yKRL0X3HJ_-50vdp$2yMls_`K zHS1f#$2H$^u!i;EoQ|x!LwnjMK6nbeT`7ItV<|LMaZA{C;p${XiefYLDsb7Up$yZi zY+<<_siaLx#VWFf@SqQl2W30zZOD~e#%JbGZtPZEvfiY)b3^8$?)H!Kot;BvC_SdI#gdtM)5w?ooxhA)g5hkzg!lgFdhZwI z|4k>G{H;&z{~W%G?{kl%g`S|?@itQHUNMH00Arvh`h)yptlNN zyaxO0u=bkK-q87He-^%MwZza4m5@*n=ve=O(W+q$*5eKrBPbHjBRW0F^To0CzB~^p zRaSu`D!ofkFbsn!sq71eQ9E4%#HbOSk^X9#t*SuT7F}dx=3IaWlFwNaJ4fzVOR-z) z4g&Wr<%7hVn1=kSU63~x!Xj33{{om-s6{?K7JQ5>7DNx?#t+PY_i2=lET7o-$~M1O zp6x%ij;WRX`%>e5tkX#t8cACl{GrM3GqRJZ;or;$G5`T&10pW`-^^duI0RG%i3o&l zasn{m`*SU_Cp%PskwK4{(p`*6BWOB^Gi3*Ofior&yZRHl4BItkrg!}iBF95(rSMq* z)S1Pzj=J`_etXTicmAdoG_64rFq};IS+nJ2MsnG5xlNS`=Yp?}J}2sp`;5H+R=c9d z;fa9^G1V$q;V_nan`W5g3DXPg-))ClwU#%3uPJbqME9R;2QEqs=p=!E|6R-eTweiM zfcXDK%SI$=q@?HnpGtOF4EJA^j9|xuE9|`koZdx<^?z&1f2U$V0w927K;+Gi$?Py7 zfoyWi>U|7vQLcv#=`Ew>SMF0Oq>Md5Li~But9Z&N<>E#IgF-$qwO+c5YtEB?nbj;9 zf&gCUcBs_E%pOjClfKrKwVe5u<%MnrsuC7*Sw$r?A@i2{%BRd95|hpG*^0o0+wBKt zp(wl>;PA!dttwIJ+0sJ+;7b@rH;}qR3?2>Y;7{A3EAu5F75N8zORe5XpTFcHo~MeB z$+p?=vw=?d_!sX>Y7d0|Ed1&bPUu`vl=&*-=)-MJkjI~M_P@qL9V5KZYu77ZL#8Wb zmZf}i6DH3iU{$7ho&1S-Y1zbAn#iKXap&QyTl_GG6;5iqOPLM1t=0@zZ_%*pc1KUD1Gi?M)^nik zSYEGL{>82e9QM&Sa6Zom?#xIT3xnJvh?#S|e;>XdtX?XB&Q|o^RkHtcpZ`PF{usx9 ziq}6x?cd)1DQQ4zApZ2}v#HgoG!5KU5K2i$2d)ImS zJY$}_w}G$!Y!u+W+pP+N7jPkN0uBQ5@x4(LLo&loDDUN)1jZk`XhvkNGdt2hUe29jTi15s*zVRVlrw5(WfSkHHt!Yea` zXw%Q|D7j`IfPn|TY?_=2N2HKq1Z9|_R=wIIBlUbT*S9vdcjjrtE#C&W z1=kg!{0u4 zOi*%J?E3cRcU7N%w;}-Tw2QG_%W(J3BBN1@ zf4dov$}0b6evA9(i2AQFF6{f@Q52G<``fbcAHnT^O^EvM356{5?Cn_@{zC?w|31V2 zSP;>F%=hwhSh;(wK2&-i_#;U6r}Ai%f|?{^3lGdu_g{3j3)g?CT;mv;Hn+`rfU z&szMAO z8|z@6VgaC>l+p8xuEiUhuPW1QD5qUHTx_mg(_I>7%lv-teLglEcFL%UF$uk`9k!YNxXY6WX=o@c3 zuh_Hq9F%mBwQK12LS2t60%W{GI=f9NaI4psEeM%8eDV#dI$NW&v|1u1!W^us6)lVdYa00TOLixV6qD|abER(t_!ZNthG~|(#$_iv@hRTV9Q!F|8jDe z&h806AckhCn@|!PAO#11!8o7&6vPxh3A3p)R_+8rDCufS*v{7 zOC?O$9`L+5r-&!a+LCN`!9W9BYYfKj#sy#37(-x=U|}doF5yxcko37OK5TSZ979;7 zyEbod5Qy-ZYfPpSH|8NvKu%=t(mKWnA83xoN{cS65ri|Hx`kZ#=LdgUn?%l&(w+yyR>fh9Q>Jq27Ha%bDhPvBOprfYZ$vTHqEL^+f7u<;t8XX$RLm;B4qaGe%u`25Bc z@-^W-q}keRhR62t@ERCp$?eJ0mSWb<9IA`M451d5k^~m?yw>O{Hyv#qR=e!DVTa>i z4TK*oo3C##)K?S6&gnvr9?*n_Ztt1A`3*MdJXA8Htn?OgxyE(BkXKd*M>vlU?wUC= zZg!IJcb+qG5f%ivFLi&bp0p)6bpKjKMhRG$JphL0mGA@>Dep!Tfz0rVn1O zNY^L5#aiR*6VX>_Z(1t-t+5*Q=}WH%F%m2qZ}deflzjs~)T^1BGAgWeU>;N<-*EVI z?U}~cb%G6z4V@bg9bHuM=Qgd4q+d)VrEd&t$_;87U(_=Djo>fGNaelFHcemJLSx1> zvB?3R%t0o#dk-#hEV&Eb!csgWxP>kW$?6X8V?#R{UFA9rEF&}zG{E*2&OT=}$mJZL_Pz>oJl zYGGc{2oDkswce2`&~J7%BV7L=qH9Hj$J9r;mR0*P2P3^rB zcIon*Ec-=yD|(G5QhF>a+^z`GxK^Moq_O4OjFS8~E;f}i>DkGO`aNGbOg1M?q21vV z?sHkPfr~Q{6-u3oLze&zPdM!>-agwkugIwj+68|AD6_JkqVN+#cfO`DnVwodo$r<(<#1E5nIIMrOQNoW?oumsLcF?36R$@cBU*Bu_2~?qZ?UH z88R&DVf$-a)>$QASzDrC39r+0dD0D%_PfOUY!$2dEm)r_zm;^oXil@1c%?XW#}#ZMn>vXGG|dI?BQT)_w$z36;Og$SK1VhewF3+ zUC2)&k5nJ832z|E>lUj${d8fszDeht6zphHCex{~Tb2vFjopJ6ZAhs{qe|F$j_h7`bk7(7Aly>bU89hdWT@5~q=xx%hQSExK zB$k%M2v&9&BPq6wL?ee@W5*(!m8^E?p|+Oj?T|qOTJwgV9p|2Bl4R{FTUc#jgrEp;!F8alf(}xxx%Lmzv+0eKV2zlDAllRWGAB| zWEb{8z2zF#1eV%}A^-jrIqIl`{l=Eg8B}O^FWYr;X<-=kaWGbe2FKzT?n= z&KKa#?Zai8RIT7jk3p#!=hd|Ry;>ox(!^3Z{ceHTOt@UF$U=qSW+LNyf%#Z6OUp@p0++XH0D;2sia+g-f zVhUOT<|6DJ+wKgX-J(!Z9@N{x!W$8Uwq@W#pdvBEDy3eaTl!#a;*7AARknME-BwF2 zL`09oR9p${hC!}|p?UVW&|+~b#hM`8<5sF zJx6?~LeOPAOLVS4Fkn3Qel-4shEP~w8}an%9A3nRfcEK84(>iM`IrBs=C3b@D4$@; zIx&r$ky|R&?t<)`x5{U=8)2KJs4pjM3bsGosy@iRV7f~eJi(QjR29J&@w$MDE!m3B zS-r43bFpgt_)VCAvzqs*^Y^xh+x2%lOr7qL*6ZAAoQ|wlc%B@Z{*ninmF=2gqSgT0 z`u?vYzj=1($eR0H1tY&o-vnV~*(`Jp75S|528&in%uafX=}jx{5Rr77WOsNG60MG9 zEu^F1IFH?|83-O&(eXYo@CTVs3i5ji3pbhPvE#{)q={tEp+G*?P5C+pajk}6z21S! z%PvE@(S2u|CV%!ciPcdf*N-iTclvsfA!2fSEkaDmvivNm7fg1yM5aZzAN0+yPfLT< zANHUetpZuLhY5bdV2(`5 zHmJrahJC&j2K~H1S7FnMYlxK8-N}A2&91xd?r}vY{Q|(6@z~+f@#6~bw;$;>9#CJ{ z&p@|7CK$@KS?1L8Nlrj=LuM~092=4I_RYO9E|ex0ad}hTXHO>=)W-9R?9)QF{0;U0 z4rdA91FC<9Tl9Yk+br}Ptqe^5CF%nnOaDgpFdzYY-!Fv(0TKR>QQx20ff1glsf&@l zIB=(!MA*o}$XL(8=r3^|kPiqTHxOY;mWn9ySiGuoNbFzbq#0QO@ReWO*#Sc8wcQDR zsRH~Qn0HhuC*?IXM!$;?O_}#t6lV^+lxAvRb3bsxGq1K8PuSnBUh}kcczHjAZsHpv zCS#GY>@XOA>SfWHzV=^)Y`F5zb)yNUE+!hS@|*1CYw&}z3K(yA!6VOaC(xW|Lw60y zvLW+=^@#)lLbjry&!*jnn-E>(jJ_{}zvwMNBHZx#<9b|=5J9qK`& zHI|!X9}}4-CLxN&YSSOhqb;sKk=zguZmuXg=6!DrL1xaO$XmH$+i+wen2Y zL`7Vd#XmXC6pv`=9g;s6SZ5!05%p}wtz~f*-38*9by%ap8GZShO$L6plv|R?>r&gi zm6yRA!ncfv+HaC})sVKeToTl=@`~qEI&vYIvGrsOC;Z|&rc82D-rYm4w9^g!`YeHb z$_4L8@TA7CPxF2vPdaTWfYrbt+Hxs12!58x>y3`ds9}jY7F7YA#!+u+I)HQiJC67R zQDSZ#I&Y&QrOxNsc1(^wkR)d#ZDc0bd-D8_&9?!ZsxDZ4P@aBNF$-vB^r{4sd13Pl z%77GVef4`o^^7tlOBCm;EHvsz62lfSF&hJhELMOxVf{;(g!rxre5~MXW zf=28d=yYOtj+U}hQw^Z=(u;@kvyMv?;h^*dE0Th(=%|*-5VK>pS{YP`TXT!%a3V?* z#)67dRwvPE6;R@ei*1RsXGaG=RLsRH)7iI4+dK-g>7+{J8^;`R!qP$i+?sw%XCY)` zD~Wn}rOJ@MWrFCNq#R({9lM+EK{8zm(LzxkpJa|1?%fZ;rzZ>up>L_GDuQ8HA2yp1K3bQ4)-@B&I)ZPp5=hyH#{>}3NqS0udv+XIC8>pZT7 zu^>-$-1D!P<3uQ(oWXmK_jmC{W+-I8Aot`o6^FO2Bq{b1^JmTA$OrD$$80B}%h=Gt z^Hwc?B~R8jDyx8MEjvEqNm1vHppb}p&P77A)ey_7odP|4oKJc+ z)&_;xFIB-YeZ7>%p15KXQ0G=bLAji*Ul@N%2bspT>A=$Fo{1HHUY~XCboPW3SJ0y> zvB7VtYLDsBNW8_Hnjg%zphQ*ia~8IZa`z-4f#3j;WM*XKaS<)zF5fLCS4cVe7y{p} z7&%pCeBCq~ZEtt99#}0hc`jC7KBHXa*^dS=I4tBW^L!&!v_QeU4No^SkUcMVAsGDL zB_-qcR;*8f&J{P5u$Q>`f}YU*nODVu)oXtV=tE-1yD|sOK)z_`WyX z{xiFJaJtcFun){EZ&=3rJz3XpL@M)N&3iP2+L z1m>G|#+0P+UtcMBYKQ7GEt(g}9i4N(leWqlkbB;HZQ^WXE0^#*H84t~KESjy7&!(+ zb4hi1KZyCZTv#|0hkuNh|8T0F^ldcVHn|SDmqkS@i1mj_fvpMd1vt)Um^XWj(X#?Q z=PBqrUQdZvT?2nS&C+Hyq1}ltoF8Te>NSqZkI=U`Y+AG2R{CHoL2MEhh}#i|#{90; zxP`q9>6V5o+OuRLS1ASiZl5h8*_6(HN9avrWn&A$r_3^qPdEA-{B@eh6u4@Ke?JEU zeg9>T(Enwc03H+?S{wXjdH~V^0i*_^PDRssMil9dEu40s(7zBVS}rpHBpkGaT~f2a zCz7Lgvlld_)`~zuU1tTRdY5>_^f|?ileR5#2H!-M;5o;Qi~3__9?3vkn@e4d{p0>h zlKStJNE0E%s8t_Ejedq@R|t><2Dw7 zY`G?Nvv!_=Cv-wrPFc-uD%$jnqwzYQxLZx9o0`Yh>emKij`m--MIGJSKga(Zcl=x)}rP z0}F0CS*5XIbo4lu&0~&?Nj1%BQZy>W91J0+3me1r>aMQAh-7IqdOrpnVK|E%kJRs> zBq|S_E1kCI*ncD+avT)x9!2tPw+4NR4OO*GCY)m_4Vb{{X_F=~L0cq8PJ8sF*ZTlx zY}6YiPBdndD@CXETe{md0JnZd0nBYKEudtY(V1pU$+2aIRrY9hJW24K=_v81m^a-G2yZ|=MenZe5XeNsRUm%65?h5JIF;ah z;tCrO4QaL^eJ#{l?u6b-x8s?h7RGh69?ST5d61Bu>kVq*nz_0xNjRdWwtjd8ToZR1 zKX9SSKc|Q!(TnPW=V6lCZM}3Rkd0AUaI(L**2U!)Bp?^7t%GqiSY7&SjXsa7 z`LyOvt;}Z;H!+iY^dYRW45}-9o%R&v@PQ27VhqK6>N;Cem8G83dyW`oofwZxPQvt( z+3n#zN!lz!5C2my7*$9#yA9Vwoq~<`o4Q5g-P8sW$@Cl&|yQ9B^z45k+ zv@`^gESL=R`oTt))WYmuo*HOjo)7Tc>u{Z>9GnYxUu=15klTEC?0i6w7ywTc;}H5d zU{*!5)h?}z>D6=7Kxp0JvYzh&yV{Gg>ABX;lqUN*EUvRcz-z!1z%Qucc78vL57Qg; zdAFEgTc4x1LMN!yI+O_1@7@uUl>R5neAO1Hcupu_Tfwgl6F!BT<}}V`aYGE+-J9YR ziz+>W3V*VA60-+`uNyAxjkdWkspDU6-2oS>_LCSK((f_>`w;|0^#7tj(tq5#eZNBa z*TX^}BM?A#Ai|Wj?QxW`ybv~WSIF`xEi1p~|Ad$pEK@G|Ifo>U+oKAWYqSkl(+y%d=t-(@e98_o_W7> z7d~z22Nk=ulv|T4Hx;mI3}sueX^afRu6q`;G%?1Y7nrUeJ#FbFx=``Qd@Qjfg}p6k z)r&S|Oe;5nZBo*!i>HreCJhk31Nrs~5N9*=iCxppJ{=*%U!kd9X%JntI;l>hSdy+z z!PS!Vx9)DG93>{T5!WcqK9&`tt4e$Vvw70Z=Rv~d16UdsB@xBZXSj0{i?ptqTy|Fw zW32ttUer{iG&(N{Nqg08CvDRMTIEideM5VEwYul z!)tUs77m$oq%(50Wsi&BB|7)PpkqQ;Etc~pPRK6eZ$t6+^tCUNOhr^~Y5D1*2O}E@ zqJ#j|%B8>PB^pDi;S5rO=WA2Ceo=4{@#AdwLz6jqc>C%$l6Ap;1(`w1n3@T8ThN+b z!4ugFAYg_o4~vCxm;FJ&$Da)s^Fwwj#y@@OD2ZfruipQs6tr4m3S7cdqLQ_J3~noD zC_o&#TP#^!Wam+*Wjw4}OO;cIqJ-VhQJW3T`~nNi$(ti?>r^}dZmWlnJFR_Vm%)Y5 zE8|x?1f#Km&5prGf^D?1l_HW`iJR>$I>K{w8?U~C$cnLP)|zCa7?8FZvpiH2LE4#Q zqF|uIcLnF$3Q1EG+#IbqKlXBx%==1^ke(<8+#l&Q9c^^`Ql7}nti(E+_TkvfXR3MD z67*1ZOVzqdxQm(-J3OKHtL|i7uV2_?9U}nZit*iAySeFYS@GQ#7{3xQOhhjkq*yP; zW2t-88;wJ%w0Yi?RY>%Qk?;}|MP?j6GJBqQb!oSDF|B8Zf3;1KA%PhRte`03u6^E& z+@m{7bhJzZkFM4D=(4l1Ni5Y(N^)B2wOT+7a=wMC;S0T^IG|2gGEzK-U#{@uyqH@? zZ$iHFnqSxK-qu64F`YbNB5iRZi0QXz{Dv*4H?&VB;D<;q$Ys5-HJmATq$9s86k}K@ z@pB$A?t0H@(CO`37RlSENod8iZ+@a!h<*Wm&ynLQ!q?cgnlP}rx{m>ONY@-NKVJJ8 zp1*>T!Vrd}QcSU25vR%q%?$Ha2Wqza6qc-~u-&gR+;9ANPCgS^g+O)%7eQ{iy$f2` zy3s^UCyffogj8W20whCDkF8-1j z2!7_J9}z7=gp9MDqaR1$n7PT#h$eDDtzH<~(hH_keHQ``bPNd;EaW1W&CJnCHk1o+y=_qMIf5Yu zqe32)D#;86n!06jxV`kBxgn%Vyfiu8ao$*!&S2+jg;vfs)% z-{gwpKB*ks*2BYvD*;PNH;#+Xnlgh*5G;@lq_f)0_l4}a+tvwJ%;R0{whTZ=4q%c< zekPGNN4UuLaOPRFLt?hn?!xP`m=<@>zJ10N+2Tp6p1J6Lj`SV3fOlp< zM&XXCK&!xoa&}vUCD&Zg9q1X>8XN2>0zSrJ>$Z07)Mt3-DS;itKR0Xt_9LL9mg5>i zQV@`zn*YbC@{jv9f9$^gWq1J@fdH}t(dPl{p)_~-dvq0We!d?d_PI0QJ4KKy6qqR7 zAoX`huq<$aNiRs4_p?WI0Zog!`uXK$4NLP9 z&-;aYp^~u+_wlxrH4C;BVegFJzjMA_qz|NWGH)a?Gar=8{=T0w5LP0uNFtFo$`V)A zG&Hvy+(5P3&}vyGu-<6pY2-!X=3hh(8W;CuAL?WI7UG>kV9=9drny`XzPuxiiosr? zUhi@gFrrdnYN|EA+-z}VG?IduG0+Q;_797)p*cq!Sa=lT1@$c_*B{OxfP>nBO$@ER za+EIb7Z>Z4f<)KYC8VD@+}Gu(EG{UaMbbX8hJ{EBP9{Eko8I6t?~p92cHKKa4c<%+HnP z6R}lOrX#rgs-k_;C~=BSM0ZoNI87yixW%t2Yx&B>anQ)hie(b4(lY@lg(5YF(qxE< z8fOuZ-MW^LB%HbU(#c@}IIdG(-Z!~QW~@WCy^9ZtiR0CULH$V%Y%Foh)C#AruroNPtgR8g_Gpymc0DKDjHo=d)Lg_xrH1>oQ#LESkX=}T*tA6I{#0=5OX9K+!S1dm{Zs8HjJX3<*) zRJXBW)J{Y%jJ5S zXBucTV1$ZghxFi?${6-Bq>7ItBPgGllFhi&Hv7>TG2t08gk2n%eCpWDA4$shwFncc zhcq;g4l0trX&5l)@?B}06~!Z~yT4vzLk{^cJGATX8{Thl;wwqex8#BJE4W+{QoD@2 zP{nQrBi|^=SCDZ`+RTP#(*OGNB7TGgyq^JU+4w@;QwcFFyMN+3bLiR}$%J1X)?uJ% zrsl(wC|qI{A5Q21m>y~G;*~Czu}^d#PLNYd8_Z`unm&-KvtfgkV+tIK&tXyfx-{)% zHl!HvwSLdPswBCSnC*2*%qEHeDHU0hIXuT~`NdJAz5Cfi1<6rmKYJK)g6@TTM)V95 z(+O-59t zvfN+}MVC#dpSO^oWUCIrh65Y*yGl0k%5xBlGq=96#InX!DAw>Jm95M|&X%6Evn?76I?$in46D3eB0FR6}^$kaxHFH*TD6o?W=*SV8dX5#zPzlU! zS|ZTQD`*zn#F2hLdb*JUAQG#{gB$(l`u-l%CL6 z@}?#AeGf)8e>iBYv)@t5#F(MxW2cDk-9_2gp-~xmM+JqpXPQt z%@OS;QwfJ7nZ7X`D9adXEjiqk;G*#5NyGLKNB~oztm=wMRe&2vK7Z*)3_Q7U7r5FP z`fi&UUj#F=*cUU6dWdX!zZ5IC#3GWp_2rp0_;7=h*C~cU!XTNOkOhk-`lF8lweD`h zA5)KlL?Wi;zYt_f{sdJh#nF`qb2yw#R&5^#M1TgSmAEepb~!oL@>osTqT3a(EiS`2 z9DbPs$m$w4;Bx?MFC9bL1<1F+Ue?xpelZBnyqUKgrA&GqY}c#t99u`U9GQCDa&P2Q ziu0OJH5_r@*>?2bks!IH1)JIxDufBFK7Zo1p1x1a-~D7Vbsu-UdKom9n&S2S0Z{Rl z&1K;2XF|B3U)EKAF875JSE^l@KIJAx%LV}7aEM-KQw4MCE|`Uf-T8>!NTI0JYBoh5 zo8;1>$EFSXkd~ODV-QVM=KGZr?}ba~M*YLR^we(*wBZ9vn8;~@Cy@?wb}?erWq}fI z6nHC`Z3h2u%{fs{x=OCYKf+_t!K{dF$rDdy2a35(Ul;X?iSLtE*x_c$bfRK4i`wRq zTj3)umz#?a%y~fRjiZYdU*WnQyDdQP{c#{r_?HPSKS`?Y4Go ztKw8_+eyW?Dz$DrN8&NgtshIWSQQtVoa;BVyU^xSvdl; zQ>gx2itmLk(>VU!Apl+=>RPxy9^n=?8j&^@O#L$gCn@bn%80wO%^wTq_29d1a(|gwut%Wi%zFj6#`p zty?3Pw~AgZ4cZAzpfg5g+miam7}VnMS`qoXu>6CwMBc}qU+D84SJ%kFqr8Wz=sPaI z0sL01f*}rzlEsX=q`em=KpSDlujG&A@szslJvMaRwCHQYIs>k_ zn%S)Kv%Dz8?7U7feX&Kg5bIFsAiU40B9r^zO``#zT`Zn|-< zCigXo>pHuTvUSkP`tfwp--gyqucBbn#Oa5-IBvy*1i4=5Mr7`K=}TA}(KMvka8^oY zQA30SqRy2yTqv+>RFl+}7F4#1!>wo6{6(dpI^rRHxykAAF_a$B$Rk=t8shem>T<|Z zld18eAyra#5Zc)#0ks-Nl<+_$p%i%C{AiDQG^BK%55}*+QI2%U zOsQ0oPUA~WjAtvwD|VAxJTLNwOQ_d6AC>F)gUhJkgelQ1_nzruv$oM3(FN`mOvLM> zcIhv;`99ZHtO)+{20lL8Z*v*opZsM3hAKy=eanN_zn!G-Ln?tfccoi>buQm^0B^3M zpqvKeY)sEtb$?js;4RAw;;sZ55bZTV%~P|ojdMOx-|ol?A3jJUx+`EjsrJqwJ(I3= zb8X%mt~rdM4D47hGe9pjQ^59}9XGs?P}lu$Q%4aW+m|f**x14Ib$nt8YB};STp;^L z!OR@2ENj-QBKqc-$J0e>1v)65`1*#?qjI)Ubd)7r?bzL+(gA82viKX<0suEAh6O8m%?X z5;xWzM_;OUq)?O-1z=kMQU zdtKcaN(t~E+}^!jb2r~NDGZnex-imNZQnof#Ne-X05j&Nm9-Y@*KqFAyG2ABf_;oX zGq?m1{wg~biSR81P@1TMS1mA0`-GM1zjRQP6yEP265NktxW5F#IQUxJPQM(NC9llZ za)1$>Nma+~s4Mj^LuG=9l@|SOEpI$` z#*J1H&`EL%jn%B@Eo-5$Dj@wd-c+aV)9rI`@$1Yxcn|=kb&S+sJ6?6Lwh=_*>Bc&G z;1m=wi{+{Rn|+1sVx+4{#kWFP;Wqbulxcw)pORsadu8#nhca1xOy6Azx{I>F&ct*( z!MmH#5NYPw8Xy2uG!k#mwDlAkF<&Us??*5pEqp(OlN{Be!>w7=(?C&sAl8%`H90uyjIX428wj&@Vz8p+5Nc@2QKhQ zW8^Lr1JSnd zC#!YHB4ddo=3Z2Q?vAG(J%9T@N1dnQ`c}@wH05v5RE5SSpuYYX!)sew-6NkU-+vjO(sV z^C7@2k=Vg~&Rw-zKDJ{}E>$DcF^(tp0`pgz96Lop0~@k7yqi~T*kri1U_y`&y@0A?V%S`(b)3{(>%USE)U zy#6Clzz^2NVBslxmmQe5LBgJK*Sk@)vCCjO8gkIzbbhUNTQTZ<&tD^aUexJOPD&8B zjzm~ySmM%-zh10-i#tqA_Q?fB{uQ0e^z2?FzFH)|Mj zUs-$Espd6YwS7cVg+>-6%NU6EMc7&kUq~8G3dFK|fyG^BNM_dK6?56W)w15PA^fHT zWQi5EMJXaY?gh_&PPW`nY&~aneAdGeJ@$KVVp`6!?b?Xl+~q<4)L*lP$+$|(yjLzg zzdo6I68BqmN@{c!tYqeH#`f<5N#)9(0m{IHf1_$_ufe3`i_}nbE22NV#4`57#0KA5 zO9`vuf)9hy;gouUYrD9+E3TRsU>yTGaAU!k{fWHyqiD;Fq_t1h+#}eRQnnAgrmJ2&%HVnX%szIi z1xq4mTZQ34Yx-p$XQt9h4qvkH%JV*!SZ@xIcda8mEh)$$Ipu|5Vr^Vb8W8_e` z12?pCJ@e9%M<)f*$`GO}Rg;6FOjnBE;T{JwFI zX6z;s+>an5EdfKEkDi|ZOPb8-$N=nGE=t^$#-J)UM~Ide_p_LO@i|oHbPxmvnkeyp zF+TK>s;9qjlYHRH>|865^2^n~f^%i)E=)+*{3vXFkz@2^W1ZoVPm8fNl<*J~mo6Iu zNb^|OOgp!1?%HuL?z;H(UrI1(?+l5Xnxn{E8J31>>7A16oua1?@E0liutp`7>KVtG z6tP4l{c`98|N3EXNPrW8$HsS1qX5blJ%a)u4wQbe84>sG*DWlE_L#O|g10-6G%b&$ zI_>kZ>O^Srkum6s9JR<1s$&8)K58bP|@W0L^iw!tv%T_-Jn` z{WR8_7{1P?ExyTeVwL(3p0&*TQ-Bz30=F=REOCPKy3)HTS~hwu*^!^9*EAP z{_U1nwGQ;T)#DUuV=*)zvV-@eVE%~w1~orcwyzvTdkOF#D+6!6}c~pol2TDC(?z&yB<2G__NRKX21ph zGac5&Ixa_2l>W~()2ZkOtgk)JY@yB}<${{E9DZ8_U&OAfVGAtS+2Yp$;iX!rsj~Ui zJrzPp6n;K$c^S$BXXkiuhj+t5O7ZjR&RwhQjCZ?P)3kHumF39uA^FJ{aRY(2$*f=w zwDctaS_F|(PPLJK8zY1$_t5@@g4Z7$fwiT~yQ<$wJ+JY^5}HeO_1N1*!Eai{iAYec zYPnO+_#s;Kx>>oJi9QE5lP@9nIzR6O{G)f7fb3-W>|Ac~r?&4X3o{*Bn_OVs&I3;HcfaSy>G5MlnBP_Sq~*3B&5{vgf( zn;Nx5nrx0HP1rOd2D>PbPHY_`O_Gr_$YsR*fig`tW(1Cli21Z6Q*b+$$wP1qSypw9 zT2aI|#loaiKV`x|s?5!Q;;58K3^WgQEin5eriOV=?i=*6-scVV6Uzg4eE)58b@`lkGpo_@dJJ>KjxiRKzMz2*lRqk1WZ4>K%{Q2vH9Wtj-9k3%Q>#}6=t)c!-_8ju z8G$o(!Jrx?mHY?0QOGNUY9mh5UN%hVd&R-TmX9+gFIsLN?Q+Al<1(Cg0 z^7rbQr`$z|ZNl`S!#@CczIP-qrGOYK3oT#^m|*&NHQ@e3feAs$ERY-vhEqNkN~3(| zx<0vX)dbi}%E8VRktR-4gw*+v#W2uz79Qv0mfqv2$u@bPZ{FAt>Q<^rZru_AYaXcc zfEiBZxQD4EF-+jOvH~8@enP%-;NEHVoN}(-#~$FEfb6qkk8cp$!TT7;0Dp#^mKz58 zzo+S9gMYz|+xN}|786^4)CqMfb;NiP)!w%P&1 z$4~AE_d!kI7Y`1#%`JMi*XQYLbRHWizVY~r5i9D$6P7sy=rIdyBhQp zZI%7$hxK=FsQtQm&~DJ`b3*0=bpUskNNkdbv`OKRrWSo3O?rs6 zDmFEO^wzENZ|)BMqPPx7=}s0Kf7BvjzaeRj8$bN)5O;AX@cNTda7omfMjwZGdsvs% zJYv1}!Dqb>T-=lMNQt!Pay3&d5DK~h4HmWgd`Gqgckt4Z6wm?Qo;L32M!j}d5;x9R z2m5lKuY+)YuZQ!QK+K@dzKO7}Y@ZpDoyToorWIA3azfSxQjTtioWD*1x3p(46XqvM zIN<^_+zNRonO@a-##T{w+UK;n=Hx3PlHFW7asZKF`lCxG;ZbQ`z5GY5eBRxymf;;y z`}WoRQ_xM2Oc%<)VvoNTC|*SQPwHWc_dmTr@(*1yHb)lj38Ie%Pj;c6BMFv?bq9xD zI(K$^cwFIL7~9Ay^Z8>3yUGcXIC6ILbm_sM#S(+6&|NT1^7et%s_w!mAjRhbbN#+4 zN-LRV4!>T(@}s%U;x{Ce4il8gbMotFngm=dE0j-0oRM`wClh=;auD!_=iu;8VM?SI z%pTC8rAR(18biqKij4^p%ePY+?H2`%elDA?at5k7ULZ{ zJ|>j5uwAL+rnnhztCx?hp=NF;Tf0I&rFoTA>(MXB*McPIFC(UV{${5it<(fZ+V7-| zg;UjsVCW;LEE?IuKo5^B-V+DyS%;=~_+Pk7>5+@!JF8aSX!6-1us?1!cSP#zT@Nlc zm}9eS{j+TSvWk1Bm;-9=!MkiJT%K+}5x6sOOXZ{ti&0ETP)KSXL_V6o9n{3Qh}lHD zVMVh8hF^5jB>|6&j8WZvh!3R$H$9i0FXiGz%E_fb^0UEAY@eJE!{-Da_ro_ zhD?XQjTZtc)s1V*r({dA>tRVBUk6{?OGFyIwl{i)~bG&+?$q&Nl~-=+ad# zhD=n}5#{C{&I&&E;VZiF_HsxZ*~=x9Fr5U>_6*bxYdbreRS7A4z-d*63_m82eN@21 zs*4e3N$n;{eEVMSO{o&Qfl_>fyuYGkle&eRzjIgbljU)5q|3B7}TLx|OW_RHN|J6rIDRn6rkz>=?#eSw-B zD8O6)o!Bfk8TpKHV~XpaJoxTSXs554TX>O^uyCtWy2nbaj?dyr$YFeSZU+IY=$2VD z+ZEwChIfEvc{2Tyf|2`Biz*Jt%>zk*DJkWGPCw&QQfzaqq<86!HTE4mm;?Lv?xvG1 zURHmkv;o2j&LG3Wr(&f^w?VTQov1Cn$N2z=s(^nFa{^HV-FsPoqccR5vsO*dDAq7{ zhLz~7F$f_8iL z^zA@4%JF%Y6TQf}ybN`Zk1z;|d~x2MQW^P>1It@@2!`^UyEMMof6PJ*q^}6QCce1F z_?APHPS(0rv^bZ~sx=TMYLsP(qG)soEnPoTvOaSDgvJnJl6A}s`7I+7hBh3W&5}uh z%uJzyBmZXZS6bmCF9!ZFIVsXA95#JI5nB0V-$?f;S||r8#YAFhbnZ~xxpflJ2GoRd z>Yh957AzB|2mrpPw^^SH#(@?+l$|>I5^%3f!u2=IF~f)+FjeV5YUGg=EqMq>T6br! zXfIqQyv!yyC%kN^*xAbw&L1f@O;~Epo15?p=aM<8631Db@_5E=pXO&*HUQIfUfPgu zl5r}}G19$ZPCYgF3q!m>wxD~Eay6>h(Wq$x_@4O`j#Fj|;k&mo${EHcmt-zblvPUOfkQr)TTDGp+2X}lHFQ~;wf zdRzI9l5pDBydmu4PXzcW&Yi?~A~?@%!Jk@r4EWepG%*w2{gwkf*eIzl+rTB57cFt{ zAuepgied+^B`lnh-W74!s0j1gTOF?HmO%fPNUW41=t{_6niYL1e0k^((3LfEX0U_} zq?o2NbAG>Y5-1x)#muCP(=PR616u{6P6o$_>u@>G_{MZ~?SXFP@d+3(PAbeN0OQx&WW_Ea0uNlua-_7EtH7}|x8N82>S4Rq|cnvL393(nbtO$p3 z4yh@cv{J|isy*yd%dM98%R)k^HcpQWTx(5julEOE?N-%8G<(6&=E&!9sIj$Xrg)Xv z4;eL9cbLu=-`-0a@;SP%C=ZWC-?awax$o6k8?Gjf_qpX5p1}1;-;PDwzx#wn9N?c?BNW&KRo-FHhQMTf%MF zt3dH~0`}HG7sN%xzq*Y60&o9$E!dHBHj(bP8pFHF<>j5h_t`SC=hp z3tTBCj4GNV;%QbTT$3JwpPQC0iEr@d6r1D~o8)Rl~F^K@m*C^zDGvDa1q-Rizm0oCH# zh<5dgg0Z0=Y`8Jm^=#qv<%b)GrjeIQR)1ljAv{v8MA=(9VD!>`Rr!au$2 zO1kr{SxMP;yb!KNCF}9qqzC7fQ$gnxkG?8rzG|i$BJM+`qfA!-g`s2nKig8ILqE*Y z?Fk~i2>R0A?cIFCK!#Fw-JknQx`mtbznO=C+m<>7vGwjp`x4R+QcaN6h0qAep%9(fb}9xZ0y@ERtT&k24`rWd`EzV{bk4S8-~Xo{<=^~Yx?7Z}!{2G+9Sk5K!T-(t zpR%#z|6m>cGyA81#{bl)?(U?eg7;;!CA~Fqkkm8}Fj`ZDK}!Wd&kqK>DE?k=$n$f` za)MSF8=sK6i(hrSC$rWDYNVpFK-UU~QJpPAgKrE*D-xZ_2bT^HS2f4&~u{;*>qB}#`x z*?`F`K}+2z8*Yp`RSz*~D8*Bd=~+*QDxbY9%hTMhPe7>Gl!MmVb#%E_Y zGjSy%x~b`A)pr7Kuv3-;GziEIz}-}u3@n=c%nT)cEHMFFNW@a#jAMdl%|zFd0$!At z;YGH!GRI@3HA3mIlxeG1V#X#9-DsjOjT+3*MVJQlD}|x+Q`_l{D0d|z`60AV6CZgB z!YqmNi`pP)4XUC`FCbMMutxavcdBMsLz*=6sKuE3yd>@#q1~tZZ`zxYZ*unsvx7Yo zISBcoLy(kYcj_H#>XV_QRPuc)zqD19@zO@Rje4$4^!Ys#$==15;1`)DhbFpp_04wL z8F3=%RW0ve)L;y=rA9Ln>T&pwk|ai5y+!ahrCyK)#_qm?-&Tu?rxd9Ar(n2i$`qoD zRsFxPfc;3139IywF%m}lUS*Nh*?^53+;nq`da@4wH0KEpDU!Kxx>B{^kE_FKW3#sn z>1t(=jI^?ug6Bu6da76Fg0n-nnC0?PGfeV#56r1rCDsb+ zc`PYOOopDC=+%G9*Fa}bn#%zcJ#t(MT&k$8Zh!QmtBCDa<+BbEAvT)M;a-A@H+PxMKY^Wa|$aHDU8Z-PuIGg+YbG=3RWytaoQ^GIW;2ttnhbjZP$ zvCQCFRsWzhbRH#(!E=xiByU>*dT`UtPq~759TzKVL2{9)(Q*PTo;;ixDMpA@?2Dtf z&6fWR$5fHOH1`W~KV7KACcJ!Vz(BNgUn%$*MMttS#6!0s8?*XolqMR@N;{tzX`a^t zc)CiM9j3t-F+XQR@pLFIA{x~AO|qZp+%!i0BpQ)3-X_tLg+0k{Yo7?l6Wn$Tz+L3d z=V^gfE?kK;O>By#AIj{%LjYmELv)wkyAZTB@0y|xf27FP7|kLJl4jkIg2oXW3W0Lg zK_}U_xwGM9AAO-9Rv-#FEd6Qv!7r)(zI!dgF|t-(yg1OYuV1HF$ZV+TM8Cs9w^B7Sh;a7iiE< zTWd@G5=}~Wj)iP_r2sB=t6iQyhcT@<1gK9&fpNRxJ|?ND{sF;ibc?WASejIOkvEd1Op7XgUbn-_awpI8t=jD3B|Fycoz!_yXHD{B z6@TK7?D#gNr-pg7@|xa_eE5zucq)J4+6rvGaB7Q~-8I7!f}VIn8bq#+s4bjKIX#tjC$w^*%jh=X z4NUBTNx|Z2dz8_)H9;$A)i>O(vHcYVKf(*RF}_!lrgx)jT2MDJ&zdvg05JJ=|h0cXum7IuCX_SBA6BZ;({? zv?sESd0@M7uJgJxM$@hj#R0*<8@+L`t_D=!+u-Gz3p?J4B?IsEtto=ZT{ zZa!*8FF|k;Ly*QaDYyDq+^>lK2?W5RZtS%6f!|CKFLC&_PnZN{27ztL7*(~@yM`?x zF1{O6BY)@5NtTQ|@ydBeUNhY{5Ir^;5oKH3opX*%^9wK3jrvT(nefz25-g zV+r`qFoqfq-*O--$>!Aap771?#A6@yw`?3&CI2{{vl7<>;^%}C?ey)YDLb@S&Wo$> zqY9g7f>&jdGTn{U5h;4Wri;@t?b+^eI;Bsg{X~Z?>L#T4#LFo3-BCTwk>|Wh`Z5l2 z>D2z4DUR$7My{2DJbeb2>0oChxdIY>jeP{NNvkH3UiN zb&D(bbP404{*I7fx+2Jn9CkUP@);L7jJ&*I7LWngeuw>F8VBZXsZY{k*2w8j|Lw<( zU=Yshq%KsvALg+Vn6!+7jWt95G+9d&kuksKb7UuPk z->`@3roFc$hK4tbYG$6G3recWK8(fCWx_nla0f8G%F?)(LH<3FRaLg5*s(SKtY zTz{F!BLAyR-v3`<@E^nX{|x`>pZPyUDQhdOt0M7Q;uxU`8pOrVC9~uet^}`;O7P1_ zXoJ94!lQ8-&G8x0-GNhMjuMA?edK%ruca-_r#;moz6yDtlB`l=4ez8riL|e^yH2lm zw!iNk68HkQ_*uh4_gT$zuiQRG$k?B(MePBgE{DqQl_6ZS+8#_Ty6gh9r}<}MiL~5E z@L^q?pTlvuV+!$5L@hKAoh_XW%O%~a?~XQ7+GSiQRE<||&Paa&&R=HQbhkFNT7@um zoV3Wbh)C*Nt$$gpmP_GDU_#7c5@uF&RB7?^ti<`qT(FS#R=72p*}!fqeB&8XS#bap zs=em4GGruzm<+ArkB!S9gQ3gS*itt0g7k@i3SllW`nj@d89XEasqD5ukm>*Z>z_h< zy5wna;zpo^&9}oMtB=_di3n}z$#ii`E^XondUDbd9>XGy3Yea{)j45-pV+}Bq_xt7 z=$!!3*OyNRt(P-wicpDlnKuWoo1xv2w4%^t6`?Wx8N(^dY!=$~EIb(Mk6iV*_dD;p z#j~gjP0C#Bm=7iLZ@lB^eAt2yyy(bpy~u9Si$C`*JxtXwtF0ffp472>)tKKn zr3GF%*QpPguBW)=Y7;T*BdW)fuWT^g`d(Wd$dt{|L>Mq8>1jaUO!X-oA!;KGb708V zSzxw)Bru8L6k1{WH&}e8X}jnT;FcF5_FiGtsiLJqEKM|Zhn7twg4o3#cv4m^n-X6c zq3?2;3jT+OAC6w*iR&HhCK@6=qv%PYa&&m0Wh|F&y1J2qET#pSk|p;HI1$Q1Izy& z!I3vSS9bjyZeRET1SIgkSp-y^%&q?8`~T1DpZ@v&Q@6a?h0*kni`gx{ImNk9|QIPM_?*UQi?^D38$Dk&BfQf9V^*jw8P zZH!Q6{eltt!x5~aFInf82i_(Y?rn6m@S}BPJs*P-8H4= zatj5F#~Vh5TH<8aVJ*Qy&JDs+7io4Xby`(=ni*G3gLgz~5#R;==91O>tj6J<(o5+I z*ll0}HRBbCyB5U<589be>mdxx{SIkOUD8CQ-et;}hkMJ;lImO3!Tf@_KA^x9=;ZZr zN@B>AOuQqon<-PM6^itcou}ms3>lN5%(xRu*$iW=bkr~F7R-wb!oC{ahn6LSq?|J& zz(MX$s>X|uriPi|f5e7sHB^eym(rSB%bK8gXFQ2c5>h8i zLnS)>7IkthXFQ12t^gl`6puy7xvw z(o$!e58!#Dz+A(UdT2~v5~!2gX*=U7zE859POyJZV{#qRP=Rlf#6Fptr+npwZB(>E zm}H`}bgt+>1c6NzR7;y}iDRl)ucARJM?7c?rUskJ(6NznG06vg%BKeQUg{!@@BAsp zYNMHa z6HtJ|UiX>NY!b=AOXZ5HpF?D+W|NR@HD8Ozz6!m{Nc>{l$^r1~o8+?TC0{9-OLPq^ zFTXd2y={{bqK~OagT-O0Z8_^oI*IL(#^auqLwLfxja=X~04AzhtKz$8){nu$%*Lte_t+dgtDk1TR3G;Z)$ozsEK!(zm@1fQv&gomNY zE)QhJw)vsXBnHB$K2K}sZLs~O%>UZGX9Z(6WwC0PyvS6H!kfI3uwgCx*zmYm4{Mvl zojsK(J=gB+1@X)v+2r6i4s+1ATGsyK+5CkDaolUTN#1)Q7O!Gly!K}uyv*>i-54(8 z4>bzcOKeYT6-0K}Fn4?{*f<|G+5qu{GIby%a>C=63SP`!Y=^7tHn3`~@1z6tj!b>W z4h-UTMN~s@HL?pZqo350Gb_6C3{S>jMtfUHCs{Y-C>q^LFxW@(W^4F?(vwCsIINnL z{yC0hS{>0u?DefYJq;8hyS!^11qy{|RS>C>}mZTMnc}hm&cT+`y8aUT+$rz%hIuC3? zTA~wI2;*e0&bKe9Bl?SuF8Yf}m zrc)J(JS}ilgKYPc=~wB`Euz^`WnW&z`xW`MitRu1M>%Oyy9EXD``#9F-h0q z3O^0m6l=i_Yu}#@WbaJ&>;R${(|zJ4g@n0=n;7B0zA zpfR^)4O!R1pusV$fNq7Z46XGr5zL(*7FrsQH@4v4EN*SAG>9`hVzq(uix&1p4m%iB z3I0XM+Z;suC3x1QSYrLqhib7zN=rwSC^m=E;lhPUK`@@wbbW(fk{)z|#I98}x3+mI zxIM#m=1V8WV<)@|hx_#;ib~wUfZ3+Dicz3V>!ZDfQSZ#wtg4MXY0-zd(yEM z`2zSAaa6&>A(f4GN~zAo?TZ<~;i_b|LPIrEymnE}C%R_~CaX9`t5b6rX_mLns4jh) zYM8|LrG~|Ys61!5tPqBrg6uW>3l1>f%@dy-isz*F80juY+)3VH{RcZ=CtUAg2BazhAZjy&mWb(gg>g2`>D!_XD{0WpIPf-NSSLt7lM@H6I`}NrURdAs@=M`Edv&aB8IVze#_LgBlEmT+jcOUtY z=Lzn6Xa8O&7-4g@-V-m5&(<>;m1oCp+?0LC%5R+A^5$X9{${ndklk~>G69{QXr~o> znu>f*{~$NNd-}a!xXzr7Ackew2PdidmV}!GYUZa-i+oXSCn(dT>!i16;6-OCiBiLz zPGMUO3&I?CbEs)P)4|(LN9$)6S+8WeNpe-0cB<(gDqmDN^=>G|=^!e8*?<{g!?t)syt|!rvPwyue%HQjy#8l|Ji#s=oUc5Y{_&T%gS^s~vKGnu(%iBfS1M=Xg7<)Y z9(5fjqdQg!ct=^)e$<0K2GFlek2PFYDp4KMJ4Tlbdm`T`cdtzFcZjNfFu6=r9$4AB zJ6Zc}_-xUUSj2{UTO9t@7*lR3q+TF#~QxG^I+ z{iy^4ImIADsd9K*`!C}sk!NnkXPAe{-Ny4a;HJv=p*Oi7?-QWkuNSlDz5I*U-8Z%> zDswZwH~3{=|B*G1{^my&{tNfpg#!ZO|KDtMRsS|o{&$AKKdXQGXZuf`s+LMP|9C9G zD0-Ib@)Si6qMF!>(jLt)stHJvRzF$tlz+40yU2~iPujGtDxXCXd|*Wre1Q6xE%rt; zbNQS>e*gI%y5(($4J=Gaw9nL<;GleT}Gf~-tuuZk# z>>9vpR8`%*viEYmDqJ>`>Z9K@?t4zvb2>q~mI!E_p0UV{V_#)oGk0 z$FbFmD=wWLBN=u4H0WWk?)YABnD3ZI)2>m=u7$X)k3>gynjFKl{&Ww6CDW~2))qAp@(&;cKVmb@KQh)}8# zrj@AFH4CY7nU*rrkbXW3}#061w?DwA|rl{K&cD6j?zoXF}oQFTg!e79va5b{?~~YXd=&D|Th45pyVU zA)|1yt(NwVhuaIM=#_9kxu?(Y>7syJZp|7V0(!RLhpDu1KeFzJYy!tyBphgJ{xw4z zaIz4+X1-}?d&|(BTgm|p=e04ePF|;mz#O&Q ziaR;DZ;1GKTB-H3KHda|UH-V_UEEa|_S3e|88rA)c{Bf(!F~S^4h>HfwRrpAQ$!-D z|K$c0HwWHZ0$`5mtOlu_n9+j8yw zbs}{faeSCz+OFRYVY@`Rxm5G$y3Lf!#kzX0#d!0i6yNnRda$5HQbV>^q$mQVYd{Sy zjCcMD!DHx#hd0i=E zDD<G59h8)}vw$A7g-l!d zE$`~7mD&l0V-t$vln4KoYd_eKz;PM%fbclfM}rw4lc41qtregqtvjvcVFZr4snlqF z^#*e9gZ2Qc$)zM3ui2qG_NpLv22xb?ZH*aWP-WgoVY1jysO4&Ci$W=XFX*=^lD?y2!h**xAhOfS$UWL=ya!un1Q4+P! zx*LruaI*+{YA)v|WZI@s(56^O&l(HgN_YPfM!+6%sMgiX6D)$b7=!%w}iVyN7 z;czVeAYW>idtyBB9Zen*oME1&kR1^BL5(}wJsy6O#Q3M5CFs9pFX zVuQignb_}1`D`co>9JbH_VVZ!5Yjf0!!wh zkixp4dWr)$m`7aXbtBMGVDbNi{Q7A6MT|aLdw8F%4+O~}pNdQ)=Cg9I z`#TQ5Rd0rC(VT&!=?9s+wGb+GA~@{vTZT!%dGpruluRrP6@5khsgz)8>pXfQqPLj^ zMc(gW8Y=(SXy>C%vlZssv?~$Onw49>=r*n<4IbI#c|RF2>a0G}Y*-6|4+?~d+DT<8 zwX^qCAOAO;V`(qUQxe9ozI?rMyNjW?FlpW5OpfPil@{6+>g3Kg@hGVZS8_7EmsoaB z(gHiV8V#NUS~UdkpYn!syMDPEG-n5k#P>QLG_|R*EbEpK-L<#(v(aU+x-d*wE z2{7eK&8Y($1}GF(P)iX-reqSO>64{3v@6*}p^Z{}?`{+&I&U!T{*4B^!waGxT}%`g z(5eyZ?dhAOzk{9@idJ0C_E{2?>Af3zp+^vQ2fP0$Km0cOTlM4DdhKK)Ur>24D%T>a zNg#FBlD%wu;DQgkADvOL{R>p;0Pl`&b;mu&OPnr&`oPd3N{gIbVGv{0s6&X4Fem=q zsA=vmxc9#ruK#DT9pc~5`2YS=&>PxX|5ri4|GXIIe_rh2YVP#6UD?Xk_W$FzP!p5yMHXWl#3x_h5<_FQ|epI-F;u~+}^hyI@_ z1g#7e{s$Qmy`tm)-k9JY*FXH@{fDk(ZAUC4^pS6ydfhc>d@AuX6=^VWql9B9V2cHf zA~Qt-@lxrGc%`a@Epg}dwX~~A%XKAF_;86hS`cDtia&aJiTd0uO%GV(RXA5kE3SK8 zD>~>oCe92U8Ciju2XPT@yxGrQIWar;(~S2i-<}WjzVA07pbz^Vo1VPUJXq2DV0MAF zsl*ak5K_zpQBs-36s!xIleP&*A`u60(KpEjQL}Le!=e3$32rF35&hx)(FWKsBfGY` zyF=bz3&$9LDxI;He(6aX*QqVJlHwHZ4h}Pa1 z0}Y!wQTuIV-Xw4otL7rPZZDw>6%Qy_(%0C_mL?f|1F0+qWHNmUAk9>o+dP>p4qc=% z7SUB2?PeTZXIjGwNs;D{f0d~;vF#T(o3RUtIVw)Cju+wmgv3Lt(HOg8WU%EIEQ$6F znLD~<|13~ofZ3;c{SAe+T!Efi!=KI3SP0W7z&=2F^i9jFwZ>hBc4~~xP^kJGPpqy_ zFxHqGL6$sdBZaO@0NSG$wKJvojUH_N`!w9Dg6OYC1n$*yTL`(Y(-O+@outZgVadpf zV$MDvf%?$s&6%=YqN0MI!DJniL2;m9LDQ0hoC-f4SqVrJM?p5rooPCPp$W)-hiu_e zXF(b$zeI6^`P*r(+11<>xiBt%4f04M6R28A6I7$pCLM#pErpqd4u|OYgFtW#R1{8u zzFCfYWv+VXVmnd!EH4vvEsq?JIY*+DFsX&(Oq2R@Y$b%53IBqmDlLyON@XKQDgAY^ zy~GRfR?(J-2CEeZeLjaeBjV6Kf=+J)Li6qg0?yzHk>wDLALoQ0kD>ZFR*x(Ka>_e# zXJAUfOIx7sE;0n+DzP3dtHI{w$uR(H&3+1kchE|HYKkq)32|q%F4Sg2@S*t2@9S@B z9e7vUqfbFlBeeDJ%hPC4t0tc-dJo;*+%I_m|P*_Pn7tPz?N#AW0g70hb5dad;2?G(lAIy9}Fko+a$@*_bnc* zqjW2ZUqjD>eMaZvc$#;fv)h;KF>Y!FzG9%SzKmp>NQx)mobp;-+gn>} zA}z4{k(L!tQDhI`?LbY27+=&fo$9!y^3omcdISr=No-e#P>L~=26)cy1MWZYyOy=Sg|g_&@SxKM-?XsxbCjfI@L^!hAFcXb$oA1vJuJ%hP{8FE1vD z*P3CjlE`-R*GQ<}8d_BDtD;^9c~GG)q#U6y{5t_(atw#)rU!8+Lam(W$4pLl$NT#w zTU$`8SkqLw7Da*c!9?8LIt&x+m;8jc?iuzkFh{jw?4BuNT_G)l#9BzWvl|ZR-w3$- zJNx0QWYz6%S;e&XY)tUx$Qo)Q*ZkU%fkBP z7XmujPO1u7kM3N@-dCif6caFULpE*S(EeXizBWMLApcXV|9Ahd={tKxMgssaV*&tR z|F6%s|Bd_qe>~a#Bl(Aag#R$44&kb}lEfpL{6O@o7s>Cd2IBX}5~ANY6dz`g&$jk= zAI%^>1o+vSN-Qzqm}QaGJYR#Oct)dHULsulqPnK3zn@&L*>bU22Gd!58j00{Ge=hQ zf|n%fG4C@sb+gfd%*p%k&dKxNj^|B>nQpDFhnSLSggGqlZE2jhh!BZWZ1m5ifRP=p z2bZ^y5RrMeNqS?hNrrkeEh1d!C~TbhGwi4=obcLXJ=Bh)y<1!Q3k=u+YZ~(7JuM0V z!ovnB9#NEgvZrx_#>uET*UAu*S|R78Ch_SED%c*b;!y(%=NsX> z)Z_g#Ag4OdNQYZ!x0DXo;!a8}t+RdKh=4ohiJ=CN2ZTKR=!g@@VmF#>+G`M+YWrIO zR9gGnBAV*t-x1oKLg4LEILtKNS^z2Los&bVt*t72$rA=al{H9}s^$;afEvUx98ooQ zvl=?o6OVVMu_69C)pi9DE3T&8HA&YM+MP0gGPE`?_grq@^tXFgT3dx{btsi=9B-X~ z?7D_oL-|^g?!QFq9gtRLk_M}Tt+QV+P| z%czVB7v@|w&D-K2Nei;hgyPMFKBMxk^499)e!8PtQ6)-H8{4xAZ|vtes?Ptx*mCg_ zcevlj0ASBID2-pfpHOv7a`Lp zGO77ZtSEvlM_!n%T4Ld~G%f$sNEm(>;QQlUS z5nd2HW;klNI+|Lfp1qMcIIaFohz&^-S3=}yBfYU?qu`Ij8y@hAv(R$coc^2;Emj8y zqbo(QKVAWgF7NmhGX74osgZ_~Zxg

    s0*ldFPZx^QLLwLWBh<$88S&2919R)`ZCu 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

    w_SMM=fE zE6SJyApBB}I}Is!?8YaB^FI4COGG7@@utw^>pH$F_AZH=AJN zj&MNVa9O)bU>MGtG`Em2iPS2i{%zbKkHOaXUZZ*mjT;plS3Hb7BPxkj<3TI5`)Fzk z92rmTuVQV6gDnmcTxsUS4hGXBtPZ?qPi!CD)YJ~ipzCh)koim7way=wMl#Ldy0Xvn zspDF)A+XF6*$M>&8KjWET^B5%kZvX7R0c7<{|ln!t5o1$S@UQwzMn#)LBrhKh1~(L$_^J%P%W@#980*cPQv+( zu%Y-hnRp#0>hoSYdTBZy=I=zA

    ALhgSyAc!CeULPF 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%0D6HnC-5XQ!6W{*duzg2#eoMO-DKY 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 (wY?=A0Ox< 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�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⋘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%0A7l$DgrXnU*}{+KLmrv%@Zr)|3xr+T0lSI& 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¥e;Jf(fF^jLwvoaR!#K&CQ%34YcF)j$6~w{}szW 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%0Dpb>_qvk%=g?>r3Yaw{_(-8Gj^ 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�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

      Yg8L`aaltiiTJ`_3E)_~n%`^?-}ccA7<2jciB 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 z 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 hp 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�o9NiErf;=+$2@}uK>k=y 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%0DPl>{B(M{A^ePNTN>S^RcK-lkr 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 T0i`+Z8`*zdk0oS3k`(+O!{mqq From fa2a63cd2bb0cd696a5c8d25ac8ee8666c13c21f Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 16 Jan 2024 16:15:55 +0100 Subject: [PATCH 435/708] Inject html syntax highlighting via language=html comment Signed-off-by: Fred Bricon --- language-support/html/inline-html.json | 44 ++++++++++++++++++++++++++ package.json | 10 ++++++ 2 files changed, 54 insertions(+) create mode 100644 language-support/html/inline-html.json diff --git a/language-support/html/inline-html.json b/language-support/html/inline-html.json new file mode 100644 index 000000000..b40dbf2a1 --- /dev/null +++ b/language-support/html/inline-html.json @@ -0,0 +1,44 @@ +{ + "injectionSelector": "L:source.java -comment -string", + "patterns": [ + { + "contentName": "meta.embedded.block.html", + "begin": "(?i)((/\\*\\s*(language=html)\\s*\\*/)|((//\\s*(language=html)\\s*)))", + "beginCaptures": { + "1": { + "name": "comment.block" + } + }, + "end": "(?<=\")", + "patterns": [ + { + "begin": "\\s*(\"\"\")$", + "beginCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "end": "\\s*(\"\"\")", + "endCaptures": { + "0": { "name": "string.quoted.triple.java" } + }, + "patterns": [ + { "include": "text.html.derivative" } + ] + }, + { + "begin": "\\s*(\")", + "beginCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "end": "\\s*(\")", + "endCaptures": { + "0": { "name": "string.quoted.double.java" } + }, + "patterns": [ + { "include": "text.html.derivative" } + ] + } + ] + } + ], + "scopeName": "inline.html" +} diff --git a/package.json b/package.json index 6081ae70e..980465e18 100644 --- a/package.json +++ b/package.json @@ -252,6 +252,16 @@ "embeddedLanguages": { "meta.embedded.block.yaml": "yaml" } + }, + { + "injectTo": [ + "source.java" + ], + "scopeName": "inline.html", + "path": "./language-support/html/inline-html.json", + "embeddedLanguages": { + "meta.embedded.block.html": "html" + } } ], "jsonValidation": [ From bd61dc65e8c77ea23504bd4cbc279bf3e62c2235 Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Mon, 22 Jan 2024 14:02:06 +0800 Subject: [PATCH 436/708] Log the error details when initialization failed (#3472) --- src/extension.ts | 3 ++- src/utils.ts | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 30cf1b506..398b6a00f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -29,7 +29,7 @@ import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts } from './utils'; +import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; @@ -272,6 +272,7 @@ export async function activate(context: ExtensionContext): Promise name: "java.client.error.initialization", properties: { message: error && error.toString(), + data: resolveActualCause(error?.data), }, }); } diff --git a/src/utils.ts b/src/utils.ts index 97acc7ac5..c3ff4805f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -299,3 +299,20 @@ async function addAutoDetectedJdks(configuredJREs: any[]): Promise { return configuredJREs; } + +export function resolveActualCause(callstack: any): any { + if (!callstack) { + return; + } + + const callstacks = callstack.split(/\r?\n/); + if (callstacks?.length) { + for (let i = callstacks.length - 1; i >= 0; i--) { + if (callstacks[i]?.startsWith("Caused by:")) { + return callstacks.slice(i).join("\n"); + } + } + } + + return callstack; +} From 9ab70399f0f361eb3e1cdbeba78d6a61284142fd Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 24 Jan 2024 07:56:01 +0800 Subject: [PATCH 437/708] Enable no-response bot to auto close inactive issues. Signed-off-by: Jinbo Wang --- .github/workflows/no-response.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/no-response.yml diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml new file mode 100644 index 000000000..2b19f6c74 --- /dev/null +++ b/.github/workflows/no-response.yml @@ -0,0 +1,22 @@ +name: No Response + +# **What it does**: Closes issues where the original author doesn't respond to a request for information. +# **Why we have it**: To remove the need for maintainers to remember to check back on issues periodically to see if contributors have responded. + +on: + issue_comment: + types: [created] + schedule: + - cron: '0 10 * * *' + +jobs: + noResponse: + runs-on: ubuntu-latest + steps: + - uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb #v0.5.0 + with: + token: ${{ github.token }} + daysUntilClose: 30 # Number of days of inactivity before an Issue is closed for lack of response + responseRequiredLabel: "need info" # Label indicating that a response from the original author is required + closeComment: > + This issue has been closed automatically because it needs more information and has not had recent activity. Please reach out if you have or find the answers we need so that we can investigate further. From d3bcbaa3f5a3097dc21b5d94132d6858a0452a7c Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 21 Dec 2023 20:06:55 +0100 Subject: [PATCH 438/708] Add support for externally provided 'lifecycle-mapping-metadata.xml' file Signed-off-by: Snjezana Peco --- README.md | 3 +++ package.json | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/README.md b/README.md index d0feefcb4..a97d4aafd 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,9 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. +New in 1.27.0 +* `java.configuration.maven.lifecycleMappings` : Path to Maven's lifecycle mappings xml. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 980465e18..7f24a60c4 100644 --- a/package.json +++ b/package.json @@ -659,6 +659,13 @@ "description": "Specifies default mojo execution action when no associated metadata can be detected.", "scope": "window", "order": 90 + }, + "java.configuration.maven.lifecycleMappings": { + "type": "string", + "default": null, + "description": "Path to Maven's lifecycle mappings xml", + "scope": "window", + "order": 100 } } }, From f7f3bdb7e8fdbd36028c315cf8bd8281afede357 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 1 Feb 2024 10:10:38 +0800 Subject: [PATCH 439/708] Revamp server status bar item. (#3478) * Revamp server status bar item Signed-off-by: Sheng Chen --- src/commands.ts | 14 ++++++ src/extension.ts | 53 ++++++++++++++++++++-- src/serverStatus.ts | 8 +++- src/serverStatusBarProvider.ts | 80 ++++++++++++++++++++-------------- src/standardLanguageClient.ts | 9 +--- 5 files changed, 118 insertions(+), 46 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 5ad0a8085..ebf8eae3d 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -350,4 +350,18 @@ export namespace Commands { */ export const RESOLVE_PASTED_TEXT = "java.project.resolveText"; + /** + * The command when clicking the server status bar item. + */ + export const OPEN_STATUS_SHORTCUT = "_java.openShortcuts"; + +} + +/** + * Command titles used to render in the UI + */ +export namespace CommandTitle { + export const OPEN_JAVA_SETTINGS = "$(settings-gear) Open Java Settings"; + export const OPEN_LOGS = "$(output) Open Logs..."; + export const CLEAN_WORKSPACE_CACHE = "$(trash) Clean Workspace Cache"; } diff --git a/src/extension.ts b/src/extension.ts index 398b6a00f..4e5854cd0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,12 +5,12 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; -import { Commands } from './commands'; +import { Commands, CommandTitle } from './commands'; import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; @@ -23,7 +23,7 @@ import { registerClientProviders } from './providerDispatcher'; import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { languageStatusBarProvider } from './runtimeStatusBarProvider'; -import { serverStatusBarProvider } from './serverStatusBarProvider'; +import { serverStatusBarProvider, ShortcutQuickPickItem } from './serverStatusBarProvider'; import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, getImportMode, onConfigurationChange, ServerMode, ImportMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; @@ -38,6 +38,7 @@ import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; import { pasteFile } from './pasteAction'; +import { ServerStatusKind } from './serverStatus'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -343,6 +344,50 @@ export async function activate(context: ExtensionContext): Promise } // Register commands here to make it available even when the language client fails + context.subscriptions.push(commands.registerCommand(Commands.OPEN_STATUS_SHORTCUT, async (status: string) => { + const items: ShortcutQuickPickItem[] = []; + let statusCommand: string; + if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { + statusCommand = "workbench.panel.markers.view.focus"; + } else { + statusCommand = Commands.SHOW_SERVER_TASK_STATUS; + } + + items.push({ + label: `$(coffee) Java Status: ${status}`, + command: statusCommand, + }, { + label: "", + kind: QuickPickItemKind.Separator, + command: "", + }, { + label: CommandTitle.OPEN_JAVA_SETTINGS, + command: "workbench.action.openSettings", + args: ["java"], + }, { + label: CommandTitle.OPEN_LOGS, + command: Commands.OPEN_LOGS, + }, { + label: CommandTitle.CLEAN_WORKSPACE_CACHE, + command: Commands.CLEAN_WORKSPACE + }); + + const choice = await window.showQuickPick(items); + if (!choice) { + return; + } + + apiManager.fireTraceEvent({ + name: "triggerShortcutCommand", + properties: { + message: choice.command, + }, + }); + + if (choice.command) { + commands.executeCommand(choice.command, ...(choice.args || [])); + } + })); context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(storagePath, column))); context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.out-jdt.ls', column))); context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.error-jdt.ls', column))); @@ -510,7 +555,7 @@ async function startStandardServer(context: ExtensionContext, requirements: requ standardClient.start().then(async () => { standardClient.registerLanguageClientActions(context, await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins")), jdtEventEmitter); }); - serverStatusBarProvider.showStandardStatus(); + serverStatusBarProvider.setBusy("Activating..."); } async function workspaceContainsBuildFiles(): Promise { diff --git a/src/serverStatus.ts b/src/serverStatus.ts index a7fd2eac8..28c51990a 100644 --- a/src/serverStatus.ts +++ b/src/serverStatus.ts @@ -2,7 +2,7 @@ import { EventEmitter } from "vscode"; import { serverTasks } from "./serverTasks"; -import { ProgressKind } from "./protocol"; +import { serverStatusBarProvider } from "./serverStatusBarProvider"; export enum ServerStatusKind { ready = "Ready", @@ -32,7 +32,11 @@ export namespace serverStatus { export function initialize() { serverTasks.onDidUpdateServerTask(tasks => { - isBusy = tasks.some(task => !(task.complete)); + const busyTask = tasks.find(task => !task.complete); + isBusy = !!busyTask; + if (isBusy) { + serverStatusBarProvider.setBusy(busyTask.value.message); + } fireEvent(); }); } diff --git a/src/serverStatusBarProvider.ts b/src/serverStatusBarProvider.ts index 4bff57ed8..a410c65ce 100644 --- a/src/serverStatusBarProvider.ts +++ b/src/serverStatusBarProvider.ts @@ -1,64 +1,75 @@ 'use strict'; -import { StatusBarItem, window, StatusBarAlignment } from "vscode"; -import { Commands } from "./commands"; +import { StatusBarItem, window, StatusBarAlignment, ThemeColor, commands, QuickPickItem, QuickPickItemKind } from "vscode"; import { Disposable } from "vscode-languageclient"; import { StatusCommands } from "./languageStatusItemFactory"; +import { Commands } from "./commands"; +import { ServerStatusKind } from "./serverStatus"; class ServerStatusBarProvider implements Disposable { private statusBarItem: StatusBarItem; constructor() { - this.statusBarItem = window.createStatusBarItem("java.serverStatus", StatusBarAlignment.Right, Number.MIN_VALUE); + this.statusBarItem = window.createStatusBarItem("java.serverStatus", StatusBarAlignment.Left); + this.statusBarItem.show(); } public showLightWeightStatus(): void { this.statusBarItem.name = "Java Server Mode"; - this.statusBarItem.text = StatusIcon.lightWeight; + this.statusBarItem.text = `${StatusIcon.lightWeight} Java: Lightweight Mode`; this.statusBarItem.command = StatusCommands.switchToStandardCommand; this.statusBarItem.tooltip = "Java language server is running in LightWeight mode, click to switch to Standard mode"; - this.statusBarItem.show(); } public showNotImportedStatus(): void { this.statusBarItem.name = "No projects are imported"; - this.statusBarItem.text = StatusIcon.notImported; + this.statusBarItem.text = `${StatusIcon.notImported} Java: No Projects Imported`; this.statusBarItem.command = StatusCommands.startStandardServerCommand; this.statusBarItem.tooltip = "No projects are imported, click to load projects"; - this.statusBarItem.show(); - } - - public showStandardStatus(): void { - this.statusBarItem.name = "Java Server Status"; - this.statusBarItem.text = StatusIcon.busy; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = ""; - this.statusBarItem.show(); } - public setBusy(): void { - this.statusBarItem.text = StatusIcon.busy; + public setBusy(process: string): void { + this.statusBarItem.text = `${StatusIcon.busy} Java: ${process}`; + this.statusBarItem.tooltip = process; + this.statusBarItem.command = { + title: "Show Java status menu", + command: Commands.OPEN_STATUS_SHORTCUT, + tooltip: "Show Java status menu", + arguments: [ServerStatusKind.busy], + }; } public setError(): void { - this.statusBarItem.text = StatusIcon.error; - this.statusBarItem.command = Commands.OPEN_LOGS; + this.statusBarItem.text = `${StatusIcon.java} Java: Error`; + this.statusBarItem.tooltip = "Show Java status menu"; + this.statusBarItem.command = { + title: "Show Java status menu", + command: Commands.OPEN_STATUS_SHORTCUT, + tooltip: "Show Java status menu", + arguments: [ServerStatusKind.error], + }; } public setWarning(): void { - this.statusBarItem.text = StatusIcon.warning; - this.statusBarItem.command = "workbench.panel.markers.view.focus"; - this.statusBarItem.tooltip = "Errors occurred in project configurations, click to show the PROBLEMS panel"; + this.statusBarItem.text = `${StatusIcon.java} Java: Warning`; + this.statusBarItem.tooltip = "Show Java status menu"; + this.statusBarItem.command = { + title: "Show Java status menu", + command: Commands.OPEN_STATUS_SHORTCUT, + tooltip: "Show Java status menu", + arguments: [ServerStatusKind.warning], + }; } public setReady(): void { - this.statusBarItem.text = StatusIcon.ready; - this.statusBarItem.command = Commands.SHOW_SERVER_TASK_STATUS; - this.statusBarItem.tooltip = "ServiceReady"; - } - - public updateTooltip(tooltip: string): void { - this.statusBarItem.tooltip = tooltip; + this.statusBarItem.text = `${StatusIcon.java} Java: Ready`; + this.statusBarItem.tooltip = "Show Java status menu"; + this.statusBarItem.command = { + title: "Show Java status menu", + command: Commands.OPEN_STATUS_SHORTCUT, + tooltip: "Show Java status menu", + arguments: ["Ready"], + }; } public dispose(): void { @@ -68,11 +79,14 @@ class ServerStatusBarProvider implements Disposable { export enum StatusIcon { lightWeight = "$(rocket)", + notImported = "$(info)", busy = "$(sync~spin)", - ready = "$(thumbsup)", - warning = "$(thumbsdown)", - error = "$(thumbsdown)", - notImported = "$(info)" + java = "$(coffee)", +} + +export interface ShortcutQuickPickItem extends QuickPickItem { + command: string; + args?: any[]; } export const serverStatusBarProvider: ServerStatusBarProvider = new ServerStatusBarProvider(); diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index b98c184e7..8183bc57d 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -75,13 +75,11 @@ export class StandardLanguageClient { serverStatus.initialize(); serverStatus.onServerStatusChanged(status => { - if (status === ServerStatusKind.busy) { - serverStatusBarProvider.setBusy(); - } else if (status === ServerStatusKind.error) { + if (status === ServerStatusKind.error) { serverStatusBarProvider.setError(); } else if (status === ServerStatusKind.warning) { serverStatusBarProvider.setWarning(); - } else { + } else if (status === ServerStatusKind.ready) { serverStatusBarProvider.setReady(); } }); @@ -181,9 +179,6 @@ export class StandardLanguageClient { // message goes to progress report instead break; } - if (!serverStatus.hasErrors()) { - serverStatusBarProvider.updateTooltip(report.message); - } }); this.languageClient.onNotification(ProgressNotification.type, (progress) => { From 51186935f4602cf8e0fd8ffd781a7a09beae044a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 31 Jan 2024 16:11:34 -0500 Subject: [PATCH 440/708] Changelog for 1.27.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 53babaeaf..82aaca592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,20 @@ # Change Log +## 1.27.0 (February 1st, 2024) + * enhancement - Make the server status bar item more user friendly. See [#3473](https://github.com/redhat-developer/vscode-java/issues/3473). + * enhancement - Support syntax highlight for embedded HTML. See [#3465](https://github.com/redhat-developer/vscode-java/pull/3465). + * enhancement - Add Unnamed patterns and variables (Java 21) preview support. See [JLS#2963](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2963). + * enhancement - Add quick fixes for for suppressing warnings using `@SuppressWarnings`. See [JLS#2698](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2698). + * enhancement - Add quick fixes for uninitialized `final` fields. See [JLS#1328](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/1328). + * enhancement - Add support for externally provided `lifecycle-mapping-metadata.xml` file. See [#3393](https://github.com/redhat-developer/vscode-java/issues/3393). + * bug fix - Allow generic snippets to be returned when completion token is `null`. See [#3466](https://github.com/redhat-developer/vscode-java/issues/3466). + * bug fix - Allow to import the newly created maven submodule within a multi-module project. See [#3464](https://github.com/redhat-developer/vscode-java/issues/3464). + * bug fix - Use `source.gradle-kotlin-dsl` instead of `source.kotlin` to avoid clashes with other Kotlin grammars. See [#3463](https://github.com/redhat-developer/vscode-java/pull/3463). + * bug fix - Log the error details when initialization fails. See [#3472](https://github.com/redhat-developer/vscode-java/pull/3472). + * bug fix - Avoid string concatenation with `Runtime.getRuntime().exec(..)`. See [JLS#3022](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3022). + * dependencies - Adopt the Lombok 1.18.31 edge release. See [#3461](https://github.com/redhat-developer/vscode-java/pull/3461). + * build - Automatically suggest updates based on JDT-LS Java language support. See [#3402](https://github.com/redhat-developer/vscode-java/pull/3402). + ## 1.26.0 (January 11th, 2024) * performance - Reduce delegate command calls when classpath changes. See [#3439](https://github.com/redhat-developer/vscode-java/pull/3439). * performance - Ensure initial import of projects respect resource filter settings. See [#2972](https://github.com/redhat-developer/vscode-java/issues/2972). From c5aa100e5f3bacfa59bc8838e278d83514ce6046 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 1 Feb 2024 10:22:39 -0500 Subject: [PATCH 441/708] Upversion to 1.28.0 Signed-off-by: Roland Grunberg --- README.md | 4 +--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index a97d4aafd..91ba93241 100644 --- a/README.md +++ b/README.md @@ -193,6 +193,7 @@ The following settings are supported: * `java.templates.typeComment`: Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.references.includeAccessors`: Include getter, setter and builder/constructor when finding references. Default to true. * `java.configuration.maven.globalSettings` : Path to Maven's global settings.xml. +* `java.configuration.maven.lifecycleMappings` : Path to Maven's lifecycle mappings xml. * `java.eclipse.downloadSources` : Enable/disable download of Maven source artifacts for Eclipse projects. * `java.references.includeDecompiledSources` : Include the decompiled sources when finding references. Default to true. * `java.project.sourcePaths`: Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project. @@ -240,9 +241,6 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. -New in 1.27.0 -* `java.configuration.maven.lifecycleMappings` : Path to Maven's lifecycle mappings xml. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index 9d9663158..dc8fb0b36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.27.0", + "version": "1.28.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.27.0", + "version": "1.28.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 7f24a60c4..ec559fe45 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.27.0", + "version": "1.28.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From bcae80e90e80f4e62dd4f8a46fdf7bfb5c76b611 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Fri, 22 Dec 2023 15:00:44 -0500 Subject: [PATCH 442/708] Add keybinding & setting to perform cleanup actions manually. Signed-off-by: Hope Hadfield --- README.md | 6 +++++- package.json | 46 ++++++++++++++++++++++++++++++++++++++++-- package.nls.json | 3 ++- package.nls.ko.json | 3 ++- package.nls.zh-cn.json | 3 ++- package.nls.zh-tw.json | 3 ++- src/commands.ts | 1 + src/protocol.ts | 6 +++++- src/sourceAction.ts | 35 +++++++++++++++++++++++++++++--- 9 files changed, 95 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 91ba93241..7e996aee8 100644 --- a/README.md +++ b/README.md @@ -219,7 +219,7 @@ The following settings are supported: * `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. * `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. -* `java.cleanup.actionsOnSave`: The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. +* `java.cleanup.actionsOnSave`: **Deprecated, please use 'java.cleanup.actions' instead.** The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. * `java.sharedIndexes.enabled`: [Experimental] Specify whether to share indexes between different workspaces. Defaults to `auto` and the shared indexes is automatically enabled in Visual Studio Code - Insiders. - auto @@ -241,6 +241,10 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. +New in 1.28.0 +* `java.cleanup.actions`: The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. +* `java.saveActions.cleanup`: Enable/disable cleanup actions on save. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index ec559fe45..309be1c46 100644 --- a/package.json +++ b/package.json @@ -1212,9 +1212,9 @@ "title": "Code Action", "order": 110, "properties": { - "java.cleanup.actionsOnSave": { + "java.cleanup.actions": { "type": "array", - "markdownDescription": "The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.", + "markdownDescription": "The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.", "items": { "type": "string", "enum": [ @@ -1236,6 +1236,34 @@ "scope": "window", "order": 10 }, + "java.cleanup.actionsOnSave": { + "type": "array", + "deprecationMessage": "Deprecated, please use 'java.cleanup.actions' instead.", + "items": { + "type": "string", + "enum": [ + "qualifyMembers", + "qualifyStaticMembers", + "addOverride", + "addDeprecated", + "stringConcatToTextBlock", + "invertEquals", + "addFinalModifier", + "instanceofPatternMatch", + "lambdaExpressionFromAnonymousClass", + "lambdaExpression", + "switchExpression", + "tryWithResource" + ] + }, + "default": [], + "scope": "window" + }, + "java.saveActions.cleanup": { + "type": "boolean", + "default": true, + "description": "Enable/disable cleanup actions on save." + }, "java.saveActions.organizeImports": { "type": "boolean", "default": false, @@ -1560,6 +1588,11 @@ "command": "java.action.filesExplorerPasteAction", "title": "%java.action.filesExplorerPasteAction%", "category": "Java" + }, + { + "command": "java.action.doCleanup", + "title": "%java.action.doCleanup%", + "category": "Java" } ], "keybindings": [ @@ -1583,6 +1616,11 @@ "key": "ctrl+shift+v", "mac": "cmd+shift+v", "when": "explorerViewletFocus && config.editor.pasteAs.enabled" + }, + { + "command": "java.action.doCleanup", + "key": "ctrl+shift+alt+s", + "when": "javaLSReady && editorLangId == java" } ], "menus": { @@ -1705,6 +1743,10 @@ { "command": "java.action.filesExplorerPasteAction", "when": "false" + }, + { + "command": "java.action.doCleanup", + "when": "false" } ], "view/title": [ diff --git a/package.nls.json b/package.nls.json index ca4690b3b..227404d82 100644 --- a/package.nls.json +++ b/package.nls.json @@ -26,5 +26,6 @@ "java.clean.sharedIndexes": "Clean Shared Indexes", "java.server.restart": "Restart Java Language Server", "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", - "java.action.filesExplorerPasteAction": "Paste clipboard text into a file" + "java.action.filesExplorerPasteAction": "Paste Clipboard Text Into a File", + "java.action.doCleanup": "Performs Cleanup Actions" } diff --git a/package.nls.ko.json b/package.nls.ko.json index 2e7214d92..ae20245ad 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -23,5 +23,6 @@ "java.action.showSubtypeHierarchy": "Subtype 계층 구조 표시", "java.action.changeBaseType": "이 유형을 기준으로", "java.project.createModuleInfo.command": "module-info.java 생성", - "java.action.filesExplorerPasteAction": "클립보드 텍스트를 파일에 붙여넣기" + "java.action.filesExplorerPasteAction": "클립보드 텍스트를 파일에 붙여넣기", + "java.action.doCleanup": "정리 작업을 수행합니다" } diff --git a/package.nls.zh-cn.json b/package.nls.zh-cn.json index ebe40f3e8..2526d4c36 100644 --- a/package.nls.zh-cn.json +++ b/package.nls.zh-cn.json @@ -24,5 +24,6 @@ "java.action.changeBaseType": "基于此类型", "java.project.createModuleInfo.command": "创建 module-info.java", "java.clean.sharedIndexes": "清理共享的索引文件", - "java.action.filesExplorerPasteAction": "将剪贴板文本粘贴到文件中" + "java.action.filesExplorerPasteAction": "将剪贴板文本粘贴到文件中", + "java.action.doCleanup": "执行清理操作" } diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json index 43ca820ce..808fc1d97 100644 --- a/package.nls.zh-tw.json +++ b/package.nls.zh-tw.json @@ -23,5 +23,6 @@ "java.action.showSubtypeHierarchy": "顯示子類別階層結構", "java.action.changeBaseType": "以此型別為基礎", "java.project.createModuleInfo.command": "創建 module-info.java", - "java.action.filesExplorerPasteAction": "將剪貼簿文字貼到文件中" + "java.action.filesExplorerPasteAction": "將剪貼簿文字貼到文件中", + "java.action.doCleanup": "執行清理操作" } \ No newline at end of file diff --git a/src/commands.ts b/src/commands.ts index ebf8eae3d..8362f5045 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -183,6 +183,7 @@ export namespace Commands { * Organize imports silently. */ export const ORGANIZE_IMPORTS_SILENTLY = "java.edit.organizeImports"; + export const MANUAL_CLEANUP = "java.action.doCleanup"; /** * Handle a paste event. */ diff --git a/src/protocol.ts b/src/protocol.ts index a8f605239..1786286ab 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -1,5 +1,6 @@ 'use strict'; +import { Command, Range } from 'vscode'; import { CodeActionParams, ExecuteCommandParams, @@ -13,7 +14,6 @@ import { WorkspaceEdit, WorkspaceSymbolParams, } from 'vscode-languageclient'; -import { Command, Range } from 'vscode'; /** * The message type. Copied from vscode protocol @@ -233,6 +233,10 @@ export namespace OrganizeImportsRequest { export const type = new RequestType('java/organizeImports'); } +export namespace CleanupRequest { + export const type = new RequestType('java/cleanup'); +} + export interface ImportCandidate { fullyQualifiedName: string; id: string; diff --git a/src/sourceAction.ts b/src/sourceAction.ts index c2acea150..6cc7e1c39 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -1,17 +1,37 @@ 'use strict'; -import { commands, window, ExtensionContext, ViewColumn, Uri, Disposable, workspace, TextEditorRevealType } from 'vscode'; +import { Disposable, ExtensionContext, TextEditorRevealType, Uri, ViewColumn, commands, window, workspace } from 'vscode'; import { CodeActionParams, WorkspaceEdit } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands } from './commands'; -import { ListOverridableMethodsRequest, AddOverridableMethodsRequest, CheckHashCodeEqualsStatusRequest, GenerateHashCodeEqualsRequest, -OrganizeImportsRequest, ImportCandidate, ImportSelection, GenerateToStringRequest, CheckToStringStatusRequest, VariableBinding, GenerateAccessorsRequest, CheckConstructorStatusRequest, GenerateConstructorsRequest, CheckDelegateMethodsStatusRequest, GenerateDelegateMethodsRequest, AccessorKind, AccessorCodeActionRequest, AccessorCodeActionParams } from './protocol'; +import { + AccessorCodeActionParams, + AccessorCodeActionRequest, + AccessorKind, + AddOverridableMethodsRequest, + CheckConstructorStatusRequest, + CheckDelegateMethodsStatusRequest, + CheckHashCodeEqualsStatusRequest, + CheckToStringStatusRequest, + GenerateAccessorsRequest, + GenerateConstructorsRequest, + GenerateDelegateMethodsRequest, + GenerateHashCodeEqualsRequest, + GenerateToStringRequest, + ImportCandidate, ImportSelection, + ListOverridableMethodsRequest, + CleanupRequest, + OrganizeImportsRequest, + VariableBinding +} from './protocol'; import { applyWorkspaceEdit } from './standardLanguageClient'; +import { getActiveLanguageClient } from './extension'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { registerOverrideMethodsCommand(languageClient, context); registerHashCodeEqualsCommand(languageClient, context); registerOrganizeImportsCommand(languageClient, context); + registerCleanupCommand(languageClient, context); registerChooseImportCommand(context); registerGenerateToStringCommand(languageClient, context); registerGenerateAccessorsCommand(languageClient, context); @@ -67,6 +87,15 @@ function registerOverrideMethodsCommand(languageClient: LanguageClient, context: })); } +function registerCleanupCommand(languageClient: LanguageClient, context: ExtensionContext): void { + // Only active when editorLangId == java + context.subscriptions.push(commands.registerCommand(Commands.MANUAL_CLEANUP, async () => { + const languageClient: LanguageClient | undefined = await getActiveLanguageClient(); + const workspaceEdit = await languageClient.sendRequest(CleanupRequest.type, languageClient.code2ProtocolConverter.asTextDocumentIdentifier(window.activeTextEditor.document)); + await applyWorkspaceEdit(workspaceEdit, languageClient); + })); +} + function registerHashCodeEqualsCommand(languageClient: LanguageClient, context: ExtensionContext): void { context.subscriptions.push(commands.registerCommand(Commands.HASHCODE_EQUALS_PROMPT, async (params: CodeActionParams) => { const result = await languageClient.sendRequest(CheckHashCodeEqualsStatusRequest.type, params); From 176339e9b2fdb9d360bff9fb734b005f685c388d Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 7 Feb 2024 16:23:55 +0100 Subject: [PATCH 443/708] Jump to specific position when clicking on Javadoc link Signed-off-by: Fred Bricon --- src/extension.ts | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 4e5854cd0..6c60d0efa 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,7 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -30,7 +30,6 @@ import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils'; -import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; @@ -39,6 +38,7 @@ import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; +import glob = require('glob'); const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -399,7 +399,16 @@ export async function activate(context: ExtensionContext): Promise context.subscriptions.push(commands.registerCommand(Commands.OPEN_FORMATTER, async () => openFormatter(context.extensionPath))); context.subscriptions.push(commands.registerCommand(Commands.OPEN_FILE, async (uri: string) => { const parsedUri = Uri.parse(uri); - await window.showTextDocument(parsedUri); + const editor = await window.showTextDocument(parsedUri); + // Reveal the document at the specified line, if possible (e.g. jumping to a specific javadoc method). + if (editor && parsedUri.scheme === 'jdt' && parsedUri.fragment) { + const line = parseInt(parsedUri.fragment); + if (isNaN(line) || line < 1 || line > editor.document.lineCount) { + return; + } + const range = editor.document.lineAt(line -1).range; + editor.revealRange(range, TextEditorRevealType.AtTop); + } })); context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); From da501cdc2b3c644e09f90b4cebda2ef79122b2b3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 8 Feb 2024 12:31:08 -0500 Subject: [PATCH 444/708] Dynamically remove the Equinox launcher fragment for macOS x86_64. Signed-off-by: Roland Grunberg --- src/extension.ts | 16 ++++++++++++++-- src/javaServerStarter.ts | 13 ++++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 6c60d0efa..87af408ef 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -5,6 +5,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; +import * as semver from 'semver'; import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; @@ -13,7 +14,7 @@ import { ClientErrorHandler } from './clientErrorHandler'; import { Commands, CommandTitle } from './commands'; import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; -import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable } from './javaServerStarter'; +import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64 } from './javaServerStarter'; import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -30,6 +31,7 @@ import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils'; +import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; @@ -38,7 +40,6 @@ import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; -import glob = require('glob'); const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -139,6 +140,17 @@ export async function activate(context: ExtensionContext): Promise cleanJavaWorkspaceStorage(); + // https://github.com/redhat-developer/vscode-java/issues/3484 + if (process.platform === 'darwin' && process.arch === 'x64') { + try { + if (semver.lt(os.release(), '20.0.0')) { + removeEquinoxFragmentOnDarwinX64(context); + } + } catch (error) { + // do nothing + } + } + return requirements.resolveRequirements(context).catch(error => { // show error window.showErrorMessage(error.message, error.label).then((selection) => { diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index c69d334e2..042792da2 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -1,5 +1,6 @@ import * as fs from 'fs'; +import * as fse from 'fs-extra'; import * as glob from 'glob'; import * as net from 'net'; import * as os from 'os'; @@ -9,7 +10,7 @@ import { Executable, ExecutableOptions, StreamInfo, TransportKind } from 'vscode import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; -import { getJavaagentFlag, getJavaEncoding, getKey, isInWorkspaceFolder, IS_WORKSPACE_VMARGS_ALLOWED } from './settings'; +import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils'; // eslint-disable-next-line no-var @@ -316,3 +317,13 @@ export function parseVMargs(params: any[], vmargsLine: string) { } }); } + +export function removeEquinoxFragmentOnDarwinX64(context: ExtensionContext) { + // https://github.com/redhat-developer/vscode-java/issues/3484 + const extensionPath = context.extensionPath; + const matches = new glob.GlobSync(`${extensionPath}/server/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64*.jar`).found; + for (const fragment of matches) { + fse.removeSync(fragment); + logger.info(`Removing Equinox launcher fragment : ${fragment}`); + } +} From 9736579b6837581098e17b999d1f78768af35532 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 14 Feb 2024 00:06:11 -0500 Subject: [PATCH 445/708] Changelog for 1.28.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 82aaca592..9014262ba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 1.28.0 (February 15th, 2024) + * enhancement - Unnamed classes & instance `main` methods (Java 21) preview support. See [JLS#3042](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3042). + * enhancement - Add support for activating cleanup actions through keyboard shortcut. See [#3424](https://github.com/redhat-developer/vscode-java/issues/3424). + * enhancement - Jump to specific position of `.class` when clicking on Javadoc link. See [#3490](https://github.com/redhat-developer/vscode-java/pull/3490). + * bug fix - Fix startup failure on macOS (x64) 10.15 or older. See [#3484](https://github.com/redhat-developer/vscode-java/issues/3484). + * bug fix - Support Gradle 8.5 with Java 21. See [#3470](https://github.com/redhat-developer/vscode-java/issues/3470). + ## 1.27.0 (February 1st, 2024) * enhancement - Make the server status bar item more user friendly. See [#3473](https://github.com/redhat-developer/vscode-java/issues/3473). * enhancement - Support syntax highlight for embedded HTML. See [#3465](https://github.com/redhat-developer/vscode-java/pull/3465). From 4e185c3fac87f028f0d795cb430d4feb13b20b84 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Feb 2024 10:08:26 -0500 Subject: [PATCH 446/708] Re-release 1.28.0 as 1.28.1 due to partial publishing failure. - redhat.java 1.28.0 (generic) failed to publish due to request timeout Signed-off-by: Roland Grunberg --- CHANGELOG.md | 2 +- README.md | 2 +- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9014262ba..133986e5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.28.0 (February 15th, 2024) +## 1.28.1 (February 15th, 2024) * enhancement - Unnamed classes & instance `main` methods (Java 21) preview support. See [JLS#3042](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3042). * enhancement - Add support for activating cleanup actions through keyboard shortcut. See [#3424](https://github.com/redhat-developer/vscode-java/issues/3424). * enhancement - Jump to specific position of `.class` when clicking on Javadoc link. See [#3490](https://github.com/redhat-developer/vscode-java/pull/3490). diff --git a/README.md b/README.md index 7e996aee8..b470d4407 100644 --- a/README.md +++ b/README.md @@ -241,7 +241,7 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. -New in 1.28.0 +New in 1.28.1 * `java.cleanup.actions`: The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. * `java.saveActions.cleanup`: Enable/disable cleanup actions on save. diff --git a/package-lock.json b/package-lock.json index dc8fb0b36..d2db47751 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.28.0", + "version": "1.28.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.28.0", + "version": "1.28.1", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 309be1c46..b9d60938a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.28.0", + "version": "1.28.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 0919d62cf33638db0fe23b943d440bcde3c8e116 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Feb 2024 12:44:05 -0500 Subject: [PATCH 447/708] Upversion to 1.29.0 Signed-off-by: Roland Grunberg --- README.md | 5 ++--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b470d4407..f9d4808ab 100644 --- a/README.md +++ b/README.md @@ -220,6 +220,8 @@ The following settings are supported: * `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. * `java.compile.nullAnalysis.mode`: Specify how to enable the annotation-based null analysis. Supported values are `disabled` (disable the null analysis), `interactive` (asks when null annotation types are detected), `automatic` (automatically enable null analysis when null annotation types are detected). Defaults to `interactive`. * `java.cleanup.actionsOnSave`: **Deprecated, please use 'java.cleanup.actions' instead.** The list of clean ups to be run on the current document when it's saved. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. +* `java.cleanup.actions`: The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. +* `java.saveActions.cleanup`: Enable/disable cleanup actions on save. * `java.import.gradle.annotationProcessing.enabled`: Enable/disable the annotation processing on Gradle projects and delegate to JDT APT. Only works for Gradle 5.2 or higher. * `java.sharedIndexes.enabled`: [Experimental] Specify whether to share indexes between different workspaces. Defaults to `auto` and the shared indexes is automatically enabled in Visual Studio Code - Insiders. - auto @@ -241,9 +243,6 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. -New in 1.28.1 -* `java.cleanup.actions`: The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. [Click here](document/_java.learnMoreAboutCleanUps.md#java-clean-ups) to learn more about what each clean up does. -* `java.saveActions.cleanup`: Enable/disable cleanup actions on save. Semantic Highlighting =============== diff --git a/package-lock.json b/package-lock.json index d2db47751..b01cb4aaa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.28.1", + "version": "1.29.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.28.1", + "version": "1.29.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index b9d60938a..83a3a2db5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.28.1", + "version": "1.29.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From d004bda158b74097fe5dd19e3dfa50d5dbda1c7c Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Tue, 23 Jan 2024 14:38:25 -0500 Subject: [PATCH 448/708] Add setting to collapse completion items for overloaded methods. Signed-off-by: Hope Hadfield --- README.md | 2 ++ USAGE_DATA.md | 2 +- package.json | 6 ++++++ src/telemetry.ts | 8 ++++---- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index f9d4808ab..dfb98ab68 100644 --- a/README.md +++ b/README.md @@ -243,6 +243,8 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. +New in 1.29.0 +* `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Semantic Highlighting =============== diff --git a/USAGE_DATA.md b/USAGE_DATA.md index fb5c3a6e9..9d17a5297 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -18,7 +18,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The number of unresolved imports within the project(s) * Whether there is a mismatch between the project's requested source level, and the JDK used for the project (eg. true) * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. - * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` + * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors * The number of results (eg. 20), whether an error occured (eg. false), and duration (in milliseconds) when code assist is activated diff --git a/package.json b/package.json index 83a3a2db5..20eba3f79 100644 --- a/package.json +++ b/package.json @@ -1096,6 +1096,12 @@ "default": false, "description": "Enable/disable to show the description in signature help.", "scope": "window" + }, + "java.completion.collapseCompletionItems": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable the collapse of overloaded methods in completion items. Overrides `#java.completion.guessMethodArguments#`.", + "scope": "window" } } }, diff --git a/src/telemetry.ts b/src/telemetry.ts index 64a019075..86b84c756 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -66,10 +66,10 @@ export namespace Telemetry { // settings whose values we can record const SETTINGS_BASIC = [ "java.quickfix.showAt", "java.symbols.includeSourceMethodDeclarations", - "java.completion.guessMethodArguments", "java.cleanup.actionsOnSave", - "java.completion.postfix.enabled", "java.sharedIndexes.enabled", - "java.inlayHints.parameterNames.enabled", "java.server.launchMode", - "java.autobuild.enabled" + "java.completion.collapseCompletionItems", "java.completion.guessMethodArguments", + "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", + "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", + "java.server.launchMode", "java.autobuild.enabled" ]; // settings where we only record their existence const SETTINGS_CUSTOM = [ From db77113c796503cdeb362b02b9a39a839cab9ab1 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 23 Feb 2024 11:00:18 -0500 Subject: [PATCH 449/708] Report errors of type dtree.ObjectNotFoundException as 'java.ls.error'. - Report language server errors relating to 'org.eclipse.core.internal.dtree.ObjectNotFoundException', coming from 'telemetry/event' as 'java.ls.error'. Signed-off-by: Roland Grunberg --- USAGE_DATA.md | 1 + src/standardLanguageClient.ts | 5 +++++ src/telemetry.ts | 1 + 3 files changed, 7 insertions(+) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index 9d17a5297..feff8279d 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -16,6 +16,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The total size (in bytes) of libraries that were indexed after project initialization * The number of error markers on the project(s) * The number of unresolved imports within the project(s) + * Errors relating to running the language server, such as the message & stacktrace * Whether there is a mismatch between the project's requested source level, and the JDK used for the project (eg. true) * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 8183bc57d..162c61625 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -338,6 +338,11 @@ export class StandardLanguageClient { apiManager.fireTraceEvent(e); if (e.name === Telemetry.SERVER_INITIALIZED_EVT) { return Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, e.properties); + } else if (e.name === Telemetry.LS_ERROR) { + const exception: string = e?.properties.exception; + if (exception !== undefined && exception.includes("dtree.ObjectNotFoundException")) { + return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + } } }); diff --git a/src/telemetry.ts b/src/telemetry.ts index 86b84c756..4ada82877 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -9,6 +9,7 @@ export namespace Telemetry { export const STARTUP_EVT = "startup"; export const COMPLETION_EVENT = "textCompletion"; export const SERVER_INITIALIZED_EVT = "java.workspace.initialized"; + export const LS_ERROR = "java.ls.error"; let telemetryManager: TelemetryService = null; let serverInitializedReceived = false; From b041ca4f4db4ae921abc76e0bb1dbc0029cf19ee Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Tue, 13 Feb 2024 22:06:33 +0100 Subject: [PATCH 450/708] Apply selected in Generate ToString() --- src/sourceAction.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/sourceAction.ts b/src/sourceAction.ts index 6cc7e1c39..a0009a89b 100644 --- a/src/sourceAction.ts +++ b/src/sourceAction.ts @@ -4,6 +4,7 @@ import { Disposable, ExtensionContext, TextEditorRevealType, Uri, ViewColumn, co import { CodeActionParams, WorkspaceEdit } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands } from './commands'; +import { getActiveLanguageClient } from './extension'; import { AccessorCodeActionParams, AccessorCodeActionRequest, @@ -13,6 +14,7 @@ import { CheckDelegateMethodsStatusRequest, CheckHashCodeEqualsStatusRequest, CheckToStringStatusRequest, + CleanupRequest, GenerateAccessorsRequest, GenerateConstructorsRequest, GenerateDelegateMethodsRequest, @@ -20,12 +22,10 @@ import { GenerateToStringRequest, ImportCandidate, ImportSelection, ListOverridableMethodsRequest, - CleanupRequest, OrganizeImportsRequest, VariableBinding } from './protocol'; import { applyWorkspaceEdit } from './standardLanguageClient'; -import { getActiveLanguageClient } from './extension'; export function registerCommands(languageClient: LanguageClient, context: ExtensionContext) { registerOverrideMethodsCommand(languageClient, context); @@ -215,7 +215,7 @@ function registerGenerateToStringCommand(languageClient: LanguageClient, context const fieldItems = result.fields.map((field) => { return { label: `${field.name}: ${field.type}`, - picked: true, + picked: field.isSelected, originalField: field }; }); From e0dadebf083c80fa8e69cc7c0dc340f06da6ab94 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Feb 2024 15:26:57 -0500 Subject: [PATCH 451/708] Update GitHub Actions to v4 where possible. Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 6 +++--- .github/workflows/release.yml | 22 +++++++++++----------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index b89a15752..0e72b06fe 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -10,13 +10,13 @@ jobs: os: [macos-latest, ubuntu-latest] steps: - name: Check Out Code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set Up NodeJS - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '18' - name: Set Up Java - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f6b6276ee..09db0915f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,12 +38,12 @@ jobs: outputs: repo-cache-hit: ${{ steps.cache-last-commit.outputs.cache-hit }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: 'eclipse-jdtls/eclipse.jdt.ls' fetch-depth: 2 path: eclipse.jdt.ls - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: repository: 'redhat-developer/vscode-java' fetch-depth: 2 @@ -56,7 +56,7 @@ jobs: git rev-parse HEAD >> ../lastCommit - name: Check New Changes id: cache-last-commit - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: lastCommit key: lastCommit-${{ hashFiles('lastCommit') }} @@ -67,11 +67,11 @@ jobs: steps: - name: Checkout JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" - uses: actions/checkout@v2 + uses: actions/checkout@v4 with: repository: eclipse-jdtls/eclipse.jdt.ls - name: Cache Maven local repository - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: | ~/.m2/repository @@ -79,7 +79,7 @@ jobs: !~/.m2/repository/org/eclipse/jdt/ls key: maven-local-${{ hashFiles('**/pom.xml') }} - name: Set Up Java - uses: actions/setup-java@v2 + uses: actions/setup-java@v4 with: java-version: '17' distribution: 'adopt' @@ -90,9 +90,9 @@ jobs: mkdir ../staging cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging - name: Check Out VS Code Java - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set Up NodeJS - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '18' - name: Install NodeJS dependencies @@ -145,7 +145,7 @@ jobs: vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix ls -lash *.vsix - name: Upload VSIX Artifacts - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v4 with: name: vscode-java path: | @@ -169,14 +169,14 @@ jobs: needs: packaging-job steps: - name: Set Up NodeJS - uses: actions/setup-node@v2 + uses: actions/setup-node@v4 with: node-version: '18' - name: Install dependencies run: | npm install -g typescript "@vscode/vsce" "ovsx" - name: Download VSIX & JDT-LS - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 - name: Publish to VS Code Marketplace if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | From 7f89debd1508fb82511baf0f977ae1e27c0aa0c4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 Feb 2024 10:32:44 -0500 Subject: [PATCH 452/708] Add --skip-duplicate flag to vsce/ovsx in case re-release is necessary. - The most common case for this is some kind of failure in the marketplace to correctly respond to publishing one of platform specific artifacts, which fails the build (eg. timeout failure). Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 09db0915f..7ebfabbbb 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -181,13 +181,13 @@ jobs: if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do - vsce publish -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done - vsce publish -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - name: Publish to OpenVSX Registry if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }} run: | for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do - ovsx publish -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done - ovsx publish -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix From 78ed36320e8790a086394094506bdbd5febc7ae9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 16 Mar 2024 22:55:29 +0000 Subject: [PATCH 453/708] Bump follow-redirects from 1.15.4 to 1.15.6 Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.4 to 1.15.6. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.15.4...v1.15.6) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b01cb4aaa..d2b17a4ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4501,9 +4501,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", From b71d0ac40f4479428f2db2a8b3d8e197ea09e68c Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 18 Mar 2024 10:25:59 +0800 Subject: [PATCH 454/708] Open output channel as well when opening logs (#3531) Signed-off-by: Sheng Chen --- src/commands.ts | 4 ++-- src/extension.ts | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index 8362f5045..7bcfb4583 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -363,6 +363,6 @@ export namespace Commands { */ export namespace CommandTitle { export const OPEN_JAVA_SETTINGS = "$(settings-gear) Open Java Settings"; - export const OPEN_LOGS = "$(output) Open Logs..."; - export const CLEAN_WORKSPACE_CACHE = "$(trash) Clean Workspace Cache"; + export const OPEN_LOGS = "$(output) Open Logs"; + export const CLEAN_WORKSPACE_CACHE = "$(trash) Clean Workspace Cache..."; } diff --git a/src/extension.ts b/src/extension.ts index 87af408ef..dea040ab6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -366,7 +366,7 @@ export async function activate(context: ExtensionContext): Promise } items.push({ - label: `$(coffee) Java Status: ${status}`, + label: `$(coffee) Status: ${status}`, command: statusCommand, }, { label: "", @@ -830,6 +830,8 @@ async function openLogs() { await commands.executeCommand(Commands.OPEN_SERVER_LOG, ViewColumn.One); await commands.executeCommand(Commands.OPEN_SERVER_STDOUT_LOG, ViewColumn.One); await commands.executeCommand(Commands.OPEN_SERVER_STDERR_LOG, ViewColumn.One); + const client = await getActiveLanguageClient(); + client?.outputChannel.show(true); } function openLogFile(logFile, openingFailureWarning: string, column: ViewColumn = ViewColumn.Active): Thenable { From b9500ba574dca68e34a0d3439e30486a25f9a752 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Mon, 18 Mar 2024 18:29:20 -0400 Subject: [PATCH 455/708] Introduce setting to automatically rename file to type name on save (#3521) Signed-off-by: Hope Hadfield --- package.json | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 20eba3f79..dabd99367 100644 --- a/package.json +++ b/package.json @@ -1235,10 +1235,13 @@ "lambdaExpressionFromAnonymousClass", "lambdaExpression", "switchExpression", - "tryWithResource" + "tryWithResource", + "renameFileToType" ] }, - "default": [], + "default": [ + "renameFileToType" + ], "scope": "window", "order": 10 }, From 8e71cb28ccad18d35b20c682ae8cc869e178da74 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 22 Mar 2024 08:51:47 +0800 Subject: [PATCH 456/708] Simplify the server status item click action (#3537) Signed-off-by: Sheng Chen --- src/extension.ts | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index dea040ab6..42ceff634 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -358,21 +358,13 @@ export async function activate(context: ExtensionContext): Promise // Register commands here to make it available even when the language client fails context.subscriptions.push(commands.registerCommand(Commands.OPEN_STATUS_SHORTCUT, async (status: string) => { const items: ShortcutQuickPickItem[] = []; - let statusCommand: string; if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { - statusCommand = "workbench.panel.markers.view.focus"; + commands.executeCommand("workbench.panel.markers.view.focus"); } else { - statusCommand = Commands.SHOW_SERVER_TASK_STATUS; + commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS); } items.push({ - label: `$(coffee) Status: ${status}`, - command: statusCommand, - }, { - label: "", - kind: QuickPickItemKind.Separator, - command: "", - }, { label: CommandTitle.OPEN_JAVA_SETTINGS, command: "workbench.action.openSettings", args: ["java"], @@ -384,7 +376,10 @@ export async function activate(context: ExtensionContext): Promise command: Commands.CLEAN_WORKSPACE }); - const choice = await window.showQuickPick(items); + const choice = await window.showQuickPick(items, { + ignoreFocusOut: true, + placeHolder: "Press 'ESC' to close." + }); if (!choice) { return; } From 07e4100250d6fd5b68b7ff5d341d0f6077c920ba Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 22 Mar 2024 10:27:52 -0400 Subject: [PATCH 457/708] Adopt the Lombok 1.18.32 release. Signed-off-by: Roland Grunberg --- gulpfile.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index f2bc8072c..08e633557 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,18 +127,14 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.31'; + const lombokVersion = '1.18.32'; // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/lombok-edge.jar`; + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; download(lombokUrl) .pipe(gulp.dest("./lombok/")) .on("error", reject) - .on("end", () => { - fse.renameSync("./lombok/lombok-edge.jar", `./lombok/lombok-${lombokVersion}.jar`); - resolve(); - }); + .on("end", resolve); }); - // TODO: Switch to stable version once lombok 1.18.31 is released. done(); }); From 0ad594002abf1a5c7edefc35d0fc84ac184fa56e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 26 Mar 2024 13:58:18 -0400 Subject: [PATCH 458/708] Provide support for Java 22. Signed-off-by: Roland Grunberg --- README.md | 6 +++--- package.json | 3 ++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dfb98ab68..3140ff8b4 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 21 +* Supports code from Java 1.5 to Java 22 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-21", - "path": "/path/to/jdk-21", + "name": "JavaSE-22", + "path": "/path/to/jdk-22", "default": true }, ] diff --git a/package.json b/package.json index dabd99367..10cdb5331 100644 --- a/package.json +++ b/package.json @@ -891,7 +891,8 @@ "JavaSE-18", "JavaSE-19", "JavaSE-20", - "JavaSE-21" + "JavaSE-21", + "JavaSE-22" ], "description": "Java Execution Environment name. Must be unique." }, From d5887943048cc773e09307a5f09117ec5e421fdc Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Thu, 28 Mar 2024 09:22:04 +0800 Subject: [PATCH 459/708] Fix the focus issue of the java shortcuts Signed-off-by: Sheng Chen --- src/extension.ts | 7 ++----- src/serverTaskPresenter.ts | 4 ++-- src/standardLanguageClient.ts | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 42ceff634..a41222feb 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -361,7 +361,7 @@ export async function activate(context: ExtensionContext): Promise if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { commands.executeCommand("workbench.panel.markers.view.focus"); } else { - commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS); + commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS, true); } items.push({ @@ -376,10 +376,7 @@ export async function activate(context: ExtensionContext): Promise command: Commands.CLEAN_WORKSPACE }); - const choice = await window.showQuickPick(items, { - ignoreFocusOut: true, - placeHolder: "Press 'ESC' to close." - }); + const choice = await window.showQuickPick(items); if (!choice) { return; } diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 94e95343e..1dcaa28b7 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -8,12 +8,12 @@ import { getJavaConfiguration } from "./utils"; const JAVA_SERVER_TASK_PRESENTER_TASK_NAME = "Java Build Status"; export namespace serverTaskPresenter { - export async function presentServerTaskView() { + export async function presentServerTaskView(preserveFocus?: boolean) { const execution = await getPresenterTaskExecution(); const terminals = window.terminals; const presenterTerminals = terminals.filter(terminal => terminal.name.indexOf(execution.task.name) >= 0); if (presenterTerminals.length > 0) { - presenterTerminals[0].show(); + presenterTerminals[0].show(preserveFocus); } activationProgressNotification.hide(); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 162c61625..51ba595fc 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -698,7 +698,7 @@ export class StandardLanguageClient { })); context.subscriptions.push(commands.registerCommand(Commands.OPEN_OUTPUT, () => this.languageClient.outputChannel.show(ViewColumn.Three))); - context.subscriptions.push(commands.registerCommand(Commands.SHOW_SERVER_TASK_STATUS, () => serverTaskPresenter.presentServerTaskView())); + context.subscriptions.push(commands.registerCommand(Commands.SHOW_SERVER_TASK_STATUS, (preserveFocus?: boolean) => serverTaskPresenter.presentServerTaskView(preserveFocus))); } public start(): Promise { From 93e0a426864ae83d4ceb18d997643c6822192284 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Mon, 1 Apr 2024 13:28:02 +0800 Subject: [PATCH 460/708] Add contribution point for java shortcuts (#3546) Signed-off-by: Sheng Chen --- package.json | 15 +++++++++++++ schemas/package.schema.json | 21 ++++++++++++++++++ src/extension.ts | 20 +++++++---------- src/plugin.ts | 44 ++++++++++++++++++++++++++++++++++++- 4 files changed, 87 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 10cdb5331..bc24a0191 100644 --- a/package.json +++ b/package.json @@ -83,6 +83,21 @@ "buildFileNames": ["build.gradle", "settings.gradle", "build.gradle.kts", "settings.gradle.kts"] } ], + "javaShortcuts": [ + { + "title": "$(settings-gear) Open Java Settings", + "command": "workbench.action.openSettings", + "arguments": ["java"] + }, + { + "title": "$(output) Open Logs", + "command": "java.open.logs" + }, + { + "title": "$(trash) Clean Workspace Cache...", + "command": "java.clean.workspace" + } + ], "semanticTokenTypes": [ { "id": "annotation", diff --git a/schemas/package.schema.json b/schemas/package.schema.json index 6b24ea87a..a74bd2a10 100644 --- a/schemas/package.schema.json +++ b/schemas/package.schema.json @@ -41,6 +41,27 @@ } } } + }, + "javaShortcuts": { + "type": "array", + "description": "Shortcuts to be listed when clicking server status bar item.", + "items": { + "type": "object", + "properties": { + "title": { + "description": "The title of the quick pick item.", + "type": "string" + }, + "command": { + "description": "The command to be executed when the quick pick is selected.", + "type": "string" + }, + "arguments": { + "description": "The arguments to be passed to the command.", + "type": "array" + } + } + } } } } diff --git a/src/extension.ts b/src/extension.ts index a41222feb..642122158 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -19,7 +19,7 @@ import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { OutputInfoCollector } from './outputInfoCollector'; -import { collectJavaExtensions, getBundlesToReload, isContributedPartUpdated } from './plugin'; +import { collectJavaExtensions, getBundlesToReload, getShortcuts, IJavaShortcut, isContributedPartUpdated } from './plugin'; import { registerClientProviders } from './providerDispatcher'; import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; @@ -364,17 +364,13 @@ export async function activate(context: ExtensionContext): Promise commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS, true); } - items.push({ - label: CommandTitle.OPEN_JAVA_SETTINGS, - command: "workbench.action.openSettings", - args: ["java"], - }, { - label: CommandTitle.OPEN_LOGS, - command: Commands.OPEN_LOGS, - }, { - label: CommandTitle.CLEAN_WORKSPACE_CACHE, - command: Commands.CLEAN_WORKSPACE - }); + items.push(...getShortcuts().map((shortcut: IJavaShortcut) => { + return { + label: shortcut.title, + command: shortcut.command, + args: shortcut.arguments, + }; + })); const choice = await window.showQuickPick(items); if (!choice) { diff --git a/src/plugin.ts b/src/plugin.ts index 2ba87b479..d35dcdaaf 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -8,6 +8,46 @@ import { extensions } from 'vscode'; export let existingExtensions: Array = []; export let buildFilePatterns: Array = []; +let javaShortcuts: Array | undefined; +export interface IJavaShortcut { + title: string; + command: string; + arguments?: any[]; +} +export function getShortcuts(): Array { + if (javaShortcuts === undefined) { + javaShortcuts = []; + const selfOwnedShortcuts = getShortcutsRegistration(extensions.getExtension(EXTENSION_ID)); + if (selfOwnedShortcuts) { + javaShortcuts.push(...selfOwnedShortcuts); + } + for (const extension of extensions.all) { + if (extension.id === EXTENSION_ID) { + continue; + } + const shortcuts = getShortcutsRegistration(extension); + if (shortcuts) { + javaShortcuts.push(...shortcuts); + } + } + } + return javaShortcuts; +} + +function getShortcutsRegistration(extension: vscode.Extension): Array | undefined { + if (!extension) { + return undefined; + } + const contributesSection = extension.packageJSON['contributes']; + if (contributesSection) { + const shortcuts = contributesSection['javaShortcuts']; + if (shortcuts && Array.isArray(shortcuts) && shortcuts.length) { + return shortcuts; + } + } + return undefined; +} + export function collectJavaExtensions(extensions: readonly vscode.Extension[]): string[] { const result = []; if (extensions && extensions.length) { @@ -123,4 +163,6 @@ export interface IBuildTool { function isValidBuildTypeConfiguration(buildType: IBuildTool): boolean { return !!buildType.displayName && !!buildType.buildFileNames; -} \ No newline at end of file +} + +const EXTENSION_ID = 'redhat.java'; From 293b6037de2eb8fc70e6d8ce01188baa8361aa99 Mon Sep 17 00:00:00 2001 From: Mavaddat Javid <5055400+mavaddat@users.noreply.github.com> Date: Tue, 26 Mar 2024 16:24:14 -0400 Subject: [PATCH 461/708] Regex update and sealed removed. - Make `.` optional in the regex. Also, remove `sealed` class tests. --- .github/scripts/check_and_update_jdk.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/scripts/check_and_update_jdk.py b/.github/scripts/check_and_update_jdk.py index 382fb942c..0b0cab8c2 100644 --- a/.github/scripts/check_and_update_jdk.py +++ b/.github/scripts/check_and_update_jdk.py @@ -9,7 +9,7 @@ # Query the Oracle website for the latest JDK version response = requests.get('http://javadl-esd-secure.oracle.com/update/baseline.version') -latest_jdk = re.search(r'(?P\d+)\.', response.text) +latest_jdk = re.search(r'(?P\d+)\.?', response.text) if latest_jdk is None: print('Failed to retrieve latest JDK version') exit(1) @@ -33,10 +33,6 @@ uri_base = 'https://ci.eclipse.org/ls/job/jdt-ls-master/lastCompletedBuild/testReport/org.eclipse.jdt.ls.core.internal.{package}/{java_class}/{method}/api/python' # Define the test URLs to check using the template and list comprehension tests = [ - uri_base.format(package='correction', java_class='ModifierCorrectionsQuickFixTest', method=m) for m in ['testAddSealedMissingClassModifierProposal', 'testAddSealedAsDirectSuperClass', 'testAddPermitsToDirectSuperClass'] - ] + [ - uri_base.format(package='correction', java_class='UnresolvedTypesQuickFixTest', method='testTypeInSealedTypeDeclaration') - ] + [ uri_base.format(package='managers', java_class=c, method=m) for c, m in [('EclipseProjectImporterTest', 'testPreviewFeaturesDisabledByDefault'), ('InvisibleProjectImporterTest', 'testPreviewFeaturesEnabledByDefault'), ('MavenProjectImporterTest', f'testJava{latest_jdk}Project')] ] @@ -61,11 +57,11 @@ # Replace the ~ with current_jdk readme_ver_pattern = re.sub('~', current_jdk, readme_ver_pattern) - + # Write this to a file for the create-pull-request workflow with open('latest_jdk.txt', 'w') as f: f.write(latest_jdk) - + # Replace the current supported JDK version with the latest JDK version readme = re.sub(readme_ver_pattern, latest_jdk, readme) From ddb12a744dc7b794979142e2c1d4c0779462b7f0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 2 Apr 2024 19:25:08 -0400 Subject: [PATCH 462/708] Changelog for 1.29.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 133986e5f..99a0e6adb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Change Log +## 1.29.0 (April 3rd, 2024) + * enhancement - Provide support for Java 22. See [#3538](https://github.com/redhat-developer/vscode-java/issues/3538). + * enhancement - Simplify the server status item click action & add contribution point. See [#3537](https://github.com/redhat-developer/vscode-java/pull/3537), [#3548](https://github.com/redhat-developer/vscode-java/pull/3548), [#3546](https://github.com/redhat-developer/vscode-java/pull/3546). + * enhancement - Add setting to group completion items representing overloaded methods together. See [#3492](https://github.com/redhat-developer/vscode-java/pull/3492). + * enhancement - Renaming primary type declaration should update source file name on save. See [#3408](https://github.com/redhat-developer/vscode-java/issues/3408). + * enhancement - Support updating whole classpath of the project in delegate commands. See [JLS#3098](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3098). + * enhancement - Open output channel as well when opening logs. See [#3531](https://github.com/redhat-developer/vscode-java/pull/3531). + * enhancement - Read the server logs in order to discover early startup log messages. See [JLS#3106](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3106). + * enhancement - Report errors of type `dtree.ObjectNotFoundException` as `java.ls.error`. See [#3509](https://github.com/redhat-developer/vscode-java/pull/3509). + * bug fix - Signature help should display all overloaded methods. See [JLS#3052](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3052). + * bug fix - Fix issues with Unnamed classes (Java 21) (reference computation, code actions, compilation). See [JLS#3069](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3069), [JLS#3089](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3089), [JLS#3090](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3090). + * bug fix - Record Patterns may cause `VerifyError`. See [#3479](https://github.com/redhat-developer/vscode-java/issues/3479). + * bug fix - Support list of patterns in case statements (Java 21). See [JLS#3043](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3043). + * bug fix - Allow methods, inherited fields, inherited methods for `Generate toString()` code action. See [#2639](https://github.com/redhat-developer/vscode-java/issues/2639). + * bug fix - Update Buildship to 3.1.10, which fixes "Marker property value is too long". See [JLS#2424](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2424). + * bug fix - Set the `nullUncheckedConversion` setting to be ignored by default. See [#3501](https://github.com/redhat-developer/vscode-java/issues/3501). + * bug fix - Fix NPE when fetching the classpath of the project. See [JLS#3115](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3115). + * dependencies - Bump follow-redirects from 1.15.4 to 1.15.6. See [#3534](https://github.com/redhat-developer/vscode-java/pull/3534). + * build - Adopt the Lombok 1.18.32 release. See [#3543](https://github.com/redhat-developer/vscode-java/pull/3543). + * build - Update various GitHub reusable workflows to v4. See [#3519](https://github.com/redhat-developer/vscode-java/pull/3519). + * build - Update release version regular expression for `bump-jdk` workflow. See [#3552](https://github.com/redhat-developer/vscode-java/pull/3552). + ## 1.28.1 (February 15th, 2024) * enhancement - Unnamed classes & instance `main` methods (Java 21) preview support. See [JLS#3042](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3042). * enhancement - Add support for activating cleanup actions through keyboard shortcut. See [#3424](https://github.com/redhat-developer/vscode-java/issues/3424). From 29c95b8cbb3701fbc0a6f21d2050b8baf886526a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 3 Apr 2024 11:38:02 -0400 Subject: [PATCH 463/708] Upversion to 1.30.0 Signed-off-by: Roland Grunberg --- README.md | 4 +--- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 3140ff8b4..f1bf7a62b 100644 --- a/README.md +++ b/README.md @@ -242,9 +242,7 @@ The following settings are supported: - `manual`: Manually reload the sources of the open class files * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. - -New in 1.29.0 -* `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. +* `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. Semantic Highlighting =============== diff --git a/package-lock.json b/package-lock.json index d2b17a4ca..f41429311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.29.0", + "version": "1.30.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.29.0", + "version": "1.30.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index bc24a0191..735da79c3 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.29.0", + "version": "1.30.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 9bfd8a89b7f2259757999443adda0d5a7a505cc8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 3 Apr 2024 15:58:05 -0400 Subject: [PATCH 464/708] Fix tests in release workflow. - JDT-LS should be in place before tests run Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ebfabbbb..22ac10cdf 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -105,14 +105,21 @@ jobs: - name: Build vscode-java run: | npm install - npm run vscode:prepublish - npm run compile + - name: Prepare JDT-LS + run: | + rm -rf ./out + mkdir server/ + if [ -e jdt-language-server-*.tar.gz ]; then + tar -xf jdt-language-server-*.tar.gz -C server/ + else + tar -xf ../staging/jdt-language-server-*.tar.gz -C server/ + fi + echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV - name: Test vscode-java env: SKIP_COMMANDS_TEST: true - SKIP_CLASSPATH_TEST: true run: | - $(echo "xvfb-run --auto-servernum") npm run test --silent + xvfb-run --auto-servernum npm run test --silent continue-on-error: true - name: Clean tests run: npx gulp clean_test_folder @@ -124,16 +131,6 @@ jobs: run: | npx gulp prepare_pre_release echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV - - name: Prepare JDT-LS - run: | - rm -rf ./out - mkdir server/ - if [ -e jdt-language-server-*.tar.gz ]; then - tar -xf jdt-language-server-*.tar.gz -C server/ - else - tar -xf ../staging/jdt-language-server-*.tar.gz -C server/ - fi - echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV - name: Package vscode-java run: | platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") From e578b506363f50d4798e1d2c02b76727dedcb314 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Sat, 6 Apr 2024 00:50:37 -0400 Subject: [PATCH 465/708] Ensure 'workspace/willRenameFiles' is handled only by extension. - JDT-LS now respects the LSP Spec, and will respond to 'workspace/willRenameFiles' requests handled by vsc-languageserver-node - This extension performs the request manually in order to produce a prompt/dialog allowing a user to select which changes should be applied - To keep this behaviour, and prevent duplicate requests, we must prevent the client from advertising this option to the language server Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 51ba595fc..c0920438f 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -3,7 +3,7 @@ import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; -import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit } from "vscode-languageclient"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, StaticFeature, ClientCapabilities, FeatureState } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; @@ -107,6 +107,7 @@ export class StandardLanguageClient { // Create the language client and start the client. this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions, DEBUG); + this.languageClient.registerFeature(new DisableWillRenameFeature()); this.registerCommandsForStandardServer(context, jdtEventEmitter); fileEventHandler.registerFileEventHandlers(this.languageClient, context); @@ -871,4 +872,21 @@ export async function applyWorkspaceEdit(workspaceEdit: WorkspaceEdit, languageC } else { return Promise.resolve(true); } +} + +/** + * 'workspace/willRenameFiles' already handled so we need to disable it. + * @see fileEventHandler.registerFileEventHandlers + */ +export class DisableWillRenameFeature implements StaticFeature { + fillClientCapabilities(capabilities: ClientCapabilities): void { + capabilities.workspace.fileOperations.willRename = false; + } + getState(): FeatureState { + return null; + } + clear(): void {} + fillInitializeParams?: () => void; + preInitialize?: () => void; + initialize(): void {} } \ No newline at end of file From 3ada59c963e6bb029da1a626927cdbb8c51d4bf0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 9 Apr 2024 16:30:00 -0400 Subject: [PATCH 466/708] Adjust the document paste handling provider. - provideDocumentPasteEdits API was updated in VS Code 1.88.0 Signed-off-by: Roland Grunberg --- src/pasteEventHandler.ts | 17 ++-- vscode.proposed.documentPaste.d.ts | 153 ++++++++++++++++++++++++++--- 2 files changed, 147 insertions(+), 23 deletions(-) diff --git a/src/pasteEventHandler.ts b/src/pasteEventHandler.ts index cff25bd4f..6f6648830 100644 --- a/src/pasteEventHandler.ts +++ b/src/pasteEventHandler.ts @@ -1,4 +1,4 @@ -import { CancellationToken, commands, DataTransfer, DocumentPasteEdit as VDocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteProviderMetadata, ExtensionContext, languages, Range, TextDocument, window } from "vscode"; +import { CancellationToken, commands, DataTransfer, DocumentPasteEdit as VDocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteProviderMetadata, ExtensionContext, languages, Range, TextDocument, window, DocumentPasteEditContext, ProviderResult, DocumentPasteEdit } from "vscode"; import { FormattingOptions, Location, WorkspaceEdit as PWorkspaceEdit } from "vscode-languageclient"; import { LanguageClient } from "vscode-languageclient/node"; import { Commands } from "./commands"; @@ -6,7 +6,8 @@ import { JAVA_SELECTOR } from "./standardLanguageClient"; const TEXT_MIMETYPE: string = "text/plain"; const MIMETYPES: DocumentPasteProviderMetadata = { - pasteMimeTypes: [TEXT_MIMETYPE] + pasteMimeTypes: [TEXT_MIMETYPE], + providedPasteEditKinds: [] }; /** @@ -61,7 +62,7 @@ class PasteEditProvider implements DocumentPasteEditProvider { } } - async provideDocumentPasteEdits(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): Promise { + async provideDocumentPasteEdits?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, context: DocumentPasteEditContext, token: CancellationToken): Promise { const insertText: string = await dataTransfer.get(TEXT_MIMETYPE).asString(); @@ -92,10 +93,12 @@ class PasteEditProvider implements DocumentPasteEditProvider { try { const pasteResponse: PDocumentPasteEdit = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.HANDLE_PASTE_EVENT, JSON.stringify(pasteEventParams)); if (pasteResponse) { - return { - insertText: pasteResponse.insertText, - additionalEdit: pasteResponse.additionalEdit ? await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined - } as VDocumentPasteEdit; + return [ + { + insertText: pasteResponse.insertText, + additionalEdit: pasteResponse.additionalEdit ? await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined + } + ] as DocumentPasteEdit[]; } } catch (e) { // Do nothing diff --git a/vscode.proposed.documentPaste.d.ts b/vscode.proposed.documentPaste.d.ts index 57ea908f8..627c8dcc1 100644 --- a/vscode.proposed.documentPaste.d.ts +++ b/vscode.proposed.documentPaste.d.ts @@ -8,42 +8,107 @@ declare module 'vscode' { // https://github.com/microsoft/vscode/issues/30066/ /** - * Provider invoked when the user copies and pastes code. + * The reason why paste edits were requested. */ - interface DocumentPasteEditProvider { + export enum DocumentPasteTriggerKind { + /** + * Pasting was requested as part of a normal paste operation. + */ + Automatic = 0, + + /** + * Pasting was requested by the user with the `paste as` command. + */ + PasteAs = 1, + } + + /** + * Additional information about the paste operation. + */ + + export interface DocumentPasteEditContext { + /** + * Requested kind of paste edits to return. + */ + readonly only: DocumentPasteEditKind | undefined; + + /** + * The reason why paste edits were requested. + */ + readonly triggerKind: DocumentPasteTriggerKind; + } + + /** + * Provider invoked when the user copies or pastes in a {@linkcode TextDocument}. + */ + interface DocumentPasteEditProvider { /** * Optional method invoked after the user copies text in a file. * - * During {@link prepareDocumentPaste}, an extension can compute metadata that is attached to - * a {@link DataTransfer} and is passed back to the provider in {@link provideDocumentPasteEdits}. + * This allows the provider to attach copy metadata to the {@link DataTransfer} + * which is then passed back to providers in {@linkcode provideDocumentPasteEdits}. + * + * Note that currently any changes to the {@linkcode DataTransfer} are isolated to the current editor session. + * This means that added metadata cannot be seen by other applications. * * @param document Document where the copy took place. - * @param ranges Ranges being copied in the `document`. - * @param dataTransfer The data transfer associated with the copy. You can store additional values on this for later use in {@link provideDocumentPasteEdits}. + * @param ranges Ranges being copied in {@linkcode document}. + * @param dataTransfer The data transfer associated with the copy. You can store additional values on this for later use in {@linkcode provideDocumentPasteEdits}. + * This object is only valid for the duration of this method. * @param token A cancellation token. + * + * @return Optional thenable that resolves when all changes to the `dataTransfer` are complete. */ prepareDocumentPaste?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): void | Thenable; /** * Invoked before the user pastes into a document. * - * In this method, extensions can return a workspace edit that replaces the standard pasting behavior. + * Returned edits can replace the standard pasting behavior. * * @param document Document being pasted into - * @param ranges Currently selected ranges in the document. - * @param dataTransfer The data transfer associated with the paste. + * @param ranges Range in the {@linkcode document} to paste into. + * @param dataTransfer The {@link DataTransfer data transfer} associated with the paste. This object is only valid for the duration of the paste operation. + * @param context Additional context for the paste. + * @param token A cancellation token. + * + * @return Set of potential {@link DocumentPasteEdit edits} that apply the paste. Return `undefined` to use standard pasting. + */ + provideDocumentPasteEdits?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, context: DocumentPasteEditContext, token: CancellationToken): ProviderResult; + + /** + * Optional method which fills in the {@linkcode DocumentPasteEdit.additionalEdit} before the edit is applied. + * + * This is called once per edit and should be used if generating the complete edit may take a long time. + * Resolve can only be used to change {@link DocumentPasteEdit.additionalEdit}. + * + * @param pasteEdit The {@linkcode DocumentPasteEdit} to resolve. * @param token A cancellation token. * - * @return Optional workspace edit that applies the paste. Return undefined to use standard pasting. + * @returns The resolved paste edit or a thenable that resolves to such. It is OK to return the given + * `pasteEdit`. If no result is returned, the given `pasteEdit` is used. */ - provideDocumentPasteEdits(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, token: CancellationToken): ProviderResult; + resolveDocumentPasteEdit?(pasteEdit: T, token: CancellationToken): ProviderResult; } /** - * An operation applied on paste + * An edit applied on paste. */ class DocumentPasteEdit { + + /** + * Human readable label that describes the edit. + */ + title: string; + + /** + * {@link DocumentPasteEditKind Kind} of the edit. + * + * Used to identify specific types of edits. + */ + kind: DocumentPasteEditKind; + /** * The text or snippet to insert at the pasted locations. */ @@ -55,21 +120,77 @@ declare module 'vscode' { additionalEdit?: WorkspaceEdit; /** + * Controls the ordering of paste edits provided by multiple providers. + * + * If this edit yields to another, it will be shown lower in the list of paste edit. + */ + yieldTo?: readonly DocumentPasteEditKind[]; + + /** + * Create a new paste edit. + * * @param insertText The text or snippet to insert at the pasted locations. + * @param title Human readable label that describes the edit. + * @param kind {@link DocumentPasteEditKind Kind} of the edit. */ - constructor(insertText: string | SnippetString); + constructor(insertText: string | SnippetString, title: string, kind: DocumentPasteEditKind); + } + + + /** + * TODO: Share with code action kind? + */ + class DocumentPasteEditKind { + static readonly Empty: DocumentPasteEditKind; + + // TODO: Add `Text` any others? + + private constructor(value: string); + + readonly value: string; + + append(...parts: string[]): CodeActionKind; + intersects(other: CodeActionKind): boolean; + contains(other: CodeActionKind): boolean; } interface DocumentPasteProviderMetadata { /** - * Mime types that `provideDocumentPasteEdits` should be invoked for. + * List of {@link DocumentPasteEditKind kinds} that the provider may return in {@linkcode DocumentPasteEditProvider.provideDocumentPasteEdits provideDocumentPasteEdits}. * - * Use the special `files` mimetype to indicate the provider should be invoked if any files are present in the `DataTransfer`. + * The provider will only be invoked when one of these kinds is being requested. For normal pasting, all providers will be invoked. + */ + readonly providedPasteEditKinds: readonly DocumentPasteEditKind[]; + + /** + * Mime types that {@linkcode DocumentPasteEditProvider.prepareDocumentPaste prepareDocumentPaste} may add on copy. */ - readonly pasteMimeTypes: readonly string[]; + readonly copyMimeTypes?: readonly string[]; + + /** + * Mime types that {@linkcode DocumentPasteEditProvider.provideDocumentPasteEdits provideDocumentPasteEdits} should be invoked for. + * + * This can either be an exact mime type such as `image/png`, or a wildcard pattern such as `image/*`. + * + * Use `text/uri-list` for resources dropped from the explorer or other tree views in the workbench. + * + * Use `files` to indicate that the provider should be invoked if any {@link DataTransferFile files} are present in the {@linkcode DataTransfer}. + * Note that {@linkcode DataTransferFile} entries are only created when dropping content from outside the editor, such as + * from the operating system. + */ + readonly pasteMimeTypes?: readonly string[]; } namespace languages { + /** + * Registers a new {@linkcode DocumentPasteEditProvider}. + * + * @param selector A selector that defines the documents this provider applies to. + * @param provider A paste editor provider. + * @param metadata Additional metadata about the provider. + * + * @returns A {@link Disposable} that unregisters this provider when disposed of. + */ export function registerDocumentPasteEditProvider(selector: DocumentSelector, provider: DocumentPasteEditProvider, metadata: DocumentPasteProviderMetadata): Disposable; } } From 7feba453c442c9a96ed6d7c20602fa683ba71532 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 11 Apr 2024 12:04:51 -0400 Subject: [PATCH 467/708] Make java.import.gradle.user.home machine-overridable. Signed-off-by: Roland Grunberg --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 735da79c3..d182fa4e5 100644 --- a/package.json +++ b/package.json @@ -728,7 +728,7 @@ "type": "string", "default": null, "description": "Setting for GRADLE_USER_HOME.", - "scope": "window", + "scope": "machine-overridable", "order": 55 }, "java.import.gradle.offline.enabled": { From 34f54ac178b544d9def4409bff080282e8dacaa2 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 12 Apr 2024 00:03:06 -0400 Subject: [PATCH 468/708] Clear the active selected build tool where a project supports multiple. Signed-off-by: Roland Grunberg --- src/buildFilesSelector.ts | 4 +++- src/extension.ts | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/buildFilesSelector.ts b/src/buildFilesSelector.ts index e654e872f..f595e02db 100644 --- a/src/buildFilesSelector.ts +++ b/src/buildFilesSelector.ts @@ -2,6 +2,7 @@ import { ExtensionContext, MessageItem, QuickPickItem, QuickPickItemKind, Uri, W import { convertToGlob, getExclusionGlob, getInclusionPatternsFromNegatedExclusion } from "./utils"; import * as path from "path"; import { IBuildTool, getContributedBuildTools } from "./plugin"; +import { ACTIVE_BUILD_TOOL_STATE } from "./settings"; export const PICKED_BUILD_FILES = "java.pickedBuildFiles"; export const BUILD_TOOL_FOR_CONFLICTS = "java.buildToolForConflicts"; @@ -293,8 +294,9 @@ interface IBuildFilePicker extends QuickPickItem { buildToolAndUri: Map; } -export function cleanupProjectPickerCache(context: ExtensionContext) { +export function cleanupWorkspaceState(context: ExtensionContext) { context.workspaceState.update(PICKED_BUILD_FILES, undefined); context.workspaceState.update(BUILD_TOOL_FOR_CONFLICTS, undefined); context.workspaceState.update(IMPORT_METHOD, undefined); + context.workspaceState.update(ACTIVE_BUILD_TOOL_STATE, undefined); } diff --git a/src/extension.ts b/src/extension.ts index 642122158..5f7e92464 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -37,7 +37,7 @@ import { getMessage } from './errorUtils'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; -import { BuildFileSelector, PICKED_BUILD_FILES, cleanupProjectPickerCache } from './buildFilesSelector'; +import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './buildFilesSelector'; import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; @@ -345,7 +345,7 @@ export async function activate(context: ExtensionContext): Promise const data = {}; try { cleanupLombokCache(context); - cleanupProjectPickerCache(context); + cleanupWorkspaceState(context); deleteDirectory(workspacePath); deleteDirectory(syntaxServerWorkspacePath); } catch (error) { From b4c0d47941eddd7de7420f1bec7abe4398e9d62c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 16 Apr 2024 23:32:40 -0400 Subject: [PATCH 469/708] Do not exclude duplicate flags specified by java.jdt.ls.vmargs. - Flags like --add-exports, which can be specified multiple times can break if excluded - Adjust testcase - Fix typo in README Signed-off-by: Roland Grunberg --- README.md | 2 +- src/javaServerStarter.ts | 4 +--- test/standard-mode-suite/extension.test.ts | 4 ++-- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f1bf7a62b..51c7418d4 100644 --- a/README.md +++ b/README.md @@ -269,7 +269,7 @@ For information on getting started, refer to the [CONTRIBUTING instructions](CON Continuous Integration builds can be installed from [http://download.jboss.org/jbosstools/jdt.ls/staging/](http://download.jboss.org/jbosstools/jdt.ls/staging/?C=M;O=D). Download the most recent `java-.vsix` file and install it by following the instructions [here](https://code.visualstudio.com/docs/editor/extension-gallery#_install-from-a-vsix). Stable releases are archived under http://download.jboss.org/jbosstools/static/jdt.ls/stable/. -Also, you can contribute your own VSCode extension to enhance the existing features by following the instructions [here](https://github.com/redhat-developer/vscode-java/wiki/Contribute-a-Java-Extension). +Also, you can contribute your own VS Code extension to enhance the existing features by following the instructions [here](https://github.com/redhat-developer/vscode-java/wiki/Contribute-a-Java-Extension). Feedback =============== diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 042792da2..de3e31c58 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -312,9 +312,7 @@ export function parseVMargs(params: any[], vmargsLine: string) { arg = arg.replace(/(\\)?"/g, ($0, $1) => { return ($1 ? $0 : ''); }); // unescape all escaped double quotes arg = arg.replace(/(\\)"/g, '"'); - if (params.indexOf(arg) < 0) { - params.push(arg); - } + params.push(arg); }); } diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index c364990e8..107622635 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -134,11 +134,11 @@ suite('Java Language Extension - Standard', () => { java.parseVMargs(vmArgs, userArgs); - assert.equal(4, vmArgs.length); + assert.equal(5, vmArgs.length); assert.equal('-noverify', vmArgs[0]); assert.equal('foo', vmArgs[1]); assert.equal('-Xmx512m', vmArgs[2]); - assert.equal('-Dfoo=something with blank', vmArgs[3]); + assert.equal('-Dfoo=something with blank', vmArgs[4]); }); test('should parse VM arguments with spaces', () => { From 907a5bac019ae60c21e767b3dc72b4dbc4f3bd56 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 22 Apr 2024 14:43:46 -0400 Subject: [PATCH 470/708] Add setting java.codeGeneration.addFinalForNewDeclaration. - Generates the 'final' modifier for certain new variable/field declarations - Defaults to 'none' (disabled) Signed-off-by: Roland Grunberg --- README.md | 7 +++++++ package.json | 18 ++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/README.md b/README.md index 51c7418d4..a7669b992 100644 --- a/README.md +++ b/README.md @@ -244,6 +244,13 @@ The following settings are supported: * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. +New in 1.30.0 +* `java.codeGeneration.addFinalForNewDeclaration`: Whether to generate the 'final' modifer for code actions that create new declarations. Defaults to `none`. + - `none`: Do not generate final modifier + - `fields`: Generate 'final' modifier only for new field declarations + - `variables`: Generate 'final' modifier only for new variable declarations + - `all`: Generate 'final' modifier for all new declarations + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index d182fa4e5..63fcd4d58 100644 --- a/package.json +++ b/package.json @@ -1157,6 +1157,24 @@ "scope": "window", "order": 30 }, + "java.codeGeneration.addFinalForNewDeclaration": { + "type": "string", + "enum": [ + "none", + "fields", + "variables", + "all" + ], + "enumDescriptions": [ + "Do not generate final modifier.", + "Generate 'final' modifier only for new field declarations.", + "Generate 'final' modifier only for new variable declarations.", + "Generate 'final' modifier for all new declarations." + ], + "description": "Whether to generate the 'final' modifer for code actions that create new declarations.", + "default": "none", + "scope": "window" + }, "java.codeGeneration.hashCodeEquals.useJava7Objects": { "type": "boolean", "description": "Use Objects.hash and Objects.equals when generating the hashCode and equals methods. This setting only applies to Java 7 and higher.", From 81d814bcf92b77e549cee5151c2e15f40657cf3e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 11 Apr 2024 20:31:21 -0400 Subject: [PATCH 471/708] Change default LS transport from 'stdio' to 'pipe'. Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index de3e31c58..7b28624d3 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -58,10 +58,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, executable.transport = TransportKind.stdio; break; default: - const isInsider: boolean = version.includes("insider"); - const javaExtVersion = context.extension.packageJSON?.version; - const isPreReleaseVersion = /^\d+\.\d+\.\d{10}/.test(javaExtVersion); - executable.transport = (isInsider || isPreReleaseVersion) ? TransportKind.pipe : TransportKind.stdio; + executable.transport = TransportKind.pipe; break; } logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); From 1ecbb3395f3dae2fa189bd898e9eae43e2ba87c0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 23 Apr 2024 21:40:07 -0400 Subject: [PATCH 472/708] Changelog for 1.30.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 99a0e6adb..47760d887 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 1.30.0 (April 25th, 2024) + * enhancement - Add `final` to new declarations generated from code actions. See [#3586](https://github.com/redhat-developer/vscode-java/pull/3586). + * bug fix - Change default client/server transport from `stdio` to `pipe`. See [#3587](https://github.com/redhat-developer/vscode-java/pull/3587). + * bug fix - Qualifier of workspace symbol search should be wildcard search. See [JLS#3134](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3134). + * bug fix - Fix the document paste handling provider for VS Code 1.88.0. See [#3568](https://github.com/redhat-developer/vscode-java/issues/3568). + * bug fix - Clear active build tool selection after cleaning the language server workspace of mixed Maven/Gradle project. See [#3567](https://github.com/redhat-developer/vscode-java/issues/3567). + * bug fix - Static imports with wildcard should resolve all elements. See [#3564](https://github.com/redhat-developer/vscode-java/issues/3564). + * bug fix - Language Server fails to start with multiple `--add-exports` in `java.jdt.ls.vmargs`. See [#3577](https://github.com/redhat-developer/vscode-java/issues/3577). + * bug fix - Make `java.import.gradle.user.home` scope `machine-overridable`. See [#3569](https://github.com/redhat-developer/vscode-java/issues/3569). + * bug fix - Disable automatic handling of `workspace/willRenameFiles`. See [#3565](https://github.com/redhat-developer/vscode-java/pull/3565). + * build - Fix tests in release workflow. See [#3562](https://github.com/redhat-developer/vscode-java/pull/3562). + ## 1.29.0 (April 3rd, 2024) * enhancement - Provide support for Java 22. See [#3538](https://github.com/redhat-developer/vscode-java/issues/3538). * enhancement - Simplify the server status item click action & add contribution point. See [#3537](https://github.com/redhat-developer/vscode-java/pull/3537), [#3548](https://github.com/redhat-developer/vscode-java/pull/3548), [#3546](https://github.com/redhat-developer/vscode-java/pull/3546). From 5aa482b46e1425f050e103d0669ef0312100c157 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 25 Apr 2024 12:01:20 -0400 Subject: [PATCH 473/708] Upversion to 1.31.0 Signed-off-by: Roland Grunberg --- README.md | 12 +++++------- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index a7669b992..b18426e23 100644 --- a/README.md +++ b/README.md @@ -202,6 +202,11 @@ The following settings are supported: - `afterCursor`: Insert the generated code after the member where the cursor is located. - `beforeCursor`: Insert the generated code before the member where the cursor is located. - `lastMember`: Insert the generated code as the last member of the target type. +* `java.codeGeneration.addFinalForNewDeclaration`: Whether to generate the 'final' modifer for code actions that create new declarations. Defaults to `none`. + - `none`: Do not generate final modifier + - `fields`: Generate 'final' modifier only for new field declarations + - `variables`: Generate 'final' modifier only for new variable declarations + - `all`: Generate 'final' modifier for all new declarations * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. * `java.quickfix.showAt` : Show quickfixes at the problem or line level. @@ -244,13 +249,6 @@ The following settings are supported: * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. -New in 1.30.0 -* `java.codeGeneration.addFinalForNewDeclaration`: Whether to generate the 'final' modifer for code actions that create new declarations. Defaults to `none`. - - `none`: Do not generate final modifier - - `fields`: Generate 'final' modifier only for new field declarations - - `variables`: Generate 'final' modifier only for new variable declarations - - `all`: Generate 'final' modifier for all new declarations - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index f41429311..3c068ef99 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.30.0", + "version": "1.31.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.30.0", + "version": "1.31.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 63fcd4d58..d6b98e510 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.30.0", + "version": "1.31.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 2f5094fb858235120f55952cfb8f6ec987a1a4ac Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 6 May 2024 17:11:19 -0400 Subject: [PATCH 474/708] Improve paste edit support across different VS Code versions. - Use VS Code version to determine whether a DocumentPasteEdit vs. DocumentPasteEdit[] is returned Signed-off-by: Roland Grunberg --- src/pasteEventHandler.ts | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/pasteEventHandler.ts b/src/pasteEventHandler.ts index 6f6648830..9606e19c2 100644 --- a/src/pasteEventHandler.ts +++ b/src/pasteEventHandler.ts @@ -1,8 +1,9 @@ -import { CancellationToken, commands, DataTransfer, DocumentPasteEdit as VDocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteProviderMetadata, ExtensionContext, languages, Range, TextDocument, window, DocumentPasteEditContext, ProviderResult, DocumentPasteEdit } from "vscode"; +import { CancellationToken, commands, DataTransfer, DocumentPasteEdit as VDocumentPasteEdit, DocumentPasteEditProvider, DocumentPasteProviderMetadata, ExtensionContext, languages, Range, TextDocument, window, DocumentPasteEditContext, ProviderResult, DocumentPasteEdit, version } from "vscode"; import { FormattingOptions, Location, WorkspaceEdit as PWorkspaceEdit } from "vscode-languageclient"; import { LanguageClient } from "vscode-languageclient/node"; import { Commands } from "./commands"; import { JAVA_SELECTOR } from "./standardLanguageClient"; +import * as semver from 'semver'; const TEXT_MIMETYPE: string = "text/plain"; const MIMETYPES: DocumentPasteProviderMetadata = { @@ -62,12 +63,13 @@ class PasteEditProvider implements DocumentPasteEditProvider { } } - async provideDocumentPasteEdits?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, context: DocumentPasteEditContext, token: CancellationToken): Promise { + async provideDocumentPasteEdits?(document: TextDocument, ranges: readonly Range[], dataTransfer: DataTransfer, context: DocumentPasteEditContext, token: CancellationToken): Promise { + const insertText: string = await dataTransfer.get(TEXT_MIMETYPE).asString(); // don't try to provide for multi character inserts; the implementation will get messy and the feature won't be that helpful - if (!insertText || token.isCancellationRequested || ranges.length !== 1) { + if (!insertText || (!!token && token.isCancellationRequested) || ranges.length !== 1) { return null; } @@ -93,12 +95,15 @@ class PasteEditProvider implements DocumentPasteEditProvider { try { const pasteResponse: PDocumentPasteEdit = await commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.HANDLE_PASTE_EVENT, JSON.stringify(pasteEventParams)); if (pasteResponse) { - return [ - { - insertText: pasteResponse.insertText, - additionalEdit: pasteResponse.additionalEdit ? await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined - } - ] as DocumentPasteEdit[]; + const pasteEdit = { + insertText: pasteResponse.insertText, + additionalEdit: pasteResponse.additionalEdit ? await this.languageClient.protocol2CodeConverter.asWorkspaceEdit(pasteResponse.additionalEdit) : undefined + }; + if (semver.lt(version, '1.88.0')) { + return pasteEdit as DocumentPasteEdit; + } else { + return [ pasteEdit ] as DocumentPasteEdit[]; + } } } catch (e) { // Do nothing From 4e2bccbb77da049c127243a1ed3a52b8ff67b98f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 14 May 2024 15:34:29 -0400 Subject: [PATCH 475/708] Fall back to 'stdio' transport if 'pipe' is likely to fail. - If generateRandomPipeName fails, then the pipe transport will fail and we should instead fall back to 'stdio' transport Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 7b28624d3..231229af1 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -6,12 +6,13 @@ import * as net from 'net'; import * as os from 'os'; import * as path from 'path'; import { ExtensionContext, version, workspace } from 'vscode'; -import { Executable, ExecutableOptions, StreamInfo, TransportKind } from 'vscode-languageclient/node'; +import { Executable, ExecutableOptions, StreamInfo, TransportKind, generateRandomPipeName } from 'vscode-languageclient/node'; import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils'; +import { log } from 'console'; // eslint-disable-next-line no-var declare var v8debug; @@ -50,9 +51,16 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, executable.command = path.resolve(`${requirements.tooling_jre}/bin/java`); executable.args = prepareParams(requirements, workspacePath, context, isSyntaxServer); const transportKind = getJavaConfiguration().get('transport'); + switch (transportKind) { case 'pipe': executable.transport = TransportKind.pipe; + try { + generateRandomPipeName(); + } catch (error) { + logger.warn(`Falling back to 'stdio' (from 'pipe') due to : ${error}`); + executable.transport = TransportKind.stdio; + } break; case 'stdio': executable.transport = TransportKind.stdio; From 248e976476d8c1f81407e61a167099700cc1eeda Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 23 May 2024 16:11:39 +0200 Subject: [PATCH 476/708] Update telemetry to 0.8.0 Signed-off-by: Fred Bricon --- package-lock.json | 8 +- package.json | 2349 +++++++++++++++++++++++---------------------- 2 files changed, 1184 insertions(+), 1173 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3c068ef99..739b2ba21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", - "@redhat-developer/vscode-redhat-telemetry": "^0.7.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -347,9 +347,9 @@ "integrity": "sha512-hH/0YRkCmYsGTPScE6xFd5bUkbDWU1iu7/LJqcrU4drqYLsFWe/6gLEaaOxm6koFwI3ItjGt8t0o0q8VMC4MiA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.7.1.tgz", - "integrity": "sha512-IhCoMA4KAz2giQwAywgCiqvp1q/XSZEtaSWzpkxjceUyvkU9Uvp0MiIHJ300qHJ4c+lQVbVe7DG7D8yj8lVlRQ==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.8.0.tgz", + "integrity": "sha512-xvFuTMdmrzFHAQ1YeciNf9JdROzKfocFFMVb/8W41If2ynN0mX18bcdCPlWWyaSP5qJ+3XDvMOIf4tql9Xz+cA==", "dependencies": { "@segment/analytics-node": "0.0.1-beta.17", "axios": "^1.6.1", diff --git a/package.json b/package.json index d6b98e510..b1d845e44 100644 --- a/package.json +++ b/package.json @@ -76,18 +76,27 @@ "javaBuildTools": [ { "displayName": "Maven", - "buildFileNames": ["pom.xml"] + "buildFileNames": [ + "pom.xml" + ] }, { "displayName": "Gradle", - "buildFileNames": ["build.gradle", "settings.gradle", "build.gradle.kts", "settings.gradle.kts"] + "buildFileNames": [ + "build.gradle", + "settings.gradle", + "build.gradle.kts", + "settings.gradle.kts" + ] } ], "javaShortcuts": [ { "title": "$(settings-gear) Open Java Settings", "command": "workbench.action.openSettings", - "arguments": ["java"] + "arguments": [ + "java" + ] }, { "title": "$(output) Open Logs", @@ -285,1203 +294,1205 @@ "url": "./schemas/package.schema.json" } ], - "configuration":[{ - "id": "java-startup", - "title": "Startup", - "order": 10, - "properties": { - "java.home": { - "type": [ - "string", - "null" - ], - "default": null, - "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", - "scope": "machine-overridable", - "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead.", - "order": 0 - }, - "java.jdt.ls.java.home": { - "type": [ - "string", - "null" - ], - "default": null, - "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", - "scope": "machine-overridable", - "order": 10 - }, - "java.jdt.ls.vmargs": { - "type": [ - "string", - "null" - ], - "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable", - "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", - "scope": "machine-overridable", - "order": 20 - }, - "java.server.launchMode": { - "type": "string", - "enum": [ - "Standard", - "LightWeight", - "Hybrid" - ], - "enumDescriptions": [ - "Provides full features such as intellisense, refactoring, building, Maven/Gradle support etc.", - "Starts a syntax server with lower start-up cost. Only provides syntax features such as outline, navigation, javadoc, syntax errors.", - "Provides full features with better responsiveness. It starts a standard language server and a secondary syntax server. The syntax server provides syntax features until the standard server is ready." - ], - "description": "The launch mode for the Java extension", - "default": "Hybrid", - "scope": "window", - "order": 30 - }, - "java.configuration.workspaceCacheLimit": { - "type": [ - "null", - "integer" - ], - "default": 90, - "minimum": 1, - "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", - "scope": "application", - "order": 40 - }, - "java.sharedIndexes.enabled": { - "type": "string", - "enum": [ - "auto", - "on", - "off" - ], - "default": "auto", - "markdownDescription": "[Experimental] Specify whether to share indexes between different workspaces. When set to `auto`, shared indexes will be enabled in Visual Studio Code - Insiders.", - "scope": "window", - "order": 50 - }, - "java.sharedIndexes.location": { - "type": "string", - "markdownDescription": "Specifies a common index location for all workspaces. See default values as follows:\n \nWindows: First use `\"$APPDATA\\\\.jdt\\\\index\"`, or `\"~\\\\.jdt\\\\index\"` if it does not exist\n \nmacOS: `\"~/Library/Caches/.jdt/index\"`\n \nLinux: First use `\"$XDG_CACHE_HOME/.jdt/index\"`, or `\"~/.cache/.jdt/index\"` if it does not exist", - "default": "", - "scope": "window", - "order": 60 - }, - "java.jdt.ls.lombokSupport.enabled": { - "type": "boolean", - "default": true, - "description": "Whether to load lombok processors from project classpath", - "scope": "window", - "order": 70 - }, - "java.jdt.ls.protobufSupport.enabled": { - "type": "boolean", - "default": true, - "markdownDescription": "Specify whether to automatically add Protobuf output source directories to the classpath.\n\n**Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher.", - "scope": "window", - "order": 80 - }, - "java.jdt.ls.androidSupport.enabled": { - "type": "string", - "enum": [ - "auto", - "on", - "off" - ], - "default": "auto", - "markdownDescription": "[Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders.\n\n**Note:** Only works for Android Gradle Plugin `3.2.0` or higher.", - "scope": "window", - "order": 90 - }, - "java.trace.server": { - "type": "string", - "enum": [ - "off", - "messages", - "verbose" - ], - "default": "off", - "description": "Traces the communication between VS Code and the Java language server.", - "scope": "window" - }, - "redhat.telemetry.enabled": { - "type": "boolean", - "default": null, - "markdownDescription": "Enable usage data and errors to be sent to Red Hat servers. Read our [privacy statement](https://developers.redhat.com/article/tool-data-collection).", - "scope": "window", - "tags": [ - "usesOnlineServices", - "telemetry" - ] + "configuration": [ + { + "id": "java-startup", + "title": "Startup", + "order": 10, + "properties": { + "java.home": { + "type": [ + "string", + "null" + ], + "default": null, + "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", + "scope": "machine-overridable", + "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead.", + "order": 0 + }, + "java.jdt.ls.java.home": { + "type": [ + "string", + "null" + ], + "default": null, + "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", + "scope": "machine-overridable", + "order": 10 + }, + "java.jdt.ls.vmargs": { + "type": [ + "string", + "null" + ], + "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable", + "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", + "scope": "machine-overridable", + "order": 20 + }, + "java.server.launchMode": { + "type": "string", + "enum": [ + "Standard", + "LightWeight", + "Hybrid" + ], + "enumDescriptions": [ + "Provides full features such as intellisense, refactoring, building, Maven/Gradle support etc.", + "Starts a syntax server with lower start-up cost. Only provides syntax features such as outline, navigation, javadoc, syntax errors.", + "Provides full features with better responsiveness. It starts a standard language server and a secondary syntax server. The syntax server provides syntax features until the standard server is ready." + ], + "description": "The launch mode for the Java extension", + "default": "Hybrid", + "scope": "window", + "order": 30 + }, + "java.configuration.workspaceCacheLimit": { + "type": [ + "null", + "integer" + ], + "default": 90, + "minimum": 1, + "description": "The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed.", + "scope": "application", + "order": 40 + }, + "java.sharedIndexes.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to share indexes between different workspaces. When set to `auto`, shared indexes will be enabled in Visual Studio Code - Insiders.", + "scope": "window", + "order": 50 + }, + "java.sharedIndexes.location": { + "type": "string", + "markdownDescription": "Specifies a common index location for all workspaces. See default values as follows:\n \nWindows: First use `\"$APPDATA\\\\.jdt\\\\index\"`, or `\"~\\\\.jdt\\\\index\"` if it does not exist\n \nmacOS: `\"~/Library/Caches/.jdt/index\"`\n \nLinux: First use `\"$XDG_CACHE_HOME/.jdt/index\"`, or `\"~/.cache/.jdt/index\"` if it does not exist", + "default": "", + "scope": "window", + "order": 60 + }, + "java.jdt.ls.lombokSupport.enabled": { + "type": "boolean", + "default": true, + "description": "Whether to load lombok processors from project classpath", + "scope": "window", + "order": 70 + }, + "java.jdt.ls.protobufSupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Specify whether to automatically add Protobuf output source directories to the classpath.\n\n**Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher.", + "scope": "window", + "order": 80 + }, + "java.jdt.ls.androidSupport.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders.\n\n**Note:** Only works for Android Gradle Plugin `3.2.0` or higher.", + "scope": "window", + "order": 90 + }, + "java.trace.server": { + "type": "string", + "enum": [ + "off", + "messages", + "verbose" + ], + "default": "off", + "description": "Traces the communication between VS Code and the Java language server.", + "scope": "window" + }, + "redhat.telemetry.enabled": { + "type": "boolean", + "default": null, + "markdownDescription": "Enable usage data and errors to be sent to Red Hat servers. Read our [privacy statement](https://developers.redhat.com/article/tool-data-collection).", + "scope": "window", + "tags": [ + "usesOnlineServices", + "telemetry" + ] + } } - } - }, - { - "id": "java-projectimport", - "title": "Project Import/Update", - "order": 20, - "properties": { - "java.import.projectSelection": { - "type": "string", - "enum": [ - "manual", - "automatic" - ], - "enumDescriptions": [ - "Manually select the build configuration files.", - "Let extension automatically scan and select the build configuration files." - ], - "default": "automatic", - "markdownDescription": "[Experimental] Specifies how to select build configuration files to import. \nNote: Currently, `Gradle` projects cannot be partially imported.", - "scope": "window", - "order": 10 - }, - "java.configuration.updateBuildConfiguration": { - "type": [ - "string" - ], - "enum": [ - "disabled", - "interactive", - "automatic" - ], - "default": "interactive", - "description": "Specifies how modifications on build files update the Java classpath/configuration", - "scope": "window", - "order": 20 - }, - "java.import.exclusions": { - "type": "array", - "description": "Configure glob patterns for excluding folders. Use `!` to negate patterns to allow subfolders imports. You have to include a parent directory. The order is important.", - "default": [ - "**/node_modules/**", - "**/.metadata/**", - "**/archetype-resources/**", - "**/META-INF/maven/**" - ], - "scope": "window" - }, - "java.project.resourceFilters": { - "type": "array", - "items": { + }, + { + "id": "java-projectimport", + "title": "Project Import/Update", + "order": 20, + "properties": { + "java.import.projectSelection": { "type": "string", - "pattern": "^(?!\\*).*" + "enum": [ + "manual", + "automatic" + ], + "enumDescriptions": [ + "Manually select the build configuration files.", + "Let extension automatically scan and select the build configuration files." + ], + "default": "automatic", + "markdownDescription": "[Experimental] Specifies how to select build configuration files to import. \nNote: Currently, `Gradle` projects cannot be partially imported.", + "scope": "window", + "order": 10 }, - "default": [ - "node_modules", - "\\.git" - ], - "markdownDescription": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named `node_modules` or `.git`. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", - "scope": "window" - }, - "java.configuration.checkProjectSettingsExclusions": { - "deprecationMessage": "Please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.", - "type": "boolean", - "default": false, - "description": "Controls whether to exclude extension-generated project settings files (.project, .classpath, .factorypath, .settings/) from the file explorer.", - "scope": "window" - }, - "java.import.generatesMetadataFilesAtProjectRoot": { - "type": "boolean", - "markdownDescription": "Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Click [HERE](command:_java.metadataFilesGeneration) to learn how to change the setting to make it take effect.", - "default": false, - "scope": "window" - }, - "java.project.importOnFirstTimeStartup": { - "type": "string", - "enum": [ - "disabled", - "interactive", - "automatic" - ], - "default": "automatic", - "description": "Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time.", - "scope": "application" - }, - "java.project.importHint": { - "type": "boolean", - "description": "Enable/disable the server-mode switch information, when Java projects import is skipped on startup.", - "default": true, - "scope": "application" - }, - "java.showBuildStatusOnStart.enabled": { - "anyOf": [ - { - "enum": [ - "notification", - "terminal", - "off" - ], - "enumDescriptions": [ - "Show the build status via progress notification on start", - "Show the build status via terminal on start", - "Do not show any build status on start" - ] + "java.configuration.updateBuildConfiguration": { + "type": [ + "string" + ], + "enum": [ + "disabled", + "interactive", + "automatic" + ], + "default": "interactive", + "description": "Specifies how modifications on build files update the Java classpath/configuration", + "scope": "window", + "order": 20 + }, + "java.import.exclusions": { + "type": "array", + "description": "Configure glob patterns for excluding folders. Use `!` to negate patterns to allow subfolders imports. You have to include a parent directory. The order is important.", + "default": [ + "**/node_modules/**", + "**/.metadata/**", + "**/archetype-resources/**", + "**/META-INF/maven/**" + ], + "scope": "window" + }, + "java.project.resourceFilters": { + "type": "array", + "items": { + "type": "string", + "pattern": "^(?!\\*).*" }, - "boolean" - ], - "description": "Automatically show build status on startup.", - "default": "notification", - "scope": "window" - }, - "java.project.encoding": { - "enum": [ - "ignore", - "warning", - "setDefault" - ], - "enumDescriptions": [ - "Ignore project encoding settings", - "Show warning if a project has no explicit encoding set", - "Set the default workspace encoding settings" - ], - "default": "ignore", - "markdownDescription": "Project encoding settings", - "scope": "window" + "default": [ + "node_modules", + "\\.git" + ], + "markdownDescription": "Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, [\"node_modules\",\"\\.git\"] will exclude all files and folders named `node_modules` or `.git`. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to [\"node_modules\",\"\\.git\"].", + "scope": "window" + }, + "java.configuration.checkProjectSettingsExclusions": { + "deprecationMessage": "Please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.", + "type": "boolean", + "default": false, + "description": "Controls whether to exclude extension-generated project settings files (.project, .classpath, .factorypath, .settings/) from the file explorer.", + "scope": "window" + }, + "java.import.generatesMetadataFilesAtProjectRoot": { + "type": "boolean", + "markdownDescription": "Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Click [HERE](command:_java.metadataFilesGeneration) to learn how to change the setting to make it take effect.", + "default": false, + "scope": "window" + }, + "java.project.importOnFirstTimeStartup": { + "type": "string", + "enum": [ + "disabled", + "interactive", + "automatic" + ], + "default": "automatic", + "description": "Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time.", + "scope": "application" + }, + "java.project.importHint": { + "type": "boolean", + "description": "Enable/disable the server-mode switch information, when Java projects import is skipped on startup.", + "default": true, + "scope": "application" + }, + "java.showBuildStatusOnStart.enabled": { + "anyOf": [ + { + "enum": [ + "notification", + "terminal", + "off" + ], + "enumDescriptions": [ + "Show the build status via progress notification on start", + "Show the build status via terminal on start", + "Do not show any build status on start" + ] + }, + "boolean" + ], + "description": "Automatically show build status on startup.", + "default": "notification", + "scope": "window" + }, + "java.project.encoding": { + "enum": [ + "ignore", + "warning", + "setDefault" + ], + "enumDescriptions": [ + "Ignore project encoding settings", + "Show warning if a project has no explicit encoding set", + "Set the default workspace encoding settings" + ], + "default": "ignore", + "markdownDescription": "Project encoding settings", + "scope": "window" + } } - } - }, - { - "id": "java-unmanagedfolder", - "title": "Unmanaged Folder", - "order": 30, - "properties": { - "java.project.sourcePaths": { - "type": "array", - "items": { - "type": "string" - }, - "markdownDescription": "Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", - "default": [], - "scope": "window", - "order": 10 - }, - "java.project.outputPath": { - "type": [ - "string", - "null" - ], - "markdownDescription": "A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", - "default": "", - "scope": "window", - "order": 20 - }, - "java.project.referencedLibraries": { - "type": [ - "array", - "object" - ], - "description": "Configure glob patterns for referencing local libraries to a Java project.", - "default": [ - "lib/**/*.jar" - ], - "properties": { - "include": { - "type": "array" - }, - "exclude": { - "type": "array" + }, + { + "id": "java-unmanagedfolder", + "title": "Unmanaged Folder", + "order": 30, + "properties": { + "java.project.sourcePaths": { + "type": "array", + "items": { + "type": "string" }, - "sources": { - "type": "object" - } + "markdownDescription": "Relative paths to the workspace where stores the source files. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", + "default": [], + "scope": "window", + "order": 10 }, - "required": [ - "include" - ], - "additionalProperties": false, - "scope": "window", - "order": 30 - } - } - }, - { - "id": "java-maven", - "title": "Maven", - "order": 40, - "properties": { - "java.import.maven.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the Maven importer.", - "scope": "window", - "order": 10 - }, - "java.import.maven.offline.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the Maven offline mode.", - "scope": "window", - "order": 20 - }, - "java.import.maven.disableTestClasspathFlag": { - "type": "boolean", - "default": false, - "description": "Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects.", - "scope": "window", - "order": 30 - }, - "java.maven.downloadSources": { - "type": "boolean", - "default": false, - "description": "Enable/disable download of Maven source artifacts as part of importing Maven projects.", - "scope": "window", - "order": 40 - }, - "java.maven.updateSnapshots": { - "type": "boolean", - "default": false, - "description": "Force update of Snapshots/Releases.", - "scope": "window", - "order": 50 - }, - "java.configuration.maven.userSettings": { - "type": "string", - "default": null, - "description": "Path to Maven's user settings.xml", - "scope": "window", - "order": 60 - }, - "java.configuration.maven.globalSettings": { - "type": "string", - "default": null, - "description": "Path to Maven's global settings.xml", - "scope": "window", - "order": 70 - }, - "java.configuration.maven.notCoveredPluginExecutionSeverity": { - "type": "string", - "enum": [ - "ignore", - "warning", - "error" - ], - "default": "warning", - "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", - "scope": "window", - "order": 80 - }, - "java.configuration.maven.defaultMojoExecutionAction": { - "type": "string", - "enum": [ - "ignore", - "warn", - "error", - "execute" - ], - "default": "ignore", - "description": "Specifies default mojo execution action when no associated metadata can be detected.", - "scope": "window", - "order": 90 - }, - "java.configuration.maven.lifecycleMappings": { - "type": "string", - "default": null, - "description": "Path to Maven's lifecycle mappings xml", - "scope": "window", - "order": 100 - } - } - }, - { - "id": "java-gradle", - "title": "Gradle", - "order": 50, - "properties": { - "java.import.gradle.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the Gradle importer.", - "scope": "window", - "order": 10 - }, - "java.import.gradle.wrapper.enabled": { - "type": "boolean", - "default": true, - "description": "Use Gradle from the 'gradle-wrapper.properties' file.", - "scope": "window", - "order": 20 - }, - "java.import.gradle.version": { - "type": "string", - "default": null, - "description": "Use Gradle from the specific version if the Gradle wrapper is missing or disabled.", - "scope": "window", - "order": 30 - }, - "java.import.gradle.home": { - "type": "string", - "default": null, - "description": "Use Gradle from the specified local installation directory or GRADLE_HOME if the Gradle wrapper is missing or disabled and no 'java.import.gradle.version' is specified.", - "scope": "machine-overridable", - "order": 40 - }, - "java.import.gradle.java.home": { - "type": "string", - "default": null, - "description": "The location to the JVM used to run the Gradle daemon.", - "scope": "machine-overridable", - "order": 50 - }, - "java.import.gradle.user.home": { - "type": "string", - "default": null, - "description": "Setting for GRADLE_USER_HOME.", - "scope": "machine-overridable", - "order": 55 - }, - "java.import.gradle.offline.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the Gradle offline mode.", - "scope": "window", - "order": 60 - }, - "java.import.gradle.arguments": { - "type": "string", - "default": null, - "description": "Arguments to pass to Gradle.", - "scope": "machine", - "order": 70 - }, - "java.import.gradle.jvmArguments": { - "type": "string", - "default": null, - "description": "JVM arguments to pass to Gradle.", - "scope": "machine", - "order": 80 - }, - "java.import.gradle.annotationProcessing.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the annotation processing on Gradle projects and delegate Annotation Processing to JDT APT. Only works for Gradle 5.2 or higher.", - "scope": "window", - "order": 90 - }, - "java.imports.gradle.wrapper.checksums": { - "type": "array", - "items": { - "type": "object", - "default": {}, - "required": [ - "sha256" + "java.project.outputPath": { + "type": [ + "string", + "null" + ], + "markdownDescription": "A relative path to the workspace where stores the compiled output. `Only` effective in the `WORKSPACE` scope. The setting will `NOT` affect Maven or Gradle project.", + "default": "", + "scope": "window", + "order": 20 + }, + "java.project.referencedLibraries": { + "type": [ + "array", + "object" + ], + "description": "Configure glob patterns for referencing local libraries to a Java project.", + "default": [ + "lib/**/*.jar" ], "properties": { - "sha256": { - "type": "string", - "label": "SHA-256 checksum." + "include": { + "type": "array" + }, + "exclude": { + "type": "array" }, - "allowed": { - "type": "boolean", - "default": true, - "label": "Is allowed?" + "sources": { + "type": "object" } }, + "required": [ + "include" + ], "additionalProperties": false, - "uniqueItems": true + "scope": "window", + "order": 30 + } + } + }, + { + "id": "java-maven", + "title": "Maven", + "order": 40, + "properties": { + "java.import.maven.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the Maven importer.", + "scope": "window", + "order": 10 + }, + "java.import.maven.offline.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable the Maven offline mode.", + "scope": "window", + "order": 20 + }, + "java.import.maven.disableTestClasspathFlag": { + "type": "boolean", + "default": false, + "description": "Enable/disable test classpath segregation. When enabled, this permits the usage of test resources within a Maven project as dependencies within the compile scope of other projects.", + "scope": "window", + "order": 30 + }, + "java.maven.downloadSources": { + "type": "boolean", + "default": false, + "description": "Enable/disable download of Maven source artifacts as part of importing Maven projects.", + "scope": "window", + "order": 40 }, - "description": "Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers", - "default": [], - "scope": "application" + "java.maven.updateSnapshots": { + "type": "boolean", + "default": false, + "description": "Force update of Snapshots/Releases.", + "scope": "window", + "order": 50 + }, + "java.configuration.maven.userSettings": { + "type": "string", + "default": null, + "description": "Path to Maven's user settings.xml", + "scope": "window", + "order": 60 + }, + "java.configuration.maven.globalSettings": { + "type": "string", + "default": null, + "description": "Path to Maven's global settings.xml", + "scope": "window", + "order": 70 + }, + "java.configuration.maven.notCoveredPluginExecutionSeverity": { + "type": "string", + "enum": [ + "ignore", + "warning", + "error" + ], + "default": "warning", + "description": "Specifies severity if the plugin execution is not covered by Maven build lifecycle.", + "scope": "window", + "order": 80 + }, + "java.configuration.maven.defaultMojoExecutionAction": { + "type": "string", + "enum": [ + "ignore", + "warn", + "error", + "execute" + ], + "default": "ignore", + "description": "Specifies default mojo execution action when no associated metadata can be detected.", + "scope": "window", + "order": 90 + }, + "java.configuration.maven.lifecycleMappings": { + "type": "string", + "default": null, + "description": "Path to Maven's lifecycle mappings xml", + "scope": "window", + "order": 100 + } } - } - }, - { - "id": "java-build", - "title": "Build", - "order": 60, - "properties": { - "java.autobuild.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the 'auto build'", - "scope": "window", - "order": 10 - }, - "java.maxConcurrentBuilds": { - "type": "integer", - "default": 1, - "description": "Max simultaneous project builds", - "scope": "window", - "minimum": 1, - "order": 20 - }, - "java.settings.url": { - "type": "string", - "markdownDescription": "Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences)", - "default": null, - "scope": "window", - "order": 30 - }, - "java.compile.nullAnalysis.nonnull": { - "type": "array", - "default": [ - "javax.annotation.Nonnull", - "org.eclipse.jdt.annotation.NonNull", - "org.springframework.lang.NonNull" - ], - "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", - "scope": "window" - }, - "java.compile.nullAnalysis.nullable": { - "type": "array", - "default": [ - "javax.annotation.Nullable", - "org.eclipse.jdt.annotation.Nullable", - "org.springframework.lang.Nullable" - ], - "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", - "scope": "window" - }, - "java.compile.nullAnalysis.nonnullbydefault": { - "type": "array", - "default": [ - "javax.annotation.ParametersAreNonnullByDefault", - "org.eclipse.jdt.annotation.NonNullByDefault", - "org.springframework.lang.NonNullApi" - ], - "markdownDescription": "Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", - "scope": "window" - }, - "java.compile.nullAnalysis.mode": { - "type": "string", - "enum": [ - "disabled", - "interactive", - "automatic" - ], - "default": "interactive", - "markdownDescription": "Specify how to enable the annotation-based null analysis.", - "scope": "window" - }, - "java.errors.incompleteClasspath.severity": { - "type": [ - "string" - ], - "enum": [ - "ignore", - "info", - "warning", - "error" - ], - "default": "warning", - "description": "Specifies the severity of the message when the classpath is incomplete for a Java file", - "scope": "window" + }, + { + "id": "java-gradle", + "title": "Gradle", + "order": 50, + "properties": { + "java.import.gradle.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the Gradle importer.", + "scope": "window", + "order": 10 + }, + "java.import.gradle.wrapper.enabled": { + "type": "boolean", + "default": true, + "description": "Use Gradle from the 'gradle-wrapper.properties' file.", + "scope": "window", + "order": 20 + }, + "java.import.gradle.version": { + "type": "string", + "default": null, + "description": "Use Gradle from the specific version if the Gradle wrapper is missing or disabled.", + "scope": "window", + "order": 30 + }, + "java.import.gradle.home": { + "type": "string", + "default": null, + "description": "Use Gradle from the specified local installation directory or GRADLE_HOME if the Gradle wrapper is missing or disabled and no 'java.import.gradle.version' is specified.", + "scope": "machine-overridable", + "order": 40 + }, + "java.import.gradle.java.home": { + "type": "string", + "default": null, + "description": "The location to the JVM used to run the Gradle daemon.", + "scope": "machine-overridable", + "order": 50 + }, + "java.import.gradle.user.home": { + "type": "string", + "default": null, + "description": "Setting for GRADLE_USER_HOME.", + "scope": "machine-overridable", + "order": 55 + }, + "java.import.gradle.offline.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable the Gradle offline mode.", + "scope": "window", + "order": 60 + }, + "java.import.gradle.arguments": { + "type": "string", + "default": null, + "description": "Arguments to pass to Gradle.", + "scope": "machine", + "order": 70 + }, + "java.import.gradle.jvmArguments": { + "type": "string", + "default": null, + "description": "JVM arguments to pass to Gradle.", + "scope": "machine", + "order": 80 + }, + "java.import.gradle.annotationProcessing.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the annotation processing on Gradle projects and delegate Annotation Processing to JDT APT. Only works for Gradle 5.2 or higher.", + "scope": "window", + "order": 90 + }, + "java.imports.gradle.wrapper.checksums": { + "type": "array", + "items": { + "type": "object", + "default": {}, + "required": [ + "sha256" + ], + "properties": { + "sha256": { + "type": "string", + "label": "SHA-256 checksum." + }, + "allowed": { + "type": "boolean", + "default": true, + "label": "Is allowed?" + } + }, + "additionalProperties": false, + "uniqueItems": true + }, + "description": "Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers", + "default": [], + "scope": "application" + } } - } - }, - { - "id": "java-jdks", - "title": "Installed JDKs", - "order": 70, - "properties": { - "java.configuration.runtimes": { - "type": "array", - "description": "Map Java Execution Environments to local JDKs.", - "items": { - "type": "object", - "default": {}, - "required": [ - "path", - "name" + }, + { + "id": "java-build", + "title": "Build", + "order": 60, + "properties": { + "java.autobuild.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the 'auto build'", + "scope": "window", + "order": 10 + }, + "java.maxConcurrentBuilds": { + "type": "integer", + "default": 1, + "description": "Max simultaneous project builds", + "scope": "window", + "minimum": 1, + "order": 20 + }, + "java.settings.url": { + "type": "string", + "markdownDescription": "Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences)", + "default": null, + "scope": "window", + "order": 30 + }, + "java.compile.nullAnalysis.nonnull": { + "type": "array", + "default": [ + "javax.annotation.Nonnull", + "org.eclipse.jdt.annotation.NonNull", + "org.springframework.lang.NonNull" ], - "properties": { - "name": { - "type": "string", - "enum": [ - "J2SE-1.5", - "JavaSE-1.6", - "JavaSE-1.7", - "JavaSE-1.8", - "JavaSE-9", - "JavaSE-10", - "JavaSE-11", - "JavaSE-12", - "JavaSE-13", - "JavaSE-14", - "JavaSE-15", - "JavaSE-16", - "JavaSE-17", - "JavaSE-18", - "JavaSE-19", - "JavaSE-20", - "JavaSE-21", - "JavaSE-22" - ], - "description": "Java Execution Environment name. Must be unique." - }, - "path": { - "type": "string", - "pattern": ".*(?` or `}`", - "default": true, - "scope": "window" + "java.configuration.detectJdksAtStart": { + "type": "boolean", + "default": true, + "markdownDescription": "Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `#java.configuration.runtimes#`, the extension will use that version first." + } } - } - }, - { - "id": "java-codecompletion", - "title": "Code Completion", - "order": 90, - "properties": { - "java.completion.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable code completion support", - "scope": "window", - "order": 10 - }, - "java.completion.postfix.enabled": { - "type": "boolean", - "default": true, - "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", - "scope": "window", - "order": 20 - }, - "java.completion.chain.enabled": { - "type": "boolean", - "default": false, - "markdownDescription": "Enable/disable chain completion support. Chain completions are only available when completions are invoked by the completions shortcut", - "scope": "window", - "order": 30 - }, - "java.completion.favoriteStaticMembers": { - "type": "array", - "description": "Defines a list of static members or types with static members. Content assist will propose those static members even if the import is missing.", - "default": [ - "org.junit.Assert.*", - "org.junit.Assume.*", - "org.junit.jupiter.api.Assertions.*", - "org.junit.jupiter.api.Assumptions.*", - "org.junit.jupiter.api.DynamicContainer.*", - "org.junit.jupiter.api.DynamicTest.*", - "org.mockito.Mockito.*", - "org.mockito.ArgumentMatchers.*", - "org.mockito.Answers.*" - ], - "scope": "window", - "order": 40 - }, - "java.completion.filteredTypes": { - "type": "array", - "description": "Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages.", - "default": [ - "java.awt.*", - "com.sun.*", - "sun.*", - "jdk.*", - "org.graalvm.*", - "io.micrometer.shaded.*" - ], - "scope": "window", - "order": 50 - }, - "java.completion.guessMethodArguments": { - "type": [ - "boolean", - "string" - ], - "enum": [ - "auto", - "off", - "insertParameterNames", - "insertBestGuessedArguments" - ], - "enumDescriptions": [ - "Use 'off' only when using Visual Studio Code - Insiders, other platform will defaults to 'insertBestGuessedArguments'.", - "Method arguments will not be inserted during completion.", - "The parameter names will be inserted during completion.", - "The best guessed arguments will be inserted during completion according to the code context." - ], - "default": "auto", - "description": "Specify how the arguments will be filled during completion.", - "scope": "window", - "order": 60 - }, - "java.completion.matchCase": { - "type": "string", - "enum": [ - "firstLetter", - "off" - ], - "enumDescriptions": [ - "Match case for the first letter when doing completion.", - "Do not match case when doing completion." - ], - "default": "firstLetter", - "markdownDescription": "Specify whether to match case for code completion.", - "scope": "window", - "order": 70 - }, - "java.completion.importOrder": { - "type": "array", - "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group. As a result, the empty string (e.g. '') can be used to group all other imports. Static imports are prefixed with a '#'", - "default": [ - "#", - "java", - "javax", - "org", - "com", - "" - ], - "scope": "window", - "order": 80 - }, - "java.completion.lazyResolveTextEdit.enabled": { - "type": "boolean", - "default": true, - "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", - "scope": "window" - }, - "java.completion.maxResults": { - "type": "integer", - "default": 0, - "markdownDescription": "Maximum number of completion results (not including snippets).\n`0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit.", - "scope": "window" - }, - "java.signatureHelp.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable the signature help.", - "scope": "window" - }, - "java.signatureHelp.description.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable to show the description in signature help.", - "scope": "window" - }, - "java.completion.collapseCompletionItems": { - "type": "boolean", - "default": false, - "markdownDescription": "Enable/disable the collapse of overloaded methods in completion items. Overrides `#java.completion.guessMethodArguments#`.", - "scope": "window" + }, + { + "id": "java-formatting", + "title": "Formatting", + "order": 80, + "properties": { + "java.format.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable default Java formatter", + "scope": "window", + "order": 10 + }, + "java.format.settings.url": { + "type": "string", + "markdownDescription": "Specifies the url or file path to the [Eclipse formatter xml settings](https://github.com/redhat-developer/vscode-java/wiki/Formatter-settings).", + "default": null, + "scope": "window", + "order": 20 + }, + "java.format.settings.profile": { + "type": "string", + "description": "Optional formatter profile name from the Eclipse formatter settings.", + "default": null, + "scope": "window", + "order": 30 + }, + "java.format.comments.enabled": { + "type": "boolean", + "description": "Includes the comments during code formatting.", + "default": true, + "scope": "window" + }, + "java.format.onType.enabled": { + "type": "boolean", + "description": "Enable/disable automatic block formatting when typing `;`, `` or `}`", + "default": true, + "scope": "window" + } } - } - }, - { - "id": "java-codegeneration", - "title": "Code Generation", - "order": 100, - "properties": { - "java.templates.fileHeader": { - "type": "array", - "markdownDescription": "Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", - "scope": "window", - "default": [], - "order": 10 - }, - "java.templates.typeComment": { - "type": "array", - "markdownDescription": "Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", - "scope": "window", - "default": [], - "order": 20 - }, - "java.codeGeneration.insertionLocation": { - "type": "string", - "enum": [ - "afterCursor", - "beforeCursor", - "lastMember" - ], - "enumDescriptions": [ - "Insert the generated code after the member where the cursor is located.", - "Insert the generated code before the member where the cursor is located.", - "Insert the generated code as the last member of the target type." - ], - "description": "Specifies the insertion location of the code generated by source actions.", - "default": "afterCursor", - "scope": "window", - "order": 30 - }, - "java.codeGeneration.addFinalForNewDeclaration": { - "type": "string", - "enum": [ - "none", - "fields", - "variables", - "all" - ], - "enumDescriptions": [ - "Do not generate final modifier.", - "Generate 'final' modifier only for new field declarations.", - "Generate 'final' modifier only for new variable declarations.", - "Generate 'final' modifier for all new declarations." - ], - "description": "Whether to generate the 'final' modifer for code actions that create new declarations.", - "default": "none", - "scope": "window" - }, - "java.codeGeneration.hashCodeEquals.useJava7Objects": { - "type": "boolean", - "description": "Use Objects.hash and Objects.equals when generating the hashCode and equals methods. This setting only applies to Java 7 and higher.", - "default": false, - "scope": "window" - }, - "java.codeGeneration.hashCodeEquals.useInstanceof": { - "type": "boolean", - "description": "Use 'instanceof' to compare types when generating the hashCode and equals methods.", - "default": false, - "scope": "window" - }, - "java.codeGeneration.useBlocks": { - "type": "boolean", - "description": "Use blocks in 'if' statements when generating the methods.", - "default": false, - "scope": "window" - }, - "java.codeGeneration.generateComments": { - "type": "boolean", - "description": "Generate method comments when generating the methods.", - "default": false, - "scope": "window" - }, - "java.codeGeneration.toString.template": { - "type": "string", - "description": "The template for generating the toString method.", - "default": "${object.className} [${member.name()}=${member.value}, ${otherMembers}]" - }, - "java.codeGeneration.toString.codeStyle": { - "type": "string", - "enum": [ - "STRING_CONCATENATION", - "STRING_BUILDER", - "STRING_BUILDER_CHAINED", - "STRING_FORMAT" - ], - "enumDescriptions": [ - "String concatenation", - "StringBuilder/StringBuffer", - "StringBuilder/StringBuffer - chained call", - "String.format/MessageFormat" - ], - "description": "The code style for generating the toString method.", - "default": "STRING_CONCATENATION" - }, - "java.codeGeneration.toString.skipNullValues": { - "type": "boolean", - "description": "Skip null values when generating the toString method.", - "default": false, - "scope": "window" - }, - "java.codeGeneration.toString.listArrayContents": { - "type": "boolean", - "description": "List contents of arrays instead of using native toString().", - "default": true, - "scope": "window" - }, - "java.codeGeneration.toString.limitElements": { - "type": "integer", - "description": "Limit number of items in arrays/collections/maps to list, if 0 then list all.", - "default": 0, - "scope": "window" - }, - "java.edit.smartSemicolonDetection.enabled": { - "type": "boolean", - "default": false, - "markdownDescription": "Defines the `smart semicolon` detection. Defaults to `false`.", - "scope": "window" + }, + { + "id": "java-codecompletion", + "title": "Code Completion", + "order": 90, + "properties": { + "java.completion.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable code completion support", + "scope": "window", + "order": 10 + }, + "java.completion.postfix.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Enable/disable postfix completion support. `#editor.snippetSuggestions#` can be used to customize how postfix snippets are sorted.", + "scope": "window", + "order": 20 + }, + "java.completion.chain.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable chain completion support. Chain completions are only available when completions are invoked by the completions shortcut", + "scope": "window", + "order": 30 + }, + "java.completion.favoriteStaticMembers": { + "type": "array", + "description": "Defines a list of static members or types with static members. Content assist will propose those static members even if the import is missing.", + "default": [ + "org.junit.Assert.*", + "org.junit.Assume.*", + "org.junit.jupiter.api.Assertions.*", + "org.junit.jupiter.api.Assumptions.*", + "org.junit.jupiter.api.DynamicContainer.*", + "org.junit.jupiter.api.DynamicTest.*", + "org.mockito.Mockito.*", + "org.mockito.ArgumentMatchers.*", + "org.mockito.Answers.*" + ], + "scope": "window", + "order": 40 + }, + "java.completion.filteredTypes": { + "type": "array", + "description": "Defines the type filters. All types whose fully qualified name matches the selected filter strings will be ignored in content assist or quick fix proposals and when organizing imports. For example 'java.awt.*' will hide all types from the awt packages.", + "default": [ + "java.awt.*", + "com.sun.*", + "sun.*", + "jdk.*", + "org.graalvm.*", + "io.micrometer.shaded.*" + ], + "scope": "window", + "order": 50 + }, + "java.completion.guessMethodArguments": { + "type": [ + "boolean", + "string" + ], + "enum": [ + "auto", + "off", + "insertParameterNames", + "insertBestGuessedArguments" + ], + "enumDescriptions": [ + "Use 'off' only when using Visual Studio Code - Insiders, other platform will defaults to 'insertBestGuessedArguments'.", + "Method arguments will not be inserted during completion.", + "The parameter names will be inserted during completion.", + "The best guessed arguments will be inserted during completion according to the code context." + ], + "default": "auto", + "description": "Specify how the arguments will be filled during completion.", + "scope": "window", + "order": 60 + }, + "java.completion.matchCase": { + "type": "string", + "enum": [ + "firstLetter", + "off" + ], + "enumDescriptions": [ + "Match case for the first letter when doing completion.", + "Do not match case when doing completion." + ], + "default": "firstLetter", + "markdownDescription": "Specify whether to match case for code completion.", + "scope": "window", + "order": 70 + }, + "java.completion.importOrder": { + "type": "array", + "description": "Defines the sorting order of import statements. A package or type name prefix (e.g. 'org.eclipse') is a valid entry. An import is always added to the most specific group. As a result, the empty string (e.g. '') can be used to group all other imports. Static imports are prefixed with a '#'", + "default": [ + "#", + "java", + "javax", + "org", + "com", + "" + ], + "scope": "window", + "order": 80 + }, + "java.completion.lazyResolveTextEdit.enabled": { + "type": "boolean", + "default": true, + "description": "[Experimental] Enable/disable lazily resolving text edits for code completion.", + "scope": "window" + }, + "java.completion.maxResults": { + "type": "integer", + "default": 0, + "markdownDescription": "Maximum number of completion results (not including snippets).\n`0` (the default value) disables the limit, all results are returned. In case of performance problems, consider setting a sensible limit.", + "scope": "window" + }, + "java.signatureHelp.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable the signature help.", + "scope": "window" + }, + "java.signatureHelp.description.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable to show the description in signature help.", + "scope": "window" + }, + "java.completion.collapseCompletionItems": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable the collapse of overloaded methods in completion items. Overrides `#java.completion.guessMethodArguments#`.", + "scope": "window" + } } - } - }, - { - "id": "java-codeaction", - "title": "Code Action", - "order": 110, - "properties": { - "java.cleanup.actions": { - "type": "array", - "markdownDescription": "The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.", - "items": { + }, + { + "id": "java-codegeneration", + "title": "Code Generation", + "order": 100, + "properties": { + "java.templates.fileHeader": { + "type": "array", + "markdownDescription": "Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [], + "order": 10 + }, + "java.templates.typeComment": { + "type": "array", + "markdownDescription": "Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [], + "order": 20 + }, + "java.codeGeneration.insertionLocation": { + "type": "string", + "enum": [ + "afterCursor", + "beforeCursor", + "lastMember" + ], + "enumDescriptions": [ + "Insert the generated code after the member where the cursor is located.", + "Insert the generated code before the member where the cursor is located.", + "Insert the generated code as the last member of the target type." + ], + "description": "Specifies the insertion location of the code generated by source actions.", + "default": "afterCursor", + "scope": "window", + "order": 30 + }, + "java.codeGeneration.addFinalForNewDeclaration": { + "type": "string", + "enum": [ + "none", + "fields", + "variables", + "all" + ], + "enumDescriptions": [ + "Do not generate final modifier.", + "Generate 'final' modifier only for new field declarations.", + "Generate 'final' modifier only for new variable declarations.", + "Generate 'final' modifier for all new declarations." + ], + "description": "Whether to generate the 'final' modifer for code actions that create new declarations.", + "default": "none", + "scope": "window" + }, + "java.codeGeneration.hashCodeEquals.useJava7Objects": { + "type": "boolean", + "description": "Use Objects.hash and Objects.equals when generating the hashCode and equals methods. This setting only applies to Java 7 and higher.", + "default": false, + "scope": "window" + }, + "java.codeGeneration.hashCodeEquals.useInstanceof": { + "type": "boolean", + "description": "Use 'instanceof' to compare types when generating the hashCode and equals methods.", + "default": false, + "scope": "window" + }, + "java.codeGeneration.useBlocks": { + "type": "boolean", + "description": "Use blocks in 'if' statements when generating the methods.", + "default": false, + "scope": "window" + }, + "java.codeGeneration.generateComments": { + "type": "boolean", + "description": "Generate method comments when generating the methods.", + "default": false, + "scope": "window" + }, + "java.codeGeneration.toString.template": { + "type": "string", + "description": "The template for generating the toString method.", + "default": "${object.className} [${member.name()}=${member.value}, ${otherMembers}]" + }, + "java.codeGeneration.toString.codeStyle": { "type": "string", "enum": [ - "qualifyMembers", - "qualifyStaticMembers", - "addOverride", - "addDeprecated", - "stringConcatToTextBlock", - "invertEquals", - "addFinalModifier", - "instanceofPatternMatch", - "lambdaExpressionFromAnonymousClass", - "lambdaExpression", - "switchExpression", - "tryWithResource", + "STRING_CONCATENATION", + "STRING_BUILDER", + "STRING_BUILDER_CHAINED", + "STRING_FORMAT" + ], + "enumDescriptions": [ + "String concatenation", + "StringBuilder/StringBuffer", + "StringBuilder/StringBuffer - chained call", + "String.format/MessageFormat" + ], + "description": "The code style for generating the toString method.", + "default": "STRING_CONCATENATION" + }, + "java.codeGeneration.toString.skipNullValues": { + "type": "boolean", + "description": "Skip null values when generating the toString method.", + "default": false, + "scope": "window" + }, + "java.codeGeneration.toString.listArrayContents": { + "type": "boolean", + "description": "List contents of arrays instead of using native toString().", + "default": true, + "scope": "window" + }, + "java.codeGeneration.toString.limitElements": { + "type": "integer", + "description": "Limit number of items in arrays/collections/maps to list, if 0 then list all.", + "default": 0, + "scope": "window" + }, + "java.edit.smartSemicolonDetection.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Defines the `smart semicolon` detection. Defaults to `false`.", + "scope": "window" + } + } + }, + { + "id": "java-codeaction", + "title": "Code Action", + "order": 110, + "properties": { + "java.cleanup.actions": { + "type": "array", + "markdownDescription": "The list of clean ups to be run on the current document when it's saved or when the cleanup command is issued. Clean ups can automatically fix code style or programming mistakes. Click [HERE](command:_java.learnMoreAboutCleanUps) to learn more about what each clean up does.", + "items": { + "type": "string", + "enum": [ + "qualifyMembers", + "qualifyStaticMembers", + "addOverride", + "addDeprecated", + "stringConcatToTextBlock", + "invertEquals", + "addFinalModifier", + "instanceofPatternMatch", + "lambdaExpressionFromAnonymousClass", + "lambdaExpression", + "switchExpression", + "tryWithResource", + "renameFileToType" + ] + }, + "default": [ "renameFileToType" - ] + ], + "scope": "window", + "order": 10 }, - "default": [ - "renameFileToType" - ], - "scope": "window", - "order": 10 - }, - "java.cleanup.actionsOnSave": { - "type": "array", - "deprecationMessage": "Deprecated, please use 'java.cleanup.actions' instead.", - "items": { + "java.cleanup.actionsOnSave": { + "type": "array", + "deprecationMessage": "Deprecated, please use 'java.cleanup.actions' instead.", + "items": { + "type": "string", + "enum": [ + "qualifyMembers", + "qualifyStaticMembers", + "addOverride", + "addDeprecated", + "stringConcatToTextBlock", + "invertEquals", + "addFinalModifier", + "instanceofPatternMatch", + "lambdaExpressionFromAnonymousClass", + "lambdaExpression", + "switchExpression", + "tryWithResource" + ] + }, + "default": [], + "scope": "window" + }, + "java.saveActions.cleanup": { + "type": "boolean", + "default": true, + "description": "Enable/disable cleanup actions on save." + }, + "java.saveActions.organizeImports": { + "type": "boolean", + "default": false, + "description": "Enable/disable auto organize imports on save action", + "scope": "window", + "order": 20 + }, + "java.sources.organizeImports.starThreshold": { + "type": "integer", + "description": "Specifies the number of imports added before a star-import declaration is used.", + "default": 99, + "scope": "window", + "minimum": 1, + "order": 30 + }, + "java.sources.organizeImports.staticStarThreshold": { + "type": "integer", + "description": "Specifies the number of static imports added before a star-import declaration is used.", + "default": 99, + "scope": "window", + "minimum": 1, + "order": 40 + }, + "java.quickfix.showAt": { "type": "string", "enum": [ - "qualifyMembers", - "qualifyStaticMembers", - "addOverride", - "addDeprecated", - "stringConcatToTextBlock", - "invertEquals", - "addFinalModifier", - "instanceofPatternMatch", - "lambdaExpressionFromAnonymousClass", - "lambdaExpression", - "switchExpression", - "tryWithResource" - ] + "line", + "problem" + ], + "default": "line", + "description": "Show quickfixes at the problem or line level.", + "scope": "window" }, - "default": [], - "scope": "window" - }, - "java.saveActions.cleanup": { - "type": "boolean", - "default": true, - "description": "Enable/disable cleanup actions on save." - }, - "java.saveActions.organizeImports": { - "type": "boolean", - "default": false, - "description": "Enable/disable auto organize imports on save action", - "scope": "window", - "order": 20 - }, - "java.sources.organizeImports.starThreshold": { - "type": "integer", - "description": "Specifies the number of imports added before a star-import declaration is used.", - "default": 99, - "scope": "window", - "minimum": 1, - "order": 30 - }, - "java.sources.organizeImports.staticStarThreshold": { - "type": "integer", - "description": "Specifies the number of static imports added before a star-import declaration is used.", - "default": 99, - "scope": "window", - "minimum": 1, - "order": 40 - }, - "java.quickfix.showAt": { - "type": "string", - "enum": [ - "line", - "problem" - ], - "default": "line", - "description": "Show quickfixes at the problem or line level.", - "scope": "window" - }, - "java.codeAction.sortMembers.avoidVolatileChanges": { - "type": "boolean", - "default": true, - "description": "Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring.", - "scope": "window" - }, - "java.refactoring.extract.interface.replace": { - "type": "boolean", - "markdownDescription": "Specify whether to replace all the occurrences of the subtype with the new extracted interface.", - "default": true + "java.codeAction.sortMembers.avoidVolatileChanges": { + "type": "boolean", + "default": true, + "description": "Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring.", + "scope": "window" + }, + "java.refactoring.extract.interface.replace": { + "type": "boolean", + "markdownDescription": "Specify whether to replace all the occurrences of the subtype with the new extracted interface.", + "default": true + } } - } - }, - { - "id": "java-codenagivation", - "title": "Code Navigation", - "order": 120, - "properties": { - "java.referencesCodeLens.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the references code lens.", - "scope": "window", - "order": 10 - }, - "java.implementationsCodeLens.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the implementations code lens.", - "scope": "window", - "order": 20 - }, - "java.references.includeAccessors": { - "type": "boolean", - "default": true, - "description": "Include getter, setter and builder/constructor when finding references.", - "scope": "window", - "order": 30 - }, - "java.references.includeDecompiledSources": { - "type": "boolean", - "default": true, - "description": "Include the decompiled sources when finding references.", - "scope": "window", - "order": 40 - }, - "java.symbols.includeSourceMethodDeclarations": { - "type": "boolean", - "markdownDescription": "Include method declarations from source files in symbol search.", - "default": false, - "scope": "window", - "order": 50 - }, - "java.typeHierarchy.lazyLoad": { - "type": "boolean", - "default": false, - "description": "Enable/disable lazy loading the content in type hierarchy. Lazy loading could save a lot of loading time but every type should be expanded manually to load its content.", - "scope": "window", - "order": 60 - }, - "java.inlayHints.parameterNames.enabled": { - "type": "string", - "enum": [ - "none", - "literals", - "all" - ], - "enumDescriptions": [ - "Disable parameter name hints", - "Enable parameter name hints only for literal arguments", - "Enable parameter name hints for literal and non-literal arguments" - ], - "default": "literals", - "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n `#java.inlayHints.parameterNames.exclusions#` can be used to disable the inlay hints for methods.", - "scope": "window", - "order": 70 - }, - "java.inlayHints.parameterNames.exclusions": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "markdownDescription": "The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples:\n - `java.lang.Math.*` - All the methods from java.lang.Math.\n - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'.\n - `*.println(*)` - Methods named as 'println'.\n - `(from, to)` - Methods with two parameters named as 'from' and 'to'.\n - `(arg*)` - Methods with one parameter whose name starts with 'arg'.", - "scope": "window", - "order": 80 + }, + { + "id": "java-codenagivation", + "title": "Code Navigation", + "order": 120, + "properties": { + "java.referencesCodeLens.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable the references code lens.", + "scope": "window", + "order": 10 + }, + "java.implementationsCodeLens.enabled": { + "type": "boolean", + "default": false, + "description": "Enable/disable the implementations code lens.", + "scope": "window", + "order": 20 + }, + "java.references.includeAccessors": { + "type": "boolean", + "default": true, + "description": "Include getter, setter and builder/constructor when finding references.", + "scope": "window", + "order": 30 + }, + "java.references.includeDecompiledSources": { + "type": "boolean", + "default": true, + "description": "Include the decompiled sources when finding references.", + "scope": "window", + "order": 40 + }, + "java.symbols.includeSourceMethodDeclarations": { + "type": "boolean", + "markdownDescription": "Include method declarations from source files in symbol search.", + "default": false, + "scope": "window", + "order": 50 + }, + "java.typeHierarchy.lazyLoad": { + "type": "boolean", + "default": false, + "description": "Enable/disable lazy loading the content in type hierarchy. Lazy loading could save a lot of loading time but every type should be expanded manually to load its content.", + "scope": "window", + "order": 60 + }, + "java.inlayHints.parameterNames.enabled": { + "type": "string", + "enum": [ + "none", + "literals", + "all" + ], + "enumDescriptions": [ + "Disable parameter name hints", + "Enable parameter name hints only for literal arguments", + "Enable parameter name hints for literal and non-literal arguments" + ], + "default": "literals", + "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n `#java.inlayHints.parameterNames.exclusions#` can be used to disable the inlay hints for methods.", + "scope": "window", + "order": 70 + }, + "java.inlayHints.parameterNames.exclusions": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "markdownDescription": "The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples:\n - `java.lang.Math.*` - All the methods from java.lang.Math.\n - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'.\n - `*.println(*)` - Methods named as 'println'.\n - `(from, to)` - Methods with two parameters named as 'from' and 'to'.\n - `(arg*)` - Methods with one parameter whose name starts with 'arg'.", + "scope": "window", + "order": 80 + } } - } - }, - { - "id": "java-others", - "title": "Others", - "order": 130, - "properties": { - "java.eclipse.downloadSources": { - "type": "boolean", - "default": false, - "description": "Enable/disable download of Maven source artifacts for Eclipse projects.", - "scope": "window" - }, - "java.contentProvider.preferred": { - "type": "string", - "description": "Preferred content provider (a 3rd party decompiler id, usually)", - "default": null, - "scope": "window" - }, - "java.foldingRange.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable smart folding range support. If disabled, it will use the default indentation-based folding range provided by VS Code.", - "scope": "window" - }, - "java.selectionRange.enabled": { - "type": "boolean", - "default": true, - "description": "Enable/disable Smart Selection support for Java. Disabling this option will not affect the VS Code built-in word-based and bracket-based smart selection.", - "scope": "window" - }, - "java.edit.validateAllOpenBuffersOnChanges": { - "type": "boolean", - "default": false, - "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", - "scope": "window" - }, - "java.editor.reloadChangedSources": { - "type": "string", - "enum": [ - "ask", - "auto", - "manual" - ], - "enumDescriptions": [ - "Ask to reload the sources of the open class files", - "Automatically reload the sources of the open class files", - "Manually reload the sources of the open class files" - ], - "default": "ask", - "markdownDescription": "Specifies whether to reload the sources of the open class files when their source jar files are changed.", - "scope": "window" + }, + { + "id": "java-others", + "title": "Others", + "order": 130, + "properties": { + "java.eclipse.downloadSources": { + "type": "boolean", + "default": false, + "description": "Enable/disable download of Maven source artifacts for Eclipse projects.", + "scope": "window" + }, + "java.contentProvider.preferred": { + "type": "string", + "description": "Preferred content provider (a 3rd party decompiler id, usually)", + "default": null, + "scope": "window" + }, + "java.foldingRange.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable smart folding range support. If disabled, it will use the default indentation-based folding range provided by VS Code.", + "scope": "window" + }, + "java.selectionRange.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable Smart Selection support for Java. Disabling this option will not affect the VS Code built-in word-based and bracket-based smart selection.", + "scope": "window" + }, + "java.edit.validateAllOpenBuffersOnChanges": { + "type": "boolean", + "default": false, + "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", + "scope": "window" + }, + "java.editor.reloadChangedSources": { + "type": "string", + "enum": [ + "ask", + "auto", + "manual" + ], + "enumDescriptions": [ + "Ask to reload the sources of the open class files", + "Automatically reload the sources of the open class files", + "Manually reload the sources of the open class files" + ], + "default": "ask", + "markdownDescription": "Specifies whether to reload the sources of the open class files when their source jar files are changed.", + "scope": "window" + } } } - }], + ], "configurationDefaults": { "[java]": { "editor.suggest.snippetsPreventQuickSuggestions": false @@ -1840,15 +1851,15 @@ "@types/node": "^18.17.1", "@types/react": "^17.0.37", "@types/react-dom": "^17.0.11", - "@types/vscode-webview": "^1.57.0", "@types/semver": "^7.3.8", "@types/sinon": "^10.0.12", "@types/vscode": "^1.77.0", + "@types/vscode-webview": "^1.57.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", - "@vscode/test-electron": "^2.3.8", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", + "@vscode/test-electron": "^2.3.8", "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", @@ -1869,7 +1880,7 @@ }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", - "@redhat-developer/vscode-redhat-telemetry": "^0.7.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", From d36963882fa37cedd0b631e4bc3cb55dbf89e6a0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 16 May 2024 11:05:46 -0400 Subject: [PATCH 477/708] Avoid sending an "empty" (lacking project data) startup event. - When the language server import takes too long (>60s), an "empty" startup event is sent to at least capture some data. This can result in duplicate events when a project import finally completes, or a (now) useless event if something goes wrong. - Avoid sending such events as there are better ways to determine if the language server encountered an error Signed-off-by: Roland Grunberg --- src/telemetry.ts | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/telemetry.ts b/src/telemetry.ts index 4ada82877..9b0b6c351 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -11,7 +11,6 @@ export namespace Telemetry { export const SERVER_INITIALIZED_EVT = "java.workspace.initialized"; export const LS_ERROR = "java.ls.error"; let telemetryManager: TelemetryService = null; - let serverInitializedReceived = false; /** * Starts the telemetry service @@ -26,7 +25,6 @@ export namespace Telemetry { const redhatService = await getRedHatService(context); const telemService = await redhatService.getTelemetryService(); telemetryManager = telemService; - setTimeout(sendEmptyStartUp, 60000); // assume LS may not have initialized return telemService; } @@ -45,7 +43,6 @@ export namespace Telemetry { let properties: any; if (eventName === STARTUP_EVT) { - serverInitializedReceived = true; properties= { ...data, ...javaSettings }; } else { properties= { ...data}; @@ -57,12 +54,6 @@ export namespace Telemetry { }); } - function sendEmptyStartUp() { - if (!serverInitializedReceived) { - return sendTelemetry(STARTUP_EVT); - } - } - function getJavaSettingsForTelemetry(config: WorkspaceConfiguration) { // settings whose values we can record const SETTINGS_BASIC = [ From 2750483ee9f9bb7768bce8388d1eb27341317ec1 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 29 May 2024 15:17:44 -0400 Subject: [PATCH 478/708] Changelog for 1.31.0. Signed-off-by: Roland Grunberg --- CHANGELOG.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 47760d887..2b695a041 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log +## 1.31.0 (May 30th, 2024) + * performance - Create the default project only when it is necessary. See [#3452](https://github.com/redhat-developer/vscode-java/issues/3452). + * performance - Improve order of operations when importing multi-module Maven projects. See [#3637](https://github.com/redhat-developer/vscode-java/issues/3637). + * enhancement - Support delegate API to retrieve/update active profiles of Maven projects. See [JLS#3158](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3158). + * enhancement - Support delegate API for updating Java project options. See [JLS#3162](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3162). + * bug fix - Fix indentation for new line preceded by comma. See [#3396](https://github.com/redhat-developer/vscode-java/issues/3396). + * bug fix - Support document paste across older versions of VS Code. See [#3631](https://github.com/redhat-developer/vscode-java/issues/3631). + * bug fix - Fall back to `stdio` transport if `pipe` is likely to fail. See [#3649](https://github.com/redhat-developer/vscode-java/issues/3649). + * bug fix - Switch expression on a boolean value does not report error. See [JLS#3141](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3141). + * bug fix - Only clean default project when building workspace if it exists. See [JLS#3153](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3153). + * bug fix - Avoid sending an "empty" (lacking project data) startup event. See [#3655](https://github.com/redhat-developer/vscode-java/pull/3655). + * dependencies - Update vscode-redhat-telemetry to 0.8.0. See [#3659](https://github.com/redhat-developer/vscode-java/pull/3659). + ## 1.30.0 (April 25th, 2024) * enhancement - Add `final` to new declarations generated from code actions. See [#3586](https://github.com/redhat-developer/vscode-java/pull/3586). * bug fix - Change default client/server transport from `stdio` to `pipe`. See [#3587](https://github.com/redhat-developer/vscode-java/pull/3587). From 2015139c5773c0107f75d2289e3656f45cb38c98 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 May 2024 10:42:43 -0400 Subject: [PATCH 479/708] Upversion to 1.32.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 739b2ba21..6b5e0c371 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.31.0", + "version": "1.32.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.31.0", + "version": "1.32.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index b1d845e44..2cdc2b88a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.31.0", + "version": "1.32.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 70ebc3eec19f0e827734b9a20f016e92433c834d Mon Sep 17 00:00:00 2001 From: Marco Klein Date: Tue, 11 Jun 2024 14:09:46 +0200 Subject: [PATCH 480/708] Adopt the Lombok 1.18.33 edge release. Co-authored-by: Marco Klein Co-authored-by: Roland Grunberg --- gulpfile.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 08e633557..fdf8f5e23 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,14 +127,18 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.32'; + const lombokVersion = '1.18.33'; // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + const lombokUrl = `https://projectlombok.org/lombok-edge.jar`; download(lombokUrl) .pipe(gulp.dest("./lombok/")) .on("error", reject) - .on("end", resolve); + .on("end", () => { + fse.renameSync("./lombok/lombok-edge.jar", `./lombok/lombok-${lombokVersion}.jar`); + resolve(); + }); }); + // TODO: Switch to stable version once lombok 1.18.33 is released. done(); }); From bc1efd60255bc1804c8306b2b61c33994359183a Mon Sep 17 00:00:00 2001 From: Jinbo Wang Date: Wed, 19 Jun 2024 16:04:04 +0800 Subject: [PATCH 481/708] Fix NPE when using 'Launch Extension - JDTLS Client' to local debug extension (#3677) --- src/javaServerStarter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 231229af1..4fa228540 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -69,7 +69,7 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, executable.transport = TransportKind.pipe; break; } - logger.info(`Starting Java server with: ${executable.command} ${executable.args.join(' ')}`); + logger.info(`Starting Java server with: ${executable.command} ${executable.args?.join(' ')}`); return executable; } export function awaitServerConnection(port): Thenable { From e3186c4c969f22209695894f50face2716d61418 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 21 Jun 2024 15:05:42 +0800 Subject: [PATCH 482/708] Check the pipe name when transport kind is default (#3680) Signed-off-by: Sheng Chen --- src/javaServerStarter.ts | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 4fa228540..679097379 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -53,7 +53,11 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, const transportKind = getJavaConfiguration().get('transport'); switch (transportKind) { + case 'stdio': + executable.transport = TransportKind.stdio; + break; case 'pipe': + default: executable.transport = TransportKind.pipe; try { generateRandomPipeName(); @@ -62,12 +66,6 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, executable.transport = TransportKind.stdio; } break; - case 'stdio': - executable.transport = TransportKind.stdio; - break; - default: - executable.transport = TransportKind.pipe; - break; } logger.info(`Starting Java server with: ${executable.command} ${executable.args?.join(' ')}`); return executable; From 7b2173907cf5c6f016d8ddc9a7adfac0f21c95ad Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Jun 2024 17:07:30 -0400 Subject: [PATCH 483/708] Changelog for 1.32.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b695a041..5c24395c6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 1.32.0 (June 27th, 2024) + * performance - Ensure every null analysis annotation has a value defined when enabled. See [#3387](https://github.com/redhat-developer/vscode-java/issues/3387). + * enhancement - Add `final` to "Extract to local variable" quick assist if requested. See [#3308](https://github.com/redhat-developer/vscode-java/issues/3308). + * bug fix - Fix issues with the Lombok annotation handler. See [#3561](https://github.com/redhat-developer/vscode-java/issues/3561). + * bug fix - Revalidate project files after classpath changes when autobuild is off. See [JLS#3155](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3155). + * bug fix - Code completion fails with classes that are permitted by a sealed class. See [#3636](https://github.com/redhat-developer/vscode-java/issues/3636). + * bug fix - Perform verification on pipe name when transport kind is `default`. See [#3680](https://github.com/redhat-developer/vscode-java/pull/3680). + * bug fix - Some code actions may fail to resolve when machine's processor count too low. See [JLS#3180](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3180). + * bug fix - Support the import of multi-folder Gradle projects with same name. See [JLS#1743](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/1743). + * bug fix - Autobuild setting should be respected on initialization. See [JLS#3176](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3176). + * bug fix - Improve chain completion by waiting for either "main" or "context" chains. See [JLS#2730](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2730). + * bug fix - Report only one instance of a logged error through telemetry. See [JLS#3190](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3190). + * build - Fix NPE when using 'Launch Extension - JDTLS Client' to local debug extension. See [#3677](https://github.com/redhat-developer/vscode-java/pull/3677). + ## 1.31.0 (May 30th, 2024) * performance - Create the default project only when it is necessary. See [#3452](https://github.com/redhat-developer/vscode-java/issues/3452). * performance - Improve order of operations when importing multi-module Maven projects. See [#3637](https://github.com/redhat-developer/vscode-java/issues/3637). From 38c8b582b40db9644696924f899c73a3251563f4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Jun 2024 10:10:53 -0400 Subject: [PATCH 484/708] Upversion to 1.33.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6b5e0c371..795b164e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.32.0", + "version": "1.33.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.32.0", + "version": "1.33.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 2cdc2b88a..4d9041951 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.32.0", + "version": "1.33.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 4d8492f8e10b2078f69dd9e2766324abffc83218 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Thu, 11 Jul 2024 13:34:12 -0400 Subject: [PATCH 485/708] Fix class links in completion documentation --- src/extension.ts | 30 ++++++++++++++++++++++++++++-- src/providerDispatcher.ts | 14 +++----------- 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 5f7e92464..8e86d8283 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; +import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, MarkdownString, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -20,7 +20,7 @@ import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { OutputInfoCollector } from './outputInfoCollector'; import { collectJavaExtensions, getBundlesToReload, getShortcuts, IJavaShortcut, isContributedPartUpdated } from './plugin'; -import { registerClientProviders } from './providerDispatcher'; +import { fixJdtSchemeHoverLinks, registerClientProviders } from './providerDispatcher'; import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { languageStatusBarProvider } from './runtimeStatusBarProvider'; @@ -93,6 +93,25 @@ function getHeapDumpFolderFromSettings(): string { return results[1] || results[2] || results[3]; } +const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\\\))|([^)]))+))\)/g; + +/** + * Replace `jdt://` links in the documentation with links that execute the VS Code command required to open the referenced file. + * + * Extracted from {@link fixJdtSchemeHoverLinks} for use in completion item documentation. + * + * @param oldDocumentation the documentation to fix the links in + * @returns the documentation with fixed links + */ +export function fixJdtLinksInDocumentation(oldDocumentation: MarkdownString): MarkdownString { + const newContent: string = oldDocumentation.value.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { + const uri = `command:${Commands.OPEN_FILE}?${encodeURI(JSON.stringify([encodeURIComponent(group2)]))}`; + return `${group1}${uri})`; + }); + const mdString = new MarkdownString(newContent); + mdString.isTrusted = true; + return mdString; +} export async function activate(context: ExtensionContext): Promise { await loadSupportedJreNames(context); @@ -225,6 +244,13 @@ export async function activate(context: ExtensionContext): Promise }); } }, + resolveCompletionItem: async (item, token, next): Promise => { + const completionItem = await next(item, token); + if (completionItem.documentation instanceof MarkdownString) { + completionItem.documentation = fixJdtLinksInDocumentation(completionItem.documentation); + } + return completionItem; + }, // https://github.com/redhat-developer/vscode-java/issues/2130 // include all diagnostics for the current line in the CodeActionContext params for the performance reason provideCodeActions: async (document, range, context, token, next) => { diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index e2a8da58c..3d4e29414 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -5,7 +5,7 @@ import { DocumentSymbol as clientDocumentSymbol, DocumentSymbolRequest, HoverReq import { LanguageClient } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import { Commands } from "./commands"; -import { getActiveLanguageClient } from "./extension"; +import { fixJdtLinksInDocumentation, getActiveLanguageClient } from "./extension"; import { createClientHoverProvider } from "./hoverAction"; import { ClassFileContentsRequest } from "./protocol"; import { ServerMode } from "./settings"; @@ -197,8 +197,6 @@ function overwriteWorkspaceSymbolProvider(context: ExtensionContext): void { }); } -const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\\\))|([^)]))+))\)/g; - /** * Returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI. * @@ -209,17 +207,11 @@ const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\ * @param hover The hover to fix the jdt:// links for * @returns the hover with all jdt:// links replaced with a command:// link that opens the jdt URI */ -function fixJdtSchemeHoverLinks(hover: Hover): Hover { +export function fixJdtSchemeHoverLinks(hover: Hover): Hover { const newContents: (MarkedString | MarkdownString)[] = []; for (const content of hover.contents) { if (content instanceof MarkdownString) { - const newContent: string = (content).value.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { - const uri = `command:${Commands.OPEN_FILE}?${encodeURI(JSON.stringify([encodeURIComponent(group2)]))}`; - return `${group1}${uri})`; - }); - const mdString = new MarkdownString(newContent); - mdString.isTrusted = true; - newContents.push(mdString); + newContents.push(fixJdtLinksInDocumentation(content)); } else { newContents.push(content); } From 7350e2c9b750b5125720fd2aefc85bebf07916c3 Mon Sep 17 00:00:00 2001 From: Sheng Chen Date: Fri, 19 Jul 2024 13:17:47 +0800 Subject: [PATCH 486/708] Expose source actions in light bulb (#3714) --- src/codeActionProvider.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/codeActionProvider.ts b/src/codeActionProvider.ts index 8aebcea7c..e3ac0283c 100644 --- a/src/codeActionProvider.ts +++ b/src/codeActionProvider.ts @@ -19,7 +19,12 @@ export const javaRefactorKinds: Map = new Map([ export class RefactorDocumentProvider implements CodeActionProvider { provideCodeActions() { - return []; + return [{ + // The aim of this is to expose the source actions in the light bulb. + title: "Source Actions...", + command: "editor.action.sourceAction", + kind: CodeActionKind.Empty, + }]; } public static readonly metadata: CodeActionProviderMetadata = { From e3602eb1588470f67d95d2d6cdb4584505d0cd21 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 1 Mar 2024 01:30:34 -0500 Subject: [PATCH 487/708] Add tag property to better track kinds of stacktrace errors of interest. Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index c0920438f..5d65e9f59 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -340,9 +340,17 @@ export class StandardLanguageClient { if (e.name === Telemetry.SERVER_INITIALIZED_EVT) { return Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, e.properties); } else if (e.name === Telemetry.LS_ERROR) { + const tags = []; const exception: string = e?.properties.exception; - if (exception !== undefined && exception.includes("dtree.ObjectNotFoundException")) { - return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + if (exception !== undefined) { + if (exception.includes("dtree.ObjectNotFoundException")) { + tags.push("dtree.ObjectNotFoundException"); + } + + if (tags.length > 0) { + e.properties['tags'] = tags; + return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + } } } }); From bf05afb36fb2ba9a5f6b271e07b805ac09ab57b6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 24 Jul 2024 16:57:42 -0400 Subject: [PATCH 488/708] Add setting to exclude files from diagnostic publishing. - java.diagnostic.filter setting - Suggest project reload when the setting changes and add support for arrays in hasConfigKeyChanged(..) Signed-off-by: Roland Grunberg --- README.md | 3 +++ package.json | 9 +++++++++ src/settings.ts | 9 +++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b18426e23..1a4469c35 100644 --- a/README.md +++ b/README.md @@ -249,6 +249,9 @@ The following settings are supported: * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. +New in 1.33.0 +* `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java'). + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 4d9041951..1f0a32027 100644 --- a/package.json +++ b/package.json @@ -1474,6 +1474,15 @@ "markdownDescription": "Specifies whether to recheck all open Java files for diagnostics when editing a Java file.", "scope": "window" }, + "java.diagnostic.filter": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java').", + "scope": "window" + }, "java.editor.reloadChangedSources": { "type": "string", "enum": [ diff --git a/src/settings.ts b/src/settings.ts index e7b06c78f..2a01b2a81 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -136,11 +136,16 @@ function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: Work || hasConfigKeyChanged('jdt.ls.vmargs', oldConfig, newConfig) || hasConfigKeyChanged('server.launchMode', oldConfig, newConfig) || hasConfigKeyChanged('sharedIndexes.location', oldConfig, newConfig) - || hasConfigKeyChanged('transport', oldConfig, newConfig); + || hasConfigKeyChanged('transport', oldConfig, newConfig) + || hasConfigKeyChanged('diagnostic.filter', oldConfig, newConfig); } function hasConfigKeyChanged(key, oldConfig, newConfig) { - return oldConfig.get(key) !== newConfig.get(key); + const oldValue = oldConfig.get(key); + const newValue = newConfig.get(key); + return Array.isArray(oldValue) && Array.isArray(newValue) + ? JSON.stringify(oldValue) !== JSON.stringify(newValue) + : oldValue !== newValue; } export function getJavaEncoding(): string { From a9144a7fccf01219022e7e7a9e7571c685aef7bb Mon Sep 17 00:00:00 2001 From: logonoff Date: Fri, 26 Jul 2024 15:04:06 -0400 Subject: [PATCH 489/708] Clean old autogenerated globalStorage folders (#2597) Signed-off-by: logonoff --- src/extension.ts | 28 ++++++++++++++++++++++++++-- src/javaServerStarter.ts | 14 +++----------- src/utils.ts | 10 ++++++++++ 3 files changed, 39 insertions(+), 13 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 8e86d8283..612d3e0af 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -14,7 +14,7 @@ import { ClientErrorHandler } from './clientErrorHandler'; import { Commands, CommandTitle } from './commands'; import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; -import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64 } from './javaServerStarter'; +import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64, startedFromSources } from './javaServerStarter'; import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; @@ -30,7 +30,7 @@ import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause } from './utils'; +import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause, getVersion } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; @@ -159,6 +159,10 @@ export async function activate(context: ExtensionContext): Promise cleanJavaWorkspaceStorage(); + if (!startedFromSources()) { // Dev mode: version may not match package.json, deleting the in-use folder + cleanOldGlobalStorage(context); + } + // https://github.com/redhat-developer/vscode-java/issues/3484 if (process.platform === 'darwin' && process.arch === 'x64') { try { @@ -1101,6 +1105,26 @@ async function cleanJavaWorkspaceStorage() { } } +async function cleanOldGlobalStorage(context: ExtensionContext) { + const currentVersion = getVersion(context.extensionPath); + const globalStoragePath = context.globalStorageUri?.fsPath; // .../Code/User/globalStorage/redhat.java + + ensureExists(globalStoragePath); + + // delete folders in .../User/globalStorage/redhat.java that are not named the current version + fs.promises.readdir(globalStoragePath).then(async (files) => { + await Promise.all(files.map(async (file) => { + const currentPath = path.join(globalStoragePath, file); + const stat = await fs.promises.stat(currentPath); + + if (stat.isDirectory() && file !== currentVersion) { + logger.info(`Removing old folder in globalStorage : ${file}`); + deleteDirectory(currentPath); + } + })); + }); +} + export function registerCodeCompletionTelemetryListener() { apiManager.getApiInstance().onDidRequestEnd((traceEvent: TraceEvent) => { if (traceEvent.type === CompletionRequest.method) { diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 679097379..b8886d05c 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -11,7 +11,7 @@ import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; -import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp } from './utils'; +import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion } from './utils'; import { log } from 'console'; // eslint-disable-next-line no-var @@ -254,15 +254,7 @@ export function getSharedIndexCache(context: ExtensionContext): string { function resolveConfiguration(context, configDir) { ensureExists(context.globalStoragePath); - const extensionPath = path.resolve(context.extensionPath, "package.json"); - const packageFile = JSON.parse(fs.readFileSync(extensionPath, 'utf8')); - let version; - if (packageFile) { - version = packageFile.version; - } - else { - version = '0.0.0'; - } + const version = getVersion(context.extensionPath); let configuration = path.resolve(context.globalStoragePath, version); ensureExists(configuration); configuration = path.resolve(configuration, configDir); @@ -288,7 +280,7 @@ function startedInDebugMode(): boolean { return hasDebugFlag(args); } -function startedFromSources(): boolean { +export function startedFromSources(): boolean { return process.env['DEBUG_VSCODE_JAVA'] === 'true'; } diff --git a/src/utils.ts b/src/utils.ts index c3ff4805f..8d342b48f 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -316,3 +316,13 @@ export function resolveActualCause(callstack: any): any { return callstack; } + +export function getVersion(extensionPath: string): string { + const packagePath = path.resolve(extensionPath, "package.json"); + const packageFile = JSON.parse(fs.readFileSync(packagePath, 'utf8')); + if (packageFile) { + return packageFile.version; + } + + return '0.0.0'; +} From ba61599f306671f742925282f9927d2e8925ce32 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 31 Jul 2024 11:06:21 -0400 Subject: [PATCH 490/708] Changelog for 1.33.0. - Adjust project compliance to reflect drop of pre-1.8 support in JDT Signed-off-by: Roland Grunberg --- CHANGELOG.md | 10 ++++++++++ README.md | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c24395c6..1539ce4ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.33.0 (August 1st, 2024) + * performance - Clean up invalid projects during initialization to prevent build cycles. See [#3639](https://github.com/redhat-developer/vscode-java/issues/3639). + * enhancement - Expose source actions via. the code action (light bulb) menu. See [#3714](https://github.com/redhat-developer/vscode-java/pull/3714). + * enhancement - Use `java.diagnostic.filter` to exclude files from the "Problems" tab. See [#2150](https://github.com/redhat-developer/vscode-java/issues/2150). + * enhancement - Clear out-of-date files under extension's global storage. See [#2597](https://github.com/redhat-developer/vscode-java/issues/2597). + * enhancement - Add support for callees based on implementors for call hierarchy. See [JLS#2780](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2780). + * bug fix - Links to classes do not appear in completion documentation. See [#3697](https://github.com/redhat-developer/vscode-java/issues/3697). + * bug fix - Add tag property to better track kinds of stacktrace errors of interest. See [#3720](https://github.com/redhat-developer/vscode-java/pull/3720). + * dependencies - Target platform update resulting in **loss of support for Java versions older than 1.8**. See [JLS#3227](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3227). + ## 1.32.0 (June 27th, 2024) * performance - Ensure every null analysis annotation has a value defined when enabled. See [#3387](https://github.com/redhat-developer/vscode-java/issues/3387). * enhancement - Add `final` to "Extract to local variable" quick assist if requested. See [#3308](https://github.com/redhat-developer/vscode-java/issues/3308). diff --git a/README.md b/README.md index 1a4469c35..6599d5e1b 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.5 to Java 22 +* Supports code from Java 1.8 to Java 22 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support From ab293222bb78dc130923949d057e38fe83366e5d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 1 Aug 2024 10:16:36 -0400 Subject: [PATCH 491/708] Upversion to 1.34.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6599d5e1b..bacf5560d 100644 --- a/README.md +++ b/README.md @@ -248,8 +248,6 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. - -New in 1.33.0 * `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java'). Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 795b164e7..2d8ad0346 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.33.0", + "version": "1.34.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.33.0", + "version": "1.34.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 1f0a32027..9b171032b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.33.0", + "version": "1.34.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From e638d2745f13c15f78213d929d2501924a6ca24d Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 8 Aug 2024 10:24:32 -0400 Subject: [PATCH 492/708] Fix JDK version checking workflow. - Adjust regular expression to take into account the new lowest JRE version Signed-off-by: Roland Grunberg --- .github/scripts/check_and_update_jdk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/check_and_update_jdk.py b/.github/scripts/check_and_update_jdk.py index 0b0cab8c2..3f21bc1fe 100644 --- a/.github/scripts/check_and_update_jdk.py +++ b/.github/scripts/check_and_update_jdk.py @@ -5,7 +5,7 @@ import json import ast -readme_ver_pattern = r'(?:(?<=Supports code from Java 1\.5 to Java )(\d+)|(?<=JavaSE-)~|(?<=path/to/jdk-)~)' # After resolving current_jdk, we will replace ~ +readme_ver_pattern = r'(?:(?<=Supports code from Java 1\.8 to Java )(\d+)|(?<=JavaSE-)~|(?<=path/to/jdk-)~)' # After resolving current_jdk, we will replace ~ # Query the Oracle website for the latest JDK version response = requests.get('http://javadl-esd-secure.oracle.com/update/baseline.version') From e12955bf0d1137dec7d6bdaa7fb9cc27fbca813d Mon Sep 17 00:00:00 2001 From: Snjeza Date: Fri, 9 Aug 2024 18:09:34 +0200 Subject: [PATCH 493/708] Recognize custom file extensions (#3731) --- src/extension.ts | 4 ++-- src/fileEventHandler.ts | 20 +++++++++++++++++++- src/pasteAction.ts | 4 ++-- src/utils.ts | 2 ++ 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 612d3e0af..422b92365 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -208,7 +208,7 @@ export async function activate(context: ExtensionContext): Promise { scheme: 'untitled', language: 'java' } ], synchronize: { - configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize'], + configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize', "files.associations"], }, initializationOptions: { bundles: collectJavaExtensions(extensions.all), @@ -1061,7 +1061,7 @@ async function getTriggerFiles(): Promise { function getJavaFilePathOfTextDocument(document: TextDocument): string | undefined { if (document) { const resource = document.uri; - if (resource.scheme === 'file' && resource.fsPath.endsWith('.java')) { + if (resource.scheme === 'file' && document.languageId === "java") { return path.normalize(resource.fsPath); } } diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 668322815..259944bea 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -174,7 +174,25 @@ function getWillRenameHandler(client: LanguageClient) { } function isJavaFile(uri: Uri): boolean { - return uri.fsPath && uri.fsPath.endsWith(".java"); + if (uri.fsPath && uri.fsPath.endsWith(".java")) { + return true; + } + let result = false; + const associations = workspace.getConfiguration().get("files.associations"); + if (associations !== null) { + Object.keys(associations).forEach(pattern => { + const langId = associations[pattern]; + if (langId === 'java' && pattern.startsWith('*.') && pattern.length > 2) { + const ext = pattern.substring(2); + if (!ext.includes('?') && !ext.includes('*')) { + if (uri.fsPath && uri.fsPath.endsWith(`.${ext}`)) { + result = true; + } + } + } + }); + } + return result; } async function isFile(uri: Uri): Promise { diff --git a/src/pasteAction.ts b/src/pasteAction.ts index 4a3f83adf..d50755601 100644 --- a/src/pasteAction.ts +++ b/src/pasteAction.ts @@ -39,8 +39,8 @@ export async function registerOrganizeImportsOnPasteCommand(): Promise { }); action.then((wasApplied) => { - const fileURI = editor.document.uri.toString(); - if (wasApplied && fileURI.endsWith(".java")) { + if (wasApplied && editor.document.languageId === "java") { + const fileURI = editor.document.uri.toString(); const hasText: boolean = documentText !== null && /\S/.test(documentText); if (hasText) { // Organize imports silently to avoid surprising the user diff --git a/src/utils.ts b/src/utils.ts index 8d342b48f..a8050ce6e 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -226,6 +226,8 @@ export async function getJavaConfig(javaHome: string) { const editorConfig = workspace.getConfiguration('editor'); javaConfig.format.insertSpaces = editorConfig.get('insertSpaces'); javaConfig.format.tabSize = editorConfig.get('tabSize'); + const filesConfig = workspace.getConfiguration('files'); + javaConfig.associations = filesConfig.get('associations'); const isInsider: boolean = version.includes("insider"); const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; switch (androidSupport) { From edf98a9a417bcb854a4ea1c156e0e382766606c2 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 13 Aug 2024 10:12:45 -0400 Subject: [PATCH 494/708] Fix stale reference in "Quick Start". Signed-off-by: Roland Grunberg --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bacf5560d..48050ed58 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Quick Start 1. Install the Extension 2. On the following platforms, the extension should activate without any setup : `win32-x64`, `darwin-x64`, `darwin-arm64`, `linux-x64`, `linux-arm64`.\ If on another platform, or using the "universal" version, you can [set](#setting-the-jdk) a _Java_ Development Kit. It must be Java 17 or above. -3. Optionally, download and install a Java Development Kit for your project (Java 1.5 or above is supported). See [Project JDKs](#project-jdks) for more details +3. Optionally, download and install a Java Development Kit for your project (Java 1.8 or above is supported). See [Project JDKs](#project-jdks) for more details 4. Extension is activated when you first access a Java file * Recognizes projects with *Maven* or *Gradle* build files in the directory hierarchy. From 12bf134677c2208d52cd8552bbace887c213d5bc Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 6 Dec 2023 08:43:57 -0500 Subject: [PATCH 495/708] Add telemetry for language server OutOfMemory events. Signed-off-by: Roland Grunberg --- USAGE_DATA.md | 1 + src/extension.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index feff8279d..759e7ac56 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -23,6 +23,7 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors * The number of results (eg. 20), whether an error occured (eg. false), and duration (in milliseconds) when code assist is activated + * Whether the language server ran out of memory and the maximum allocated memory at which that occured (eg. 200m) ## What's included in the general telemetry data diff --git a/src/extension.ts b/src/extension.ts index 422b92365..3e10278a2 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1160,6 +1160,9 @@ function registerOutOfMemoryDetection(storagePath: string) { maxMem: getMaxMemFromConfiguration(true), } }); + Telemetry.sendTelemetry("java.process.outofmemory", { + maxMem: getMaxMemFromConfiguration(true), + }); showOOMMessage(); serverStatusBarProvider.setError(); activationProgressNotification.hide(); From c18e5bf5f9977edaa1db1636cb74e56d54ded3d2 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 28 Aug 2024 11:53:53 -0400 Subject: [PATCH 496/708] Changelog for 1.34.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1539ce4ad..282f62172 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Change Log +## 1.34.0 (August 29th, 2024) + * enhancement - Support custom source file extensions through `files.associations`. See [#3731](https://github.com/redhat-developer/vscode-java/pull/3731). + * enhancement - Add telemetry for detecting language server running out of memory. See [#3743](https://github.com/redhat-developer/vscode-java/pull/3743). + * bug fix - Fix `ClassCastException` for the file paste event. See [JLS#3239](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3239). + * bug fix - Invalid code actions suggested on deletion of a file. See [#3663](https://github.com/redhat-developer/vscode-java/issues/3663). + * bug fix - Better handling when file path contains non-ASCII characters. See [#3735](https://github.com/redhat-developer/vscode-java/issues/3735). + * bug fix - Add Gradle 8.8 to compatibility check. See [JLS#3212](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3212). + * documentation - Fix stale reference in "Quick Start". See [#3741](https://github.com/redhat-developer/vscode-java/pull/3741). + ## 1.33.0 (August 1st, 2024) * performance - Clean up invalid projects during initialization to prevent build cycles. See [#3639](https://github.com/redhat-developer/vscode-java/issues/3639). * enhancement - Expose source actions via. the code action (light bulb) menu. See [#3714](https://github.com/redhat-developer/vscode-java/pull/3714). From 29ffe816a3a5b587931dffd996408924e3468a1b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 29 Aug 2024 14:32:03 -0400 Subject: [PATCH 497/708] Upversion to 1.35.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d8ad0346..f26886919 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.34.0", + "version": "1.35.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.34.0", + "version": "1.35.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.22", diff --git a/package.json b/package.json index 9b171032b..288656c92 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.34.0", + "version": "1.35.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From e3bc9b51fe1d271bcbe31ec14ad19ab80d3451b1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Aug 2024 19:19:08 +0000 Subject: [PATCH 498/708] Bump webpack from 5.76.0 to 5.94.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.76.0 to 5.94.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Commits](https://github.com/webpack/webpack/compare/v5.76.0...v5.94.0) --- updated-dependencies: - dependency-name: webpack dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 454 ++++++++++++++++++++-------------------------- package.json | 2 +- 2 files changed, 196 insertions(+), 260 deletions(-) diff --git a/package-lock.json b/package-lock.json index f26886919..a2e968b4b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -60,7 +60,7 @@ "style-loader": "^3.3.1", "ts-loader": "^9.4.2", "typescript": "^4.6.4", - "webpack": "^5.76.0", + "webpack": "^5.94.0", "webpack-cli": "^4.6.0" }, "engines": { @@ -189,61 +189,61 @@ "dev": true }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": true, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", - "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, "node_modules/@lukeed/csprng": { @@ -569,30 +569,10 @@ "node": ">= 6" } }, - "node_modules/@types/eslint": { - "version": "8.21.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.21.2.tgz", - "integrity": "sha512-EMpxUyystd3uZVByZap1DACsMXvb82ypQnGn89e1Y0a+LYu3JJscUd/gqhRsVFDkaD2MIiWo0MT8EfXr3DGRKw==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.4", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", - "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", - "dev": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, "node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, "node_modules/@types/fs-extra": { @@ -615,9 +595,9 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.7", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", - "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, "node_modules/@types/lodash": { @@ -1046,12 +1026,6 @@ "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "node_modules/@typescript-eslint/visitor-keys": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", @@ -1171,148 +1145,148 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.1.tgz", - "integrity": "sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", + "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", "dev": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1" + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.1.tgz", - "integrity": "sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", "dev": true }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.1.tgz", - "integrity": "sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", "dev": true }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.1.tgz", - "integrity": "sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", + "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", "dev": true }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.1.tgz", - "integrity": "sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", "dev": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.1.tgz", - "integrity": "sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", "dev": true }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.1.tgz", - "integrity": "sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", + "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.12.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.1.tgz", - "integrity": "sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", "dev": true, "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.1.tgz", - "integrity": "sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", "dev": true, "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.1.tgz", - "integrity": "sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", "dev": true }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.1.tgz", - "integrity": "sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", + "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/helper-wasm-section": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-opt": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", - "@webassemblyjs/wast-printer": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-opt": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1", + "@webassemblyjs/wast-printer": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.1.tgz", - "integrity": "sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", + "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.1.tgz", - "integrity": "sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", + "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-buffer": "1.11.1", - "@webassemblyjs/wasm-gen": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-buffer": "1.12.1", + "@webassemblyjs/wasm-gen": "1.12.1", + "@webassemblyjs/wasm-parser": "1.12.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.1.tgz", - "integrity": "sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", + "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/helper-api-error": "1.11.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.1", - "@webassemblyjs/ieee754": "1.11.1", - "@webassemblyjs/leb128": "1.11.1", - "@webassemblyjs/utf8": "1.11.1" + "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.1.tgz", - "integrity": "sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==", + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", + "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", "dev": true, "dependencies": { - "@webassemblyjs/ast": "1.11.1", + "@webassemblyjs/ast": "1.12.1", "@xtuc/long": "4.2.2" } }, @@ -1376,10 +1350,10 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.8.0.tgz", - "integrity": "sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==", + "node_modules/acorn-import-attributes": { + "version": "1.9.5", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", + "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", "dev": true, "peerDependencies": { "acorn": "^8" @@ -2043,9 +2017,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", + "version": "4.23.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", + "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", "dev": true, "funding": [ { @@ -2055,13 +2029,17 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" + "caniuse-lite": "^1.0.30001646", + "electron-to-chromium": "^1.5.4", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -2178,9 +2156,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001466", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001466.tgz", - "integrity": "sha512-ewtFBSfWjEmxUgNBSZItFSmVtvk9zkwkl1OfRZlKA8slltRN+/C/tuGVrF9styXkN36Yu3+SeJ1qkXxDEyNZ5w==", + "version": "1.0.30001653", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz", + "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==", "dev": true, "funding": [ { @@ -2190,6 +2168,10 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ] }, @@ -3158,9 +3140,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", - "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==", + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", + "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", "dev": true }, "node_modules/emoji-regex": { @@ -3186,9 +3168,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, "dependencies": { "graceful-fs": "^4.2.4", @@ -3198,12 +3180,6 @@ "node": ">=10.13.0" } }, - "node_modules/enhanced-resolve/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, "node_modules/enquirer": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", @@ -3260,9 +3236,9 @@ } }, "node_modules/es-module-lexer": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", - "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, "node_modules/es5-ext": { @@ -3310,9 +3286,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -3596,12 +3572,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "node_modules/eslint-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4594,11 +4564,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs-extra/node_modules/graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" - }, "node_modules/fs-mkdirp-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", @@ -4965,10 +4930,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "devOptional": true + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, "node_modules/growl": { "version": "1.10.5", @@ -7055,9 +7019,9 @@ } }, "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, "node_modules/normalize-package-data": { @@ -7590,9 +7554,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -8360,9 +8324,9 @@ } }, "node_modules/schema-utils": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", - "integrity": "sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.8", @@ -8377,12 +8341,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/schema-utils/node_modules/@types/json-schema": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", - "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", - "dev": true - }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", @@ -9032,13 +8990,13 @@ } }, "node_modules/terser": { - "version": "5.16.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.6.tgz", - "integrity": "sha512-IBZ+ZQIA9sMaXmRZCUMDjNH0D5AQQfdn4WUjHL0+1lF4TP1IHRJbrhb6fNaXWikrYQTSkb7SLxkeXAiy1p7mbg==", + "version": "5.31.6", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", + "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", "dev": true, "dependencies": { - "@jridgewell/source-map": "^0.3.2", - "acorn": "^8.5.0", + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -9050,16 +9008,16 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.7", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.7.tgz", - "integrity": "sha512-AfKwIktyP7Cu50xNjXF/6Qb5lBNzYaWpU6YfoX3uZicTx0zTy0stDDCsvjDapKsSDvOeWo5MEq4TmdBy2cNoHw==", + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", + "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", + "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.1", - "terser": "^5.16.5" + "terser": "^5.26.0" }, "engines": { "node": ">= 10.13.0" @@ -9084,9 +9042,9 @@ } }, "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", - "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "dependencies": { "randombytes": "^2.1.0" @@ -9647,9 +9605,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -9659,14 +9617,18 @@ { "type": "tidelift", "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { - "browserslist-lint": "cli.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { "browserslist": ">= 4.21.0" @@ -9895,9 +9857,9 @@ "integrity": "sha512-7xVc/xLtNhKuCKX0mINT6mFUrUuRz0EinhwPGT8Gtsv2hlo+xJb5NKbiGailcWa1/T5e4dr5Pb2MfGchHreHAA==" }, "node_modules/watchpack": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", - "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, "dependencies": { "glob-to-regexp": "^0.4.1", @@ -9913,34 +9875,33 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, "node_modules/webpack": { - "version": "5.76.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.76.0.tgz", - "integrity": "sha512-l5sOdYBDunyf72HW8dF23rFtWq/7Zgvt/9ftMof71E/yUb1YLOBmTgA2K4vQthB3kotMrSj609txVE0dnr2fjA==", + "version": "5.94.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", + "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", "dev": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^0.0.51", - "@webassemblyjs/ast": "1.11.1", - "@webassemblyjs/wasm-edit": "1.11.1", - "@webassemblyjs/wasm-parser": "1.11.1", + "@types/estree": "^1.0.5", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", "acorn": "^8.7.1", - "acorn-import-assertions": "^1.7.6", - "browserslist": "^4.14.5", + "acorn-import-attributes": "^1.9.5", + "browserslist": "^4.21.10", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.10.0", - "es-module-lexer": "^0.9.0", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.1.0", + "schema-utils": "^3.2.0", "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.4.0", + "terser-webpack-plugin": "^5.3.10", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -10069,31 +10030,6 @@ "node": ">=10.13.0" } }, - "node_modules/webpack/node_modules/@types/estree": { - "version": "0.0.51", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", - "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", - "dev": true - }, - "node_modules/webpack/node_modules/enhanced-resolve": { - "version": "5.12.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.12.0.tgz", - "integrity": "sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack/node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 288656c92..589f2cc16 100644 --- a/package.json +++ b/package.json @@ -1884,7 +1884,7 @@ "style-loader": "^3.3.1", "ts-loader": "^9.4.2", "typescript": "^4.6.4", - "webpack": "^5.76.0", + "webpack": "^5.94.0", "webpack-cli": "^4.6.0" }, "dependencies": { From 1d7163f2222ef6dea01c347ce9a432a7c8a13de3 Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Tue, 3 Sep 2024 11:50:19 -0400 Subject: [PATCH 499/708] Add support for SnippetTextEdit in code actions (#3730) - Add snippetEditSupport extended client capability from JDT-LS - Handle possible code action conversion (LSP to VS Code) in middleware.resolveCodeAction --- src/extension.ts | 62 ++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 3e10278a2..85f08bba0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,8 +6,8 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, MarkdownString, QuickPickItemKind, RelativePattern, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from 'vscode'; -import { CancellationToken, CodeActionParams, CodeActionRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; +import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; +import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; @@ -235,6 +235,7 @@ export async function activate(context: ExtensionContext): Promise extractInterfaceSupport: true, advancedUpgradeGradleSupport: true, executeClientCommandSupport: true, + snippetEditSupport: true, }, triggerFiles, }, @@ -303,7 +304,60 @@ export async function activate(context: ExtensionContext): Promise }, (error) => { return client.handleFailedRequest(CodeActionRequest.type, token, error, []); }); - } + }, + + resolveCodeAction: async (item, token, next) => { + const client: LanguageClient = standardClient.getClient(); + const documentUris = []; + const snippetEdits = []; + const resolveCodeAction = async (item, token) => { + return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then(async (result) => { + if (token.isCancellationRequested) { + return item; + } + const docChanges = result.edit !== undefined ? result.edit.documentChanges : undefined; + if (docChanges !== undefined) { + for (const docChange of docChanges) { + if ("textDocument" in docChange) { + for (const edit of docChange.edits) { + if ("snippet" in edit) { + documentUris.push(docChange.textDocument.uri); + snippetEdits.push(new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value))); + } + } + } + } + const codeAction = await client.protocol2CodeConverter.asCodeAction(result, token); + const docEdits = codeAction.edit !== undefined? codeAction.edit.entries() : []; + for (const docEdit of docEdits) { + const uri = docEdit[0]; + if (documentUris.includes(uri.toString())) { + const editList = []; + for (const edit of docEdit[1]) { + let isSnippet = false; + snippetEdits.forEach((snippet, index) => { + if (edit.range.isEqual(snippet.range) && documentUris[index] === uri.toString()) { + editList.push(snippet); + isSnippet = true; + } + }); + if (!isSnippet) { + editList.push(edit); + } + } + codeAction.edit.set(uri, null); + codeAction.edit.set(uri, editList); + } + } + return codeAction; + } + return await client.protocol2CodeConverter.asCodeAction(result, token); + }, (error) => { + return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item); + }); + }; + return resolveCodeAction(item, token); + }, }, revealOutputChannelOn: RevealOutputChannelOn.Never, errorHandler: new ClientErrorHandler(extensionName), @@ -1189,5 +1243,3 @@ function registerRestartJavaLanguageServerCommand(context: ExtensionContext) { } })); } - - From 8923a98bb9a07e947411cd9de83389b61ab7e247 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 6 Sep 2024 10:47:47 -0400 Subject: [PATCH 500/708] Show decompiled content directly on opened classfile. Signed-off-by: Roland Grunberg --- src/javaClassEditor.ts | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/src/javaClassEditor.ts b/src/javaClassEditor.ts index 053593c25..2cf0f6bd0 100644 --- a/src/javaClassEditor.ts +++ b/src/javaClassEditor.ts @@ -41,16 +41,9 @@ export class JavaClassEditorProvider implements vscode.CustomReadonlyEditorProvi ${style} -

      -

      This file is not displayed in the text editor because it is a Java class file. Click here to decompile and open.

      - -
      From c27ab7d4723aa10e3e98c53895f5a7be6e41d383 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 13 Sep 2024 11:58:30 -0400 Subject: [PATCH 501/708] Add 'organizeImports' to the cleanup settings. Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 62 ++++++++++++++++++++++++ package.json | 3 +- 2 files changed, 64 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 4aeb2923b..a6b8e3cbd 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -344,3 +344,65 @@ Cleans up lambda expression wherever possible in the following ways: ```java ArrayList::new; ``` + +### `organizeImports` + +Performs the "Organize Imports" operation. + +**Note** : Since clean ups are meant to be applied without user feedback (eg. prompts about ambiguous types), this may leave some types unresolved. To properly resolve these ambiguous types, one can do so manually (code actions, source actions), or by calling "Organize Imports" through the command palette / key binding (shift + alt + o). + +For example: + +```java +package test1; +public class A { + public void test() { + List a1; + Iterator a2; + Map a3; + Set a4; + JarFile a5; + StringTokenizer a6; + Path a7; + URI a8; + HttpURLConnection a9; + InputStream a10; + Field a11; + Parser a12; + } +} +``` + +becomes: + +```java +package test1; + +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URI; +import java.nio.file.Path; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.StringTokenizer; +import java.util.jar.JarFile; + +public class A { + public void test() { + List a1; + Iterator a2; + Map a3; + Set a4; + JarFile a5; + StringTokenizer a6; + Path a7; + URI a8; + HttpURLConnection a9; + InputStream a10; + Field a11; + Parser a12; + } +} +``` \ No newline at end of file diff --git a/package.json b/package.json index 589f2cc16..b51d98281 100644 --- a/package.json +++ b/package.json @@ -1280,7 +1280,8 @@ "lambdaExpression", "switchExpression", "tryWithResource", - "renameFileToType" + "renameFileToType", + "organizeImports" ] }, "default": [ From 0b1ade707e70e5bfd42f4efc4ff58395f737b643 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 18 Sep 2024 13:45:19 -0400 Subject: [PATCH 502/708] Update to vscode-extension-proposals 0.0.23. Signed-off-by: Roland Grunberg --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2e968b4b..bcb1ac08b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.35.0", "license": "EPL-2.0", "dependencies": { - "@redhat-developer/vscode-extension-proposals": "0.0.22", + "@redhat-developer/vscode-extension-proposals": "0.0.23", "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", @@ -342,9 +342,9 @@ } }, "node_modules/@redhat-developer/vscode-extension-proposals": { - "version": "0.0.22", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.22.tgz", - "integrity": "sha512-hH/0YRkCmYsGTPScE6xFd5bUkbDWU1iu7/LJqcrU4drqYLsFWe/6gLEaaOxm6koFwI3ItjGt8t0o0q8VMC4MiA==" + "version": "0.0.23", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.23.tgz", + "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { "version": "0.8.0", diff --git a/package.json b/package.json index b51d98281..174a85776 100644 --- a/package.json +++ b/package.json @@ -1889,7 +1889,7 @@ "webpack-cli": "^4.6.0" }, "dependencies": { - "@redhat-developer/vscode-extension-proposals": "0.0.22", + "@redhat-developer/vscode-extension-proposals": "0.0.23", "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", From 2268d0858886e55e6b8d04a6dc591570c8063d5f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 19 Sep 2024 09:34:30 -0400 Subject: [PATCH 503/708] Update vscode-redhat-telemetry to 0.8.1. - Remove dependency on axios & follow-redirects Signed-off-by: Roland Grunberg --- package-lock.json | 63 ++++++++--------------------------------------- package.json | 2 +- 2 files changed, 11 insertions(+), 54 deletions(-) diff --git a/package-lock.json b/package-lock.json index bcb1ac08b..9ac7385dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", + "@redhat-developer/vscode-redhat-telemetry": "^0.8.1", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -347,12 +347,11 @@ "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.8.0.tgz", - "integrity": "sha512-xvFuTMdmrzFHAQ1YeciNf9JdROzKfocFFMVb/8W41If2ynN0mX18bcdCPlWWyaSP5qJ+3XDvMOIf4tql9Xz+cA==", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.8.1.tgz", + "integrity": "sha512-8umlHv+dEZR7tGhGzPUqaL8sodWwQ2JOUI+DMhri3bqZNCre5PYb9QAtEZKayhyuM4vkHKYaO+DJNVNQ2JPEGQ==", "dependencies": { "@segment/analytics-node": "0.0.1-beta.17", - "axios": "^1.6.1", "countries-and-timezones": "^3.4.1", "getos": "^3.2.1", "object-hash": "^3.0.0", @@ -1771,7 +1770,8 @@ "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "node_modules/atob": { "version": "2.1.2", @@ -1800,29 +1800,6 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, - "node_modules/axios": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/bach": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", @@ -2499,6 +2476,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2950,6 +2928,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -4470,25 +4449,6 @@ "lodash": "^4.17.14" } }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", @@ -6512,6 +6472,7 @@ "version": "1.51.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "dev": true, "engines": { "node": ">= 0.6" } @@ -6520,6 +6481,7 @@ "version": "2.1.34", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dev": true, "dependencies": { "mime-db": "1.51.0" }, @@ -7845,11 +7807,6 @@ "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, "node_modules/psl": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", diff --git a/package.json b/package.json index 174a85776..c1dbefa5b 100644 --- a/package.json +++ b/package.json @@ -1890,7 +1890,7 @@ }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.8.0", + "@redhat-developer/vscode-redhat-telemetry": "^0.8.1", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", From 9d78ce1efa6ab9ca4ed1163574c010e0efe3183a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 19 Sep 2024 11:27:33 -0400 Subject: [PATCH 504/708] Update gulp to 5.0.0. - Set encoding as false to treat content as binary for gulp.src Signed-off-by: Roland Grunberg --- gulpfile.js | 2 +- package-lock.json | 3908 +++++++++++---------------------------------- package.json | 2 +- 3 files changed, 902 insertions(+), 3010 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index fdf8f5e23..8fc7a70e6 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -283,7 +283,7 @@ function download_server_fn(){ function build_server_fn(){ fse.removeSync('./server'); cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); - gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz') + gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz', { encoding: false }) .pipe(decompress()) .pipe(gulp.dest('./server')); } diff --git a/package-lock.json b/package-lock.json index 9ac7385dc..51280989d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -48,7 +48,7 @@ "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", - "gulp": "^4.0.2", + "gulp": "^5.0.0", "gulp-decompress": "^3.0.0", "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", @@ -145,6 +145,27 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/@gulpjs/messages": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", + "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@gulpjs/to-absolute-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", + "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", + "dev": true, + "dependencies": { + "is-negated-glob": "^1.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -462,17 +483,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -1483,25 +1493,15 @@ } }, "node_modules/anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", - "dev": true, - "dependencies": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - } - }, - "node_modules/append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", - "dev": true, + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dependencies": { - "buffer-equal": "^1.0.0" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 8" } }, "node_modules/archive-type": { @@ -1516,12 +1516,6 @@ "node": ">=4" } }, - "node_modules/archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1537,39 +1531,6 @@ "node": ">=0.10.0" } }, - "node_modules/arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha1-NgSLv/TntH4TZkQxbJlmnqWukfE=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", - "dev": true, - "dependencies": { - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/arr-union": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", @@ -1591,50 +1552,7 @@ "node_modules/array-each": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", - "dev": true, - "dependencies": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-initial/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", - "dev": true, - "dependencies": { - "is-number": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-last/node_modules/is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1649,29 +1567,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", - "dev": true, - "dependencies": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-sort/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1690,15 +1585,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/asn1": { "version": "0.2.6", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", @@ -1735,36 +1621,29 @@ } }, "node_modules/async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", + "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", "dev": true, "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" + "end-of-stream": "^1.4.4", + "once": "^1.4.0", + "stream-exhaust": "^1.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", - "dev": true - }, "node_modules/async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", + "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", "dev": true, "dependencies": { - "async-done": "^1.2.2" + "async-done": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/asynckit": { @@ -1773,18 +1652,6 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", "dev": true }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -1800,24 +1667,24 @@ "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", "dev": true }, + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "dev": true + }, "node_modules/bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", + "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", "dev": true, "dependencies": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "async-done": "^2.0.0", + "async-settle": "^2.0.0", + "now-and-later": "^3.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/balanced-match": { @@ -1825,73 +1692,12 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "dependencies": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/base/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } + "optional": true }, "node_modules/base64-js": { "version": "1.3.1", @@ -1925,16 +1731,6 @@ "node": ">=8" } }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "dev": true, - "optional": true, - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", @@ -1955,36 +1751,14 @@ } }, "node_modules/braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dependencies": { - "is-extendable": "^0.1.0" + "fill-range": "^7.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/browser-stdout": { @@ -2060,15 +1834,6 @@ "node": "*" } }, - "node_modules/buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", @@ -2081,39 +1846,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "node_modules/cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "dependencies": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2123,15 +1855,6 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001653", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz", @@ -2200,40 +1923,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/chokidar/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/chokidar/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -2245,78 +1934,45 @@ "node": ">= 6" } }, - "node_modules/chokidar/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/chokidar/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/chokidar/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", - "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", - "dev": true, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, "engines": { "node": ">=6.0" } }, - "node_modules/class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "dependencies": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "engines": { - "node": ">=0.10.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/class-utils/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/clone": { @@ -2368,42 +2024,6 @@ "readable-stream": "^2.3.5" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", - "dev": true, - "dependencies": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "dependencies": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/color": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", @@ -2490,58 +2110,28 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, "node_modules/convert-source-map": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", - "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.1" - } - }, - "node_modules/copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/copy-props": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz", - "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", + "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", "dev": true, "dependencies": { - "each-props": "^1.3.2", + "each-props": "^3.0.0", "is-plain-object": "^5.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, "node_modules/copy-props/node_modules/is-plain-object": { @@ -2653,16 +2243,6 @@ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, - "node_modules/d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", - "dev": true, - "dependencies": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" - } - }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -2684,33 +2264,6 @@ "node": "*" } }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", - "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/decompress": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", @@ -2831,99 +2384,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "dev": true, - "dependencies": { - "kind-of": "^5.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "dependencies": { - "object-keys": "^1.0.12" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2936,7 +2396,7 @@ "node_modules/detect-file": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { "node": ">=0.10.0" @@ -3086,26 +2546,26 @@ "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", "dev": true }, - "node_modules/duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/each-props": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", + "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", "dev": true, "dependencies": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "is-plain-object": "^5.0.0", + "object.defaults": "^1.1.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "node_modules/each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/each-props/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "engines": { + "node": ">=0.10.0" } }, "node_modules/ecc-jsbn": { @@ -3139,9 +2599,9 @@ } }, "node_modules/end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dependencies": { "once": "^1.4.0" } @@ -3205,65 +2665,12 @@ "node": ">=4" } }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, "node_modules/es-module-lexer": { "version": "1.5.4", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", "dev": true }, - "node_modules/es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", - "dev": true, - "dependencies": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" - } - }, - "node_modules/es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" - } - }, - "node_modules/es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", - "dev": true, - "dependencies": { - "d": "^1.0.1", - "ext": "^1.1.2" - } - }, - "node_modules/es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" - } - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -3445,39 +2852,6 @@ "ajv": "^8.8.2" } }, - "node_modules/eslint-webpack-plugin/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", @@ -3498,44 +2872,10 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/eslint-webpack-plugin/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", + "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", + "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", @@ -3566,18 +2906,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/eslint-webpack-plugin/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/eslint/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -3693,18 +3021,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -3900,48 +3216,6 @@ "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" }, - "node_modules/expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "dependencies": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expand-brackets/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/expand-home-dir": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", @@ -3950,7 +3224,7 @@ "node_modules/expand-tilde": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", "dev": true, "dependencies": { "homedir-polyfill": "^1.0.1" @@ -3959,21 +3233,6 @@ "node": ">=0.10.0" } }, - "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", - "dev": true, - "dependencies": { - "type": "^2.5.0" - } - }, - "node_modules/ext/node_modules/type": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz", - "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==", - "dev": true - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -4005,87 +3264,6 @@ "node": ">=0.10.0" } }, - "node_modules/extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "dependencies": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extglob/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/extsprintf": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", @@ -4116,6 +3294,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -4132,30 +3316,6 @@ "node": ">=8.6.0" } }, - "node_modules/fast-glob/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fast-glob/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -4168,52 +3328,6 @@ "node": ">= 6" } }, - "node_modules/fast-glob/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/fast-glob/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/fast-glob/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/fast-glob/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", @@ -4221,10 +3335,13 @@ "dev": true }, "node_modules/fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", + "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", + "dev": true, + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } }, "node_modules/fast-safe-stringify": { "version": "2.0.6", @@ -4289,103 +3406,64 @@ "node": ">=4" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "dev": true, - "optional": true - }, "node_modules/fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fill-range/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/find-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dependencies": { - "pinkie-promise": "^2.0.0" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", + "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", "dev": true, "dependencies": { "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", + "is-glob": "^4.0.3", + "micromatch": "^4.0.4", "resolve-dir": "^1.0.1" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", + "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", + "is-plain-object": "^5.0.0", "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "object.pick": "^1.3.0", + "parse-filepath": "^1.0.2" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" + } + }, + "node_modules/fined/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", + "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/flat": { @@ -4431,16 +3509,6 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "node_modules/flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" - } - }, "node_modules/fmtr": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fmtr/-/fmtr-1.1.2.tgz", @@ -4452,7 +3520,7 @@ "node_modules/for-in": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4461,7 +3529,7 @@ "node_modules/for-own": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", "dev": true, "dependencies": { "for-in": "^1.0.1" @@ -4493,18 +3561,6 @@ "node": ">= 0.12" } }, - "node_modules/fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "dependencies": { - "map-cache": "^0.2.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", @@ -4525,16 +3581,16 @@ } }, "node_modules/fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", + "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "graceful-fs": "^4.2.8", + "streamx": "^2.12.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/fs.realpath": { @@ -4556,10 +3612,13 @@ } }, "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/functional-red-black-tree": { "version": "1.0.1", @@ -4568,23 +3627,12 @@ "dev": true }, "node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-stream": { @@ -4600,15 +3648,6 @@ "node": ">=0.10.0" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -4648,46 +3687,34 @@ } }, "node_modules/glob-parent": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", - "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", - "dev": true, - "dependencies": { - "is-glob": "^3.1.0", - "path-dirname": "^1.0.0" - } - }, - "node_modules/glob-parent/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, "dependencies": { - "is-extglob": "^2.1.0" + "is-glob": "^4.0.3" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", + "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", + "@gulpjs/to-absolute-glob": "^4.0.0", + "anymatch": "^3.1.3", + "fastq": "^1.13.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" + "normalize-path": "^3.0.0", + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { @@ -4697,107 +3724,16 @@ "dev": true }, "node_modules/glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/glob-watcher/node_modules/binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", - "dev": true, - "dependencies": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, - "optionalDependencies": { - "fsevents": "^1.2.7" - } - }, - "node_modules/glob-watcher/node_modules/fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - }, - "engines": { - "node": ">= 4.0" - } - }, - "node_modules/glob-watcher/node_modules/is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", - "dev": true, - "dependencies": { - "binary-extensions": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/glob-watcher/node_modules/readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", + "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", "dev": true, "dependencies": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "async-done": "^2.0.0", + "chokidar": "^3.5.3" }, "engines": { - "node": ">=0.10" + "node": ">= 10.13.0" } }, "node_modules/global-modules": { @@ -4817,7 +3753,7 @@ "node_modules/global-prefix": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.2", @@ -4904,21 +3840,141 @@ } }, "node_modules/gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", + "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", "dev": true, "dependencies": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "glob-watcher": "^6.0.0", + "gulp-cli": "^3.0.0", + "undertaker": "^2.0.0", + "vinyl-fs": "^4.0.0" }, "bin": { "gulp": "bin/gulp.js" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" + } + }, + "node_modules/gulp-cli": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", + "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", + "dev": true, + "dependencies": { + "@gulpjs/messages": "^1.1.0", + "chalk": "^4.1.2", + "copy-props": "^4.0.0", + "gulplog": "^2.2.0", + "interpret": "^3.1.1", + "liftoff": "^5.0.0", + "mute-stdout": "^2.0.0", + "replace-homedir": "^2.0.0", + "semver-greatest-satisfied-range": "^2.0.0", + "string-width": "^4.2.3", + "v8flags": "^4.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "gulp": "bin/gulp.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/gulp-cli/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/gulp-cli/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/gulp-cli/node_modules/glogg": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", + "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", + "dev": true, + "dependencies": { + "sparkles": "^2.1.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/gulplog": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", + "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", + "dev": true, + "dependencies": { + "glogg": "^2.2.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/sparkles": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", + "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", + "dev": true, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/gulp-cli/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/gulp-decompress": { @@ -5095,38 +4151,6 @@ "node": ">= 0.9" } }, - "node_modules/gulp/node_modules/gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/gulplog": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", @@ -5162,18 +4186,6 @@ "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -5207,55 +4219,16 @@ "node": ">= 0.10" } }, - "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "dependencies": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "dependencies": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/has-values/node_modules/kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "function-bind": "^1.1.2" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/he": { @@ -5279,12 +4252,6 @@ "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, "node_modules/htmlparser2": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", @@ -5327,7 +4294,19 @@ "node": ">=10.17.0" } }, - "node_modules/icss-utils": { + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", @@ -5340,10 +4319,24 @@ } }, "node_modules/ieee754": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", - "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", - "dev": true + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/ignore": { "version": "5.2.0", @@ -5420,9 +4413,9 @@ } }, "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/ini": { "version": "1.3.8", @@ -5431,21 +4424,12 @@ "dev": true }, "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, "node_modules/is-absolute": { @@ -5461,36 +4445,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-accessor-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -5502,78 +4456,19 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha1-76ouqdqg16suoTqXsritUf776L4=", - "dev": true - }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-data-descriptor/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "dependencies": { - "is-buffer": "^1.1.5" + "hasown": "^2.0.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -5585,15 +4480,12 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/is-glob": { @@ -5616,34 +4508,18 @@ "node_modules/is-negated-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", "dev": true, "engines": { "node": ">=0.10.0" } }, "node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "engines": { - "node": ">=0.10.0" + "node": ">=0.12.0" } }, "node_modules/is-plain-obj": { @@ -5717,16 +4593,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, "node_modules/is-valid-glob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -5891,12 +4761,6 @@ "setimmediate": "^1.0.5" } }, - "node_modules/just-debounce": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz", - "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==", - "dev": true - }, "node_modules/just-extend": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", @@ -5921,52 +4785,21 @@ } }, "node_modules/last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", - "dev": true, - "dependencies": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/lazystream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", - "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.5" - }, - "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", + "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", "dev": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", + "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", "dev": true, - "dependencies": { - "flush-write-stream": "^1.0.2" - }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/levn": { @@ -5992,36 +4825,28 @@ } }, "node_modules/liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", + "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", "dev": true, "dependencies": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "extend": "^3.0.2", + "findup-sync": "^5.0.0", + "fined": "^2.0.0", + "flagged-respawn": "^2.0.0", + "is-plain-object": "^5.0.0", + "rechoir": "^0.8.0", + "resolve": "^1.20.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10.13.0" } }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/liftoff/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - }, "engines": { "node": ">=0.10.0" } @@ -6331,18 +5156,6 @@ "node": ">=4" } }, - "node_modules/make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -6357,62 +5170,8 @@ "node_modules/map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "dependencies": { - "object-visit": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "dependencies": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/matchdep/node_modules/findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/matchdep/node_modules/is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true, - "dependencies": { - "is-extglob": "^2.1.0" - }, "engines": { "node": ">=0.10.0" } @@ -6445,27 +5204,16 @@ } }, "node_modules/micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "braces": "^3.0.3", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.6" } }, "node_modules/mime-db": { @@ -6514,31 +5262,6 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, - "node_modules/mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mocha": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", @@ -6591,74 +5314,21 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "node_modules/mocha/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { - "color-convert": "^2.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/mocha/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/mocha/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/mocha/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/mocha/node_modules/debug/node_modules/ms": { @@ -6695,15 +5365,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, "node_modules/mocha/node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -6736,15 +5397,6 @@ "node": "*" } }, - "node_modules/mocha/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/minimatch": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", @@ -6763,32 +5415,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "node_modules/mocha/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -6804,50 +5430,6 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/mocha/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/mocha/node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/mocha/node_modules/yargs-parser": { "version": "20.2.4", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", @@ -6865,12 +5447,6 @@ "node": "*" } }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "node_modules/multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", @@ -6881,21 +5457,14 @@ } }, "node_modules/mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", + "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, - "node_modules/nan": { - "version": "2.17.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", - "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==", - "dev": true, - "optional": true - }, "node_modules/nanoid": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", @@ -6908,28 +5477,6 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "dependencies": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6942,12 +5489,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", - "dev": true - }, "node_modules/nise": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", @@ -6986,62 +5527,24 @@ "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", "dev": true }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, "node_modules/normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "dependencies": { - "remove-trailing-separator": "^1.0.1" - }, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "engines": { "node": ">=0.10.0" } }, "node_modules/now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", + "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", "dev": true, "dependencies": { - "once": "^1.3.2" + "once": "^1.4.0" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/npm-run-path": { @@ -7055,15 +5558,6 @@ "node": ">=8" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -7081,44 +5575,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-hash": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", @@ -7127,49 +5583,10 @@ "node": ">= 6" } }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "dependencies": { - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.defaults": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", + "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", "dev": true, "dependencies": { "array-each": "^1.0.1", @@ -7181,23 +5598,10 @@ "node": ">=0.10.0" } }, - "node_modules/object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object.pick": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", "dev": true, "dependencies": { "isobject": "^3.0.1" @@ -7206,19 +5610,6 @@ "node": ">=0.10.0" } }, - "node_modules/object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", - "dev": true, - "dependencies": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -7269,27 +5660,6 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, - "node_modules/ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", - "dev": true, - "dependencies": { - "readable-stream": "^2.0.1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", - "dev": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", @@ -7366,7 +5736,7 @@ "node_modules/parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", "dev": true, "dependencies": { "is-absolute": "^1.0.0", @@ -7377,18 +5747,6 @@ "node": ">=0.8" } }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/parse-node-version": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", @@ -7401,27 +5759,12 @@ "node_modules/parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", "dev": true, "engines": { "node": ">=0.10.0" } }, - "node_modules/path-dirname": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", - "dev": true - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -7456,7 +5799,7 @@ "node_modules/path-root": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", "dev": true, "dependencies": { "path-root-regex": "^0.1.0" @@ -7468,7 +5811,7 @@ "node_modules/path-root-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -7483,25 +5826,11 @@ "isarray": "0.0.1" } }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true }, "node_modules/pend": { "version": "1.2.0", @@ -7522,9 +5851,9 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", - "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "engines": { "node": ">=8.6" }, @@ -7650,15 +5979,6 @@ "node": ">= 0.10" } }, - "node_modules/posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -7792,15 +6112,6 @@ "node": ">= 0.8.0" } }, - "node_modules/pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -7813,27 +6124,6 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, - "node_modules/pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", - "dev": true, - "dependencies": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" - } - }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -7872,6 +6162,12 @@ } ] }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -7906,33 +6202,6 @@ "react": "17.0.2" } }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/readable-stream": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", @@ -7964,28 +6233,15 @@ } }, "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, "dependencies": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" + "resolve": "^1.20.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, "node_modules/regexpp": { @@ -8000,57 +6256,12 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", - "dev": true, - "dependencies": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, - "node_modules/repeat-element": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", - "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, "node_modules/replace-ext": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", @@ -8061,17 +6272,12 @@ } }, "node_modules/replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", + "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" - }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/request": { @@ -8133,19 +6339,21 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", - "dev": true - }, "node_modules/resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "dependencies": { - "path-parse": "^1.0.5" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-cwd": { @@ -8163,7 +6371,7 @@ "node_modules/resolve-dir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", "dev": true, "dependencies": { "expand-tilde": "^2.0.0", @@ -8183,31 +6391,15 @@ } }, "node_modules/resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", + "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", "dev": true, "dependencies": { - "value-or-function": "^3.0.0" + "value-or-function": "^4.0.0" }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", - "dev": true - }, - "node_modules/ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true, - "engines": { - "node": ">=0.12" + "node": ">= 10.13.0" } }, "node_modules/reusify": { @@ -8248,15 +6440,6 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "dependencies": { - "ret": "~0.1.10" - } - }, "node_modules/safe-stable-stringify": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", @@ -8326,15 +6509,15 @@ } }, "node_modules/semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", + "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", "dev": true, "dependencies": { - "sver-compat": "^1.5.0" + "sver": "^1.8.3" }, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/serialize-javascript": { @@ -8346,39 +6529,6 @@ "randombytes": "^2.1.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "node_modules/set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "dependencies": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/set-value/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", @@ -8492,146 +6642,6 @@ "node": ">=8" } }, - "node_modules/snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "dependencies": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "dependencies": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "dependencies": { - "is-descriptor": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-node/node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "dependencies": { - "kind-of": "^3.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon-util/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/snapdragon/node_modules/extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "dependencies": { - "is-extendable": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/source-map-js": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", @@ -8641,20 +6651,6 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-resolve": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", - "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", - "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, "node_modules/source-map-support": { "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", @@ -8674,64 +6670,13 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-url": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", - "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", - "deprecated": "See https://github.com/lydell/source-map-url#deprecated", - "dev": true - }, "node_modules/sparkles": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "node_modules/split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", "dev": true, - "dependencies": { - "extend-shallow": "^3.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, "node_modules/sshpk": { @@ -8767,29 +6712,13 @@ "node": "*" } }, - "node_modules/static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "dependencies": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/static-extend/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "node_modules/stream-composer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", + "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", "dev": true, "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" + "streamx": "^2.13.2" } }, "node_modules/stream-exhaust": { @@ -8798,11 +6727,19 @@ "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", "dev": true }, - "node_modules/stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", - "dev": true + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } }, "node_modules/string_decoder": { "version": "1.1.1", @@ -8813,38 +6750,47 @@ } }, "node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "dependencies": { - "is-utf8": "^0.2.0" + "ansi-regex": "^2.0.0" }, "engines": { "node": ">=0.10.0" @@ -8904,14 +6850,35 @@ "node": ">=0.8.0" } }, - "node_modules/sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "dependencies": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sver": { + "version": "1.8.4", + "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", + "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", + "dev": true, + "optionalDependencies": { + "semver": "^6.3.0" + } + }, + "node_modules/sver/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver.js" } }, "node_modules/tabbable": { @@ -8946,6 +6913,15 @@ "node": ">= 0.8.0" } }, + "node_modules/teex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", + "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "dev": true, + "dependencies": { + "streamx": "^2.12.5" + } + }, "node_modules/terser": { "version": "5.31.6", "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", @@ -9007,6 +6983,15 @@ "randombytes": "^2.1.0" } }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -9040,16 +7025,6 @@ "xtend": "~4.0.1" } }, - "node_modules/through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", - "dev": true, - "dependencies": { - "through2": "~2.0.0", - "xtend": "~4.0.0" - } - }, "node_modules/time-stamp": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", @@ -9059,87 +7034,33 @@ "node": ">=0.10.0" } }, - "node_modules/to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", "dev": true }, - "node_modules/to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-object-path/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "dependencies": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dependencies": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=8.0" } }, "node_modules/to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", + "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", "dev": true, "dependencies": { - "through2": "^2.0.3" + "streamx": "^2.12.5" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" } }, "node_modules/tough-cookie": { @@ -9199,18 +7120,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/ts-loader/node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ts-loader/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -9245,52 +7154,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/ts-loader/node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-loader/node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/ts-loader/node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/ts-loader/node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, "node_modules/ts-loader/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9303,18 +7166,6 @@ "node": ">=8" } }, - "node_modules/ts-loader/node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, "node_modules/tslib": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", @@ -9339,12 +7190,6 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, - "node_modules/type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -9378,12 +7223,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "node_modules/typescript": { "version": "4.6.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", @@ -9417,148 +7256,59 @@ }, "node_modules/unbzip2-stream": { "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "dependencies": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true - }, - "node_modules/union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, "dependencies": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "buffer": "^5.2.1", + "through": "^2.3.8" } }, - "node_modules/unset-value/node_modules/has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "node_modules/unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", "dev": true, - "dependencies": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "node_modules/undertaker": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", + "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", "dev": true, "dependencies": { - "isarray": "1.0.0" + "bach": "^2.0.1", + "fast-levenshtein": "^3.0.0", + "last-run": "^2.0.0", + "undertaker-registry": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/unset-value/node_modules/has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "node_modules/undertaker-registry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", + "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">= 10.13.0" } }, - "node_modules/upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", - "dev": true, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "engines": { - "node": ">=4", - "yarn": "*" + "node": ">= 4.0.0" } }, "node_modules/update-browserslist-db": { @@ -9600,22 +7350,6 @@ "punycode": "^2.1.0" } }, - "node_modules/urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", - "dev": true - }, - "node_modules/use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -9638,34 +7372,21 @@ "dev": true }, "node_modules/v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", + "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, "engines": { - "node": ">= 0.10" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "node": ">= 10.13.0" } }, "node_modules/value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", + "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", "dev": true, "engines": { - "node": ">= 0.10" + "node": ">= 10.13.0" } }, "node_modules/verror": { @@ -9699,50 +7420,183 @@ "node": ">= 0.10" } }, + "node_modules/vinyl-contents": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", + "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", + "dev": true, + "dependencies": { + "bl": "^5.0.0", + "vinyl": "^3.0.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-contents/node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "dev": true, + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/vinyl-contents/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/vinyl-contents/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/vinyl-contents/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/vinyl-contents/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", + "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", "dev": true, "dependencies": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", + "fs-mkdirp-stream": "^2.0.1", + "glob-stream": "^8.0.0", + "graceful-fs": "^4.2.11", + "iconv-lite": "^0.6.3", "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" + "lead": "^4.0.0", + "normalize-path": "3.0.0", + "resolve-options": "^2.0.0", + "stream-composer": "^1.0.2", + "streamx": "^2.14.0", + "to-through": "^3.0.0", + "value-or-function": "^4.0.0", + "vinyl": "^3.0.0", + "vinyl-sourcemap": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-fs/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/vinyl-fs/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", + "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", "dev": true, "dependencies": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" + "convert-source-map": "^2.0.0", + "graceful-fs": "^4.2.10", + "now-and-later": "^3.0.0", + "streamx": "^2.12.5", + "vinyl": "^3.0.0", + "vinyl-contents": "^2.0.0" }, "engines": { - "node": ">= 0.10" + "node": ">=10.13.0" + } + }, + "node_modules/vinyl-sourcemap/node_modules/replace-ext": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", + "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/vinyl-sourcemap/node_modules/vinyl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", + "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "clone-stats": "^1.0.0", + "remove-trailing-separator": "^1.1.0", + "replace-ext": "^2.0.0", + "teex": "^1.0.1" + }, + "engines": { + "node": ">=10.13.0" } }, "node_modules/vscode-jsonrpc": { @@ -9952,19 +7806,6 @@ "node": ">= 0.10" } }, - "node_modules/webpack-cli/node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/webpack-merge": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", @@ -10011,12 +7852,6 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, "node_modules/wildcard": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", @@ -10154,16 +7989,74 @@ "dev": true }, "node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/wrappy": { @@ -10181,10 +8074,13 @@ } }, "node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } }, "node_modules/yallist": { "version": "4.0.0", @@ -10192,34 +8088,30 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz", - "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "dependencies": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.1" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, "node_modules/yargs-parser": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz", - "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, - "dependencies": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" + "engines": { + "node": ">=10" } }, "node_modules/yargs-unparser": { diff --git a/package.json b/package.json index c1dbefa5b..14df5e350 100644 --- a/package.json +++ b/package.json @@ -1873,7 +1873,7 @@ "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", - "gulp": "^4.0.2", + "gulp": "^5.0.0", "gulp-decompress": "^3.0.0", "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", From 22b71e6e9417bbe921e3c1166f35858ce208dcc8 Mon Sep 17 00:00:00 2001 From: redhattools-bot Date: Mon, 23 Sep 2024 14:35:19 +0000 Subject: [PATCH 505/708] Bump JDK to 23 --- README.md | 6 +++--- package.json | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 48050ed58..452d23e8e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.8 to Java 22 +* Supports code from Java 1.8 to Java 23 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-22", - "path": "/path/to/jdk-22", + "name": "JavaSE-23", + "path": "/path/to/jdk-23", "default": true }, ] diff --git a/package.json b/package.json index 14df5e350..e44ec3ccf 100644 --- a/package.json +++ b/package.json @@ -917,7 +917,8 @@ "JavaSE-19", "JavaSE-20", "JavaSE-21", - "JavaSE-22" + "JavaSE-22", + "JavaSE-23" ], "description": "Java Execution Environment name. Must be unique." }, @@ -1913,4 +1914,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file From 9186a51ca16ce73276a11f7a09e006bc26dba0a5 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 25 Sep 2024 09:37:59 -0400 Subject: [PATCH 506/708] Update vscode-redhat-telemetry to 0.9.0. - Update dependence on dset Signed-off-by: Roland Grunberg --- package-lock.json | 138 ++++++++++++++++++++++++++++++++++------------ package.json | 4 +- 2 files changed, 105 insertions(+), 37 deletions(-) diff --git a/package-lock.json b/package-lock.json index 51280989d..c0c2d9512 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.8.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -368,18 +368,18 @@ "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.8.1.tgz", - "integrity": "sha512-8umlHv+dEZR7tGhGzPUqaL8sodWwQ2JOUI+DMhri3bqZNCre5PYb9QAtEZKayhyuM4vkHKYaO+DJNVNQ2JPEGQ==", + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.0.tgz", + "integrity": "sha512-1QMKaIJIflzC7Zz89ojzt8j1X3pu8FeP8reAm+9K6HeN18ahoKZLwVBO4dCfiHZ+VZIkeQK4XU7al5132Gc5TA==", "dependencies": { - "@segment/analytics-node": "0.0.1-beta.17", + "@segment/analytics-node": "2.1.3", "countries-and-timezones": "^3.4.1", "getos": "^3.2.1", "object-hash": "^3.0.0", "os-locale": "^5.0.0", - "picomatch": "^2.3.1", - "ua-parser-js": "1.0.33", - "uuid": "^9.0.0" + "picomatch": "^4.0.2", + "ua-parser-js": "1.0.39", + "uuid": "^10.0.0" } }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/execa": { @@ -483,6 +483,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -493,46 +504,90 @@ } }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/uuid": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/@segment/analytics-core": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.2.1.tgz", - "integrity": "sha512-FaKE7uIBXsclO4GcA7cEgb4iyQ23aFHRcxqLpxaCGeB5nqIdVQHigmGgL3hAjCZeBqtojLEV6as27ozXHQXCkg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.7.0.tgz", + "integrity": "sha512-0DHSriS/oAB/2bIgOMv3fFV9/ivp39ibdOTTf+dDOhf+vlciBv0+MHw47k/6PRobbuls27cKkKZAKc4DDC2+gw==", "dependencies": { "@lukeed/uuid": "^2.0.0", - "dset": "^3.1.2", + "@segment/analytics-generic-utils": "1.2.0", + "dset": "^3.1.4", "tslib": "^2.4.1" } }, "node_modules/@segment/analytics-core/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + }, + "node_modules/@segment/analytics-generic-utils": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-generic-utils/-/analytics-generic-utils-1.2.0.tgz", + "integrity": "sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==", + "dependencies": { + "tslib": "^2.4.1" + } + }, + "node_modules/@segment/analytics-generic-utils/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/@segment/analytics-node": { - "version": "0.0.1-beta.17", - "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-0.0.1-beta.17.tgz", - "integrity": "sha512-LwrhrPEJXfCTg/WmFVpRikR/M4q9S8Mq0EHy3oEYkudP2ybeRg2pPDftvwRxdlp7aULn4Zyq7N/hVCPE6/BoUA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.1.3.tgz", + "integrity": "sha512-xwMkyXgr7xgPsP0w79nzCwRHYi9jzj9ps4Im7xWGK8AKKE4eox39tMZOdRtpDbvXQlrs9fh64ZC0w/yZZDM/9g==", "dependencies": { "@lukeed/uuid": "^2.0.0", - "@segment/analytics-core": "1.2.1", + "@segment/analytics-core": "1.7.0", + "@segment/analytics-generic-utils": "1.2.0", + "buffer": "^6.0.3", + "jose": "^5.1.0", "node-fetch": "^2.6.7", "tslib": "^2.4.1" }, "engines": { - "node": ">=14" + "node": ">=18" + } + }, + "node_modules/@segment/analytics-node/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, "node_modules/@segment/analytics-node/node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" }, "node_modules/@sinonjs/commons": { "version": "1.8.3", @@ -1702,8 +1757,7 @@ "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", - "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==", - "dev": true + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -2506,9 +2560,9 @@ } }, "node_modules/dset": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.2.tgz", - "integrity": "sha512-g/M9sqy3oHe477Ar4voQxWtaPIFw1jTdKZuomOjhCcBx9nHUNn0pu6NopuFFrTh/TRZIKEj+76vLWFu9BNKk+Q==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", + "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", "engines": { "node": ">=4" } @@ -4322,7 +4376,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -4673,6 +4726,14 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/jose": { + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.3.tgz", + "integrity": "sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -7237,9 +7298,9 @@ } }, "node_modules/ua-parser-js": { - "version": "1.0.33", - "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.33.tgz", - "integrity": "sha512-RqshF7TPTE0XLYAqmjlu5cLLuGdKrNu9O1KLA/qp39QtbZwuzwv1dT46DZSopoUMsYgXpB3Cv8a03FI8b74oFQ==", + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.39.tgz", + "integrity": "sha512-k24RCVWlEcjkdOxYmVJgeD/0a1TiSpqLg+ZalVGV9lsnr4yqu0w7tX/x2xX6G4zpkgQnRf89lxuZ1wsbjXM8lw==", "funding": [ { "type": "opencollective", @@ -7248,8 +7309,15 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } diff --git a/package.json b/package.json index e44ec3ccf..da28a8f92 100644 --- a/package.json +++ b/package.json @@ -1891,7 +1891,7 @@ }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.8.1", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -1914,4 +1914,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 50d5bf5e2672fcde2fe316ba2b2e5974ff63f308 Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Wed, 25 Sep 2024 21:22:05 +0200 Subject: [PATCH 507/708] Fix #2649: Add support for choosing search scope (#3748) - Provide two scopes (all, main) for search operations such as reference search, call hierarchy search, workspace symbols - Add a shortcut in to the java status menu Signed-off-by: Gayan Perera --- README.md | 6 +++++ package.json | 25 +++++++++++++++++++ package.nls.json | 3 ++- src/commands.ts | 5 ++++ src/extension.ts | 10 ++++++++ test/lightweight-mode-suite/extension.test.ts | 3 ++- test/standard-mode-suite/extension.test.ts | 1 + 7 files changed, 51 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 452d23e8e..548e9a785 100644 --- a/README.md +++ b/README.md @@ -250,6 +250,12 @@ The following settings are supported: * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. * `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java'). +New in 1.35.0 +* `java.search.scope`: Specifies the scope which must be used for search operation like + - Find Reference + - Call Hierarchy + - Workspace Symbols + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index da28a8f92..2247d0f5e 100644 --- a/package.json +++ b/package.json @@ -105,6 +105,11 @@ { "title": "$(trash) Clean Workspace Cache...", "command": "java.clean.workspace" + }, + { + "command": "java.change.searchScope", + "title": "$(search) Search Scope", + "category": "Java" } ], "semanticTokenTypes": [ @@ -1438,6 +1443,21 @@ "markdownDescription": "The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples:\n - `java.lang.Math.*` - All the methods from java.lang.Math.\n - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'.\n - `*.println(*)` - Methods named as 'println'.\n - `(from, to)` - Methods with two parameters named as 'from' and 'to'.\n - `(arg*)` - Methods with one parameter whose name starts with 'arg'.", "scope": "window", "order": 80 + }, + "java.search.scope": { + "type": "string", + "enum": [ + "all", + "main" + ], + "enumDescriptions": [ + "Search on all classpath entries including reference libraries and projects.", + "All classpath entries excluding test classpath entries." + ], + "default": "all", + "markdownDescription": "Specifies the scope which must be used for search operation like \n - Find Reference\n - Call Hierarchy\n - Workspace Symbols", + "scope": "window", + "order": 90 } } }, @@ -1658,6 +1678,11 @@ "command": "java.action.doCleanup", "title": "%java.action.doCleanup%", "category": "Java" + }, + { + "command": "java.change.searchScope", + "title": "%java.change.searchScope%", + "category": "Java" } ], "keybindings": [ diff --git a/package.nls.json b/package.nls.json index 227404d82..76585572b 100644 --- a/package.nls.json +++ b/package.nls.json @@ -27,5 +27,6 @@ "java.server.restart": "Restart Java Language Server", "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", "java.action.filesExplorerPasteAction": "Paste Clipboard Text Into a File", - "java.action.doCleanup": "Performs Cleanup Actions" + "java.action.doCleanup": "Performs Cleanup Actions", + "java.change.searchScope": "Change Search Scope" } diff --git a/src/commands.ts b/src/commands.ts index 7bcfb4583..4e9a9b123 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -356,6 +356,11 @@ export namespace Commands { */ export const OPEN_STATUS_SHORTCUT = "_java.openShortcuts"; + /** + * Change java search scope. + */ + export const CHANGE_JAVA_SEARCH_SCOPE = "java.change.searchScope"; + } /** diff --git a/src/extension.ts b/src/extension.ts index 85f08bba0..72b94ccb7 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -545,6 +545,16 @@ export async function activate(context: ExtensionContext): Promise } }); + context.subscriptions.push(commands.registerCommand(Commands.CHANGE_JAVA_SEARCH_SCOPE, async () => { + const selection = await window.showQuickPick(["all", "main"], { + canPickMany: false, + placeHolder: `Current: ${workspace.getConfiguration().get("java.search.scope")}`, + }); + if(selection) { + workspace.getConfiguration().update("java.search.scope", selection, false); + } + })); + context.subscriptions.push(snippetCompletionProvider.initialize()); context.subscriptions.push(serverStatusBarProvider); context.subscriptions.push(languageStatusBarProvider); diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index b3424da6c..23f1a2758 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -25,7 +25,8 @@ suite('Java Language Extension - LightWeight', () => { Commands.OPEN_FILE, Commands.CLEAN_SHARED_INDEXES, Commands.RESTART_LANGUAGE_SERVER, - Commands.FILESEXPLORER_ONPASTE + Commands.FILESEXPLORER_ONPASTE, + Commands.CHANGE_JAVA_SEARCH_SCOPE ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 107622635..1ed8f4c71 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -120,6 +120,7 @@ suite('Java Language Extension - Standard', () => { Commands.RESOLVE_SOURCE_ATTACHMENT, Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, + Commands.CHANGE_JAVA_SEARCH_SCOPE ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 29329d8b0d60fd7c99deaedd55408e45d080898a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 24 Sep 2024 23:37:18 -0400 Subject: [PATCH 508/708] Changelog for 1.35.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 282f62172..72ba945fd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 1.35.0 (September 26th, 2024) + * performance - Consider token to limit the chains that are searched. See [JLS#2835](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2835). + * enhancement - Provide support for Java 23. See [#3774](https://github.com/redhat-developer/vscode-java/pull/3774). + * enhancement - Show decompiled content directly on opened `.class` file. See [#3759](https://github.com/redhat-developer/vscode-java/issues/3759). + * enhancement - Support dynamic code actions through LSP snippet syntax. See [#3686](https://github.com/redhat-developer/vscode-java/issues/3686). + * enhancement - Introduce new type mismatch quickfix for constructor invocations. See [#3040](https://github.com/redhat-developer/vscode-java/issues/3040). + * enhancement - Control scope for search operations (eg. references, call hierarchy, workspace symbols). See [#2649](https://github.com/redhat-developer/vscode-java/issues/2649). + * enhancement - Add "Organize Imports" as a clean up. See [#3764](https://github.com/redhat-developer/vscode-java/pull/3764). + * bug fix - Import Gradle project via. Buildship if Gradle Build Server is not available. See [JLS#3245](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3245). + * bug fix - Copy/paste will not escape content within String literal when code has error. See [#3761](https://github.com/redhat-developer/vscode-java/issues/3761). + * bug fix - Respect `unwantedRecommendations`. See [#3767](https://github.com/redhat-developer/vscode-java/pull/3767). + * dependencies - Bump webpack from 5.76.0 to 5.94.0. See [#3756](https://github.com/redhat-developer/vscode-java/pull/3756). + * dependencies - Update vscode-redhat-telemetry to 0.9.0. See [#3778](https://github.com/redhat-developer/vscode-java/pull/3778). + ## 1.34.0 (August 29th, 2024) * enhancement - Support custom source file extensions through `files.associations`. See [#3731](https://github.com/redhat-developer/vscode-java/pull/3731). * enhancement - Add telemetry for detecting language server running out of memory. See [#3743](https://github.com/redhat-developer/vscode-java/pull/3743). @@ -100,7 +114,7 @@ * bug fix - Log the error details when initialization fails. See [#3472](https://github.com/redhat-developer/vscode-java/pull/3472). * bug fix - Avoid string concatenation with `Runtime.getRuntime().exec(..)`. See [JLS#3022](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3022). * dependencies - Adopt the Lombok 1.18.31 edge release. See [#3461](https://github.com/redhat-developer/vscode-java/pull/3461). - * build - Automatically suggest updates based on JDT-LS Java language support. See [#3402](https://github.com/redhat-developer/vscode-java/pull/3402). + * build - Automatically suggest updates based on JDT-LS Java language support. See [#3402](https://github.com/redhat-developer/vscode-java/pull/3402). ## 1.26.0 (January 11th, 2024) * performance - Reduce delegate command calls when classpath changes. See [#3439](https://github.com/redhat-developer/vscode-java/pull/3439). From fca5dbda0af644c460468d96bbbf0652721293ce Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 26 Sep 2024 14:11:36 -0400 Subject: [PATCH 509/708] Upversion to 1.36.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 548e9a785..aeda1347f 100644 --- a/README.md +++ b/README.md @@ -249,8 +249,6 @@ The following settings are supported: * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. * `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java'). - -New in 1.35.0 * `java.search.scope`: Specifies the scope which must be used for search operation like - Find Reference - Call Hierarchy diff --git a/package-lock.json b/package-lock.json index c0c2d9512..0c0709446 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.35.0", + "version": "1.36.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.35.0", + "version": "1.36.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 2247d0f5e..df613ab80 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.35.0", + "version": "1.36.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 56204dbf56d29ee14d9da86e20254c7e9a2b6afd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 27 Sep 2024 08:37:58 -0400 Subject: [PATCH 510/708] Disable support for SnippetTextEdit in code actions. - Due to difference in behaviour on Windows Signed-off-by: Roland Grunberg --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 72b94ccb7..1a8fbd255 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -235,7 +235,7 @@ export async function activate(context: ExtensionContext): Promise extractInterfaceSupport: true, advancedUpgradeGradleSupport: true, executeClientCommandSupport: true, - snippetEditSupport: true, + snippetEditSupport: false, }, triggerFiles, }, From 699af0ba3394ff07e926d181114464de3a116655 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 27 Sep 2024 14:59:22 -0400 Subject: [PATCH 511/708] Changelog for 1.35.1 - Bump version down to 1.35.1 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 72ba945fd..1082ab135 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 1.35.1 (September 30th, 2024) + * bug fix - Dynamic code actions fail on Windows. See [#3780](https://github.com/redhat-developer/vscode-java/issues/3780). + ## 1.35.0 (September 26th, 2024) * performance - Consider token to limit the chains that are searched. See [JLS#2835](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/2835). * enhancement - Provide support for Java 23. See [#3774](https://github.com/redhat-developer/vscode-java/pull/3774). diff --git a/package-lock.json b/package-lock.json index 0c0709446..5df20b7d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.36.0", + "version": "1.35.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.36.0", + "version": "1.35.1", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index df613ab80..adf2422e5 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.36.0", + "version": "1.35.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 0149fc7323f1a9202dab94fa10eda020d883b459 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 30 Sep 2024 11:32:38 -0400 Subject: [PATCH 512/708] Upversion back to 1.36.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5df20b7d2..0c0709446 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.35.1", + "version": "1.36.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.35.1", + "version": "1.36.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index adf2422e5..df613ab80 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.35.1", + "version": "1.36.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 24147e2bacbebb8183bdc3b7d663e3b5f6206779 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 30 Sep 2024 13:57:09 -0400 Subject: [PATCH 513/708] "Normalize" URI comparison between LSP/Code workspace edits. - On Windows, URI conversion (LSP -> Code) encodes certain characters (eg. ':') so that simple comparison will fail. Ensure URIs from the LSP get normalized as well Signed-off-by: Roland Grunberg --- src/extension.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 1a8fbd255..a7488b73d 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -235,7 +235,7 @@ export async function activate(context: ExtensionContext): Promise extractInterfaceSupport: true, advancedUpgradeGradleSupport: true, executeClientCommandSupport: true, - snippetEditSupport: false, + snippetEditSupport: true, }, triggerFiles, }, @@ -321,7 +321,7 @@ export async function activate(context: ExtensionContext): Promise if ("textDocument" in docChange) { for (const edit of docChange.edits) { if ("snippet" in edit) { - documentUris.push(docChange.textDocument.uri); + documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); snippetEdits.push(new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value))); } } From 075dcabe58ec4e21228568c34780cb1e3e50dc71 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 7 Oct 2024 11:09:49 -0400 Subject: [PATCH 514/708] Remove Dependency Analytics extension from being recommended. - redhat.fabric8-analytics Signed-off-by: Roland Grunberg --- src/extension.ts | 6 ---- src/recommendation/dependencyAnalytics.ts | 43 ----------------------- src/recommendation/index.ts | 17 --------- 3 files changed, 66 deletions(-) delete mode 100644 src/recommendation/dependencyAnalytics.ts delete mode 100644 src/recommendation/index.ts diff --git a/src/extension.ts b/src/extension.ts index a7488b73d..03d177da8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -21,7 +21,6 @@ import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { OutputInfoCollector } from './outputInfoCollector'; import { collectJavaExtensions, getBundlesToReload, getShortcuts, IJavaShortcut, isContributedPartUpdated } from './plugin'; import { fixJdtSchemeHoverLinks, registerClientProviders } from './providerDispatcher'; -import { initialize as initializeRecommendation } from './recommendation'; import * as requirements from './requirements'; import { languageStatusBarProvider } from './runtimeStatusBarProvider'; import { serverStatusBarProvider, ShortcutQuickPickItem } from './serverStatusBarProvider'; @@ -34,7 +33,6 @@ import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuild import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; -import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib'; import { activationProgressNotification } from "./serverTaskPresenter"; import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './buildFilesSelector'; @@ -149,12 +147,8 @@ export async function activate(context: ExtensionContext): Promise } initializeLogFile(clientLogFile); - const telemetryService: Promise = Telemetry.startTelemetry(context); - enableJavadocSymbols(); - initializeRecommendation(context, telemetryService); - registerOutOfMemoryDetection(storagePath); cleanJavaWorkspaceStorage(); diff --git a/src/recommendation/dependencyAnalytics.ts b/src/recommendation/dependencyAnalytics.ts deleted file mode 100644 index b1470c44a..000000000 --- a/src/recommendation/dependencyAnalytics.ts +++ /dev/null @@ -1,43 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -'use strict'; - -import { IRecommendationService, Recommendation } from "@redhat-developer/vscode-extension-proposals/lib"; -import * as vscode from "vscode"; - -const EXTENSION_NAME = "redhat.fabric8-analytics"; -const GH_ORG_URL = `https://github.com/fabric8-analytics`; -let alreadyShown = false; -export function initialize (context: vscode.ExtensionContext, recommendService: IRecommendationService): Recommendation[] { - const ret: Recommendation = createDependencyRecommendation(recommendService); - delayedShowDependencyRecommendation(context, recommendService); - return [ret]; -} - -function createDependencyRecommendation(recommendService: IRecommendationService): Recommendation { - const r1 = recommendService.create(EXTENSION_NAME, "Dependency Analytics", - `The [Dependency Analytics](${GH_ORG_URL}) extension helps you to stay informed about vulnerable dependencies in pom.xml files.`, false); - return r1; -} - -async function delayedShowDependencyRecommendation (context: vscode.ExtensionContext, recommendService: IRecommendationService): Promise { - await new Promise(f => setTimeout(f, 6000)); - const isPomDotXmlOpened = vscode.workspace.textDocuments.findIndex(doc => isPomDotXml(doc.uri)) !== -1; - if (isPomDotXmlOpened) { - recommendService.show(EXTENSION_NAME); - } else { - context.subscriptions.push(vscode.workspace.onDidOpenTextDocument(e => { - // I would prefer to delete this listener after showing once, but i can't figure out how ;) - if( !alreadyShown ) { - if (isPomDotXml(e.uri)) { - recommendService.show(EXTENSION_NAME); - alreadyShown = true; - } - } - })); - } -} - -function isPomDotXml(uri: vscode.Uri) { - return !!uri.path && uri.path.toLowerCase().endsWith("pom.xml"); -} \ No newline at end of file diff --git a/src/recommendation/index.ts b/src/recommendation/index.ts deleted file mode 100644 index 8162e097a..000000000 --- a/src/recommendation/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. - -'use strict'; - -import * as vscode from "vscode"; -import { initialize as initDependencyAnalytics } from "./dependencyAnalytics"; -import { TelemetryService } from "@redhat-developer/vscode-redhat-telemetry/lib"; -import { IRecommendationService, Recommendation, RecommendationCore } from "@redhat-developer/vscode-extension-proposals/lib"; - -export async function initialize (context: vscode.ExtensionContext, telemetry: Promise): Promise { - const telem: TelemetryService = await telemetry; - const recommendService: IRecommendationService | undefined = RecommendationCore.getService(context, telem); - if( recommendService ) { - const fromDependencyAnalytics: Recommendation[] = initDependencyAnalytics(context, recommendService); - recommendService.register(fromDependencyAnalytics); - } -} From 50ed9ee39f9bcd8ffafbdd86569e2d6f9d699a31 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 7 Oct 2024 12:49:40 -0400 Subject: [PATCH 515/708] Restore Telemetry initialization. - Telemetry.startTelemetry(..) should not have been removed Signed-off-by: Roland Grunberg --- src/extension.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 03d177da8..62f023516 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -38,6 +38,7 @@ import { loadSupportedJreNames } from './jdkUtils'; import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './buildFilesSelector'; import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; +import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib/node'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -147,6 +148,8 @@ export async function activate(context: ExtensionContext): Promise } initializeLogFile(clientLogFile); + Telemetry.startTelemetry(context); + enableJavadocSymbols(); registerOutOfMemoryDetection(storagePath); From a184172d886d1797623da13000cd5c9c13392743 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 7 Oct 2024 11:02:38 +0200 Subject: [PATCH 516/708] Automatically add /// markdown prefix on next line Signed-off-by: Fred Bricon --- src/extension.ts | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/extension.ts b/src/extension.ts index 62f023516..39d5a32d8 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -800,6 +800,11 @@ function enableJavadocSymbols() { // e.g. *-----*/| beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/, action: { indentAction: IndentAction.None, removeText: 1 } + }, + { + // e.g. /// ...| (Markdown javadoc) + beforeText: /^\s*\/\/\/(.*)?$/, + action: { indentAction: IndentAction.None, appendText: '/// ' } } ] }); From 973f3d17a859c92cf369929d2963082921ade24f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 10 Oct 2024 12:40:54 -0400 Subject: [PATCH 517/708] Use Node 20 in release-job only. - ovsx 0.10.0 requires Node >= 20 Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 22ac10cdf..656e40f59 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -168,7 +168,7 @@ jobs: - name: Set Up NodeJS uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' - name: Install dependencies run: | npm install -g typescript "@vscode/vsce" "ovsx" From 0f89a67eaf7a0189e3da172a02e277d128a96cc7 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 3 Apr 2024 13:50:46 +0200 Subject: [PATCH 518/708] Enable javac-based compilation. Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 2 +- README.md | 4 ++++ USAGE_DATA.md | 4 ++-- package.json | 28 +++++++++++++++++++++++++++- src/extension.ts | 1 + src/javaServerStarter.ts | 35 ++++++++++++++++++++++++++++++++++- src/requirements.ts | 3 ++- src/settings.ts | 4 +++- src/utils.ts | 13 +++++++++++++ 9 files changed, 87 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 656e40f59..dcf9b8df1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -81,7 +81,7 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '17' + java-version: '23' distribution: 'adopt' - name: Build JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" diff --git a/README.md b/README.md index aeda1347f..8334a5f3b 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,10 @@ The following settings are supported: - Call Hierarchy - Workspace Symbols +New in 1.36.0 +* `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `false`. +* `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/USAGE_DATA.md b/USAGE_DATA.md index 759e7ac56..e0d0fc53e 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -19,10 +19,10 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * Errors relating to running the language server, such as the message & stacktrace * Whether there is a mismatch between the project's requested source level, and the JDK used for the project (eg. true) * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. - * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled` + * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled`, `java.jdt.ls.javac.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors - * The number of results (eg. 20), whether an error occured (eg. false), and duration (in milliseconds) when code assist is activated + * The number of results (eg. 20), whether an error occured (eg. false), engine type (eg. 'ecj', 'dom') and duration (in milliseconds) when code assist is activated * Whether the language server ran out of memory and the maximum allocated memory at which that occured (eg. 200m) ## What's included in the general telemetry data diff --git a/package.json b/package.json index df613ab80..8c5bcc29a 100644 --- a/package.json +++ b/package.json @@ -409,6 +409,17 @@ "scope": "window", "order": 90 }, + "java.jdt.ls.javac.enabled": { + "type": "string", + "enum": [ + "on", + "off" + ], + "default": "off", + "markdownDescription": "[Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23", + "scope": "window", + "order": 95 + }, "java.trace.server": { "type": "string", "enum": [ @@ -1009,6 +1020,21 @@ "scope": "window", "order": 10 }, + "java.completion.engine": { + "type": "string", + "default": "ecj", + "description": "[Experimental] Select code completion engine", + "scope": "window", + "enum": [ + "ecj", + "dom" + ], + "markdownEnumDescriptions": [ + "Use ECJ-based code completion engine (default)", + "Use (highly experimental) JDT DOM-based code completion engine (requires `java.jdt.ls.javac.enabled` to be `on`)" + ], + "order": 1000 + }, "java.completion.postfix.enabled": { "type": "boolean", "default": true, @@ -1939,4 +1965,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index 39d5a32d8..b0db04d5f 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1203,6 +1203,7 @@ export function registerCodeCompletionTelemetryListener() { resultLength: traceEvent.resultLength || 0, error: !!traceEvent.error, fromSyntaxServer: !!traceEvent.fromSyntaxServer, + engine: getJavaConfiguration().get('completion.engine'), }; return Telemetry.sendTelemetry(Telemetry.COMPLETION_EVENT, props); } diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index b8886d05c..4aa52d2c0 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -104,7 +104,40 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E // See https://github.com/redhat-developer/vscode-java/issues/2264 // It requires the internal API sun.nio.fs.WindowsFileAttributes.isDirectoryLink() to check if a Windows directory is symlink. '--add-opens', - 'java.base/sun.nio.fs=ALL-UNNAMED'); + 'java.base/sun.nio.fs=ALL-UNNAMED' + ); + + const javacEnabled = 'on' === getJavaConfiguration().get('jdt.ls.javac.enabled'); + if (javacEnabled) { + // Javac flags + params.push( + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', + '--add-opens', + 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets.snippet=ALL-UNNAMED --add-opens jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets=ALL-UNNAMED', + '-DICompilationUnitResolver=org.eclipse.jdt.core.dom.JavacCompilationUnitResolver', + '-DCompilationUnit.DOM_BASED_OPERATIONS=true', + '-DAbstractImageBuilder.compilerFactory=org.eclipse.jdt.internal.javac.JavacCompilerFactory' + ); + + if('dom' === getJavaConfiguration().get('completion.engine')){ + params.push('-DCompilationUnit.codeComplete.DOM_BASED_OPERATIONS=true'); + }; + } params.push('-Declipse.application=org.eclipse.jdt.ls.core.id1', '-Dosgi.bundles.defaultStartLevel=4', diff --git a/src/requirements.ts b/src/requirements.ts index b753f2200..b30dfe812 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -9,8 +9,8 @@ import { Commands } from './commands'; import { logger } from './log'; import { checkJavaPreferences } from './settings'; import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; +import { getJavaConfiguration } from './utils'; -const REQUIRED_JDK_VERSION = 17; /* eslint-disable @typescript-eslint/naming-convention */ export interface RequirementsData { tooling_jre: string; @@ -41,6 +41,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise Date: Tue, 29 Oct 2024 13:12:48 -0400 Subject: [PATCH 519/708] Update embedded lombok library name to reflect actual version. - The edge release is now targeting 1.18.35 Signed-off-by: Roland Grunberg --- gulpfile.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 8fc7a70e6..b0ca41a20 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,7 +127,7 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.33'; + const lombokVersion = '1.18.35'; // The latest lombok version can be found on the website https://projectlombok.org/downloads const lombokUrl = `https://projectlombok.org/lombok-edge.jar`; download(lombokUrl) @@ -138,7 +138,7 @@ gulp.task('download_lombok', async function (done) { resolve(); }); }); - // TODO: Switch to stable version once lombok 1.18.33 is released. + // TODO: Switch to stable version once lombok 1.18.35 is released. done(); }); From 194fbe350bc488f6ccd0b18e00a87fa5bffd7fdb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 29 Oct 2024 23:20:28 -0400 Subject: [PATCH 520/708] Changelog for 1.36.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 18 ++++++++++++++++++ README.md | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1082ab135..3a038c583 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## 1.36.0 (October 31st, 2024) + * enhancement - Experimental support for using `javac` as the compiler. See [#3558](https://github.com/redhat-developer/vscode-java/pull/3558), [JLS#3167](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3167). + * `java.jdt.ls.javac.enabled`: Enables Javac-based compilation. + * Requires running with **Java 23**. Make sure to use `java.jdt.ls.java.home` for this. + * Defaults to `off` + * `java.completion.engine`: Select code completion engine. (`ecj` or `dom`) + * Requires `java.jdt.ls.javac.enabled` to be `on` + * Defaults to `ecj` + * enhancement - Automatically add `///` on new line when editing Markdown comments (JEP 467). See [#3801](https://github.com/redhat-developer/vscode-java/issues/3801). + * bug fix - Re-enable dynamic code actions by fixing the URI comparison. See [#3792](https://github.com/redhat-developer/vscode-java/pull/3792). + * bug fix - Intermittent failures to suggest Java core packages for completion & code actions. See [#3797](https://github.com/redhat-developer/vscode-java/issues/3797). + * bug fix - `java.diagnostic.filter` is broken on Windows. See [JLS#3290](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3290). + * bug fix - Type declaration snippets should respect `java.templates.typeComment`. See [JLS#3295](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3295). + * bug fix - Linux release package files have excessive permissions. See [JLS#3293](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3293). + * bug fix - Remove Dependency Analytics extension from being recommended. See [#3804](https://github.com/redhat-developer/vscode-java/pull/3804). + * bug fix - Update embedded lombok library name to reflect actual version. See [#3833](https://github.com/redhat-developer/vscode-java/pull/3833). + * dependencies - Use Node 20 in release-job only. See [#3809](https://github.com/redhat-developer/vscode-java/pull/3809). + ## 1.35.1 (September 30th, 2024) * bug fix - Dynamic code actions fail on Windows. See [#3780](https://github.com/redhat-developer/vscode-java/issues/3780). diff --git a/README.md b/README.md index 8334a5f3b..0018f8d6a 100644 --- a/README.md +++ b/README.md @@ -255,7 +255,7 @@ The following settings are supported: - Workspace Symbols New in 1.36.0 -* `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `false`. +* `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. Semantic Highlighting From 1e7b9a90de9d743286643b044bd9d77420ce1b36 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 31 Oct 2024 10:41:52 -0400 Subject: [PATCH 521/708] Upversion to 1.37.0. Signed-off-by: Roland Grunberg --- README.md | 4 +--- package-lock.json | 4 ++-- package.json | 4 ++-- 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0018f8d6a..e88013eb0 100644 --- a/README.md +++ b/README.md @@ -248,13 +248,11 @@ The following settings are supported: * `java.edit.smartSemicolonDetection.enabled`: Defines the `smart semicolon` detection. Defaults to `false`. * `java.configuration.detectJdksAtStart`: Automatically detect JDKs installed on local machine at startup. If you have specified the same JDK version in `java.configuration.runtimes`, the extension will use that version first. Defaults to `true`. * `java.completion.collapseCompletionItems`: Enable/disable the collapse of overloaded methods in completion items. Overrides `java.completion.guessMethodArguments`. Defaults to `false`. -* `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '**/Foo.java'). +* `java.diagnostic.filter`: Specifies a list of file patterns for which matching documents should not have their diagnostics reported (eg. '\*\*/Foo.java'). * `java.search.scope`: Specifies the scope which must be used for search operation like - Find Reference - Call Hierarchy - Workspace Symbols - -New in 1.36.0 * `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. diff --git a/package-lock.json b/package-lock.json index 0c0709446..2e893a19b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.36.0", + "version": "1.37.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.36.0", + "version": "1.37.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 8c5bcc29a..3b8106864 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.36.0", + "version": "1.37.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -1965,4 +1965,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 11dc82007d76cc9cecbe928f223ec98c6f9a6fe7 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 7 Nov 2024 10:31:03 -0500 Subject: [PATCH 522/708] Open more requested system packages for "javac" support. - jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED, - jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED - Fix add-opens for some existing modules Signed-off-by: Roland Grunberg --- src/javaServerStarter.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 4aa52d2c0..d8c3beafb 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -128,7 +128,13 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E '--add-opens', 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', '--add-opens', - 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets.snippet=ALL-UNNAMED --add-opens jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets=ALL-UNNAMED', + 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets.snippet=ALL-UNNAMED', + '--add-opens', + 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED', '-DICompilationUnitResolver=org.eclipse.jdt.core.dom.JavacCompilationUnitResolver', '-DCompilationUnit.DOM_BASED_OPERATIONS=true', '-DAbstractImageBuilder.compilerFactory=org.eclipse.jdt.internal.javac.JavacCompilerFactory' From 6292a4c29690bbae7280b2027a87ce7663d74e96 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 7 Nov 2024 14:08:51 -0500 Subject: [PATCH 523/708] Add Maven flag for updating artifacts from snapshot repositories. - With JDT-LS depending on static (eg. latest) repositories, the Tycho build system may end up using stale artifacts cached locally, even when newer ones exist. Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index dcf9b8df1..a65a409b0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -86,7 +86,7 @@ jobs: - name: Build JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" run: | - ./mvnw clean verify -B -DskipTests -Pserver-distro + ./mvnw clean verify -B -U -DskipTests -Pserver-distro mkdir ../staging cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging - name: Check Out VS Code Java From 2cd1c83eef5d3a05b38a5e591f6d1d041dc23232 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 7 Nov 2024 23:03:50 -0500 Subject: [PATCH 524/708] Revert to Lombok 1.18.34. - Workaround for issue #3836 Signed-off-by: Roland Grunberg --- gulpfile.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index b0ca41a20..d0014182c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,18 +127,14 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.35'; + const lombokVersion = '1.18.34'; // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/lombok-edge.jar`; + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; download(lombokUrl) .pipe(gulp.dest("./lombok/")) .on("error", reject) - .on("end", () => { - fse.renameSync("./lombok/lombok-edge.jar", `./lombok/lombok-${lombokVersion}.jar`); - resolve(); - }); + .on("end", resolve); }); - // TODO: Switch to stable version once lombok 1.18.35 is released. done(); }); From 86c2adf9411f19d881440975ebd211064b44de60 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 8 Nov 2024 16:18:58 -0500 Subject: [PATCH 525/708] Add setting 'java.references.includeDeclarations'. - Control inclusion of declarations when searching for references - Also simplify the 'resolveCodeAction' middleware implementation Signed-off-by: Roland Grunberg --- README.md | 3 ++ package.json | 19 +++++++---- src/extension.ts | 83 +++++++++++++++++++++++++----------------------- 3 files changed, 59 insertions(+), 46 deletions(-) diff --git a/README.md b/README.md index e88013eb0..42e531b57 100644 --- a/README.md +++ b/README.md @@ -256,6 +256,9 @@ The following settings are supported: * `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. +New in 1.37.0 +* `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 3b8106864..f702896ca 100644 --- a/package.json +++ b/package.json @@ -1422,26 +1422,33 @@ "scope": "window", "order": 30 }, + "java.references.includeDeclarations": { + "type": "boolean", + "default": true, + "description": "Include declarations when finding references.", + "scope": "window", + "order": 40 + }, "java.references.includeDecompiledSources": { "type": "boolean", "default": true, "description": "Include the decompiled sources when finding references.", "scope": "window", - "order": 40 + "order": 50 }, "java.symbols.includeSourceMethodDeclarations": { "type": "boolean", "markdownDescription": "Include method declarations from source files in symbol search.", "default": false, "scope": "window", - "order": 50 + "order": 60 }, "java.typeHierarchy.lazyLoad": { "type": "boolean", "default": false, "description": "Enable/disable lazy loading the content in type hierarchy. Lazy loading could save a lot of loading time but every type should be expanded manually to load its content.", "scope": "window", - "order": 60 + "order": 70 }, "java.inlayHints.parameterNames.enabled": { "type": "string", @@ -1458,7 +1465,7 @@ "default": "literals", "markdownDescription": "Enable/disable inlay hints for parameter names:\n```java\n\nInteger.valueOf(/* s: */ '123', /* radix: */ 10)\n \n```\n `#java.inlayHints.parameterNames.exclusions#` can be used to disable the inlay hints for methods.", "scope": "window", - "order": 70 + "order": 80 }, "java.inlayHints.parameterNames.exclusions": { "type": "array", @@ -1468,7 +1475,7 @@ "default": [], "markdownDescription": "The patterns for the methods that will be disabled to show the inlay hints. Supported pattern examples:\n - `java.lang.Math.*` - All the methods from java.lang.Math.\n - `*.Arrays.asList` - Methods named as 'asList' in the types named as 'Arrays'.\n - `*.println(*)` - Methods named as 'println'.\n - `(from, to)` - Methods with two parameters named as 'from' and 'to'.\n - `(arg*)` - Methods with one parameter whose name starts with 'arg'.", "scope": "window", - "order": 80 + "order": 90 }, "java.search.scope": { "type": "string", @@ -1483,7 +1490,7 @@ "default": "all", "markdownDescription": "Specifies the scope which must be used for search operation like \n - Find Reference\n - Call Hierarchy\n - Workspace Symbols", "scope": "window", - "order": 90 + "order": 100 } } }, diff --git a/src/extension.ts b/src/extension.ts index b0db04d5f..6a139d8d0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; +import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -307,54 +307,57 @@ export async function activate(context: ExtensionContext): Promise const client: LanguageClient = standardClient.getClient(); const documentUris = []; const snippetEdits = []; - const resolveCodeAction = async (item, token) => { - return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then(async (result) => { - if (token.isCancellationRequested) { - return item; - } - const docChanges = result.edit !== undefined ? result.edit.documentChanges : undefined; - if (docChanges !== undefined) { - for (const docChange of docChanges) { - if ("textDocument" in docChange) { - for (const edit of docChange.edits) { - if ("snippet" in edit) { - documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); - snippetEdits.push(new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value))); - } + return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then(async (result) => { + if (token.isCancellationRequested) { + return item; + } + const docChanges = result.edit !== undefined ? result.edit.documentChanges : undefined; + if (docChanges !== undefined) { + for (const docChange of docChanges) { + if ("textDocument" in docChange) { + for (const edit of docChange.edits) { + if ("snippet" in edit) { + documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); + snippetEdits.push(new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value))); } } } - const codeAction = await client.protocol2CodeConverter.asCodeAction(result, token); - const docEdits = codeAction.edit !== undefined? codeAction.edit.entries() : []; - for (const docEdit of docEdits) { - const uri = docEdit[0]; - if (documentUris.includes(uri.toString())) { - const editList = []; - for (const edit of docEdit[1]) { - let isSnippet = false; - snippetEdits.forEach((snippet, index) => { - if (edit.range.isEqual(snippet.range) && documentUris[index] === uri.toString()) { - editList.push(snippet); - isSnippet = true; - } - }); - if (!isSnippet) { - editList.push(edit); + } + const codeAction = await client.protocol2CodeConverter.asCodeAction(result, token); + const docEdits = codeAction.edit !== undefined? codeAction.edit.entries() : []; + for (const docEdit of docEdits) { + const uri = docEdit[0]; + if (documentUris.includes(uri.toString())) { + const editList = []; + for (const edit of docEdit[1]) { + let isSnippet = false; + snippetEdits.forEach((snippet, index) => { + if (edit.range.isEqual(snippet.range) && documentUris[index] === uri.toString()) { + editList.push(snippet); + isSnippet = true; } + }); + if (!isSnippet) { + editList.push(edit); } - codeAction.edit.set(uri, null); - codeAction.edit.set(uri, editList); } + codeAction.edit.set(uri, null); + codeAction.edit.set(uri, editList); } - return codeAction; } - return await client.protocol2CodeConverter.asCodeAction(result, token); - }, (error) => { - return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item); - }); - }; - return resolveCodeAction(item, token); + return codeAction; + } + return await client.protocol2CodeConverter.asCodeAction(result, token); + }, (error) => { + return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item); + }); }, + + provideReferences: async(document, position, options, token, next): Promise => { + // Override includeDeclaration from VS Code by allowing it to be configured + options.includeDeclaration = getJavaConfiguration().get('references.includeDeclarations'); + return await next(document, position, options, token); + } }, revealOutputChannelOn: RevealOutputChannelOn.Never, errorHandler: new ClientErrorHandler(extensionName), From 4bf52871434cc26d9963ef482d73af38837cd8c3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 13 Nov 2024 09:51:27 -0500 Subject: [PATCH 526/708] Add 'removeUnusedLambdaParameters' to the cleanup settings. Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 26 ++++++++++++++++++++++++ package.json | 3 ++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index a6b8e3cbd..36d74d746 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -405,4 +405,30 @@ public class A { Parser a12; } } +``` + +### `removeUnusedLambdaParameters` + +Rename unused lambda parameters, or unused pattern variables to `_`. + +For example: + +```java +J j = (a, b) -> System.out.println(a); + +switch (r) { + case R(_, long l) -> {} + case R r2 -> {} +} +``` + +becomes: + +```java +J j = (a, _) -> System.out.println(a); + +switch (r) { + case R(_, _) -> {} + case R _ -> {} +} ``` \ No newline at end of file diff --git a/package.json b/package.json index f702896ca..8fbaabe8b 100644 --- a/package.json +++ b/package.json @@ -1313,7 +1313,8 @@ "switchExpression", "tryWithResource", "renameFileToType", - "organizeImports" + "organizeImports", + "removeUnusedLambdaParameters" ] }, "default": [ From db41286df8e94903b63652661701fd085f584f44 Mon Sep 17 00:00:00 2001 From: Snjeza Date: Tue, 19 Nov 2024 20:37:00 +0100 Subject: [PATCH 527/708] Improve code actions by using "java/getChangeSignatureInfo". (#3845) - Use the custom request to get signature information to populate the necessary UI elements Signed-off-by: Snjezana Peco --- src/protocol.ts | 14 ++++++++++++++ src/refactorAction.ts | 9 +++++++-- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/protocol.ts b/src/protocol.ts index 1786286ab..c31b5a590 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -366,6 +366,10 @@ export namespace GetRefactorEditRequest { export const type = new RequestType('java/getRefactorEdit'); } +export namespace GetChangeSignatureInfoRequest { + export const type = new RequestType('java/getChangeSignatureInfo'); +} + export interface SelectionInfo { name: string; length: number; @@ -373,6 +377,16 @@ export interface SelectionInfo { params?: string[]; } +export interface ChangeSignatureInfo { + methodIdentifier: string; + modifier: string; + returnType: string; + methodName: string; + parameters: any; + exceptions: any; + errorMessage: string; +} + export interface InferSelectionParams { command: string; context: CodeActionParams; diff --git a/src/refactorAction.ts b/src/refactorAction.ts index 068998ccb..f8b37fb54 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -6,7 +6,7 @@ import { commands, ExtensionContext, Position, QuickPickItem, TextDocument, Uri, import { FormattingOptions, WorkspaceEdit, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; -import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest } from './protocol'; +import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest, GetChangeSignatureInfoRequest, ChangeSignatureInfo } from './protocol'; import { ChangeSignaturePanel } from './refactoring/changeSignaturePanel'; import { getExtractInterfaceArguments, revealExtractedInterface } from './refactoring/extractInterface'; @@ -112,7 +112,12 @@ function registerApplyRefactorCommand(languageClient: LanguageClient, context: E } commandArguments.push(...args); } else if (command === 'changeSignature') { - ChangeSignaturePanel.render(context.extensionUri, languageClient, command, params, formattingOptions, commandInfo); + const changeSignatureInfo: ChangeSignatureInfo = await languageClient.sendRequest(GetChangeSignatureInfoRequest.type, params); + if (changeSignatureInfo.errorMessage !== undefined) { + window.showWarningMessage(changeSignatureInfo.errorMessage); + return; + } + ChangeSignaturePanel.render(context.extensionUri, languageClient, command, params, formattingOptions, changeSignatureInfo); return; } From 2736e2a3c526c7ad0311b28bc83a52e83011397f Mon Sep 17 00:00:00 2001 From: nkilders <71071641+nkilders@users.noreply.github.com> Date: Tue, 19 Nov 2024 19:13:55 +0100 Subject: [PATCH 528/708] Fix typos --- .github/ISSUE_TEMPLATE.md | 2 +- CONTRIBUTING.md | 4 ++-- USAGE_DATA.md | 4 ++-- document/_java.learnMoreAboutRefactorings.md | 2 +- document/_java.metadataFilesGeneration.md | 2 +- src/apiManager.ts | 2 +- src/fileEventHandler.ts | 2 +- src/lombokSupport.ts | 6 +++--- src/refactoring/changeSignaturePanel.ts | 2 +- src/serverTaskPresenter.ts | 2 +- 10 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 6ace17dc5..d7790cc00 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -22,4 +22,4 @@ ##### Expected Result -##### Additional Informations +##### Additional Information diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 53edde00f..29ab311c9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -172,7 +172,7 @@ While developing the language server and the extension, you don't need to deploy - Start the language server via `jdt.ls.socket-stream` launch configuration in VS Code or Eclipse ![Socket Steam in VS Code](images/changelog/SocketSteamInVSCode.png) -- Start the extenion via _Launch Extension - JDTLS Client_ in VS Code +- Start the extension via _Launch Extension - JDTLS Client_ in VS Code - You can modify `launch.json` to use a different port: - Modify `JDTLS_CLIENT_PORT` to specify the port VS Code should connect to. @@ -205,7 +205,7 @@ on ways to sideload or share. If you encounter a problem and know it is caused by eclipse.jdt.ls, then please open a bug report over [there](https://github.com/eclipse/eclipse.jdt.ls/issues). In doubt, you can report issues in the [vscode-java issue tracker](https://github.com/redhat-developer/vscode-java/issues). -Try to collect as much informations as you can to describe the issue and help us reproduce the problem. Head over to the [troubleshooting page](https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting#enable-logging) to see how to collect useful logging informations. +Try to collect as much information as you can to describe the issue and help us reproduce the problem. Head over to the [troubleshooting page](https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting#enable-logging) to see how to collect useful logging information. ### Certificate of Origin diff --git a/USAGE_DATA.md b/USAGE_DATA.md index e0d0fc53e..fb6b7fdf0 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -22,8 +22,8 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled`, `java.jdt.ls.javac.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors - * The number of results (eg. 20), whether an error occured (eg. false), engine type (eg. 'ecj', 'dom') and duration (in milliseconds) when code assist is activated - * Whether the language server ran out of memory and the maximum allocated memory at which that occured (eg. 200m) + * The number of results (eg. 20), whether an error occurred (eg. false), engine type (eg. 'ecj', 'dom') and duration (in milliseconds) when code assist is activated + * Whether the language server ran out of memory and the maximum allocated memory at which that occurred (eg. 200m) ## What's included in the general telemetry data diff --git a/document/_java.learnMoreAboutRefactorings.md b/document/_java.learnMoreAboutRefactorings.md index 1af09cf3d..e153dace4 100644 --- a/document/_java.learnMoreAboutRefactorings.md +++ b/document/_java.learnMoreAboutRefactorings.md @@ -192,7 +192,7 @@ public void order(String[] books) { Converts an anonymous class creation to the lambda expression. ### Example -Let's convert the anonymous class `Runnable(){...}` to a lamda expression. +Let's convert the anonymous class `Runnable(){...}` to a lambda expression. #### Before ```java diff --git a/document/_java.metadataFilesGeneration.md b/document/_java.metadataFilesGeneration.md index 6ab9646db..4239b54c8 100644 --- a/document/_java.metadataFilesGeneration.md +++ b/document/_java.metadataFilesGeneration.md @@ -2,7 +2,7 @@ We use the setting `java.import.generatesMetadataFilesAtProjectRoot` to control where the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated: - `true`: Metadata files will be generated at the project's root. -- `false`: Metadata files will be generated at the workspace storage. To be specifc, the path will be: `/redhat.java/jdt_ws/.metadata/.plugins/org.eclipse.core.resources/.projects//`. +- `false`: Metadata files will be generated at the workspace storage. To be specific, the path will be: `/redhat.java/jdt_ws/.metadata/.plugins/org.eclipse.core.resources/.projects//`. By default, the setting is set to `false`. diff --git a/src/apiManager.ts b/src/apiManager.ts index 97fbe6135..6cdbf8e62 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -24,7 +24,7 @@ class ApiManager { private serverReadyPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { - // if it's manual import mode, set the server mode to lightwight, so that the + // if it's manual import mode, set the server mode to lightweight, so that the // project explorer won't spinning until import project is triggered. if (getJavaConfiguration().get("import.projectSelection") === "manual") { serverMode = ServerMode.lightWeight; diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 259944bea..e14970f08 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -57,7 +57,7 @@ async function handleNewJavaFiles(e: FileCreateEvent) { } // See https://github.com/redhat-developer/vscode-java/issues/2939 - // The client side listener should avoid inserting duplicated conents + // The client side listener should avoid inserting duplicated contents // when the file creation event is triggered from a WorkspaceEdit. // Given that the VS Code API doesn't provide a way to distinguish // the event source, a workaround is to wait 100ms and let WorkspaceEdit diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index f40885e48..4d791223b 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -67,8 +67,8 @@ function lombokPath2Version(lombokPath: string): string { } function lombokPath2VersionNumber(lombokPath: string): string { - const lombokVersioNumber = lombokPath2Version(lombokPath).split('-')[1]; - return lombokVersioNumber; + const lombokVersionNumber = lombokPath2Version(lombokPath).split('-')[1]; + return lombokVersionNumber; } export function getLombokVersion(): string { @@ -149,7 +149,7 @@ export async function checkLombokDependency(context: ExtensionContext, projectUr } projectLombokPath = currentLombokClasspath; /* if projectLombokPath is undefined, it means that this project has not imported Lombok. - * We don't need initalize Lombok status bar in this case. + * We don't need initialize Lombok status bar in this case. */ if (!isLombokStatusBarInitialized && projectLombokPath) { if (!isLombokCommandInitialized) { diff --git a/src/refactoring/changeSignaturePanel.ts b/src/refactoring/changeSignaturePanel.ts index 66c98f7d3..b9afd8cc9 100644 --- a/src/refactoring/changeSignaturePanel.ts +++ b/src/refactoring/changeSignaturePanel.ts @@ -23,7 +23,7 @@ export class ChangeSignaturePanel { private readonly panel: WebviewPanel; private disposables: Disposable[] = []; - // method matadata + // method metadata private methodIdentifier: string | undefined; private methodName: string | undefined; private modifier: string | undefined; diff --git a/src/serverTaskPresenter.ts b/src/serverTaskPresenter.ts index 1dcaa28b7..2cf8a1030 100644 --- a/src/serverTaskPresenter.ts +++ b/src/serverTaskPresenter.ts @@ -47,7 +47,7 @@ async function getPresenterTaskExecution(): Promise { // Fix #1180. When switching to multiroot workspace by "Add Folder to Workspace...", vscode restarts the extension // host without deactivating the extension. See https://github.com/microsoft/vscode/issues/69335 // This is to clean up the existing task execution and terminal created by previous extension instance because they -// are no longer accessible to the current extension instance afte the restart. +// are no longer accessible to the current extension instance after the restart. // TODO - As mentioned in https://github.com/microsoft/vscode/issues/69335, vscode will no long restart because of // workspace changes. We can revisit this issue to see if we can remove the fix. async function killExistingExecutions() { From 2f57115288bba92124a96dc399e2af04bbdc0827 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 20 Nov 2024 10:40:25 -0500 Subject: [PATCH 529/708] Rename 'removeUnusedLambdaParameters' to 'renameUnusedLocalVariables'. - The clean up now supports additional cases from upstream. Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 6 +++--- package.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 36d74d746..09841c622 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -407,9 +407,9 @@ public class A { } ``` -### `removeUnusedLambdaParameters` +### `renameUnusedLocalVariables` -Rename unused lambda parameters, or unused pattern variables to `_`. +Rename unused loop variables, try-with-resource variables, catch parameters, lambda parameters, pattern variables to `_`. For example: @@ -431,4 +431,4 @@ switch (r) { case R(_, _) -> {} case R _ -> {} } -``` \ No newline at end of file +``` diff --git a/package.json b/package.json index 8fbaabe8b..bba3e3a27 100644 --- a/package.json +++ b/package.json @@ -1314,7 +1314,7 @@ "tryWithResource", "renameFileToType", "organizeImports", - "removeUnusedLambdaParameters" + "renameUnusedLocalVariables" ] }, "default": [ From 8734fb30b955ab09c2089dbf8c7bee88f371a511 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 27 Nov 2024 15:21:27 -0500 Subject: [PATCH 530/708] Changelog for 1.37.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a038c583..3cd6f4d54 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.37.0 (November 28th, 2024) + * performance - Improve performance of code action requests. See [#3845](https://github.com/redhat-developer/vscode-java/pull/3845). + * performance - Improve performance of all language server requests that resolve a document URI. See [JLS#3313](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3313). + * enhancement - Code action for unused pattern variable, lambda parameter, etc. and the corresponding clean up. See [#3856](https://github.com/redhat-developer/vscode-java/pull/3856), [#3864](https://github.com/redhat-developer/vscode-java/pull/3864). + * enhancement - Add setting to control inclusion of declarations in reference search. See [#3850](https://github.com/redhat-developer/vscode-java/issues/3850). + * bug fix - Mapstruct implementation class not generated. See [#3836](https://github.com/redhat-developer/vscode-java/issues/3836). + * bug fix - Open more requested system packages for tests with `javac` support. See [#3847](https://github.com/redhat-developer/vscode-java/pull/3847). + * bug fix - Fix some typos in documentation. See [#3863](https://github.com/redhat-developer/vscode-java/pull/3863) + * build - Add Maven (`-U`) flag for updating artifacts from snapshot repositories. See [#3848](https://github.com/redhat-developer/vscode-java/pull/3848). + ## 1.36.0 (October 31st, 2024) * enhancement - Experimental support for using `javac` as the compiler. See [#3558](https://github.com/redhat-developer/vscode-java/pull/3558), [JLS#3167](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3167). * `java.jdt.ls.javac.enabled`: Enables Javac-based compilation. From 309c70544d1856d52dfa63a7e2ed07db0fa6c88f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 28 Nov 2024 10:34:49 -0500 Subject: [PATCH 531/708] Upversion to 1.38.0. Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 42e531b57..8519b9a1f 100644 --- a/README.md +++ b/README.md @@ -255,8 +255,6 @@ The following settings are supported: - Workspace Symbols * `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. - -New in 1.37.0 * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 2e893a19b..7c9cc4e05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.37.0", + "version": "1.38.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.37.0", + "version": "1.38.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index bba3e3a27..2014a854d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.37.0", + "version": "1.38.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 2d1461997b38a5c12516faab5c7a4e0b775c00cd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 22:39:14 +0000 Subject: [PATCH 532/708] Bump cross-spawn from 7.0.3 to 7.0.6 Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from 7.0.3 to 7.0.6. - [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md) - [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.6) --- updated-dependencies: - dependency-name: cross-spawn dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 142 ++-------------------------------------------- 1 file changed, 4 insertions(+), 138 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7c9cc4e05..0b2124243 100644 --- a/package-lock.json +++ b/package-lock.json @@ -104,12 +104,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/@eslint/eslintrc/node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -127,18 +121,6 @@ } } }, - "node_modules/@eslint/eslintrc/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/@eslint/eslintrc/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2212,9 +2194,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -2224,20 +2206,6 @@ "node": ">= 8" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/css-loader": { "version": "6.7.3", "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", @@ -2984,12 +2952,6 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint/node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, "node_modules/eslint/node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -3075,27 +3037,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, "node_modules/eslint/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3140,18 +3081,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/espree/node_modules/acorn": { - "version": "8.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", - "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/esquery": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", @@ -4153,44 +4082,6 @@ "node": ">= 0.4" } }, - "node_modules/gulp-download/node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gulp-download/node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true - }, "node_modules/gulp-download/node_modules/vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", @@ -6016,15 +5907,6 @@ "node": ">=8" } }, - "node_modules/pkg-dir/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/plugin-error": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", @@ -6176,8 +6058,7 @@ "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, "node_modules/psl": { "version": "1.8.0", @@ -6277,11 +6158,6 @@ "util-deprecate": "~1.0.1" } }, - "node_modules/readable-stream/node_modules/process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" - }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6673,15 +6549,6 @@ "node": ">=0.3.1" } }, - "node_modules/sinon/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -7909,7 +7776,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, From 3c7b8d9baf1c3ebc39e253a43cebd09433185251 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 2 Dec 2024 10:39:14 -0500 Subject: [PATCH 533/708] Update vscode-redhat-telemetry to 0.9.1. Signed-off-by: Roland Grunberg --- package-lock.json | 56 +++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b2124243..5741fcacd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -350,18 +350,18 @@ "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.0.tgz", - "integrity": "sha512-1QMKaIJIflzC7Zz89ojzt8j1X3pu8FeP8reAm+9K6HeN18ahoKZLwVBO4dCfiHZ+VZIkeQK4XU7al5132Gc5TA==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.1.tgz", + "integrity": "sha512-Pe7M2YQI+Yqq/nDJvQAWpCPMRULLsrwQ8XQnerSF2+2XvwLG8dReOAPgv+Jjxoy0OY6IKbAt3F0fuhjcuQCdeA==", "dependencies": { - "@segment/analytics-node": "2.1.3", + "@segment/analytics-node": "2.2.0", "countries-and-timezones": "^3.4.1", "getos": "^3.2.1", "object-hash": "^3.0.0", "os-locale": "^5.0.0", "picomatch": "^4.0.2", "ua-parser-js": "1.0.39", - "uuid": "^10.0.0" + "uuid": "^11.0.3" } }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/execa": { @@ -486,21 +486,21 @@ } }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/uuid": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", - "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", + "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/@segment/analytics-core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.7.0.tgz", - "integrity": "sha512-0DHSriS/oAB/2bIgOMv3fFV9/ivp39ibdOTTf+dDOhf+vlciBv0+MHw47k/6PRobbuls27cKkKZAKc4DDC2+gw==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.8.0.tgz", + "integrity": "sha512-6CrccsYRY33I3mONN2ZW8SdBpbLtu1Ict3xR+n0FemYF5RB/jG7pW6jOvDXULR8kuYMzMmGOP4HvlyUmf3qLpg==", "dependencies": { "@lukeed/uuid": "^2.0.0", "@segment/analytics-generic-utils": "1.2.0", @@ -509,9 +509,9 @@ } }, "node_modules/@segment/analytics-core/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/@segment/analytics-generic-utils": { "version": "1.2.0", @@ -522,17 +522,17 @@ } }, "node_modules/@segment/analytics-generic-utils/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/@segment/analytics-node": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.1.3.tgz", - "integrity": "sha512-xwMkyXgr7xgPsP0w79nzCwRHYi9jzj9ps4Im7xWGK8AKKE4eox39tMZOdRtpDbvXQlrs9fh64ZC0w/yZZDM/9g==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.2.0.tgz", + "integrity": "sha512-mPFTSBr9CrkFBdgr7KU/YD8V/25P8vPb/hVvVHYKwEdHRovlizZ34ENgQlvqeRuamQiXD3RLM8pcWX+WxPz3lQ==", "dependencies": { "@lukeed/uuid": "^2.0.0", - "@segment/analytics-core": "1.7.0", + "@segment/analytics-core": "1.8.0", "@segment/analytics-generic-utils": "1.2.0", "buffer": "^6.0.3", "jose": "^5.1.0", @@ -567,9 +567,9 @@ } }, "node_modules/@segment/analytics-node/node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/@sinonjs/commons": { "version": "1.8.3", @@ -4618,9 +4618,9 @@ } }, "node_modules/jose": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.3.tgz", - "integrity": "sha512-egLIoYSpcd+QUF+UHgobt5YzI2Pkw/H39ou9suW687MY6PmCwPmkNV/4TNjn1p2tX5xO3j0d0sq5hiYE24bSlg==", + "version": "5.9.6", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", + "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", "funding": { "url": "https://github.com/sponsors/panva" } From eb145dab80da78771ef82de2a9b6ea8a8cf807b5 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 9 Dec 2024 10:59:05 -0500 Subject: [PATCH 534/708] Check for updated snapshot repositories when running build. - Tycho p2 repositories whose underlying content is updated are considered snapshot repositories, and locally cached data can become stale and lead to cryptic compilation errors Signed-off-by: Roland Grunberg --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index d0014182c..836fcf818 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -278,7 +278,7 @@ function download_server_fn(){ function build_server_fn(){ fse.removeSync('./server'); - cp.execSync(mvnw() + ' -Pserver-distro clean package -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); + cp.execSync(mvnw() + ' -Pserver-distro clean package -U -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz', { encoding: false }) .pipe(decompress()) .pipe(gulp.dest('./server')); From 32974233010acdd5a08f7962fe09c8ed854784aa Mon Sep 17 00:00:00 2001 From: Hope Hadfield Date: Tue, 26 Nov 2024 16:38:57 -0500 Subject: [PATCH 535/708] Add setting to support method implementation code lens Signed-off-by: Hope Hadfield --- README.md | 2 +- package.json | 20 ++++++++++++++++---- src/utils.ts | 6 ++++++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 8519b9a1f..266688994 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ The following settings are supported: * `java.configuration.maven.userSettings` : Path to Maven's user settings.xml. * `java.configuration.checkProjectSettingsExclusions`: **Deprecated, please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.** Controls whether to exclude extension-generated project settings files (`.project`, `.classpath`, `.factorypath`, `.settings/`) from the file explorer. Defaults to `false`. * `java.referencesCodeLens.enabled` : Enable/disable the references code lenses. -* `java.implementationsCodeLens.enabled` : Enable/disable the implementations code lenses. +* `java.implementationCodeLens` : Enable/disable the implementations code lens for the provided categories. * `java.signatureHelp.enabled` : Enable/disable signature help support (triggered on `(`). * `java.signatureHelp.description.enabled` : Enable/disable to show the description in signature help. Defaults to `false`. * `java.contentProvider.preferred` : Preferred content provider (see 3rd party decompilers available in [vscode-java-decompiler](https://github.com/dgileadi/vscode-java-decompiler)). diff --git a/package.json b/package.json index 2014a854d..b2ce1a208 100644 --- a/package.json +++ b/package.json @@ -1409,10 +1409,22 @@ "scope": "window", "order": 10 }, - "java.implementationsCodeLens.enabled": { - "type": "boolean", - "default": false, - "description": "Enable/disable the implementations code lens.", + "java.implementationCodeLens": { + "type": "string", + "enum": [ + "none", + "types", + "methods", + "all" + ], + "enumDescriptions": [ + "Disable the implementations code lens", + "Enable the implementations code lens only for types", + "Enable the implementations code lens only for methods", + "Enable the implementations code lens for types and methods" + ], + "default": "none", + "description": "Enable/disable the implementations code lens for the provided categories.", "scope": "window", "order": 20 }, diff --git a/src/utils.ts b/src/utils.ts index 38bf67654..450227e6b 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -272,6 +272,12 @@ export async function getJavaConfig(javaHome: string) { const userConfiguredJREs: any[] = javaConfig.configuration.runtimes; javaConfig.configuration.runtimes = await addAutoDetectedJdks(userConfiguredJREs); } + + if (!isPreferenceOverridden("java.implementationCodeLens") && typeof javaConfig.implementationsCodeLens?.enabled === 'boolean'){ + const deprecatedImplementations = javaConfig.implementationsCodeLens.enabled; + javaConfig.implementationCodeLens = deprecatedImplementations ? "types" : "none"; + } + return javaConfig; } From ca2ebc4a3901bc427755b63b81e9111f96c0698c Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 17 Dec 2024 11:34:10 -0500 Subject: [PATCH 536/708] Changelog for 1.38.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 11 +++++++++++ README.md | 3 +++ 2 files changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3cd6f4d54..14ac41925 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## 1.38.0 (December 19th, 2024) + * enhancement - Add code lens for interface / abstract method implementations. See [#3813](https://github.com/redhat-developer/vscode-java/issues/3813). + * `java.implementationCodelens.enabled` replaced by `java.implementationCodeLens` + * Values for new setting are `"none"`, `"types"`, `"methods"`, `"all"` + * enhancement - Add quick fix for sealed class within empty switch expression. See [JLS#3345](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3345). + * enhancement - Support code assist on unresolved types. See [#1123](https://github.com/redhat-developer/vscode-java/issues/1123). + * bug fix - Improve rendering of Markdown Comments (JEP 467). See [JLS#3332](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3332). + * build - Check for updated snapshot repositories when running build. See [#3889](https://github.com/redhat-developer/vscode-java/pull/3889). + * dependencies - Bump cross-spawn from 7.0.3 to 7.0.6. See [#3862](https://github.com/redhat-developer/vscode-java/pull/3862). + * dependencies - Update vscode-redhat-telemetry to 0.9.1. See [#3886](https://github.com/redhat-developer/vscode-java/pull/3886). + ## 1.37.0 (November 28th, 2024) * performance - Improve performance of code action requests. See [#3845](https://github.com/redhat-developer/vscode-java/pull/3845). * performance - Improve performance of all language server requests that resolve a document URI. See [JLS#3313](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3313). diff --git a/README.md b/README.md index 266688994..b9dbb67b0 100644 --- a/README.md +++ b/README.md @@ -257,6 +257,9 @@ The following settings are supported: * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` +New in 1.38.0 +* `java.implementationCodeLens` : Enable/disable the implementations code lens for the provided categories. Possible values are `none`, `types`, `methods`, `all`. Note that this option replaces `java.implementationsCodeLens.enabled`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). From d1b63d690389102edefc4809842a71a9632af9c6 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 19 Dec 2024 08:27:43 -0500 Subject: [PATCH 537/708] Upversion 1.39.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 2 +- README.md | 3 --- package-lock.json | 4 ++-- package.json | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 14ac41925..73ca3ec29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ ## 1.38.0 (December 19th, 2024) * enhancement - Add code lens for interface / abstract method implementations. See [#3813](https://github.com/redhat-developer/vscode-java/issues/3813). - * `java.implementationCodelens.enabled` replaced by `java.implementationCodeLens` + * `java.implementationCodeLens.enabled` replaced by `java.implementationCodeLens` * Values for new setting are `"none"`, `"types"`, `"methods"`, `"all"` * enhancement - Add quick fix for sealed class within empty switch expression. See [JLS#3345](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3345). * enhancement - Support code assist on unresolved types. See [#1123](https://github.com/redhat-developer/vscode-java/issues/1123). diff --git a/README.md b/README.md index b9dbb67b0..266688994 100644 --- a/README.md +++ b/README.md @@ -257,9 +257,6 @@ The following settings are supported: * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` -New in 1.38.0 -* `java.implementationCodeLens` : Enable/disable the implementations code lens for the provided categories. Possible values are `none`, `types`, `methods`, `all`. Note that this option replaces `java.implementationsCodeLens.enabled`. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index 5741fcacd..a2d7b3d8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.38.0", + "version": "1.39.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.38.0", + "version": "1.39.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index b2ce1a208..fc10cfa64 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.38.0", + "version": "1.39.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 266537cd94e16c67918b81eee8554df4b95ba728 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Fri, 20 Dec 2024 21:09:45 +0100 Subject: [PATCH 538/708] Open requested system packages for javac Signed-off-by: Snjezana Peco --- src/javaServerStarter.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index d8c3beafb..7d0f3f267 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -135,6 +135,16 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E 'jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED', '--add-opens', 'jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED', + '--add-opens', + 'jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED', + '--add-opens', + 'java.compiler/javax.tools=ALL-UNNAMED', + '--add-opens', + 'java.base/java.nio.channels=ALL-UNNAMED', + '--add-opens', + 'java.base/sun.nio.ch=ALL-UNNAMED', '-DICompilationUnitResolver=org.eclipse.jdt.core.dom.JavacCompilationUnitResolver', '-DCompilationUnit.DOM_BASED_OPERATIONS=true', '-DAbstractImageBuilder.compilerFactory=org.eclipse.jdt.internal.javac.JavacCompilerFactory' From fdfccb29a6dbafaf4cda35ff7693e05bfd0f4eeb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 6 Jan 2025 09:37:51 -0500 Subject: [PATCH 539/708] A Java 21 Execution Environment is required at a minimum. - Eclipse Platform 4.35 now requires Java 21 - Remove unnecessary Jenkinsfile (builds occur on Github Actions) Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 2 +- .github/workflows/release.yml | 2 +- .sdkmanrc | 2 +- Jenkinsfile | 160 -------------------------------- README.md | 4 +- gulpfile.js | 14 +-- package.json | 4 +- src/requirements.ts | 4 +- 8 files changed, 16 insertions(+), 176 deletions(-) delete mode 100644 Jenkinsfile diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 0e72b06fe..238bfd514 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -18,7 +18,7 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '17' + java-version: '21' distribution: 'adopt' - run: npm install -g typescript "vsce" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a65a409b0..1bb6816d5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -135,7 +135,7 @@ jobs: run: | platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do - npx gulp download_jre --target ${platform} --javaVersion 17 + npx gulp download_jre --target ${platform} --javaVersion 21 vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix done rm -rf jre/ diff --git a/.sdkmanrc b/.sdkmanrc index 0f7aaf5a5..d2635abfa 100644 --- a/.sdkmanrc +++ b/.sdkmanrc @@ -1,3 +1,3 @@ # Enable auto-env through the sdkman_auto_env config # Add key=value pairs of SDKs to use below -java=17.0.3-tem +java=21.0.5-tem diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index da9baff3f..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,160 +0,0 @@ -#!/usr/bin/env groovy - -def installBuildRequirements(){ - def nodeHome = tool 'nodejs-lts' - env.PATH="${env.PATH}:${nodeHome}/bin" - sh "npm install -g typescript" - sh 'npm install -g --force "@vscode/vsce"' - sh 'npm install -g "ovsx"' -} - -def buildVscodeExtension(){ - sh "npm install" - sh "npm run vscode:prepublish" -} - -def downloadLombokJar(){ - stage "Download lombok.jar" - sh "npx gulp download_lombok" -} - -def packageSpecificExtensions() { - stage "Package platform specific vscode-java" - def platforms = ["win32-x64", "linux-x64", "linux-arm64", "darwin-x64", "darwin-arm64"] - def embeddedJRE = 17 - for(platform in platforms){ - sh "npx gulp download_jre --target ${platform} --javaVersion ${embeddedJRE}" - sh "vsce package ${env.publishPreReleaseFlag} --target ${platform} -o java-${platform}-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - } -} - -def packageExtensions() { - env.publishPreReleaseFlag = "" - if (publishPreRelease.equals('true')) { - stage "replace extension version" - sh "npx gulp prepare_pre_release" - - def packageJson = readJSON file: 'package.json' - env.EXTENSION_VERSION = "${packageJson.version}" - env.publishPreReleaseFlag = "--pre-release" - - packageSpecificExtensions() - } else { - stage "package generic version" - def packageJson = readJSON file: 'package.json' - env.EXTENSION_VERSION = "${packageJson.version}" - - sh "vsce package ${env.publishPreReleaseFlag} -o java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}.vsix" - - packageSpecificExtensions() - stash name:'platformVsix', includes:'java-win32-*.vsix,java-linux-*.vsix,java-darwin-*.vsix' - - stage 'Upload vscode-java to staging' - def artifactDir = "java-${env.EXTENSION_VERSION}-${env.BUILD_NUMBER}" - sh "mkdir ${artifactDir}" - sh "mv *.vsix ${artifactDir}" - - sh "sftp ${UPLOAD_LOCATION}/jdt.ls/staging <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" - // Clean up build vsix - sh "rm -rf ${artifactDir}" - unstash 'platformVsix' - } -} - -def publishExtensions() { - // Clean up embedded jre folder from previous build - sh 'npx gulp clean_jre' - - if (publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { - timeout(time:5, unit:'DAYS') { - input message:'Approve deployment?', submitter: 'fbricon,rgrunber' - } - } - - def platformVsixes = findFiles(glob: '**.vsix') - - stage "publish generic version to VS Code Marketplace" - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - sh 'vsce publish -p ${TOKEN}' + " ${env.publishPreReleaseFlag}" - } - - stage "publish specific version to VS Code Marketplace" - - withCredentials([[$class: 'StringBinding', credentialsId: 'vscode_java_marketplace', variable: 'TOKEN']]) { - for(platformVsix in platformVsixes){ - sh 'vsce publish -p ${TOKEN}' + " --packagePath ${platformVsix.path}" - } - } - - stage "Publish generic version to Open-VSX Marketplace" - withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { - sh 'ovsx publish -p ${OVSX_TOKEN}' + " ${env.publishPreReleaseFlag}" - } - - stage "Publish specific version to Open-VSX Marketplace" - withCredentials([[$class: 'StringBinding', credentialsId: 'open-vsx-access-token', variable: 'OVSX_TOKEN']]) { - for(platformVsix in platformVsixes){ - sh 'ovsx publish -p ${OVSX_TOKEN}' + " --packagePath ${platformVsix.path}" - } - } - - if (publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { - stage "Publish to http://download.jboss.org/jbosstools/static/jdt.ls/stable/" - def artifactDir = "java-${env.EXTENSION_VERSION}" - sh "mkdir ${artifactDir}" - sh "mv *.vsix ${artifactDir}" - - archive includes:"${artifactDir}/**/*.*" - - // copy this stable build to Akamai-mirrored /static/ URL, so staging can be cleaned out more easily - sh "sftp ${UPLOAD_LOCATION}/static/jdt.ls/stable/ <<< \$'mkdir ${artifactDir}\nput -r ${artifactDir}'" - } -} - -node('rhel8'){ - stage 'Build JDT LS' - - env.JAVA_HOME="${tool 'openjdk-17'}" - env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" - sh 'java -version' - - git url: 'https://github.com/eclipse/eclipse.jdt.ls.git' - sh "./mvnw clean verify -B -U -e -Pserver-distro -Dtycho.disableP2Mirrors=true -DskipTests -P!jboss-maven-repos,!redhat-ga-repository,!redhat-ea-repository" - - def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') - stash name: 'server_distro', includes :files[0].path -} - -node('rhel8'){ - env.JAVA_HOME="${tool 'openjdk-17'}" - env.PATH="${env.JAVA_HOME}/bin:${env.PATH}" - stage 'Checkout vscode-java code' - deleteDir() - git url: 'https://github.com/redhat-developer/vscode-java.git' - - stage 'install vscode-java build requirements' - installBuildRequirements() - - stage 'Build vscode-java' - buildVscodeExtension() - unstash 'server_distro' - def files = findFiles(glob: '**/org.eclipse.jdt.ls.product/distro/**.tar.gz') - sh "rm -rf ./out" - sh "mkdir ./server" - sh "tar -xvzf ${files[0].path} -C ./server" - - stage 'Test vscode-java for staging' - wrap([$class: 'Xvnc']) { - sh "npm run compile" //compile the test code too - env.SKIP_COMMANDS_TEST="true" - sh "npm test --silent" - } - - downloadLombokJar() - - packageExtensions() - - if (publishPreRelease.equals('true') || publishToMarketPlace.equals('true') || publishToOVSX.equals('true')) { - publishExtensions() - } -} diff --git a/README.md b/README.md index 266688994..f15e3c239 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Quick Start ============ 1. Install the Extension 2. On the following platforms, the extension should activate without any setup : `win32-x64`, `darwin-x64`, `darwin-arm64`, `linux-x64`, `linux-arm64`.\ -If on another platform, or using the "universal" version, you can [set](#setting-the-jdk) a _Java_ Development Kit. It must be Java 17 or above. +If on another platform, or using the "universal" version, you can [set](#setting-the-jdk) a _Java_ Development Kit. It must be Java 21 or above. 3. Optionally, download and install a Java Development Kit for your project (Java 1.8 or above is supported). See [Project JDKs](#project-jdks) for more details 4. Extension is activated when you first access a Java file * Recognizes projects with *Maven* or *Gradle* build files in the directory hierarchy. @@ -60,7 +60,7 @@ Now that Java extension will publish platform specific versions, it will embed a The following part is only kept for the universal version without embedded JRE. ->The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects. Java 17 is the minimum required version.\ +>The tooling JDK will be used to launch the Language Server for Java. And by default, will also be used to compile your projects. Java 21 is the minimum required version.\ \ The path to the Java Development Kit can be specified by the `java.jdt.ls.java.home` setting in VS Code settings (workspace/user settings). If not specified, it is searched in the following order until a JDK meets current minimum requirement. >- the `JDK_HOME` environment variable diff --git a/gulpfile.js b/gulpfile.js index 836fcf818..b9fc46f5c 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -29,12 +29,12 @@ gulp.task('clean_jre', function (done) { }); // Pls update the latest JRE if a new JDK is announced. -const LATEST_JRE = 17; +const LATEST_JRE = 21; /** * Usage: * npx gulp download_jre // Download the latest JRE for the platform of the current running machine. - * npx gulp download_jre --target darwin-x64 --javaVersion 17 // Download the specified JRE for the specified platform. + * npx gulp download_jre --target darwin-x64 --javaVersion 21 // Download the specified JRE for the specified platform. * * Supported platforms: * win32-x64, @@ -80,11 +80,11 @@ gulp.task('download_jre', async function (done) { /** * Here are the contents for a sample justj.manifest file: - * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-linux-aarch64.tar.gz - * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-linux-x86_64.tar.gz - * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-macosx-aarch64.tar.gz - * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-macosx-x86_64.tar.gz - * ../20211012_0921/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-17-win32-x86_64.tar.gz + * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-linux-aarch64.tar.gz + * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-linux-x86_64.tar.gz + * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-macosx-aarch64.tar.gz + * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-macosx-x86_64.tar.gz + * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-win32-x86_64.tar.gz */ const javaPlatform = platformMapping[targetPlatform]; const list = manifest.split(/\r?\n/); diff --git a/package.json b/package.json index fc10cfa64..0a63ed48c 100644 --- a/package.json +++ b/package.json @@ -311,7 +311,7 @@ "null" ], "default": null, - "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", + "description": "Specifies the folder path to the JDK (21 or more recent) used to launch the Java Language Server.\nOn Windows, backslashes must be escaped, i.e.\n\"java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-21.0_5\"", "scope": "machine-overridable", "deprecationMessage": "This setting is deprecated, please use 'java.jdt.ls.java.home' instead.", "order": 0 @@ -322,7 +322,7 @@ "null" ], "default": null, - "description": "Specifies the folder path to the JDK (17 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-17.0_3\"", + "description": "Specifies the folder path to the JDK (21 or more recent) used to launch the Java Language Server. This setting will replace the Java extension's embedded JRE to start the Java Language Server. \n\nOn Windows, backslashes must be escaped, i.e.\n\"java.jdt.ls.java.home\":\"C:\\\\Program Files\\\\Java\\\\jdk-21.0_5\"", "scope": "machine-overridable", "order": 10 }, diff --git a/src/requirements.ts b/src/requirements.ts index b30dfe812..717e5e062 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -41,7 +41,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise { } const runtime = await getRuntime(javaHome, { withVersion: true }); return runtime?.version?.major || 0; -} \ No newline at end of file +} From bcc1f810f2bf1ce50910de565f90b994efcded54 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 21 Jan 2025 23:13:19 -0500 Subject: [PATCH 540/708] Changelog for 1.39.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 73ca3ec29..bdb07221f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 1.39.0 (January 22nd, 2025) + * performance - Enhance initialization of gradle projects. See [JLS#3357](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3357). + * enhancement - Implementation code lens for non interface/abstract base types/methods. See [JLS#3355](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3355). + * bug fix - Handle snippet position groups with undefined offsets (eg. `Add constructor ..`). See [#3905](https://github.com/redhat-developer/vscode-java/issues/3905). + * bug fix - Ensure Gradle project always reacts to build configuration changes. See [#3893](https://github.com/redhat-developer/vscode-java/issues/3893). + * bug fix - Update the `javac` build profile with new `--add-opens`. See [#3897](https://github.com/redhat-developer/vscode-java/issues/3897). + * debt - Bump minimum required Java Execution Environment from 17 to 21. See [#3911](https://github.com/redhat-developer/vscode-java/pull/3911). + ## 1.38.0 (December 19th, 2024) * enhancement - Add code lens for interface / abstract method implementations. See [#3813](https://github.com/redhat-developer/vscode-java/issues/3813). * `java.implementationCodeLens.enabled` replaced by `java.implementationCodeLens` From b19348f3392e28519174c7a1acfc56933ab53379 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 22 Jan 2025 12:15:50 -0500 Subject: [PATCH 541/708] Upversion to 1.40.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a2d7b3d8f..1281bb660 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.39.0", + "version": "1.40.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.39.0", + "version": "1.40.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 0a63ed48c..a68bac872 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.39.0", + "version": "1.40.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 03c404281bb3a7f79d2e6f8be019f9906c6ccc7e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Jan 2025 09:16:06 -0500 Subject: [PATCH 542/708] Adopt the Lombok 1.18.36 release. Signed-off-by: Roland Grunberg --- gulpfile.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gulpfile.js b/gulpfile.js index b9fc46f5c..d83b633e7 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,7 +127,7 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.34'; + const lombokVersion = '1.18.36'; // The latest lombok version can be found on the website https://projectlombok.org/downloads const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; download(lombokUrl) From 907578a8df8bc3f1e054822a0b384e0bd0ee7f28 Mon Sep 17 00:00:00 2001 From: Gayan Perera Date: Fri, 22 Jul 2022 15:44:16 +0200 Subject: [PATCH 543/708] Support viewing inherited members through QuickPick UI. - The QuickPick view API is used to show the document outline with inherited symbols using the new language server extension method, 'java/extendedDocumentSymbol'. - When ctrl+o is activated from the quick-pick menu (eg. the outline view is already active), the extended outline is then activated Co-Authored-by: Gayan Perera Co-Authored-by: Roland Grunberg --- package.json | 11 +++- package.nls.json | 3 +- src/commands.ts | 5 ++ src/outline/extendedOutlineQuickPick.ts | 81 +++++++++++++++++++++++++ src/outline/protocol.ts | 10 +++ src/standardLanguageClient.ts | 14 ++++- src/themeUtils.ts | 20 ++++++ src/typeHierarchy/model.ts | 16 +---- 8 files changed, 143 insertions(+), 17 deletions(-) create mode 100644 src/outline/extendedOutlineQuickPick.ts create mode 100644 src/outline/protocol.ts create mode 100644 src/themeUtils.ts diff --git a/package.json b/package.json index a68bac872..d44eacdac 100644 --- a/package.json +++ b/package.json @@ -1727,7 +1727,11 @@ }, { "command": "java.change.searchScope", - "title": "%java.change.searchScope%", + "title": "%java.change.searchScope%" + }, + { + "command": "java.action.showExtendedOutline", + "title": "%java.action.showExtendedOutline%", "category": "Java" } ], @@ -1757,6 +1761,11 @@ "command": "java.action.doCleanup", "key": "ctrl+shift+alt+s", "when": "javaLSReady && editorLangId == java" + }, + { + "command": "java.action.showExtendedOutline", + "key": "ctrl+o", + "when": "javaLSReady && inQuickOpen" } ], "menus": { diff --git a/package.nls.json b/package.nls.json index 76585572b..33307fcaa 100644 --- a/package.nls.json +++ b/package.nls.json @@ -28,5 +28,6 @@ "java.edit.smartSemicolonDetection": "Java Smart Semicolon Detection", "java.action.filesExplorerPasteAction": "Paste Clipboard Text Into a File", "java.action.doCleanup": "Performs Cleanup Actions", - "java.change.searchScope": "Change Search Scope" + "java.change.searchScope": "Change Search Scope", + "java.action.showExtendedOutline": "Open Extended Outline" } diff --git a/src/commands.ts b/src/commands.ts index 4e9a9b123..3466633f7 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -361,6 +361,11 @@ export namespace Commands { */ export const CHANGE_JAVA_SEARCH_SCOPE = "java.change.searchScope"; + /** + * Show Extended Outline for current document. + */ + export const SHOW_EXTEND_OUTLINE = 'java.action.showExtendedOutline'; + } /** diff --git a/src/outline/extendedOutlineQuickPick.ts b/src/outline/extendedOutlineQuickPick.ts new file mode 100644 index 000000000..794fa2506 --- /dev/null +++ b/src/outline/extendedOutlineQuickPick.ts @@ -0,0 +1,81 @@ +import { DocumentSymbolParams, LanguageClient, TextDocumentIdentifier } from "vscode-languageclient/node"; +import { getActiveLanguageClient } from "../extension"; +import { ExtendedDocumentSymbolRequest } from "./protocol"; +import { Location, Position, QuickPick, QuickPickItem, Uri, window, workspace } from "vscode"; +import { getLThemeIcon } from "../themeUtils"; + +export class ExtendedOutlineQuickPick { + private api: QuickPick; + private client: LanguageClient; + public initialized: boolean; + + constructor() { + this.initialized = false; + } + + async initialize() { + this.api = window.createQuickPick(); + this.api.ignoreFocusOut = true; + this.api.onDidChangeActive((items: QuickPickItem[]) => { + if (items.length > 0) { + const active: QuickPickItem = items[0]; + const uri = active["uri"]; + const range = active["range"]; + if (uri !== undefined) { + workspace.openTextDocument(Uri.parse(uri)).then(doc => { + window.showTextDocument(doc, {preserveFocus: true, selection: range}); + }); + } else { + window.showTextDocument(window.activeTextEditor.document, {preserveFocus: true, selection: range}); + } + } + }); + this.api.onDidAccept(() => { + this.api.hide(); + }); + this.client = await getActiveLanguageClient(); + this.initialized = true; + } + + async open(uri: Uri) { + if (!this.initialized) { + await this.initialize(); + } + + if (!this.api) { + return; + } + + const location = new Location(uri, new Position(0, 0)); + const params: DocumentSymbolParams = { + textDocument: TextDocumentIdentifier.create(location.uri.toString()) + }; + const symbols = await this.client.sendRequest(ExtendedDocumentSymbolRequest.type, params); + let quickPickItems: QuickPickItem[] = []; + for (const s of symbols) { + const icon = getLThemeIcon(s.kind).id; + const item = { + label: `$(${icon}) ${s.name}`, + description: s.detail.trim(), + uri: s.uri, + range: s.range + }; + quickPickItems.push(item); + if (icon === 'symbol-class') { + const items: QuickPickItem[] = s.children.map(s => ({ + label: `$(${getLThemeIcon(s.kind).id}) ${s.name}`, + // custom quick pick has automatic space between label & description + description: s.detail.trim(), + uri: s.uri, + range: s.range + })); + quickPickItems = quickPickItems.concat(items); + } + } + this.api.items = quickPickItems; + this.api.activeItems = []; + this.api.show(); + } +} + +export const extendedOutlineQuickPick: ExtendedOutlineQuickPick = new ExtendedOutlineQuickPick(); diff --git a/src/outline/protocol.ts b/src/outline/protocol.ts new file mode 100644 index 000000000..ffba1508a --- /dev/null +++ b/src/outline/protocol.ts @@ -0,0 +1,10 @@ +import { DocumentSymbol, DocumentSymbolParams, RequestType } from "vscode-languageclient"; + +export namespace ExtendedDocumentSymbolRequest { + export const type = new RequestType('java/extendedDocumentSymbol'); +} + +export interface ExtendedDocumentSymbol extends DocumentSymbol { + uri: string; + children?: ExtendedDocumentSymbol[]; +} \ No newline at end of file diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 5d65e9f59..2eaed4fbd 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -41,6 +41,7 @@ import { registerDocumentValidationListener } from './diagnostic'; import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; import { ClientCodeActionProvider } from './clientCodeActionProvider'; import { BuildFileSelector } from './buildFilesSelector'; +import { extendedOutlineQuickPick } from "./outline/extendedOutlineQuickPick"; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -593,6 +594,17 @@ export class StandardLanguageClient { } })); + context.subscriptions.push(commands.registerCommand(Commands.SHOW_EXTEND_OUTLINE, (location: any) => { + if (location instanceof Uri) { + extendedOutlineQuickPick.open(location); + } else { + if (window.activeTextEditor?.document?.languageId !== "java") { + return; + } + extendedOutlineQuickPick.open(window.activeTextEditor.document.uri); + } + })); + buildPath.registerCommands(context); sourceAction.registerCommands(this.languageClient, context); refactorAction.registerCommands(this.languageClient, context); @@ -897,4 +909,4 @@ export class DisableWillRenameFeature implements StaticFeature { fillInitializeParams?: () => void; preInitialize?: () => void; initialize(): void {} -} \ No newline at end of file +} diff --git a/src/themeUtils.ts b/src/themeUtils.ts new file mode 100644 index 000000000..a4634e7eb --- /dev/null +++ b/src/themeUtils.ts @@ -0,0 +1,20 @@ +import { SymbolKind as VSymbolKind, ThemeIcon } from "vscode"; +import { SymbolKind as LSymbolKind} from "vscode-languageclient"; + +const themeIconIds = [ + 'symbol-file', 'symbol-module', 'symbol-namespace', 'symbol-package', 'symbol-class', 'symbol-method', + 'symbol-property', 'symbol-field', 'symbol-constructor', 'symbol-enum', 'symbol-interface', + 'symbol-function', 'symbol-variable', 'symbol-constant', 'symbol-string', 'symbol-number', 'symbol-boolean', + 'symbol-array', 'symbol-object', 'symbol-key', 'symbol-null', 'symbol-enum-member', 'symbol-struct', + 'symbol-event', 'symbol-operator', 'symbol-type-parameter' +]; + +export function getLThemeIcon(kind: LSymbolKind): ThemeIcon | undefined { + const id = themeIconIds[kind - 1]; + return id ? new ThemeIcon(id) : undefined; +} + +export function getThemeIcon(kind: VSymbolKind): ThemeIcon | undefined { + const id = themeIconIds[kind]; + return id ? new ThemeIcon(id) : undefined; +} \ No newline at end of file diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index 5161de54d..089fc130e 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -5,6 +5,7 @@ import { getActiveLanguageClient } from "../extension"; import { LanguageClient } from "vscode-languageclient/node"; import { getRootItem, resolveTypeHierarchy, typeHierarchyDirectionToContextString } from "./util"; import { CancellationToken, commands, workspace } from "vscode"; +import { getThemeIcon } from "../themeUtils"; export class TypeHierarchyTreeInput implements SymbolTreeInput { readonly contextValue: string = "javaTypeHierarchy"; @@ -124,7 +125,7 @@ class TypeHierarchyTreeDataProvider implements vscode.TreeDataProvider Date: Fri, 14 Feb 2025 00:11:37 -0500 Subject: [PATCH 544/708] Add 'useSwitchForInstanceofPattern' to the cleanup settings. Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 41 ++++++++++++++++++++++++ package.json | 3 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 09841c622..61377ebdd 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -432,3 +432,44 @@ switch (r) { case R _ -> {} } ``` + +### `useSwitchForInstanceofPattern` + +Convert if/else chains to pattern matching switch statements. + +For example: + +```java +int i, j; +double d; +boolean b; +if (x instanceof Integer xint) { + i = xint.intValue(); +} else if (x instanceof Double xdouble) { + d = xdouble.doubleValue(); +} else if (x instanceof Boolean xboolean) { + b = xboolean.booleanValue(); +} else { + i = 0; + d = 0.0D; + b = false; +} +``` + +becomes: + +```java +int i, j; +double d; +boolean b; +switch (x) { + case Integer xint -> i = xint.intValue(); + case Double xdouble -> d = xdouble.doubleValue(); + case Boolean xboolean -> b = xboolean.booleanValue(); + case null, default -> { + i = 0; + d = 0.0D; + b = false; + } +} +``` diff --git a/package.json b/package.json index d44eacdac..2faa6f00c 100644 --- a/package.json +++ b/package.json @@ -1314,7 +1314,8 @@ "tryWithResource", "renameFileToType", "organizeImports", - "renameUnusedLocalVariables" + "renameUnusedLocalVariables", + "useSwitchForInstanceofPattern" ] }, "default": [ From 12993d9dce0bd256e404cbf9822356ae35a702dd Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 26 Feb 2025 17:26:38 -0500 Subject: [PATCH 545/708] Changelog for 1.40.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index bdb07221f..cea22d8b1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 1.40.0 (February 27nd, 2025) + * enhancement - Support for inherited document symbols. See [#2342](https://github.com/redhat-developer/vscode-java/issues/2342). + * enhancement - Introduce approximately 15 new quick fixes. See [JLS#3368](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3368), [JLS#3372](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3372). + * enhancement - Introduce quick assist & cleanup converting a pattern-instanceof-if-chain to a switch statement. See [#3951](https://github.com/redhat-developer/vscode-java/pull/3951). + * bug fix - Unicode characters not rendering correctly in decompiled file. See [#3949](https://github.com/redhat-developer/vscode-java/issues/3949). + * bug fix - Fix a potential deadlock in search-based functionality. See [#3926](https://github.com/redhat-developer/vscode-java/issues/3926). + * bug fix - Adopt the Lombok 1.18.36 release. See [#3939](https://github.com/redhat-developer/vscode-java/pull/3939). + ## 1.39.0 (January 22nd, 2025) * performance - Enhance initialization of gradle projects. See [JLS#3357](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3357). * enhancement - Implementation code lens for non interface/abstract base types/methods. See [JLS#3355](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3355). From 3140de08c6d1351a4a74e406c8d3dce059753b41 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Feb 2025 11:28:05 -0500 Subject: [PATCH 546/708] Upversion to 1.41.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1281bb660..697554c83 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.40.0", + "version": "1.41.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.40.0", + "version": "1.41.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 2faa6f00c..2e4572eee 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.40.0", + "version": "1.41.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 7ae6da63e0c32c1e6ff8e774232551851ae5ae2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 19:59:14 +0000 Subject: [PATCH 547/708] Bump serialize-javascript and mocha Bumps [serialize-javascript](https://github.com/yahoo/serialize-javascript) to 6.0.2 and updates ancestor dependency [mocha](https://github.com/mochajs/mocha). These dependencies need to be updated together. Updates `serialize-javascript` from 6.0.0 to 6.0.2 - [Release notes](https://github.com/yahoo/serialize-javascript/releases) - [Commits](https://github.com/yahoo/serialize-javascript/compare/v6.0.0...v6.0.2) Updates `mocha` from 9.2.2 to 11.1.0 - [Release notes](https://github.com/mochajs/mocha/releases) - [Changelog](https://github.com/mochajs/mocha/blob/main/CHANGELOG.md) - [Commits](https://github.com/mochajs/mocha/compare/v9.2.2...v11.1.0) --- updated-dependencies: - dependency-name: serialize-javascript dependency-type: indirect - dependency-name: mocha dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 838 ++++++++++++++++++++++++++++------------------ package.json | 2 +- 2 files changed, 508 insertions(+), 332 deletions(-) diff --git a/package-lock.json b/package-lock.json index 697554c83..df40079e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", "minimist": ">=1.2.6", - "mocha": "^9.2.2", + "mocha": "^11.1.0", "request": "^2.88.2", "sinon": "^14.0.0", "style-loader": "^3.3.1", @@ -104,29 +104,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@eslint/eslintrc/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@gulpjs/messages": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", @@ -162,34 +139,114 @@ "node": ">=10.10.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.1.2" + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" }, "engines": { - "node": ">=6.0" + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@humanwhocodes/config-array/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", @@ -344,6 +401,17 @@ "node": ">= 8" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@redhat-developer/vscode-extension-proposals": { "version": "0.0.23", "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-extension-proposals/-/vscode-extension-proposals-0.0.23.tgz", @@ -801,29 +869,6 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -866,29 +911,6 @@ } } }, - "node_modules/@typescript-eslint/parser/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/scope-manager": { "version": "5.18.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", @@ -932,29 +954,6 @@ } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -1010,29 +1009,6 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { "version": "3.21.0", "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", @@ -1089,12 +1065,6 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/promise-all-settled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@ungap/promise-all-settled/-/promise-all-settled-1.1.2.tgz", - "integrity": "sha512-sL/cEvJWAnClXw0wHk85/2L0G6Sj8UB0Ctc1TEMbKSsmpRosqhwj9gWgFRZSrBr2f9tiXISwNhCPmlfqUqyb9Q==", - "dev": true - }, "node_modules/@vscode/codicons": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz", @@ -1127,23 +1097,6 @@ "node": ">= 6.0.0" } }, - "node_modules/@vscode/test-electron/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/@vscode/test-electron/node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -1171,12 +1124,6 @@ "node": ">= 6" } }, - "node_modules/@vscode/test-electron/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/@vscode/webview-ui-toolkit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", @@ -2286,6 +2233,24 @@ "node": "*" } }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decompress": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", @@ -2435,10 +2400,11 @@ } }, "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -2590,6 +2556,13 @@ "node": ">=0.10.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2986,23 +2959,6 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "node_modules/eslint/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -3037,12 +2993,6 @@ "node": ">=4.0" } }, - "node_modules/eslint/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/eslint/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -3521,6 +3471,36 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/forever-agent": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", @@ -3813,15 +3793,6 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" }, - "node_modules/growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true, - "engines": { - "node": ">=4.x" - } - }, "node_modules/gulp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", @@ -4580,6 +4551,22 @@ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", "dev": true }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/jdk-utils": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.1.tgz", @@ -5060,11 +5047,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/logform/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, "node_modules/loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", @@ -5214,81 +5196,97 @@ "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mocha": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-9.2.2.tgz", - "integrity": "sha512-L6XC3EdwT6YrIk0yXpavvLkn8h+EU+Y5UcCHKECyMbdUIxyMuZj4bX4U9e1nvnvUUvQVsV2VHQr5zLdcUkhW/g==", - "dev": true, - "dependencies": { - "@ungap/promise-all-settled": "1.1.2", - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.3", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "4.2.1", - "ms": "2.1.3", - "nanoid": "3.3.1", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "which": "2.0.2", - "workerpool": "6.2.0", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-11.1.0.tgz", + "integrity": "sha512-8uJR5RTC2NgpY3GrYcgpZrsEd9zKbPDpob1RezyR2upGHRQtHWofmzTMzTMSV6dru3tj5Ukt0+Vnq1qhFEEwAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" }, "bin": { "_mocha": "bin/_mocha", - "mocha": "bin/mocha" + "mocha": "bin/mocha.js" }, "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/mocha/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "node_modules/mocha/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mocha/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/mocha/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { - "ms": "2.1.2" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "node_modules/mocha/node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, "node_modules/mocha/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -5318,54 +5316,67 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" }, - "engines": { - "node": "*" + "bin": { + "glob": "dist/esm/bin.mjs" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/mocha/node_modules/minimatch": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-4.2.1.tgz", - "integrity": "sha512-9Uq1ChtSZO+Mxa/CL1eGizn2vRn3MlLgzhT0Iz8zaY8NdvxvB0d5QdPFmCKf7JKA9Lerx5vRrnwO03jsSfGG9g==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.1" }, "engines": { "node": ">=10" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true + "node_modules/mocha/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", @@ -5382,13 +5393,33 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/mocha/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, "node_modules/mocha/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/moment": { @@ -5399,6 +5430,12 @@ "node": "*" } }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, "node_modules/multipipe": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", @@ -5417,18 +5454,6 @@ "node": ">= 10.13.0" } }, - "node_modules/nanoid": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.1.tgz", - "integrity": "sha512-n6Vs/3KGyxPQd6uO0eH4Bv0ojGSUvuLlIHtC3Y0kEO23YRge8H9x1GCzLn28YX0H66pMkxuaeESFq4tKISKwdw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5667,6 +5692,13 @@ "node": ">=6" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -5769,6 +5801,30 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/path-to-regexp": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", @@ -6458,10 +6514,11 @@ } }, "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } @@ -6540,15 +6597,6 @@ "url": "https://opencollective.com/sinon" } }, - "node_modules/sinon/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/sinon/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -6691,6 +6739,45 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -6724,6 +6811,30 @@ "node": ">=0.10.0" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/strip-dirs": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", @@ -6902,15 +7013,6 @@ } } }, - "node_modules/terser-webpack-plugin/node_modules/serialize-javascript": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", - "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, "node_modules/text-decoder": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", @@ -7851,11 +7953,6 @@ "triple-beam": "^1.3.0" } }, - "node_modules/winston-daily-rotate-file/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, "node_modules/winston-daily-rotate-file/node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -7917,10 +8014,11 @@ } }, "node_modules/workerpool": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.0.tgz", - "integrity": "sha512-Rsk5qQHJ9eowMH28Jwhe8HEbmdYDX4lwoMWshiCXugjtHqMD9ZbiqSDLxcsfdqsETPzVUtX5s1Z5kStiIM6l4A==", - "dev": true + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -7939,6 +8037,84 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", diff --git a/package.json b/package.json index 2e4572eee..b24cc91d3 100644 --- a/package.json +++ b/package.json @@ -1961,7 +1961,7 @@ "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", "minimist": ">=1.2.6", - "mocha": "^9.2.2", + "mocha": "^11.1.0", "request": "^2.88.2", "sinon": "^14.0.0", "style-loader": "^3.3.1", From fc4b216ddd1dc8dd98266bf0e8f4c2dc5a56bb21 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 4 Mar 2025 08:45:10 -0500 Subject: [PATCH 548/708] Fix commands test by including new commands. Signed-off-by: Roland Grunberg --- test/standard-mode-suite/extension.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 1ed8f4c71..54df60897 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -55,6 +55,7 @@ suite('Java Language Extension - Standard', () => { Commands.COMPILE_WORKSPACE, Commands.CONFIGURATION_UPDATE, "java.action.configureFavoriteStaticMembers", + Commands.MANUAL_CLEANUP, Commands.CREATE_MODULE_INFO, Commands.CREATE_MODULE_INFO_COMMAND, Commands.EXECUTE_WORKSPACE_COMMAND, @@ -63,7 +64,11 @@ suite('Java Language Extension - Standard', () => { Commands.GENERATE_DELEGATE_METHODS_PROMPT, Commands.GENERATE_TOSTRING_PROMPT, Commands.GET_CLASSPATHS, + "java.project.updateClassPaths", + "java.project.updateJdk", + "java.vm.getAllInstalls", Commands.GET_PROJECT_SETTINGS, + "java.project.updateSettings", Commands.GET_ALL_JAVA_PROJECTS, Commands.HANDLE_PASTE_EVENT, Commands.HASHCODE_EQUALS_PROMPT, @@ -71,6 +76,7 @@ suite('Java Language Extension - Standard', () => { Commands.IGNORE_INCOMPLETE_CLASSPATH_HELP, Commands.IMPORT_PROJECTS, Commands.IMPORT_PROJECTS_CMD, + Commands.CHANGE_IMPORTED_PROJECTS, Commands.IS_TEST_FILE, Commands.LIST_SOURCEPATHS, Commands.LIST_SOURCEPATHS_CMD, @@ -112,6 +118,7 @@ suite('Java Language Extension - Standard', () => { Commands.SHOW_SUBTYPE_HIERARCHY, Commands.SHOW_SUPERTYPE_HIERARCHY, Commands.SHOW_CLASS_HIERARCHY, + Commands.SHOW_EXTEND_OUTLINE, Commands.UPGRADE_GRADLE_WRAPPER, Commands.UPGRADE_GRADLE_WRAPPER_CMD, Commands.UPDATE_SOURCE_ATTACHMENT, From b5b35754872d1cd4392e0eb3c45d2e8793d8c142 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 4 Mar 2025 12:19:44 -0500 Subject: [PATCH 549/708] Update css-loader & sinon (#3967) - Update css-loader 6.7.3 -> 6.11.0. - Update sinon 14.0.0 -> 14.0.2. Signed-off-by: Roland Grunberg --- package-lock.json | 210 ++++++++++++++++++++++++++-------------------- 1 file changed, 119 insertions(+), 91 deletions(-) diff --git a/package-lock.json b/package-lock.json index df40079e9..0d95bc558 100644 --- a/package-lock.json +++ b/package-lock.json @@ -640,9 +640,9 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" }, "node_modules/@sinonjs/commons": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", - "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", + "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", "dev": true, "dependencies": { "type-detect": "4.0.8" @@ -657,21 +657,30 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz", + "integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, "node_modules/@sinonjs/samsam": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-6.1.1.tgz", - "integrity": "sha512-cZ7rKJTLiE7u7Wi/v9Hc2fs3Ucc3jrWeMgPHbbTCeVAB2S0wOBbYlkJVeNSL04i7fdhT8wIbDq1zhC/PXTD2SA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-7.0.1.tgz", + "integrity": "sha512-zsAk2Jkiq89mhZovB2LLOdTCxJF4hqqTToGP0ASWlhp4I1hqOjcfmZGafXntCN7MDC6yySH0mFHrYtHceOeLmw==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.6.0", + "@sinonjs/commons": "^2.0.0", "lodash.get": "^4.4.2", "type-detect": "^4.0.8" } }, "node_modules/@sinonjs/text-encoding": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", - "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", + "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, "node_modules/@tootallnate/once": { @@ -2154,19 +2163,19 @@ } }, "node_modules/css-loader": { - "version": "6.7.3", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.7.3.tgz", - "integrity": "sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", "dev": true, "dependencies": { "icss-utils": "^5.1.0", - "postcss": "^8.4.19", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", "postcss-modules-values": "^4.0.0", "postcss-value-parser": "^4.2.0", - "semver": "^7.3.8" + "semver": "^7.5.4" }, "engines": { "node": ">= 12.13.0" @@ -2176,7 +2185,16 @@ "url": "https://opencollective.com/webpack" }, "peerDependencies": { + "@rspack/core": "0.x || 1.x", "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/css-loader/node_modules/semver": { @@ -4701,9 +4719,9 @@ } }, "node_modules/just-extend": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", - "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", + "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true }, "node_modules/kind-of": { @@ -4892,6 +4910,7 @@ "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==", + "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "dev": true }, "node_modules/lodash.isarguments": { @@ -5454,6 +5473,24 @@ "node": ">= 10.13.0" } }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5467,16 +5504,34 @@ "dev": true }, "node_modules/nise": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.1.tgz", - "integrity": "sha512-yr5kW2THW1AkxVmCnKEh4nbYkJdB3I7LUkiUgOvEkOp414mc2UMaHMA7pjq1nYowhdoJZGwEKGaQVbxfpWj10A==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/nise/-/nise-5.1.9.tgz", + "integrity": "sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": ">=5", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "11.3.1", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-11.3.1.tgz", + "integrity": "sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.1" } }, "node_modules/node-fetch": { @@ -5826,18 +5881,9 @@ "license": "ISC" }, "node_modules/path-to-regexp": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", - "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", - "dev": true, - "dependencies": { - "isarray": "0.0.1" - } - }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, "node_modules/pend": { @@ -5853,9 +5899,9 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, "node_modules/picomatch": { @@ -5979,9 +6025,9 @@ } }, "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -5998,18 +6044,18 @@ } ], "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", - "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", "dev": true, "engines": { "node": "^10 || ^12 || >= 14" @@ -6019,13 +6065,13 @@ } }, "node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", - "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", "dev": true, "dependencies": { "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", + "postcss-selector-parser": "^7.0.0", "postcss-value-parser": "^4.1.0" }, "engines": { @@ -6036,12 +6082,12 @@ } }, "node_modules/postcss-modules-scope": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", - "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", "dev": true, "dependencies": { - "postcss-selector-parser": "^6.0.4" + "postcss-selector-parser": "^7.0.0" }, "engines": { "node": "^10 || ^12 || >= 14" @@ -6066,9 +6112,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", - "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -6084,24 +6130,6 @@ "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", "dev": true }, - "node_modules/postcss/node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6579,17 +6607,17 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sinon": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.0.tgz", - "integrity": "sha512-ugA6BFmE+WrJdh0owRZHToLd32Uw3Lxq6E6LtNRU+xTVBefx632h03Q7apXWRsRdZAJ41LB8aUfn2+O4jsDNMw==", + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz", + "integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==", "deprecated": "16.1.1", "dev": true, "dependencies": { - "@sinonjs/commons": "^1.8.3", + "@sinonjs/commons": "^2.0.0", "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^6.1.1", + "@sinonjs/samsam": "^7.0.1", "diff": "^5.0.0", - "nise": "^5.1.1", + "nise": "^5.1.2", "supports-color": "^7.2.0" }, "funding": { @@ -6619,9 +6647,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, "engines": { "node": ">=0.10.0" From 4eeaf73c298bd02685e39c9276a058e2982ebd49 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 11 Mar 2025 09:35:54 -0400 Subject: [PATCH 550/708] Fix inherited document symbols to collect interfaces as well. - Also fix typo in CHANGELOG Signed-off-by: Roland Grunberg --- CHANGELOG.md | 2 +- src/outline/extendedOutlineQuickPick.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cea22d8b1..9551997a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.40.0 (February 27nd, 2025) +## 1.40.0 (February 27th, 2025) * enhancement - Support for inherited document symbols. See [#2342](https://github.com/redhat-developer/vscode-java/issues/2342). * enhancement - Introduce approximately 15 new quick fixes. See [JLS#3368](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3368), [JLS#3372](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3372). * enhancement - Introduce quick assist & cleanup converting a pattern-instanceof-if-chain to a switch statement. See [#3951](https://github.com/redhat-developer/vscode-java/pull/3951). diff --git a/src/outline/extendedOutlineQuickPick.ts b/src/outline/extendedOutlineQuickPick.ts index 794fa2506..79c4e2b40 100644 --- a/src/outline/extendedOutlineQuickPick.ts +++ b/src/outline/extendedOutlineQuickPick.ts @@ -61,7 +61,7 @@ export class ExtendedOutlineQuickPick { range: s.range }; quickPickItems.push(item); - if (icon === 'symbol-class') { + if (icon === 'symbol-class' || icon === 'symbol-interface') { const items: QuickPickItem[] = s.children.map(s => ({ label: `$(${getLThemeIcon(s.kind).id}) ${s.name}`, // custom quick pick has automatic space between label & description From f970c5c841302932ff242651fba68b44721b03c4 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 10 Mar 2025 16:58:33 -0400 Subject: [PATCH 551/708] Fix indentation for snippet strings within code actions. - Language server (JDT-LS) handles appropriate indentation so indicate to client that whitespace is to be preserved Signed-off-by: Roland Grunberg --- src/extension.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 6a139d8d0..6d2601371 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,7 +6,7 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; +import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; @@ -318,7 +318,11 @@ export async function activate(context: ExtensionContext): Promise for (const edit of docChange.edits) { if ("snippet" in edit) { documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); - snippetEdits.push(new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value))); + const snippet = new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value)); + if (semver.gte(version, '1.98.0')) { + snippet["keepWhitespace"] = true; + } + snippetEdits.push(snippet); } } } From 6bba969b763731b1e195ae181f85b40731f72e2b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 11 Mar 2025 16:16:33 -0400 Subject: [PATCH 552/708] Guard against a null completion item resolved on cancellation. - A cancelled completion item resolve request returns as null Signed-off-by: Roland Grunberg --- src/extension.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 6d2601371..21d659d52 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -248,7 +248,7 @@ export async function activate(context: ExtensionContext): Promise }, resolveCompletionItem: async (item, token, next): Promise => { const completionItem = await next(item, token); - if (completionItem.documentation instanceof MarkdownString) { + if (completionItem?.documentation instanceof MarkdownString) { completionItem.documentation = fixJdtLinksInDocumentation(completionItem.documentation); } return completionItem; From 33d9902b7df2af7a11cc4afc40515afa9ed166d3 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 21 Mar 2025 09:36:19 -0400 Subject: [PATCH 553/708] Fix check_and_update_jdk script by catching missing test URL. Signed-off-by: Roland Grunberg --- .github/scripts/check_and_update_jdk.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/scripts/check_and_update_jdk.py b/.github/scripts/check_and_update_jdk.py index 3f21bc1fe..ff6671859 100644 --- a/.github/scripts/check_and_update_jdk.py +++ b/.github/scripts/check_and_update_jdk.py @@ -40,6 +40,10 @@ all_tests_passed = True for i in range(len(tests)): response = requests.get(tests[i]) + if not response.ok: + print(f'Test #{i + 1} not found ({tests[i]})') + all_tests_passed = False + break data = ast.literal_eval(response.text) # Use ast.literal_eval, because response.json() fails try: if data['status'] != 'PASSED': From cd32506f74908107c4e961ea29672fe15bc3d405 Mon Sep 17 00:00:00 2001 From: redhattools-bot Date: Sat, 22 Mar 2025 10:06:03 +0000 Subject: [PATCH 554/708] Bump JDK to 24 --- README.md | 6 +++--- package.json | 5 +++-- src/requirements.ts | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f15e3c239..de33b5156 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.8 to Java 23 +* Supports code from Java 1.8 to Java 24 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-23", - "path": "/path/to/jdk-23", + "name": "JavaSE-24", + "path": "/path/to/jdk-24", "default": true }, ] diff --git a/package.json b/package.json index b24cc91d3..a617340d4 100644 --- a/package.json +++ b/package.json @@ -934,7 +934,8 @@ "JavaSE-20", "JavaSE-21", "JavaSE-22", - "JavaSE-23" + "JavaSE-23", + "JavaSE-24" ], "description": "Java Execution Environment name. Must be unique." }, @@ -1995,4 +1996,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file diff --git a/src/requirements.ts b/src/requirements.ts index 717e5e062..00bdfabb2 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -41,7 +41,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise Date: Tue, 25 Mar 2025 16:45:39 -0400 Subject: [PATCH 555/708] Changelog for 1.41.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 17 +++++++++++++++++ README.md | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9551997a7..bf3f9a6ce 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Change Log +## 1.41.0 (March 27th, 2025) + * enhancement - Provide support for Java 24. See [#3983](https://github.com/redhat-developer/vscode-java/pull/3983). + * enhancement - Add `Make static` refactoring. See [JLS#3400](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3400). + * enhancement - Adopt quick fixes for some more problems. See [JLS#3398](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3398). + - `MethodButWithConstructorName`, `UsingDeprecatedMethod`, + - `VarIsNotAllowedHere`, `SwitchExpressionsReturnWithinSwitchExpression` + * enhancement - Code action to ignore configurable compiler problems. See [#1791](https://github.com/redhat-developer/vscode-java/issues/1791). + * bug fix - Fix indentation for snippet strings within code actions. See [#3970](https://github.com/redhat-developer/vscode-java/pull/3970). + * bug fix - Only rename source file to match the single public type declaration. See [#3963](https://github.com/redhat-developer/vscode-java/issues/3963). + * bug fix - Fix inherited document symbols to work for interfaces as well. See [#3972](https://github.com/redhat-developer/vscode-java/pull/3972). + * bug fix - Detect changes to watched files that are outside of the workspace. [JLS#1765](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/1765), [JLS#3407](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3407). + * bug fix - Guard against `null` workspace edits (eg. for `Organize Imports`). See [#3978](https://github.com/redhat-developer/vscode-java/issues/3978). + * bug fix - Guard against `null` completion item resolved on cancellation. See [#3973](https://github.com/redhat-developer/vscode-java/pull/3973). + * bug fix - Fix commands test by including new commands. See [#3966](https://github.com/redhat-developer/vscode-java/pull/3966). + * build - Fix `check_and_update_jdk` script by catching missing test URL. See [#3982](https://github.com/redhat-developer/vscode-java/pull/3982). + * dependencies - Update serialize-javascript, mocha, sinon, css-loader. See [#3948](https://github.com/redhat-developer/vscode-java/pull/3948), [#3967](https://github.com/redhat-developer/vscode-java/pull/3967). + ## 1.40.0 (February 27th, 2025) * enhancement - Support for inherited document symbols. See [#2342](https://github.com/redhat-developer/vscode-java/issues/2342). * enhancement - Introduce approximately 15 new quick fixes. See [JLS#3368](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3368), [JLS#3372](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3372). diff --git a/README.md b/README.md index de33b5156..f3b2c6fa8 100644 --- a/README.md +++ b/README.md @@ -253,7 +253,7 @@ The following settings are supported: - Find Reference - Call Hierarchy - Workspace Symbols -* `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23. Defaults to `off`. +* `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 24. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` From 405466aff329b43edb0b8e6ccde79e307c2f3fe1 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 27 Mar 2025 08:50:14 -0400 Subject: [PATCH 556/708] Upversion to 1.42.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0d95bc558..00a4dc89b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.41.0", + "version": "1.42.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.41.0", + "version": "1.42.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index a617340d4..819273ff4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.41.0", + "version": "1.42.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -1996,4 +1996,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 99ca4b4cfc1d101c7999608370edc684d8484430 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 3 Aug 2022 11:46:34 -0400 Subject: [PATCH 557/708] Rename default branch to 'main'. Signed-off-by: Roland Grunberg --- .github/scripts/check_and_update_jdk.py | 2 +- .github/workflows/conflictDetector.yaml | 4 ++-- CONTRIBUTING.md | 2 +- README.md | 8 ++++---- src/typeHierarchy/model.ts | 4 ++-- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/scripts/check_and_update_jdk.py b/.github/scripts/check_and_update_jdk.py index ff6671859..a297dc1cd 100644 --- a/.github/scripts/check_and_update_jdk.py +++ b/.github/scripts/check_and_update_jdk.py @@ -30,7 +30,7 @@ if latest_jdk != current_jdk: print(f'New JDK version detected: {latest_jdk}') # Create a formatted string template from the URI structure - uri_base = 'https://ci.eclipse.org/ls/job/jdt-ls-master/lastCompletedBuild/testReport/org.eclipse.jdt.ls.core.internal.{package}/{java_class}/{method}/api/python' + uri_base = 'https://ci.eclipse.org/ls/job/jdt-ls-main/lastCompletedBuild/testReport/org.eclipse.jdt.ls.core.internal.{package}/{java_class}/{method}/api/python' # Define the test URLs to check using the template and list comprehension tests = [ uri_base.format(package='managers', java_class=c, method=m) for c, m in [('EclipseProjectImporterTest', 'testPreviewFeaturesDisabledByDefault'), ('InvisibleProjectImporterTest', 'testPreviewFeaturesEnabledByDefault'), ('MavenProjectImporterTest', f'testJava{latest_jdk}Project')] diff --git a/.github/workflows/conflictDetector.yaml b/.github/workflows/conflictDetector.yaml index 54df14e05..15a95fd88 100644 --- a/.github/workflows/conflictDetector.yaml +++ b/.github/workflows/conflictDetector.yaml @@ -1,7 +1,7 @@ on: push: branches: - - master + - main jobs: triage: runs-on: ubuntu-latest @@ -9,4 +9,4 @@ jobs: - uses: mschilde/auto-label-merge-conflicts@8c6faa8a252e35ba5e15703b3d747bf726cdb95c with: CONFLICT_LABEL_NAME: "has conflicts" - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 29ab311c9..9a5782c9d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -198,7 +198,7 @@ You can create a binary that you can sideload to your VS Code installation. $ npm install ``` 4. Optionally, follow the instruction to build the server. -5. See documentation on [extension installation](https://github.com/microsoft/vscode-docs/blob/master/api/working-with-extensions/publishing-extension.md) +5. See documentation on [extension installation](https://github.com/microsoft/vscode-docs/blob/main/api/working-with-extensions/publishing-extension.md) on ways to sideload or share. # Reporting issues diff --git a/README.md b/README.md index f3b2c6fa8..62a167dab 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,8 @@ Language support for Java ™ for Visual Studio Code [![Visual Studio Marketplace](https://img.shields.io/visual-studio-marketplace/v/redhat.java?style=for-the-badge&label=VS%20Marketplace&logo=visual-studio-code)](https://marketplace.visualstudio.com/items?itemName=redhat.java) [![Installs](https://img.shields.io/visual-studio-marketplace/i/redhat.java?style=for-the-badge)](https://marketplace.visualstudio.com/items?itemName=redhat.java) [![Join the chat at https://gitter.im/redhat-developer/vscode-java](https://img.shields.io/gitter/room/redhat-developer/vscode-java?style=for-the-badge&logo=gitter)](https://gitter.im/redhat-developer/vscode-java) -[![Build Status](https://img.shields.io/github/actions/workflow/status/redhat-developer/vscode-java/pr-verify.yml?branch=master&style=for-the-badge&logo=github)](https://github.com/redhat-developer/vscode-java/actions?query=workflow:pr-verify) -[![License](https://img.shields.io/github/license/redhat-developer/vscode-java?style=for-the-badge&logo=eclipse)](https://github.com/redhat-developer/vscode-java/blob/master/LICENSE) +[![Build Status](https://img.shields.io/github/actions/workflow/status/redhat-developer/vscode-java/pr-verify.yml?branch=main&style=for-the-badge&logo=github)](https://github.com/redhat-developer/vscode-java/actions?query=workflow:pr-verify) +[![License](https://img.shields.io/github/license/redhat-developer/vscode-java?style=for-the-badge&logo=eclipse)](https://github.com/redhat-developer/vscode-java/blob/main/LICENSE) Provides Java ™ language support via [Eclipse ™ JDT Language Server](https://github.com/eclipse/eclipse.jdt.ls), which utilizes @@ -22,7 +22,7 @@ If on another platform, or using the "universal" version, you can [set](#setting Features ========= -![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/vscode-java.0.0.1.gif) +![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/main/images/vscode-java.0.0.1.gif) * Supports code from Java 1.8 to Java 24 * Maven pom.xml project support @@ -267,7 +267,7 @@ Troubleshooting It should show ready (thumbs up) as on the image below. You can click on the status and open the language tool logs for further information in case of a failure. -![ status indicator ](https://raw.githubusercontent.com/redhat-developer/vscode-java/master/images/statusMarker.png) +![ status indicator ](https://raw.githubusercontent.com/redhat-developer/vscode-java/main/images/statusMarker.png) 2. Read the [troubleshooting guide](https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting) for collecting informations about issues you might encounter. diff --git a/src/typeHierarchy/model.ts b/src/typeHierarchy/model.ts index 089fc130e..2be703797 100644 --- a/src/typeHierarchy/model.ts +++ b/src/typeHierarchy/model.ts @@ -194,7 +194,7 @@ class TypeHierarchyTreeDataProvider implements vscode.TreeDataProvider Date: Tue, 1 Apr 2025 00:37:45 -0400 Subject: [PATCH 558/708] Changelog for 1.41.1 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 4 ++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index bf3f9a6ce..0adbc5dd1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Change Log +## 1.41.1 (April 1st, 2025) + * bug fix - Fix issues with preference manager by reverting "merge" behaviour. See [#3995](https://github.com/redhat-developer/vscode-java/issues/3995). + * bug fix - Add missing "Create record" quick fix. See [#3988](https://github.com/redhat-developer/vscode-java/issues/3988). + ## 1.41.0 (March 27th, 2025) * enhancement - Provide support for Java 24. See [#3983](https://github.com/redhat-developer/vscode-java/pull/3983). * enhancement - Add `Make static` refactoring. See [JLS#3400](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3400). diff --git a/package-lock.json b/package-lock.json index 00a4dc89b..f653dcf5d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.42.0", + "version": "1.41.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.42.0", + "version": "1.41.1", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 819273ff4..c3d7f1c23 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.42.0", + "version": "1.41.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 5f2d266cd7fe41dbe851b4ff7af283b66affe1d7 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 1 Apr 2025 14:18:40 -0400 Subject: [PATCH 559/708] Upversion back to 1.42.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f653dcf5d..00a4dc89b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.41.1", + "version": "1.42.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.41.1", + "version": "1.42.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index c3d7f1c23..819273ff4 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.41.1", + "version": "1.42.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 8e50fcb331324c7a26847b9fc1057905dc380e0c Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Wed, 23 Apr 2025 18:38:18 +0200 Subject: [PATCH 560/708] Update required Java for javac to 24 Signed-off-by: Snjezana Peco --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 819273ff4..06ad47e5b 100644 --- a/package.json +++ b/package.json @@ -416,7 +416,7 @@ "off" ], "default": "off", - "markdownDescription": "[Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 23", + "markdownDescription": "[Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 24", "scope": "window", "order": 95 }, From f4bceff8bde97f9920e1a2ae746495e91ad15ceb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 4 Apr 2025 11:12:46 -0400 Subject: [PATCH 561/708] Report language server exiting with unsaved changes as 'java.ls.error'. Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 2eaed4fbd..aebeee951 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -343,16 +343,22 @@ export class StandardLanguageClient { } else if (e.name === Telemetry.LS_ERROR) { const tags = []; const exception: string = e?.properties.exception; + const message: string = e?.properties.message; if (exception !== undefined) { if (exception.includes("dtree.ObjectNotFoundException")) { tags.push("dtree.ObjectNotFoundException"); } - - if (tags.length > 0) { - e.properties['tags'] = tags; - return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + } + if (message !== undefined) { + if (message.includes("workspace exited with unsaved changes")) { + tags.push("workspace-exited-unsaved-changes"); } } + + if (tags.length > 0) { + e.properties['tags'] = tags; + return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + } } }); From 98fc57ec17ed0c8904f8e0a84877d27e3a51b4c6 Mon Sep 17 00:00:00 2001 From: Luke Janssen <91230392+lukejans@users.noreply.github.com> Date: Sat, 12 Apr 2025 16:06:34 -0400 Subject: [PATCH 562/708] Fix return type typo in "qualifyMembers" example --- document/_java.learnMoreAboutCleanUps.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index 61377ebdd..d01052c60 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -16,7 +16,7 @@ For instance: ```java private int value; -public void getValue() { +public int getValue() { return value; } ``` @@ -26,7 +26,7 @@ becomes: ```java private int value; -public void getValue() { +public int getValue() { return this.value; } ``` From 3064ea33178255103888038ef37c8dd117fd3257 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 30 Apr 2025 14:09:24 -0400 Subject: [PATCH 563/708] Delete saved artifacts during release job. Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1bb6816d5..3070739dd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -188,3 +188,8 @@ jobs: ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + - name: Delete saved artifact + if: always() + uses: geekyeggo/delete-artifact@e46cfb9575865f907c2beb2e4170b5f4c7d77c52 + with: + name: vscode-java From 50526305114bac1986032c2af40dd1a1f8c4159b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Fri, 25 Apr 2025 10:21:55 -0400 Subject: [PATCH 564/708] Avoid notifying of failures for workspace builds. - Notifications of failure aren't shown for project builds - Also standardizes based on approach of other extensions that use similar functionality in their UI elements Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index aebeee951..9db7432c6 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -499,22 +499,22 @@ export class StandardLanguageClient { return window.withProgress({ location: ProgressLocation.Window }, async p => { p.report({ message: 'Rebuilding projects...' }); - return new Promise(async (resolve, reject) => { - const start = new Date().getTime(); + const start = new Date().getTime(); - let res: CompileWorkspaceStatus; - try { - res = token ? await this.languageClient.sendRequest(BuildProjectRequest.type, params, token) : - await this.languageClient.sendRequest(BuildProjectRequest.type, params); - } catch (error) { - if (error && error.code === -32800) { // Check if the request is cancelled. - res = CompileWorkspaceStatus.cancelled; - } - reject(error); + let res: CompileWorkspaceStatus; + try { + res = token ? await this.languageClient.sendRequest(BuildProjectRequest.type, params, token) : + await this.languageClient.sendRequest(BuildProjectRequest.type, params); + } catch (error) { + if (error && error.code === -32800) { // Check if the request is cancelled. + res = CompileWorkspaceStatus.cancelled; } + throw error; + } - const elapsed = new Date().getTime() - start; - const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; + const elapsed = new Date().getTime() - start; + const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; + return new Promise(async (resolve, reject) => { setTimeout(() => { // set a timeout so user would still see the message when build time is short resolve(res); }, humanVisibleDelay); @@ -546,11 +546,7 @@ export class StandardLanguageClient { const humanVisibleDelay = elapsed < 1000 ? 1000 : 0; return new Promise((resolve, reject) => { setTimeout(() => { // set a timeout so user would still see the message when build time is short - if (res === CompileWorkspaceStatus.succeed) { - resolve(res); - } else { - reject(res); - } + resolve(res); }, humanVisibleDelay); }); }); From caa1bc5094f2a00fef9bc49414e43d6c15053881 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 14 May 2025 10:02:15 -0400 Subject: [PATCH 565/708] Changelog for 1.42.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0adbc5dd1..25ff81fc0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.42.0 (May 15th, 2025) + * enhancement - Implement methods in newly created type from an inherited sealed class. See [JLS#1570](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/1570). + * enhancement - Code action for "The left-hand side of an assginment must be a variable". See [JLS#3441](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3441). + * bug fix - Avoid `StackOverflowError` when computing Extended Outline. See [JLS#3435](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3435). + * bug fix - Compilation failure with primitive array comparison. See [#4020](https://github.com/redhat-developer/vscode-java/issues/4020). + * bug fix - Avoid notifying of failures for workspace builds. See [#4032](https://github.com/redhat-developer/vscode-java/pull/4032). + * bug fix - Report language server exiting with unsaved changes as `java.ls.error`. See [#4033](https://github.com/redhat-developer/vscode-java/pull/4033). + * documentation - Javac-based (experimental) compilation should require latest released Java SDK (24). See [#4029](https://github.com/redhat-developer/vscode-java/issues/4029). + * documentation - Fix return type typo in `qualifyMembers` example. See [#4026](https://github.com/redhat-developer/vscode-java/pull/4026). + ## 1.41.1 (April 1st, 2025) * bug fix - Fix issues with preference manager by reverting "merge" behaviour. See [#3995](https://github.com/redhat-developer/vscode-java/issues/3995). * bug fix - Add missing "Create record" quick fix. See [#3988](https://github.com/redhat-developer/vscode-java/issues/3988). From 99c12574cf33c0bb74b8a84fb2915ac0a235cd70 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 15 May 2025 15:18:06 -0400 Subject: [PATCH 566/708] Upversion to 1.43.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 00a4dc89b..57cf8fb3f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.42.0", + "version": "1.43.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.42.0", + "version": "1.43.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 06ad47e5b..df36a02f9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.42.0", + "version": "1.43.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From e4aeb876c51bcb5048b27c82df7644189bf4287a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 8 May 2025 16:50:14 -0400 Subject: [PATCH 567/708] "Rebuild Projects" command should be done incrementally. Signed-off-by: Roland Grunberg --- src/standardLanguageClient.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 9db7432c6..bb0ca1335 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -494,7 +494,7 @@ export class StandardLanguageClient { })), // we can consider expose 'isFullBuild' according to users' feedback, // currently set it to true by default. - isFullBuild: isFullBuild === undefined ? true : isFullBuild, + isFullBuild: isFullBuild === undefined ? false : isFullBuild, }; return window.withProgress({ location: ProgressLocation.Window }, async p => { From e3c511b1e8a24cc6c29729ac69696f8be0c85bbf Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 17 Mar 2025 16:53:26 -0400 Subject: [PATCH 568/708] Support resolution of VS Code predefined variables in settings. Signed-off-by: Roland Grunberg --- package-lock.json | 6 ++++++ package.json | 3 ++- src/javaServerStarter.ts | 4 ++-- src/utils.ts | 10 ++++++++++ 4 files changed, 20 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 57cf8fb3f..f42120203 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,6 +24,7 @@ "react-dom": "^17.0.2", "semver": "^7.5.2", "vscode-languageclient": "8.2.0-next.3", + "vscode-variables": "^1.0.1", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", "winston-daily-rotate-file": "^4.7.1" @@ -7732,6 +7733,11 @@ "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.6-next.1.tgz", "integrity": "sha512-7xVc/xLtNhKuCKX0mINT6mFUrUuRz0EinhwPGT8Gtsv2hlo+xJb5NKbiGailcWa1/T5e4dr5Pb2MfGchHreHAA==" }, + "node_modules/vscode-variables": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vscode-variables/-/vscode-variables-1.0.1.tgz", + "integrity": "sha512-iZ1d08I30ktqv4mMszGz2Y2o53r+PBpF5tEnwf8NNzKoxeuo0thoaFRG98uJkNVhOtiDmH4HJ3KlqfjM6XIxbA==" + }, "node_modules/watchpack": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", diff --git a/package.json b/package.json index df36a02f9..943b291ce 100644 --- a/package.json +++ b/package.json @@ -1989,7 +1989,8 @@ "vscode-languageclient": "8.2.0-next.3", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", - "winston-daily-rotate-file": "^4.7.1" + "winston-daily-rotate-file": "^4.7.1", + "vscode-variables": "^1.0.1" }, "overrides": { "vscode-languageserver-protocol": "3.17.6-next.1" diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 7d0f3f267..19ebf744e 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -11,7 +11,7 @@ import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; -import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion } from './utils'; +import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion, getVSCodeVariablesMap } from './utils'; import { log } from 'console'; // eslint-disable-next-line no-var @@ -39,7 +39,7 @@ const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); - options.env = Object.assign({ syntaxserver : isSyntaxServer }, process.env); + options.env = Object.assign({ syntaxserver: isSyntaxServer }, process.env, getVSCodeVariablesMap()); if (os.platform() === 'win32') { const vmargs = getJavaConfiguration().get('jdt.ls.vmargs', ''); const watchParentProcess = '-DwatchParentProcess=false'; diff --git a/src/utils.ts b/src/utils.ts index 450227e6b..cb1cb3a99 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -6,6 +6,7 @@ import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscod import { Commands } from './commands'; import { IJavaRuntime } from 'jdk-utils'; import { getSupportedJreNames, listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; +const vscodeVariables = require('vscode-variables'); export function getJavaConfiguration(): WorkspaceConfiguration { return workspace.getConfiguration('java'); @@ -347,3 +348,12 @@ export function getVersion(extensionPath: string): string { return '0.0.0'; } + +export function getVSCodeVariablesMap(): any { + const keys = [ + "userHome", "workspaceFolder", "workspaceFolderBasename" + ]; + const res = {}; + keys.forEach(key => res[key] = vscodeVariables(`\${${key}}`)); + return res; +} From fdca5e1a4911a15ee399ab900c45f71049172050 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 28 May 2025 08:59:01 -0400 Subject: [PATCH 569/708] Increase default value for maximum heap size (Xmx) from 1G to 2G. Signed-off-by: Roland Grunberg --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 943b291ce..3d5e533f8 100644 --- a/package.json +++ b/package.json @@ -331,8 +331,8 @@ "string", "null" ], - "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable", - "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx1G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", + "default": "-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable", + "description": "Specifies extra VM arguments used to launch the Java Language Server. Eg. use `-XX:+UseParallelGC -XX:GCTimeRatio=4 -XX:AdaptiveSizePolicyWeight=90 -Dsun.zip.disableMemoryMapping=true -Xmx2G -Xms100m -Xlog:disable` to optimize memory usage with the parallel garbage collector", "scope": "machine-overridable", "order": 20 }, From 8a642e5a1b0c48a5a9bad64cfa729dedeac674ba Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 9 Jun 2025 17:20:33 -0400 Subject: [PATCH 570/708] Handle snippets when opened (empty) Java file triggers activation. - When extension is activated by opened empty Java source file, the snippet insertion logic has yet to be registered so boilerplate type declaration snippet cannot be applied - Recover by detecting opened, active Java source file and create the appropriate type declaration Signed-off-by: Roland Grunberg --- src/fileEventHandler.ts | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index e14970f08..3d6595987 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -10,6 +10,7 @@ import { WillRenameFiles } from './protocol'; import { getJavaConfiguration } from './utils'; import { userInfo } from 'os'; import * as stringInterpolate from 'fmtr'; +import { apiManager } from './apiManager'; let serverReady: boolean = false; @@ -25,6 +26,18 @@ export function registerFileEventHandlers(client: LanguageClient, context: Exten if (workspace.onWillRenameFiles) { context.subscriptions.push(workspace.onWillRenameFiles(getWillRenameHandler(client))); } + + // extension activated and empty Java file is in active editor ? + // type declaration snippet handler activated too late so adjust the file here + apiManager.getApiInstance().serverReady().then(async () => { + const te = window.activeTextEditor?.document; + if (te && te.getText().trim().length === 0) { + setServerStatus(true); + handleNewJavaFiles({ + files: [te.uri] + }); + } + }); } async function handleNewJavaFiles(e: FileCreateEvent) { From d71d0a416a1dccec445ea957bb2a7d344b7b4286 Mon Sep 17 00:00:00 2001 From: Marko Milic Date: Thu, 12 Jun 2025 07:43:32 +0200 Subject: [PATCH 571/708] Remove JAXP entity limits when runtime is Java 24 or higher Signed-off-by: Marko Milic --- src/javaServerStarter.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 19ebf744e..d9f10aea2 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -96,6 +96,13 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E // params.push('-agentlib:jdwp=transport=dt_socket,server=y,address=1044'); } + // See https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3465 + if (requirements.tooling_jre_version >= 24) { + params.push('-Djdk.xml.maxGeneralEntitySizeLimit=0', + '-Djdk.xml.totalEntitySizeLimit=0' + ); + } + params.push('--add-modules=ALL-SYSTEM', '--add-opens', 'java.base/java.util=ALL-UNNAMED', From 4754141d6d21449b27910ebe4096ae70dc352ffb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 18 Jun 2025 14:28:32 -0400 Subject: [PATCH 572/708] Add cleanups for various redundant modifiers/expressions/statements. Signed-off-by: Roland Grunberg --- document/_java.learnMoreAboutCleanUps.md | 110 +++++++++++++++++++++++ package.json | 7 +- 2 files changed, 116 insertions(+), 1 deletion(-) diff --git a/document/_java.learnMoreAboutCleanUps.md b/document/_java.learnMoreAboutCleanUps.md index d01052c60..635eaaf04 100644 --- a/document/_java.learnMoreAboutCleanUps.md +++ b/document/_java.learnMoreAboutCleanUps.md @@ -473,3 +473,113 @@ switch (x) { } } ``` + +### `redundantComparisonStatement` + +Remove redundant comparison statement. + +For example: + +```java +if (i != 123) { + return i; +} else { + return 123; +} +``` + +becomes: + +```java +return i; +``` + +### `redundantFallingThroughBlockEnd` + +Remove redundant end of block with jump statement. + +For example: + +```java +if (0 < i) { + System.out.println("Doing something"); + return i + 10; +} +return i + 10; +``` + +becomes: + +```java +if (0 < i) { + System.out.println("Doing something"); +} +return i + 10; +``` + +### `redundantIfCondition` + +Remove redundant if condition. + +For example: + +```java +if (isValid) { + return 0; +} else if (!isValid) { + return -1; +} +``` + +becomes: + +```java +if (isValid) { + return 0; +} else { + return -1; +} +``` + +### `redundantModifiers` + +Remove redundant modifiers. + +For example: + +```java +public abstract interface IFoo { + public static final int MAGIC_NUMBER = 646; + public abstract int foo (); + public int bar (int bazz); +} +``` + +becomes: + +```java +public interface IFoo { + int MAGIC_NUMBER = 646; + int foo (); + int bar (int bazz); +} +``` + +### `redundantSuperCall` + +Remove redundant `super()` class in constructor. + +For example: + +```java +MyClass() { + super(); +} +``` + +becomes: + +```java +MyClass() { +} +``` diff --git a/package.json b/package.json index 3d5e533f8..659782af1 100644 --- a/package.json +++ b/package.json @@ -1316,7 +1316,12 @@ "renameFileToType", "organizeImports", "renameUnusedLocalVariables", - "useSwitchForInstanceofPattern" + "useSwitchForInstanceofPattern", + "redundantComparisonStatement", + "redundantFallingThroughBlockEnd", + "redundantIfCondition", + "redundantModifiers", + "redundantSuperCall" ] }, "default": [ From acb44d71e315a46c018a914476cd0b3551ee80fb Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 24 Jun 2025 08:49:24 -0400 Subject: [PATCH 573/708] Add custom Lombok 1.18.39 snapshot into lombok folder. - Base version projectlombok/lombok@94b01e4 along with unmerged fix from projectlombok/lombok#3888 Signed-off-by: Roland Grunberg --- .github/workflows/release.yml | 1 + gulpfile.js | 2 +- lombok/lombok-1.18.39-4050.jar | Bin 0 -> 2028749 bytes 3 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 lombok/lombok-1.18.39-4050.jar diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3070739dd..219318108 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -124,6 +124,7 @@ jobs: - name: Clean tests run: npx gulp clean_test_folder - name: Prepare Lombok Support + if: false run: | npx gulp download_lombok - name: Prepare Pre-Release diff --git a/gulpfile.js b/gulpfile.js index d83b633e7..b25c3e5dc 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -127,7 +127,7 @@ gulp.task('download_lombok', async function (done) { } await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.36'; + const lombokVersion = '1.18.38'; // The latest lombok version can be found on the website https://projectlombok.org/downloads const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; download(lombokUrl) diff --git a/lombok/lombok-1.18.39-4050.jar b/lombok/lombok-1.18.39-4050.jar new file mode 100644 index 0000000000000000000000000000000000000000..d624c2078af04cc8ad533741ed3e6c03c4765f15 GIT binary patch literal 2028749 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 b&^(NvdK3b$7`r?jrW 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
      #vJK1r^n5orD9!d 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 z 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�D!x~G+A$HY-X$=q7|>{#p4ueIN)KnyDJ^$M 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 JLx6GBvo|2~OOl)&>myGF*_%rudHpP}+9~}w9 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ℑ^(558Ae+$-JGLMQ+jb$ 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 K9aDqa;#(6qe}q)G3C zum_e9vHI9p(*~O?RaLg{Y2VkB`j06rz)d(_tOW-mq&iq#Z_JtY3D7Wt*ALhfAp;Lq zYl=wD{VXc6h1rKv8eEd04q?yt&2A+X^c<;H!^{3kFgc|5T zGd({Cu)#duB`X^A(NBtv)%Vg?H}O-0R)1+-dHtdQlmN=$2Xun{&>$H0cRAFLKigm{ z{4?>^5#FWsp_Mb1?a!(L+>J*4puGzu@v9m{qyzMFQ4up8wp$3KoofFxAQ=6Y+nTzo zF==ac?CRnmR|_q{PARFJx5;ELQob>I-?t3GsLw5(bqLKalYc`0e%jS-d#+qIYLBqF z8}0sQ!8?XkZ=A(*mT|{d;3Us?HrDR~uD#uNOzMHT)ysUN$z`3{({zK;nP>K_Xn~3` zZQgKX$UKEwohgsS$zah7ez3sbC#h0?>Ht+1CtMESp5{nHkLw#TI+R-;9(}A3<0+kV zV9&q9ba}oO54i!|MVvlsGv1-wQ(K@PJ3+BsDeA75DhC0Bux%mZ2(h7^+TR{UL@EC#DR{>?cXe#0Cr$=8+*njZ*WME=HY_@;98aYGSXk1c+9V7|*xxHtE3 zGuZ@hQ5fTXeX9m#K||usMQH+!DGJcQkDFpIIso(|W~NfZ0-qMyj^U5s z(vOu=DUqnUf<5t#^L|!8v2(0#m6`yoG9|bMBWg5qvN$0visJzsY!;((iH>A9(OA z+&bMBd`GOx(9>EH*B?*(fgg5hQOJDd$fyip(3D++U~de z7v}wn;B`jm>e4Ss;)r@ZRk9a55I85zcr5x8=x+tv!Jv5(-fjd?;V_aP_#tZIu*pBm za6w3wKyAT06=jvf+~s$#3_L!|EXA|U{`a_yoHf8JJuhL0gQ|YrLr4OISC`=v>Ms+O z)!ryFWQ1TFx>?d@z)dPbhXv@1WMd0^x~#p+yiMdQvBy?B zvdax%U-`zu-WCVKB1&wSoo0Tw%_1N5-}v}Oo$c_DpOdO0xMR`Phzyz!fHmu8^8(GI z=AAmjN(E!@j96}B+%!acP}F+K$B-vYc5?UcYh>X^tz3{$?j@}wO)dO{rR?Ok$G{IQ z-Zkx9reqGH?GyINEg`bu=qUQbj-=@UVaeH{GT5s_iLQQd==Bi9EfV{-1Koy!5=WT< zWy$$eAoVaj_=CcDvk9>|A%J2ap$ao|Yo=e8^&8V! z6BZUzJy+`|+wJ*Cv#E6k3yNHfGK|YQIGAy$bEU~(Cgib4rMMwjEuMM~d8SM0LW(|T zhMW#s?2ymdSaA1+0OUAb_=hV31qVROM8ELUo(*2+istHPm%bGxu+OgsRT-<4$u%*} zeA=QcUTLDT%O5=C8-Rv6%)oJvucEEet-S?d1)3@Yw^SgZSurogKCFKqVShgd^8Qs* zlhXgyS5LQ)4a9r}CQMKqAC{$ap=$t>#D$}6YQ9vTNNA{2u7N5Vd4Jinsmm@*0K^vP z8NSCZ_M9_zFk6I4HMz^&iibOfSI00pY&8c${7yLyKj{ZKc+fQ|Tyqvwl0JJST$mkvukU=dFdyj{i z5Y>zJbOh?(N=WzTpLS_#eH*BnC`FmqM0_4RwM`3o4|COdq+PPRXF0QX3M5DMO~I z_aM$Y`@#fVJ~qLimU1#8P*v`@!86XIA_1j@EX6S({QVOYqGJL|wmX8mGP!7l$RZYIPlW~8WYau-s6u)AUDy<4pdq{6d!bqxt!((zAdR{=@r<^9}up|_?wUTo9b{-rnx?FK}0v@ijg3dI;N9OQgfh7>;FAR^ldOhLZ~Ro zU*~)Mbz80Y-;Na?VUOidmY9l< zOcU_c9k*SwlQQI2IB3d^-P7VcdIgn&)LfEWi?@f2OR+;g>b(c&*Xt<>fp!4mJm!%` z%Xt2?qfzLPf4o_18stQU``qPF!t&Z9Z&Lq9mU!x%BSBaHK5FK|*|klkIY$(tX45ndLDd z-c?ZLBdmTnr8#rI(g1~PJ|#!E@2Zpx#Yl8GFZl75E&q2@(cJJ5)K|pSAUA6K;)FA( z-2&V|sybTeaLVo!k%OP-;w3%*yHkA*XPRBipqSH);LcP-AW}vuue3wTq$)QbOF1=` zX>gB-ljBLz-Yp-ib16o5S~!UMy;0>rGOX2=%YOdkcq2%sIgxd+I^?nGc{xe!A!R49 z^{*xa#+cMxMQB@L>T2h&^W0KjT+Ld`9V(UeJO8A9%D|XD;A!Jy5;&WXpAJ0l1-c}d z_v!gXY4zsOl7`ZSMwz+pNsAya#Z?Kbp9$?=eL?kT_wP1<9jS4A*ndO#kl}%TT$tB_ z3F@%p3L64unhPy*L!p9j^^$s8{r;?<)Y19XmmfMhXwscglqEOi^rWk8a^CEXqK7*9 zQzcbI4b_0VM}>WPj9+ID*8~8p{Xpt#( zj^ak6#P3+ z2z~=Ei=3?SI3%~>w`)weww0Np=K3U)=um)<{8}w}QSX?ol}0U|PNCgP~ER#wQY zojaahM9I*Z4<_H>$0zX4>EN6W*!wU2pEVm*KWUuI20Qx25eHsp`mYw4 z%OzcNbB>7;YCnqx@Q8XKAP z8p1kj!@ixxMPZdGl2OT#>^RdLrjrMbO(y7oO-h#7C?$Y)5~yeon;_7$wx$`QPi}E{!rsh!ZM>f&vy^bmI%(Zd_(q#3gu;QCxVGGAO;ec3pI9r-0&AT#3P@orzXseEj)h472aTwSIb5E1iU{YO|s!I}} zW-TlB#Bjz_DDO0~^N1=+*;B$`WcbLC218fQ{R=QKSTktBsc<25;?tE~jS}@h&Bve_$*3eUSYtC*Pz@401H$zHjxtFm(ptI{;|LvM zF&{K-N_8xlHGd{6D1|0~lKxe%9Au+CGd_vt1VG=P?C?8EpCfpWhCnJiN{F(iVEhi} zuqL~QfK53qh9!hTS!D_-;s$=c@h+CR!^4etrk; zcy#VLTcAcqHusrGvESTX9dtbCfHOg7fO4|;R-8*h7|Nk(!95Bt{B?T&lk4+K1aX+# zqVB;G;ik^PV(qPNpDb9TMdXJtob_$cpfx(H`ONfnVt3>j)Zp*Qy&*X69=HOEqD7OB zb;T+obrn$=_Ac?fqS3q{hyK(&A1fo0XyD75 zv&48p)~~}&pWvG*ml74b9gJ_~V8}1QbPr9%StA?ScvpE`f0je4m;In;1V2$P1e=zF zcw>nLn2`i9q`z|Nn72lelJImH%`OG1?O41xnOWSZQ-b$WfwBU+ip1jbC;7rYmY}We zCWT$-^^mQdCxJPu^FhH;a{veedwP@S>Uo>YMQoFSAnwvs&EDGFjwq)oIUhn#ze&A? ztvB!gGl~ZWVemZsa;BkQ8Jgh#KR5lKbEteP{KmKPZv@Eni1qRO_MBVo9|ZT!BgLqI)>8H}SgeeGb5}O(ztD zLsmyI&R3qVOy8)tI$*f<}UbBW`>|fTRAuc=8iZC^hoiI`S~G$85ncFBtDK@C?a6 z{fa+<|Ia`7>Q$)cI|UB?%3%KcIkl9vwatH|)c<)p^sVe0|1-BPP_&eulR@BWGG}HY zBC#d|ml8z9nP*n`Da%JdmC|Pr2$P)bu;GZ%=w!-%jcw`y+?D*?gS{O^m+9_ink0*O z6#K~abii@MO5OB&bGPOU(EI~NE}JH~ggqj(E{_>%Ykjx!Ln7R8t|9e9V8k}H%(3r| ziDK#&lNp%I&vvNdM9MHN?E|aoIB;otZHh*OO11HTnqFkThzX^*Oe%pG2P)dM5zGi7~MW7cUKm;K z#xfOf-?QdRIW$y?{WkH`>nc`vCgC4u3GPIGT6om#luH8daYJ}W45HGhCW>073($&4 z7VHYHUE&Gz-loF+=n8n2V2c2tR!SCYH&9vNm`6tTWKLI-?ZwrUf zkr?6YM^g#yoN6ypr@*X0R*Hd|lK>gMc7qoEKxN~GHiN!?{kfaOo6ifkMVdb0=lctX zk#qVEaTfF!;_xgj@Rs%UwmORs2|9)!*YOanW;dy*Y@VY=Sa_VnGbSn*7*jzG4-k#W zD`enrQvX0*|9e`N2oXXDkQkw3ig36iRu=5j!0y_)6L&i{JX8E4eVRyX5aixzV-wE6 zU4Hd$3P=`E3c_^49iFELl*#X$kOAfr_B-H=4vq4}P{(s+@N@H2-7UU;iz zxEBO7bi;k|1mt^p12LXNwQF=Wuq!qqOqgcrU}1RR1-mX#Mg@MtwK)ilTRXa4l9h07 zG9-FJCeRMC?wFqmK#fT(MEWbx!IrGcmip+ilKK9uiUv}^Y!-OHR=t$r3A+7v-VYB4 z+@2dfOba&c;&txTI92FglDeW3|Gu=~yM!^thJ^+5HSU-N4*)>(-~IUgqr~+s`;Bis z-$+nC(N)D^t!0>=I5U0I$B5d*X04{zWgdu+;v{vab4L# zTYo+^lmRU6X0e4bP>3$~y+7`lj5_S`_l8`4Z7N-_k*kF63asTngr!fViSwJ;cn=a- zUyx~E5mUQFg6d2asRH?Aa_8~i<`3}!2xX)&X^PFIr(dT|$ExGTWr%NDv!$OgXG?sW zl={1YOJ1RC`a1qg4*?V5GCxJiJ~T^)IsI zN*Pg016-J+0<8IFtPguNPansqvwB~N|21Ud(S3+R)CM73BWw0fWcp#aIbrVFxq$Dz zic@T{cxy#Z{)rLB=;Bnh<(&g^qs)A;I6G!2WN%ejN@qp&!Y~(<`cZ3J_RVmo97P{E z=9s80E-4VXE%i!+#!hnOg-LPhu7s1q6~kVV~&KsjduLLw6lMts^hV}c)L*H}Oi%f-Cd zbaNTt`0yF~iN(VP@OrJ)fzhke8F030<*BsHL{1};^5A~Kbpx`mpZOBU#TlZI#bh%w zs@?J-T+z3SSJc&=U4&h~+%f1=q->+sbPMHrLj)h2s&6wSYFpa)`6VYl5W@buv zsMb)!SIKIH1-<7bVB7~53CDlz_*VnL3@^?IMbD$3EZlezeT-Y`8kRXqK$0N3W2S`R zp7RAM%#`Q~O1_pK>RHBUnc7A9zzoYV+Z9j(q5B3}0dYR#@MAdppMWr=Rb98fBW8j@BfdgR8ntMk5qNPbIyMH={eejn^tjrB!P)=^ zuF(%}kEqtSnJbE;7qCJ>0Pew2^1%&8csV zvr(h#@A?e;-CT|gqzGih`$B52)kLG_j*9)=z43zeQQ_M2$z~)^LG~y_JSYePFTkwX z8;Mk!?6K~m8}>SBk3SV}tQ4;rKv{i99C`jD;`RkH2e~liiMaK`o!HIW^zFwb+sX=d(O|q(T(Yt)k0u+*>_kCdsnb5sLsX{z7~&-i z2}?JQ-o>qK@QiFEIYLRA8TjGQ9TmC82Sst3P$oenfaFb*|4nnzTwEy6ITEeN@}&lm zktR>G(ABXoH_~LUbTunOqWIDP)>{iP1R0%;8(uKZXA4y`r@-umyC%Zn%kKk0#z4=Q zJvtb{>Nf^;ZaAf=J?b*q29G**%Xpm8n9OJ(h}bKQn5Duzg!4>-ZIf{)+MwA7y=Xqw zA=KKv&>r1@ZA`0_7|sk*r7B6?-zQBguu;pAP9aKB@<<=gZ!&T9`3cT;-RSg@gvmO= zVd8G$R(a^w=8R7d(WW9g`XMVumhzM4oe0HxB;T%9&F*rz3*h(($F{33`_X^i050O3 z_qb*$(doiOmBdvR`^s^(a4)(YV8UPwX??Hax;y>0Vvi0p*D=9{Wv_m?uQ_+RKB{ZV zN8z;oVtyV{)4)?E`G6XtIi2jMX04VhG+VflkEgSbof*CSI;@t=k?~ zED;#hC}_zzD4-#a97|-NfcqIHZa*NC`*Wpy5OH$7uZBn@W4At%QDQr zgzUxSq|>wSLs>7{AuGNruIP$bAVav;-CqZVDYE$(bB#&!9<^&hTn~e6kG5#K&Fzx$ z1E;zoS`K_gfkI#=5Jg9cUmb5DY^7V!1!)FUPd*yMAttdh6$A5SL=L~14i3@Wl62$fk=`t@G*oLK2%dy zwW_PZ9sEGr(WqJV5N+VvN8Xz1zwmLIZHwHo@IwBuk$cZ;Y#VxoDr6U`OfvmT-%2>P zSn;^GZy8L?{WUv;28;381}JlaU%gW^?XI^5sJny?8Q z&E>ilC7EX@5h^;g4O4L}@rG_X8MtQ^K90|NCOH)!)bqM#b)8TL(CE85d( zn%1BemFz*YWEEUGj+f5OKM=ayHsW6+8rlbIPAOh-qup)OX1V5RkBwZRs03!WQ54p`4Snj|HyGdB zWvp}>ZYL$<;u>PuR2zf-w2$k`S*1g|Q%x&Y^bk!UN-}?kT-@g5c`Xra@2T^%EY~b< zI@8`c>D$UeFhw9iEg8R4pbgDpYI^H`2HhOr^@`n^Jws^#o~Hm{DHg;UitOYxcok9l z)qqG2d;-I3TP@cypmPVCxVIreTsa&|zU3ogm+H|bdnXd#s^xd5&`79-Dupf%LEHUT zmx`;a$CiT?VV}J{3v0z5t)W8*`^w>shvc*SM$YMU3j0%2+rP{HErjo$?_VE?fW}%D z*}oDcov)-x@;@eA|J`yTqi^#iLFYg$=j`xbPefnxHO9&g`ZkUxwhq?+Rv`Xn{l@oy z_(p@8yO**W%EzUZt;wz6Z2XUa24Le6PzrR#lzjePQcQ3}d>Q$Zv3-)Sw$zkPccA_X z&C&+VvsKE9Rn>u-GGu+hRMZlvii&yvicn3<66=Opk@vp8rtg<&Ba9=&6z}hEhMR3y zU$aA>CtJ2S9w+lYJ3h&Oi9D47hVVPHug>9aXrRoM%QxAmvV=$znN%zhY9`rCnoA~A z^=Wc<4uYSh$9Vn2-VoyKmpf=C4rRL_E#zZL`V%pee zO|${FG&0$yQJQF0g-es+OH*42Vy@bwj5Spue1$bPMr8(fB6Qxyl6-9ue_OYMEPrU< zOIv_{J2suGh8BCVt=sO7~%q|Mf<7T+yzkTLkGq zT?E1e%B?|OJbEp#BsBum{1IXdT&-fspuydZ>yR>8NY)5KdA!eSHdm?%_%JepUFJkU zh^PoT9zq&}bolu^afJzIRs#kkqjp8u}GpW>#EO9lTxwSaQ6+D!cqC`a@WGp!)!l(j6 zrhoXgckmqj#HFP>Xl?Ma3-7ObNj5L1xj@e$@}bm^C6)1g~{b>1-eb_%MPUOY(3~ijyT14Tod~ zoDVfo9(^{z=l2T{C2v^SGUjresF6j$VqUZjn9#wa{ke)AOE^=AC(6<`l983PYz%>O zOD(<49u`U%-qJ27NEW7(ansTp5a& ztlo5@MkS?LgM{JiVm-m}AhT7K-Ucyj1(70S zEfoTfmtGVSCtdR)3ojs;S)u6R+&31Rv0_neGHfE1=eWV4Ib+UO2qB1G)D~lE6G`I! zbYmY~T;H@jxn-qrw9qoKau-_Se1&cZ9_4LAHkhugPTd+$R_{|R&RM2Fqm=d{Ny~ic6FaO}rUu1l3Y4yR)2<>@(-8gJ%2%qd9{Gk;L{;jT6Lp{T!77s6 ztv~SvD}(u0b8eagSJ%*w8?=g@QpOh&BXyLMqdteQL3#F)=}uy@;f|~0U`rx|9;@-t zCNJzREnFJ;yBX;Mw@1O`)bYOcPgS!ZAx>i}+&(IIV?9k>?Ys2zx4hCV(YmnO-9;gs z-9E@SC98&fwEfDR8cfNeV{_J?>ssUWY8@i0PMgCCLCTy;&-ClN{Lci%Vs;9~e4B^e z4Dp~m08{qqkZvyuwD4crApG5H(Lw&br`d?|usJ4p+!E(WeR|Vq*EnKg-ASsCWD0oK zrt?W4cYy8{J^pztO6e@m67j&0VRvX?3!}eMd&9hklTs~#V~4v)b&-$I)wclg}Y#U`NdVtZrPqvAjDvW5vDITO@-|Eb5F zF%ew}eO*XhICAf1>-zIGjFhxm;xK>SlMgNmFSVCWDa^m1@xd0eSI;B0T|Q>cvjZPI6$Q(WWEoq$9e!DaP+oDEJkL;Ajc)WTIHJQ#I~! z%tRfDpy|MKUFU|%+rsG}dfLmbhb0aC&_NiwE_DO0`i=CICUX(*6~=^NF*eijl$p;Z z1{OM^9}SBbH;0QusFTDanG;>WBE%g?)EvP;NATdYJ|(C%wg&lGQ#0L2zX%|@XWAZ) zG2@UZPUnqNV4P5sZWQP(k3O>(;YiUQVHx=b285TV^*e-o!qBVkM(8b+DvAJ)Z&1$c znY|~`^bdA_pKy}sEqF}+`=`_JXWsqQA2u9buB|j5c zd6G4wG7Xn|ao-6tzWy=|m0cz8fpUwnGpSj7L-6%alj#phV$86>ZOEvlN>IDsnQCc^ z@B8Sm;?wOZ^Fp&H7Vlensyuw9OMd=G&h`n{nh^L^%pd$}XXO9i$l27)ootL99R&=( z$J70zX!gzZjc?v>Bq*+ZzZ~F6TU0gdSa^LG>A@1sq5(lbCeW!?6v%2k!Bm@*S+RQ2 z<%QsV0`Q4v*8nm==;@v`ayd+AVj6iJI>Y+qU7ol@ZzW=1gu>_k)5aexr$aQ`cq!d} zKqzO)CSQS20v3qKP(?IG|1IXR`Fn6LT7?(_dN4wsvG@WRr)(QU!c!wD3*)U$2qMT0bB_1o9N=JB^B z@_yw~2@;u%oa&ktBXZmU>z&+R79e@(L?*hF_L(l4g1UFA!s9A@ux|7FnkM!>8q9F9 zgKH;fuZG6Nm)37ZK6NMl`xxt@>8JeIQfrfN!#0hy!J{RLf_Ng_62gjuj1@a{1TV6D z`PE{AATLN^PN4F+#nQI0pkGs#L>{1zI{gvS9BYFV4%kI--4pejbm(ua=HiT`9vrZg zP)(rdBQcDU6~+&@oo{7fGhcDemziuY08vNURP7 z|CdbtpK<=O{>C@cHzw4f+>n=?KcZaAq?-g3A7Ly5r?5z z-RdzVpvp4-p3}m$$(+u+ob}fj4oO%P$qMP#!^i{}5+e<4-y>)?$*eWY%!Ry4rrp2W ztky@K_?nuil`TM4zy5s<<8`@Q|5BMddOPAf+T^nBybB8d!8$60DG6M*ySN|fT+U&h zpNCYq!HwQvIO3EQLq8~^6`)&vUu?f_7KQcu=CFfEY{E=4yC7YI0``G3FU5&^a~(^n zU=8FTpynnpW^%bOyF|}T%eKb>==7v=r8A>9T&{l>f+^uNw9ru1ABuWpZrYTXV<360 zuEKS(v!@vCx_*MpBWYh$OC%MqR1cxL6NzV06&nrarYj z*Y1|ql%Hd{qt5a3k_ZS#=%=U0iz^i6(HdRx=|w-i#5nv9mLq5| zH9?xR18_Mng+V4RPc~Qh=9!Q=W|tV~s~xix7Yc>ML^vAt+k)GG7eq$#_H3wggm60g zaAE{VmU0Xk63vbgtvu)m;Bt|;P{`YW`&iVBWnMk^lrI2`k8p9uYW$rf<@%Fn%c?pN zsX`ezPahB#-CYinB36OIr=tO2JX16r>vV>^^(LQ+!$S|5CMygs8paE2IEl?VJ@O$>Q^LCGap&#P zRg844#<4a{Wi^LnSRVdF2|$-DhDMQ(sv92nva4J)R!B1z^rR<&2awJgBR7Q8=S)W{ zn79Cfq3xiPvh*L_Gr>6#>oJg1gZZz8ff)NF&Hk;1#p+*88qbG14PiTLRi44N^|k+r zL`{XtB`^XZG<|JjhZ-M6l~GP3!t$b2n3CLi`}7RvB}cr&d(l$QZ+fZVq4&7F{WhVk<_GBnLcD@+ooJvYUP+d zSv`7mW#90O9BMCC&lG1uxUn8*iHZBp;`JwO@UJxNwz(?8YFblluqk@IhI!Gb`4cz| zd1?<1e5}r`Fy%4AN&?In-y22@G zIdy6?t}v^dkVA>1qF>fg11Ufgm7tV9xP0Y%#$I7FoRyP^o2EnqixllwSxdv(WW9ZHij7k<_FX>T^Zb4+F=)W!VX|x2i(vq@x zboe^FQIs$znO+a0Pm>2Njl_DnM{cXj3&AxpJNeI0Wry%-x5GJghD0j)0o_GmHD0mP zFlIPhoHgtZ(j2rG9==p$Ao!-L8L2pTsgH6}cjGMKD8+mfhUj+2i01=iPF<}IIc~Ed zkLk{yP})bfr-3O?4`xkJ>4)l`_f_UUS#Y|ds^kd;Dl*{ zqX1yGXSzUbyQ^rYax~yVvq$%HIXK~4iPUKsdJ@I7T zLcyGj_wVKv;&kH`$7j;_33%bymU+KMLr&taFkJ$$?8!O3QG7_}j0YI_GniAeI_o4g zX?p(frCmmkqNMAsQC<#RD`fDX#CGL}#ri#CH!n_H?&Q`FE%()5UX#qRiVVA*=5LKa zRY!meCx<>XVYdpoMoNd~!kJ!pQ%{N;&goM|5Td=K-b&Fv#jL2B8@c&T@}b$M3vqg6 zDh3DTN5yTl46O^xiQ^m4Wt@(T5h)$U@RNb8uqEGGZTYRE_Ye;fpF)xQP%xMHQ(}mZ z>JoT1kqfDuMTC#l=kbYSmqGb|U$XHmU~YaXzd-XS(tYa8&a;b(`qxh9d3^#5v6Iq{Zyo&lJ3G0S1Yp#F zTbbbN=6S6^Z(uhMqvMZvm44AGaB#=g?xxg_NHXONN;*?08A@dola>R&N0s&b0tRlU z=pYjKiCPk_6~t&YEsZJr8%i>WddBExy)Dl$l2$6{PRczztRUP|UTfbfms$0sRvIOM z@opyqLC(C^YqIlC-=7%q!^#35<789aNicu?%>CzpRIqgY9R%AHPGa>-m?o<5hU|Av zIFftUi`U56ixFw=Hygj^-At1?`glv`3Un~rm6eI+naNN#dePw-A5fcECvH|tb|3KL$T@Q$ zs>T-TJo^;-YziY`{qiwvEgirT#!D}E78z{%!61I89BrE<=10va800dFlEfI+#yK^P zW<#j#C~J~dC{qqnBA7T}$ZnPb!%Bv0p2_yCx?4Ig@5#d7CR!q`m&ZqHV5mxrxiDkt zW8&fF9Z=iXiZs^zf~q=jR+GzFX;tyW$9KK+@PQdVmM{Rq8HuQt{1TL~h+R9F&n+w@ zmEmk|nWC+sixVFry}Q|6@E!T+uL*P}6j)IXCbg_}gq?j~)Fb8G!BsVRq+7|D055c( z+HCj36>#HqnIVt9aCcYQ&=OYP@Xxi8siF;w@Ek&~b*q*>LL|d)@2HyaF9=Si6?MSX z2|F@ry>5eqd%UZJyW^cG2^a3R^HO(xWvQCJcqSu!%rjJV%iDf%B{=s+oRDk+Z`4-u z$e|0-AQ{h#axKdrZW=9bmGR%sPN>N%9901|iz+2OfU?w+Bh+7Qxmyhb>3pnqn`}`r zfN=u`&dyQvR@(cz%Zdp6q!Xog>5cGtR&2K#UK2Q#a7vYRS1yclMB_ME`rL?3wOpAW zg@v#?EZNCoFZ~Xsx=CEMb2zoP=s5ZIw{!~Qm3fIPaxGow?}(F->;o~)9%|5HtNHx= zL^dsBWbmDtQC-SJ!&+)N^M#B8KlE_X&E<(;*f8B@;7s>ltS!3Kas- z3UPXTu+5kU%rUy-HBBb;*f|X`AEI0C+|%M)QOt+y%%?=ws{@OSx|Syxfr6UO=2B^0 zH!A1^U6%cO1&Tj4f4aPkvYFCLrqrinsR;9Ka)t zzDqotFNimN=ir6XSAXJ(DE7LcH4aAIXWF; z*mL92d2FM-Cm%q3St_U%eYjc}qb|S!xky@a05IePC@pSsKr6n? zAVDWMNKaHqUsT8hT$oCx&!XaDejtWb`}ksPB1(Hi%h-1ar(VK=*!-Ekdq$BgvX#+& z0>h&}HIBo}97YBljK(o1=^@glxQue!64At-?UXh3l^=|w8c~zox>K>r>J+k!G_nUO zVFetXiJX5`RKoDO;XE{Tw?|7QZL7RWZ-ok~_WBTX59$ICKB?Sn>>#s_EsITy=yr*` z+Ey-nVX}-qqoK2Uc6U4$+yVF${2il`Chkv*xU~|QNcibgr^`$fKfl&E?QYIFWE<7t z`D#>Fk7=837xyVC(yc~KHbOk-_$MM0;kBsU^u*+Ub1obO*ipS(a04#}ggQ`d}7>jRgL zE&J6A3+#LD&N7*_o+U!2Cy)Hw$D*4M$v)(d=3A`OBf2M~*~04zink5q4|~i{2Xpm_ z$~UzIuXVbwH*vFbYMJa}kFW@T;I08HGLOJhq}qHCVW3@qRW|Jgczwc~atqz^jA`CM zANd6SzQq>H8X9{d7x2u~;}L_Q+eYz%R(fLB*}Dsme`n-P5gQrfD5mq22eX6NDqKXg zQ3}7lA})$PBe}+#-`S&#e1iRmOVe!hZ@Jr=O5{50Vy7ymMaPZooNz_S--q7(Jue4U zDEwlw_Q4zL+*~Qid^ueu{v3boj<9krDlB8`B!V)%g65l67$~IK7q8qIs`$BrooxFu z$r%!YWgn-^B=E5JfemnGmSs>tOVS*Zw4|aK=AxtgDE{NM02=|qAl@4y5j$v}G^AQW zV+Wf@`AoFY?QN$VUW>#`tfJg#Y$!o>M8?Xz-LxV$jVCvg5KwZ+sn3`?GiD)%5<+fl zRZ7Ldvd^;iL*!{nWhB_D&PURsEPtjzJ%O2O^)H)8e_G6;cwfEMeJC3*HxZ3;lewlQ z-QTHU)Q|v`+5}=N{HtL$g9V?Fw8o7TQ5T=G3A|fh372+on<3lbD5<*K3}l$+pOwLH zl26!{Galy$3oUEzxQRa}@8ZwxGv)qN)7EE{6XSDBfsacH)@H)j-w3v<+4N)wQnY}I z8PSl~4iMGC$_;yPQ#9?Em-I*}jwLU0{kgK2m6_vkkoDX*3dcm=x90v^61KgUS&z6C z(lIO5Cef&k9_69W-e!lceg69CtKSt17P`@|!vpra<7=vKhX-$L z-zLYsI91J;rqJ3n^~G_bb^hO<@vBh;Eoq8edJPI%R8d1;X9O$gCe(L!uKK{_a{Nv4dZ2t4= zT#dhEwTmxFN#)RKGlpkg$w>SG4Z)lm*?a_v1HVs1*abPP{_yuYT?`?i7L*9<(QoX2 zHSQSaN%ZcCzl(yulN=x85IOeWc=6!`H=HGtZ3#o3^Ba1(pYZ;*0I~gJwV?j1car++ zw#R>#F;jB-npCA|Z0~IB_)i(LZ{u%#6MZ8{c}odP1^I(E?c9bHO*~JgfM%I6(TD(IW z5>uPkvU_-%+>WKfQ|sMxaW6gKXj$1coK38x<+O3|LL?@({KI_A9;eSKL%RAvvevG= z@PKW7byJWxYc*{8@R6fe-q{Q=!odvi7|?4t2MQhme*^)c8(z=94<4Vg8(B>G2W>Yr z7+SXOuePuL*C4j38(LbdC-f|fr@(!#M6xxrWiXj25Tjy)Hj4e+y0|qmNu9N?+a+&7 z^X4-!)CLlLN6<;pYKdo=Vr?59k?M6%{<4+}rGLdP4VO0mro(=k-7+s}?dM*4Vl!yx z0+2Ve6fKutaz?@k^up84Q#Cdjvk{j-W6D<(<`?~zNH1^`yAHtyLeGzSmeWqHI?mjy zdMu1gl~_4-T+0(>S{E;z%mM}?u`;V}jdhviGJBCtFhpWTN6-S-F1f;^PabI!naDyI z4gWoBgkTw6Qevu2>MWoE*?I7Uxd!b>R+q%nwxZ1*e%V#U71^x6pcNVBxP{`N%PGM} z^6;Qjt1~G=w=xS|QZ>y+-pWjDf{R}Uq6%k4TrH}X=Xcw~xX z`zMN_tWWY2VzVIC6@b;B>ZkX2E_Dvx{QEEEX`u*lC!%=)Hj)?oa&czT85$PinPy=M z8tNE|8S9@3W{SB^(hJ1tiPy5yb0q0sMK5`NbHjehkkw}Mgg)yC4daGL`?B%|eNE$z zNQpA+ylG~PunEnO0zkoU64Y% zQ0C1)@8Rd(EkbW6uk#3CRP(X$8aA@pzQ5@vc64vHlg;^A&ryH#%2tR=1_$nMlMkzc z%P|WPbgCc&Ei!A6V(NeRgVA|7l|svkV{Wd%PYYKE|HXID%-vlU#&SFe341P0N6;*% zT#CA0xX6;Nso88GWWL@4#wHc%FGVmtL>Tq;fA`hF>x`Sa3gCFz(f!wLp*0SrGWDx! zy!%x_rv1;=Xm@J^TPw$ZQ?2;6{KhxSHzE~gB(VgLdE)x5YHiYzQ<+7zq-wGiwP%+C z+w&oNHSq`q@yOB$FqkeAH&z5cOFNa#a`2|3DK}HfRfzpy&oj7Or#K$hQ}}#+KR~Ak zDgyw8v<8;;+%A20IMaXk<9X-hNj|p1N=4J-Cg7fQ)N9TxW*tsEk3*)}9W$4qn|K{B6ougN!MG(H9{lfFmio|C{V z9Sxn`oPB(f{%JiZyN5ut%q!Jvq(B^-vujSN*iKL+l59-K1D}C2>b06ug1wpRAS3}mJ5Wp0Ilw7m z3y}SeaY4dFlXHsNrZ2)PZ$h7-Yv$ECaQH~Z=^5=r36=38Hfw%Jy7|s@15{CDWHJJ> z)@of>(e4hm*4Qd^!{Tj2D|80?uaUnna876V+Q-wrM($Dn|B3uRYSG_z-}vVEhPRTr z(pTR+k6d;RLpfzwZYWeDrLwkN4y`)>Otl#TSSQaa+r5OiMJ(s8?QOsq^!RYZ%LImR z{GNAJ15D1UbnHmSW4h<1cTty*?>nd-HXRJM!Leg|g|jV_(xHA1@td?y8gE87Kb6p< zXL4_;P5nRV0-n5-MY!jyaAw|!IT9iwvzZC(bn$sd1y|K{62^;Nb5LPs5 z{)l}w^F0uvs?zDb=0HI4wyn@mru5=**5H~~GxMQ1x-a>D1f$GaDZlI3ZFc}^XA|9O z*s0#}BOpp*iaSUEX*6Iw`N=8BJ&i?@8|^eGENDDo7cd!Sc2Lxq?;3?QbyJ7ORyn-jJNrdhs-*zF<2P@x-MWm zP`#7~dE!IWqj9tC&%%5#9AQe3f{bZ%Lb4j~C^%yhu*ygqE_RReTB;dqxRoy>?aBmk z^;=K7@3%8XZoEE9Ta3X8YA#;;=_$QpR%1jlLl${u*_K%VLA_2gi?xwHGdKS>RaaEv zGd-4DnUK8KPj#=_Me8qDzHG2C!B#rB=QwKZo#NmI7yd=S=mYhBfFVoyIJcHvC1fV1 zxJ4=gt3)is@RzF{%+eVxLwEX40u48(s3h*_m?t8Sv-I*3Jb4DB{%bsaIe^r$o}^H@ z1;C44`lduWzb{OBfkndETSO*K`kP*$HS}WJJ%J3@&Oxr`EH)g4Cp)kf_6C{xJA~67&c8_G3L*=< za?auQ)->6sa8s(Ex06=}H-=WXNeFB0(^K4u&QiB!h28(i&ukMr77o6ak@eR$`ky6) z{##&H=37YU-&(f5t-tZj^o__rQ{OKF2fNHI=N9=Ac5^~_`5^}e@|1xo?vZccVd$%gdu1h6R z`M%}=-h&qfdBye)Goraluf&zp1Vz#HbWd_A;l7(P(;F_m5)sIa-gA=%b&t z$9KAfRX+i>g>`xvTsfuCRk^b)H|g%YChgen@?|^+(=V4&I&9me7Vc{Ng?Pr2+=DC=@Xr=p0IPi4e6mGQ#z*`l8t4A~P$I~jYehnD6FKCuG zeE!;e90*MG=X7UnQ3(0hI-Hr15Hlz9VQ9<5Sy_19sF29!PRkm^H5y977vSW2^30AghiE$p1T#Lh$neK#oV7Opn-;8P9JX zuRo>-V}b$uB;Z4A+L@6u-J=ClqxKb2fw@OPxg`SU<&Bm#uE}f=+1akvgRU8aQ=RAV zI1`!L@U){v-x>N!Iz&tRSe*jp1jl&|0RGUQ-!bNnLsXyNWAWON= zb1(XfXE03`=5lr<7}*6&=Lj00FB0>o<5y9M_y}60cp$O;o125>ssvK2Qm%Ht5GcCitv*XnnNDpm|6cT#O4|3>q zo@>v;f!bgS?MAwEIIu^aZ|7(o%8mJN@E#Jw40Pe=^V+cYod;*3*tPHRx#Y_KX*;TJ70u-zjw|?W!y80N=@9EN6(ch+Ar1N)4*+Ltq*plzK&#`QAX-pDpi40D7|*U&h(MThZq z&V1Afj|rqK6HvI9D{fILNOb6_9L8Xl>P09SB+C4_nl_mrwZnT9L1u^SM%6`vrsn90 z>ozu1;uCwnp9td;*fm_~%=@L}fnU0yapL7knNL*tgO&wrEex;?HW3+nXD3-o`DPO_ zy{!f1VFLnBog6OHszX6@f=Ck?{ov+P=F79pSSZ!hpVf@gHl6T7)rp@e2VmMKg;{4I z<*k%yKO>TqYLlW+XUWq}%+J{VC;tCFGMeBkeo8{pv{trX&j^-u|Ld3Ce;-kF<~A0_ zhE8<`PGTcwu3s_s&jcm&mp1&;R@ z9Epi%jbKmT_*;mr&tX>8RkYj>S9TP1cpI#x#7mXVlH#R7sj-F`1ymQq+X|3 zK*vxfQaLh zP$KLVD9yX4lPm#=io?{azrc{49iLV*ln%-JM>63QPCs<{9vy9FheoxHxC*jI!UU&2jaV$@b)i9Yq?kz?QiIZ7}#xXKvfN6mN zl5`E_4c-Z^B5kPR;9`RlMs?M-wVau#I}@J?hOk6aoY#)1bVYH&c8-az?|0h= z9aPqOz6~DRXb)B}x}|)i#zIT<%7OPYH0?WQwI;p#Z1?V1@$~YGwRj7y=FJGpBhzvB3^zM#U961o?#j6O7)ch53wKr&|=Ymgs+19x;6~=)rQ0Vzw6$A z`1PCP8{d52_!<-GinN6Ckx652!~mS9hsXv%svn0&EUuZl96!;6Pnj~HXE+-ebr8d2 z!kjlAVU?aQlSX?IJIi_^+FFQZ-HM30)-N+Gcf#?m_QH36@5v-sORex{GNoz5HR)>8 z_3Hi6ck2_ro7XEpTV~sSj6#MpiOG0_ZXDfau--J%KWik#QIs{Av(i75|EQd|$dq~` zb22?O{uQtWsL=Wa3}jV_#}F`vz;skR8wZCnHx$BZIHi$6kwOOZlEZtJ5jd8kC|k?0 z)pFF?nQ3<_IkP)zy@LecgBCFw9o~!b`r@lfS<7P_MJpwmWz`fVBl62 zFTiN{WO*^aN@XVfsbqf|KnpuP&J_JQLW^jFG~o*b4o~TUy=B@Jw_Ez|$6WsmC)GG_ zvGo(lk?Qx<-}dLI>_h@{g7eKqDVZi*ovJR}Q^bdw1C7vAb8i?zRN`l$y%C4A!V|9b z^6u_pOD4{0REi-^fLzryQ976ygh`czNe}l13w#jwL=}2+Le&wpZk-B>F+Dnd&U3-O ztIngrXLR7)3xFA@ZViJk5GZnzf?EZPkKb_VQI)rDq zv<3uiCTJjiM7MwO$`GiCiGOl5He^q5T^dI#wFZS<=*Q2FD6Mwh`%Kt3U^u33P7mHf zI2ok*?*Z~W`p9!R9PUfFlZ8)FvP=Ael%)`QNYT)mikP0{5E6lP=T#b;DFRk3A-L7k`+w@56I|;k_-1Q?{g@l6D|WXlq*Tu|iVFYwpP`_lNN7cnmS%Vb2$s zD*e)MM+#-y9&#!Z{N#(b=r1Xq-R9KpCPB#xnIz{X#PL0e_wIlE+Z)lHqddk%vnfNx zm|_75xQZDPNk7Jc;#r!=lx#um=-^UGJnf37(TvIL#c|Nn!!JgsMqi~@Nf5FXsX2h6;f*XA*Fxlnc2n!0gn4JN?TVt? zjV3`6zL=miZWyE7_@$-cB{7h6Q_3HrmU0iM={Heg)o9H5PT5(xZ3&2_wtxo6LIbs9 z`2@PxT;7J8)2SshHh4qhchS#D6IXb}o|v>4fG-=JQmH#r!F_ZNw(FL$gNi$H?yfT6 zdc$)nVR#qJw?{7s+XR1O6<)8jWgnSK0z|k^PY&QFG?4ZLP?HjOC1)^~U}60peT@Xd zhwAoZ^QNrbrzN0~1m8x|LJvq@l*?wL@e%S;#RbD|_i*ikQP`k%yIqFY{ zMPFfc!W*t4kyeUc3sbzDWNo^+n5@mS!r{F8SS!>*JN^23=JKxk81J1z zCnesWW7joWH}}8gM!W`15PeBZ^vz+qw^Ql1SSb)at=eOmV<7DMq`$&si2Cs@q;MLw$foXKxU-<@cJU zvI=FJEl9NNJ&nF)r!T^)mU@>z4${a^De(>2hfw2t?+E7(?k(30e-58oS{KXiV`@%% zNraU+Jqxugm$HzU)bR&->eqyi7hg za1mA6j)WZbfrd?SePir52*Gz$=qc*GCow4LJM5hBCtFA-QR}@e;Dd2!fVogWGd$tV z?C@t%E<-QqVrsbKk zc@ZepnJ&B*>S^9&Z)CA-uMRrQ1^*1%Y%-hA!^b8M7{73irJ+jt6=hik^S2MhvAf#P z_H}{`YIJsWblqJOqN3hNcKTxIax8c95rXE9*dh{QqD%R3-2%YM)|2UC|Lk`KM!P_| z&`P}VruAjd{Tc8}197ycsZ11e*q#_!nKX?ViV zOl?0EI-cv}ILapirstMzV}|7I@&P6_XT~XxezYcn4|tEet_oXshzpnmL3oPPho&_* zkajtODC9??!~r5>H2!OT6?`qn<>Vd+>Zv>R^^|{j((s9~wy}gyKv|Q9@76$>pJN!n zV;alRdilTx*AtVeb-WXdZ;x)t5b9!H*UpvSq%9-+W`U#29{kl?04;kDd($=U&szQ= zYJ=aNY7%YIt>`u?Sz6+sKHK97+d*$gcy`hbE`CRNgPhA^Q0r07|F{0zzo*-TUwOj+ zd%ErTU+U71|H!w6ySj#%zDl(WU$5|Z{$tMaKlTDfMxy4%R!0Bbko<3T|8Jsie3O17 zLuE}7NdTTl$ltG85MBU4B%XW(QN40Amz>ayc^d?h+AGycRDJn;a6^VV^BwXXvO=-i z>v{%^Z?x7Fu?2%ARoU3XqxChtb9{g8aZ2|`#Ev~M40J%F)^LlKXbjk4@HO<-eYwFl z7Sr=vJIVQ5?CQ`EAvn{0%Vz7&A!`suJ0eHGD~RFZVP}`Yv+A}7G-eY|&)wQS%`LQ5 zXs_XK1TOoBX9HmA@b)$c2{lF zw(UeOO3X3r*$9UF&q#8idTJ4rWc_f(wS8lo<#i3VM8GMB#ktR7_x$PE5zJ}G12QLM z@8jrg?7o3k#6>$?H1yPFb4XnniPp_1GG7vG5$q(w=3#g)k3xNT2u$jm+J0*banoE; z7fT01CzuX)p+XeddBG4gWl!Ipyt?*lnP8JGO;+tw zNBL#Un%~~u%5J)j4kFS zN#S*`R3vnN$~v9235SmwCkJny--w~WX-i<9@Sv}`_BSVb`ktw;&1^vkZ{|aX!*$xW z%s~VHPNd(AN21NAz*3B?^#@5tuX$~fBAdr?{76Zqe>*9lFaS_V)v@FWUbc7d3J!F; zKpZY9bq5>EI?kody2$MYu9b3-r=VXJ82)2sur4@&(7?=-{(BajtTDlQ2m6O?E7upPxhT+Mk`20mSkKao+@b9yTg zgG_0@uC^3$H0^rVK7M8^h5GBwmjZ7c?LoNHtDO%Y9%lIoS8@$gn-(fB+eMQ&2C#9RAbE*SHYNt3} zZ!c`GykULc?(XP*$nK`mbD~FKs#aL>jL)NpWz3yR3pM<0og3D!R3>$rC`Rt*jKJ^n z$vTz!xX5JcM^;(DjD!#>VMSMu%2`u5FFlOFlFZAQ*^DXy8zmx{b8;eLDqu^e7E%+a zN)4Nnj$l{)lA!N_Vq^YxLQ|tITyh0ILaWpu9$D+i z(w6CX{A3<{sIYO~QTX+5ewV4kSt@aGQ^*HP?9qkT62`TKl$;u&YBh@}PTg z09Dv?q5gWk)7;E?S+q*U<#8eg011W`3zL`_~h9G!`HfB;a z%o@f+WkIqNPio$s>RfT?;%4^2WxpNFQeQU3Mq?rpL|k(2G-r=8_E;f(#cy~{4qHAf zAzZe;W`P17U&@`I>$x6jtA;~-O1S#^$S0E5LgBfAkA2M((`RQf<`XG(lp+ENff(yM z{R)$FyXmefX~JtonL}WRy!}6euhVCTp(2zSZkG#g37gpjLh@!o6kRpAw+5fjle?nB z8x2@b^Y^6hb{gt{>I@Z1)kXY+UzulJ=GwKB3mK#*qc&E;SX6S~`e&XlghHP@LiUsl z+1pFVC}S-wAvt!R6Yhg)CC`Y9sM}I&ghdV;97N6M83hj-C$O@A9@#>A5GCm-Q?^SC ztj@wr`!fEb#Sg>eJ&Y6iLl&pi&h3!4v#ln0)IJ=yGfgU7uNfeh_v+v_r8(1DfboBk z_SQjhhs(BTAV7c&?ykYz-QC^Y-95OwyAST}7F>h7yF0-pJlOl4`)cod&V8rOT{SgR z%pd(#O;PJx-M`h{$pVYFUCfRQHW(03c^IUtw-BOOT=obLcW47UVx;>&GNs?5 zFI3rBk??eShpPiB=fS%qz%<9?yAt83KHADPy6N5RKt%V1>_9pl2pfEB@rJee_~OXv z^&t5@h<4awcmT8B$pSG`C!iw7570C_95hfZ`80{fEeW_@T04O*kYS4G@Q9@JWW+Lt zp`MKj2g#XA!R4t}X3Qhmmc{IrwAZkLe=$5Dbp5NEH|0`g3VnKiZW17S%KWScY`(v^ zZapzn$|HDXI8Q0vsB)EfV=&u{aw#5LtinaSAC04X z-?^*}84g&*o28B}C9j`Qy6z#mNW}Vm{=i z=MZ0EeFrP||3Zs>#{9%*{7)1rYdWq9A^%-)p;}eOTI`HdP-sN2$%;siMP5nd!#rc! zVgkaN&$52>sm_gR#5BN;f1iAX(0Tms6igz;_%-JDRXztdWtxcvCm7oJS$6$O{h_Dn zr187=-3{CqMz;!rLAuj$6>To&)#L`(7F&p>%LZe;K{TO$#xGRPGfP86dF$OZIeKU5#_dX3 zV_i9;SGT;Om83K%8_bR9g4C0ua~QPHV_^oUf6!O&lJMjU)UH@xFrybigx$ZLU}}kN zqxPZX&qEb#hu~uP$$b$snJIBChy&d>)0cIM44$RqB8Y0Db;*KYr3#>E>5IY%4?*zD zR*CJJstu(jr&16aM4v!=CXj<9r7Pd2={pC07d;O=1tecJwiP<4G4?%#zH9OiF=0$v zluk@-fiyN5t=_bfVpL_BMH8I=&Clpz8{rTvBH`#7r;I)k+8yHHsMPyl2JTf9ke*0l zC#x;alL2|S6Bf5%yzgIqY07oprd)~l$9+}i0-R=>J94EF9i$73Hg$)Fc8eIx%iBhs-kl zW!j6w+J#Tqrl)86zh{z5ckwkj`L6wuy8;~-M+8f@k2B%k6SarBL@-A0+pkJbA!Zf0 zl|N?9e8RbW4;lzBPu^3eU+j^lsx_knn z54+9D$M#sc|4ZulB$a%Jm(Xgs+w|0s_1`Z{K0m594NzCr}AJx0O2dp z_Xe$VOLpY^$PF{nYJCFnFc~lwmz57Yl^T^xD=Vb999iVi{wktb$AYHMTZ+YAHl}5^ zT@QulJ}!<(HMz6LMkWtu?C<9Jq(gEifB4E_0%g z7gl8sKFh_F%WK<-VMz2KX=OC#h6>|=sJeh!{8nf-hZXk*c*^!R7jpnFwCmoVXa0eW zpC;8Q8EFu_g#D-nD^Gc~nDQHBht z5K>NdN(N7apx3s|QtK}5BCzS^>?(wz1mh5+N7FaR!3}R%q{D@bDs`YCgwq!sxk3&V zeMgkukU&^U&}Wl!$0$#omrDjju#Rj{rR((+jVp>oQd4X#wORh0ecSmi9Fr@EZSfJQ={xn3pTvWdp= zS8)tev5qGRTA3>u9>v0L7t&Q@vsM9!Z~v8sh2nwG%t5xM=R&}02M_UJH#(ECH-qVG zBi)YGuZR)k_Zd}#=?f+wjC4pJ;D!p|kCyXrvOJfgHxmp5>S5MnV}?Rx#wW6H;L2EZ zEJF*@M-vd_2;LMuppp|uBy?iG^o#S~6!5bo!|>g}U#CyYRz5INcodtfN=cc`r-6*7Ik zCd2t79iX4lJ95{}14*0qW4PmPVo7H&*w_qb#+7UOE`Z0l2J0{2Cm^D@d@zxga>Cv- z_zzSi$qq&1h(yS0r=bOcR5K~WL1yR{8_b_vIw|U3k8v_1ajH?~-mT&YjyA_c%N-JK zgqW>;feZNYQd+|@(X5FIK20-tvP>xhv4zTA=(T({RjDh3Q1cXQ+>S?-0-KIUo!#p8 zD1S1aT9c559aXf2f%R;=6ybwMzx}~)sTlT}X6qvw+T%oxdGR>qrP^hTAhFa!g?(%D z*abWce&p3)QX+^#JpJfR-Jothj$~T)Iz;*19z265FHzoWU-7$d=|}h>G=({Hw6fs@ zR0Rg(z=HN*@TuE~KZ0PMoLE%;HN)EC^zSJyXw`jZxzk?(8nRl2y>czSzvcJ7XNB84 zrFn3QH-&8XZn{d#zlZ9}2NHo*5zvKenBrEYWqc*7nJqIzX16c34@{usZe20V>ef71 z{7E#Ncg2g{?)RpR#CAllA0-C}ncY4p+KS#;sHkazUnm1xIB1dBC$2~$uTYNZ<=~>M z=oA0Pi@f6cNG24`??tGCvGVump#6dvU%b>|jej<`kXV@5UjE6wA-jv=4^XAKH?!_9 z@>F8fEJEj2U%rKvq|k+~&WZRGJycI!V;MXKtn6{0(8Ae$@!7#2>nBK#=&Sf5s>U2$ zM`FROjc(%AfZK2H0w7&tWgEGedij=V;A)@#=FfQMYJu=z$0BUv!YgxN6K)Aci>Qwm z8}j`TJF+7EC+c&hbZi=RDAL=(``FC;?STSoLwGuvUG}IO7&Ed062Yd#sdkIl*CR=e zC+N+Y7tXd6tjCpMtvLA`*4?ynagzyuT0lFRxX$Zr_fd1?E%p1Cf7Q1lz)4qukIO?F z?*H$B{(lr0|4V)QZ&%Z2#7}%i|HS{QWPl;==AuLSFP4zO(}389^1~w}qQVCW^sKm~ zV(S~lhcO~0>YTq>RLfp{d!7l|@U5y-@%jVgEh~S?gd&CoLRJWy~f*RdTEVnhlyvj?IUn?|5dic*dk)9ZUzMZp)JCc?m;aujrYq zclIZ6w;b2dQ3b2M_icbJI%%>h?k1t!WcIJ4rY*pqiR_dpGob=iMn;IkQHi+7O@MA5u_sS&>sj#>+4w zn^$CME~y=2_E73;Nn<#`xL+)3Is!hPTeeloU~usRoy~%?XR>61ciNumA#`KXw)g|> zyJIB6RUw2PXKQf-z91_B(}4^<*6TZA7tCVezeko3jU3R>Vadrv(}q=LuYpny;hOmd z;=xnCrKN+Z7RPy=3+&@r9U5?@;wKd)<#@x?ygOQ3G_K|jEqTwdtaBcI=;4=CCBuq%r zxh%rqRuqBtKuRoKExrb_0?l4Hwjxe3VOJ9;iVY0fP0f>3VmhT1(sYolKzX@Da86QE zZU_%0-%)v&3%_ zXJ5p2&Ep)t>;m5M8M$`Y69~mIY>3lpvmlEbOUHJc+6o986^qR6n3b{U9lacjvP-OC z4UmgpbN}R1G~YjOTr^V6LK}cqL*WV}sxh<^k-1hs9$C402TT?(vbc}AI1k7bscShu z)~pU(>8$&jOAq}neGz&SP4CYSH>#ip;adJQXDsLeONEFgh+#Y)5nPEJ$*p z*aD0#Cknr?Tj*mxH&WPiM@G4YVDe1^e6jqopg2`uEp=*fh7!_v9MfVybv+Q0SY;^T zTi-RcqVZMn;vSlped!d9Jag2li}d&NIh>jn{^aH60Zc1O!O3X7PPka+ZbrbND=1r9 z0NdDcl$F|@Dj_NY)qQKy0@q7!$OlRBt7A3!ILxAP^tI8 zE!jO0F^xc-zz$}jZX1|6lb8#Fi(*EV!16EBmvzdnedV2Tk@IyXAH2I6a5B7Qz>ckM zD0RL8g7>EE70P>bz%PlGzFSR-Vj+8>dtVJvd#ck7asIIBaAhG90a6t?ByEv(2FzrH zmw|vO3It?Vo{6mrtw*MbX)4yoKcERXKcsjYv&{OSX@sy+rf{t_1h_P`+XBa?Yiyyk zr|m`%+w!9(Ykt{da09W%+{_8EUJ--yee~QAM9o?>U^k1lg%c|coCukk{8e-Q1_wky zhDf5y;oej0Jy4L4sMsBr4!5Zdu1N)f3M=`4N7lwdxhCw)Sha^t35{fXbJ;?r*@bP> z+YSGH9*p(iVFP=y8S>29t3Nxo?GY(-5Yt7HdMP74fOLdu^H08fN-m!Qtk6Gc_ngv zkI+vuX{%l%pYX0 zfmcL?FjX`d%TdCV=4%;{lrf!@L9P_nYaNi3iyUqmX?L2-UHgT7rn}H9$$S`}ov+mg z>e-V+;3>z?zl?dvj~LFJ%_kh68uUhXGLj?z@+SPs+5P^Ujc;%Eh^U*;kUjOF=|Sq) z;0s(>Xk19FDM+zkP-%79kS&@-4b}_d4$8M#6mSz6!+WHLliOjQZ}0E2;Uyb+S_F!^ip;aK~vH|Al~$)yCw&^RT_+(pA#?{qRut3wCca$Q=DG zx(biAb|jh-YklsrJ*nX-_+pr>*@b_Sv_%TjF5s60l=~M%LDQs>vY)}I&fYp>EgCL! zayX)nV(}fhItshOs;oQYv@&*PSu?_SJA;12Rr183*%Y_p;VYRI#dpe zU88z)3;^gNO_F2mYIpkB3IWc-m5&?aN~ZVezG6_lxG_v37DvL38y>=ZZq$N5HY^e! zGXuUi`U@`pn+DLh0hkqu{YHUMsoJ{>votVOA*G>h%%gviuQ+IPMv&ZAzFcOx++PRa zd&H(4L6ZJ32Z5X!LRS7ts>Oqo=TdAxQ&D8g>f*~q1i{u@s#h0DpNbMS;tDtERg{tX zq92?!4~0Q~BBD}{1#he;L4RviZ(V%or7pd%aG?7hCJDW1%#YDLlNr+@R_xKJsjKiix^svTQOmxyNDG+&<{7Gps26huJ1QU0dCF+%i+*r8M>KcC#$nd)8cW ziX2}C#;NGn_asN8&Jncq@*71<2w6l3`K;(vcs_bBeH$mumWYt|kc8b+ifW8Xn=bw;$KQ}| z93a(0;BB^~Va4-G(-!arGzLuqqwobg#KyPx@*oGQ3`c0aJP11X$P(Ka#xqn&-mwkt zC3=aPn|^nKNdf%Z-F-+ETX4O8lsl;QrF#-TqBD&(m*-&~mlTLe?x+my!Bz9^n5CRV zRSJtLciJlV(tSF^7Xw|ebcUEE#$h}BSS7c+h&Z!@H^i7k5UL&|lOWC>HidqM{L&iq z)(x54)*NitBBpqB4QT*1%P=cU=r@lnbCK}HM7%qz^gS6EdKCJ2F9xfY@pRAipEJwZ zcJ!Z>_U+2Wd?pUFRYKU7yncn&{eBYZqQTwe_xf*sTR~~D;gAnMyWvNM@_#ln|3~hl zVEoZ|Vrcx&i$qZ0%Id$U?0-i5#AozRBzSqI-mXhq*CN@Bdo;*F32g7vQv!mFe=pZA{++@*B3zX@aADfR;3|EzZdfe z6!PLmG3Ek(@%B%N}!zGpMSw4VW2UBR`E|4E`GEK4mI`g6!yr z!8})++$OP!GfM4O3K4;~2{qa#E!tG>GIRRf6E4R47-K87=B3L%S=0!D&UC9uf03I2)^-P?g5xpN{pV3=eA;u2k>{cGw^ z8Lo0M4EE)VIP{k*7$4?VCg(z9{IM1If^zk*d1a4`xdCsFP-k?1mX;kgE zbCtYg>WL*#Yza=B)!Uk0ez+QBykGxhTz<(M_zG?eNSRR~F{ci!PcNUe=R7-VigV7o zBAzT_&Wdqxok+)-n>lVlZb-U9aYL6;bD^;MaoBo6^T$ZdkzqSiq}L9xScjoxxr{Ak z8I3gQkOkynsirpHZZIk8wO?fUtrQ5Pur34)F*}6-nN^V0CUnp6U=$wO9D`>U2BwrN z+9eTt@BQ^LFNA}?`MqHdxr{I?q_5btf*}F2`7M)G{kC(%DIQ17{owXXROO=}f@l4X zsz|>f_3|f#L%V@Hiv{^hIAAbJ@ie81JN%T8ENboEoN06tsE4WDH1Pn-1*ANLiJ8m7 zcN?eu2u^4hk*cMJVi<}_j~;;sN=Xu|eKqAsz1k+$k+Ta2I{Jv0nDv5e1#Yt&pb%sNuf^<}^|&y<_RQRR9`UL1lL}hbN(rM)D5(Bv zkI+b$SVAVF!%KM-^`9k-$3;2p_hWX_qw%As?hD#8MyZAr7t~?scf`59VudP9%x@1|p!0kR?BFEVRuWh%e8Hu6XaP0sNk+;4M|o9wuS#FVfe9uld($M@zpS_oh&G=1}>N8I42~#mL+e zw!7;QQ5Nk36d1G+qFanJz6N~}ZGPI*$81Jf%WI`gDs%g8i_}8$>k!p-!{zjmY>ShE zi5R1-l$(S}b4*Gt(bgRw9p!PnY-=Z(<3`J>pbOF;(-{^bfT5V(@P^BQj=C)Zf*|U* zjH@%_?b)yP0!m5YCcEUHU`c;K;BkN>peNYm_vnuFBX$P?$oJ zMHAh50F>KXdrf?)1d$wdOiGD0yG?>8rjdG3TnODYjRt2PtI+nxqhEVVD9DWoR)Va+;JIXe%jkBFst}mS!nG#-X2aVYAfx{N%i> zUliwpI2NYRZ+|lV+GFS8-XXDq#a#IjnSl@se-&}@N0d*L zl<40EIzpAN9iI`5kg-?=Wp8yuXe?eEyl||jUP)$8uM=SK?qhU%$Lx7#>~=h(qp{ex z0w|IHA~DTgo^a&F(04(#F+V3N-##WuuNgh!zIkm}Q~pxLsYvFUsbwBeo!HwNWO>t zC3@j<)fpPlphK!`Ir`bqx$?enAkfcn%4{< zj3WYRD8Q&2LfsMa0An&v>8sjQxo$l@H6FD)PHFlz3>l z026eja)Z18J{WRNE(!u3Gd?r=cZ=2W15}k{tF`seTm8++w7($FaJQ1Yx8P2rQg2IX zf2FfzCOg~xTA%{#P2*p<4qqqOe>q;h9sc5d2c`496kHmdGEM#N?#QF9fMXr4X|7p+ z8*f-_dlL_|@XX|NG|^XLj;zpvBhxR+lnzeC-IRxXfjN&I_P?qlTN`|7c*@Y zT+yg|wvu-qMLjFvA(hkshK(ot-6#07O3UEV}jkRkjMZ&U6bfQH`Nmkva8KI9Tq z%;Ow_M`!-d<IDX{ZZ z5Vq4+fGp^h(ctHW7>>pliUZ9kGc7h5?c+usw2wd6n#*dH@!JpdHv#Ko6NWmTi`awi z!vHr8x>gD27ABt@($;IL;jP%pR0D7pm8XGav1c*NT$&D|Ch;kyi7CZV<|Fx?%(P$Z z{f>-j@>k-0L|K?}mS_}`T1U9P+lR4HhFWihOsAu8vkwF2V=kANqiZ2K6=@S_nXuKw z)r8gQOQm~EZ!atnMWysN(N!U0giZ{41c}lGyP=O0Mqq&JH-v5k`a^06q#BuR%C+in z8zviTAgpyugOp2)Ns%wX1|ha>8K)s$PD0Ob{~2gdDnnNC$p=C6R{N-W7H|$+vBl9> zE;pq8lBHMQdup(tZ3*eNmMkU%%p-OT4nM22(!fcSec6mI%Zq83x;;|_ZWg9{PM;HW z2+FVy-ahhyJzQl&wvN&zn>EOt;1DCM`H?WqAjoYn`LeGs;LNUY=+I(Ujg^T&r*MH? zQl<`I7b;OB7nNOP++*SyLxmy2(2N!^V6PFLI>DG5q*B{UXC5%~d1ODvZYK3a`i7*c9$<{i|i!BsHo~BG%%i zwp}1|X0i1C5F;{s?Z2Q1w(-}^eg|$iL2fc=nO%{Uq?wwPr}YtpYanqm1cZjaq z&Y)UC(LfUMWglR6iwWzt;|dk2#@!SgFgq<+?#BJZ*`_kp>ECrk|D3;_%gRL_Ovxra z4jt@$e~cIVjG~G)u?qur3Q03XvlxV6eyv-Fp2w1MramyR@vGJl#&C9;vb^PTDl9g^>)Uk5M9n~^|mWYbmI>rQqBA9YlIb`Ps(WX95>jNdj+iQ8sA5U_l-u= zjbw=_@qZF(kJphRqV`*#T;APp_O50}pD&49f=C$-M!cC82o5_}ZcjMLTEILMC3Kd% zxuQJPgM`1_k;-v^+JL%=>Je>m{s=_y(AVY1UL=0ySDoj0r8#P$m3Gy~4Gx?Q0!J2i zfdlUsg7RCS!|lG=!Un3G*`fljOq-i~aS>~`=MYAog`dlWM%~mzjb2G}#L6U$YH4ct ze`@zg?FzLSodzN~$H2g_0Tnabc1!texc{8!TA z7i`m1K=)f0!N_IJ`M){M7%-5yD?SAB#fMn_KW_#4k8Jdx$)|v`xs}n!7=-^Y{{O#! z|Jx<<8TAvNCww9+@gFn5hJLZWs)@0{mlQUdwNo_0C;A!`g6@lAYOEla_24(4+QwTh zxh!v8Kn#2%->z-$$fw_!j>!eKqoGW5_l`3#|#-C@Q}vG@jcGhZHW@wCAESYdne^S~0ZI*)KKu zi3ImhH@D~mGM<(^50ZyD00i0N(5u<>ZW|_g^#J`4P51477@JjptGEIzioo0;Aa`koK~+mK!UE_ddR2u$GM2f`@y#kD z3r9JJ@u}4f-8|5m*?2DzSlwKWYd~8PhzSGyCQHdSKIKvaMlq3_!asf9ztUEJY@(;m zpSV5e&0`89xYruz&_aZGX*AH5kM~SPL_IYKMg{}sPgP1U+#rJH}qbdPQZ(XrPG^N18(+I#Jg?5%QFm2~tp&LWf zu|&DycacaTof-Z3B_0$z8vUNh9aW#$8#Zr?6e1hYKmk+}k}W@D zP42_w_6)QjDb$vm4m`jwq9amtjoWsx-ABl%oY?#q-Rk4BP%d*;0lt zF8Wu0NBQ?ilNtFsEq6ejW_76>MztL8jaF5j;k`?Z7SMgt+ikqMOe}>GgW|5Y(O@vP z6F$*Vax>SkJGTuFJR}*pfR2#Y{hnnqf}AyVMzYAMCzpqT>m58IqlreUO)8*NV0tth z<3aZj#Qdv+Br=_4dhgBU!aa14+sAkhzl&!RFr$Bv zu-{;4sb@}KcVLT>i6gUH04WGF=2&6vUBd|tR5gJ#RI@m)I7BUeP#w|VTf)>k8jYW@xMMi!37hh3PW+?*5d8F*eNc9OmewZaa6srWi%LTt6E@OQ>m+62Yv)S*6Y+8-$ z59aN7asggy5HL?uv8!f?ZK3vX92bp>Kb4Xx9o{;w`BIe^5p-r(*5T|`5E>TpGSNmOJ)4CR`Je_ zh%Od93EhZ1+K?B>CmxY#5TGOxAosN~5KeHOLp*yV(FnqnB(v@oTlMcZn)RcZ6(T|h z8T--;r^6wIb!G0MPLE9^070N!yW5|O4A;%ejhFU^t~A^Czc&QF5n|#c`Ynmf4p4^F z4OJ^609HYjnYjgPN@T|aOLyvw9TVHVY!gu>#`fc`*ezqT)^eK?U`1K6AS;rq`;1A+ zB#Iu@N)*ScyXIJMUb=Az2Bv|AhU$682nJ1}b&Tj3wz|?dQ}ZEo`4t$Bt;BVKiFq*3 z(0OE>ff+3?qanIw!O^B%z5CxBmCljP5yvr-oOH>^!4^C7qpb`pLXWCxgt|^`z)ret(T2E)(N+c-*E4@?l7cxyJ1bHkS&_%Q6V< z@MQAxK>)?Zb9piXtb(Uq8<7^q!}NG<&>GBB!yTK*Xk7KDDnsN z(iQ6|I-L3PTPb6^9vw`I9gR=~43S{ZF}?7`Mbbp7_-pLCzA!Hcd~yQ3`xkmm#sIxo z{+S9foAnJRHq9iu{;7IhrTS$m*>ZIWzj306c+d5swZ&afLEW`sN(|=!$|j)Nnu^kZ z%c$@OI}e!+#+NucK6J3lEO9UsT(O^E>Y_Qp7uTkr0o8xBdVhe&{hX zk%(BG#OZKUJP|wPC7&>T9=Q#8l=9}CvHAJBUKDT@Rme2`A99_p(Nb&lBWTO*G(`U9 zqcQ0cN%m?-PjEDv-U@h6asEeu8llJR0#~CQWSb4Vb zWmQ;n3=8QuP5Klr!EK>T%9{D!4D8yIZ97`I;YF09O}=mu==X*wi$B&(%(&!ol)lZo z7nCQ251=vLn8eFkPTV>B_7eDsD*Zm;U@fjIGq#r$@CQEFBl79y+#qjJITwcTcsiFL zJWy25Wy?;VpaL1vWxq8~K;u!l9RGW?m2vTxe0rYw<0urTNt-9zptpW9k&&u+4YznF*sbO zhOR&`UF~@`P*(;AI<+JF2Vh}<^dh^^QTCYJtEnxz4QKfnkJvbmdHp+P(>ugft*Ar= zNW?_p3BGk|_Gg+#l&p$cIZzyk3cQBN{M8c3 z)FQ5G1WgvzbEnjQ6HxnwxL}J?vmuP^NVD)#pe_1miSJe7yidN`bjR>EtLz*%8_U!8 zDMkp2YH&5V`FbT=>~0HoC$Z>(tD=4VWt*2bap~O24mU36*DP;8p3#HsGX+oH-247x zE}M50iaI8dkB;lkNiS9?yV0-X-1Qz!*fD>86mh24@BdnafV6MOo%o_g&c@ zNhX1MjOM~7^?n*7$Mb4kRQIHugF(u;h=*g>XG=GaaYD_<)b$4eNWpB#y5oE1rq{!R zkGDJQ77G&;Ghnu@HHF#L@TDw)(vH&Pkji?q*3i5;i_+p5wi!a@v8(Ff5z!U;V4|b! z^sj#)zTg z*D>vjIZZznC%57c`4xG`cAjn&GNBLqdl!FMJ#{e0culKtKpXk^R3?}pK10I)z!k`*l9AQ zX+W3O+L(i-^7u)CmFDR0(&sh{bAvNkh%A4R@JXeUJBKRLPRshdF*;lfju>Upgb z1b(Gnc)?lo_c8QA$bf?7kxs9}Fw0hIC_{i(A)V%&bGE9pLttM*jHBn~v{XKBGdcvL zi9C79H!XXqfrIEgifAmpa5Ttpyi|fn11+{~>F_MEvcM0!v&kN5$U>0*X7aSJ9QOqs zKq+9Xcd9so@p2e4g3%~P><&X0+98~V#49k+9J)P)5!hlWBEqO4WUC@V`B6vc?U*{@ z4&E0t-pNWMG?lTjRwfRD+~Amu1+2zJINq-5wHWDzEvd!UhQbZMoJ`0Bg>+ytvJ1JB zJZ%^qb*d2u-%$XyrFE56MvFl0hd~Yxy9?#(_EC}wO5}Pc;Ap70t3C9;&Zs5SNEjdZ zTN+gu1{i6IS5;L~*;Y>$EyM%3(IiL+`lfV~s_Rv{$m$BIjPdBGLa9bdgY^~sm)b`K zXB9F*_W|chI8k*&JGYf|iC>jz9fTPZ9T^A%r6WVGF;I!E6oI@by|>bJG8W#K1Hpxa zG6X0R8N!r9m*zGE+{Ux?ek2)Gm=Mhe&ht&J)C981I}Et`EiT!zb^#9Td^v|4bD^WM zL}4P#CB-2UajS4I)bp&x2Dh%$QzMN+Q;(w~*)4hFas;+s_0X zrK{5G8-llQN4Q=5mn>k%Z={{?gh!i41>U^l!?>WV^nBEPr*3^iKD#>KtVDc74jBOq zo)LqFktQn!qAhQf<6U=BuI79ivB5UW$_XO$Rh8`B+wk?5!0L#jPmsdYfRBbHK>?c9cvETlY!?o1eZNw=StM8TO} zEb!z&LLhD$UU^tgKF$ows<~4L=rhhXIS0xLS=~l)^%d_GRfAR(b3d*}@Qz-bBV)4! zsjx)ZB=hlR^pHi7E@e^%>>S9x_Dk4%!p_f^W2sxU3{JE*;MgsW_WHxg^Y#7uS4y2# z&u**yXwho_XxGyGA5f~Iv6JFIrtk_mJDA&;{(ldT|8r{nJmwRhNB-k8Y25}(7HpyPF zT8pSDoe}nWCAOH1Qz?({J;vq-5UxL32c5N`taGz^q~a3YSY*KFO?$dV3aP)C>GW^ zja4gt`Ok6mG^emb`zqB}q+?%fO=>E5pj2l*Hn5AzuSD!C)?C&3)dx-o9MfGx7eNIh zp<+t678*9#Y$^Aq$*84htIk<96I+u*=couNa&)EerPI|PG*`5Bl2aXP0%Mb{#j|9~ zfj`vbvxx0s)ln|gC(PP-4bzlSjuxc>L}`4{cExzu2*&Hl$)rNeYgqBl`iNdJqPXIg-qB6+dA{v1UjI{`Y9=IIUxA73k zX05?B3cN0jr#HYu)gP-J7q0ezurnH&igP^+tm3XY#_ZjPlAT$&*ZL;}!!@2smU`}Q zv|GY9P_)}l{V!5~{C+N1+no?h!1D|Z(@a!K|31V2L#?U%Lc@?5191Eq%$lf=hPF7T zwO%P3pCM$CpNUxEx_-c*3TBLT3pNy@0n}Z;X=~Tc}=T28=)Kh zQ;PBCdz-pu1j5J4;ISNLUV0w7dT-wCRr`4RKyOhnK^X(`+gclKY(yB!5~Lg{4M?e} zcbDQ?ICUm1o*|msRH&F4hq4-4=?hQVXp`WLN_>YEPRFr-$}E13n4 zQ)?(iS_U6T(Sdn*q+s|f9zehm_?louv5{^Y2RlBEkx)ynqZEbM;f^cowUFgwqad!J zW8Qc$mSvF`5Hxsvrm4)m$m3gomMfiYsLM_{o*L*)NR++Q8<}eFgZN1+ODVf1AcKakeGdyJ+WBilZAH4HwT>RQ*XT zQ-s9ET^GNJ%uf^fQAOuO`nw`trMYz{HGCXLSQ(pDADQ-Vcupt*Ku@gYomnC+TkT^L zpjvty=BYL+jhCPZia^rGqihHInix^aIPX!Saq$Qu+mRAf(P7qV?863e}Y04jtigy^>_9%d9k9c z+|P+9JmTyw&lNL%e_vM#VoN5bQeb7@hs79EBQW?rJy00*^fH!ETSz9jTG~KNjLs2* za#)ZwYGdC=UNX4~n9U=JFVjy|g1s-g>25$Kl|~UrFUyy&RLjH#6Y6J0bq?9A^;QYvBlYsF&7VH-tD|n^lhxeAp`J=9fFc)g#KX1dQ zE+reDedREs(E47?pz(G*4e-$JrvzqI(wi=UyJ!zrKc20H;PqIK#=F8eSYlAqUE{Ux z@$E3QnG}fn%6VQ>E}Xk99$6c(b2GMo&S4wiPopmn&GU*qKj(DmEulqnAw@#>5DX&i zR4l=-+1bNaL6-K4{j2ff^fTGFS6IV6*RNpR3ZJP;T4RZfAx zVuxrF)N6nLsuH5fvjlbwDLTBph3igNBTDm|Xd!&fAO`B%FmQ?VV^*bOv?ZAz3cOm6 zf|@MksblYR9@v6mhphXdzL&@f3RCp$50SAP*l%Bvc!4hh?yFN;@6~FL@&&yXdG^+L zu0l3Ww|HALLC3RSEG?n`UR`d2KQuvN-=knIEt(l`<|cSWfM~$gUuwaIYw{AY(?)Fx zmQ-n1sttvoo)ttifn0c~yIq0Il>EEx`yxAnqwRz1+&*|u{(qpxJ~>sv*vZ+!Mn&Js z+4w&v)z9Fc_&n$ng(}*gr0NX|Wd%8A8l*sGtXb+OC&piyBu9adSII}sPd8VVu?JYL zTke0$-JijD4`k)&yxN`MAPN|kD&JsJyi@3$(%p)Y+pKSg`Al#l5*#OfZv5%MoBX*k zzU$NV6H*V-97-8r&z&Q=zi0?PFJsz@Q9o0pQd6ncn?;H(J!w~OI-vADV$DU$P<aSlPbq1Fi6@A=RuV2qwJah(> zrgSx}$CqsJRVA2mK6(W^t0bTZBbChzNvaBUx`ha{VEqs}Xs6d0an^5BH*}DO5wjjB zsB-}6y;XEZ(Z>)Sm|fx(i=L0=F__GVZRqI_w@(r&AFnfjq&% zZ&YJPL*NkN^+gWgKWC*^%L4g>FFFm{icUSH=feOQvg?w6{44jP;At3y;@w3@%CNL* z|AY@%3oBbSOC@G%qK4~w>jU)E=&lG+Brex*oqAcA4XHPpsp_8VA~ga9-GcP<5SK*P zesjh}=2@Oz#Fg+3OgIcU1*ovBl_a&NXC+-x^mQxli?bo5O#6z|wh`u!Xlf@-M-I}_ z7;1sh_t4E~{!NFadY}I&4W^?BtMBfIZo6Dg$DGNf$0*bJ-1 zVa+1O1MXfdBGtH7sGMc;+D?6(dc!&li=G+|ni{=uVW58kZkYSF4hpI?P@9Qk3l7Fmq2&Hf@@EYy9~{_11(BStENC@Jx=m?Bz7|j6Gru2RfM_ zVnXq)W2?`$?Z7wfi1lcRKXBV{?$Q8%8F6)RiYUJ8Hi5Q<7_9yOVeKt|DrvecQ5tt^ z+}+)s#@*fB-5nY`xVyW%ySp^*?(Wb)BhA3OGcWG{y?bN+i8m{PQx(Lil|co$GuO^7 zt(hq0dq0OEqZF`=SlU0`X@U9Fa75S_%#C%^P`@XT*-gW3rT1L6qbS=|M4Y;MueSS? zQC0K3^bH(Fy9IH*c7U5a#`$8^bp~7l@_WGC2SPf}gd}JG(%v=USYt03r)JgyhQeJYUql!_He?E zhylF{t(Awqa(Kb`bzvrXM1Nx3lZth+^2ox z`ad_G|2R|rV)?=s;}@!uW);^(Q2-yTpx8s-M&K;s*`frq7K-}-@r@)wg)10)3;t-I zM{e2^*fc~WF^!fxJ}*GOWKI*)j=B*RPc;mzHQ1`8&R}r=RCfD)@K*4?+}CV>05QZ| zau~v5es*r-wu7dniz>E<$=*$;Jw>$?pm`}?M6|^zfGzX+`<-5WV~g5)=_!~Hb2vM_ znKFkl(%6X`R`bscBCQ2iGx`X}Ko;HSalUuKAIZ_;`4gTY22DpS!2!s43GIG$;P0?S z*<~()>&?W!+h=6f6E>2`Qu6br&tAL9UADisTSI4w7FwJ@^nvQ?3IS7+dL$W8XedN+@*yy%^3bmhMY^?28m;G%?D5$sagngqasFT@5kZh?|=Uu_s7q9Bz7liIGwT*e87;6 zeL>emb!~KYYlv~+=7y*gfD;e9zc-U;a-}H-8x!K9z-QFX1`QiSH)uIZjjyINTi;43 z8>1Dbg*Gr=>)V`fy}T?0I7FD6sm*

      2&d+w!T`eJ@UQy)-i?0%+uET6Ch$@rMS9= zJm+?aYx~FfG3NtakFee<(sO?fg2G%~b;{OLa4A}RNb~oi1%1kIX@bv6N)tskju5SvGQVw(b@aZ@jb)`ano z@E9Zh{c$MU>*8yi{i|0u+`h2h8LS}}WDg|dtbP_g1YzbtVHks1uR!6R0(H_^H4x#E zTd;bYS?gLd0*8Q&E5`1(q5|gPRCS&mqi?@~8s3$&OWP=t;1%wl%X2gd&J+^cQS-Zp z+20q46y)+3oI^G9c`pi*!#wed90|{~*5>)j#TP6S)42;2p%S^VonrFKuZz;QYagr8 z`z8?Y3<(s&hz_G$FfI$)RW0xZTyP5LF$cgsrj#}cTYubog^Psq%WD_5ia4Yh!tMVv zw6UX%45|4um*MI&uR-?Tvm5`N)9XJJ?*FGQCYf<3d7tTD)Z2k z78}M#TdSN-M_UbU*D*PIJs_p}B0`Y{tB#s3$5p#`z1GmvH!^bV{&ow(^4$5j=N{_` zu0~RzGG=~RTB@|5C{$R;uxTK^qi_-HaQiCnKT`bxB!RO7ZB^FC+QN;vm)4HV_MOB4 zk63+%x1(GOZ|?X`oa|{_!qKc%alt8yrT?`oqYnf~0HVI#uiv+JkO!KAN)pFd zklxz>Vm|IGo>X?dgAMPKUy92e%lLGzpt$u@&!nbf>wT%m8CK<-0M5TGyoy&6%K^|n z$k}RniXyfv#fQ&+Kv+kZ$>8(yBfwM-%wkE)r{7_(BT5R}t9>7N<-qrpalL?7Zd)%q zf*_k)&*$P4>Gvl2MA}d2t+m{DqxzR?N9B30E#RbJznc|MuG8@dT|Llo&gnFy7SbV= zFb27k6<|Tej+H+mXC!7zIle?v~862r{Urafp?&c}1If+@vSINBY6fE}P3D zW4VVzrT?Cp-sQ55HE9jg!mTFTe*oVp64w{-lvLOU2nzk&1qRwF|a8a8aDH`pRSO@m4)PNh9l z$lY*kHuY!9ZR+AFC#MG(V^|3c4%VnxXMDY;k?H9n-=0OyEwcXDl5_X4S=?w!8D~IK z3sHBLPTFaH@(*|&64*DuGvPI9n=0+2cJd<&>@VF}dm|wfMz8i*3&10s?J%_Abf2p> zz}_{>&c137vpAVm+hT#oKpnt7c0=mBCa$rrF@N#aKGP)=x7?~VS1fbYP7Sb<-+0({ zO2M^lGfB|e0;W$HQV29UkKg6OZB62XC9dm7Ol^kAM}<9BX35jIT2rAghssAfR%y%+ z%tPjX{fv>j)EGdHNK(}0nBcL421Hj@IXMM$1H5aXLE>Eiw@OS%*o1;YjJB&ws$=G$%3eiW>Pt>8eAulH_rfrd58u#vs1S4R ziv7-7yhl|%`)V2{j>C0&3)`2eBJa;-makqt()u@k*3>+E? zrz+J3CKLg#S+*=w-w2aoy|USe0*VTXDvW8zJQ~U6yUQF6M-a&0i+|`oWouz$eu+3T zHhDGH)^&WBd4HAT_x=~+=VdG90D0{;!vxs9b9*`05aTb&brGo=E?2G^&OZ|I7_XMe zx|qEAoJOW)daRM16*IinWs3%znD>ds;=tI_RxCDXvKAs{g4Bg79hr}l0B0>XX{p@J zrN{(4yC1Yxz`GliF4{8KmL@D&ZqK=qKl?RD$STrH=2ho9bEPNHP9A71qiqYF+Am{$ z8ERrwl}k+H?zX^hvp0bMIJ~L+x(irkcM>d4!D;3)YTxXV(SH(Lick*mxtOJHpQpBG zUaCwWw@T0|?7vTANu=f@v8R3XYqiZ^z=>S2OKv0pO{SEu9gHDB48W&GX*4S8Emn7( zUD*@5Ajr=JtCFr#An;n?0{aFE#^vZKf?b*flkOr-i$V7=nQsYOmOS-Ql7{T2yQ7~# zYn2Ke;9tW-SL-kf3aUB@7c#?-t2n}O?tZo!u7flxFM?)1+~Xv=C#1ca8X&WRBM2;k zsRioFno=2n(hLo{V5rcr>40gCb#^N{AXMzZ^}V0%BDOB8mN7=X?|wyM-B8)-1#YqV zUZsknmIuv`=@!w|pd}LB!iQxXr85W*OYKrxhPCv!&PQgHK#NJ*Go)C(Sl@*A4l+Sja8b z(D=SGB~;;&l1~7uk1E+uV&ML&q1=E1_bj#&ozH&v$T=BVEsj2;)EvX7U^w&pr)5Au%MF`Mc2y2>b#H zM;3Xx#ZEM6oI(PKgMD zOu;lK!@@87mN7X-0kXcXU+Y#?5;$%%1W%o7MPM&XylcwycYt6_s3f_8T zvh6{33!O+Xz69*x3tRqD$s!$?bDG)FzZIN;fL^Q*0tzBky#)nOjPiV z=*+!9tQ&-r==Ugs!y9N>wa-t37ij{s`s1st?4QTG?^>gO!{g7N5|7o$b7hs%{UNrio2Dpa9t8c~TH;kjhE=geyr-`B_~ z#mE<}RDWmjM!`OI0nrQS**DjuQulC2F~j`u86#s}g{QQJtVgvdmB40Or75JH0gXe>tqekJr^KM3P54ZlTiMhw zBZImv)vTymdTst~-gTycgu=EWUS`&$X?O0kJ+hDgm++&k$Ig@;DgzGY)?PemsjcH+t&!{;n^X07DGXb~0Or%Gg61^b zEt6Ja)p9YplJ9u_0Y85@U_FlfD#2*o+JN$KiYcUTaen3)>5oTkLeZ+YqfykL zCHl*GyjFzdrXXyaiK((UJo35dHFJgo8m7iC!jC;Rqm7r<+1-ZL2s>N4C8BP)h`}%XH}k`xh+c z<4?Xswn8hKcE=jqjCwr`*jD0V;@Z50niLF$2L-op#R|*PBc3uNmvq>~PIVhSo;5#o z`f;Ytu1aOJ;1ea+)Tu0fw2*50)_BdEm_z4dv5(iPlOtwVm5fN1L={?TYKR5}zyVX6 zJ->?1pZZQrwgb8@)#pYfm{3^-D#Ze!MLb_Tu+9)k9?}B%Px2LifF|pNz6)1}exy(6 zFoBR+V7FU6yb1xkH9cxR+D~F}^}9r33o&kv4SLSC?_V^?XzGH;a!OkBes<{*5Q+57 zaL^TGq&CWUC!jdFR;`V?ZB#1NLK&Dc$xf)@d-MRlk&3v$O( zpqt}&-e^ickZk-=FboC?9Oltr&6lG*M`Cm+djbs)<*bcY10ZbMTy`>}kRNRj3YW5A zI9QlVE5mFi02okV?BcoIHkp5RPkI}L*W)Z#oD{9B&;L=Fiq}N zELEs9@LZCjhD1&8Ib`;ts(3uow{LX5F7HLA$Ba73Jn*f{NoE(GlH$| zKN*gv=l&!}Jj&fW@16i)-=_sugTvMsIKo`9IxX95BgtyotbcXUGMj9amnhn~8|so7 zSignu0lrW5s+_Gn$5nMmle(U}vE|eo@z9IF@%b?js9QxUHewNiU!d|>~j)=Y2M95sd^Tx&oQ=~O77!95em_`zr}_@$88nkR1;=GjnT zhVDI8DfRb)x5j{)@lpBK1)D~@8tDjVI+e|eGE26^7}f=on=RF7+6FY-z0M`A$*&rvR83&S1UW05z2E zCF*B%D({cTTv`9EkG^rHl%f2CbFizA9#q{F$5EI!!GTMTQEy500@t|}+wr-cwg6gO z$Ec0meU0L7v!GpyXWE*86io!mXI}P+KV@ydlV(072wc;Wh}laV2cZ8_)!O*~ZWngS zIgKWP{!l6HvH!VjS^TY+oaB1dI{1Kf>-COpxJELZI`_6Kv`at{+Sf>_6d#s0TbRNT zdg4wUPqPnwo%-H9eiLo=*FKl;U1%nO6l%Wrvgd`>Y~N?^j=gQH(QUR)t}P|E z%rnd9%g9EVJ-{P*ojLS5gb=$-{<(JJ%6W2^_^U-_q_CWkMj@j;7Pg#cL_C(7qd;#| zVgo!}r(JbFxOPOw41n(J{E?=uZ<)zPf}CylPqs@I9*v5w6tL1|6A8;V>ulY?!k)A$ zpyu2XpvAz#xS!3^2Io5@&2C`Di1?9>A|40Cw!(uOJCzugvttYoD#w64omgi$jb z;9Nb9Z0^8hGL{2C!Fh&gTcbo(JgT}@#J0F9dtofRe{L*3Ec?>snwRps{d7`cit-j3 zn#ZXj9{STv8WDKuvC&6PDU28LS{#d~T{-@jq+ZA09FIP|A4AQlvZ8pUl$I^gyp>EF zTXmGP&lHb7;-&9)`~*1@s*B6n?xbnaqqEvG>jm;`z+W`!Zp%G}3Tx4xAf|=yEyqu| z>@3TBYv8!co3Hmc&^QcWRm7n;DJF!UVAwyG86!3jo>^9n=HIK~ZCT6pa4L*PPETTT zt&LYw@J((S(|hXm$RQfJ+u4zeEu=Q{niuvRwBUdZVGcf^Jv-NiERh@P2(O=A{00D} z2kut8z#H1(0EzHpL@3c7MDa>?POpTO@a>yiTu-_yPoUkNMSEo+^LBsB>C|s`;BAA7WL25H4r|K9PMqz5r#w2< zTadR}#6a3N$u?FdW~qeQO=duyP_o%g0TT^2KCQuN>d>80wGG`wy&~!DFJ{`3GUYWIjjavF|{JmdvU-+W_LXyh=>+hw7sY2oZY=BwOd}t&x zE6m6zJ{XHaO6mX1p+jb3-_enV%h3J27r`&~9V(3MFOXm2?UZel1tsOC@$pvHr?)qo z+sVxD4QLR&lGPB(o?b;jWI@e z$XhBm-jmkU`ca;JQ!q{7yilW!wVAG9V^*ZKy&A+Bv5+eMXzANe!%_sKL9Brl#;5V> zk%Cer=oEwezx??C)j2yPidXFy#U6ck4b1SrG-@s>gbjEX5jYsoY&6PuY*Kf|sYxmisQQ}3hh0rb zC^KO7sLVjF=f9UGe;>?v6kx%{Ys#X_ZrU=BpY@!Hk4v^~RK*?D-vu9NFc5ZeJ7Nsf zBFk&RpllVq7(;0vxJ2aIv5`&N-m9$Z&)ak2FNAxSm zwBiQ`&1mt!T1YmbJ6!$xfmzG$qgU!Kf~1i@zOiiXD|ofAXWq~i`4`};KK?$*yB zHI!ZK23lq~tIRK-$9mI4+B=ol{^^%Xun7P#O+r+`IgzFiEJ)~d`L08s{h_*>)q0$lY_kXx= z=V3xhjX&Kt8K1ch|6cUofBB#PufP0YB#wZ|BGQH4ywRIusv3c5~8Xa!g&`JixTqo=Ddu_yfad0;Wpe=~+d#IlhWM7p7z9?K?q#Hv>$w2n(Qz{*m>yQn z5^$7h*ovu}V&a%Yv!5hUl`LW$L^xv;UDl+(GO7@fn}Y}0A43++#ln06L$3N82NMax z`lwW}DYw~PyflwEAwBOA-4SyUE19{SDwZ8p13!*d#+#lA1XvP~aPD7Fi2$jlXB%#C zU0$cCtQ7Fj3N^rnv6pB>>Tb0YDJlx8>c#15;D#7um=mN5cs~~p+GpgMk|(APx9osh zZ0PO|O|*JSJ2K`8g?y9>Wn!rzI5HRFjuKIIksLNu;!sR8L}bK?|KY%zIKctG56Rl- zSwwKI-1}=6`TkoA`0Z$E=mCaUh<&R+jwjT^1gDC4_6`Rj$uAL!n6u9^uD~-KBN9Aq zLDPhQ!1KY8s2!FOrIUO}mX386>k%r7E7O}0;(~mW4o+A75{e_tXk8wm*It|NH3Go9 zL8Z>X(-Q8<2Cv~xtTbAQpkl~om{=pqLz9OxT9>pZ?W19NtlCi5M0;Rj^F|U_6YjX+ zH=UnBF)xS6(S(H*`ger6vcgn-@OxmH2|tv&&UX{0Z;7VnSxi-gnvBIRDG$74te!oy zi|dSnDVA%$3D@cFxnrUyhksU=Tky>Apgc`H8?=f8(CjLb9#M*^l7*E1R{kaf9%QHA zN-qF;N%N#$F8N$OD%mPsRXd3~(rSK$HN=9W!EEh+2s%RI4447Qj4$S4i&Zl>f^OZY z5)sjv@RT0dVTddF&Ah_8;KG(9`%nS_@SK93)vsCrK?{K^caA!OT+Ub1>Myz>LHkq4 z8*GJKt;kDVgtL4LEnrl-oOuUD?<#{;(xKI-rD+;5x*EJjN2TkpVPc0POBI7B{0#{o`i%pw|A6fQ=`iqwcItzHqR6MS3jLH zZ-^T2KDOY84M6K-^S*IAi_BQ(3}pIgg!v?r&2Y=emoJJyA;YxRKq11OLQyPY!GWK! zNjXEe9Ngaj%rh=lt^ha19*b#{6tk|$KJal?t~FA_*dfMsMo;)75NczDWL;w7n4v4C z&)#ZP%q2gZr<7DdZ`Z0kCAT}z^N;qKR!zCEkC<|AQTGUf@})*2^3U)JkBO)ou{+wo zPo?`7hQ5Gnzkl7|{Ba8q6!_eXuz!{-7x=e4LjP*e|6_mi53~M7_JuFvFJ!4&seKp2 z@C6rS3ld>O2J=Lsm4poX8D1682%X>fttwAm-YUfynp%qO%Jzp>-cv?Z*LE#`uHH)? zdu~al68~f7-_q>vh7Ll5@8O9~qn*s$*S|fs(*C^W@c#v!iMl3LW@xl}d28fDpQci^ zOvZL#HYwGZh?K*SbPdvK@bvsK+gR8|)i;8;F4(u4xdWr!LBhvL1v^KiG42>hn0ZsG zJM+6u7oZ=`6M5QCEJGtSmZ~8$7E705cvFFyfX%X6;$Y&hcceNs8cD4gjbKJYDuQqM zhgPwD((b6$A`Q0VJ9{D+X?BA$ZT110N2zQ%GiERfr_k|Hjn7tYys`5X>(aX1xR(}+ zl5p-BrjtBtl0{SrCa@2s%&$^aej$@Wo6Nq?ztjWK;3B0qCZM)U9*g<*TNLc5`43{! zxT9jrn}@Vc2}iR->Ge@%Rt&s&g%HcQp!D5>wm%lOkx(hHc|o$lSZc5;llPzLd{k6V zrA%@WzvG&P`#yVHFHB0;1O>vrc1@T$l_wvG0>v;YLlve6nhzUbip@wiT{|hkib=vX zM@6`=8;jpS%togM!I!IIMw&S90qqLcanT?dK=bP`-QH0AL4qBVS1~$#OQdNNcmlW2 zbk0Cmv1-;BbQBatef!2EV9rv3DH*(*7^%D484WE*ntntqt6zNMrzzU=j8W@6!bGXr zK-GtIKeyNO5+KfmMVYT6NP3n?>a{vlMu}hmmUZO`myGBl%_uC8g~|B)gL|VIVr@9E zbTF4-h!ZfpHwx}7vrj2tyhggqGf)85DC(5%Dxt=V#y+(vd0V-H_7i0g5gtOGR6HS; zkqB|6qc2L}Dp8YMQP;Q>aVkedvEKxEb^;XB$UXXo_%8Lka3F0e7pb<)sJm{Xew8J> zJhhf6oro-`U9s^(uBNz}2`J7f7^Z--lzUuWp1ys7%`_&!7SsWEKA(y(FD{v|AUPn- z4O8^iQ$hfu_lT}L>zAA3vg~cKv?90~jqjL-p?Wxpvk_Uf+%|zY+8<|a#^bDcvwnG~ zpsl&NM2=MsAF&IijP~h4Tb9rSTkbo zvl+(`HAE+dV9s_SN3CRAZB~`NvBxCO9YHwC0QZ(nNHk-bJv9Ha!g(VRH$5SV0N3mA zhQ1#2fiZi1?9S68sW1zs38g(?N=jgbg}Z}3d;4|eQ`PAs33MO(0C_u#G8Fb-$#j6e ztZ(Z5LQl7`Eh{p(jY1JhU^eZ6FK$>dPjPWAE|mm$^r5`4*&YGpu=o?L z5!|r#_jr!YC>J@oB}$6Zn3Q~l;roSkpXHs1Oqm!n$Lt5lpxH^i$7Vj;Ar4B*ZTk)& zZWAt_$|%}u^fPVFaC3sN(KB7Fb^Z)gE|c`!l7tLv0g@oR<*O6pTD@dEiDtbLFJZH| zBx(chIL8`%jX1zs>j~+e+cf4+!5rMqM${5{=N0e9->G;*mEm8vM3}GH-kJ*&yFi_} zP{6TYtWlKTJD+u7kpsY2<&nN%6IFy(6X9`*^0Qnzl*B}wQpwKMhIi-iJj$&+nv7s& z4=TB;i`fHQIVm$y@ic;XBw6&rn`;bm_vsg^jm(*x4d4czjQ*_78=^&3?WN6}P|?vA zlob#_NZ{$YGVAmiHyVM(nOlSLepX5cQ_J5iN7a4>lX*gfSEDVUyZCepb5+Y#3$)?e zJk$`7mMd9^ZA*ZG$s$p7q3Gd%bHN&Tc)=>diBB9NF|p4w)EflS9mvf(1S1cOqDkq! zjnDcM4`&%n3zbT3BLQ^LK>E!gi5ANKJ(bWSrz6K`sfo~t-RE9l2oAl3eGD*Tr8BZ& z>}8F6pZJLNz=~1g9Wax4u)x3-J#CT$b69lq|q>be=O zc2kZkOHJA#-2VIEuS@4QJ)NHc?h|mw3{i%DN%|2fP&yvPapUXmC6VI?F?dM@B2?FV zT})JzH7Q1)w<*6Jf1MX~h#v;lw>`Lb4Mr&Q4dSXDLRN(m{VBNY*(bIusUymg8y9so znHW9!PkJ9^`$uOf#dWs3$WP&H{kgn| z{M&2Re~Nl{`fpVE7vUGa$iGnZpH;a|p6`!$pvtx6n5J+t@Bx@`LP|**%3Fu_NE3%o zRi0(&eY@(nvppj$m>>3eT5ZzVP{o+|x#6kznx5L=eA?hh$b1K*a(bUA29EKiP`SuhZ{VB}xphFDuAN7=UB$n;s zlwQ)#J1moSJuF6n$XCbV01KM6)J*!LX$-|G?O6P$M@itq)&04DH&IX7HxlTg}*F1*|hQd+QEWF=uSP-6pGZ4C4{@KlPA12 z0%g~Waos0zv{-(aCmHe=QuC?b0g?p{VMpfFp!SOzLCuKx+dss)pqp8R(x+(l`V`R0 z|9_^y*KY1V&y0WUX%nLZN1*ip))8TF5j3pT>}+BdhGpBTban zO?AlF)}3-47^+oapA+Eq&@HTtAi`9hw62v?FL)6bWL1&+)I&_3nyj>}CQOYY8)e7JrbfR2vaLzGZ zpZh0{_TAV%HLIXF4rZ6P zJB&eD6^qj7t>oP3qjPPZ=&#%vn{&Dni=!3?A0Eu)NFf1W7y10u1zS=EAbPAne4|0! zyH_Tt;?mi%bI?3=~ojc0;j4Fgs16_mbnWBEn#dr3mnXJ00q>`{wIT?DMG| z+d~YTJT4RyW-L2@qHpG&EA~*3j6gXnAW`Zxpr{acrb|KOZ`-^Wjm<`78xFl< zJXW>t5pqhuF9TqWAjPrUr)iRDGRA4sVteLF zYOIjO=SM1yC;5yU-H5Zh$kGoIo@WfO@^ z9pxLnFG%_FN}50y8SEYB@iWiuFeO*|Be6OrxbP_gC&j+)B+GU^4*I(JQAtLEy4t=| zO>;m1VQa*Ny_&I7tDklRqE!GrN>k&mk=EA7fL~IKos%!|<#*w=a150OA!!STt<+dM zSeW-;wM$4X^qUj|+Lxcu=hHhEA^Mo($ z15=#(p_&cKKHVD?i!fHP!I+kgj_MdZ4!m}S!ZlPWU2YckZc=UweYK)OW>4}n;T9BX zqS&;-mM>xZf(hOyp_cK}neRH}J=jq9rqFW}XmrUu(zh)TFc8l3g?;HdZ@pW}|lLf>QL4A1@`KEgffNVq|4a=`ix zR;8h>lS_tH8dH93Kf>ulc5gjM%w>}`kRnTtw!@qoz`;N+~mA=#SmZ~f{1tMJZseMv+~ZSeCtFe}T4`QD4U zC++F^`eW+@sF(3gOaMg4Z%RFrm5v-bJuB_lw0}I+v#%LhsaUmj^fEs!XTed#wx~$g z-_9w)!FC#Z6{V-&>3E2IBuGGmNDs`G$+?)P*bH|6jzFmQU|I=w-OyZ$)?BSocy`Gt zjHTt&$VoG2!YU|;8RyT*GGR?mW0eV=o^vJ~e8TOOhmSz{IJbd5GpxY+!ksE%$sts( z-n7;RNngq=jpxPbEKS}_R3~e>)|z#+8PtJ1S;?`BS85(3a#rCYv1l^HY?v3y1?d4Y zmPe*kAqP++lGhG^!f%*SLQBQ9nH^T0@>Zz z(ibJFsnEeIN_4kGZcLU?LwqxH#5g663jIvWecGaMCk{E2yfZB&;U1Y%ve$$Ba2@$z zmOMd$ADXK zc-@<7XG6r?G{w(;Mvk#&&L$3(-=_ ziR+Gen@)EV$pLH`|AVE8_f@~uZ=!0BQ+tI#*ZP&jU}YqQQg^tzd?wX`CY;ZVqq8cE zmqN4`hDvu39n*F8>cW_BB4rxs!#mEHg_5tQau2IpxT7V!A(^{?`_!na0jOIr#9b1@ zM`mbw2nb5E*>ue@2=oTpCkaVU>6WWoqHX&2Efa&z`Cwdq8?CNe=ohZU63ma%dPleL zpmZIw5D6?3Q?{S@@`9b-QLX5i-#k2Z(M#44ctch>HLg4GO!5=W;d+nD=e%)z zxDlzrKd;abu7zS&b}fq(^&>`gaHN#WqQKnrIh9T}@%=X;K2jQq-f_b zREj9j?UrzuI@=GbxjK-FR+Mv+A?3;j3$Uu7tN!qgF%{{a2%qKI*;6fnb$`?g%@O8# ztLFvWvMUtu%RMa(ddE467W<%hxOP@{q#It)t_c07?>qbM$T9n%66A5kRy)9=H%y|3 zs?!|n6n4L{vWJ`;Uzd#~unS4TmnldU_;M13zhxAXNM41A-s!r%H>A4wPzVF_YZ%A6 zRNNz1p}BUQ@67wWpQmO-4=v}`5VG$SC~Ir_uU$G(nL58xp;{&(W(z`~wuac|0skF{ zu3&o8Rj)NU(M53(=|3GpP9AFx?AIGIgOZk)mO`JZc%XZOAK?p{vj_QA_h=5Khq1PO zgOD73|}lWdfJo8KpD(8eMsjq1@WzLh)?3m6biNA^X2Nh8)n zzN5$SkR0uCJZMz+E8ttzt03~4lQ8fC>Y*(;LgXE4DPFO8o3iqDDEK{kVDpwY93G|(cRqt_AGgRQGBUXe5Ptn#T05^_Zdu}bf4|Q01+&Mo5^y%> z&@8V!rnXvz8=ypy;nt#ESpq2i+NzC;f}77~%rZ3b7*{?E#|@Gbx-P$+8BLD7lXRu) zu|&gx`zvVDFsU?Q0jbOeon(?QKK_|%Y6U67j$6&$tfGs#yhDwB-gxR&h|H?Q&~3Cr zUEH9vXu*kq;S)AXURi(GSzy4HG|>d{*Dt+jR;1fJzUE4R{Ke&B04SkY6ul$Qpa-5G z7`UsPxOCBtSCu?+DM@uHCrfw9w zTR4=V4f*x~!ZDJ;CB@be&M}fT*A#Yey$p#)TLyY)8oq=byc|^L^n4@);r-;lRSqI- z(P3WIYHXJQ9%IPdj`k@`(cui@j;CCI{9%Ylnv*F=Tvf9-)IA4q! zVNu!s5W;++Nd8FQ&S*%xJr3!_ehkqvupmbvee1WLc0WC@lP=LmXQdzN6DjQuG3OXR(J@QXB7NVs;3Ic4Jz)^9wLpIL2`w~ieF0f$%iJM7mRP+B}Vi+*WT${ z{gW6U-AMf_b~C1+NSJ?pXlus6f{k?uz_<=ioM5RqiQ8Hqlf3YYajLP!5*-R{amK_o zv4$O7@N2e5nB%jDeWW)>&YtQb3neyR)1`kI{p?|H+mq7%t;O-fcdvDzt1V)_b>y}) z1_xI2;1&q1(g+j5V9!W0#{f((H*}=-23NH%n3YFNqCQ>To0U(He(VK!HF96;j<5eB z{h9w{YM%Tm6U$K+z2(L-)>N=9`!Tz-+HPv^6KXU}rW!|E@Zn7OQ?8vg zwsQgFNphp+JH-Dou|PoZqGOu>VF3T*6Z7+;BqU8|ZD(U>XGQ-%FQ4Yr#=@EYe?0~X z1X0qc$+a2hf%XjuDEIS+{=as}{m;k#p9_hoftATWjPTc^U-+W=f{XlwnPP}D@a4VhweZkzN(iM0<$($*W0H;P-+GfC&2Y-XpcbA}wf zYkVL&hn+l84(WT3`00MI^)|`@2r+UYRwD#BLA!EQDruER=4O7f@3KfyQ;1J&aof?Vy z()3`XP=i0!>B8S>l}CiMVo3&D?Zs^K?2A~Yw-Gzr0knO|-{IN=`r3hbtvkH8cj3YN zyREi|_|~@n^|h}FcRq~NGagD5D4Q*0uED{Zk8d<+SzqTs<;k7-V!Crs_`#%2ksirsYuQ-oCrX8=n z{vMWOgVl;$I1~uxvc+NXCvz<_85EA}uO@?7+7FP{J{0Yk_HNIv zVq#*Qtzt*v;9`Wq!aq8TM7ur-=j(_;w0DFM4FKn>^{&rvGkYgafCK_Z&A##Rh6OPe zlXDp|5+{Upa+yjS@0S^8{8;3D7sA~{@=rG>OR>g`F*BrnB4K`U2#mFVTmI^QAEk!Dw%4V3%(S@X$myb9Eu9zRb1?>vWVFT2Avf-UaV}~is zqxf?J!!vV#_avJ?a%V`C8A&j*k(o6VUn?)m(-mUvR9u#XtEkn?wVfP=&t#iBeJ;&g zfW_g@W~?9oy9Ksf>36s3f`yhVIb}P$0~m?Yg1V1Fyw?xx1<3NINt?VQr?+N@^6Nj# z)C`O~L^7VSWB$%Z%3uMV5l(c|WS~Pxw6_%wXS0GNl!h%bF3Fz2046MXxCwJU^Lag>Ol| zSM}0&Z>;-L`0V+0|uNb=kIU+qP|2mu;iVwr$(CZR=Lu^Ts*% z`+e`7bN_gAWQ?7AjJ;Owh)6`vSTR?%e~OsKwo_Cf9Hv3L2&p?{tc4_L;J9*{+d4}h z2PG2uY3sc_-CLx+=LR$ovccUfh-F0qhNsYjKs^JuSr3wX`r|p@_OQ3k`mF(x1%Cr;CH8&X(Owi7{GhLE#w3eh)?! zrbBpx&{C%%>9k!WODcHK;#RKkX&gG;cF*eS?>C2l=w5)8y4~}{MBxT#Kee``(m*@= zodMn4C}s&7-7^9g#Wy*Y<4KSDWi4W%51kDY5z?6<%93Ht105uo7W72WMs|thI+_Q- zDKe*KHO6aH=pRMHtf{)!+%$CN-xz9R3yazs6rN&C61>aU3nN;M<3!!=gV4R8A6u@4 zfiwEx9!5_CTOL8^W=hsE`9dG`Z`}sjfo((==6~Sy<^{rT zQ7`=0ENak{*SZDX|*cfV$S zVrTwnsH(~uHh^{tJhV~N!Ifo=mZG(1#@?fwRDLS?jVex(aQ<=?xo*QHmsx=;yr!ky6kT#s@OLicniGT z*`Z=^(1t~`+3*o@uVvMWragV7xLnhA5+6T&q@VYtyH>|Tw~xb&Q`P8+wdt^nQES*S z1rEI#n}q!6?-4IDqS=|dE$ER%JPIx^5tV^1bxOCa3?#NQ#jw-;2gzJIb;Kk?$p9^u17qyD9QRE8kq>vTqv&XgLq-;pVnFPMKg$Z^Um zYdIM3hG3XnZwUHY_{(6N90Y)G-bjRo#=UUG|0b~22d#hdIV=Vuz7mXf#@W|PC{0RG z)mN(3_LDnl;GJ))0zO6|lj(S;lEDKa%V`%K7Q@xITZ0Y*huMN=jSo?SjbZ?3SPdcL zv%aCHH^wb&k|FLWJ1;wnjUV4%9RczRfwgqO|0}**aJWb?pq`?Fxs7O2_Pjr;4^NT; zS-cF2!Fui9*Oh89r{JhAN3LO%Wg}yRP&nb(s=7>uC`klUgqAS8ZdYJ8O3OQ`0WStV zO@=@NujwE{afDg|{qb=Lx}{YCgjHQSMHF8N$%{@FqQ=(nPw##=hVzbVt2wFo+)tt4 z`qUy6XaM06sm?U#80BsZYz8sS)59m(1=l={UF#p?bxn$VwOTsze>IpPxsVh0WQ|Jk zLvN1Jruu}2doP}?KMm2RHNF07Tsn-xlyeE6HK(A6Tl7DCCNGtR7)|44Q(R&tBIGdO zRn|}to9g2wOdLq#a)88WX|4M)@2!8Z9l@=t2#aHry1)&i)yOJE8V_(RT_ABeaw0jK z<|uke&S3`JF!{1W{G2$=Aci7LeN5HP2$XAf7(0p_g_VUIzhp|=C!d>+lR!6B9Nx2> zC+s}fLS~8*^YJd-b5@#A8m=reD+^SPz^3pQY8HIEHxz4Ofq6xKO_b_&1`eanu|g+z z3hNLxdEe2YTsVVyWYiGgKO$?}!F!7X^XCd35UwV10FF4}eK%ylzA5kYk9c$a`7wp) z2RccPH7YasM*`R?HxWzhQ0Zec6ur*YlK7+=l6*SyOY_cgDNKD@^qK18WWZ}J0{2b_ za&tw<+w7@P(X~F&J*C$0Zp*1c>FV5ap)8Zj>aZ;K*5}+DQn=fe_X^%A{jiUrM2r)P zoG_Kthus!s(CoR~SB^d5jH-SZRXKmm%*_>v5k&^2%?D%=afNsr+-?nnqwp$8eNh%Q zSWXbf@=}=cl7gJ}NTxm&`(k%V{wgmiSJ_LoaOFL{wW&t6*qhop@vR~F9q;7yPOxyQ z(;HsVGuz~fl_LH?Lib5DvO~E<@cC5d7K+(Uwj17R*2l=-Ld=hhMCj@CHzADd0Zrl# zm`7960ZzU{_)Ko!pp4NgQjxA0mTVy7t|Cxs(l4&{iY{*QPD2^9g{xd-uNJ#4K|VZQ z*55CG$}2=EAerb@BJZX3rg>AnJiMTv=qbDrrUv0K99f|THA`xuC*w(BlGNYhOZ zvM!mQHxaem!8vb9`1W>?xZ@`XGv#AfK`?g!-2`YOqxT;IHHzsIdE5~tm{Zbe4_ zB|=Cjz^AktklXPi!^hSdudUQ^kzQ)YdW}bQtP5pUTclFw#(*YBf0?7!DqE$YCYOI( zBH{eaYRI1uVG8k$e2Qld%7o%h={sQXPHG8**H;2q-J2<#4!3hcqqo3O7lG?v>EeI% zwxW#rLVXAGaI7xc;@#4r+G5ag@(O~QUWh6>Q{b(2+1e7CIQxEkV?6vSq!iOy)_-k+ zy;R~-szMxciKAT$7;IKM?()pqFK>RJSuDB6e$kZOI+yLop#^7>-fd?(s}Vx(`GDba zC6@FQNHHiWYLF~xkQn)+Y5C{f_{m=V_%(jUHtbB0Y-p1^0CpwRkd{i}&5Fx4J^z^# zrUPYLRQwt*z(=MQc9$CRDN(NGD81iRgCxckC4u%2GJsn2+Izx|1)Fxs7}*n7&}`~? zT>;+Mah(QxAznH1sAXZ6oSRl}N?kis5dc}=TRSGa!{&o0>9V&wZ^+y4d+*>5?(PKQ zlx!R)9U1dgS#w`)K~Z|_8|3*FhOhkMWqzHS?XVP&oTsfj?oQ}9X+48D0j+lMREr2C z7C%rD#NsSB+RG@hiKB0prx>_yshTFVyCCV%JU;t4bcEh+5kKZ12@3!YwL2i9F3sa? zMw?TxEC;%W zqf4q~YH^BM+!GhalggN6`>Wx&K>c!7K+e-X+{<8MjUDw)|S0q$yF?co4Fv`1?FbtC|775{KDebD!nkT7JR>go#2Gxue<@rWjebI@zZqBmq$XK?B%K3*04++n<11R0Rty~a+EMa1ljY6Q zSc{;?h2=b*8zVerxNN3Y^+(wuDhaiH)o5-SZmn%DTr$_4SNBgKp;bRlMaB+Tjh`|q zB%CUvn?@9$SLp>T!cL!d1Yj9R{S zKfOG_h<3K@sc6?CXk0evPp(^aPl+XVWH^8IOc}dgyfkou#?3Li| z1g#c0-$G`D+Elx!!4yYrsrP7=D#K$h9iBkHXh4o|FhRhAo$jX5T%kg*=3fhCs?Kb+ z;%Qw9mZ~0(k$_8U4<6U*8^&gwsA<%wKCDNzjHmB6Q6W^pGG@21S{1j!sBS7B02PSa zJ(@C+{iQ&`ty_NwvOKftT|rF{Y-m#8qCgi3)>u_aPH~MVamF;8h^*&~QN7A{)&SqS zO4=N;WJ&DAjwyTta$19HY?P7_u?+zkAm(^T-(IRSY=VqCI9@FKd{yQ+YZ-4$3zyk< z@=;aAmutgeU0-5Wn!KPQ=#YOtXoSu4+i50BQ=l#5;nE0v12F68@4Gwca)@G1SPGgh z)LOZRsWM^f^h5r%6K9VO`sFwvCD5hxZd}M$5o*;Hd$$p{EXe8KqEcP5|rQWsS zb}leGRS3J0-|Wr=xeMzid%GPyt-#+vtfWo1Q-<9H97)XX#$|{OrhEbe%~f(gdXl65 zooM|^2=ht^-Hz6463eZR0FrvSva3L*m_rf(MtCVhg9HCJ$ z5X9F!eu+1GfF*+3UP310_0bAN%7bc`P(Ep+m1{P~6`$wQx0jXjpSAoT4!l?3rad$I z+~BK?C0}jQ$T)7mzdn&|m1_b`mF9-miKN2Qv+q;6u|)$HY^h!kvPq!3u>b4+6j{%V zhjj;zPaUX2Ea44F(>2v-{Zumke}rLt(|Mz?2GC|-Efe(>3Ci%_@k;;Ez`}OARtEoX zt^95Ojc;Gy@RS{v0^t4SIZhV*8;q=?i5!$TlMwUwbn-7wohF+TRZMgv+TQRG<&UAb z5K!)}D7u9@1QY^nEyYf+$`bN<>r3jdpk14Ip>W+%JIi@2(#Jq!NbPCBRWAi9&WodS z->N$Xc&K?*Y*Kof37IpfXFz3&i)69Yo!x6z{sMA|pjTgGn)t$dp>|Q^0{99rbpGR@ z{8RTHT7LeetP}BfG+2cX4I$0TFY#BNU!ClmMg07?{Ik)x3)a)R0##s4-MS)-{`hZ1 z{BKWrgV83fEirXKqP6t_AsQLz4{N zfy8UP{OHK!)CWSxN@XiX)_TqszGUUqx4(NDB500a_95vp~*t zwG(kf7PtSC)%_28mOS1HQv9nA-oFaX|JGXQ;CTAM6@Pu2XriYVw>~^J zamKtpS@{V2!}v&@g!aylIFj;AA%5V)Q{`iNw?qJrFeFH!jTCd8*3_~bQC|r^cXW&b3e^5?94r4m znHCr%Wng57!oUTA{HcVbBA$y1V1&I+_Q(|GsK}Z@HgPQ4BR~vFh$r@#E1rD^+;}#& zPHs3Ss3wC+u-Zs`HuuLT^bzctX*yv?Q{pq_Js;P&_;#>b{4phTyTr=lt(bpOktt^P z!V8#V1fd)j14*Nx1y8cKQR{Q)If`cof2$;z9eVtU3DVx#$DT$Hhbh!X)hh;ly~#?t&kr7H-5@ETyb{qDDbf(nNkgZkAq)CED1 zg1YqMUn|82i0^0o^%tDK%71$X{x{Y6w*AJppKtuLI>rB5o&Ucp^6w9>?{!}P$Ain- z&iFqcRR8|tf6S(Q|JYj3%uwIK*--DlF~j=zWBiwyuD#`dntp2z@&0(9^LAtXn#R8S z`pWvRC(pkg@!OQw%F5b7*TK} zmGW6k#W0ye)JMt*>KteD98ZV>G{l;amN#tYhGJv(WIzIOe)Mwt(8AI{S?dO}VX*;P zb6n-3PE;^BRY?v~x0dGGcU-1hPcCp_snb_eCI557_1UU zek{0+tko_Zpy{%?c&?y@qJskZfbtZYH_%}X47TNAc*efb&U+%9WqLPdgSyxt)}j9{ zNAKTDAa1k)In5H8m~O&tch!D^0{~bj zVXvx{H8)Kon({*yDwadM2;zHxK@jPr7VUyfcbQ>HUsiGzeA|LzgA$>(J5Oy65NWuX$F?=oif@D zZFwjI^-Nrie~?2e*czCWPjH-%Av^_~-#ed0|hci>*d2Vy1mb_DnE4ItqyqIKataZ_fdyPpMlG3oV!Zi0xl z{?Aheu18zI%P)2;rWaYY!LVldcZ5+5hHlM{L!3nnoM59jmXW*GGef>{U50YcR5)+ZhK7xR5SiS&wyeH}+y;hdR zt_-D!-kEM9U#ymV>8SZQlZCjyW{U)(0M0Q<&$HqF1i&-GYwgI<=};mE7)_fKH^9{% zqNv)Ui4MQ!4W?5m&`sNjFnI7g7()&9Sok{DtBR&SuNbR5hhSF0I*EF$gRfTg4I`Mq zh12|Vad8m<5oXF}o%0lx{%QiYW>9RxjXn}+y{jBLCHD8N1uQLJ$?g7Zz-s{EvRFJ7 z2KWe>;Kpe^Z~?>YCbqLceTJI$LJzDH`meG7f83)=V@A=mVZJozfB*Qw@_&DiQnoX7 zF#Koe&bN? z^jlAR+!TV_$qQ@mXUPtG*Gc!x$B#@Luc!6FpA>^Z0FZjunTFMoaOirbNf*#e(6 zD<%v^fny>RE67pF+f6@lt8DOE#$yEf!eeAmt|GZQ?nb5}qr1>TGTyPOI~HVwwN-Si zW>vf>P5o|x3SbC&#Qruc1OB!Sw9uGTalPO{$bxNn0CMs}^NjHo_C9 zk3$5ZDx_s2D3|ae6FK2n3bnMd=tjEh2nPcb8n=;7rczB@ucZ9kb@Yyk8qqO9NoK@O z@P!%q72*_7`S4eKWCdJ{n-WlqVgUt45c&?xg{@2!eNPD%uW2Si%R@rP?M1=Ungshq z0jV@A*3mANOW~3iYIQw$XE*#Ds(!?Vu}fiJYDo7*APf|6X*)2a6ezTIb*)Rvm(*cD zFuW*3R*QCF23zCLy46`vJ-|u>8=(81bE$9p&8prO!i~E17RWO+`cvLp1+&fVad8nT z@_CGs3U@XVSHz?Uxrfq?34;wJC+QzyeQgQ@F`@_ry5%Tp5hCq)33RA6F$6;z(_rW# zIW46P8r-B++n_zVA>`k?bzL(z6cgNVxzxKt^L>Y)<7zN2O%HyWE$6Y6-G{N>d>y}-vHgQq<+eZW?loie#J;U}oGv2CTook>DlZx~ z9-jGf5oO8qSh@<>Slxu&IH~`A^-tA#BX}pKIRKO-PdTg!dM% z1;KVi2Em-|1K*EGn>8;p6vlowe$O=i>)`a&u#3bco;Lb5)MLonJTnh`01$0l4VbJ0vnwJ9iLX2HrK5^9i0QJJN90n_lh^(Q-^n;1AnhsJtJqY5XmVyBwS%{ zD!lU=V07UEkt*tu9}z2%RHVZo7+=6r;{%mQ%39D>(MJk}sBx8uNz{opdjc&PHWAnw(__t-r9ye)e3+SY%0%X-Crsu8B0yT=^&*1-_EIXHaD6t-!} zdZpg6va|U6c^t2kUHCe!GTk1?ncPV5k*?Lt5{Un28byMfARIc2SM2d2sKnN1=(B~_ z$TGIJPoWK5A5D@=Vc_f*(Qob9Y@eGXsatFH+2G?z%UUE-du+n!z!8)PlS z(dAvuzDvTV6q8KOPnilTL^12 zm^U%H?7uyP4(+YC)kboi$V7ld>3u@(72V; zw~i3ly2fkabApe)v3uk7pw6SwCr%9S`NeH(H$bjA>VDFU0PW4*OK84XYxtH9ZI(O0 zp8VKdNQs2j=P;Ttg^D6n^=n7e_-f?MF6@f)e$0yl`*R4OYss_y726r;Ep-icffmqf z@T2$~R9cQcvcs*FMq9u|r>}`WJ0=o&O6+dpW~X>_(3BkL5&1Chp7E)Wwq$VkWOL$X zrkm2L7ZLIhbu6uZHy+a=#tq$FM^h5j5DF+s8H^TBAwj5CJIX^W zt6`)>N1(4H=^VSaOEa2mB@X?7S&mQrmu^=ki+)IA$FA0SVwfS+MsUC_yE-Y^@Iiu zOAC@}SA5Yqxd68C?|R$*HJ*&ebo22QiJ>M#p++lh!N+Q4~qr z!O)OXn_Lf}Xzm!_Jlf;bXC;1mXBPBHQ{aa6kz*`$rQu$mD+f zT52tQx@uwDxPiivWgh{kB zqy``{1C2^EIm|UKd>n#7oP5<$Gp128XZp#wnFAEp_(Bh}h@WT_@RKvHS^PemwSBiN z>TN#g*LWFQz;hv4MtA%7#T{*0&HggEyAAkr)1eNu)$p&6#t+>#m!SgjaFCs(L@K( zMF{9~S6Li(Df!CB?1AZ~Qdjs_CM{I2{73E56cCGcF_LaQ6BddI{Zx@_H81%9ktGq; zqLFUe0e`EKUzJj*RymaC3g+3=!M2(u*Mk|PO>V<4XH(;yACsI#3FP(Gh5cc)^2O_d z^~xmm?A72H=k=q{VsX4WIvCoHbOJXjZETioWU9bOb0nsjK^C_|)8O}1j5a*LsefL* z5To@pG7?R;|_OXD(`q!mXaRd zc-)m0At8MEsLJ$2jL3TAoOBtn3zf_`?^KR~xOjFNQmN<%@t;MQv+YBud%-H8CbV=Q zkw>|ZkQnli>Zksg>6mI;kVKnUOg3k<5y_OXcmsHi-F*YNuAd-}e{;wVer-E}&f<~D z9Q#7P3dZ-UgMgNRkF=GbLQ(cdyQKOnQAtWJbG6K_X~uIU8|ZK0yHvF+Ze zN5t*v6<=u2T`mUhjW-7NXQ2riF|!9kIgz@+4)*QCt^m3e0}A2*%MDt|9~I& zi|HuwuE-M!VUuKgnVOVmZ<7ylB-4Fc2J-(}hErcKYQmMa1&;qabF zEx2haKrhHkH6=|t%S@OgXGLpQU_u$ML~tbe0}4gE!dex@RZ>!4;7g#+hXYM22sLdM{T5!vd60f%;LYoMWwOWmmOVrU;4C|0 zDQ|#gnHz?2y4vJugK%NavV`GgZ+=zNcqg|pt;EmIr5kCa{j@$Q z%^u{kBdh+;NH?5_bo{B#aD3etCEF7iF%9uXObc86@n!>r7nkm3VwWXjhAL{497oVs zGvZ?&3=pPKiDQfWRYSsILWU*a4oMLWzVKW78{@|*vt_YI0zytRLab#mHpFZpJLMyI zRw9i!ag1Br&;t1j;QnfS9)O3@IxuecSBv7_u}} zL?p5vsro@(m%L@E3pQD5!U!B!<4F7R*`Cb9#rEo=f%r@n?!aCnZCL%u-(4@dP9k_L z*l6SswbU5oa>_KzEX;6y&=tKWs1@KI%eX&O&sek;!p4}VzmoPY;Z>3G20SeHVcdn(rpY%7>cvnPOOZOO)Cfxy zKD#6%HAGum&*jkuzSgCy9{+5JA`RuC>*RB>*w9F=AsPW5 z-uG<IIF zTx-y_c-U@PVI(lc6T-*%c}Q zd7uBG!vYgpWC)8*u;uo`gHAhDdyCH7lTf*d2U%SipSY2MTagT#u`pE0n%(&%(k)CQ z7ImqoY%jQ9MY)(uyS=0yM#)lv5z+y1cWB36cI*$9S34`EbZ)5r$^@q4 z_s(-=nOQ7UyP;)Aw>7TRY<+jocuo%1vCJ*|_rt3$Q2_<_@-ABV_JkR&thx zYZNGZ?aV1$J(5bvjRTMg0K^~`t$WEZhP`S7wGEaDisCW(5&L3c`)!UzGIdoEeSuFC zC<3`2x!WYaVU>rtt#m(_Zdjw-$xhhY*!vFSQS=7fmrNYm!uD224qD$Nry!>$?*Z=^ zgD*ylOh{WtDBP0bFfZs44=+_;iYG7`I2DWfX&(0Ygr zf@Rg5TobpqK$|YhSHlaS0EojeL^^^NusO>+ zqt1!hm>MbmIGlT+XqvX8kLI63n0jSqYRS+>HEDUYs9mdeL_#vIL~w?VDJ{PxSdwG& zHIiwQKiE>03Bm5d<(TrobKd2|T~Qw0+px7Q8e04*n#nd`DW}|>UcK$CsN&eJP|*4- zM6LqQmFOQuxUDbxqymqfNFx0-$N>b}tX8oYA#q3tVh#H)j^tL_Dgf+{4n3VOgMTb% z7Hyn;cmr?Ds6|iEaf;7?CM0Yu9y?6A3vNecY;F8r$?%M!`Vj=Nc$oTHW^9n9yiNDS z5vW*z7VeT_L^C2Q5&=^x!GELJ1E_yP)*fIDeQNYrnQEiUt+51)^3WUb{=au2Q4E`C zsn?=7w&(Xe@`T0BnQiVC;mD%@gy^WjmZWHJ6|4PZ60Ow3M;D-%!wbQ}Q^e=%rEc5a zrT6d%jGDZxy3osjtpDSM)PnHlp3!uX0lW9G5v zdgrb>G%aTP`o8n<+JF97Gc{Bm|7UIfbxHbxM){eI3@z$vvnMBMmwjV;2IXv&!K$m@ zTm)^DrE|L*C#Tz_<+pqr{2Y^ZobzOhbBx4n5_L(4_{MIcSzzmaHNiv`)9swEBo>8E zoJ*>9JCav0RgPr3V310W)io40+~iH^Va~{sjcgG|w$P;Ocpj{_tY^5k2wB{3a|bl- z`>W22`;mB5XtH*o7RFqCV#3~md%pW6d&d`e+xGA(mjE`;gr^ETQmxYCT+*!T_(>NC zYC2-HPE}hRg3gH0*Iy|TBp1CLk&C1ki~$#+K^L2CNrU&va#NumFfuf5^>6~Ssg;F> zZRwG6e4|ZlF$;Uq5#1S22mY1CuqCc&Go4SgNcRY2Cz1qx(zcaPXwP1d?)|GQBpcmT zPpmLu7-W-Z71rC`FO+==0|Rg2gI}9RM8q>X#w{b$fvH5KmIAau?o8gw9_d3$O?%__pRav5)5IVCaMwxb?GZ0-829%~C&!YJ23|Lk@92NE zf*m69J*r*#`(Zv&{wsXr`%P!b+rbkJ{KpTqFCiVe|7rNd=jvdn^cC3fZ|m&8t-tZ@ z=^Gi!>NfI=NScE!%F6Hnka6ZTiQT`jg4asdQI+_asI?;nP^s4?xAg>49~Zp zST{beU)(U>%ys7Wcm?qR;UN7rVKA7R5)-#z@=?bKFS$pQn=$KZ?sF@#;PVSCLxLkC zxB&k6`iR%ixC>uKt8Rq|8mO*XAXD3LkPWzvl$(?(^sRx4DVUJRuLaR}pUq30p zdH89-sG+z=s>0oG5r)&dQaf6!O$#(NJw|_Ih<6#_%_p!Vph_MT0^hahXTYz4cKS1z zriy3Q$4kr6NJ;J!Mt8B{Q5^JF%@hkbt$k$_Li*Vg0Q`nOgBO#EH!w3@Y_TAA_?rIP zF^8D}tgJGO8V1|O7hQ}v0ze#dsa;GMhZk1bpvF~gf3I;@gEhBanRS0l%T05woFS?Z z{6M?_QU)SN){TnIq{(u@M0_zxG)nx~4aIR+dV0QM`&g7{);iMsqAO0ed`LRrrP&)o>Po zC(MXA*y=3K@!>acycYxjye5GmA7XT^+O;e!0d6DG$#fd4EuL}A>CA8++Hv6(PlCEG zJed>>+XL@mvV%b_ICcp%hr*|zX#$ZcTT&wtG^XxvaB#X*R>8j_#bizhrjgWDh)Jp3 zp@RUZU4Of3VgOKx9r`KI-%oRW;93_E%evT=253Kz(`0&sw{s1F^@tS3LzBx z3NVo#PUvmf7?H7?or@Pxl<8M6I&IN?RD<(<=pXJFgYhwmctzST2tjsV=Es!2LDp+O zY6?9w&kulmQ2|Q-Xn;4v@C(KpR-M}5`Mdv?sDlKf0_!Xq#0#v{{#z+rh5g8@u&1Q% z9E*ZgjW-sa+s7SqjvvNMBzpmYUe0@$jx1~liENI^tHItGbYxo958G~kpFVC+8-qOy_yECuI|7?wky(rtz_ilJbgRwLiMBjk*;1q}$Q zoxWMcGN_r~;X$uwSF4xKm>F@zhH`?%$&a6>FVyn<2ooU==8}>U?Z}YQ1I#o4&YKDr z?JpmG*tav^kzzNNY*MzJEiN%Q-u@uFU`|HsUV^Cc^tCVVY9ws?u?eW2V1v6^Tl=nl z`8Rv~k)b^UH_7zIGY~s7Kg)ja74w;^@=3@-o6v)qRZR$sQu(&i;5d8SNO}HC<|e#u zU1?t3;J7`vB=iakX(JD23sS%{CQ}Pr3E_$9Od-37Sy3a#!-44$m9wQMy5B05(x za%8+>1OqF9zo-{E=+ixYl#HF=d5}S#J`@f$0PK!zea?sh$&VAFH5Z*7-MGg_;{3q{ zk0Za!{LU`M_{uS}ggO@_sc0Ls(o0*HLfcUK2_0tZl&nB0Eec~6x6uxUH345ZO+i8n zn+q*NsPCMNEh7=GF|dM#an5{k3ZNRv%p^gbKU>DurE#QYw?!gKdFY<(_D=J~GmT7J zKeIyq@iH5d8Fh6$7UI-#_e8K=UU%IpVEs~Q$)gPkC>mFr7GhJAP9Zhv6IXL} z$;lUIWZvjQ$QkP35$XW8?1)<~l3O+hmSj3>x%{(7>REa3iaC97^P2SS z&*5_xVWIOvg5?)+t0>rZl)j9#4X9hG@?2yrOr0fbhK1A>$3quHJ*xy3sXb zZh~EA(j5Ab79fN}C4w4!w7uXJ!bA!zgRVM7ntddg)5A3 zY4M3kW}#}LTzv}RwvjsBzgF&iU_L*J2k;@efm2gub&V3!WhNUq-t)(jPdEN zzcxsiyM%tTt@!xJ!B)mJC%u;0RYmcl2LbFht)~Q^7o2V}SM@nrE%8cK3H?fn#A0$> z1tDC4-q?h);TYJUM}f3li-PqF0b%DcasGUPwwzjabT}G+vR6u`u|y}{;#LLq;G^jY zCx+VVn(JV7yGQ1zrJW_rI^k&Nj@^|-k;hMSzq)mBg8^Y^5c~pLcU+HfWw>C;tI+YQ zFt)N^>N1pgMF{s4{;$6f)Sn?qMmAX-kB}pls2gryuy;LOK?nMzI0&7#(@l(U&$g7Y;hhBzh?2n?+TH#a04##r*8S zhj>=(ATYQd7T?#^Iy`ImfVbR(bo4{>|K!i<0-D+Rs?+OefT z;E%s$Q3}&z$MzYf0i zu7HiIRe$^#sQK}O{(l;L@muKH+shg1ekHvA2YdBx{*7-}-a`5Aa8a53LK%CRv}t%_b)xfQ1JWl>i6@R`1&&FA7%KC^@TWftNvKZ>m6Y*MxlN zaMB#V{8DzlZ1?xMczOT$?8ITSzDRe!Y(8I`WIfzqj~n!EH%9pZwetteV3C;$N2Sw2 zu&m~JX=%n6NwO3qvb5a9EETJ?D3sBR2MkDAp{y8HMP0VhV+$%p1~70g-T+Vl0-!w> z-27x=t}+}t9of91;wy=DPDKgR!koRC=ljS!GN@2PM*E$VAe8tb5*4^b4Y-aq%|)@?*-gS&9zd z%^dqhhU3y$j=d4;A4;UN=sv{G#0DUs0tpHz4d12Mk0iz?j%U&st;AmIj|@J4yYIk+LxIDF%_siASTL@zF6u>T3Vc)7>)wr1ZN8CW)p4px?z zswm1I7hE)(m=XV3<)So_)>hNrT$@`{nbv{j&B69nL>gQUkcgP4w5}Ks3NI@zHN}?X z8P;ZKxYPhZ-w+pjnPAL@y<_y@`}uQ2L-S8_tD};OoI#Zi=QILLZU9rRuirFoF{hz2 zX~NDz@cyc6AbOW>GB|5=vHk_WGa%i_l)zt@uk~Dh+^8D4!7AQRdlH z?8?g0P3Q`3#Hey*=scq|O9kD+l!m-^VfQxBn`8}f)vJwwyWV-(+e}ABgpiQ%%F;Yz zy&YKuy$%OduPI$&g{dPy-~zEy0=as8D^yy1>zAyur~XB%iar8z>ZxzY(l!z_bae|E z!29hZwfW~xMvhRj4MBYH3{mcrUKnhuO^FCggim4fMkGOW;-=`VMDkC1!4*}aaNp{j zPccDe2RT|+0(&SH02v{^oY(4M#?e!~;$9iO9uJk@OB4**7<-}9Y$aGLOJ@u!7JS$a zDA)Ub#4z^OH2wPd;LA>6f+UyB0h)jIiSB$d@%W+nvWk|L9(pzz3eX@mTUuC&{M+&_ z@yhnaije9x4Ed;A6Yqn$9?~hxS+NlU$x8JT$n$L`>xE(AbhH1m?@yLhR$?i4wp6H& zoz6!@kZA52e8jetEZMSDuEJ@WN;?o2#sc zhwCAg3I#V~hzg8}z}+KMS=x0B`2)2$P3Y)u3hGO;fG>n(vZ_KkcYtMtl4!(91nx|m zTBTn`R0pnvik-FHz1i-vB{b0MwEq;}8jG}tO;EbrWW)eEfr-8y1w2f(VM@m@ap6)T zOObn$W^Xz7Vi@LVd{tZC4WWmwS6 zC5!tLMy}}t#5sgvHCje-I{YA@194X5ep{!7K7Z^bo(Zhqeo9C$3PW7}MRKr@u|8)u zpQ)Q@9kf-T{X)1~9A>;O^uP=nyN{vN?1X@6=ztq43iaw2N2sa(Ami`5zLGW7l3bFA z;<9kY?KK8k4k}Vmr}KXLld!i~!3=4i!EGG9rOc|@qzbEG#+7ByCl$FxOmmGu`XW&s zn@uTbKskJ$l9rt5dWQc6Ye1C0=%R7L+^}IKp;T)Uteg%tYEqc16_o-U(45FWkVcbG)Hr6-SH?M6Fos)C$s+zD5-qVr6`zE|4 z6xBQMp$U88IT898#~ufAVohUHb0Uj9C?TJbb3wrVM=JP$#OJTf!ZxT>ZZr$FiI zrIijd!i4>fy1$}%bz{s!6zuNVC}lOPVq!#a+Ks70gsYH4;UOAgRQu>M?CEw%bZlzU zwDu4$!}fzHWo=z^b*#Cj(nI`c!`R(1KDKoA@(IT^$LfS$_K={{d1zJ(%q%&;5r%@IvAm7I*!}^jrcv3 zPH+<8gbXBy7-RrJ)50r@uw{oppH5VM=NyKRp@IV%INilq|&QTw;=mWRmEYBXNog zX6+|rSw-V=q4>IWIwEe53pSI<6v1XHf`FqmJL6=M=@Q$?4CHx`bTcc2S&-F9p(3@2 z#cr5IW(!v6Sw&?3wr50OUVh2J82o_&m_z1@0hou#V~=cd7Uy=_`-y2Ri;L0NmvQ^)36qrDNh;jzNrlw8Sp6P~Fce57sS=E_5fLE?HVThJ^SQn* zCTyL<|IoA)Lb9Ax3n8g-%({s+vDzw=thA}Mjyq+;wMpu1GJ236+0F@dNIV84b~FlO zG}-CCMA)|a0*PnW!t}0^TpcHp*U4mDm?nrq6^S7pA8V>?tZ9(uk-u*Bsub0PCWs@j zNup~PMldN3-;8A`dOn#xNp#a^y6HPH15kvVe4Rul3{jWCI5$(8>le3AXf?JUMb~cC zD(!K>x*TNCu-_`ASw6A0VmTI~i}fl;)Ql!!WjhbyniQ)jQFg4oVdT>FCfCLhToRTT zwxOvLI|PBE@jyn9%Q3I0k{G5{?Tr$aKE5UVrEcAL7xMY%cX^OJk*D(_6RrLlfZP1OOae1PKaBfA8T`^68U znb~0XhcoIfTsXbtN(y>VvU8fGrECYCxgT(!6YF+bO!k8C*`1J+)bBi&)jOr>2?83X z_1JEKAM)cxU=hZYA3-);NqrbIfQTU~b)9D(ehXqW!CMrS8g@4!4c58ohf zih1}?6sq5wOCxU^$(<}3Ic~j4J||xY#P|~HDaS#YBLr6F|CbI^CrbyNv_qDX9EN|9uf;HY z)2UaNnpPv<8RUD>`QMAq|6X+d_oDL?+h1!$`yC4>AR#|>iQHG2+D+{jSe@#kATLWP zvGWz8cJ)W6!CiTmN@YyaS}-YybB*}6TazvxFE6Neg>{O2I#Ph_WbE8JH zMVD99jjL~1>x^285z*&>M!vHdxo}}gNlD*@ChbOZ4Vpvq&|pCU>&VGn7LcpIb4}WV z_7tgmIjeMHz1gIF1r-@!+t!wq^EX~g;<65!7~$8GOS zY6*<#ta9xo=U^_I*kq=o=x9;F!$oO}T-!y=Mw5<3XAC=LoHM3^NZ^P+R;DO&0-Y#| zoFs~DOxm@HiJvsWQ{=jHv`UqHM5{nUV)nW^C}9XW5iavkMaRxZ@8EZhHOh(WZ6@K@ zsKnlJAA+$2h9%;YB;g^s>$74<&-IoZXwPr_O=NSK7IgGx4wg8hqT?h{33!tQT~6p zO6xMLq*X%tgo?D6l^WNMt7xvQ9$Q;qxspJ6XYy_5{VyUqGu`QOS}o>PjZo6{l@+yf zD;jIWu3MS-@ldQp&~B>ql%4kG9JIa2brr1>?Wz|iZ`yH157*&*49<|LHFdG+a&^HW z3Y)p2swzph&m>%1)~nG@&UH5{uB6FgaEmg9xtkW0@k9m8NHQh6%9_s zPD0#qNgjG~^1#4EA*asv5IxnlLQWH%mJ%&0Ytj}w@{A-7$Vk~g5+F=^rk&)hPKmNrikIq_4$jUP-SK9lar84%_+qiH)EA>)jbmaJiaZBV_klRO!oO z9hPK;(ocm!HGh%Z8m8CL&7$b*-Ge4hx)L;48&_8*A>X7opvYm$8xf0tTe##Qsh8-@ zLP+DzV!10YPV4gWOBOCXSjS-PZlSk|GH-L0A6Bc*q<vRhi zIXy~uiwt{QGjO8q;55n2l>gG!7JUCs9~XT8;V!37b5yrrJmSA)EG?%e=~II9(`cgY z-$nN6O^rV5ny4l6Y^QS?$u7R^_pJjQi1~;EOws4)^P*laxMC(Isa;@tXYCbPUZO9H zEU%#YwmS)}gPJkZW5>!fBld{CX4~AaV{?-{#xym>8pQ;j(AX%<*EbFNPkBZlF_V(; zVA8kAT*2ZU7lItsmUUqH6P4RX-xImscNKO!?M9&Xzg$iE&$YQ!iXYOCL~TAM(AUB0 zcJ)a%cQ%$KAiS{|;rmnDiunxvlHZYQLR}T+`NGcgCE9tvBM(}SHI+hB{7an7dxw6F z{kng5rS6}dfAIaY15f;e#B?HGzjxP-eoMa-J^Q_j!_z8`!{+>G1IbVJricW_33bR> zC|t3HV*}Z^3b{+-U)oUx)i+d1w?%0ZBZ0o`0qahH$@8UJwVYjI3#wAsg=KORNt5|! zqQS1#I(tstIvW*PLAUfSwfjZ68&*bbioKQPa%yjzB{o`W+tXbh84dN#n5(9uc0bKq z?*tTVQq3|XG&?)JW|eLGJ5!I<)}wjHt811cKc(58Q6B8pnH4o+kBhI2traJq);OEb z-kPSwaVv4)sNE^e46*GtrcN4)?ayy2^~ctUhFYB-uog$cWuK!faA35rP0QY zgHj-x9G@_8Qq>hr2?+@=)TQE-Pjp7D;}@kRe8zUe9%)LoaS~2kQ>yix!Y(N6#l{!{ zb(PG})Tvy$sk3T3^&Jw?oo<^Y&dKN0biS{aNFY|yaX8(I871CLE@35oT(V~dO$$jR7Eu;7(IJzq(*wHb2 zz0lr^3Rdg~6^cMb)GKM2F?DUxLD-aowLz)sZJ@$4j&-?G_r zCYbDGn{bM2Axyw7HQ8z8aM7~UQBpgfOBy=^`!oUR{W?9o-g#E6#hL6ZgRN(06PWV* zj==riQ(o*`QSI|wW7s+J-Pwt>-z&)%unPsti<|}9srBLw7O|K!*<_cnO9dWX)@}qR z*49_x2ws6=ScA&5Mr`3qnw@Q;$*y7>40a{k*zRqV@%5|4$$WMVQfsjgJEKh%IVblW zZ?aA7I)h!yHj6{%D7NnLHQ!QueBEcd2SXdL4yKRtgL2gvJy*IWq)7T_y#UAOa4E@cce{1XRj~!ixo7krY zmh>6^h&OA(`ycZc3-~w}_B((iUdj-i=N|8H9>sEI%4=W3ZCmSDU|~$M-^*OOyErI3 z4k5(iHPY0V;N;s#8v8+<4isovS>J$&Se zARLm(B5;T}SZ#0oY5CZhw&BG&P8+TWt3T;wh?5`9%MxeaFq~*ctS;p&TyvvK_c($rLei){4OJYgi zPT{SZXBa%4cM-aOVrmkpK4gNfs5p3LI}1l>B#mbayJm7~CP9~Zx*0r&=ZaOr@u~5) zYLO|rqf+5L>^Fbxk(EpRyq8qdytf@=&mlV|-;U`ky6Gu{?&XCh5AdMq`~GrN(1(lF zRmP^&hN^|$O8%-MJ51I@PY}1d@5eG1|L5AQ=Ub9Fy%Rf&*7Bk2y}t8lxGXN zLVC(`20nL5d5$87u8;|oc!k6g4S!VeDmLCj;+0PjuU+S03czx@L9V>#L3erY0X^lt zmqYI@(-&d>K9CQD3Z7%IT@>$nK_M&LwH*rY5CzjF{5536&ESDJU5TM|J0bLg{-QD% z8h`~8$*!-%t_<0Uj`9=~X7TMXs3W(#K!a_PTY;S}!ObI^L1bt!R+P%n5Dba8)%(Ce zy9D|PC^!T_mKSV?qJqM0FkJi;XK#QW1zAD0ycI?VC)^0>JK=~0E@20hZHIaHpCZX8D5QUdQXuNhne`xi#)tYkHdI7 z9ETA>y~x0-#9@$HAnJo{DK9cC!_sbq9Lp%u;*g<<>>*YBdPN^>ho$#hswLVMZ|h%R zY1^O*GjD@s1(v=6yrKuHpTVc_CH{Vmzu&`G@DuzCet~a@4&Ra>{75q37t$4eCE0|NT%wR3 zL?eYnCxeMWh7m6rL40Hk36fG0A!Q_uEF+c_wpNt>*HDm-L2)v$RNV=EhO@~IeeZ^_ zEWZ=#>gFK1iBKU5u$==%&=p<`Il_w}M|d&R2u+x8B<5*G8i$!!|J4{$P{D>^4Te-$ zK>TnlhBP<|=lF4$!vjl*2i9UpN0b@^W1Xp$i(I9^?S%0-suRMKT474pR+!!jvu~Fo zDJJ6aI9ek0Sdednfr0aS2b{7UPU|ogu}wP3OPSb4Vk#PNI<#P^KJo1cKJQnqGh{51)rWiKZLk6>PhLc63CoTwY+zwaYU$6tN8?_UzM+RG_ zXWi>5=B!99h;o+I3V&Kqq|oai+#eq;r4?>#QAxb*z5cE67o2CCAw9~AHGH}wa|38t z`khhjc6@Bzk66qFAr3~d66H~4ew5!|>`BCX?#B_&gc&%tSHWValK0g()+gdU0;RAX ztGyVi<-G~cl6Si^m!U2IG6E;%Nbr-<*qMhzCOHCf$yn$?#=&4R9!8J}FosNm3FJta zLP}r;nF^(38q6cpVG%wrCR3maY1K%pMOp(sHzA+(_Bm<=!f2;0ADS7ht4vdaX zVH8R*dg=g-v;#9by;DX{!!r(}UD#+9@1q4D)NvyVGO=BwvQU{#&)Nj}He(^-ilt<2 zfs7VH`&&vuW|U)Tr9y|aebhf$YJtSF3&BG!Lg~5~rRx&NAeTZnav9{4%b}250Yw-d zNjAuujmFZuqh<1}l#6a?iR?wx=Q75wtq1Ll=Vc50a0qGwQ(8ZTs1Lf!PIw9RfZdj9 zm`})&7m?~dcok>k8y%tQ76jf~Wx=_2(gbdJQH}glc9U1USS&~SC4_p(+V}*kk%t0u z?oN0Ir~SLdJj(lRgAbxSdmDTd<#so1gHNLTF8HKa5xrR?RI4x&G`uV2Q87Hl9t>+v zSjVt5D;8mI7aJ`qS_@vw8#Q)qfoRmQycjQ2mbR$0#Vc?G6R;wa6#GcApA-jJQIHjd zSW%c2MOaZ9E3!y&Iw{UzMO|1?lofR)#hExYJ}=5Du(FgYQJHKjdlPvP9|h;HigQE+ zR^gkXZY^1A_`7IMEBv$pf{6tFIJr9fZ-;DHSw-GBIVb#U3c-w%wGjdxaz0s{5hoQ9 zLQ_(9iIW)-!c!>GI2jco>VBpA;-puEcv4aZ<0KLxMhYbyC#alFhvK)i2=SdFESFCr zB#@*c97yU55fXB!eXVXdK*M)gSyeYCZ5u4y>SlGrX+*5zKpbw2kc^b#LUFhxLZT^@ zNE}XykW7aXMoL#vi7Z*%vIxmZNt+gjvIxoDuanZ_Ffu~Ar=+yvP!J(KC1oRYE9e)^ z5fzInl(drk;@oI%G;;`XP)E^DBk|HZjRHZP=tu)Jurni#fXvS{P3!@pWWRzuYfYJiX zwCkCTAw`}a=WZYvpM1vkKm0xM`s zVo)hZcG+0}P0*{r%5fOACR z7wK1wH-cka7|m=YM@6%XGvjUhtS%d%u)ykKm)9kwJgd+t=E+vF1j|80wxTj|)J_~d zK;orNV($hxvcU4%iM=U_2PYEa-GML+*#PzxhHUt1CCgfJJn^$-% zLM!xs2#^QBA`hZ9^9b}Ik3xU48-|fRXw5tZ)5zb^dU+hJmw!MFc>>muCt)pyPbSa7 zY2*bsgS-T1kyqec@)}$~-hhkAKjAX+He5;Gg^lDrxR!hXo5@FT1Nj7QCZEAA7t$cvNJHc%8YZ{X2-!)~$Zl$p=V&^4 zjdmgXXq0?PyOQr|Ci#_SQJrSfAkCqfw3|46PYY-s9Y(v;k+cV$M0?UQ+KVosz3DRA zhaN-w(vvX7X>>3>n+~DpW6H~r(?(iMZ=xgUop|3yN7F~?5%ftqp6;a+=s)RXx{pqw zAJZB13p$hjNM|udXR}ON%7)Q0b~v5S#?u9CDqYBC(?x6{J(^X~#cVk(XSH-GYo--! zEnUV=q$}8|bR|2R*0KxfDt0BUXV=pPb|Y_ghZKB4Q`PxLHK>6u)k7jc7L#slDBx&dJP{* zH}NTSGcTpr@%i*md=cHs%jsYEa{5=kir&tf=pFo6dM7`gZsRA@R(>Yk&d;Yi_~rC& zem%X1$LaliD}8|9MIYq%(1-X#^kM!OeT4r5?@!T3`SbK~{tEpEf15tRKcG+YFX&VJ zTlzF_qt7TheO3w6y^2MjQo7LRlpOl9(u2OD6w+6f0rWMch`z3jr*A7$={w2{`mQpM z?o(p)ePtE>Kxv>KD#y`}l=bv8;&+m(7L(a-z&}eIoYkMC^r$*bmXxvtxI|cqjG=7;VS$!`xV&;l}dpMC@`j%==Y?Qa;l_#0Ed#(1WhS~C^=owgu&(-co=dF zJPhrF_k=l!p||9+kgl9YTF4n_KlV|oqy?%#e`T?>J5?B_%q8okXFW!lOwPpGdtjO} znw*6p9Tq8vNL$o^(-a+DMjQ_~Ls7{&7&753g^_bHoe$1cfSiXRKU~0nA?IT#02lM0 z$OV`xh)(bKXf>N?qhHCtLEG6xS7amq3N2_8t=((+=V(WpkOrIiCumKZV8IRiL$sr> zKo{m_{vHvdngO@)chJ5zp$lx~|0GvpC<=e&uam1le7)~Z{tDTEy_*R;_;X|<(z2AP za5%YI^p&y-a>zBJ|A2~*VAzH)e;0egLV4@cPuR6;wlHS3C<5_y!j#o)lK>4_4RwMl z6rItcsfAIGB`uE|ioH?q9^iLGmEB-Oy+Yaj$>JNJUxCF%PSfJ3ZhV&6Vj{|?N73Z< z3GTPGlE1Y0P&s`l*N`w_i$>s?M1jJhw<1l4t+Z|DFD|s-Xlu0p62Vg3wOb4AA5Mf>f0u%Z&AM|5>7|sGPiUnab zOM`LDg2^ljGgw!chk$f6%YqoohDMeH$FUx83hN1{vtDp6>jRgwe7KJFh1*yG{Dl?5 z-K-zn%Lc+D>=4+)2Eo&8D7=DD_AV=e&)A{xB^wT3v%}yARt#-y1ku?@lFmkvD2BVS zBS--oL;ADvWEh)3hO>#}2zDfy%t}ZZn@kq7DWrl;B~@%1sbSMe1DipPXEVu}Y!*2O z!xynKay6SnHnI8SX10Lb!WNP{*dnrv9Yr2t<>U!gL7rwy$xEz?yv<_d6Sj;sedLum9l?}IqXhAd(4Wnc9t`*`)ML#AKZ+qD?WNyRGZ5%u| z+b=gdBhwsbBq*H`H}|0h{m}PAuPW4$O+WOi`U$5>RAyf)yFJ2-MRumm&ioJAv5xGb zzTJ=$^$8y>81)Gs4IANWCGSOp#lCpkyF%lLW!RkEDDPU_ifq?x@%j%EAEiR?Yn!rn({{D54-K0;{xgxthFC4XX{ zlUDX6!r~X?VfF*r&HhdP!G0mnv0uq6tc|?Q3Hg{a@(t(Yd#+N2d#Des`7jSsi>J}9 zJe}sDMc;>ap#yl74(46yFtqNAd5(n2v1s@1bu8cz%z{g$1ss4yaJIC7gCrNyrPUcG z9vCF8&LHtap|mkq5VLp0- z7f3KHME~$YxuY}yy~c~AB{~Rw$%`cz4n+@BSbshkiN5GZQgM7uCXuPs2Y?vXoUjK0jTGyo*g-;82sA$R;WN1jvREOv5h7Mxv2uK)^zzSb%R>f~;C-Nsx^iQN5LX zE0EX$TCapk33g!#b`dMw61Jf-VmB_W1;-zuI}N+w2P@)$QA9wcDRY~4Zu8)|*?zfw z5*dAVZeL1nfs7G>jFFCP638ej^J6NzJ(gdx^V{tF{~YKU zhY@@XjOOEE44()kd=gCMM?x8&42$^`sOD2)C7%In_)J*GXQ7)m8?NJ}=v0-#c0LCl z;&b6iJ`Y~z^Wj~-06yjm;ak24{>_gf8b6x&`C<~~OGqxSAOrbQGL)|%Blt>kIA293 z@;Xw&k0E8eku2a%WHE0h75q4|jISki{CLvLPar4qlgN6$j-1U;As6z~$d&w5at&Wk zuH)yB8~M3pD?g9i$_T{(Je*7*vh;O5Z@m6{`-%cm-yXj26lP=`<(xdq< zx{^OYoA~|oIQ|$tfj>b{;ZM;s`P1}#{tUg0KTEITd+F8u1-hBPD8aZKdcZogCjTvM z%ApP{M_@60C}BAS)$pc--te z@}&d35xUTgrH8q(^zcONnGP(61;`~}`Gy26-;jXi8^|vXEMJ>|<&6$3hv+48SwKa5 zbiD*<4f@jKB|v*%AZ>wE@FuorG#H45uq4RGTn@R!gY%!Dt$jQ0<2? zbg6{u0F=;$5~_n_0hvt2pJWK(Pn`?Zp1D|36y<(E0;>Dj@VSlheo3_6MzwxPyxv9) zL|i71sC2MlZRBP}$(1$x;zhb- zDKv*CK=I;Xhc9? zMsY;Yg);f|{*kEWwp z-_P!(bsIp#CUI7fEmtAL>7Q2G9TjUdJ=;>Ut6FJqp`*f>U5uvKL>ek~P-x$xbSunp z(5&>9bVT@^sO5~;S9q7J2(5HrO9qd(y(QK(aSNL-`+0Q;w~r#1yL*71@n%uG8{#b(Lo8OOC@-a+-$$x0jaeDcJ4q*ZlSd@ zgx1RF$R?q+L}f;%vfCq8jHWr;Tj_Fp>px+~_G5=C+9#4&J}l}8pIMjjo*ysssIBx!@l=wcHR)WqTrTpd{C(7#A3%hE z2zmS?)RrHkw)_IMoK&B{#WUkVWEKvHB zYGnXvQU;Ral|#rG${=!{GMHSc3?ZA8q2v~27`a_3B0H5s$wSIvDb@U<(U#is84N5cJq^zblDQoB*%CWRnIgajBPNEMe z>*!<3$@D4Z6#Ala8huMSoxZD_K|fN?q+coP>37Px^hf1F`m1sgQByK?ou9P+m(meqspV~N#zl?S9y}XpghZ7 zRra!d%1i7c^DfutP0(IVPmApO~Xa>C>#$e zKCWcj7&(WFbvA&=FWE)noXhZH#oh~Wmhe%Pb9>>~gCR}Y0(uMgSh{`2f~TIbK#gix z+|tX7y!|Ylm)}PhFWg3#7Mn=)Zc+N<&8RB!MHPz=2|?SsBERLo6h=F~9sXau#Q6P>^F8yAU2^;u;C0)<>wUnh&AC$Kv}3*m zucvW-C@JM{cdqOHhpz1{oW#k61(pxzw>T<3x;$#O(q;2nIE#~Glk`QY^d(99Hwn5D zCzHh7=H+sB-zMkuvGRZ-h$Sbm&t%&74Cmg(xksIQk#j%Pxes^lhdK9R=Ppik9)s5{ z;<<&Rsr!!>uEycfBp7LyPhD44E{^g0B%HZb#Rqx9{~H(5s?gjGv~bheT|2d72Eo7W zy@PYqoYjBCMtd=Agq=uh*GC>S-C8(}L$>Hg$Pm2-AzA+fjK+W3>!7a>lRA5v3kqzS zWK`@gaBgInVa#EzwSSglB-gcZ%hBRZqgQP6>m+7mkj zJ2#8hKcbFM3kUvg!MBU3U5Efy&sRt-@waSR=_d633!)M1wk`6|YJpe}#Be4n%5u|h z1WzzewkO*%inufv^uug(L7cK{r8nVtAN= z4!j~jH$zO`uY)6m>*f(v%q*lxI~%Wy@VXSQE3k@jq+@VBUgvd)!dhB>E3gG31$Yly z8Q67O(aCSSn2FzWtt@1k7!`jZHix|I_BrMi7?iM*2Dj2yp~Knp7-MBur9^(?L@IH%-O3HYt6RWp24=&CV$>P_EWFh#|W(XnAU|xAN5BbDlq>SAHek+%k^V2x;(J**gQ7&Sm zYTFjY-9-hvWBS4nJSH=8RCuC-LnNhR^<*s8&`L4c1WbjXWiwwrSoeF4Vk{|HjMaS$6hwPiz3dz_ zQVO)~G*P5S7WqOU7S}@*_+XrTDLOaVPqN`OPF_ipTj?W`wA=0<;f(yu!X(c_B}xN7Wc+y#eOk{7x!uDh1JNn@}qsE1oW};Q`48W^r9{K zQUYW(dq?}U(idg*j&gh2J_bi$mDQbCnA+8fkklbkb}_D?FqvLNsqSdL;TYibp9{9r zx9%5fuZz$Wi(rjP(E!T10j7%EW*An`FB-AB3=nI*dCnkwRouNLkD_hpF7cY|3d1FiG}E3|?5UDI44#W`Zlf0q5Sgj$U=BuBn5!J|35in>|dHo>rHPD{5o ztDE#5W;hS-{9Tkn5Kk=}P4y?7_cpr8_cplI4O47_4UQ9$z>6Y#dOGd0y_1CSIP8mh zB1cl(E1I(#MxuOLy|G?fU{Ey2>OH{9-3)mm#LEX*JvW0@ARd%*$G_zil~6o4O4((Ey6$wl$qB!;~?n)bh0 zD(j?FOT2YriCu)8sAa!(Vu?+JoMJ29wy)6AEKe)_IdQO4Eh6WmqW%?_Nu{{jZ*e$qm>V|!LuDS>g8Iax>;*dO5ll=iu&T>HWk)BfeD*1qx7YTtT}(SGnWYrlHV^nmAF z5Aj^$p`HyM=DE(JdT#b;p4&Vg&;1_L^MWVjdBYR-eBgp@?g9`dcz!@djjG~YFP)VEFV>U&Vn^!;7W^6k~T`CicT zd@t+WeXr@geIM$5e4pX{OTEzdwcgM7o!;N~qdw5D>WBFK`XGOrKG@$4@7?tw{(OCy zzeq3gAEpoYkJLx{C+Va8bM(XgOY|fBEA%n`Rr*-}T78_qMIZ0KT%X{-3d5W9N&Z{) zBmIBYr}=m2GyJ>tnf_<=S^nqr+5T7bQvX|eng3&bj{jSIZos3@3wZUiKuBK@$kZ1G za`feafqHdduwD}wrq>3>>Z<}1^t!;2dP88YeoSD2-WWJaZw?%zuMRZpYXZmWYXfKN z#|O^SPY7J7pAp!kuMhlLKQpjhKP&K{esm5UZE%{tDY#I-F1T3V99*eiA8gRK1dr2i2%ezd7+kO4 z6udycIe4WW4{pTg&H63Dt@>@jzv^3qcj|WrAJYF8d{neW+rhgZ@Pyasj zsQy#vG5zPzGy12e%Z=*(R39@e>rVz-Z;&4zvnFKxPFLHxwg_28ul^a>B6^pis zjV$FaFo6Lh7}^EHnE3NR0p%&^#TbTy%037%E{+qa^^nUH%#o>{3Vx=Fw_4OP7|k^C z_KSKH6fuu@`$c^fx;g3gfyH#0?tU1>44G~ZmLa~!(^b3J*`AE5h2%K7J(-~nBXx3n zvWq7SeVEvKi)!D(Wabkz--D3G{8+2*zIAXk3t%YEeWQaxuqS*tT?$Bk(=8Hv^iW zcVH8oz{J;n@&bQ`S{4;K0^4CJ>x#AS5qJ>h%i~Es15d(Kc|56CaGg`X{9rzuW9JPX zidLL(td zZl87!U6`P4aA}?mdOy}pyk+FMS?|Vjv6bBreV55G&kd_^D9gi8xA2uvB*f z(?WEHuimYjO`h|5a!7PSG__XLmTUXy_OT605?iG z=oT3S`LZrOB0(r&Jw89I+khZvIAok(;JOgxt+v zq|KI_zbx{T-16n1N4{abArlk`L_P=m<%W#N`>c=L{LPEJ&hjzjfx^gM)>oeAofK(h z1#UZOGNeh{>6r3C{6YIzK|QjmYVMSKyC=9Yun9X#X{#Z4{7}}2k!x2zs#L< z@q+DaR4G0uKSbddX^a+7jWZx1EeWT#ThTbU>)hN;DeD6E3aey!~A z>HQbn#l{7HU3cj=Hm-lif-VEixEvzJ6)B&jvJwSZiGnPrAPwj4c$9vITvpLKr^us) z#E7jg*|dmVuqc+FB1*lZL!n!+bvHn|aZ^g`Qoe+fC^RF{y0!FpyC}8^``w4^rpwKI zCENX41$uj0i%MCM$MQtAU0Z1XD0%>vIzvW(Q>0sZu*->ZrJ7vqtW;02!++>HH|6Rq z?vL{S-@Xoau5&xN&ggi#-`pxPT2y8kEe86+M>=o4d*#~|hj92BurvDDr{^jc=Q z`xI|`yhY_=XHaGF)Q?!G!b>#dCJGg!V@Y)HrmtR5g){Bx71UB>u~@Q7t(w5PnfYccFyd z54!OnPK}39QXhdl<59>r9)m-SzmsO;DYDLZnw)ApL(VpyB^Mie$<@a5WRvj%xy5*q zY&Tva_ZV-I`;32*2aJ!%!^X#CxA8T3%J`nVX#7ClGJYaI7(Y{H{6c-kuQccdn&YLk zx0ldDuSN%Wz4S1zpB~{2&`a z5Fk0I^hoDbW1UWLUNw%;5o|WjWDR@qI=b0`g<1y|x)<&SE30tV76=p+W(~lB4vyOb z3f(H6q(F7};*qyI_`N+L-P;Sgc>AQFME3-Yy+d?nU9`5HifvYG+qRulY}-l2PQ|uu z+qP{xPn;)q{q;7_`5OPZ$Lj3HnvFeHW9>cWye=76ixMePmS2#EU7Wu@6MjRHubN!L zn`))9cM{3U`P(~Lye|n&UJ=?E1U>KR9$zNgSWmKVmVUMQ{O#);7db<9Bfn<6*B_fY zMB%W|Lvb)-LsX0?>$r!ZJO}$HgKtGZmVq<*lj=;U*B#?`1KB&+-!sbbjzFtIzoODA zWF_3{i%Gl1A8D3%PQR#=uI+*KwLK_Zi?O+`9Qjg5HgKO@Hs33({|^5)&{*?tG;RcfDx5MT%d&B?Vqet~XlF{H4uK*yz_Zzp<`_tc>tumTJ(NnFs-l;hyrQFQ z6y%PrbX$<`9hOwFn@~K>8#(|-NP`m4udCedCe9u7~TU{F5V*^0GZ3ri{Il;3Q zS`IIQVZ0M1Z7V{dyBiX{2^C%hUzvbRr*sk~w>j{LppHxzhY6udY9}Hqmdi{P;hamw z?ng!_mC8N{r{5u;rNZWojBPz5!?E^nLsbvQY68!Vij&#QVm%Zm4cv$-R#_`XZCj>i z8s%oFiz5B>irS^7mOSs_082hjXJhD4&(DL@gvG@fx{jdjCrU%z3!5u8wn^Ty)vBaF3OS1qIuKH1ofc#XLyN^ zDgisnLxv(zS^+7Nu_prc)Pmf=Zb)H#H^8{IwS1jdJOT@k?dm7+=O2o=nka?0vLp&R zW2vA|>Yyfds@W#WIgKGpA=f+mq3=yZ{aZw_qb}m;hmxuneZYAS5~PQ_QQuD7*E90- z))3Rc2ejP7O`z89m|^UT(}qS%Omlp)3Lj+P})KeRgkBNvU2jh?Q9 zYAPr%T*4wd7FZ3gtDJ@iTBDX-oWeb>=g27cqspq@{T72BOEKVK}{1YUkf^g_rdPvp6J0 z5jcDO(fSD}xg*iL#=xKHCrzxGsdb_fzu)8%7S2rB%tou2inQtU37S4hOc;S*DPJ<% z1GTy2_wUTNRq1P#4+MWaTa2A1=V8}9ztj!;MBM8yEuy-AP}Uio&RkQOQ$we&NN$ zF-q6G&^puY#=U$;WgmZKW*>e9R=<3QkB%W78{aA(v)s-d%iJ;^d)?NV((eAfup@OZ zyzQAWHSMa1@5`d`+*}^l_wgHej8Bu#={EP82rHEqVD>$BVHN6S7cHKFSG9&LH*=d6=$kuFDXQnwH}koGvMvxp6Jr2u@AsKX+}y$}xK`jk@a{rYo+? z`a0)51$nRFj%R*AF3ki>w?Z^Waer`<$}6pL@@E&_*K}2#d|t?@Y_hiWG-`Q z!{!wJIfXmPH~1iLdLui%BsXc94aQ5u$pDIXqJZeVVC)tyY(1PJ~X`0+8 zL2Do_^Ta2kBYBOeX1Ds#W*XbThT)7dYvt3nDb&EK_Bd-A!zW5>%0Xn)&K$pQsrqbd z+T<0nDMHYcymyUHx^fPQIJh?~QZ^Ig5g&W9Rfxi}I;&~7vWX6Rz}}EE z2udE7H)kMr)b+3nmS+nv-+d)hJfd9k^U4!IZ$;sai9aG(0CsXB5O#WGIbW}{USoJ4 zF|V=s>GSU*v$d`s%|BBB@j4;(!TJIBdM>s(_)UYsT6r)mOU~GSk<-_2-?qXV8iLbr z$|KqH&=c!bcIeQ=L&zC-!1@#JShM*u#_H8&!Bu@2I2)Y%cWJ#vQc_D7xaYIi7H4bT zyAxtN*r??>US))aZdqvb&P+#!pM->255yhjowd#{FzJqr>H_tIeK2^r^m0 zndI14%HXH_PyB|RUG@fye~57>CEk$dginmpp&Ns#V5^?!+h+F%aE8cf@LAlTx6_yW z35UCH_UX4O`0a(1y|1woKLAdv>D{)dhy6HNZt1WCYeb()A#;*PEGitd*&ruJMqPD% z(`FHci7sm-)ljj-m%zh%Rdy-AzR+D0R(XQap21`VJK2FVih4kGsa?%p@98aw#=e{o zgQyULq}VPTxkkQJt(boYti{wyyVP!2!&R|Z?O0SJj<*@yZnA&BKnD!rL>Mr`c7(YD zhw=pT$6NV$ijH`$j~x0G$AXSM8o6^9m+TEPhI83#hAo!KG1{SXhmKsLKPu}n0kf=(nDrVY;-g%7nGrs65ye{2Q@ z|3dNU$yINzs*D}gZ^s>2hF3K>iMzj?xCsheKfcmcfOoDUtOv_{_UuliQ`8&D!Yui; zY@~nDx1BAR&`VhzG1DO5 z<-3~Fc3?M0_%y;IUR4@A!7Z<5KbpKs;TmiT^}%iR2@^ZiJD%_-W%wIB;7llU;s>8b zc%=IVGn)pbM2&Q);t7p*VkDQEXPn6w#N7zya&o3g7FQ@tFvQ}CXLF3DN!d3H=?NM) zUN=wCH>&W4@J;tOD(ytNo1$;zqY({%xWIs#IG+yXS8F(pBzi>vc6pF-J8Xmu2Bry2 zZoad4OJboqHM3-gac*Sf9~z1awOmW3w?gSBnR?TRDfQ8egr6(m5e0mX9tL!1=! zxk_VTp-e>21$=|S6DAb&jndb!@``~^4Wzaa`#6nKa0{0}94LH%U0*52o{Y-Vv$dJW z&v&nQDpG)(uO>G#+7;&`%8A$Gf>NzVMn31$4|D$0b%*n^x%_269i8aa@Jl&wvdr%v zVhOF-FbF-O*6Ae$?))nYG%UNwc2)h=^eD18S!%f$%cmj8G9$uB7C?5DQlzM08XR`- z3gxD)q!Z!W{SIc!VL@~x&jrRC&aiM@d#Lo>1rh` zJ?rl0j5>)S^|PX|PLQ;6IOP%=po<$y?Juk&Yj(_*3l-hE(E|x~0?sO!c6q&6&kNX3 z6?w6oN{OP(kggRq%^K@^b-kF674+sxn|g7*sG3Sl-eop}9m>o%8NaTcy>zF|Ya}a@ zR<`9iJiq3T@5QaBa&Rhl$x|jAqzyu=OJn#jR)wn(Lz*Gws8s8?+k;Kiqqm%KslThZO-)dq9Qf*6NodkPY~6P zTJCu-@U5?XQWEuk^(Nyxmv1STpB8D-3puz!K~@@=lvfThsl~ahphl~?n`C!FX_T9l zt4}eD??mBPLn!-_+pASMmTAi;>tBAP5=QE8{*!NDQ?L&=Yg?D=Nco(+r817rY$BD4 zKQgZQF>zmv$hU7OU9;R0;UP>=f*oy?c!^6-x|H7x=OCnOCCWTlDfjaR@GDr? z{^%KcuMo&JTl&fW95i@b?}XqhjWiPxMmaoGkm$i>2pJe@Nq)a0R!)zBw5pE$rOmr$ z!PSI2kala3Y$+cR-#n*6QHRfum~OJ`{?S`53@T`9%7wD4YL9+`r|&TY9A|na zdT;loy7t77K29w@R3JfKlbuiCsA2AF#C2FHcHhANl+z3%d}Ui~5M92hxaIxhD3ibbEtd>HQ`-v?MeYhWE2vszaMA))KDr_4hzdXSs*MH>dFFX{Q3rLO zE3Zp_jiXqc10+D^g4eFjF*!u=$6*(dr@^i2;|fOOp7;NBKs#NVYQ0=gHp-n5|HTk_ zcG@Yf@4H*Tww~X2IXd6TbgH4F1I3}M78bxPLcr|cOQU?^+wFl#`6I1v2_erldMx`9 zVr5I?HUK_N>&K#7f=kyDwRN4egK%jN8oLFj%$Z@PIroq?%PP-`zI=EogtA8AW*J`P zvt5?X3)a(K1++r?(DX3kvAPLdbMJ|aML$3k>z`>&f4cv;GJA(7s%3O_EDl$0b~KZF z)mNOjy|$8nsSQ=u7;5U2dDkQVs)hZkjeTci-*aU@Os@6%?S>IWU#+-=o;47NI&kZ` z13PHsiit?-gD3II1wXUjFD!(B*t8KZ{g+z*M=WDUK3PRyqNa+Wf7dIeLY`(GFKiBP z+i%<@AasXXco$mZDBFp9ItzZN5}+T2r(J8k0k43x(RKgdFLe1+KZ%64S4Z3IWv@lu zO%H}vuiwmx9Dh33hykmEZe=8=`gto(tAAkfG9ssw#k=t7#W{>g_HNVpfeqtj5jUzy zLzOarLxrreD6=-j2bYU`=Wg`u6>rgj6KGxa+`&)IFPJ0)HREm$!Omx>)Tae`yo93L zoPH-zYxt^%5YI@JRcbF*izF*{3ld^m+U?!kXsurdKHNM#DsjF(EqX4E2mWMCHY~Wc z=r&LLT#fx|Z`C=Uecx%XEnSXGkGBy-~?N z=ODh`4Sv`*YaiB&&A5@N{=H^g(>0qnF*l4yX=*D;FL17%T~Dm{uMNkRj6O5mR&_7F zBm2)sPWUcBrrOPUrn6Or)dw1LOp`6xz$|3eM{uTEV^r3^t)KVil+GyfZGG4WGb$qx zz4>ddnSXTsP1FZC=G4Wxk-K90%$H}yl5C~I=g}!I;JztuFR(-Ll53uX38l!k&4Xps z17k^%Is48K(Mjop`GdDOT zboAna&^}GW$+(R(IOom!QR&tNMD>d8K*K34$gIA#4ONbrdd!hurJ;SynSn;QKv^)7 z*e6Ok{R>+nR$Gd_J0#Bd9F^5WEv5&2f-}qKJ`OCrH#q;ZM+AN{ zB)dz<(;pgyQ;#yGGQWMy4ZE+ZP>z(Vd{#;YupIlPY`xWIf7~0I-w5~!#OMe|m6qVD zMW{_h45yMNukvh!Q$-M(X!OIu3%Tp)@`m2cSh=wjK%ZvpIx$rbMlZ-%@sDt!=DhfY z?_O#jv{D|?ClC8Eu`@dUT*V@lINNxNaOHOjhwyg8bb=$M-610WQEskKA78liBl|ZE zTyf!0Z>l-RIHgPr&AK;rnsp8<#P{=XpqlL{SZd7SPG3IdV{4gw%&llrCSYjbgVP_@mPNokkX;CoNKS<8O)-hZoyqX zvb4bd5M+x57xf04o4P zT}y4j2qln}o;zFguSizS@AWaJN*ol`+59#M{k|G$Hm;p^T!G68O2mAjJjE&1CUU7^ zgPI*v2ivNE<&6CiYRRF&F&|Yx2FWZ35&Dt|Oqt|*H&0`QiB|FL*2ij`Wb&q7DIJUq zWY%4q#t99n`xyp*ZW|?nusz&9s(=j;^+!dKV}5K|grl9MKoOl4!s_IO=C#X*qVCBu z3xC^c9gAnw`~3>YjLy7+vzSX;y%`xR{3txT_;gV@RS??O6jqyXO|hk34ep6_Z1Wg_ z2@}#{W6UlM{WPDalA+#Kl2uBXkjH3G)oj8S?vo4Y1TDlK#lSYyBx4LxD0VGsRy^mJ z7zI>gS!t(@dyA%1ZR~zNT5R(O3kdp#WPAcpP6a~2-G_e3`$ECcAs>*u$+k--$dO`D zoCZ3Um1wpv87JHn`z4hA3SEEHdZ&dn$TK8!yT<0cf5bPrXPUNH9`!)8OI!i8eo{{3 zebbll!wbNk#6ad#&z1N8!JKd*oF%Vok&4|HsF98wSrGmWjWlSv9a3a_10+;+aslI8#?zeilj%jspGs9_JlDeUkdN?!{*HYcmtm zQOC5ajui=wc&`XwORq$)t+3wnShJtxMUjN)LNjsXbgm^+)FU-YNvwAU9-O7+bad1Kom8+Xv`O}QWDVI1^ z8vi56ObIqjB{XR|Ln~vBU_ISzqjnlAkW|3X;%k`Nfd;mCKq7U4;0(NQ0{oJ3Rs}#l zeNNdZLB5Q$2RmJ*aB-6uC#rKSEN;!ZOmTjTa2OQIr=D?+HoRQYQU;G0RFyx`KNGH8 z@NDW5p-wWFLd3B@R{g3cacHG$JZu370i49R@46Z=3uTM4j>-fbt*L#N@s#uyA9ymB z^olsO(r~!Ruu{fsN1m(rrq59(>f2veX0URkg$)VoE;w$mexT~zZ)lSeOthP&sH`$Z zwX&dDl=KEVu&lR9QD?;kYRG2Fx8BB(qRv;DA3e*gww8~>k=eiGzk(M`dWfUk_5NC$ zUt{YI(#Uvmm-e1;SY%^yU1LDnHs5*asPhSzNxnz%0oyY{b+{iXvba~n(Al6~k=ihX zsorJ~@2i@qiC%ycncgFXP!d=I`Vcf6H1%1Y1>STC}^tFXDc`E@?D;@f=1SDB2pngK>Ni^SokQ zIN{qDZ9F+nuYkeWI>65Gz;Pi=Ju_D$}BB`3w#+#3n zK~bC^v12sdF38cx$w>x(y_c{p*vKT!rLbEiwD$}_kgbk*r4ZCDI3!giZ`UPJI2bbS zCZmV)C6U8^ExHp+iu1oqldg(7Miq`1uQaTaPCTMdV4JaQk!64`t^~e8puCZzXi<{f zs>FVE9=={tqih6|ON%)!6$+ur1lEVu?<8ex&-}Xl^j>@uRRJPlD1^$k4rwYYgqC!< zIh#^bR@fQasU;JqVkMwv3pt= zo;vl+Q&&JsCK`DnnFMUkVYV3m={0@9Z)x{Gco=bx8q^tGGHzXP4hJ8{G5ZWAv~qsG zrjAjWJwwy^Ui?|!n0IieLppIrOy%@aY6y~$`(QoFco-Sb0%?ewrDt8x&A-KmjAZ@m;Xxrmk}KppI<90 zf@i%iEJ+ija;ZN;i9S#%V5-2O!y9FiYrqr4X+>FJf+ye=C~Rq9jZ?I(uM0=i2TDe? zbs7>wVAZT?HEpa~3U?~}YHC^-=vP}(ZvWX@x;-=GKu>J^_io1=c75Hs&-`ck&$eCW z;O2Zj*N;G$)Tbr5D03~b@eO)7RI;{_wfK3qx7obRP1-x&7RA_bq&+}T-rbqateUwq zqnGf&25z<4tnEB}v5kbz%$AZS#9ZBESy-AW5+8*SMWi{C`1Zw_EGdHcT@F6Q)95mM zM?TM|tdZ+Ci9W&U1y=+ufRArYHtiZjnoltYq2}Oo?^1=_KjVmx*&VF4@f~zg^>?s| zO&@q%YNQp@MIMG)S`toAxg!(Z@ANYZB(8I>sSOXRh<* znp*PwPYYr$&I)XcnrS%=cq);kqa9*g?7WH$IfT-+5ldVBbT%vLP3vP(st-{n^zv1t z5r3Xm8qy)B^RFz!*1omMXV;UX=}KO>mgpjft#OZL7Bqu(Rq?B$Y{?E4>Ws^}9?Wrd-rv zVdg*53EahQZwpoMb@no5`)6%aZMD~oCiiXGSSUB-ft{(N;l|q|we9A}&4Zf7+}xbI z*{-xq>6D;OQ6*n=vCE@qZmdW0 zmxm3|TYz!8cvcGT^{8SQ7V2Z!!Pq<%sdbDd-b7kZd1fN4fHiqwAPlSRU2u*py15yG2gBY= zKORd6gRs>-?2;~_F7)x?k|O698wrgy7Hf+q2f7Ffsb0XoT`ZXyc%u;t9LYW!I=b}| zZP!9Dg}m5mh^kSvT5nJxsSd~WVbJ2mg(qI6Bxk4zLXnMSmob9sY_Wye8AED;(78tk z!boLH;vuj?)wG*z{PS+p!?+@HY{|q8^*G28Ekmqsk&a11ed|uTJ;<$bGBlvDEfZ9x zJ(iAnH5+~`F^%k!k{Dd3sjfB{x~{g(C|$cJRDpWU8h=pIOlSAxjcFvb#gTl;P7JWL zLWiW3Utf52&QWc0mSeAckLCulP&!ha2+Lbk zJTwT?wtea%ZPiRQ1(|R%?pv4e1II`Vv!lu3(h+FO9dcbLYFjW`A@TlU8s3Qp63=Z#UV*B z19gIvh4FUAxi7pr%V~#QIqvuG^3_W`YBZyPWmPLLwwCa%%F;f!Ur8sYZn`z`Sh#Gz zsRT=!u~meAs+gzck)Ptzz<~nuaNzcI-pU+xWf9-w8mFt+Sb&fCnvc+HBPtc)7|*Jk zQld1UKdw*4p7QUTLk8Hw3YObKm93iu@qkm+D0lEGFqo!jv;UVMjb z9F=3(5}7woZ|$NW?r5duOAvxda$2`kI(15=7MfzbKN1bUFW?j6Gg0)cZoFnOg1n>t zc!fHr*{Iw2jTd*6I<>FtZk2jKE>M1tq4DD+<8geQQ>x*MbmYmhTEKoNZ+YO&0vD17 z&!5gHV&+96Fnz#uNz(!8s|ADd7Z$#9gssW~ zgY?ej)^*CpVy}ObMS)nV8yZCS8Y@q6a*NL9sGyl!3n?6QW&H*$KxN=MLsWE zK$&(2bfKT`bC(%ZgYC2^Z(8}|ezm~%dSU{V_3y^S{qYMjnNEdy*Vd2tYs`7Gn8FX+ zNwv{CLuQlrTU&9=ahlsfeF1nw2i)1f?`{ZTT*z{D7&{3xyV3lmNb@7^b-}c8`2A#e z6FXDX#sw!&qRWVLUQ)@lD zBS*Xeb5$9I(y|g*ChOc7;#`z|mPwtTqz$3RKXGZf{B}c%pd-7mk4Ko%M=ac{k3F35 z{;X!oHyme5v1nh8xV*8u&D|N3!)P3#yLC%Z`!;yxtrXNBjnD)i!puKvCAgs@Q{^K& zbq+#x(L5vPKb-3>I(NLM7%shutc4aAB-X<5iv{1l?qGOX!tMZ}TnzvP(k>ARqb#HZ ziX4<^2W~QwKj+1Zt=f?pOOG0e69u--sOLxD_`IMPq;8X0Me7WT&F4#Yvt(|2G)2`D z6hNRy$&=U2sNX$+D#6LJf8TBHaRRyRP-xTVq;;h+3r;2im%08T0T*8F7T(+0DY*RpzeJ8N^0#o?vbr2QHy2 zzJB7vPGI(?-^YU-HSV9Qqg7S`-A_NAi5Z5-q{7Y5CunWAgVq}I^c9J-MoT$4)zG%Y zWNVrQaN8;laH-tLGOZ}vfD#lxg*xrB+zw3BFQ-{;yK&s>UUagUvA z_lS#|t@fT^%RDJ4K>RlUauXpGt60mOogrOO%}!`9>9sDmcSFQjHt*#0R3Ta1UX(&; zqTco)7j_#P5|8j;nO&M*8q2Nd6zvgteMjAUJ8H&O50tFd zLlO`TC7c~4)5%;)2&-naix*}o!cLjAuX_8?>J&&;Ho2y-P+ZXjTD;go;*G@a^_4hv^iDillZ(KbTSWm z(ete?$XBu9r0bD}1YW{N`{TUP_$U&3CsNAN`Nz8!R%{jbYO$xZGfZs{{WsF8F5Zk^ zbQyFP$o2kvqIYXb1x9plds3FvE4zh!6Yl3AI_A+FF&6PBp2n|e+QbMqRaHLqqj#_n zX$y7xxo2)m!%juBb>J}`&&=f_O#66|DN{;NKlyG?lg3-TMfftX@rn_MV? zve1C81ygp}Ty_S13YK``Iwh=lKw}a-1HnQT)$*9z$Zfan9!RIqDhx9-Y-F#%g5>;@ zpORO+n!J~$*g3psk}TR8QAnr8QzCoBE2Nv*p{*GFUBtIBkrjzdN6)8%q=^eEkfL|Q zbx;%wlvxwrNKDkuC)nBF8sRoy@?=V1SmQ52GxZ{@D|u`ALvDNsvGVAzNogClycY8) zWmnb0-i1%);IbHUwhY;_(9#4?bl1Z0fZ~^djIW$4bD79jF7T+O$cA@rhNmYUGufW5 zbw(t(b9t>?`qD-+)nQNgoaidaNu0FG#58VJ{jre;&jn4>z)x0~FL!}I4~H!Wqa_Do z$$M@Vb+I`ivWWde$cCW($j~AL>j8(L-!>!w;oG;`mt3WBe|e%Uh@IMO`dN!rr?K2gwONRoJ)S6590h>pw~AMHeH_R50UTNOYlS@dh1}y0bYjK|0 zyH;%;29u0{-{;{O8#D|D$ z!19{ZuR_Rt7A?d`9LOeRB29mI-C<%Ei&NK}yIdu_ZyA&*T130M+v;HoAizDD8Z=bs zXH}>%Xx|C;R{V_~S4?uYx+XLH;UxCe9+RT>VK;lBBgAYWS%4bX+0;wj7i4EQ0 zg2X(~Y)2mx#vT(z%Z1~dcY#s};dMg28l|bo7$I}P*P31_MnaOk1z5&Ck|fvI6n}TP z(c30`G(*)ErBdsxsZJ%<2-K%M>Vs_UL-r`rZyHJ@;}hdIWSgnDaHbLl3IT|=o4fG^ z^z6}h7a`kP2kkOSSrFv-2tT>-Bb^}O$Fvw!aSnv=f8Z4YSHp%)H8S5E8E zuM+;n^0xB@N@`L7Qp;c);RLchcZ2qi9w&16ktw}F1Q$)j;IJ0Qq2hFr)@Q2&g1}o# zY+KZB&XTX+3(qoCk4=9;_#|X@`sU8Li@gv_R<`qIkcOJ~s-#z1iZ52?;YgW~FRA6k zbU*Yj@@Z0_m0EkD;--B4K@n}}+~cVmwba3<_2zZ{c_kqDbNN6NQ64B?I^JU|dy6sx zGRM1&l>(dqqH{zPhS(fQ2xMgWE*M~G2z)iZrJ#P`bC$U4Wxk~%L2NL`aR*um_ayjZ z_gb`L+6NsfZb@P(_`q zrar%kRJQ|Dg}rnceeRY!(}Rl8mt2LMz^F%skQ~NRBv~nF=uB&={PCpjK~KL#HE9IW zC&l6$VcHpG+L@JY&lx?)&jfKBSmMDrd?&CT{xYQQBQ(h)FMTlHIrC5b2zXVWZAaLh zS8tVdNtzoJ7`c|$N6>h@VEmO_j z6+C_(TNaH49`r`ryjdKeTwLJ_ zB2lpbVXpKb++adbPMbS3kVME*dbJb9z63c8uw}Uf*;;F(n%!#~auQd%fJ|bUq zAdSs!g+|OI-tS`4d4F%j)YqQRMncItZT1v5oe-0Wt@Raxb%+r*6W;emCj8m{Wl3c+eVkn4C?>ikebnN@HT{5KES2+b(xMkw!2NI!V->t&E5+nw|E3A%6M zW=E0;+Yq~J%kiLcG8=V8mk#Q7D&9F_)N{M$<;b2o?E;5#n^mFRg6;?>`RHegeo4%U z&JFl(&P!ZBo8PY!NSC;N?&M?0?tyKNZd)~S{+FS#ume-In}4rE$rVgL?3j{$$)s6s z(zzO;ZoUyub+A^ST`dY<+R8-U%$}(2?*60Tm8e#)_T4ye`*-&Ri~x+xCbRMh+avvLNODK`V$afF=?RljPNI)5U|_QSrHJxy9y?fTLTDcdb5us==~Qvc^-W z=B?Gdu*WW3)~ZJpjrm|Zob!`lOcOGw|owwi+q>(&G*AUbdBi~sj z-)fvdJ;cQu-)lA2K|Zt)o~jnB6Pzh><0!7<0~(?joP`O22%=K4}92Wl~-S1o1)STj`D}3mKE?49}s3V|nddNSD!2|L1a2%k~3)UKNr%jB^ zfCah=3#J_cu@;WkuHa#qbvLMR5d0xdaD~CaN983{1%L?)ARx>(CZVb8upCu0%F{5jPG`^58hQN>?IAyUeQ18f&@lAc`P#fdW6z8j zF^4@itZ?M%R0Wg;avxzhWdSo^yMe8*LBQPCLSRDs4jsCC`p^hNlgPG}dSqStSwvlC z)3DyDZo`%?)pPpPF#jpWp?;J8wnZ(50c#zq0Viiv&nd#;j|WU3!o$>|@I%!hu}j@+ zs;3g4Z7QLqblC3ptJ|`N$j|Ca`*ZTW={4sml*`DMNI%s|85cbgRtA|nYKHwY+1UkWgoAU) z@Oz74ybV!ADfZMQvUrIy?+HofhP$M(Ch3)3i-xLxH<`NR2gd5dt6N5YTw88RMkWON zs;CqU>2bKo5rR*EEIWzeCq$nxeO>!b_+jw!BnDJ8959Os+viY?G#p9UfZ+OEe_Lct zA?x?EU*{x0BEQfbAsIk+QL1q6?I2bO_eKXl0U-{^=^rw`ZQez;T{QfnQgD(h!s-t*t=#o|e8j_VxPD%6z}Ny(utP zu=ZYrK3QzU(xrVx5eMsDgw$8uh(~t-wSq{42UO4@;k-dNoanH(63uQHEbvD(8sVTA z5Je8-Z^-$f0h6Q;JXVxyeR$)(EPMz?XaM9;fcX%Z4gy*$uD(WrNm!D?ZNF%{sCgG} z@g{hM1+QP6J*sQgNnhYR%!7_IIFU0l-_#Z`!qbd~)-w_5>Fp%BASJEkAi>$KbZ*c4 zf?i&TM1yZLB?NnP@is34{lVPUtm2bm;+PsGy zS?j@q4lMkgTbhcyxH2H8g4Hf{!c*+rP}Z$YLf|fC29l)lBxn8530hjwvyQ?3X@+S% z)tUcHD}TMFXWYdK*V4&Q{w1OMVVAbo~q3txHoaqWWmnqM7UL=MFixnrt8A91+9M2tyw`-Ck@|KK7j zk_9flh)N1iYjlOzP8brf`0#%aLq(uO3xW%jjN%`5iPl;TX?vx$A`g2qceP0Tr7*;U z%yDz42j7&_9&ZwDD`yYfFYx?)p#Bnbe*pC+J>(8w{MtSRCI@fN|AGk)`yckP^_6rA zW!Js6z)TNbW7XyZ7??^c``#2{hz-`Tm7tAWiP7|oLnz_W);iQ!r4x(2$o%N~Pl^+3GpN1|;Y0 ztxf;BBtGFLKa0MKHpLi=4g&y^ls{gps3_0-y6G%iqJ$Nb-LYFexWdAwg1P@$fyy|T zZLu`XJ^+4}mA~Hv>|@%|?mb+=b0)=&i?6Eo!KCQ9pWJV-j|fi)mMF_XkG?B12at-V+eNW{gb7a?msVvfXQov|e^mp`3meQsFa<|v!3 zqLcDO&*zKjGgm2Q_tqA+r@3pbGc-uixg>u6Ts%EpY(lDZXj%OW`agTVE&#*JpZ{7C z0k9w-od3T)Uk>&zu15B*VxIO!c2*|;tF!UH6947Da{nbpZATSX4gK#da&d8}3U1`$>IH@FU~0XrJ13Pu#gUEg!a~6XV7V>>5s8a5c_AaV z_g#`Z*V{cyNR!8Re7Ej__sm`3;nv?@;D_VS7wk^@uJp!xch7;Z_%qecrgRyd(xZz~ z-cI9-C<$W7QRKcV#>Jtx?iXc?wTKS@Hlrv!}+ zi}Sr5AZ8Jk7S7t|li=mb!o_A^({HI<7~z?VsdoN&?hsIr7?C8ZS2+EfZyuH{cABln z=aipIa@i6cSqwRRne>`KF$Zh(Q5~W6P%GzFglN|QH^EkMR1Wu;o~%`tLD*{T6{!(^ zN|OWULjUz^aT^y_e~gLwLGJphScVM|{dX#?=vVj6bXkp7tucI0(1TfMu$twlt7pO% zvl0RNma|)$#T(vv92rZ7slpp# zfvFOayGCs!^)@nHMUoeoJcN<6hsJuY(faK;??rmh%`-g9wqGxUe{5F20I#k$rwWHm z6G`qZb$hV6OnPtgu>3`9AP7a5+q;MJ1sFg?Ja@DDQbdDa3ZlqNq1{`qd%CLq&lYS< zT-UE%lCfVPT0_SgQ&FDwisx^M+3o7WjPjSQ#IxTenauL`WwM<|j+M^j7Ae=Dgsd{z zKgq;`;T~ud2+&THLQvajF~@10B>6fvH%_6=RyIwDTg=%8=zdc z42JS`OzzK7T(zE$+L~X0Ieqlr36*Q^O zoCOMGSH8wS{G+=9R_qS1MxI|&2@a2qxp~~|jZ85bm{6*!P?y4g-jRF0V*CNv(6l;~PecEKLa%jjBG^+N@Qb^2#T@S9 zlS!#RE$^0$aAajr4s=gYr+}=#4H8}?@uQY!!CxaA0eXC4*7}u7hb95r{fUCsj%p5- zO4dktkBOf~6fH;Qe);w(!4mv`jD2H_Wnr^*>rC6WZQJgiY1_7K+qP}Hd)l^b+ni~9 zJ>S3g%}wrI$=S(CcGaK#q;{%yt+i~Ve^n%8XcgBrHb{%aCaCKxrmgpL=fr1fs+Ey> z_Bfp)J{@sA9Ti$po3oG<-4Gx77uWLP#% z6RI;poz(>xYZ6LJ-?QEG|7VefZDMC2fB^y`zy<2-l_vQMx>&^9cr{^s1*Y7JAAqjY1 z8OcWTXxGfb(55PHCG0B|=)^7k1&Y-QeRQuNg?T#(-U62sCBrW6=^?M8hy)MSvdAaJ zhHd19XyRl2YVL|PRX}p-O{{&`5Xu@?xW@H&O3FS;=bRnI91&3TJXO*_e=& z14yLOD6+i9njMVW(qsLYu40Q?@(+o@NlKvyh~d1Gj4Uj24G<>%p3HM{M2T=u)Tf$h z4NI4MWf`)Sg`5zq3JT;`@Y3N;QG%E_6Bh28q1OEBaPFLFi3#a-NK(ZlkKjfFvsHF7 zv?weREc*3DYHH!7hpT#IRK=nDh%nTcYgy`kxzjWsMyR9@ir@xkgp{WQuArWjC81|}58=!sy{#z>D?O;PBH`OJ%r8HmP6rmxyH;V)3pjuVNpH>ue>C^bq= zG(eIixp5TfK_@UJX2fe3q^YyA7ie%L(uBLp&nr>-5bT}P(64ajm>hCfQx*nZ|%P|G<4)-TxT2Q_a=WCo7nOLf%|He(S%DS56 zq-jy)R2f^d_{o@WquF)2^YFxKN&l&T$F*} z#_WgtQ*z7+l~~FmNrIyhzIVD^qgN#~MPWZN*^MG$t^XDT-4lbYvn_d#3Z34d4Xezp z!&2+8!&3XOLlC|FnrqjubYq`r<@c;;&Bi&=%8>m@q+18}_Z`^ZcUaRoY`N%-E?n8g zU)VT&|6JlPTnyBYP?psll012j*S+x^pK$RUKeF{iXLpVmS9Y!#SK!?zpZ>13K>g8= zZTA^8tfBw@AD{FYmdAg}xPpJ5b}{iCz`Gll*Rx_+Q|mVQREX#3y(zZz_b_a5`$hl- zZg|0-9O_2M?^==+w+(v*40+-bGlq=m4y<$BK7hi!N?e!%mDaLizZgcnZ~e%BwXQ(P z>@^$j%z?~3c7pMG=rbj{J>H4 zv|VfxJC`A!#@r|=ex=+=Lab*rq3a|0ICl12F3sDNO4gksOduU^i0ZNm$xTe=V~c-NAzrsg(W^@+)n(?${yGs(3bU_S?D&$q=&_{(Y)d{NLo)0 zrL?4&BUb3t2>nV5;%ZDb5~=^o{2FmYdTU(4~ni6;{lx}_`P@`!(FXmb@C8S1)dadIZWstcB!o$#vr zu+D?Mkvpo79zkLrBh-@*H)xOSnqZDXdLq=Fj>Cpv{1~6&5?6 z05&ktkqPC_(4^SMSmrhR?xMz;zVb7DU9ogEh0?2H%N1{3CcS^Bza~s1@vmu%C-ede zTxzcNUDI=G2I1CAh%xfe^{NSHaq=R~KsA9jDJG7ys$%!K%m>#=nn7w!g#j3Ii;`07 zGgrwrE)!ziX50n0X1Lbng@O?m#W|tbS`upOh}zszW8*EH&Ik)myj#6l149at`>Z1_ z#$%VKgQPc)DgBP-M=ejzmzT!MuEvuEYO}COv>_ReM2=&ZQFjYAB=`x#4bXp`Jc$H6 z5ttwvs*^5l9wI6zZ5%8FRvZi!Wz<=YQ0Nq8wh-9JA4>d5G97y8);~}HF2Ar)r7Cl6 z2H=c;k>uOxAx-V?hmb2#7i+67MpX?DJS%i$zuBo9zwZg?uzJFYYR)*9(jLa-?psuu zDwkPnSc7YJa;>|*oz(zcIrbBz%?~#lZb2@YSRNL(J$WToM1N3E;wGFts1<-Z zvj~Ax^KN_C#17ENy`!Y+dYk>68h~6eBo#0oG1RhdPVDLuPV+b@C8v3y_}hCoH(|=9 z<~OuuD~)gb)Kp4H95B3u)BVf(7lM%d`hxG~Fj|bcpp^>(lt+yEHqKSl;{~kSqm`(yA%X{4fSwyjib4FB%{o3ofnf z!Vo#xyYi@ZOL0%Vx>k-k>0r9eN$}1R%agqbyMSenGuRdEmCG5Ok>prKHs2-1UXM4C z#Muw@`+L=0u<)l6gGfu9d(|kpdP4#Y0kF~wwBUmTuiLlwZJ#ul4wMerE!3@)KRpmD zbQf0FH@VO)yB9q`6R-`mO<~8~CcHbfE92kUrwO(V)h)3b*|!1KjnbvPt7Dhj%iY%r z2Iv155aUPc58fvXaszyW$^jJvnFXXvX9tyq<_6X!y9>HY4aNu2Ewu~tisdifr|!>s z+ibLX1X)LSOL(jA@3<@J4_ilRhv${ui`GU^2TKR#1?Hu+Yq)y=(u43$Hs zn+o;LbUOj)#(RhI*M;;+?ydc?LvU-^TZ{VYyt@MZ{^J%K;Dh`+1=0g}SMlHZ@jXGi z0qRlQb@kt&z4h#6hw=h>*YV#0_vz`y2ihUI1@FU0dL7t}g?N|09r-rffp}NHJptbIq}q$wnB~T9f>MSsNcCN^ce-0EwdlC6gWqbD9UK~GN-^OBZkbx(mEq5pNG;B1CNn%pxs zJxu^DH8UJx(VmmYyygC-x+S!lo9k_rJXjn0%EQy@%rZ~A@K}IcRC0bS=1~vQZItnx zL+~q8X5lkt!RZvNe8e*A_qK%B61k-F($sZCbzeVHkRxtCryqiiz-ohS&YC!&l{=>gC{}8R9X^SL?!Y6DlKbR8mEN1;%Nt40;seKr%oaEQ?Jj5BaY~w)P zPi>RY%c|7eqr`CdPaxlrs{X)r0B`~C*7ibV|Cg2`LQ>L?~%avsvU75Lf_ zn@>eNWVLL$Y$!}uGBJv9yu&1c_~{$%l zWz#Zdu46E&J>@a&pJawVn>mSj_9zz&3{XnSrWpvM-2(hw(Uz_yU{oIHcrP0%i2? z^f-+;I#}g;KdRRt^G%Oi5(c{q>z$SP$Onkuwn4bN2@%+efxN8;nBICuzunWa_8u<_ z5x%Lj#k5_og|B^NpSd zWcma8D?*n|?iTz~95#1TOjRw=pX7v({v_*U+tcUnf!)v4O=2~{Vm|RY|90PS?>UR& z@`_X{+?+>AhGLwce|;%~MxA8wcp?{vOBYwjd?okKo!_igZ0&Olt}58av>+;J5-o-r z5yl-lKhY%(MefNB@=tdj)Cj#3Cgkz`%-aMtgdbOPW`cX4lBeT&xtZ=aZT_=pwT7h4 zZh^tV`D8!aJIzYoS^#J1Z}KOKsFh`!6uV^lV~OJA!lVOP-WjaLWLRp_o;DBDKjU z)o`U}AmMP1N-t>4t|mm>4Nk#9WZfx1&lGo4Z9ySkFks!PiMPZ}%id?-(0pletp`NF zUocr4_@E~;ii4*Hc;GzXIv28d;@3dt8*U*0A;FWP~-rl;Nt zT%`H_7u|mUh&ROL`$>y`ml&G=txAa+nf~`_`4{&O|8o3;v)qJCzW@rausm1=0Y$;< zrevWCdJT&W1Q~`1QZt{+0+)g06^VBlch4Ar(S8s7RenEvykA7y>G+$OljZ5b&$qJ; ze5n_mPZXF#dDU%KAg-Uu)5V_oZTJgpNb&pz%FcWJGMOk6?>`);{6V{9Ac3Ea?~17= zP0U}mZCtp z_(gjs8VlsHios*%g-ClyPnArv6^_zb^*o82hQ zN`gPC4PSjTl2WgO(Dsz7Nn6)x-%}IJbn`ikvblJGHxj(2Lfq(DY1p3_PFq$l(`%ur zmQjfjPJ%>3dQzSVNX$sQaIlVC;MZ z5cU1)`18#M|6f_dXDOccz z5WLH-Pa=}+k>OEIj{_5S6-zc!X$)Dm8d%3Q%~QzIn`;eFuFj2e`^oi9#@4D6K28d| ziN8Kh4Nk3AnZNbh`+5~%a;CIHB>osJFC2PIFu*2NxeNDU{3sWKpOR|U zYOxAMCrYZ6K;JIHIXz-xhlWX~#mAYC-EkP6++QqI3+~1?{F>pDdQDc27X?(2f@3AR$&oJ&F|BpmcxJW)nxl zCfWyw+45MpyA1akloZoofCly=It~KQoqtVhggV6jiA|+OgSP28GNm|CmWAd@+X;$D1esjC$HeT1 zyV=VKYfJ2{;#oqea{S7Qxzd(^zf2%3a{w~IK8apB823@Yhm4-iI`f@(*7D+tMO#(5 zsYTl2Vm{U|t8%5jh+?SaEX$J>ENF&DO~@`Vk@^*9&E>%#=#IDKQJxWQ`zuV7edL)q zs{|}mW|T%0Cpg76@foIQZlybSqqu^5`h#u~Z1Y(Tl1%%thy|K0ccBOja=I&s{7Bmm zaEyuTgDx(ek>Gr;l5;mp*+0w?>^Bdi+(pZj^o>kj#7d#qIpHU#T&7zv z!NCtZr>GmjdtBGo^<+x9EPF}&zof2IA`5Qw3mDFRlMe*l;Ta23QgW8qNc~tGdlZ;KF}prs3Q!-PN(a<~hA5eAagpoz^l2*)qh~l7>^m&I%(j zR&{C^x&^%$hYpf3*786a@cog2A0#CUgQ}DZ6pdZf9SN0<4f~22^p(wiGL*gvhC2wk zMdV8{&PzQYBHwBN!yb)TJ)eyQ`4Z{nUwBJR5dvuI!5?X{@cn{IsNID*(%p1<2mjBC zr3y_CCS%q9iloWX z7AH|*p3P-}j7+k%?N``=Gh?ht7v4r&y^Axk-YLrvl07`Bs#kx zi^ktInk?edHTBlBc7|ohX6nL}A#DOd86c?~3yOsv=c7QD^0Zi)~I^HH^0{rG&R#xtDG&GbDx*=V`Or*N*an2Vw0s{ z4@~Cl10C+GsDZUSei=D?ml$_=g2@zBDsgZV%(Ru}X?|OfIO+X*?4HUN9(T1hr3(Nf zK=@_K?TE#u?}#MdWZnj*0m5pwA{YCE(z;w?nMsM!>R|2M(D37P4YvJY1(Kyy74&S< zq76xv^bW3wmBjq+ zzc1E;ueB+( zj7(chGNHp*Vn>-^_m|+jPME5U&zgqsFvZ-CAgM=J<%wR!8FZG>8-d5#As%D&KfQh3 zUk2^73P)Dpi8yomS}INwlaVX@%1PwoSuRp>0Dvdn?8>yK@rEyYXOi2**DxNVm{i&& zrl)%+;~df$T5;oI#+AHb5ZvUf%S@MOoLot7ca~`65YI}VO}gW#0$~=c>i|mdo2{aG zjb%o!DDo-4z(kk1!aGrN$2!K5EKmPXEl$ zz(bYfYee-9M;@Ba!v>G8;%e)mZ92~3-KHZMteSNCOyN1oEl$E4!oD{uF$k;ijbM;! z(5(T{jpn0XM>;0N6zx>hi3@jh$ne5F={DkUjPA+UXq_=@aphXDP1{&R*8@Lu%+}-* zvFHNdDH+&R_up{~ktJTw?9Elim_t6>{J59|oMx#J?r?(veVH<_wKls`w4}DSNecJZ zCCg&I)(V!l7@I5*`#yYV@)>w6zk@El`9>ZPUNHzOlt2!AU z&(1Azg;r~)U%NX^6D}mLVJIuS46lnWKGdu5K3i33iXh`(9N*QX+HK*u^py4UOnlLi zy!pbP+tDwy#m3Drynd{X=g1rYYfXuDqrva-7EL)WcCCT>>pTKWC5%CnZuLG|BsGDv zBh@6?6rd>2>qs?At%v#yBR{t9$l8Q(De!M`MIP7Gq|V0g?eqaQxtKx&(F3xDx2N-= zfj`-TPY~C04IjnT=N)NI4$MZ}wT6@pY+k&;(-xqT<>vLfVspS^^kzpKa#l&Eua8e@ z*ve*UH#*y4Xm?$Hd>hBKug z5?Fx35FK2>9;DrVm;eO}2i2S}4!0&j-xP`N8X%R}zJe$wTs!`{;}crvl^(8_Dn~Bb zy;VoFjhB75KB_eZey-RzzI!S9`#PirFtUmOSwqM9jI*_9>S&Tpys*d6Cgt^aSQ#Z+cK4EYKBa zaR7ZwQ(FO}yooQ~?r1-roaC97n{N(gjv3l*)mKNw z<=S^Uwob{Z*6f3?WAZtQam?+v}%pZ%@?K@EZRH786@UgQp0 zK5|6_rU${kix5k4mMlM9X_d3UC)_Uy&oI%^V`0aAY1}&MJ!sz-UuS@(m?Cr?{Z=%$ z%=2Sf(x}UV50flI2|epqSY!&*H3>)y`Rcgr!Y^1&b&ChOncpOu@0H`?S3SW0`R4b0 zQAb=R1_B}$0|KJ`-}=}8Y25KI@E`sq`G;yANU!9fJLa8hpPh*V;JrOzAtXV8!Bjh8 zl(;l75FUvz5@0ZtdkH+kxURv&U}=%VvOLi)jw3WlO+#KPM0y@7A?s$1YURqOvgOL0 zYVk_nx0%bAqa$gETmFh3?@ng!Z+u@mbsyL8@%cc2gm1Zn8Y?X)z?Ek-F({*H!zZy( zYAUfwyrF&_mEe!IeV_j{>1s!T}(Cm5@Ii@cZ3qNl@p8mLiD)?}_UHOUB3p za}DDX+B;q6=b}%nXlW29SviX!@B!uv3nZdzZ|#mF==1a-Az)+BgF=Q6P{SrCs8hI1 ztz{gZmxt~7`Y6cN!%*3hJ>%OczwJ^VIo_J+DZKErFjJO?4D2u$Ov35yQXNCb6qxvtKn-N z^0)|GL-C@>&`?iNeDi~C2!v)t3BC?tD5kBy4;~uGQCLA28XroIEd0c?MTCnp(qzz);2q4& zOwG*YE>2@;>aPbVelO@4h=DYu6)5Uozi#$#QW`qqUQ!MJ(Zue(o^yQ0(3RsL?zG$7 zbfK8dQRFTUoO5)uwryt2@P&6MY|p=2M?OYF;gVrWO{FJ@rwnpop|)wGVasZ|N*;Pn zXi0Ba{W)GQgQhtW@z)sbZ?S_GQ>3=SdQIw3jVYU_37Tg~lQ%=8_v}v2U*r0}<>#bx z60|}J+hc^}^gQ$m-?}Agh}Gq>N6M)o)E5X*YlI4ZVyHv?#gS$YN-HB;V7OMZXFr_; z9~H3+d*ww`9P%S8DVv zQyIAwB5gP{VL?Rm)8*ID>-l;G!iiqLDK=Kn}bxRz4OFtXEmH$;WTxNlqwP@33zy@MRHV-GXc^}<+5=lER zX(7V=-;?Ge#yEew_p3rwGSc8z5C+CbrM{kRbo zHs;bZ`@+70=W(71m&HKeC#9F)+&fPio;jee4HlF`CN8|}*sbqz~BdoWjYu!dq{0hI_FP^EiXt2m8U4PREHIsVJ^#UElHX3 zZFreKb*Y+=(ZYsRm6`KA_HCrhz>Q}M7WHUwMlzdGHa{ELWAA!2rCd~Q%9x|kMyQ!8 z`Jnh4N{4X~c(UtGe;Kr+C~Hijfv33}i0)2(6~sSluBtk-kF3b1OR-qP-UH)nbgzow z(fKVIZd}Bpm9DL+ql+3o?2wuwX2F4@aZ3g5O(j#yT*{vay51O59g`Ab=nYQ%Xz425 zVmQ*cvF~tBO*O$`(RCEus?X_eN70eCSy81LDf?J}pfc?cbAIISDv7$6ks;9pqu={w zreO-D(dT)~H*?PpC0B3Jxd4uT@8XNici)$Ji@u$bo7Hc_^~d)-cxAV-g$hGx;`LLt{Vucc!`f!}-a~3Grf;3&YqW_WpxBKC*S8+;Dmq z%i{KQ4&5n6Ax*z{r=FE@TTKk^EI5B1TgGk=h1|ol9Zt~i_G^?sIo{{9(r0L*3PmUb z=q}bQKeVF|J8~lc8y!t73gV9BO2MgYnpU@T@G%M<>@%OP^iPK^Vl9Vnoy)tR1fni(sihmRY;V`Rf=b`u2 zOjoow;(N)Qm?wr!E+bFe>*1d*y+`RQBSkA{E@jDJR+d9j?a6`=E_Y(a zHw5Pv`Ctq((CK@fG_+V6it>~lPF+tT+_}W&6D-az&{nB4x4Bp+;pw0Dr9&DtPFVsOVxF-?+%w;*5p%+29-v^l=1vUl>G?;ZVxJ z!4`zjUfK(RS9gb6CN3L`Pgq^k7-hpZS`Tybbq$*E#E7Kn%4?oLaT%U<5yIn0M-(Yi zFFwn?B>D(hGan0N;&iCX`dpb>b3Ae$9Cs3s$eczdiXL1EmV1F^TdbPl%k+UnC`hd2 zUY8a$)Wz{QGJfNNk|#t_y$aOgi{t12VB|B8mCMrhV=fon zK-b%~!_${8MwxU6nAq4u;@a|ZtPGUf-cxQ%t8u|k6B}ne3l0SuUvi+=d!HooX@oUi zoD(%$-^Q3AnK@5rXWvqz+AM?3<3`H-H%UFtca#F3RLz#!yB?l= z{km02qNDI$7X0(>J~q}j&KKqr@tycBN_+b`3RlX8Ya`IoyG;zg>=l{t=~sKuMa4Nk31N zCOAn3A$?-cB=pI1(Tj1nL&4RX$gFN}69daC!v5T%Ker396WJ94;=QlC><@p9gvk`1AG8}LQNy4?|aC1t4~x7QN$@d#xmc;J(hHrI_t&-?fyrP$9X z76px?k;~4$`6cQrw+{-OI+qNw_tD6=+w4U7YG(yx-Hk zr7iK=@JTSg;mbDNaaLT{P4V`B-s^l-P1)m}hB`N_3T8H63iTa;?@D_08l4=;c`gaU zUnqt+qgpI?ChMQkD#aT1mmi^8M=wnc?h*r6TQ83{%g$DIvSN#H6ihI54!g=yMU4Jg zUYmhl?rih%-71uZT2f=U#C6NDV3jXDFXCwwxqiJyj6*yYOrZBX>A-B|gT4aYQTup@ z#(=px^kqZJIQ3~mJa_KafaM+qfP%R?_L(AYZUM*<7Y6|3$XW9ypGxRnaDBYmcJu)= z&V9cjuMYzLB6;ONUyI+q(Y5jSp||Z4^qJFfWEWxY27n{+i~``v+`^#oq;46|d9rp9 ztB)^$F{=+RfYDntWZ~OJ0kI@*Nziz|ZindHVEWRnPwDOZ)WJ+UcX0wnI(F^BPC9n) zz+}yseF~uA5P8M`vSb`HfD>e%ApkmpS2=W!lwCeF9Z}mVK$h6eBlFFqZFd49=PbY! zk!J&-D|3rV=LXm3sBH(?r;pAPyQ_e%C1y7Wm?3Z51ke+-^#kaOc0}dMHN``>%ZKD0}gP- z3;FnE$H1RP2RA^E1-X!x`w6sZSiK3S{r)ESL#d@5C}akVICuZr9#T=;m?zmgFpHMIJ)7ul9)xYR{ab zV&x77$8ni4M5Rv&@^h@OiR`u7(j!p?Qy{H{vr7Ke&_d-Qu?xrj+}IE$hc$yB|1%6T5s_knsCQPKw!q1NL+}Vfr|~S~q^u z4B$lR(WMwdpzGn$6A zJ<#bA^W64>rL-W&g|9+`ZI2Q+-pmBJp@H-PoAV!MPXPZ{*)<$_H`t`n3**4_407 zH}Z1tR`9vMxTxElU$XQSc{sPICY9hsu*uu!=e0N?C~wy+V^o$TGBb|Lz%ca1t2`zc zkq+FflJDz)#W@;#i3Wh3Z3pz!>GkTfh^0#&$HPb)xq;;PHRC%ZO!}FgmIXBxfkkNI zG%q`y?_7GyE5s==I8rOh zDg;in7teS)cx26bRb$cgb6Vk+j0dnZ%E%ZP);x<l8g(E=m>_=>*&5}~)PP|PP0;NfG1uh*_TuIR&m}tg#A1TP z3!Ujj;rXGuYdb18(=YT+Th+hQhh<^gyE9<@3Su>cPO0z?jMtmGtL}xVL--1-aKi0W z`v+UQqI;QfN&G~V%mK9`>dxzRdpk;azfe z(?=?DL=1^Sb{>J%s7;jnKnIO_TG&x#{?cBDo3* z_nbw$=uNnvz-O<`Iqm57viZ?OS*-9;mPQ2U6M(xjQAvN=samrmlxl)ZQ|=$Q0pU8& z$*>w_lZT7mv)t+_Ws88&yLa*5g(L@}2`J^E_5uu&TuEb;0Ba`lz?zdETV*hiz`}y? z13?e4&>@(380JoXGy|o6Wql8A8vIVZ#xGHnlB_pzo5RM>lUz)eq5m{mB7MU(~d&^C~*se?yW+%g&{3 zr!ntK@3sJcaQY*Th?$l*S-2i%^eRpYF%NPCtOz%pRD3@uk6)xM#W+iN8g5wc)B?ue z$dKZZDMXOpkOPKYte4`Tply^zTWfai4wh|wjHpw{cXAO;iYyhyBM|d__%h6kv+pOq z(bRQ_fYw#R<+6Iwvw!p_QAlm$-i1NUp~4Py6pext8wuutRwfO`j#291?}8B160U4h zscmrWN0u>TtIZ#$HROBIt@TmzD`#QL1<^KL3WiW_Q6Q%#DDh+wgi~qPQdSEG8WJNk zri$7ixm=Aq0u2rF;zjl5!$o!W?|n@J94fS>i_nhP1f-<)^LP>xk~poYn^NXk5{w22F(Z&(l=~yD;&q`}Qwg%t zJ#QFWJt#NHnV9pQ#)*xpY|Y!$?48dMWF{Zh1;2&F1sW_*z~3&J4U7ssPK{{%8>5Qj z3}^x$qK=AsDhUSEfD5B731-w#djgB*$RIc~3HZCCyiAd^L|s!PJ&-Zp<*u?Cn9VTp z3Oa~~dhFn{vgc7BRR27@2#9wo*P+*-du-UO!&jw;VRp%ddkCt6`BDsasBk#b42f;58E*;*#qzCvw=6AOKTF`0Fg<1pT*yMceFF(MW<@DHI zynzaS9g?h}N^=C6N7*s#nMA$M_azN8+H$5z;5^_Ihk$Y*8Mp^}?ITvDy%ErP@nHNk z@0a>DTNc};A~a?VH%%I+RT(>|hb+dd#E|z6{Tx7^cUtyn3P{q)fZ_g435=za*r2I{ z^>a_SC83tfWjaxBhYxbf$`UINKHov*Pw9NTerrUQPe4hv0n(ZCjMW2K0MZnJaqH_L zKVx_sv)TO^y$gU=+jcpTEiBqaj9__4b((9g2ex2X@V<6!)3^fyN(1q>cIl@{w#a5D zYiml4iqY`P)twV^?%*27_B6uhQxo1P=g{r6i=v-XM6ma zTpP~>gvC-T-V$wEKaV9AOs=)JE4|OjE{p8@s=pS`9qPBWMgPHc726{Ne}VImh7Z5v z72GC%Q)c~-O$&He=NijvBic!`-ajTB?a(;epx#!fh_|~sr()XDkIK6SGPmmb6PsOP z!|v^IOVAVz%9MCdOxM^zXcacj)zla9k zvCEr#QQ)!ip~+(Ah7}H%?zaw`?u#Bc-Zk76yKTKnb(y~_zAwFMco}&Sf7*DFce8(z z`ml7T;zr{e72FkGnrFrR285s*o5BCeCx(cbc*7;=blpIqn(T$6y$oTXVLSc znBV6b_`R#Z#Pf&ck0T5y1z^;?8w8z`F)7K~=VKAjDG(1yB-0O zCn^VzDkdAmbSO+JGuBJcA}3n}hgB>UXjG%Ko{QNRcc?FxR}+=EgnKxLs#W>WrIdLN zDmeG3)xbqoE+W8#&cB4NSr`r{WD7-NRQ6jw7m%jq0be zs9G|a2jL!|>^s$|TryA%Qq^f)GM@}$+m$YvRUt`ch);>#MY;EInBXDNr@=>}PmvGePwGahP95yCKDgg?yfwTwzLDRhd`q`% zc&T<7`cQ1M@+01)>xREf)eeOo_Y8@ng~ie;dKr+0$yUqkGhfi$wL7=Gj!Pka)psARmRvZ}prj3ex55)VOAD+aL26tD_PRmx>7AI&!$kAqcec~l3_n<`JlEHkZ* zX%He;H#bB!3;wCj9dE4OFmkts6CYjL66eclzlO zf2t!M(6lojK3LWaxVF9a#trz7FY7eNx#L#BM7yOiC)eqp$C=DKg=gbg(<>LOV@@Z< zp7m1CvYPGL^ph@BMI5LN?}Q!Jm0|^@gQf%vwbFaQ#->>Dn-1pFelboUqGQubvx3Wh zy2E*;RiS$hkXj_EeP-=A4u?`{RJHzZ_Zn&xD+0+{rSzl7XZst-3U-a%XtL3*W}J7_ zcC0q`I`I`xfpvl(&`+Wov-zqe^z-i@uGCz%YDCE>LL-FR1WZLfIWx1hVB$=ZP6083 zrH_6-O6tVSMV}xDa)0&XKbE<9^v+zDKK=l#gnO|@&ko>Du5t-vL7iZJAaP8s_4$4K zg4bfqAY=`{%}>L~3Mf!(zu*n?Rx%ZR8rf-{+l)retS5%y{2-U_{*~rDl4scQN!KLP zpuM1gNoiH#XSH~-A3B==GeLHfQKMQ{U*sG0OmrSBg~gxrm&D5N>GyZ- zeOC{Xhjn=McQ~_HYn{&4;KL#@Jp$`TDyg*48GMQZ6Xd-{;#Gy8W>^3Z-JH5yeVOi?0It9FtUm~6Ae83w= ziFTo0PM|1T43xcN*TmuPTAXXr^Uu@$1#>F)k}?y2>IH*h z(|mM|cDL6`5{lY77pJrIg_1dV6X#%=A^CEgqyZ5_~MEmaK z&jS0C^&BrxssjhAB}}4CXd@1dDCNFBBj`t*#P&q?{L&dEVbze$_NqyQKFV5|RBNi| zwIuR6cXdNJ2UG?yvw+RSID;f+!O(!~z*{flPs$)TDFN|f0{Qe=VRgHjdjb5T;D==R zd1Z2p0JziEYKKX%NM^+q}GDNd7Xhy;4K@rv;;1x7D6%KYqSdr-#I40$H>yfR3 zrfQ;ij;+tp(N1+A^LGm-oBC;fFJ_zggkdihvOIH}ktSWqX!wFUC|@}_fiG)i zed1PrGy00dX@EtX2k&21pOloKk3>FGt?AlV41_EVCKnHU+I zhmBd5+JpSPXVicdf+e_H${# zz8S-(G9|8uHdu9$$xV?qw021u!U6#0%&K8g{9N9g1o7x6_}bKB$SFEpxNdn}wEEH% z6L0(f82hFe&7v;tQkQMpW|ynFY}>YN+qP}nw(aV&ZP#C&x%e|*CYgD1E>2FeRob+6D2iY$3gObhsib4Qz)-@e_e%I5T^%3?OWs{>M1GurYkxG5;6}WhlC?x z@21Alu|bzy&epo_|JUlpLY?Omtb{8O>C7^9st(wCR;Kp0&@){X=1?j1Oq zq_bDw3%*?=X#jBKVT~`c+|RB!J%`@5Rhzb%6bvogmu5du`yZDvW@p+~PIJKX~kIA_xwVCy5w9`Sxx-ja@ z`7K=!Wt zb!l)bpidbY7y|0qqa&ynoC0!uR1p6sZV6=&{WenXp|VtE1|s;{NGl3>ic#}!{VTTL zB+jWzzb4|6q=;l{204_n7-$ySsOhs*UF*lc*TkwJ9Pu`?6F5=QSh3ac5z|bn+Ostm zZn)ZsZg!cqhAGmN{2JQ6&mgl7Wm;3W!GTT|W&x|RW%rawkgfw%3u4uluHaW7llNYPP48}^6>z(<`TLXy=bc&=#oGs#Q?H1Oc4TJ&o zWHV$Gmm(^ygO#uHf1 zUm}B9>1Rl`iOFPw`C#sckn}ofW>ZvMIjrOCBmyOZZ=-{u3ObDyCAC*riKJGb9yDvzqT6UzCd!#7?B5WnkxVnGvczbhs?0ogQ$ZUP(x~N=z z>qslS3E?bd54qOma+!#iHi(slpmPgTwVf?~rw(ID?!y${f-bmbQHW5h#4;j@E@Kp% z85_!eBLKg{U|N|slt(*AfSr#(oQS&lg5kCJ@;-sYc=(5C^yRqvlX3MGRPD%c_mMH2 z0^(Y9-5+P`zTqzQ^~n96aAzvw6{N4tc|+=^gMYX#`SP`iQ^GDWL1WU)?61?3tm8t4 z#ogQUGUwV#Q64Z~8bZrmDpha$Z6!ZHR@9p!ctCYGMEiJaadyOd&;Zuz8{AbnBR|exhrZe-#%0*Xd>d9~#eprT_4+%|BErUCU@F zp?gbjY$V$smf!>c`RDgrskN{l#}JTXfvYzQkq-auph;;~bsxJl@)s_VjtZ0GJrP0N zLT#Y)?lnvrI{iS=+9Uf$=Z%0c7)~@N?c6 zE4jSrOmfg^sW)q=kIkl^Xdsyg`vcBAm0>dJI7WTEK&B`Q!Uwnow?@_l6c=v6aW#fL z$EdN(XuM2`gD_ipR~cDG<(iU|#k8flyEvXtf=~KO-QwLqndBH5O=|j|d#Si!x?$aEP?oML5EjQpv_b;^05u%NFJU9Di@^NZkz09+;pk*(&R00?64$xL zwjlH|x=A;uE;|qZ$>7UJx(7Ht`rWpNc$se28Os+O+AsJb+~V*;?R;=kbI9JQ(C{@L z9Xfk!bv5?Qop{na`b2ZC%yK%USU7QN7k>U!BKrx};LBO^O+PyE+9Th*V0z;&nX@^w z0d*^1i^s@VLV1|-c+3CKvvd&Vj$(*}x1lH0u;VR^#0ZhA;=H$HuAAK{F9MK2hvgu- z1@l1HWvSc6CIz8CS!ujj2~;!k<_2$@R)Mwuq8;*xKKc-P(3%A8bv+2@-(68WqXiI5 zrlEQ#Pcs4w_U_i?$SfuarecLek8k?lR&?y_7M-f~wK+i$w=0yBM|Tu+=J9Z1RZd^y zB8AF41f#sLE$sv|=>+s*=TLj23AhG0E|_DKPv~WoPnZEpj_9|tC|SZC%0kaAkv}qK zZx^ZuwA4=_WB0I9x&oA%T%4Lc+RWjF2Uw5PP1f>B?(hQHWJ3(uH)$Ge5D=nj}_FQo^ocnewId(+(}*hFNEfevk=gx;>k!1{ik zw7`6n1J<0(6xGPLAT5?^0VIpyKEts^6li*)OYW39o78jd>JS03*Q%mwqV@RhKv8k) z0XrJpcHef_)^kE;1Da~P%kYr>y!%k`#-<8zE}KH)Q4ZKjw`^l4awOuzJi8y)!M|tK z6nG{Qen#e61lO!<@hzoiRu8+>R5!4A3m%c|ArPLv`!Db_dqlr)4UlgjEIo%$W^O4) z_>?XC7oq~Zhm>!9|8^^3%cDr_XmO1e{|f7g94Pk!#pV)}FsR1HEk-fsehvK;K584k z8VnE^Ry>1a?xX`bUu1PM+rJ)UWg);ZckVv8qVlhoZ~apmf&9=!xU%o}asb4|%g_54 z5egp*YbPpCeO@3kdC)*zVX@VJxBqlXQtwbrp|lf5a>BJ~A0YB>wKp1>Hxw zjyF}(jj1;wk@Z*hl3W9aQEkml%@hVpDroEY?YG~ck72)s>4411(9FlwR}iwdk&w?m z(c33!A5oKa+f9GtkN~K*M|9GkqqW>Q_+md?vMwb6^eElo@ zhks4}AxOndRdEI7dy5qqcprd>kr2{YQ4ziQ=f|Ixm>!yugGu)1FBl<@F)lsFDFcpM;m2|fE`Ylb^27N@7gMK_8amB+%iDRVZ<1Zi}kpQi47HBpibwv?p! zhk%d*l*kqDSb|>-DC1Ur+l9*RsMKRHtrHD)OXJC(%FdF%c%bGnjAg3L`9KBQt7l>t zb}F=%SfGV(XxzGRGH<*;i+-DXeb05G~)x1(7b*}WI zLwLDJt=FnZK#G&qQiQQ07@q&KWl4xWNxqcKvOeZUUpk%No_7WmS zoij(5Bq_4`y|_b3HJKS~Tt&t|%-DfqwP+@PyDsZDE-88gPc*`R9wnS)%`P5o7H;Ap zdb&VpKIyLn?arTBUb}mtfP~O}a1n{eksFv55S|Pe-cmqJV#P-z zJx#N+TUD2jz=MT4Ff0dxeg~eX5nWa%DjMx>03lWE2+trPPB#jRRo$E9=`j&lBq6vC zM5vnHPE$N+Wg0+*WKkFGPZKiGjXazx(TS~^gqsNSTQgk9)A5qsiHJ`T(6xbTAFrf{txrMyu!WT4d>BgT7<(c{!5h zs>jvZgoQhfi+o5KK{Ip}V$r(63KIub9vhN$PrqXDuoRskcEO^t-PKw!oyPdjpM7z| zF<&sug4LZb)VG_z6`G>JwyOqZN? zP1Yr@FiGBfN>44p?XkK+5AW%|&@(~5>gg0=JTk^D6-On%9u-407{6--AYMYL{P)~M zgm@?K;5jPYeV4tb1if0b8wB`WWbz#*!7c)p@>#)%WveC~)Zct9ug|b-U0$tGLH_U&#v^!9?e8t6#_P|6_rHp+_-cUW#I$LOqi2Ne{RGwQ-y*@oG z+J!h?qXGNModN^o#=#R~tY`rM-qXf-esGsH0_za7qN+V(kaqqvtY>KP81eVf2 z@w6Mc8|;ax%qUFl*kH9-58PwlA$0cAlf{}T4$>oRP-ie7BK)E)2zwksc;A? zJRXON%D_#!#UK+DpCc_0uImNGc<#$Ikd6arVRAFG8w9B>!fw}= zJw&&R-GZk?iDj?~U)N@w@%yL1TgWEX1dA&6Vb|Lff7$&u)`hfO6zLwpax;v}%pyFF zwUmh~iOZL~grYv-fSuw_Gyb?} zbclFHCJrsOlU|6HAWb~_By&O*_DiHHO|^otdod!^%{)18Ve`_oW)y9yUwVi}2GYr;y~q=t0T>N90n^ZW8Pvrv#@m(wj?ZM6TS5f<181t^_ZJs zp-|vK(;$26d}!tT2x_rSr~v_U>mhr7wZh6IG`5`jWGkT(e}03XhdUXN1MSMr^6hq8sYtZ>EUPqvy&7>t)&-uM z(yy(+hZoYC!&m)D7uIiM4Kd!zn+cA=_#|53d!(Dxn&5k=L|A;A;?t>tOf4AGmW5uP zR!^l&YqSbi{&KU}Yi+Ieuk05L{Valg+`fcQt!zH+)+BCUmYcNGDX#BknU9=%&KzDH zqZc?P3`0gT$D3UN5yj)?4Fj3YVKHIt_d_e$(wkbzq{~qAlKRmNE%;NbO(T=oM`}`I zdU|u#1gY3Z$l5CMO`sm2sLqJ&7wiWO3aKN~NHsYlN*BN0yj~I0*CqzfRdQ>Y`g1V( z)rGXT#4@G#QxmeCeqsX|-qI1)Xg#%J$?>FGBZQ5^Z?|58uUOyl#<2awGz}xXqavd7 z#9{=}e}V(nEkOvT;+*lecl?Q_u&XPjS3;7Ok_koJTR8^w#%R`*vc&L?t2f)=a;M@L zoLF%Ok>9j=@4(B)u}>w6^$k^;mh`g1nc(`QnP4lt=8C(j1V-nBxDY3oju=IbvL%m3 zYfUs;T9QCSKv&EbqR@DKi^PI3+Wl!)6@na^rzv^EJqE?&RA-0syQ)0qd2le*PUvHl zR@u1qbZzA8+@PGFev=&HAlJIcjcyB2c;HE_fvJx11ZH>zE?pSBg?&KuU%-Xd@#_12 zLa^5M?4drfZccwid#v%&4}OIWTdaQAd$qa@`wvX znh$m*l2UQYm8G6%u6BgDBO!w<(w|H?DiBon6)yvcD4aKR z8zqsHnH?n-|0K^sizrDABl{3b-*38t&j)pi_;FtO;)E#ri&8qvpaMSG7jAR}#FPh% zoH}9F+oVWkg`t_Wcoukr0r+K!k36b{RjGt?6{Ik^>X?F2jlkBY9L(aJ zb;9c;ni}G|sPY@n@jrBQagKwLiGBhIi<@xUQGd{OFe*V8L7e8@S^a{FG25(OIO&}% zyQ)Y>2XU%|JdG9&Hy!H>m-yd06P#fy>oNOeZ9k#BHO8>}QF@(DqWELIHt|ziTymm* z6l4T(PaQJ5a|8Ka61e2Ft0MWk1v;mW6jh5DKGc7TKJothEoys!0^;Pyed+QS008g* zHpG@Pax}FuRJ5^?)U!7+5^^;#vUN1GvHp*H)xTE%@UQJZWGQS&FUlfonWRD`60-S& z6GqzG6$3-#6WS|T+l>Oi;m@HZNPA#I7MaXD$G!l1!@#A2qf31N_zd&XUoE5o_?d^o zalg+ut!SILJRe`%@B&2Y2N4i$%1a}=wC(!r3}s$j9xu1{5KYn$K(=e_O@x5by(ilu z>OyyQy!mA}IF%$$aFX(FmcC$JqX`Z%bV>Ab1XuUeLQ4Pze?j3+u)}+FEA-E4C7$mqaj@yOEA*R7~?2@!FASoxq72+%vvZmGU@ z2sYgHcUy3wDPf+lsv8}47(+qYONcCKJ6Lm{2NoGnmcy)kQI6dcL9Xnv! zfNtr;S4ED_d-o!OuJ|5HhUk!dU)tm!s+YPVo$ZrNnYOGj9q{^ zv2j1!9~=~8y}um{4P6;tNLq+V9TS|he9w8wBcD+1F}u7qK>3v0AoPthc_fx*)Ai9T z(LC%u0$b(IgMY0Qgq|6VI;2MBDPnVL zKEk;+wLceU*(`ygnq;YS-lhvbc1C*={-)xZ$J^8})R`H7N#O;m?j3H}y?nzUYpal#?Hsl8^@S>zYOS zFgVd)7*CPo4JIzpr_6kn0YFM8dRG=)R|yZ8BH2*Bz3Nk*Vw(W0;(Z*Q9BR`N6JKrTt7>&$Q=K&(-Htf4<> zC@FDY-!HU$Q)oUBU}bFb&V$F zs%3L4E3I;?I@zi!_bW!5;FPpLybq@9!)}k6=d9~&kLfnIqkAx1P+NK`-Bn&}oSWeH znfcG#Cifnd2pEr)liNPqTsm~9;Q=`?bb&Fo_0S_2vti#B2}vjXn7*!!!GIU+VBmR$ zfMHQrQI#X<#mGORF-tDN0|H^8z#v_J2NiHq`(^QunItu~>n@Q0-bH6Kt-B{rlHE){ zoMpQ*n?g4-EC-#j_6|H>ZPu+hus_2 z@0{c!MA8|K+B{615`ANOB~+&`9P?vPX4dA#qYj55>#>gSnv>nhC4}(f!zsMP1bidk z;BkJBmEawLpc@xyJp}Q;`J$Rfz!C>L5pCB^*NE)()$aCM2Ir^3=W<)VG`W6q1w-zo zOXZv{*X<+q$^I#kvbN1fU};<^L9Y`eMvNYQ{DV`b#QIB$*dI0QMA%o)df&BSKQ3`e z8BLu&1&b#%?>AP_WZ3=7U;sw(;J_V`fSUm-ohBP{$Zgxb78?MVeO$~At_cC@1J8Jv zJGJgj2Da%S{X}HM zhcpo|`xd|RC9Nbuk?V0X{B>1Xsgs=4~Ar{8sgt&2P>F``jQ8<$e z9kd_$IR02@azfV0AP|}-TNqVKV*djEy=TOyH@C2zI)&^8G!Zsh1lp-Zqae97zM5DG zS#fAbEjIV2E1f{y5c+^WHBaTb!hn}*AB;~>AI7Y~mnl8rpp$Ll7ra}aGD9N7)G(N5!V~eKFK!7Snac>TIGLH$lAZ=>L7OpfpaeLQX zOSp&z00$Vsf)K()V)@np@xrOHz56u|)E;#-`=Bhk7+7B9crzQuxy+4jwZ)_{-J@0} z3b3Aa*t~0AvNoGRzZ0_xep3i=JCt2EtCi^Nbi~|{96}RK6wlwY+he8;^y50z^VXzC zE{X-zSsskA-Rat#90w0ko{9R(BqWc$^qj%kkpqSKdkltwASk(M7#+c5a_n0q1JIN= zYU9wT2Rq0gqaL37b7UGlZyq=0B!&0JQfB9(Ona2P=$ksx|DCeRoVw^pNN`9j8I+Ib?mtg|>=(>Fpw)O zm?SI~M7B^ZR;@=OY2Gi2>?Lgy4rpr7*%+tg-M6QeJ_$y1UR(Y~E9ygOXp zqDIBM*wG3&D}-rM@J-BZR`YW$)Z$HGb&8#tiRjUyV8(`1K3VELxQLQh{W0tbIX3~l zU>M~N(=s^y((HA=HGo7ly0J1^52wo5uA#}LD(u~kdc7J^))tC^#W*+=r94W9!>Y%R z`;|AZ2hnkJlWAR&RNhZ}1CUt4MI`$MXg4P!I$&aAF^Sa4^RBmT($)CFFQ72J-RyH> z$)3f;VVO~vUbSTn2x4euuDLA&?7njyzeUHv*@HB=^9p75Q?QRQ?tIuxZ*-#M1-*4) zY8HO!f0Kil+hgUqCU_9EpKqxh9{pI?EkU`)HN4RW96vza=qa=@zx^xXrvl?PSdX{f1F!ZN;pD*--9#q{+fp`U`cc)QY?RD^=!-9*EYH zlr#2QuCbU=JVz4d^)i14twhh`FuUDFK^BH%At=uN!rpwB{N~*dIKw%*R*NTK+|old zV#x7rfr4s#Pgis%M@;Y}T{L9~Q!*%`Iy`4V=Qna*=3n6x?wr3uCu%Y_M$F?kzdoI) zt7_*K<_`1>QoGaW^dEpr(0Ssl^LU2AC=ZzxA&5SrGK~6FgBYFBFeVC2R2I;=a9u9R zVINyfBK50By8e=5a$S9jFf8m>V;$<4MCbSKXS0OwS(WOXu7wkg%(iC<|3*x!GPSs~ zo7!73cz`#hgY7q`&Q*SA%ZwIcOSq!LOwQMdtx8~)tk(*s_R)|uXhtOK zp`cuMI>7u^?uLn?8lfNA$_#8F4HJlG^Gr~ku>}$%F!4AYGugn!kcOmb1d4bKKKUhWhWnOD|~Wm z96C1mO*?AawC&i0y9L>UJ27f@g}K#@?A<}AL)lk+CxTdFsc$9{9@tl58c;*JR6S)| zy66~ctu?+Qekhy9%tkZhedwBiHF_{*c#sUeZA5y_SSe3$)L2&nx$PJuPp=XOq#3}@ z?nJcZ5+M!+iqKY?VE zsmkM3(vd>g%>SyBUgv>(=cC&&^lmcxZZh`bfU%vD-dlvO*jrTm?6@Y64+wM^(xK^( zET&>YjDT5lml1f6s^+D!!#w6hD$O2@BHd;?LAuSRj~g{#BuU^rkM>nXOeB4xm}&KR z2F(A?88jw>!Ja=TNR{Ur6Bb%9kzT)9OjxU`?mP~TU5B~N7tCAyoP}|#VmXYrwVv4K zaI%A9Yid@lcqSt!YbCRX9iik*jD10_SgWk(l&5JnUsbqIGE_FGGBmeqb3CW_vmBj* zI?r2Yz^FB|qab74DbiH3u!t(?_OL!ikw7hd z;Z+n$I!$(p(Iw?rbiY9eLqqvk3uN#u9x@;^vAqoC*a+|geV{f+`B(=bXeMtICH&xV zStX){-GJ6@$$PoDI_DP{4Ng3K*HQfCw4z~32(=~CiTq(#OF z@(uZl(WfuCQw>aCIFUa4ho>ET7qd%hVvmg+oLdyl_gsR{A26nswI=h}N^4KbaaKvG zSgaC$RDr!kIX-qgcr~@xM+v1XmRRCz0Y9_^eyEM;*9!#fY1{#Z3p>X;GNzA<-=F{g zQTD!TxmGx-Tp;k)n^5=h|92&GJ)vMY6^CT>6$(#y; zHA%Uldo%~SDeaL(wtZCy(q|BGHJbqPEmMVX!}IG94EY038uNp9U`FU>!O4BE(JKbU zfK2ZqpZY;8ntG7to?0+P+vpW`iL6?*Y<>2FyxH;(3HPuyztcStx`e*Q*kTlF*T&ZS zRtH(0hf1PXOAbrynWIY%y(oJ06+5V7Q~P!cIP*%A{X{AYH0?a_lUNIf~Qma*Q#q?iwiJS_#I(GL`t&Komr=;n?^& z>GYv{l1m+O>py78~d4BzQ0#{K>qs;N|BFsrJM@@ zVB72eU_ks|qly2~kMm#sKm6cRU92hf#h4ZWVMg8EFJ!}M1}wQH2KB&4LgQY5>@UE6K0aXjAK zrU)>SuVbMpON)UBpQ#M(}iEzn3koF z#*tefVXc5vYIJ~@iOz$OxhsCzG3k*TYbj<%(roCo3%jOR<1)XP*h9^#CNn z!PsyHH!Uk8M#$3`HUL#gV*DsE<;deG(H()Ut;E{XKDQ6w@|uGBL0Kt^@)22u!S;pA zXd7E6&V>Ou>8>?e)88RRKBlI1#1JH{2Hisl*{uSSN`exeLHWG)4+L<-WP_`HQ;98L zbm-dVk7k1+x*9bZZ8y|PfZBX8-uzn8ldfiPF3UlJvZ8#%)l;ZQ8=Hnl(4!*$x9k~& z`8h4kt=q^-;?%8jIL?u~*U-|vZQs;5#$fV%d9gdC#7URfeyKtQIx#biru|=?|J#nU|Y$#|O5)+&i{_?R09H`D0 zL0d`w;>Q$A@hyznPkGrfrtjPgOVNt1T`YjqC^hY*Ot5~)$|T8v)#6-=tTqD#wEve& zwwraWB;{?E)%1aE1uVD4eA$FWbOLOiu*LSM+CkQN8AVn08ATNzn~36zNk#oKGAcPA zGdMF?-YPjYT?Kp_xExErf|5KNkQgRA8!d>YJ-0(=5qPAnx`yrkXn*>+cukF&T2Tvf zO4}@zVE;jU5t|frc#v2LYD;7LJBhHPP?3wCn48oRx%x+7n?r@DWQ(PIct(r6TFve~ zmr{bokz(?SBGJM=xg{tf1*)-f(&0;aIh6$@&520ZVZjMO-vQp1nv%AH+Um#B%<wTEd6y`lK||YHje^f?Q4~!N0Zt(XY1Ku1~6?^&?^ZD(SH?`U8*NS z5zCefvB)csrzdwx3p%oHA_aFX6Nx0@qq%=nBy?6N&rlJBq3Va~Hoz1G(^|nY!&*A| zLfwK|#K3F%PQ``%icx{67rr~Eeg5!8BJF!k^nhQ}xfn%l0Y8KF%2!t`!e;```f~gKl3!6-_a?dvY z(NIAMoUOaVodKV2cLb9eF`lqz;DgQu0TyePVU^I=3;#2$uGYAM>oT2~!Iwi;cIPhi zqh;U7<`P_{GEEKC(gP@SNX zl7`&`bZ+m@Sj9D`Ug)G(D3{J$rJbb$0eoZ?-xvY&J-dM+JajQTuK)=maqdv1^h*o! zgbtftspS(2WL3B?ariArScq>2F^O_4donWQ8el>P*4cSzd^xFcJ5qPZ`@pRDOCN;S z4p;gI`nYM1i=C5fMo#H4ATOt0q2;}fW-b|hoj@hAM5~!Rlj?7!pA}6{DoFXt8U+?$ zm+5>7R!$`W2i6k~t%5J~>=Xh&&i^GK`lZI#oaJ|fKA!Kp@d)M1kIw1lq7;PpbB+%A~@weKF&xbE}W#2 z>}FeAXQH**R^S)Z0G_^Z7Ccz(&`H&OMHp6!x zF;vgC_+A->L^`U67^@cccAU#_Nr8M+zhDlvw>wJ>jd@g6Wii{Y&OuzFYbaZuH)kEUysw?%gvPR` zFvvc$ys)gx_*sgwMv_u!pSY~DxSXS`cszsI{ORSwOw2#BqCJE9k=dBiOe`69SYFkI z>;XPK^U;w%J65ieHNd%~5^`7b5=MRAO|Oz}Qg}D4kxzVm>#D0DqPr)5C{%p<=ro)G(kk&o zpZGYXxCA7^%7Lr;9;u}7MmRzvIa>9qsEt`u$fP77z=DbbX{R7|gCb9XfUTdU=}>+n zB^4=&DU=pp4if2vkWQfNGwl;9Bn2BXnw$H=H+7(tD!DE$;Xb>xDGf$3cv0YrO5)Nc zd$zJXw~goP0j3^YiVDY?rr6O?>kOry()l3@qxn%ID$TMLAmXEMu;Uz5Sp{%c&XBs1 z(WJgPs)TMe%@#+0a zx><2K?|uoReYTjcKv{I%NL7ouZ#{V8Zs{IKkIx}*1W(A)Y(vHVN;%Jw#fmes^p8Kz zud~y*LzU_R@y;S4`$@mNVXhR!bXJa02V?`~_$Vfdz&~sy2s1mn^%iSR#52`o3$EEE zj1B7T-)hp%L>&-W*1^*H5(rfUL&-r>@FHrVHFrWhjKBMj)z9w(#Kc|8Qi*>e*7%R* z83S|?kU*f=%K?TDe83}PNmF5>IM=j5qF7Ge<1>4b^RCy&k>+`e=?ikGY4Yas3&RK1 z4mD*6hFZrzDjoxhlZG^*CeU0(Xm8!d#UV)o?`Eu+N}y!nAj?wcxL|;^64Zn=Pkp?G znE;)UHY9zw{5g!I-P~Br9w5V{*mX^x>PZK(n9mJEsAE;c{aud0nhbC2Sd35*`@;yb z$b4o2?bu7iJg3KSiNm^rxdSPG{hBqKtii7%>jZrQ-#`fNawc5M|BOAnO?nrX{Wt)} zhL;-*aa=g$$h?qi&S+mLz!X_r1LExYK#sdI^jLL{-}T6%mjfX|=XlsP3QXu^f~wOfIY=X# z1`4od%Dhl}!oJ*%MH&Xb&*Z)~l##WD@t7O49>G4VOtGut%f}gNOu&hY|5WNRAEl{p zEf9joV1>%df;#Q$+a{j(fMQU)q;Rfx5e$v&ikMXswX-C9NBi|qZFEh>Ql--f zRzp`9;PAA>zV>_pmcRWSJEXivw3i_vN3AtWW$%=+;39%Rcv{fu$tNYGV4CI4!fq0r z+}_&(Qes7uq#|YJBzEL_O$f-z?kvH4BbSFN092 z>%*ScGMV>{K@z9cMm!N<(W2V4^APb3hC(nE4!_*yRA^@FxWe_FK?QCmmv`U4L|<(? z1)&x6Iy|>#&38Ad9-6>ei>(nTCXmi0I3)3u&oJZjhIw>PTOXsZ!Rlv}pdcI}?hh-8 zk@zLhu!{%a+nhnm#f*Cy$h-?^+kzx-q-H@@I9ku~_TR|GxYG_#g9E7jkSfD}){)q&5s zz}NZrm%ydG5Un4V=Oi^v(wrBW41zVhh)ze7QkuyY`5y@x{DH9rql~N3gCIe@#t7dZ z@mO{#XRM}&o)pkTJ8Umu!HkgxJD1LA)l2`WpZ9l?i&L9I2m~toG%pb7WXCxC; ze>_rDj#mK1y4HNZQAU5iQp;LuEPu(MNkNhU!?By#5rH+KA?<*eKV>1}?XB3y1&AQ} zmZ47aOZa4XV-0d%_j1s0*?r3#T0Rt5!-2Qd*#X$uS*#2`Zx@@HW3SRY(&%v5IA7q1 z$ZaG_OKU~^RvfRcYOH>IhIJ@ckT2mMo{hT*JP9Y@qt4!LJeOP%GJKR2w^KAOcV?o$ zRc!%*N+u(k;RE_ihDJ{NBMpIWF+549I3xOjTJ_g+6LbP^`qYdIIt7Y!x@S2d>cSkR z;8;?=_r|_8F9P-TzD=dCb{#}N@_~11%P^#VMYw;Eoi10X<|?5gXeLYDv2B8uEe&op z0!WcrsuNqy^ip`GnbeJf;*4+xghgJVA}qbZ4daN`e0i>J=I%swAVcW&Yci-RdA|;h z+q#bDuclb$16I@$DRcTg&Z79y)2Bi@i zI#WlRPY)W=3<%i0?NMGYfpw6 zh0->E(y|eFV!JYaWfAXhW49iJsW+z453&+5DJ4LiAr&OLEx&gT5>wNg4qG}B9yh$9 zF^jmrubAD*uu3yRW1CW=9U+B1BPmMSb%S>_pI|6Tj^&v8*a$OO2am`E5>u&sbLSYL zMuXReb|C@Aa6>_TTbUo)-4I=f-D-f+DzyBXhT!HlH}8YL&}8P2@op6qbYA5El9Z^%31+eY2%Q|D3Gb0F&kx>T0sH?d>$pCUrCuRTeo`;YF>`(zisLycx61YEzTeUKa=`NWOs z@EK28xhu>a)Wqj_j7JG3^hA$N!nmE!9@r4>W}m97C5`d;G`O}sdcRkN{l<>h# zJkIo&Yrt+B4xc^L7DSVu(X2L=U`FL;Eaanr-u5PDtiM)l`5-6W!}GVC5zGxc%#96b z1wU@~Z{FrFpS9rSXWH+0{5O;USd*S8)4LjkJ5*T#me?H}WdH7&Q`7?A)s_!V^|@#8 zJ%_dm)4T87Le4|)h%q0*?i5W6mw{p4g}A}BXmOD3F9}!9=zv8V@#_qQx7@? zK%)zg1sh;2e60HAgL;!{?^NOWgdZqU)=a7`Mmb0unO>j*40i9~0eztjOml6}EB?U_ zjINh>s=MDh>^GXV2-2&ee=>mU5Z>yqQV(M5$`#hmFBXI-<(RdY19rawl1uQ1r9#bu z-1F&Qq(hz1NIOrJEE#2le9;bn*J*+){Gqv5%#(n>GW#u`(SJ8DpSfZk-t6VX{tKvF zny56xGn{~5i)PLe4!%P{3&H7|>uC#OYT z6^2*sbdo zK62O=4x8oct7UqF3lE;YuMF%UdoB*#B_?jweuUM!xAKqCZ;^Ic`Ga_B?*3NTcWhbf z0Ic4IVU<)ht8X8kImL4zvHE=MwqT|+a=mb!eH2nmfbHWL@`i?pmOa6t4DNprCJd-Ec zZS3`wql}jZz7XsE+XyhPJ{SBdPXD3=KUCuf;!X2#yb|_{cueeK2@d{`0U;USm@XZc zF^zeqCKoZNa)S*X7kk!`GX2`fQ?CN&McAn{+f7F9uO4>Omar#lxc-IZ-U)cl#@K^E zb=#8AD&4yaZC7t$Zmy02S~t1mPW03Q8olTmpro2$TW_$|+qLk&zr;LY91mT7yz$ny z4eN8kNbTte{w|Q}1glgwZ3bl!LyEanG|j3@;^ZVp$EZB_W3jzfaQcsL#~azO=*)u7 zz6cw}c@UuH*m*)Z9%&Fn*&sl1$Vltbk>hMP`zF9%_jdSuE({T(#1#mYtA68tOsF4F zTM9VIf!Cr^+&kpzbG-M-*Ms-Ob#pbn@4*(!IrKkJoFB3Y3~f1(S9>r*abRTG$f4 z?yCF@Oae7;ni0ZkX@^*6F+(o-)$)d1a-ukLRg?~zd~wzV(f?eRcsfUI1$S--;PJ!( zZDmO??5+kiHhZ2Mku)Og6~34cy;b!WChnGl&kgUK(+h5b4gTA=mqG&c6;BQ~jY8s9 zWKlBpL&+MUBs_2!^fv&jjhONGZz2U#3mD5#)q4i>aNir&TyEi_P_NgF4_UC7xSJlP zyk6WlL4H4 zcVPLtE>u;sZot46NyhtTOZ|YhyDcC`>j`%K;wgN}*7E^HNEw)>&A-5A&*wYpXxVd|6FzD3{AInDx7^2jt7BKHy&r`}Q zZ#2RTkAPJmT*DvoHx{5A0PRoNflo7U|e-bH7d<7vX9l923s|*%TIFp+$h@{C1&d@0# z!YvfW4sL?YpAT$0vId~w9Ge)VQ93l#N`nm32A(BfenRX>z^Z_W|6@Jc4=a^e#`VV( zY_~xuMul9#kOCd1ie#zn=M*Pw-x%t=+ky@z7S~{oyNE+zz{JCcgx`kN2duVs$90+gw1#9t9y7#z{X7;U^UMm9Xa*1vOMnJs3qBEN%?hs7&i;WQ_SJPaC2??vPqq z>1#foWEWSDbWEw*2YiH8Dqr1#`Yy6;0%?f8k;RE*K1s5wP-WM!2z4Q zViTT@3cmN^l)tOs(l;hi+fK`zU%f5G@1C70$*Z!cKF3KOuFmnu&F?|NY}-+Y!oIE7 z&Bsoy&D5F`0AiV<1UI*%cnq=Py{@Rm|q%d|v_2}EH7RiVSSKsZw)Hm_Ydj5S2w{-7}5a{7yoC@|*F zdk@rA(n=iFHa|p9SmigGwDPt9L=W`PxQBdkC%p2wSo6CbVk;PNXkCSMbZIk3K9(^N zW*38euS$Kz=&7-4gJmVeum?LZR%|5Oj*mM|x&a%^A}Gv$BPqXY3nqerwHrps+MiX_ z5=z+1WEi1UaTdTvP>=iG3lPlU4%lB=1PAQuIP5<#_=XCM7N-V8le54X_L4u_FeQ@z}LLBn%$ls#Xqx@2|0$80%E-Ef>-yPA*c)1a#NLwy*-X7^jE70dZBNbzpENS)!Es zDSFA5QePXK`96dG(Q5pq*zpQbMt|mj+bH;LSb<*UL-}K0ehz<(Cbq${69Kj+I{z+w z82NXhXwF|yivseMaKRQ%5L(4>K^05-b_MBSx%d>l+|VuRFlE54oRSsIz^%WvOn_1h z+$yYgtLug2D?tB1wpOfq{V)=_pl$>=XF}Q6CT`g(e1KSWfKq52Vy%TS|<|6d=@_Q;X}8q1<{T6_w{p! z1`56S6Df4%!}TLA0Y5=CjWYf@X_banT0Id`C|w>9qMVjBUaqu2G;mkNH6k6hjkO|& znU$AWUw;-~&^Vmej>nUw7ho)0d)F+CCAVH`{JqTI984+$3$}w_kY(c=m3)pLdhg=I zlt40Pd#Yp5X2H-8DU?85$Higb1pEskEe=#(b-um{A%RpnotOi@yu+(G?I7M*k!>FM zr#HxgquyL-`k;A8F6_`A;eKQ8lTxH-z~En|2zS0meh1uu!*u973%o|<5u&u?0XrwC zNY#>l6elc{@`hc9C&5-(8vmtobc-c}R!thetaDE@`H5ZM^MIB`N`QD(u;IA@Kv^5u zr&LOzRJWgSaY8NMo#UdE)|BF0GC5CYD!6>57V^BwD&3tYqhxz@d?{lM=?Tp_$(^c0 zrz>lzyvZt}J^D(1rQ!4Zx3k(-zm7^v{mRn&s@OT}v+Wbmb5(oRr9^Wpz zm%o506qgBAfMGKu`*8N42Hf2xO|vcrpY_kK+!vLs6T2v#*$^mC_+Fl9&LfDv3BLj*{aLl$TWyoR6`rty%gH(Gp>@yV+)1ej(w! z-6J|&pWRwQ*B^HzQC;>XvgPpX{B}Iq%R*BN9uEqz1a$I4XTl@{$ubW$7}kn_3K}Gt ze0BJO!vaz#c^evFk1j=UJc~k`K&!S8wTVW&kc4hhajD99_hNEkYp5}vx>Gcn;~L~R zdcqF~jw}jJu+l5p)5yhV@Kk8cn{&x(gMZ9pIOJ4MnUQopqGx@xnFgi~nYPsFO zN#}@*QZ;>)Pq1n=-H?VZg(*u~!MX(^#1CKSwfo_`>Pa|=bbzR`pM-G-Wzp8Uz%k1$It z$&)loEc3Pz#%4BED&tbB()o^woTO0bl4zouL3{f&lnlGPEG>mB8qAdo26`dO zP;eGidm=PwIt%N)TpIbmt}#G2p5U68=dNuXY3t|H|H0IIc=b&nkQqPO7GJ2o|LgNwr zGpXy^7`ha*Y>8MCrqXFh{S3T9iF;4`6lBc!Ou=pWbKB(fOW6$yv^gZ0-{K!c;Z4aE z)uC_k%?`03?7#U<3l~Zmmx`_oE1jXK9=VZ)J`Xv95drKV5Bva+nZB-=ApLdr(K!eG z@MLhENxE6m{-O2PW+_f!?dPauDGl?R9>vR~u+5s&QoFbUZK~e00!Aq`*cPL?fuGEr zmd9D@42>2kOX2g>Mbh6g>ww2kOvOui(6)c=nio9satfoLu95M%%~UMwwplQ?dGQ$3 zAQK|q4FRIItU8%2c*+q3Lm0X&P28da#DdiLBJ(Jrv&Dj3SHP#0G9kR{FoEmRsijl? zYpFRU+JT8mzoeQt?21$%nluothEG1%xn0FGY=xM>H6ShK^U(S$aRf(#F9uk(@X=-q ze~s8a-`)L7Ccn!hT&wyeM$By*#Et}vIMY2PERqTPae@S_5DfuY7ntu)%GeBo*nKP% zU&fE=!Qi-5p4*`UE7XKFx{}QA=WISJkTtR$I>HA!Fm2(Um;~La1mAc= zg@X4tQQ0-v457w`Z*9GE9@+~e^?9s(Z{!T|P91ZjcUAyD1y-NU|H70P1`1?|l6 zWeN+q$J(`l{UV4RMPOA5@(kLB<-KJaybYs4HLN<=sMX-}Y4gFxVxsuBt0d9^6Pv7k z6-G}MMg+8k7cUh}8~0k9>HV}sR(DzCr)kTlCwa=XT+zfa# z$kf!b{dW|OP22uVWtXn1mqp|i@@-)avLPD+<5jAeY1ht=&AHX%mCB052z$lTJ0=QcU|enB+3}8Bjhza~Y^)t^xn6K^SI~tQ zba?^KsD&0{3IH$If<{{e5Z(OW062zQkVLa@fr>K>4auH$^vwOdn%OMjwhL>u>XtH} zE}74ZHlguDM3ox>Sj)`A=bBvV;<=1^uf9>Z^t5wjkO~=Qp-xY_qMdid%Al z7u7m5tUs!oY#L#jQGC=SLF6g|@RHMuSMc_wh1rev3L{6B8n`+A!b%Rd14*?Atk}B1 zQrnRUACqS_;6s`@!4{}W`h=i9KvwV}(47}Pb}gsFFk58d zRaj9IiXf`^K;RZ#ps^34`4>cRG(lkhRKKXzjAoPUu@Xc+MZf6|`4bTpTqI~FovlL5 zuP_db>B5oeH?~QtMuuP)XO2V+VRr+Pd{3jTKey&zIOxkG6YShZ<2;jyt!@bcau>tM zbMd!#H%%>c@oRHu{Ci3vUr^F-(8Wc);?Zl-MYeeUso%x>tN9#6KZ6$nZ!V;l){Fdd zE~GEPowT#mwD0{*93VXtO!vfa+m#K%cV@U3$QvDW(MGK?V<_<^yez_(6GTmieZH+ z$x48^CLoTC4uNxORf96ekfq#fyh%n2tp%;4L)(P-zOio{_32kEgMN5)WQAGdo3J0V zh;|zh)YcFsbCh&gQ`>jj*aR%A8>5-YtKgn*6_K-Wg2;7(_#RERj9Z$I*@8M;9C1pD zWTnM?QE?Z9t`+r7^>m;bAyhq=4Du5bUQiG8D6qg5MMurhwO7rjgf z8JSh6dlx4OW<2>>m%GXI$d+N8IHfED!C$t+)G=}Czg z5xmU8OMEm)aGHLNKb3`t0b(j?yPKk3@$QRtQY4WlxMCGt3|Z%(yw1-8`^pnjtSbwL zJVg{FzK_=HSgM8*j^Ht+pUnR!k5Lc;b^cn=%rSx~h*^MrOid9QCl(4yW$EF_-XuMi z+^t!dLw=<-QFb5zaA$ZL^3jU(Y7cgQfQnG93pw{D8M;st?EJE zQ=#wY4Gwr@8BMs*i}PmFsv`;wUdl0m`~36oOpdAL3r1=dzQOtJp)%o%P-;on!0SnM_0J~+ zc6m=<{S(`o@F&mV*vlIACx}X^&nVg{ejVed;o*eb>eO4wPr1XtX3=jp%@Uu!eDTLR(;XDF&hw?O8Bi6AvBRI9P zx0t3jts=LW?f*W`8+5!Ed!X%K;}&*g>p7=;oeOJ4jABzMd1YG5yrZEb$*%D)dJ68p ziNxnd*28&|HD5yLQ|S1|&TcN%A1=jiWBXV}7{%)=AHp|xLmf{;-x`bctw;?PA(Kgv z7l?7D(m@kNa;N0`n3?S`If*fTKQc&T7_sZMBK}?zg-$hN*H4~9;ua0WJ#`Y$B|tEz z`*#^@OC8bh>_A7}&wW`!hC+;HG}{z7C{!q;zV97w*T`S>EUd;;U`ZM#`2p%)3b~(0 zB0CF`vJwPus%Oy{phg549|QgGiq^T$yM)r3=(J&>_730v_T} zYYdH?7n!}?jmU-lD9*(WXZGQV5T&jgG>L;N;G;G86^IQ&FpU8dHjDr|NPnsi6Y>x_ z`3LLzqD24AZby-(!fv2cV|JC4-vyug*Or&KxFOPmHvlB3BZ80$u~Kq4Y=7=}lmM%vlZQO;1y z(C|RQ6N$b9?DI4ullq$u$-9IL4FvfNjoj;Bu2?@Lr9^aK&uQ9U@Gu)|nnBV(X<}sU z!PdYFELx54Q7FK&?LcoAn85(=pi|l<>){9hv4%mg8Z|E~KXhFur(HF3Dj@ZUrlmV; z_MPwxCiXk3cgHT*0~>_{oP2oa2G9ZGLw4&z^7Yk^e^nFrhO}Avt`#%NRT;JqMdde# z5L@-I6H_!%8Rm`fev$mUdXRKH^qsq6unH9viY!MX)&IAXpAGB+nH?GX-KM-H@^%hA z%1aE=3Pw;M8`e4oN32Pth(9*CP^8ubO`1!ajLC!up|*a8n)6dqakG_ zeQ{sFu=J|=r2p2i$ZaG8HXLTqZM*`gSfqjL7P%jMB-m}50+cSM@okm@Tn`5NK#eHL zLKNlldZ`JdD6FL^wE=D|^_tqaWR#S8ls%@VmDaQh*2LP>FqCtKJ&C4arI8D^YF*Uu z(k0LV)^n^qu19}sHZHx55gi6wooZyp+Ql%w=IP)X!4agVDbm+HT< z)G@5@tNp9NrEU0NKmXm9RxJftI7ox>VIAvh`Q^BreTssO2Q)<)5A$;W<8NaZ1LU=&Tz<#K!%`zN6qn?x4I`7#42NqZxa%!pxm)gD zWVDS9>u5b0k`LjD*>}UYW61H-9Y|nU;P^5OE77mHa-K#6dwP7nTBWn^0C)S@Hukd) zwOT-JSjnR1N7}Z*x6hHVtFZ#r`5uZfz;lt_1*b)#AfxaqV4F&_!^++H+E2#b2f z(bi%cVL;jlH9A}fj`rPaU=(wwo-bpwYZL2sBf7UcRs9+Gdq_k0##&7ij;`(%v@xgc zsB7-9hvc3A+c7p{j|lt|cp>t;-|;}Tbrb;GIea5;^#Qpw45?=E z0j7#gwkLaFs}_*1hughlN$E^|!uS|$L~Tmpcm%J3SU<(O%lZ%k7y!P@cqQ8Rz#hLs z&@Gnla9+k7H@Qd+=E2l-IQP$^MgXJjPVE<#^?cuNFL(fK>`0(y%h z3p+_pKV@c@#voA6G_RvVykj|MNbDnBF8jrPVPIYfZLerG1737_{M0ntUu0+^*B3zh zuh#gb5}jDQ&8*uNx^ZX3c(l?Fe{jTrN>bp-1JD3oxZza_R9-UFp`{`MGDJVv|sMvaByhuIw5sLGZ^rpiM>U5L^FVLB}$I_AR(p+J9bt&C5s1)uKmG{IkjWH`;BBArJ`=g{M}0#fIruiZ|~g*%rYi8PGOM$YPuXbNHuY?7kDS2j~6(FUVo_mktZ0Ss&tCY?EN?Lo+F+4Zteqn zeE%k(Y5&j3!>1F!STO$O5nrf@m~n$);?Ry*{hC6>n%I}gyA}Bd@rv-v+w*JQFRrU| zT_YB!ZF5z8KG3+oKez3zX}$b4;w6PHAk#=VMI1`cC78H|i8M(&J9P=wHED!lUEE8| zgd09}z02g$>(D^9ss9`-bL?iB{rph+mHqsWrDUa z6-T`}X)!b`ESH__;@2EjL`L>J}&L4s|t{%;LtZ?1%b^kZh zSmDOd90>d)!lRJ*&?l06s^l@DprHG@MW|)MnBn)JTN`hG$x!{XR@V|iINw9{S=DlB zq}-&2LmM^0sve`XtcJkmr{_xopKB4Wm$ob}ixZuuf3|CFUd}cpSwit)2;=*%Am7+o ziGN>N5`D@%v#2WDGDl|S6J&UEB}Kmq_a;|{41&aD=PJtkxMM3zcBj$ z@EF~=)Vf#%Zcy&bT0aWmME(uX$ji5iHxZ-_r%So+Y~y^ z(2xDi6QXPnzjvw~6*FpX+|GdTqIQu8mP&r`4tU5Gy*J#z7>ifgFs!#Gzq4%;`F)j* zh43AJ`MhS-GDFzm#p)Oq_Zj*s@+|*}CGhO_7psh`s+tQ#JM7`J9T;eRomC6qsuq;K zZ?TB5!ms(DfuW}ZKQM)@m+nTSrMC^tG^N>Rx&8ZLQd!=nI#}{SR!x5!jA}}wwNDG0 zEyG2q$_;+g+QxV4ShRI!6BIrzLqDVq^*QyW@8Fnqk@#hx;n>-A%o8Cx6@FmjnCLdU z4Vjn0rSIg}1~6P1ax=wq8_|Z|G{L(_D@UK==Ig|mBUt5t&@|5UQ!_}7ZG&e}Fm7xrTGw&UD%t}`^VUb~6)T^h z%mbvy{6{2@rT26<{r6NiOOH`cy4c#z@ro8(&mPT`ty|cY6Sr^nEm&Xctl~%ppxOy(hoU)t{IhjV8$#qBLgT`1c+MQL=lW zXwq4jG6;})5vnqd!!T|TqS=O$lftDzrOIWHWE~B9geaC@KQgD{Ha#cnwiZ{|d2CkW zd2^ck;XlKNlcgL|5V5`;S53;*UcrOIvj`(b=M-Adl74ks5It1SEf$=9b6PU(_^5iq z{=1wcTHt&ry6;?&T5}(xnAQbGwZ_S)+=X4V)G3j7= z&m~g1$KkM?kNtj;4+r@}hqwnJ7}DCRR@SpblttWQMZC&fKNUkwyUI$lIpZ3R+k)g{OUmX9+4)2-?L zj0hdA`@b;NkYEW65}MN`2?;65{xWKRB=jy(MI;dk=IG1tyg`|os!|Ed@gYUpXb0<3 z*6estNhAt$DG4sgcye<&32;eH#rd%K=|so8LMoE6M8^W+p!mO%^W+jGg!`Md!Xn1W;SlEDg$neoz+qVn+~W8#wa z6qq7oW|G75@j_#2lEVt|QWAJ12NY?$oMC6eE4r!KboU9u-u0s=5su;FCE<=(G?&12 z!)Ku5n2D2xMreL7f|9iPMyydf{8c>pPdMXf;Z}&oU4&dI^+SYQG4&*bTsig7!p({G z#)KCIR&Apy^3MiwRfSebqbduDEQ!>GMu;R4W$ut9QWR~0@js`?c;iGZ*(@S`juOWp z&o;qMEec%~%0!(aMfavrU84JyaM6{pM|TD90C8KCCbqCg69tb5@*d?wTjbXbk#@<# z3ds66yO7dur9zjne3p9!s`2G;$1L$1v@;$;ZMu0_hbru&1D)4ZV*HFF!w65Sq?q@^ z0$FPP47JNo!f#&;+YWJjlry3Fvw{61#MgSE&Px;?=deeGxN9`?E^%z(cCkVak+)QF zeDpJ3h7)AM??UmHh(}-X9HcXWI9{4#chSO`@c0v9ck#p@)~bj6Lonn1f=Q|Qa4=aj z@ka`65&CRMRT3Bj)HfvvoW^gE|5*=RxN&t*@k6zb2lao$C}nHpWM%w+W|aER!GH3f zv;QPXMOz73^@q0~7_?uoA4*NTT%ax(LfEngrGn5P3KmqP7UjK8B3hqdEvh49@l3|j zhd=AfmvwvnEGVn2Z#m6d+SGjxf9cF)n$|B^ubAy5)9ayo=D}O;>+2*%7bw$j$ZoM7 zT7s&h@87j4cgA9tqQmyMYPjc+9n4C-kRHq&Y*#s1M7z4UNudRV!0#u%a3#Tzy}{^m zeU&Pi?97wv_N1Qbj8{UJ;rZkyb&8PLA-lt)aso#tN4GZ^fi5fhS`?w&zs49cEq5O2 zR&*G}dpbs^p(VqrqfM^mRZD>I9}2X72!0YFmo2+cuIsRn{?lGN1Rj2bt$m2F0x6uV z{nOllAfRAFuDYUd5uMoxCg(iG{bH_{KO+;>`e_6>#-}b?8}!f($!QB)bqg>;hnDUm zt`c9;eK=Oh+GQ9++$C=~@P;r0e+!Kl$`U7%ukJk~>rpR;EfYbzw2n=(^%=X-o#_%{ zIII3d+XH3lVVEDy+YCYGv5(DOX>7;91l*x1{1o#y&hixKp^ON}&xD6+vXef1nqV+= z4&`1|VUbMQJ1rE^x`nJdTyVE=93&p&CAL|IGG7dl8r9g7+`CDK*u$ZtJPMu>(9u$! z3iY^Zo19WzT|)$K1H05XC#I%j;`+HGH`-f;2t&HJ^r8eZyLCY1n z++ibcxGDAbw$S}mEFQB~mq)a69V=hu@SY;Sk5=d}Na8=qJ!N)x z3gs=(%u@wb&_Ka{bP7`u^SzcAG}L6jEnr?NWTGBAF&oGfi_;m%#_EGaxI?Oy_J;-N z$w5$yyO7oe1*E@8!kV%?$-^e3ySD}>q?a$zmzNQ-n5Dm2zzU_i7Y2_)52`esxEey+ zev8JB98Ui0%$UvIQ#9DeG;z-4Bvrw$MmobOjwM||v%|!U-xP*wIklAF#D3T`W6!wD zLam`9h87+$fCku%Kxluk0)P!GG}-gAD-Ra;IE&9+Kg$|TQ%T_DxFlL;ucbc%(@J1h z+6!;13tvh(z1&GjXW3*Ennw-)Vtfbb*k_d=bY&sD7hSxN_kfL8)=|C8iLxtbmDmMg zv#k@9WW?Pd*UOAv^Nv37GRjoMWEMF_{1g@*@`iCUs*g;WT+%_jOPvST5IgrbSm;&! z%}tz)lr&Z(ZV2BXhThLh-FEiGXMXUK@r((*$?yUkYu;Av3yrlbXWtZJa+Ih)n^{$0fIEe z)d%|jd?HE}TLCqK|N7;K@PES)@xPvk|3`+1|Lp&h|9t%?MJncYnyRQ@)lF;DQq)|^ zNMz9&u~W$htIAgT^@+r!d2rF#`@_yy8iZ0c&r(KX$=R8Oj?k?^jsdjH#+bkFK~nO3 z#s?`933@P=^)bEaC*^;SciS4T2IqOY%y|$dA)5g7cm7?son+o*K5V@|Hu>~8g7wM( zeuC)T^m9r0eC8!v3(u~qp>8Ky-^WanD*h(87FzZ{Dwsv%?V{| ziM{drYh`zy&&`Xj%OLtma0Cs2#YPH1W*7u^lCAcc@w5;X6Vj@`S-+C-wLr89CHZTHUN z6u?eJ`6(h}#-Iy9AC(Drh>1?5sj@|KMWj}S6cxkvYk$Ybo=la7913q~$xd3?psg%A zWCwo#{=F^+TnYl}Z=Fa}IlS%;I%h!;DUNGVJ1t0aUikPM`blHmOg}7{6}nNYf(Nk? z5_H}1(3NL>PG6rQSz<>PT7kw%-E4kd2F+%6-Wi&zanVvgDS2Bw^}28%xw1l0oy3Pd zSudJek4^Ec@u#ZXNJTCaHzTQ$>#t1)f2FnjeHB&4xQrug2N)S!U4xgf-WAIRdLN#j z8D+xR%t^QnACTf`97wZW#O0?ZgI=Dx+@5ve ze4?)G!o@=ZOZn+QIw!Z1--eY2d!=8ec74quoLu}c@P$OAr7jTkK&#C3b7@c#)*ShJ zm6>~swyc-%4!K`5=5FS& zyd5B3c&Ke}CrhyPiaahI*zBO+xK{B)=XzFO_mrj_cu5B;yg+DJO)DrJmCi9}>Prq? z98>Zl9rPE4UER3LH~dfCG{Drw1xX*Kh5Rtab!yX{d@1@dWL7RUQag9?n%)MkhOaim z^RE>5z0Z|H`eM^em0}7J9u%fmn}J;Bd){gFxbU~`<_-GFb!a!orH|PzCl(AN*cyNL zk{LsC1d*=S9TNs27EJ$~Xt39$z0emJE7I~|vW&c_yQ0KM(8o-S)E`RjbOi~XSN0A! zAH4sro;iWvg~WW4ARSN93f5zK4CKiTD7PuTnwi*RhT-J!C}n1`L7!YHH>b~$H5O9@ z6FWC)@MhPgEW84dT^3~{Lpd~UjElj?*OZjGFH^ScQco#u5}j8$^W;q0)_W|S!;acE zdOQ;C={sd8sG)z8EU000ZNEzz-nT@r zrND!x)sy;oFynhBY^K%ApmTmV=tuYPWH^iPqAUGC2k_ z63U4j+)1hJ*kiua?d<~p_Of~!=bh@FDb1vMbfYsx385b}18#9wuw_%w#B7`aU$yTA0ql!-BZaHWjdjS0;j&V;j%ozJuGQH5> zGfhW?lsbZBe%2Xz=kOLOopZNPW3u7vQpfRv(BCEPg}>jq%;U;05OzU~m#7nMBHq-d z%F-e#(b0z9%MoqW-|G?NPP4)delZxaFwa!gpk+!gll>e?Wso7kd z+T`jtOVq9xs9!LXJ^YM$CLHK$H)DQ|FZ?4Y$tCe^C3}x?>WsKklWNk}k+E92*h6%5 z0ylvp-Vj2qgp-EH1c;GTA~z>I8*62nP0mF(5=OMmwDvA+YPOi>5eRNNhgaT-ZMjhwxsE5 z71p?^n~v%n5P8P!LeSDMG-YK`lum7j8*bA95GsTjWPNO13;|N67`>hUcy0-|kMd*+ zr9rbR!_A$6cVFamT$g!!jNE|P&vr(Lb}ut>(|S2j-D5I6@q#wWu<70_=208DDhWP| znUcy+BmtdfK9I0n|CvN9YLAOM-cLw@77wV;*G*H*! zrO;!tNLLEFdJid#w5! z3ctU`EyO2aX14`^<2^F=iMP{_f2;iw7xy)|#do0GNht`3C>_uhLGeMRx^tNe_X(8& zl$ee5ELyFcl_iZyoSAnc_^as*fG<@LrAiUPeuDqcHv<&LL*shrU%!;_{x7t<-c`5X`+3N0k*>32(!I79NdwT$BA!Vo3$ zk{B+`-Y$aWxtg%R{Ulpn$6kL+W^1M5bWdJ_2{~PH^F~hM%mB(ey^*2i?xIczkV>IXsDlCSm;VSEomD2tXV;Gp5W-L+< zb5cch>#6ie!`|ICg2@b1D@GsET^g?u18%^-;(_( zjT#(gfx5fM0>xUkcAuFNPHC&#V_b_rUPgp-@eou-{B=c8rh2`9oa$u0x)p_eNJT*0 zyNp2qm<)UIPUmJL?hK{L6m!o70@3M$742SLW5}w!;jMB+v+#N3u0m&MO2fwsz9r}Z z8}7)FLK|FuLewr8P01z{FY{&Yk|Sf^vo@~t?77K!Kuy@y6`FlUWUYSJNr+wJb_HvP z%{C*0(?FL6r|CE|JQ2~Ea)aB-VIS5218_~cecfPvri6rz&Y^m|>iEyc)Cw}g)RBgt z9K!hf>VzzO*iT_aUh@TBbB_%o&CeWO)=t5KGF~ss%y{7_Iy>=2iGk6 z`=~_4KFN(tMqX8?O0c@!R(fl@Df(k-G6N>tHGc-viZurvXM8!&W(&01Iz|Vgtbfpi zk|tC=?R2+&WZd0#Nt_Os*I(=N8g#tV#4n2msBQS!^31z4#M2Wzao z0~rafqUie7YZpr{g9(><_}#35@Lr-lTY#!TkGCoXzB6x z1KUPJz=N9*4yuT!BN`+nOd%Qs5HBDm`xQY@rMCKO>b3pi0#{7dC+JVB4@AFHn+Q4= zO#2=pkXT1_1toqH$3t<9bzS^3zEu#XuAwIxp=`D>IckJI(7`&ZHPPT_bCL|Q)%RND zz;r>9iGPZ90{*5p4gaV(ZA&x3=7Mtq-k$IP(iQmt;>CSpdI@zw`!ne<4e!YIGZXR< zfrg(w4E3Xe{IS*fQRAO*C1+}W{ven)y?7o`=b3@|3yPJ0{W+Kcz93S0_@&@4W ztK=>ke$O$@T+HMSCe2*8rvHB3CXNqF6=~*hFsPe10vW{XCsjd=xAGq#j}&vPjj(}w z2Kk3!Z03q(jhYUD0untuF)-p!gLnTBVNsowuw;Kx=ha8x#LvaikAkX@P5p>UWPG$5 ziQ?(W0?)Hu`FV}yqf1DNXyx}GCQn?SkG-r5kXSBDK+sP{VC71<^C6cy87EzmS=T9A znC)%TAln-UQjcHElGT!Ehqob{C{WK(M!xUP<&;9N?K>K3Y^3HAQM`QyK0UZc8xItq zYtxURsWp4zO;&nApG1A7<4;5~vpd_kpJ~2#BHF5shU|jJF2sE`SC3Yx!OJ~Rkl45g zE8?)1C%=d*AHF;yZ!f-2ApAWL>Yfn05aD_t0erFz9Cu`|Ue$3gQ7Mpqk*POI<;1(; zEw3)s367^HJ;tI19Iqexf^oK?T>kQiBzs5>mM3q+D1+wbW=WfGexnd?fB=8`P<~tJ zt9o-X=Pgc(dT{4aqbp-b#%trtE>ls^$(=B#Y0=5U*`y!3o|e^L&IJk0YO5D?hHaHr zMcyhmI~)(ltKhnzW^MrE2lO;!qC1bTYTK7lR+vB_VRlK$`IlC6KB>+?Q z%Uw_{GEC$piMVh<)w84vKBu&X9ecJ`aj);Ouf& z+gsl77qFWWSFBcnJ4d^MebQT)A*Q|tl$qZ%3f$=2a(7?5ASn0{yyAC#yFw`VP^_qI z0SnCv7`z zd@VN6m8ia_;8k{;$f$$jpCLNxAo*vAn%c0gbL-$?wRIUhzM5X`+(Okn=`g(TjM?|- zd!gvY|M1-h?}Mk<2K8ot-r~y#DBK!`BC1Aq_zhWJX@=L`7G2h{BLP?(rL!Vi6eeoNi;^nELQ=-#S^x7>bm3b}Lslzk!Qhqx52Jfud|Lk2rVe>8V z>55Lc*AKi2`LXxpEA+(Z3yHhe2gMg14?*HFQJ|FcB>!4ZAqE^~2uM-8WDwfD+{4>g{sO#w+UgaC3y-tgT5@mF&H z7{a3h2;T6-|Dm+~QI?`_mbBt?=em-py^;#@kQ`+|JS8UD5-ut!c85*>s!{C3@+{tO z=ryI{1+Vl($^z%ry#v!biZ~^#y%%tVRC~p1hw*INr|MOu?1rlJgwqC5=?<<2(XDZX zb*Je=5OXADp>K%`n)z&-WJH@;03cmr_sR01p z2881S+bVw0tG&Yd@BBGpgZSZ_+4%#2RrC(nWfOmebx;0o6_}Yb5#|*t4EUA|{5B!Z zE>y+KTL~UNiqdy*vuxGcmKZU~ghsBl;?i4l z9&osdIwE`%glp0N-@_*j=cNadKM{|apRUEc|9=fR6pamS9gKu*t?g`WjBOnM&vBIh zJpCvCdHqj{{@?cPw2+|5iG`4b%~F>97D7;kO;2KZ%`y~Cb10PZlxjX!@s_Jd&MvIj zm2#Zj=YZk^P0y#O>DAdfrnlpO|JA;|1rh|aIGXNddz0tnz58M7pY2a1<%RE;maxPh z!;Ym)ZFk~{?UedNrt^(9WA)~(@y@QR)#S!bmIfR5W^6x%P(DWINUf>b@-~trWC3yh zn{0-GK44QWj^ZXm+p$gUGwbyvu3+V|u{Ytl<`yhjP%mK9Xt=0c-Q1ZNbO_97ia$`m zpQ!2y$^!|&Yx@(+Ok(n?G82#0kbz7=V=R7Y(tAe>WGnfhd#%BE#1MTO%ol|e2evV0 z5Jaf`zYqlZ;1TiOTu+Y(qyuJu`Q6D*1!1KqOmr*_vog?d(@KpnSyTC|f(4&vTWT!1 zZBSxw4}$q2B57X|*ObouT?z~EV8b@4B0T%0yFl-UlC|$uv2BO5@nl3ILtFfQ$JwUO z9^FU@ypT3f8+EJ!?trVC4nM;#k#z1xe zRV&H>VGc;qo+jK7V}A+OFL9%Z1@w2te8JB72$>PieuuSaLaNSy;GTJ`cN>xBBc7~c-;FC_o=%C`+4@B_4Frv zkxSjEWQur*nBBxZv`yl#)btB-jduKQYrME*EGrMrg{YSy7pKmO)|p7hC-6ww{WGEm z@dN{nT1o}0TbY}_k;h+?8>r(^s4`Nttj$vM+AN6)Vfosu7M8)5_cwY>8nx7C(<_ng z+Vc&0RjaTq)V3Kcn0Q3o?zm<+$HfK8shZKp-Wo#)C2R-CZ%$b{ad_!O>e`nCufj#1 zk_E-hHM53H5i@2<_X7~o0y$;LLDwFZX$`%=X!jWoL1A&@XUI zUNX`<2=^`FXZ1O2CX#V2-U1X3t|CnWl64`A;cEkrSvCT_(-!QM*A4LHgqp6mhre!I z2H$y_X5inksJD-!4v6X_x{5Cl|D1r_81mK+D?!7<1AmM6^3A=Sc$FajKa_n_bY(%i zZEV}NJH}4Zv2EM7ZQHh!j&0lMIO*7SIyZgJ(|^Vtz(tz8d$)O^`rRqgd@!uosN zw4d2}5}f#{41TBiwLa_pr!%AD5mbo)0tkrgJ50g*|9Nu#U*jGBi2mUp=|4=XYB-^( zVDWNbH^Ak9fj~=vfI%5E3qes)34(+IF=Jt%iX&++uq;a8P;M2JK|*Eax9vxPt4w4~ zMy2xUr$i(;($Xu{s_>b=miG?bZC=UBrL$re(@lnDc)f35`|iBXxLw^1>b3R&{X(vT zV$E35ugc&oAirGHEL53>Yjw4fSd?_h93(9*z;?|m*~nCZAx5G$->foo-Y9md?_2mO zb}m<5rW}CIqT{mGQbO6#va(k6yMzk4JZrcd%>-n)2`xPf8(%j4bkLHdX5MLaN`;pz z$Ohyvl)HL3CfQZ==MZ?Mq9%pKDJj@hjH>B_fKYSeO0tHJ=JeW@#^6dATLvk<3s$H_ zRf{bSNDS}~r+eFdxGwL^v^EFJ(!9_N1BAHPP16RNF|i(nLw{Qn>pa>369J&I(unF} z8IEuD3A8YG_k0ZM}F|5xRMR-V1BKy@sfgT-N<7h8de2@+rrp@l;lRXy9 z2mQMfOm0l9V29Z}*ax~b!z9?Z{y#$sa>nUZ?Zs!3|NM~DnQo_ZGQ40{1muxUcLSah zH-)k%Hsl?Q`Yz^YEn~6c_HbsW5aS)paA8x)8QeY;00b0RH07=n3A07Vr<(c=uhw5_ z>?kj&?usi<)K`as866%^lK_vfP-a=x<|#IR&43hvE7#a{O~&2|AC0WH-*l41!y?bT zLZv2BVYfuxvQ8EHP@Y&poWx9i@{q{t{AnB1=eWkSP55h ziYE&`wSPf+(Ev|>%@(M#Z6I3EWL0ZDmF_UE z7T_;`x^fn1Y+KcLOiEXt>Mk!FwsMpY!3#BVzb;IS0qqg6SdlmLdTI_r^8%8w~SbM{A!^8WA`KV#>P3Mn?pXD%UY{&S&F~E z!Q2{-wy@sik2*_esd@GADJvtiOd$!57K$UE5h2%=?(UZ(3V1n{K;TUxT*d&ixiZ#I76c?t?MOz-f&bE${d?#8YI>w&;^!b}!h9aqtq307z^TnBf@k6G z{2r?6{*e-D$G4yEq{D^Ynw#=hSU-=QEbhj6?Bz71b1nnJFI`NH2-xajlj?paF#A`8 z;9=-(a%)0@9D#H&YUuL;U&I5xb@3|6@rnK)&XXMkQzR0(-E5IwKqko zg<+n1xX@t^L-)9#cz7hol|$I>TMm1wDlZJ4^T+gE6UoKz`1g|QXJq`tA5k*9?!EWz z8W?hpCyr0fepy4j5wDJS`Avjkfu)2;w=Wp??pbHPkX5$~laB;k9)y=K`kJCV0M23a zqMtehO3CG*(sX7ZiBac?6{QYs0F{){O)$n|pwOHMeyVc*G6lUW9)_~PIoe=PqHlcMFcA&fTqg}Z|y zHr;K(U;_;MnTF=O%5a-(&^ueLo_?Atrr04ggiPQ`640FI6Ve^3qYTSqDGUxtfPZ3VG)|5&Yaw!sTM7`#m61ZLRN3N%wQV> zMj?xTQQITdC>JHClr&=+USc+6gAr@)LC?Qnime(#TAl%U_B)x&LCd63o>#|1x7xe> z05Msynm)e8Dw7?*-4Sa8$J`BTL?ld4zN{+L)V!tiWS#d>;!BTNn?7?zXP9OwFZU6B z&{?Bd(u}}wI{xkh^_eA9_=GhgFsx^z;OeYQtrf);(Az#8|B%xn#f6xy8aHwffw};0 z`i|!LcNAF2bM(IZhJA1*v^1yg#xM86Ze?t8#8hSg!PYEcs1rq3$P~m#o~(;6{0?Qi zFAJbZzKJ7D4y_d=o^*q;eKZfO0n2~e;Vkt~=A&d`L@UFg%ss8U@i5^B4V9Bw8h*t{5B=dAm?px zpT@pK0Qo*Fh#ayUEIv-8YNcOLW718wFyAWCufs+DmpbIkXDiBan^yg1(;x(kn?Rh#CK-d~=Q&+(d}%Na4C-eH2SO1={;*^pV0fef_?t`g<&upP%T!g zf#$Gdq%f32Ss3mmCyMNr7fEu(FOv{4SYQ=%bc>UAF#4;fKUwo#IUfICV+JsER*4feH zf9(H%B>(V_@E>v#r)?L1qJ_+o5geCE;C9-WzX?&>Ajc?!pme6%(!?u@&_PZ3CPt%R zj;7*K+Ux{S0+Ia$!SDyuAtJ*703n97u^>>OP)kOjzfZkvbM17m^85O}BkUsBGFiU~ zlN@-iKybSD9L5$QpsF*^?gbe7uH65{FLYw_^vjfNb z9&h1JYfsz|KU<9TRUihF%7_PDZD3k>A)Iz@vv2(Owx=zdOQ&dSZ@5!Du{d?j>@stT z&SZlOzP|3=aJUYBq=f_sB48V{i1(E$4%9A|3F6n$%V8%LoXkz|-x~MnfBD4I=suJq zdQ)uz^TxD5Rb*U*Q!pXRC8bgHL{`$sX`~>?D%dBR3g4$!apih*p0JtZch;7FrrP6@ z*e`iDWmI`8FBH(e`A9sPp8q8>ABT*kb;#m2m^)7WDZmDC#u0?K#r1ig4n7D`Q6|3V zrC-q1(4oaF*=6noFbBv%Yooh)us{r+oOkzy!q)zFOm8&$K4DryXCW7?d~2xLXd_>~sz#VW>y zLo%|y8f!ALo-QVSNfH}({pD=TU3`Svb3MUfes1On?3g2c&(7f1ZTxK1y zeVp&Z*PsPeV6Ti~P3^$3rj>j01?=(u@Foh4OVg(shMO!Z5QdvCbFi@nG6ev&I1mp| z;`Eu}^u3ZpVI*Su18Y@5zmKDNY=sM4KK zZHx_0kcP40O8rV%&j()UBq~rNJ%b4?#0=iIB=5D?4%$0_tb&YyqF|KT6iKh$_Ze+%k9esQ^NXVD`vlX(OiP+SP6 zlhH*8!|@ovLLd#0NUqYP zR`b=D*T3_e%2*Eo6#(d-smDxvzGK!P1 z+8kIB9z{TGLw5cxOa*uf{$5h8F?~n;;+2OidtySf-O+3#WqsG6URY6MAkoxZz_r3v z+fid9rPc`v7mPega2C)HWorcxRP}LcYIM>O10bLO#M0Qx8=Tk%W$DpoivZg{k>ApzA}$(XC=}{1D2=l?$JaZ8n3i9=_pf3y1g#$^zkFLtD&Zf zEns&q%)J`b;9~@?>QRZuNpojqJtMq@Le|F0O4S(7jL?DxwBnTqrM~%LbHw|2xw)B~ z8x?=vRVpM>ny4mg?T*~FX>`fzcj{C;+O)Os}9@qa*phanCG30f(zneYTRGYx-Yg*sND5qr}; zy6+0}OB*?YGX+v+2j`P#?&oCS4-jKVuv|~B{Y6PLtYEe_8AU>z5*|yHZK2x6%i3x7 zV0o`xXakS&UT7^$n^P1_yPfeTAPEf%JPsAPY!U|fMjlOKlxio{T_Au71E zlutV*5Z3-N0AJKVHASs%^A6xLtsFBVxH$IsMJ+E=jp`DHm3kUc&*dG^@ zdv{ND8HMuuq}8P)WcR~L)qOrwhhA*r6ZLf6VH_iTT5b%sRuPG7TTL~~4(NU9ed*wW z*gZU@qh|K%QW2~qwtV~be~Du(pR@4kR0gh^~J23$aQ-QizH3aA5U(=#vE#CY}}x=C#j1Dr}=__RRFCItn5ea_fmncR8zA30d=0q#8~Z zx{H|^>IODxuBL=*Ok(|-g<)!y&y}M56GHgVFP16*n3LHi2 zy^kZ{m3%w2DF?Zg``iuiqE<|ba-id6IO$Wm4$G@AA^eGjCUZJEK!a7*XLbCQT$S)) zLrq%}0D1@hlvbPidYUAzA+(qvJhAerTYSM=-cuFiDmFk+p1U|DjzbQ*D*h{!se?&r ztcses69tj@CSra zI)on)`T|7lMG%vinIo52iy7XZ5)Edr`y0kENWailEP^hX_6p+6aGV>4q6~{0%%}cZ zFl5rt)z)Tt($pS5t9`T41=sQ#Us;ap#xuTrq=AHTJtzmII_br)U+OQEHr1l8%>z@` zW`c(d<9d${S3`erOn%NeF3E9W$WMZP5g#^db{5>MrqB^?2e*mv!_XYbAU;G6!F3+q@&XIoN6vL;Hq;`%oDaUkVedvj$I_$ z=su@svWJ*?Fan<;A?F6p0x1O#fsJk7$IG6iojK>(fPsTho$!xTMuxwX3%ZSi#MB5; zhF2qM3;wkIk@k|Uu(rdkSu~CJ3J(B}z3H@+GPx{OtYU_6g?;g~XA_|=l)jnhYn~dz(H83r>`=9~DltS@z2~;Vg8MOwp_WzMQ>WoG zl@eg4?$ca+?Oujv=+u-u@-5X~BT%WSN~mX&0BuM}>!%a^10#uP@B|LKlM(G%|69j; zZ1trVU9~+Oqq!nC*d-yKEzCEo~7f<8n;|N0eg#%WppS8+a9~+kA`$fkzKWd zHc6AQI48CzgfYut=BV=tm?Lngw!h7xO+#Q47oSn^Wt^cs&lOR2q}ihGb+QkctPkrC zTS**v+-PIY&I!5etQ~Z_BOz$OY}~OE@qTJ_%-w#-Qfy1>sOGpT`KXBAJc%mfNRBXq zTS6G+y5jqz;?w5+Ei-6u>~RB5&ySxYX2H>FiUz?u2T8aZ42YBYs@uLS?$B?w2~5LV z#b;A{pc~PPh8={_(_n({2!$SRsbPgP?x0o%h=;UhyK$qLxZGHo zb=-W%A9@%foS#(?VShpZ3LpHbXB3KRxMJ)O02J+a+>3Ha^-?{$6p~eMk%Tz(b}Dr8 zw({jRCZY0|37B%`8}dHC>GfoaR_T&7g-L2cy&UM_Eu^ht_1mhE==u7XRQ-GAlxnCjX z4N9;3Q92YcMjTBQ||Ug=T83#?urWdsSn5( z;`QjvapV~S;E!&m; znB+8S8Fcb7 ztC)YIpBFuwvTW5{LDC5o=`nh{%cr^vmLMPt#W@inyl0QLXC^}yML<)+7e%-YX4)$S zZi+*a=0|Lt?W9tKXOgN6w6d+Quk0OGIyOH2oIdlWtfHSsJOA~a-D4$A{h7_H^O>`9 zbSNm8O3x&^T@@kdLSH_GdbGIO5^FOb8_HJWoq`$1J~|uAHpasbaf!`Fv6F}!7lfKl zky7N@$VSY0WBx-!`ZhpMn!I-G2t%#tFd~9;o<{zVx`k#b_A9+<0_kv{tYy;~*5V;y zsKXaKlQ>=VRzc5~!c47}H_1Yg9(M{$QsoHEi7GX+J$T`K4E}rr=OSnpsXkGn6+?h5^A+sz)a zurkS4P|RL0$;|upcT-Kx&RUJ!9{7u&3*B0utYtCE647eU?eB!iXQ%h5pzSz%zsQt^ z50{jSSeL1!*vxmVQmcP2->$6PG4wPk9ynHRoE1%572!Mhs^*BQSXDU^n)ci2(A^Ak zO9KPr02vGU`>Fq|!TYNL>;u~)5Wn-vB<&0Nt)8X=MA#Tj9ThXij0(p$UKr3M6R3bc#L$SK$!#2rv7mFP0w4AcdrMGyua zP?T66$(E|4=9DtFjqBx#R=4Za+H?*HYBsGrU$^)G%GRC{_U&~;4;JtyhrWwnq^5|o zf4)uzAv|Px{j_`te(|*pzx83q&eE@_bNz*9J0g2b_!AW+lc$>%{Mco!I`oj~dj{Q+ zbkl6e64h&Us#TX#L&oYnNLe8uVJ`wy_BsfAroVB9;){cdnrB8V%w$``*;`L zm}IZZ@ez+brwE7jVEpi1ztbJ>38^2kZ4S>$65oso(Bv?$CA&BaRncsx)M4dUI_KY^ z6w}^@C(T}1?6PweTJf<*e_dThyu-bo{`myeWYoDPesP1%{hLR0~S3CEvU7=ym*@R0hbn=(%wkY~F@)&W9u z&=Q=Gp1ZB~{9O_RUziOyVmD0Q2yywi1R{h0e+WS6?;A3VJ|#|=+z~-{2&p}dY|+cp z8>wvIStIl=|K%GLTmQ6Ms~eh?!Md@lx;>2>t4-kE{`);Qcj^y9yY=cbKa_h69sObIVWk%b5cGIZ2}$zLO!_ zwp>j;KtK?<6v zFGO1qj_iP5|Ez!uD3=#B4GSuFizl|Gtb-X$%K6No@yJ?|?Q;={wq|WwX0{wW8=rRD zGmd^~&tiIQt-YD{7#Y7&g0UERy}oG#H>j(NP$K?Yx-*OF8v0e&GqKJ%K3Uw)nXKK> zhXpOI+Oq9)_(NM-$2OCLHMzm3wDgYCqcMZCLxQwO6t}A&)kUKPFujCRgU}BiUO~1- zq8Y{gyI2c0a3>3K`!5GX^2k{$`xZ#Qw z2v90HzbKkw#UQys0(as#EdJeuzg8_a22D_~Ld5)SC*{uR8~XGB3j8CWY>+r9H%}XGnmOhuz9wm&;<|PDBvqKESUi-iZ$@yoZvigJ&qHkeU?Msxk5uL%??doy zVi}vV7mBfB{9J++)8|-JFl;w1`&M^%>8UE{rc;*>;vNYQ<88qE;t)i}HIZqWG?mf@ zY!a0KO1ZgXhW3k2r|&Hq&|@pdppxXlFU=2SS2}CwI`zDM{{`izc(0aJk)C6ZT$dZ{ zM#t^vLhadg?1`Uew+P%S2-V8PFMAkxN^`sEu;y{RNtdl&h6|Z_ow! z$eq7N-Ycvs?G*0`uL}s^P7F5^MHJ414-$M4^4Avjml8D77Kxs!@q8gV>T=X^2louuS$mapeE=2bI&txB8QIBIJ*1e#)NW?)`Z!m@tvAwL9^rczT zyEe(fU}h+Ka8&RR97gFP`SZfmET%I6`bX%1MY%*wr~&$2W0bxtn?Z0qoLHv~{k16K zv`AYz=iiuY;+JOygtqAow*d!>{L)pwbZ8>;-BHq^lY1rP+K* z=rR1`GL#o|!~<{n(p4UqOfLg2#OH<5Q-=B_rhd!mcvR9dMwFgSsOh{)z*W?OEUUy1 zAy-;05sV$zDoEh9QidScsQppPb5aXAs}$eAAe$*;X!AkD zS^{sSbRb65=z^3jMvh8Dr*t^I2=w=3>@Is^hRJ@1#mbr(RZ3EC+_9ABpVn%G6kY6M zn{2yheX}l}J$;B+C?k%D0Z{co!kEizBXB42X`L*J=FO1VZp=b8mqX5;_R}K#X(eca zcj7=xV*VPVJcyT4x8dv&3H8YGKEdb2-U(@c!MscARqXIZ#JROQh`3g&{0qb|ggB1+ zg|LcTyAkyjZ2JNAgxbRsO*r`Z0u7Mnyq5S#R(v$Of!XU`z3mM~j2nP7o{j?>7!~X@ z3kL2*!htC$(rTNhM1q7yJc4F~2tgDYh$9ujh((8xMG9gP^hpwKanAgG0P(!|w>=Uh zk%%$xySlOajT9zo=etoAly15^zOPuvEFF))?7)^guYTVwX6ZzgSQVA^cGz(pe>CR7 zzKBFuu(Xc^3gZsqN^ja8I-7TCq`|g$pHlMBb!iAAvSV=FcGLc$6)pC*?a(!~WR90Te%LkzH~;cR!SM*hOP1_Q!5!sy{lzD2#CjPXQ>fJWlVq z`4oiacfPcyO74HD%MRpW0))+T$S9KBuel>MxinL3cI{OtJZ=>BV)&)@gSug;(%8Jw zUxpROkjsAdl!sCqa!sMp=1XS7&<;telUwR1se?Wm(l;%-305afXc|VC(VlBofF;*- zOKPl2Hn$r`Ete)tFs5P4lrgy#ze_5lCWwa--!W?ylx`knrfZr9Bp&9UW$d0WnSV7A3=V| zfCvduZ3fBB#-jbQvlO_5CNk0L;mXDVLwy=Ry7FM}I`6nn1hssBg{En`Dq@s?l-^HZ zBChP`Q=P=Ktb z%TmWceotX_4Ez-;a$#3&yIo3Opuqc*H0|-k9;2oZ*5Xu&xVbzuH(-obmYi z0fgRRa>QKOpHdG^*VQAtu2I*F@K`SF8YY^d+0jgTr@YT~6HXdWpG!&J3#2q0Wnbuy zZ5pL!5b%OtjaJt$dTTZMWK%C4msL5A3oECKdak-$8pY7%bWN0cIN1QxxI@;5#;-Jnds z`0?Tn6=6Cse$pNc)J!3RS#oV=(jX;`ZDNvN{uuta?>#cCY}}!(OqP`M<*8ac{i2~O z7^VP)8AgLdS&#zyIz-#EXOua-HMm*)tN-q*sICEgEM1HW`J*}Sthw;Uz?)y^`cJ#K zQ-W5t zJVo1T{8GDHwiey$z{8G(qO87HVXi!+ZHaxe^NvH}z|TP7mE$v&-p>NgZ4=K$ zgEY?y){ zFgOL*1-W$l&b96ZZwsGLnS{+%#vs9-dL zvPZdz2V_3n%LOFMFE_wILcu+6!ia{mAKdu6z2grqBCKm;2F|)5!?|8MlMVYHz!*oZ z9>R4pqyB<526C;ff&g;W8>9CC{(4eXSTB`~@s8*YDW4+^AQlCW3Nj&d+Hrajs4)4b3+AoU z&V{?%XX436;E-ZO{LPs9c3dMT4hk1%VV?>lmJx&>Mr3*14hf8}Wam*oOLY>mEY!SH zJ=DU9Q)k1orIYWN@O)Z;gj#Ia~>SqUIK| z4zEx^irsO1*cXnS--M&8gSZd?H#6MpQ6Gmi&*=mdsZ!`+rx`;&JiNk3yc9+qxD&i0 z5Nw;38G=%J_ZICr8moh(sDpT8fD9WRw z3IKSx3h`Y23NuOVg#9oC)0MN6xNPaqO;bQOi7KMeOXnpO9e`q9vzL5|n{;P}K?qkc zWbM`hQw#r*c(=?X7oC#qrZjF50MgITs7#?NJnPM2-`ufQK36S6Y8B621(DH-nL3FR z>^d!|ajTg?|{9}T5Yd5Jix9+~=uRaAKH<%sw*HfySY?y38zY zQ`9cprJ?zf>p;eON&Fl`8qSWeW9lHMiv|}s%@Air0W+sWHqmt**M2FhZ*$j&@NZ8c zn}n+6m52Tk!>;O1&?cQ~5QrhL(c2jLQ4YxAA^ErA7+0U81zq84aFGOY{2e;gfFEg4 zG7aJNcT$LvzQT46NG{sA>%x;43rGGmHmV2#ux}U~Rd75R-Tjq0HCDi&OKq6ZWd_AhmqnG_9|Kx@IN6mD*bSwk}CcFeyJ8yp=&B&6i`4y5>-T{yUihMyat)U3xH=v_pwZgl34h%@X>oj%JK0kcM_ zKtwYPLcSly8knFO=oqi=D6c&I-OUyqJ-#|47U~2)sAvhhpQ>E|md?Q?tnE|`ta~5j zQl~VPp^i?hc_*=}w@CQT3(BHSN!dHd_>)xG$}do5T?_4V+kt2>nBHk1m8-wEIfdB{ zS*m2J9ZBWT4{Bwj^BB!rQlwa=*sPYo7GA*|8*d$b8y&0p&w%Y1%r(sT(Fd`;1C{nh zklgcdbO{Q}!eqC+evzmL*53>Bh0r)n!&iKEfHy;P!Bs^(E*o8z?q359i8<6_)_QL0 zl}gDm#iik**H&}9T1`2;fH%5=q#$f(IXjWeja$dd+Kf%13iNzEI~_h>__)TW55 zvg(dmrYwz-35Z%Gh+0rrP@l@6>=1eR6A)XWC9p*jm&*krzZp|4l=VrxDW?~u36%Jf z&@IUYvb{O473aahdxE#0!8tBx*!S?kx}G)e;rJkI=Ff)sya8Sc_y~Oq)dqZVl9n(B zKHm)8CG|iUPgQOxeW*V~^dRz1CXpY|(@XLq+utPd%IXqTcO=^Ga9rrGgK%HIqmvdJ zd5B8$BJ_;e;IQaq>tM}ynz}&{14A9oAN0Qzv%x9j|MY?hi9j~Lw0L#-1aRqw;s+z2 zsQfO5`b)|k(E!WU^f^M)_fprpaINj=85(9eEA@^Z-P51ZL~focp|#b{RIrLx@M`G? zPa#OkScQ*`<#J{6d75*T&#_j@p`LU7{yO_>;o3f&U~gO4Pt#?F2QMpCZ&;uI>(#%o zS^1N>Uwj_sxvb^4!-3h_65M!42ilg&83Kvcd`VY|`I+3CG~}sumUD{? zca}I}qd2Tk!gjf>pHogTY|}d2!3JI*$tp#jRnn}=L3^{z5lL!+7JXC1(Kz#XyS#*{ z0Lo0mgf8{$e~ma*oKn@dGEHjPdo0p}XRYxiW;)keP}PHtsKfsrRl{w~I-YGvdSzvM zOUDJs-p(V<1{gkwiM_Ijkxm|Lb6R z>;B;%$3Ns~zNx}v7OwRMcr|U1&C+cdR@%>!|6dS?T08zkJQ`wmY$8 z6#son+sW|iaq7L#xpwIpoxZp8{cAy@Nf`^RnJo>kOy-3s`p(QD>_t0pS`ayd8&<@C z5*Qt{H@Fw+&iO-rp5ljgG3?#Vd-I3n+ytE{odc%_mF7IkG#mx##$bdvAhV~5D+9pF zd{GD@fH@O;M)ED)gQ^!_R7J1MC?4#5BN3?GY-2MG&sGB$_(N>#DbqFADt-04-1G*o znv18Uwb_k%7pXW*^KdERapb542ihN5%t`Bf8Q`|p_tv7*JnhI6>$cL=y6Vib+h5hP zUK+~XJ`P)6QsCsJ#Vh0l)-KRd(A`{`VUS1kHS;7dRnD@sY@gp#P*ls?)Yw?lEhKN? zqZ=f8-<$Pc@bxTgt2sz>AF&wi0`LFQUF+D>(T{2b_swE-sv(RH;sq zS^=?9Qg9j=Drlm^Bxs?L7FU~3uj@FcN@zot7sk4NR3y`sX{Pp8zMx%oJAZgojSy`N zVPvu9LzHO%4h54c%U@`1>Vn-q#;}eM`)7XWr>T4c`keym<&9!^Cit}4aWG1TISq0w ztY+3RAe?nEg3q#qozZ=V+FTcc_Ho`>kA^*4LNMUaRnz6xo|_l<+^Wn#4ZPB9gNYw< zOQchOK;6@fh8=Bk2tll*%gd)J>&d+$sso&U%+??QvXC0{GH6AHQJpD9hw!rO9N@AnU^MVE;&NNaCR>rtN=nG`IQ`GnKbUsnr%OyA7&Vh&RUNkL#*s&1krCc zCIl_2VO2;(Lf2H!iX|KJ&OGHbA!IS4Wwak7tspu|l>J+T!~F#6k8(PvSQ)37k7F@M zEU4Yx96!?n1nTLf5)|7=k^z!uSlISB=eczDJhe9mr%xNWIxqqxpRu^4Bz*(*_~^Qf>m!6A`X zZ}B-(o>S!}egwP9aw&?1j3seGguLnL%5B4IE%#Ftaf`tg*si^r_6gFz{PUl550HE3 zJ{sBrn7wRSfvLU25rOPSMibH+jS=lghMDTF(5o|&baD1Z4@j`jOol7*!l+HwrYJYU zcpFG@2qLI7x(u{AArhw!KZwfqVk`(hSs(>t_+mLC5(+MGQ5UB^DSij?Y4_k1Ly1|G zSI>yWEtGKv`(_$_n3mpRDXK_|%&*+YFOeDCStK%rmR6XFol19IWt|SwEwFv~l^-_u zTcn=AG3(Q0VoQ)q|2+;>0wqm~42?{k5l3$je9Eji5h*cgv{qN<9#r9cqH^h2rbSRsOvEEF(;d!U(1O(oGkPtD8m5O9+_Wf{NE2x ztZD`Ggf$Y)yuvfknk-th*rOKGrkW;2zCzI;x-W%C0yadIA}d6!hfXE#c23`Q-w3(~ zklTaUUI@z#jOGjpNpD2Inrut~G}*EUG_zFb{z0yjpx+T6?5nTIX!hS6rIFqbJEgC_ zvCm4I7Kzhpr)g71Uqq_wXa4R0ZlqYb%I3Xq1!36Vw3%?eDF+o;iySp7 z@X)wxhg>XD)$l0$`r+YSW_0}6u=m1fZM8JaSH=3o1T}%DCY{%|ZI<<6x<(5-4fs&>r*C@-n4&>b+plL4cBJgkk0CxUv+X`Ts zvL{3uo=%BWdnI?-QIHyQ6Mz0(tT3YIWW{^i2$Oh-gcZ7juFk}4FEmM}gCYfH=LD6$ zK?%9Wbfr=X0iF^yk|S?ze6LDM`wuFx1~9Di`gZtq0|XyNHVYBF;dRp3sP z(}X<(CiIvlcrhh|-#F?9Y7ZVF!GDYd6cwoap$BfAWtW(%8f#3vh@S;UQg4>*5Mdw- z$TF~v2_2p?1EkXSmTA=}alN6(n2reG${^1VeqUAgw4FU2OUl7fGV6Sh`}2>8N54+j z3pcqKmt#sWM~@BRk-ZPx*4opI{L<70xFAEQFaq%F1B9_Mhc_`L$qFkv#*0rc#bb-# z3S;Ws(WcWx5lCnXOIX9a$%Hd|LFcvm?yYaU`$FM$f!gLE7{R*6Al`u)Tlz79bPa>j z_U$s@kM5&v?4fsIZEhU@l~aHaeSp4w4mB{aDLleg)+b`LxwOxoEJ#R`MD@dA0mB1Pl{`{ak~_64K#Q^p&~ilHF4jQ75Y=0bKH z=`wd5**tL^`QZEseObM4O1jO|!;ue3QGN)g<21qD{jAE`)C1AAT7}=3mw!4feX5th`4spUFyG(+sJGTs*i+5@f_wWHrZik|5)Z>kT zt2?8tb^Nqbj#t9XIj__YfXgZ5mQ&y*J8qXW<$&20eInsFkC|UprXNsNP}O*oW3~&c zSFHGkV*O^ac1ha=F5=F{3%lh5zx?FXgc{;T$t(AM0?z&OxIC{%08+uc>_m$l9}t(|1SmCMbL*`w27`egQz=5vP0Af z+jE;_{z9sanx{tUWPVA)Bs~v>(eh85Up!u;;J?->D?#!?Kz&m!qdaf4_=lmpP%hax z*X_v1hmY6~9c9a3lJ2k&bDFZxaE6EOC?(DjPEegE);L6M2U%og2hBX!Ej$5UV}R2< zyFQMuNS?o;G0%q&*oO{z&0}^72k;bjQ{zH%J(#w*_(8ex&bE*_&?08I!UhI_fIF6l z_ESk=-t?3;p**#;DNxAwK;6zLyf6+DQov6f%BbH%W;=lV0p zm65q5HNy%uYTO{?)m;s!OX`ZJtia|AER|8W_jQnxHwPt0Kkgu-YutTm8}f(rc2Bs3 z7*!xYV->=nUUJBp%tv2dBlJ_NEQ9R?UELzt4n)w8QP0hL)a9gxA!smgEmGEm1su3+ zFtRFCtqbrABV8kGmgp-_H62QlO?fzLL(p~twZWm5H%>Ov9e#GmQg29XJ>XL}V`2t1 zmjYXsrJ4N9M5O#sLyylbyrz-a1WjL@l{CMDoIaFmq?yQb6|R)x6AtN5yi0sEI|;)t zdV9US?}awKPKr(@0Sm}9k6jap5@t!+^?;VdGi3)VgfKjgQ>N3dxC%z)Iv9OW`o#&! z`Zr0V$u|G>igKZ;PLqRjbcuhG?J>8j)OY!An^t8g2iL#G?+5+KL=}-I@MD75!+Q9% zil&L-;$R=xCrsqHi7AyFmc7$^${Uf%6 z=EHBlI|Gbt{K#ao9X20v2Py*ngXI81%pF{hNg7d)_{S%^m(#%^bH93+D{>Lnj9gYM zyWE)S4lFW~3qhg}*IzdhAKA(v_VHo+??j#$4;0RuwkTFmi`@SZHqwV&49-;a?YI4}@HF ze9}dSAUkAuh1|p9=dursoodlb!iPuC?e8QxsBxN=!Ir^vsN>9GOkdE06PK*r+bPsd zb@H5E3rWvhOc!@he*A)dq0m1bfxn)Tx9Hm!R3moEvP=QT@;{ItnajddeY#-4N*UaY zT#T>!+EEKZhyxhOYFpcGb3zAvE%NS+-WX2|FwsKMq8L$(so93JK*)w0!4!P7l9`+` zHq^fHXvy>_Qv>I>3b2U#Esmz{OkNJRnFwhZsH2;Z4V#rnG`Q@AVx$kCn{>IQ|KN5v zD0+pm52%~OxuWu3v7WDY2x`DTSpgnyeZc%sh;KObgN{3#ly>Y}J zKN6j{jP33f6iHk;@@~2W-MKAHsUBxBII2!{S5-<(sgbzb!4;l{U4=(MrmI+1F;J;V zrOPOX>}*)Q7XL6_x;5dB)jey6k2>KA(a46}*t?7<;E_7w!I-Yk3{#IKcF|~O9t!vlXzgWkw@Eospv#4bmNj-&>jv^#?mx|hSQco}Bg#8sRl>NbS zbpoo(;Az>W$U)e09g&w^xp#BmLA0eV*vwW@{D}Vs}+bQB_T7`G9iZrERL^bWxJ^y=ojs#2UmG342pb zqc+xuyQX{o=>P%49}x9Ydo6j2m<0=yF!5yj7RmP1d`j&P7)Ma@;gwQt!6IqP0JT6# zt|ekRu(;xyK<6q#9m<;J$#R@I7fnu`0#J*r*3m?JQjT4?JBoNj-$uA96_@m^RtXJO z3}YCX#EGY<$g@%lumb#VUND7d;u={u{EVaKsev!leII6;CeYLks443Jlh%MYOUwD% zX{!P)>od&P$R$1NEsL2@9 zapo7_TZY!g=%eOxp0knLY&7L9Sv*=1bPJhyCvclJ&2lZPCY`JvRp?H&KPM-19+jfs z6`#fT9Rkoe1vkD_H0-Yr3;vs0qjP_$D7415f*M_(F$yjnB*9Id&KWxap21DN&KX~U z&fzA(7LAsH%;6@{{@nrFnJBU(;uZk)edJpc@QU#IC-bdIc*ThQNd-3~J)_A0oXD0$ zJR&NhM@lOL%|ys;iz^DpXqL+4&l6k2SZc7THl#vZ<5JDPEIM5MRV{c?mIs>!uS#Y# z@pVc>%N3#&qgLf`Hvw)|z$(O}7W`e~Lz{(@7Y?13u?yYIAv;y17QI>wI@P2WfHgz$ zR>jVZHVwFna1$)?L_gHP@LVJ4v=1b$RLy2wHJg4`uk%^E1~Owbo4TqufbBV)z=$g# z!ZVmk#L7l&t4(m1hdbkPM0&gCpm1jF7kHb8Rt+4EwK*=rY=^jI=|US(i=?$SXp_y2qHTGG!4NAKmxbDhKHGA3YYF3|H-P<;Kp%!j& zUC53&r`2p*FyX6qEO892*N&1*e__2O#U{-rElnb3Ah&=!WQ~^p`2u0Jic_q5waCKj zq~Y~mIixH5ai>#@lRLHH@3mC<&I`r+pj*9AiM0tZRC!X%WUi2sS^XYyuiSMcwDj%f zQ`6BVvih}A+?m^4#uX@#-E5M7b2^^SE%VrfZbv;k7rGGzd9gbb>lV>!u~Uk9ZA3+3 zFCWbFshy?zwi?!*=mz##oN8=EGTeh1jQZ&q{L7Me|81h7(wKI@Vk>`VFAb%qGkEBh zj3Gllu4K3zmjE9a2W6AZHdBh+xA>=|X#K9f*)S1@|F1c~PQsrat7vV}Sz>Y<^7ibb zV|!(;`fE3wxygB`G4dN$^9L962e;!D-?;ZjaH`ec@b^dZ;_*KDkXJC9#oc1fa+@%^ za-}tkw%cO79nql9ETqmb#ZR10jkiBK%EHXt%1O8RSreqSNzCW{iyvJhfF(~`$+JDr zvJ1pE#3C3ouN9bU3% zn4sTBgL4x^zUe8e$eZG`0msJ#nX@i=8 zkynCPtMoc~k3u*?f}gPZ;s%Bx*qt0EghZy=NSgk?v@ALxI+2smGoPUhlQnRo@j z%c>ci0~Xo_p;!nVlki5ad>t=>Smfdo3h;^g@XDxs!Yf}$h}IZFp06roDcuq&- zgiYpJ_iYH|T-49NzD=W6KV*-2n(H=&YR$AADqf3o#wBAc<(zKGS2z=5AH?eHUs;ZR z8o9`aRZPewVpj%o+?()D+~)7)ey>dxJDGm|js3qT#yu>EZOusdcRoU8h zV}m4}$^n%3-}xClH-)rsz`~S={3ve zRo64Od3F8!Imf;SR4%M3XfYYSS{fRAK6HBYDPNO{R|P8_!=_IJI&s&JQVu`HD zq`5`eqg_v}p72(IIJOPm*#(>sps!WWyN;-uAABth0D3DgE?)0NfO7!_1r4b78nUUW z1+-HGJd+c~r5Un925`ZMaL#8h0RTbVRL$h1p{e*sDT>@hIH0C41LGrTc448}mWskW zoczcX8NK)SR9>YHsH?7WEy%FiVJH9zK60Nn81{-s9W+hdMt+~c$U#wl*VPH`5*0>6LTqvW}4Tsc+^vxI5(PV{lY5C zY>8=AjW%c7%g7(P?I9IXBMv-e{e1N1{sAey(E}G0JFOR@B?}%_gG$}B^buF@s7f zz;`6@N76DiDdNiT-~K(9i5E-H;`YdSahM?@7ci@p%PIA`R6Vf^QcNB?9Z^j14{XE3 zF9>&jydsk()KI46D8cCziK6io3FD(os_Bvq;x~V-9Me#X{hMtNfRQp z`|D2681|XMOP1_O(FXJOz)Oh@7|YF{R~pxsjV!83zCq5G!(yEY!#iE^h@mY%FzRnt zyuBUv5G9snh#+D!4%r|onAz+D2v}}@5q|!!St1%&Vy_&a)(8IjXUZ0D)ijQtTlEMd zc~9Ay-#<=2m?+W)AE+!Mrt|JAdh&Z#=Tn{j>hnma>oKP13w0?U$AAz2`BU*F^8@XrX z*4@9UbVn(r4_dYRuQ@>4?OSz++}*SJ4s*Z9l=yfmWPOxL7Bu1Ywed#{ku=QS)ikK4_|{q0P<;a(70`fnzodrz!x(v< zQ+2Vieg*JHC3qNSz32Kjb+3;tZ%(Nkzx zVz}^vVNN7SQKJ%z7U?o>Aa|s4T`W>uJUlrOM@#`G6N8D0h8%_TQ~ANnwWQppw9fPz zoJ}{XZ{X^qoinVq^R=xe<+|rZ^vx&mH5|1nAEb9`DvC}jR-A=Y*c;fcQZ#WI=4K^H zeEL6-iPo2-Edc-MhV}6O7rpZSs~aksn3_16*c$zx1;qah{)hf2DzPVZ$_ZN(AEP?Rv-U21OWK~T)D5gdSnN- z)LiKp`8a|AKJn95sc-=+q0~g_>rs>TJ|YwH6ckohr1Sb1hd;9_ikC$5Lo*T0On5S@ zrrR?4wA`h|W$Kl@Am0lL8YWD+GSumILW(5M#YsrHDLwE5xdih_ai)#V zJd*qM5b;W!)0rj%P#7v=i_=(jrvSNtxkIaHfNl$&vpHY$oCfJp zmKJBNnO)Rv?41%-pf(d!Sf8)P@LA7RE0}QC#aT>ihm|Vo>#nhkXYnKChNMOIN#M_q zR3bAUkAYWwVxPPrMFI*fX3h%A++NsgtUyJFp;daN}@hI9g53IF>^= zrEep<;vVe)T01f0(?C@UeNIu(68JO%3(!yYz*bQK&XeFJkv52SQq2>cC%{F9nuBMw znXz4Br2 zPay6JErHlAvxfR?XJF#8j^1T%PvGp)i^77vb zeP!prMhOBWs(TE{@zwic^X4vPuy#R{zHB{JG-@1uCseBWRGCc|4h;ax9 zsFU zv6HDwsN$Pl*A0?hCmIBbaF8w@sRLQUoV18H8o~8|QzaU!fq~31~`m zoegVIHPAiFC{H5k4ecrI`vs6q@f8C6vK8_s9E+OUk0R}~OZi-2 z)dAiY1Rb#ZLVqQJNQlpVrw+vI`i+UVCwnApXAJ_>c7-?uRJbG7y#e5W8s`OWxQzIa z8pAP#$QRl!hWK`gDLJ#FXfn+=BU{T=`rryY%vzQ+%}umiCYT-@-W|g+gNPRiF}Nzm zt1k@TZY?kXCZZk((5xuna}O?LPYv%ngkzqf|7cbsIH6-b`$Dh2hX_rTN6pbYOn-$* zuhO14=n}D&oATwSS2@J0;|F^nY~_P&E9(PS7G^HUE;#nkP;gJy9Tem^Y?!di2wlL#3nTV=h*N+ZvWAQl!T?}tnL0W53T6!9L?zM z3@uHJoZUPZmN=J?s+#VtTfE3051>E=lwGcFRwJ)(KfIA>=3l?No?Eg4&ct|uGk^P#(j-^7^s^7~hKOeW1I=!F6jUoWkd78mw^Xe9|%|_01IcwO~<@duI z)?afkFBYV_3RvgR?}1JKI%33VP63d){bB0B1pVo>@KGAioP8{bzS1FlSdb&Qb%>82 z)%4blwF_ctw7ATA`bACTNN2G&5Gz$sWSfP4Nj(w-xKVOeks_@`TsRoQXkOk5;0}ww^uFi~#D|)S_R$G~$ z#^2?b2z83Z$z|g11X(=}6pFaXoD_ILzJU$8faTAh0rzYHU7=d6O8C*AV1oj8Tq#;a zsZR}KX?w;3lH6;E(aXVJ_fI#MUV9FV{fmd-xjqw*=`}o(Xk~%K2>JF>LKO6TauXO@ ztoEi6Y1L**tgXu^&{>&QHx^AC%){{Jk1B6m>CVo-%IOgfcB8ZP7b%qd=8tNHK zIO&u6fobGE2D|PBUIe=p=-dhsmD=v|H^b)9h})JBVuiHBN~NZPc`Fv~OPzJZ!=JWt zdpHK)m~V3sKBX@hh!xM;uGoGw%Y>N6&QP6PY#h3Sw8sqi(7`zFhJtx~mPU+wt_3LI zvxtR;i6iQVB8-y5sg{r)KEu>L4{WNPiiQkSPP|C);oXrUe0a5gB~FA_{^ z0wshBP`JQbk^migm?I#lG4}bEp7dkwidr!UmXDXl1PIG!$GHeMpj{6QeP!hVqjMZ6 zQgy|bU_iHua|g**t0Av1hy{ZdjtV%ywrOJ+J{lJ?Qr=KZT5c6Ck8(44i=~wb9Ry4mv7H^ERVV6hDEil)s(iMz0#NwWd$)h@NOj5y_WpDli(YS znjBF@&y;FRdp5%E08Y@W44M6qjBvdxyIop6IDnVNJ%bvnB>RSnw&6$O%jR_?8FFh| zw+>;er(JG(^Jl-0AYJnIq~38o&iUm2EBcb%G`|oIqV_4 z|AB(|we7>O1@gqiMfQ5kO_acw2YF4JJXgLQ&T)DRC2|D$MK!qE2rpap%6;#^yx2vi znlIBD5?U?J_C$!36wXe>vl*FJ5@rqoM`3o5ufRfd5#gRXacHm}7Uv>O0YwWuw)8L_ z$0j_I=80$QBj7=#vywisd~eo(_tryB8pTpr#D&+WKm56fapym@#cjvR?;C>JX<#OPpHfmcOWI3#xmLZH$ojG z8@cGNktJL9do!xjM3kYx5 zh2K8E(}UA@+Pi)VoKftRF_d}YWA!AKB-qL8p1T}_XC7|12W(o2%+;Es0+;DMB>rI$ zPVT)Fn~C107>C8!qC84QE&-JJ5=F{zR%8DZ6O+A%iXZ)UJg@v;G<;}QzrlreQY@Kz zxi7B8D_5b1eIAcK%p^rB!xt1|4Mvl@!hMx3swqvMR~5><1E+wyzw1SuM>Ka;X*usj z6#6XQ1M@1@@n%t@H3h+aGK_ib?x4*BSu={&E*lyVYoswXt$#ban>xx2yfjO}HZT}B zHo}0j28qgTA#Kep>N+7FO(k!CX9wJ z271jXPfKtoLRK6Dy1KfWP^Tzn=yRnSX=gQ`tM_pwGYdzf&zqDSFi^JBxs>HJTo!6u zeTq6%P>Ey?i}K2xZg-F4v&pFwGpD)6bElO?3Yn@?0cN;p%Nmul9v<2E`v~Jwh_M6{ z4XjMOrs_*q>STKt`Rb)dg~hwGgGYVBJ2Ei#*?STrK9Nutn$|}4ObH+4Gv@A$0c7Dh zz9S5hg7?oMo;r~{u0vCG)D`$&yo-$a2xp(YXVA+UK60mh92>zbsZID&vh&re-yOZr zAe0H?Rh%YhdB||{lexJXv7*p+yV_ zV}ugTt|NWt8vEub4;4kBvQPI*3%qjVJj{yNv7IsiEo4m@bzc9#-VMa}cx*Q@lIE>T zTh~Yvo65dC>nEI9Nbkic&Kc0??giE13@YBPI=O8SR-XqBEyXx}5uiz7s4-koW1gzO zJXlH(vf3M!1z#vf%cPUc>YoiBDsW;^OS@?727 zX*dZ9LDPQF4wJSg7s#*+Qd1SEAeGbr+5E+;>(95zBGElU_SJ44doMp$U`t{z_>E;O z_q3&+ou6gbN@X0l`df5COZNI~rukK+zdm_W8g1r@tj^}NHFd*iOWxr#>7)@Smb~@L zlG(T1#8=dkU22j+|JFh@L#NpMa&AYR@hI0)W8oyt`7LUqn_43Cf#eOcs)6~s?1({o z^#sgo?lY^j7&C(-u-Vo8@ZJ7B*c_0cv&k@*6z*nZl~$V7vkc%vGtqSp%qr8~)f7?$^He+D&ij_A5k(z7neA^t3B1NgxJ)U#eufWCHhUZ{g9@@g%TmXooxPc6;y z1Qk>p?Z!;T4VIB@(hUutM|!R69V2Xw-U|7W!V|P36hJf|(Z^lbPb_Kg$RyP9dNu0Zw zN$y)?H-`QRm%UhbByt?9S8VtrL$$D1%Jk!dWrYyK41;9{QwAvpD#L=d zL{gMW75!u$c|hLgKq|xPDqrG2tb*xPvFRRKiWz3n>5y%TVYeWC#G7g2E#VZsx4^R{ z`i#0os%*6-F=ZpDN%*wF1+$=ctnI>n<{;z8zrq~q)T-9=RJ|MXZ{9?uEN5J)9D20N zTPTE)K}}~fO`=Wrgw1ftV0(b_*X;vzr@f~gd+&O*EiXQk%t5rMyduLXPhx|dm$Zbp zUGL=jhzb1Ae8MR4*TGh}BVuxb-U=f>XUqJ_C;H>|ur+8)yF$(02k82MZO%K-u9u!+ z4C&|t;KwKcN}eBPs8 z30Q1_%DSkfJ#==gWjQ$O9B6x%>77g`7~F!F`+;;_F6|KDr!(n~vZ zHwM_rCZsjtY&T5Xclj=4=sd7st|e=hrul)SO?Z3MA#3PH(Uw~J0BzIl$XjZjx)^6< zowHQr>^VXWMlF5FXe4SXGY#oIX#-?80H+hDh%(dxWz1SKKZ2_vpw*DrX2`S?N}&@A zax-Z1yQ31unC5f!b{F(qPA#WO{9l%nQ1<@f-?YA9JI zkKs`?MAohTWhVmZlZ|ZtmIXS~JRtAi5pGtJm(-5eEQ^)7J*%jo{Pn^sC+~Se!h3+nYlbOdCfSN)r3I6qc?Z{n{;DUB%SdCKqgSYMt`N!W*_#&xC2<}(?;KwT=KHA@B zea$|SyC@~@(@oxxS4#(LZ)zo>v3T(@1xfmXXx-2(T|wBKexA>O69S^a(*BvTzO4OI ztyzXW$Iy>SOyfHnR}$>Ja>oI z-@en2UbtuXUbsIXfS;5?&tQYkWQNaZt_xf38M^~E&raKa?hb4{^O}ai-J|)AukR7z zmh5OYyg1H(u<#w|N5f1GNWspo9NuB$AUW|HSe%BLvWOM&Gp}coGB+q|nP|6KCb|NF zYHKnNhNE@}wlmFxz-I$G+&5>qrSZ2292WW>H+vRrX1M-dhl~khWzq|MH z2zbQgV_)eN?ttYi+4>fw%9F4-bW)1zJ88|@dh5u+DDLqMeFbcDlh*aSA!E!WW9RG1 z#4tH&(^gSC$4mXF;LD&#P?LHF9Sc*!7#Z{ypBm`Wq}yGBx|gy+;ai1zs9?kLn;+dz zR+a8l6>_z~fn6DW8$om|eIDXnB4{V4qhWdI!uZfjACO&*VaT5tgz=P6%RN_|99Qe7 zuIl>3q3bnD8q0E!-+L#Fz(T%h*O}JxGf^11XbXb+L zR;|Xou6l9ikGwi*jIw_uYCaICgh>5$cqy@XR=~ohbh2d=gF;pe<>od^lZ#gPcCy)L zMAoCq$rNvZVj6Ei%#5mbYv#JH{=WvS>V}>$s3kgrDsPEWM~_a49+0j5r;QDTUKPP{ zB8mMbS0xUfpQy=!-SLEL|CWA)LfLSdnp4-SKWU=7qGAZ2Xb(f*OVQj*nRipplClV1 zDnFBD?x&4=8>pizMT%2C%@4nHcI4DO(uAS7kZ$R%TwWGAbqpVM*3GYn4PFXuO@q3| zP0jAzG&=bI5F8~cSozCng&^6mjy^d>wyr9ALmr`}n$97(Pl6=di%vXUs| zPID1T?=rwiwi7Bo^xqIh^&yg$D%B(owUEK6Wo`P=Nmtb<-pK2$I$EGz#XYrd;%S;n z-y2iXEIU2B0bQgcxgn#M`JU}Rt{?6OrA0Zf7H;G~e-eC$j4IGUu&A+^hN3mynho5T z4VZ2hx?Xbb=B~nS^3?!x)jTA(qip9pBHb9D;dh!b~b^KSHZo7=WSJTFj51 z7)0oMWgwqTm~WKsCbzL^TqR@HhAp66-DD<#y?bVm(b*HuExY$$iGprjZlmSHJ9XSB zSb*Ua8b25+L8enAa{Pw;-_s;oqZT`2Yybc|b^rkW|G(<@|4Nf=4XiypO&tHf^Q8Z* z{?mW9|EY!x(p`CF{Ft3a(Po#vkt{0|1OjIRY5C&{K5qGrH#$(bSJqG_RqksH?yzba3Et%QEE?`ExbjP`|$6?zIH)=A$7i&k7D=< z=ZNBliERm~G3Vib2BjQtaiV%=TF`>jL*j+%R$fzH_8a}_MR101s$+t`13sGPFov{K z2&X6Scyv}UQ$U{Zmw7$!ogpa!Akt3A3E%g)h9K$2WkCTsi~prP8S{A}EPLpfd;73S z5}qgUvD_kr;@k($9K@)O1^^lMU&boJL3X`u0mj%5Dr{>XSj4~j{lS6|OnY1})5_yP z-XOG%{dLoa;$6^Fds=E|MybvIZVm8+ExYKo&>z?riV!gRYu+DD@Y> zQjNo5IznMqA*HH0H@C}t%se=*p&N>nLxphei7V!dwMnE0<{+o^(WKfoAT{DA*cyQb zE@F^L5U(VSs|&>VIVTm_P9X_TSVKNkRGPT7vho?~xNJPoTLHhQ~|Yz_&A?u=nZ6vrR9~@M3Kx>0FgD6E1C26j&Q zrb-=$Tc1d@B?NzB{kqH~au%>l6mW#)h3QiFjYF8pkK{IPWRuCNPQh!agk7M z#F;F6tv7rW>=Z^f35S#`9W;oYrtAHXaEB74(Y*{d(}%G0VY^heWEFDtO#_9+f5*W& z;l?TAexG3Prt&uy1rA@dN{J~$c;xxcjCluLG&u7>_7xt~+=pFz&#ZYDFZfH!kqg!r zlE%qO0v~M1m-5`E;JwDvM z&z|W}8_4mcB44rel*&(UsHc=e$pp%q5d+QD+W|1&*N{0x{bGlx`}5zFd+E~dMaTO% z(sKaWcjWI3_|IrkbZh6qGn_P#e_>7)jE^XDGB8J?3MuNk-hN&6xt+OA`dZFLK#x+y zr`^5V?gu=Qu91?vpqH-Wpc@+Yp3-CtbzzwocILRubIEE`*h$(+z~`pEQh6+c#c#c& z>Qnc3s!1318x-nP#rETx22yq=3B})XtYu49G4dHE*+)GRjY0yAf1f7tfyDS0#$F-8 z^Gzn1Nq?}+0t#v@SV)9S6m|{tF-gsbVQnNCS9(&iIZkD5n_X`6bs?<9`7!KHA*il5 zsEHxGie4#uT{Dy@k=yyNBj|sQtBAeDzq&Zjc`%#S&i(b zpX}+&GY8+Rtrt4QrV^JGXgA{`E3!)2nb8f7>#41yayWyw$>`z3TvtcHlw2xW>pRk`N;9Uu&aWfwhdD8BwQso#+6Hs z5PrjVpeN$v0i}+q@_q~Nn9>ddQ6Wb8lxpODse46Tz941ZIH#@S_!FrI8ITq2s30jH z*>33)pzdutFzi5_F6FEt9e`N{SU6A4w(DaCMRBAkb(gHFsnm#5vQ=5iTt!aSHSEU| zu)u_EdnF^{kK(%BfZ;Ax=9S?>tK16# zla(Xf_2D@OIPK9nO>jE5eF`vgj(aL!RStVnesZpVsBj^va1{Q_?t}ng3B`!9SgS|& zWha6jI@C4$?@Q4?5sI3;JK;EFX(sVk{Vm@v`3(vhii@p{$dhE!Yn_N|h&J63RqZ6` zaeD61^xAS;++KTxKDau(AY*rLmth`lSNjxgGYn<2$vJCM+{dQYbWNh5$x5cOkcFuzSV_SH0t5 zfrg3(H2q0SICwsVw|AS%Er8Inx9MuKI#R)&FWSVvUtyumy@Hl$2~-vf%Qqoz;v)JJ z{uWCDJgf8*rP3pP&;Gve%%lqoAT99wErdE^>xn!cv)kq7j=l{ryt`!aZ{Qu? z^;*bRl^xJ{ZDM~eF!R&A2<&ZsRPgKykY&QSny^PVM(epif1o^ z1;gJM0=YMP&MH{fl7*=z7*rGDZ^!bJO=pUNanA=35cI~ODv!rNfTAMGR-V@Yv4Elq zB~*^I{AQgqlyo3#Hz0XnvZPOL4KjkDA->=4kOs{rga2(vz9)iz{IpPUDh_8#SBs4qar9>;ZP>z=|}Oy>@r z<%{=P5E-v*@D2SuuqPeXMjhbmo`%Dpv>tS=lEG0%75PZQKsy47nqm+Zuk`_ck zYp{_l{6>u8-$_+I-iQ{sZtD!%u!GTThFaZv4aR(tQ)8c_WgTD(ez1v&X|=f@N{r{` zs!-Z^?Lw1WG(VO&Lkj^Ctsns1o~Whnib%f;-o^~7D@!o-I+^bMHn2ltIBL^8F6w~2 zHKHp72W%g${ulM*ChFL)k5tbu0>nQ1R5!r!(z5D+m8opa0InMl(NfSZxb0BeN@u!d zH6b&(9%9qFYn7`#Etw3}ng4(V)P+1-won(o4GI7HE^f&(=Oe*{)2D4{J}}#$M6*Du zX-A0oilpt#Y)JN86@z(zHPQN#V^6&D>zNoBhzSIFmyp>rP1YM8Okqt^x*hR8;n0gC z=QtS9SVAiTAJA-wO{&28=!S}n@mc8*5%rm%2JIcgUJGkPKD&u{6F7KFaMXOHCcF?r z{@kH$Kp3xWSatp87P6~Nkc#(}ryNhbRfrwFk?+Dxx{K|TD#BOj+egyOM=X;A&_g*H zr9Un5i6+Wb`Y^=!p2p!=j+YHwDFV1x%B``MZC$u;TIdUNXXRS&qS)>nZI7z6V>K3I z=ax+;6i+QvJ3mbQLI*Mu{vV zrwLLzXSap3Re{VgrKI_<+~FlR1_ZwVWp=P*Cx+8mgKU%oJKg9Ghq=l&EJ;sWf{oPR zZ5S|H-rf>l>83Oie>>_aB6(Qszy7sw5%p)n(k=$K~FpmmKlzkr$l*KoNWr*Ix zw68m2LFlQTAk%{{NOvp>9bB3vi`MNTh5KIx#d7YC+A*DVu)Fw8Xzp!U4@^t_Lb#m; ze;OzmvwYx42GCHYaIBymeKOauk9A-)Lpk$d81>K|!_`bt)q6UP#^4N*2*OkeCuyP? z#t0VVAfM#k-7t7-P8I~vRADd&@r-6zJ|ZwqOj1qI*8mi#RNe-=Yh&5!1tliKGGmb- zLcxXQ41+S+V>x!${jc=ri9eSh6BkL*a&5wPZgL=#p}aJzOq9<#>&W0;UcdH^CJ_UK z*BHh1ZaAAq2C9A2ES`hCv?vpr2Um(odz-C;GNPDA%CbG9CW>M^kg}Vch06;-Vg?l{ z0!9n=+}RWMrjx$!s{T{kki0c+X-53tNy}x6OH&InMu%)Mf7V&Z9Fhzl^w7E(6X;0X zz;FZ(aX>cG!8w;R&W`jcN_mt6Lm054BpyZ>;KJm+7?MAe4E9G3_Qw$abrG2lKI_+{ z3F&fR;gPtfqX`Ofr|b4VQvjd~a%({P4MyH)=FzLL0u6~Ks5sn1S;aAi7*bZ3A}kRt zAUmAM>MXE0mX-?bpPM;uw@bQarW0ZN8~{~6J*d|kpT0ot(?}5 z6A!55j)LoQS;rXq4{`-vGXy>VqzMrEK<91@CI=|aNoD&Zmhq7bhH%Yd*QV(xhnzAF z5zrhHr<^dXj!flv!GP@P#6I2)9J&T!V?S3lX`8r3+Oo(g4rrK5lCFajdn{c*x@_2= zd2Dq4qp0cfvS+p3$=`o}wJmXa`e)$*xq)od{W!#765(Q?sw|S>@#ny}X937(!uXan z;QNE^-3$z_zXC2))FiMut@OK6R_Rl67s}VWf~25wMxSJzoGIZo>s6q+q#~ze95Dz_ z5Q6Z1gZx78yQ_m-A?wl*X)X1Hz6UL!a>AhW*C9TrhLD7%Hi3+wasw<>hGV8>Ws14u zvT_@hXeL#nx7W`sS3P;2az~OCuwVEV1)lpBJUc`j0y8H_hVx{Pqk(1i^3V*_NcX?tnRSev1@~--EggnOWn|GiYXq%ID;_cb|~Ec+7FE z_Gq~l=%RU}C@&R{LaNHXG(B|nHBIl#1GjmAaS;)vm#9ie>(8)dbPJ#1l7im#i7T$X8$(Z+ZN8b?0I)o)1@`2M@? zA%WYg9N;q%xY@#hvs@fukzP_DoGACZN-(Da@KD~@`DRM@P3e$ZsG(WH64s@s?9%JUL9CF%~;VCByH^!{wXOE$R0UQiO?M(5vW zjnIiC(>o+D;ue4B4oPzHxM_7pi1}!7$23h){A!x!I0P2f21W!6tVbS5OBJ0<6D&&Q zwt*_1%hxmISt{Hw7nx(&s-<6StFplGwJSOo(Ihe_IU9*A9yrs75C!vXDdB6aWY*@AU+%bLom!rakD=s9f@lom_%g&UZ>DI$qYUU+OwHW?j zvia5T|Ltdw9i`b9+rx6(cu#qKs*lmL8tOW_k1(>p*-kdT9pH7P+cGMv;C_$-mI_p`MK{CAiuW?W!(y3Jbpzpz4)6c;%&1*ewgbC;SHC4~colv>u$J zWb_8yx~F!B=nKs|(%WbJ2HU*X;)wPOB7TQ|C;df^J$PFd`;LtNO(CmtM7!Zqxkn?G_T~(s*ivKoG*!XRXh81(c@QY`3k) zz8}OWXxO;@Y_zWF6`5LgY}F_;wv2oywQ5eHC6^-^CJ-FyWhm&f_m?W}C-6iIZ&sH) z7e!w;^#clbqM|BVPgbh<)hfm5o zvVTxBpHr2s+b-ZE7)gJ$eQarpQSCPdV2l_;$Ra7nNOjFfYdhT<))Q(W7G_=SpfYCm z{q1LT?(F7)&8t^%28RVstL;2~2hdE2oA=iSj|GZ&b28ZMJD;IsNAk!PD{kIB0qmjR zY_YtgVc_&F-Ua^W=kMRHMYC=Br@!Zi9_3F<=VC?hF-_*tEf1~HF`8bs)`8zgv&^Th zSN;Zgl5i8FHD!3x^ki4VJ`Qp&w@6r17TUr`tH+;Aw<|o=x!*>3B2R8us`yph+RLB!=#kFZu3pc6$G!UV{)x?Ax-!RvUoSL zhp;%PHuYp(ejTaIo`ShpmWj%SaV_skE;v_N6fjp&QPp@*%f|Krs957BaMNaF#F%{@%qBmPK=rn=qMQsK&a`RLcr|HwYt2-w&3T&h4pxAM{Hz^7nu9C^M7UEhCgrw#o zqe;gY(r%_Ktid%$6{$x}ZBqcRTFJ>FW|5WNKTV;DShWZZwn0s(^%aBioqj&WE1R@Y zRqLuDZ*(cwYKjIu8D>&l0nQd2lr)5ox??4oYY&#-X?Tku_J!q_KxxX!HwD%bn}-CZ zB0HA^27>6+5a0_|p|C{dTcJ2Jnk`=YxQ9uWOvjg*KXSc*Dur$%aqOqz3hRT#E+izJUz4@+F2o;U_z zkfTRPVj>|QJ391sOKMZpA+I>rq|>ZLMIGlH8hXT~leI-&JeC=TZqu4hk`L2tP}RnR zk63?1rxWL)>wXlLr_n>_c`HpP-9>&p0w1K|M}<5>H%R=-u$XtMSGyns(n_&dauOAv zM3!jgs+XchnA()9*QP|GZi+aRxJI;#bxCVi&7iJX_%?_^M_sj;7}m6EZs+gN*)HFr zV>jO%!r6qiYi*IjDd zJ?!;q`Ow>|>Ycww#J9{I9`_t`DEA3`IQJQJXylXjF5)NcUD*~n_xy9{^b`IrF{+?!Dm^-vZ0Qc>re_`b~i7U%hsd7tG?I{&6zSA6T5o$pDu{SBUGbICB~I0h)n z!m-FE1IM(>Fn>sY5LyqcN0c+O?Q z)2vm;050B-S)Pt5+9a4$1Z+Bi$s%=<)T{$01C_~0k0NUtt7AHwENe#k1gc4|mgUPS zr9-BcO?}*YM)i^FiL7H(hkh*+`xy3=_fgEbse59Z(w-4N;i`j34ETMLz8r3M!ryM` z(V!eQMF_4Hq1f8lu=$rZ?hr3Dug!MWGMx52_vIGcoFBOPW_yxDXXuiv)^7yCuv~Et z)+%(Q*~}b~m$uNVk{&cWu$m^f>M-Z)jh5jGR&VH=dNcO<*ziBr9eyDk^{c$%pB1h; zdE!@|LD%qor*_+>zL!Mjh<{rXb0@#UM{dpJ)bm0rkhvqQ&6*EhdhWy2x;yNtcQ>Q> z4_09<{`7e0r%mDKpWtCRPPOF(y~`t)D@SY=^?DGbFRPUVLF22#7X0n|&z@ZJTeTqM zkCRju763r#zu%Lyvv)Ccv9z~SGPN~yaQJ^@-v8MC;UDuqw4`n+YpbG+_T?ZDj49_s z%1(_a<)d?uBhZU#7qmc#76_nHNUbaia|DAs4+!TkJut2GmMg#D-w%*yzlSiRjb4@? zMKjNyzoB#bd7n8TB{rLlzQ>#7<+QBbXfOJmDqtKk?xRR%p7%J>LbOirZwO&G+ zPrZ35zN%hOB4DCqN2a81N=%>WkTWw?$lraDgTTr2sUPO;<5A>3Hp$-h44lY?0-r>I zQ#)$;3G7fKv0v76z9~*=N`vfPRi^tyOmwy2$R`W{3(VZsp6wL)7M4pr%S3|LDsc!z zR<(p7f`OoUjrqP4#7h($1t}f(N=8R-Uc~`qq?^|+IqS}4gJrc?Q;hCpNWooEjH}nd zMTW4IQVvv3x$UiY)(lLJQlp}Z4|8tT-5lRoQrkr1&>WDp|C1Vf#6j5PqLhENS5zkq zj~#L4N!_9-wUMOOTQU^zBkOX+)jdzuJU72EO_Z{5Awrp|--HACJaAn4S*5>s+0g)T~`S5sjJP(69DVQoCvgtzj}oR(fey z;hlg?c7+yJUMY&b_-so9&6J9+fUB!_QNP}nnAAEOj($Z!uiPZDKy$`2a}dq<-Eh~t z@Yfko*~IZGZ8FV552lLbf&WNQ=}tIkEwjp%8U>#iOT_6l2-AlSg{@pIu96zMY1X) zH23o>L?Y|rA*Pg6|8Be@o(4!>ML==pt0~DV)D-7p`ORrwEu3{j$6$nY1S^lapU2z<2qBd;^a+P) zyQGXPlXpLhy@B6RYC&@f^9~Y0D*3wLA7~QIrV_DT?29RS{n(E#i3|M<6bIkR;<|8( z@UEfZ&2GbQ4!2$Q>>(m=`0RAog>oKP?KyYbf){M{MbMvsyQS0a6vsaz4uDffX-7W@ zyY7giI#o$#pGPu!IhK&g?+Ei;3C;7!Z^`mZPdlFu-5wTIbRwhBqmdqb3u7y9KhiPZ zL15pK=ebc{FgG7KLH8&-tdkRa_+XJOlS7s=-02dQ!2H7Q#uT<914nu7i#!tS_1xne_TVv_|*$hacE z*EDv!^c6=_pQky|_a2m)zNtJ5hAKxzL03Q%MGGAcvY|quq5@4WJOrYmI($v@uh{FjJL%EXODy2`|8m{+ z{hjlXb4T-g+u8YzAD$m9ANX5IBUcJOTnTt7|L7V4*Mv5y#ySgFv_42gv%X67~xT8RE|Enw7p^~AjgDAR?7A9uDQ#U5oL zR1YmL?}#0}>1pC2rJ^?umFR|1XbE%ITpTj$Cysu*c`~GfQ#82QLvmnJJxhQX%Yv^? zHz!|qjM>oaF3-t-`gUPB4yr^-ZZ*MqJ=mwWkmQt`WacQw_LyR~; z57T^*!&7;bo3``dNWaxog*8m|FjYeY6SR>fb0#Zo1E0CG{rzV2pEqXapCP!blcS#K zOO6&KT-k_n9Yj#%DF$OYH~CG86Dn+(E4z1(vq44_?g`N37wrSn!!S0@I8L#FupHVr zgTBr|CkXBZSIISaTGES}Sj@m@ghaQS!_Al^11>%)ALI0|@Dfhtv`{MxgDFr`QY^l` zuf^A)I`(?Un)V`>K^AUV;-(Y}D`0fP-orIt&4kkJe9jSFjMl)^EHY(khOwx>X;R=~ zOfCJ2)YZ85G;>gdl-Ee8YX%pl*_e-L9*=wz5#N!QoO4aDHQ4x&qK26@HytqP>W0fA3 zWWZ;;_wx||awhFDLQMxcu}iu5E%iuw?SV~(y&nFhq+471U@4Coy1(UUC=hOMyp4mY zvcBLHqZ_6kg`PC8rL(e#a!z?=(6#FHjShV5pQQw z&>U3k+Fqb}hMLJ^#q7j>kLjZ}c+Y9MKvT*(Qf+alFw1n;+R#twhHq%rR)P^f+yFLQ zCHTly+>#q)COoHUew9|;^fJ|BK1 z$%FTd3|sc(x$&&`$?yB}YM+=brVEHU*B`$MGO*cZe^ToDZ_J!x<{6?APpp{jwhLvl}!1Tvml}ua2oti^?sdT{!Bm*0&=7xFhmzTN&r+ zQ`1iTIqGK*rSZ9zMb2)7e#Gu_goo>l*alHk6(^yd0h|-TL0j%|cw1#=>f4ep56uIn zIVe@AUyD8WQUKx)&==MIWT^Y<(-|t8CpB?Uz#OA+uyyclqf7HaJVcgs*Yj6wfwV?lpdI6lxQImf6uzUe&m`4TJ zOC|VENJ2t6LMWihMt_=;76itCXoxO`jXwl=`?@pB>WEHTs0!V}o1paWz*>vg5w_M6 z4KI?cX|`?%nD!E}2?ba!BCd2$G*%G&VaTf^%T&{>I$JCnFV&ff?g-)AN{$IBGwKmR zo3f6UG$iP*$jR*+x&+#H#zuG5@RjT&|Su6I(d%>w4PUV+6bO{*IoTBoM8Ob-gqJ zUReOQ2X}Vk&Tz-g=+NtJYz{Z$&UM0OjI*r}v?HKy?Y}}19p^)4xXQb}wpi>72!eJ- zuj>aeYwu(Zit3)a9V4U&Hfix_2_1=y-BBX1j9woZWa`Y7A1oOyXvM;%kasObtHUbW zg*{8fkf|352+xQWTF5kIBzIA417&~cdUw~~Nm_SfZdb|cU6r?jG0thVFRETz@ImOW z+6p>)R?GgZy~7!qpydiA8uCWCVA5^gDZBsuePVD0(wG=%%8BU#`*fv6_Tjqh%PVKn zw=;5<(H`j7xe)mb)NB}o_C~QWalIi5U5Tly*Vh7yjVsO0gyTK&Y3~J1scqHf##N`; zD(gPaZ=_rn%ll1lX^TB3ejGYi-x~a9jVZ7S%K5R#4n=NN^%S7(WoEm%jRCb+0Gcn( z?6sEKfqHY}EO)dat1bs_PL5ok+ZD&`=gV;s%_P5L@YO!0w84?X`SqX=4TvTcZ~fG6 z|!L1?1w>aFRLi6Yz zCAhwazuKvLE+0C@cVnWuUJhjVa%8sEpGj$(=T`z>-`Ha75mA{4im)A4@1%OH>FTK+ ztg#h!Ybf^ZnbJRVzkZB6x)thzYjoq8u6d_mzICKAHmWruyfHJUbbHZ!$L%7D)kPeu zjWAXpZlDgbudhr&_QvfY8xvw@ye&BU)R|%1ZoLQCBYnh8QZ4P6G2-5mYc=cISGl+| zdTKNM;6G2bvTnjZykk~*rkRTxlBp3UdDoG%a^)a%;iy;%47Wk%VzA4aFMv&6HoCJ* z>P}rZQYnuwmcD#_#o0uvfaKAUc<}s-SCEOW5v?aey(e!NvU7;xL=lDo7;QBE;57c) zm{=7kdu`J@)kYP*4uVI|(-z0%sJ~!^rZpIwNd>08Owl1G1N%!sDK@fRqz7$(AYBXDMAPs#fJGBF;+uDp_~!DBk4EI4-^&yV~6at-I{$7p*=Q zXY>1U8mA@e4!d{Z0!isoha?xQ!%|A!(rD?71er(V6zK?MQ0DA}; z%v00Cc|)Jw*qDy!VYE($9#pGSc-VQq)u%O;<(yp;PpSQc1a>Qd2<^AdfX8m7kkYds zCF7c+Ae`^mxHP7h^f`eL2Hs@p-0|DfY6B$%9ZmWICM4LeihiN_^*iQF1_N~|C$UHH zx4M%BzzG=0Q#m7#GTIEZQf$ssB2?3Gng;sH#e8+WfXaFQ_45i^qOopO)FQ%%oqi*OR}>k*UmlEA~36t zF{DUQOx+u@v+M|m@fPhe>F9u6!mJ{ZHI}eU>H)f$a-uiaH_4qmUA9_S{o9&kP_gB( z>x3R&Mol`Vs}cien8(wj&m?6Xcst_;w3Xad6q_?==^vi?rz-;&^T}?T*ci_wb2rLb zIV|5A6@z=Saw;{uFtJp5WZCFE-*}JpygH^+mzoJp03zbR4=0g8qdZ3|*pZ$6Mpat# zaQ!g3B1D(Ve1e@(`fm)+)GnyEQHn)Q^{5M#t8zS>`UdeblYQLG3TB=PSXALqdi;4T z#50YDUWpE+rl@QvANl;+W?BDinD9}_h}D1_^>w;-rpR`Ans`-cpaGp>YjkasAE&-)a)hQ(f-xG-bAVm z)OO|8G*RsZYFVQ0B4li%xAr2VyRMOQy=k^H4n0o&F;I`vUWVoN8Z9oz4KOmkC} z;vy;G7e%ZePm{yM@8Qik5vkvxX;Edsp zJR{Y)qsZC3&h?j08NZ$XU1RwZq3oR#BWxWcnT*v@ZtaQ+Spl<(^P*5~D(FlH;WBT8 z$nDW0Q}NyNvg7C)8ibTG(eWQ%!Pf0w4fxCN9KDS68D~Oh|`(F@2n%;*80czsffRCCB~V73djt?2%Ot#+TT&%*j-m(vwX zjLVohKR9C1h4+hD@*mMTFC9y&h18>xUjf(~um)})+<5a2`T*wshzohdbM?;q{EUp} zE6>VM=DVkK`(m~-%Y8Xp%nBPZCb_wCU&x60e$#a!IilASR1%C_BN!c8tI>|l4;@8( zH`fzcYyS%^{UXftju;*P64a{+6qqwO7hl~B^e z>f-1x9Hbc9zOE7RZBp%u^hPiC-d>9k?gJy7Esr&XfD@RsP_z=WG_^7L{}iqM5&gqI(toH?wU$Q~MB!ahg1VyWv`7&`r2z8P+@qkF6xL%K zMyXD~aHS-sv2?$3TX^ICMD$w`AzT=)Bl}Bnl(SKyT`VB{x!A+(e3tEu@BHyG_d5@u z)-cv^ym75*^^%O9>+X-0T3u?BXq8Uuw3XZFen|@t{Z$H7+mHba`fqOOvLHoPoM@jQ zn9W>kb+#9GF5#aMewbiR;LNwXSjHAT=ILR~vkctZ`$D`|8q5KaLI^hiL)-VC-vi1E zVaQNG3Yc2iutk&c9LJ}*)e1hBSzJ3%El}m}241g<>0tcD3edI9m*BV`^BUhx(7KFZel?44s&RCh|{K35NB6 zx<=orQ5bYo=L4jux)D(k?-+C_wzb^b>WOtND^pmq;j14h8#uT&|?li;biWUUbOz@_wSj!*6UD%SCO|iF}Pj%R7~wePB|qQ zI6+fS?9U#!@aY9-3|e72MQvW&$;={`KpCf~S?CpS)-LgU?KiK##W31bv&TRm&~6#J z3%7CWlr!_7i=e~^yiZHdGd`AqQ*Xo-=B2fDMt~i;g2Gw&ORHI}Qe(3XA4h5)soK(9 zH~6$>sV+-`?68e)Y^nH=gw_3~Tw<8$+i}mTNP@1UHK=_vw5d zG7Tn=)I=4w&#%|{{)|u1hOd!8(x$D9ZyjQ|q!0$NerJ(ZfLJF4K{zwnpr?csUIX-Z=SmG7D7y%wT_4RPLh+$e%4+3HTlC+S7P^)9Z`Z0CwVIXhZ1217 zZWw!jugbmST<<;Kvuy8I@4KTv_ITVN0LmWt!1nEBzDgc1oPn$7Vf~kqe}_VVgxlG|GXTi`I|@gk)P}DU`DWndJl7B1#gSUn4Z0@ zePCt_%oNM{m-{L)H1l<{F<2TBY$Doa-NCmIhBdq#+;8sQsz?|zJf15n4@?k<&YH)o zs_HK+H#c^cR#++ST+IB6#yDPvC$NZm1rfes#xT(atK#}f7>6M*W|pYZS=DK3^xU{$ zg$Y~3@7O(+-2wF3Dz~wzuB)(6VAhp=!bWGUk`r6`j1omvoneh$4p3a1*I}N!?zFnX zranwsy2QplrCitDX>V`jliS&;_b@E^li1bZBq*!;S@X>CCpGGQWF6mj$Wn({No~9- z`Yoz2A&h6lu+2o`MJI@Og%L%%vPxA&o!P(@OKYC$nvJ%Wq#kx4H2MniTA;qOHnd+3 z1bu~u1mUHSb$ObYL8@*B-I*QA0Wt85X&#;Wji+!)L3ZB^tXmOAFCbW&)B_Q2HCu3A zEd;FKmsMt8#&C3Oqdm$ylfgKENEc^=2FV0 zR1&upgjn#o2-8)3^C^KCSpnP<00u32`KycpYaYP7Jph zhKCe6)`1aN%ODaOZAb}B6d3-BiyQdn?`&x~KUVq1I@WnC*ieCrMl2V7g36rB02Bwb zE7}bN(d}Z?7S_U2(R z_X(T10KABH16&cJ6 zCPE$Da2re%d}vv!kzXo0GQkcnguyaOw1WZB`$p(G5NQ&MYFS?F`%Hh1!;447m_DiJ zl}i{IHQaTsID+()GB#qM>l$j)QIyezs^I=`TgsNFHzpQiDDtySeIe=yOLw3lUoB9U z4!)%0tSXxqXgRA-IEF%Xsp6-}!mTy{@`qvTIsk8rK&=bu>;+X&BiX?JS=goY06#nc zA~kH*N*BN4NEHAFWt>og8JL3e3tFqsX+Zj(DastMM^C!W98RX{ z2Ihm&;v3Admav{P#zzgT2$8d6Hehd{itdfJyL6@lKp+b`IVgO;=pBS4XdU0;5+gl-KBA3F5W>ui+-pWl70U$1lqeryzCb>wUwyENPSPCfry+gB?kaU$2h2WHF6!7Y zF0GO`vfsT0Au6BpZ$T=bCj?!UFyY+5f8&w=qRO{6KA+$Je$!sa$+^E1)KRmG0?WR? zApm7}-LK4!;XJS;{~U#+=aRe)bsLP|f+vhkh65~$CeIr)$i_{jg3(p#@RM0jkdj8}psod`X3^s*QZJ?1F=Dj&D7UW!rd@WB_idVUE z9mW`G9=%<4z&663WP;eLZ`VFNl?MS$CHKkwm2V}BLSl&+g9|7rFmHt>`Xfzh_uyG^ zK8o%d5{zma!46u7M?GpR99T8V_$dQK6n=|q05&SN;|K*rvuJQJ_HSqe!y0yg{8B!D zpfm-xrj$Qm-o}o?st##Cnhr-^)=`YXj3=+eR|}I63WRlvmko=vd__Ug)V6OMC{-ez z+=v9jCI+I)3X@k0XUDom;e1k=mh|&#i(Iv-$8_=_GeT8D$VQj)J0pOnn16p`3(Bs& zrJx*aAzMdISb|j}trU6Oj~UpCQGp`EIwakzZTg9z=c{sV@v%*46q8}7jWiWSJco-^61&si&jUT9=r-fBWNFid;0kl;ug``K=wp-g|aB6YI%WH zkv!BetP8CQAlSj^2z9NThk98D7}%$IrUq-B@>x4?3Dv@dwSE6ThlIMEMy+kI*3~UX)KVT#cHq zi_&ci=*OU;BN}4_Xnid-Bw6~q=mc)n%3!5(sBK_h+YDU>e9e#0mGSDkrSOLkQIwjZ z)?GllqjGPgH1FQt3Y61M%pOM&hNAttw0b2To~{*?L=_*3xaM-1wa}1bUWe7VIyl0| zzE*O>v^*h0?}{gqw|q3hcSXFpuqDkHots*h$6&$trvLW6wuat1HPYUwX$L?8&y-}L z5tcOdFwU3lbntxq%<)-Dr8M5x1v8O8w*z(}X*K0L zAn%07NYqG@um|I&Is3u^RQ7$dlPgj18DV2bgp(Lh4?V>!@|q%XBn}^$Py?!e!SUFMuYt)ic9gV@(&D|zdDo!bVy};75dZ4rGR4yo$zKseoXPB5Y&SplA+{86!B8?&1)L^gAqFZ1fwx5;;F5n zl2!-DjEvc-o8yuT0AE;~DEK}(#jyg4{`i)6+8CV0TH%VVaYQ*A_58{1( zt7(I|1O#mD8aXm{^gO*P=ZYxpF1Yw^i3!#xww?4~4W2W@_Uu+uD&p6ZWXB&~n@S!( zQi;mg3nF_a=2Ou!w5KfNKfREp_^4rLXo|o(=CGDdESDNRqVMd3ZFCM}d?N7kcxztc zB*CGofi=|I zTMM{lU=|<-2#yQQn6zEqF&Hq$ehe=h=K9DE=>V}g4aGLrinkKCa8qXmPW6Ui1y0>I z*UFKcWD{rwt<2tV8S-$@-hqOP>t2E6QIVuVvcr%=P?Bi+Q168>xSBuIE~w zsq6JEFVqeDHW%vzZI_Mk>vO`rirjkRo#AxXqh49c$NsoS{((NAp=rm?M-+G4ABQIZ z#aT!5a+dpzDl@(GTR4dwY|80P&H+CJb?S9!L;kuz{m%{%CgudR1rdGWroIqr@ATb3 z0x~I*24vN6jVR%pAuAG5#QG5s5g03A3sLdWH>^XL(Xrlee2{GidmqD`VkiEp2fPq? zBK&P|%kH4>{K?GHZ^8Afv-9v>-+Dm+{&ny(cn5YQrH8w%c(6D^_q+V^zcHiFbXddQ z<>P%2a^})hWMwDy8N-wWhZ)cj9;+ZM@(xlzx(9^8twImIKwq!ai=1?QtYGN}_dkB^ zP632zKgHnZ!Z{Gfx@17Qu5X(R1>45+m;yQwRKN@xXs8VAC`TKZsn!VN>WKx7q@o5gabv?OrEQJ% zFt!rtbG3HZw7WuUixE?Fz5-3rUE#PP+?UO2puGaz_#^6jwB)h<+EQtbtB+UWJ-eiV z0uxpnkm7ouaRX2Wm@OeTB?h&a@@xzxH;OCDpsrBPvV66>z?^X+;j9bgV)977fT0fx z7hV%2i2^}3EdrKfkQOB|edzUWoZX!JM~lR;6;_W&;KFOZz(X_d^ zfg$-p;7E!|8j5YQDBXJPf^yM|cps+jKiY(m;uV!*N6O*@~*d6i{TL0 zF*yhz=WC1rya=ln9NaSKunKmxfkk1CTZ&EKl@wVqKAaa13T{@z9%_xiZBOYoE9^#r zkoM~?yiX;T$ZoqRtpB5wf@xIW_yEM**I-DJ-Ki0dry5+Wi9*KYiZ(krBRiRp93M)K zjDWl@BBBMFPbr&5)r@o7U1M<(RFmo1FYnhId+==+E674Y9<;k|6(cCqlj#&EjTVLTeHBV&W780=$e>BgCyY;!nEGYu7|=|ecwOk+yZ zjM$pFzgW@hs}xezi)iWst=w=|o7RSqUX6c3g$FsW%{bC_fXhoWuBy9aJV+tz*WDZB9bjNu3SHt3@DdKq6HVJ}IgFGEZGm-wslpQ`=@S(knHw49(iWp8M=UmyAAFLv8nd(7 zDk!+6vvkw@fSsTz+|X0UG+rw;(=5^t_$V+W1QrYYz%{Q`N#3!*+SLt#K6*4^j`IiI z%C&~f8xM>*iMmY{J8hgP4F9#9h#YyymSF!AHR|INjFNRix^rwSiD^tey#6-K>I0q8{t75O&a@U^ z!qR`v4IKJ{cbpwnG6A$>W1E>2p#PtCy!Ui4tYYw!_ymW1w7Cxe2hjZUDBX4<+{6?-l78UI4br z1d~EmWX^@E=m83Ql1kNLkv(Beu^C5A45Ewx2_9$R+&J{>rDh>jD_OgGOS+k#;$JXz z1KyM@G|II}4%b8w2s!7-Ql%Cj^^%UxzNW&7WeCFmVR{ZfF}O!fwMeuplx6pnSMO$S zeWbv_FSunp=5TWIV%PdKtW_SkWB?xxafH0Y_V@X`%gV}hwmZ$Zk~1-bat z`S8*eRTs-6**LOk9`i&z?0&=G_$pn>Ba)K#Q4cvLWqYd?y6f3Q;?gOVuayfjt$fzeWEp96l3iab+&7o0yL)u&N)T0h{V>G^FxJ~%mli03IJ#%SK4 z&J#<_>0D46Ke*{9L-w#gVAqlaoS(MQA-ts_bF5YAUL$q$ z%6w{WXXH#D>dQ;uXlA-(O?1qS9qVSQ8@7zD?%|uz>K{_>LZG$-&s`FM_m-(ob{I-j z;4w;!4)8F%<8(TwSLSKShjn>7-FZ7ill=Iv_R<_g`+0%E{&1L|dF2E2^-6C@qfd49 zLT^}=Z|rD#RkC_jj@ra6YBRS417;oP!VDu-^0v59aE()GH|FXd>#B@yw41Xncy7FZ zMUOh!M(wt1Qhmv9e;tBR$=hgkTSZ5H=g1L(bxiRf`ZEVcu{uEpbP%}bJV`!#Z^Z6+ zZ}7f#q5JVdD3?+s{ZUtqOmI_#yWaVNRKJ*p{t#J{Nrcg?&Oe9*re z)3Dz2QD~tC(hzZ4(t3hsB6_ab*F9bv_Y94%P3sJg3}BJri+<+t)h#{1SH8L0Ukqb- z6Cb<@a09cq$yzu>8>Y5`{7C#2ifDz4v;)Q5$*^`b=ZkAXNH?i8YHPxpTGZ~X0U<1` z73|Lh%39F|wa}}VIt$db!OyG_+a;n0PcnJLw1TxN0e^i#J}M%VWz8cYb8UqHku6&a zsql=Ac!wg@!KG0h)CseWd&cyRE2b*e4wgR=c!T$R%|V8Cxh0H*W}8j>r1g~T)+sCy z$>!43f6GE-Y^v@r*S03BS&~ItUVpFahk|xnH!kJRpHR469$CM2Adnv-dQQST5p#5UBy@#pJZR+} z2%WjvBBaH(y9iFUd5cWH584UI8V<=C2?2L>xpMP#i-+Z2=>FRZ9^RTE{5z_^;g1utzp-AJM1V|!K3I{$aeLazZJ?7ad3NzjLCGFC?Itk73SJ28 z=1{%n7O1*K*MXERyiVOs=vK4%zMCyRPw~qT-3>r@DQ*bA6@Msui|~EzD@b=8FDSm1 z{1Evj^L@rEjZXn?n7=i@c|PwP&L(|^vUdXPg5QXk6@3%Y4XRq<*Jii;7U)j)L=S%! z0y_m8p!E zmk5rqKGv&=TvSD`Pbk}!4`)Tv-iV7W?bp>2gX}d$5%wg~%QP9ZuaXu8u@ckw#HYW# zx6^e?(bcPT6A5V_IP+j{`vSE;mJe;hBDW&AvE9jsJl5fk)FU4B$NDWuhStr471#P} zuEzS)?QY|d8Fushk2Q01V=%r+eYt-+sO~Eh4A6vc;R)t_)yM686@#7wfv|od>}q0E!Lba zN1XpCcwUZ#KOBr(0>UUhMfBNB;FJGdym*u?L+0uX!a12*nYs^$xeb7cg23Yo0t({D z_a4GN0$p-_SUcc$0q;KHW}z){pw@}4%1FJOk{$S6%ITcbQPJLNY1v^J*W_N>^{C_N z#gAVj>wMPftnAib&yz;KrW=+7p}a(DC-T)B!BNpM%fmZ|dUSMr+>E; zmfMRQ=JgbVK~FhiUQzXk1O6rgJN(gi6MVXjLX=hs2^TLXhj*AnlFcDHe9g0ymWFkt zJS|Dw!%~$U|L&Ay>X`jJsJ+XRGYWr?jQMyV;32@gWq@M^7A?O6KJ=`F@yj8S4|4K( z!l954RBmO;FqIFL>KVB}jUN*0*|J`QA9Hq9J}|(KD&*zDfv*+)iunM{7j3(AF0AW? z^FDwN-R%nXo+I{4rY`L48OuYlE>!)+^Pa5r?!vX5TLVDAtGAZ-E9J)$h{Kp(OP0(y8!B^|Wy>={rTN;4TVw8v3fL}HUjkl6s= zNgYi8DPuf3w)K-UFEk#Q*15H#BCATybmSM#4wm_laO;+sFQmzpG;NC{&x`XrpRyq| zkz42EQ@IDEyDZ6<+VFmrhzo9f5jbt0wZ<%kX9-j`o?c0%M%HUgs96A?XPc|8N^V?=MFtc3B@JHcZX zZKAkME=YKHIp5p1R5mz(7V0zPL2?!dXg>4_*^vvtx&Z8d%iVW)qD1S3e+*0>`=h_IG?@Yfu831vC1D6HkMWDY2^ne9`E_sH^w?as=Q-Iv*d z_%S_tMAh{B$HUCb+00Liur%2$WSbXi7Fz+mr{_~^htF)84AdG9ZwLv*=qEc6-h*zS39M&3?*fp;PY{pr(OjS6d6 zigIYeT*RSKI8uY=8gNQE)HDVoPNt;%Lf3yGxRk8_LUc)y(6(d<)Tgx~A^%RG40Rv2 zkukvo`}*t@UyseM6ZMV@cLdzddirH?_rxFz0Pm4b7ZA=fO&Ac)OCt)<#rp{c*u8(i zkJe8D-v`;VkNDaczDE?0#^X~3p!amI4SJ6a-=_=E_w+NM^L`SKPzFh`ghN+1=$by* zMkA1j6B>9;N+!rp$B!B<8jyy2YXLE+9%c2=0zDhpFruG}1O8hNs)u4aXOIO0EzNTM z)bSlCGWh8K%p?0J@Dc>jsgiR)CIA3fkozB4%_Z%eU7TEv|9Q>-Ydy(7wtx7?{0}2O z;2tWXYu}vC(up&&z(UgTAPNMKvYmj0B!EDH0U=27jU-w1iPvE!!VL1`ONPqI#FF^_89KDt#T1udKmk7Cz2&AAW@p}}A#X6UkYG+2nx3oQSJT7)`N z>1IH9;kS+5bYT_9a%V}Mxn^wm#Q-V(Brdm2b%jiVi3l|VV_-l$=+wxa$jNJ#0WDAf z86gr)>GWPZnY*$I4Y}PsSzkdImI6M+?+0*L2)vg2W~l4kQaPu_J#zZiZf}g#O7VR{ zScK#^C-tzo2@tUeD)=sKhwLnfZQP%d7Y(a~z=8gRE-!EioD8XCr`Ul^3rA#5>>+f9 zFI%Lo`N8x&dr-q#jI&7iI4hB}x;73AXL-+qP}nwt3sOZQHhO+qP}nxXtN*cK2asUS{KDR%KOWMxA=7 z%sLSn-?yL4ln3m)7{8OGX$$timYomn`GE2z}Fz=(|;#GDw!gT;kSpLrW^MMWH#R5 zVf8F4U>^9vQRW{$1)i1P3Loui#X8}EwO46io228+GVS9Edc7R#+0&adN+!L0YPtir#j-C0jUJJt zN|-j8l+-vu7Qs4YsGB_~ckz7V1}`+A$A!yI<9l2Wp3GFWiHGi`p0#nET1)lN_B5jE zkPr4L%m50y8vM>Jy6Xpk(dshdVZ0<99%4}D23W;9M1ld0_!d<04sBShF;TctJwg zXY|gtwCSluN5=aq%oA$H>K@VWx#RUx+Km(u5k2e?S5*wpik5*2J(R7b)QRw+)6f}ib6I_&CJF2I@!hfbgOwbo=XUQ%KbA30P}|EbD(wp6Q|V1!_>W~vz%OG z(At=_`PO@OO#L}C`VtDtwWxDkX|K5UCe_0sCN+2^j~Sy#{|$rztI=ck82tBw+6AKw zN-1CT_K0)(At~x%Mfp!+bHVnqdw)g}R1{e+TPi*Hc)Ad)Gn&-opT8S%v`(M>O(~N) z>Bv_LV3uJd4OGCeM;hoO@&ydbmn5@g4yqH7N$e2QgRcVPhS{S1Wy6WASg-+?KH@SW z#n>j$n`a5PSr?RO?-e(St1!4hw2G5`!bkonnPKm^89^qBbJ`FS-e9Cs0?-8Hg_tzO z_##kcqEr-SG@0_zlf`>bnh-aNY}Z&d7+@`l11~9YuPL;_7{8}A1t=~J!5vF9imnD# zah6UA{nw2X<;GH!7bL;b^$!)rG;>JzTkqny1*hgItuvOoUKAq*fS#I;i9Rchnf-Eu z^3sy7tv-K6=CA|6@Ge}6=|n}z{3Zt*tsoQqX;~>++iNsv^yr1fU+{dzpF{S7FKV z3^YZ_T*V8Ag^(M`a);?Md$slor3O*hOWbhei=zdCc?KjhPBR8sMf`wVJw>`DmQ5-b z(A;)mqB-~a9S>2$;me>no@`Wa44j?0Vbd8QPb+uWX>ANxWU2Utp0$k*;FGs8@>LEy zPTzU@qb;UsjbrK)Q~oN1&eTT9J%~bMtg~TBaE~}uDeW=x()fPDx($C`IJAOAfZEor zW8%T-qVWt$=w`P=*sN$rY5vYM7}1Yp~dVL0ue)+|?$srwb_V;g&{;7O$Z)s}IFI~VPXJ`%T4ck3f<(LF{7 z`&@3=eTRD2!)@XWlN>9}H4#LnlzaLHAhie5q}YpLlSHbkjHP?9c^8%kViXF{+ok8oTiUVkRsAPAxG8ZacuDL5>k@1j&Q8foRH(65l}79w-#8IxOMN2TA7;JHn+|EGE2fs`hI%G`K5aO%l*(9pX_(Rqr-r zslZ1}?a0L7=BnH*C>^$po-Ck9x*{Xe!FZv^lf3sF!HVu+REJMtyFzk1RJKg}9KA-A zk06`UZUYqKheG};r&aPU_WABbdgbFCsbL5SR^AO0?BJb1??W7epm-S$Pf$K7egN9^ zBtJBAiVUmWsq}RHReGNWmwyM2Rf#@R@yR}>0N6cH*(L4sU-GH&3s0RapPTfAB|N}A6LKCEXXLs74h^#3HNm87U&lP^iv5Y)c^X9<-5OhS#FzK5DNisAD| zaPSj`@3jA?2#`(^%h!C5bKINeq2T>S>w5(QsrR^tU!zu2^SJnJ!mBBfbx5>p^9Q{x zp6<_|UN$?bSFu07%zH|2QI33zL!p`zDjLVXoawa5<4URu!HO#{?t`N!Fw;1Rt}^>) zRi7xeWWy5}m4TVyyIhK9m7J4Ga`7VH`YhNiglt^3Jt4mLRw-;o%z@WaA;B8K?(1mQ zqv&$xB3#S-;Bt^EC5uH1M`2#ehtznq3tytA+e7J2Q;voJtQdy|%v72DLKiR!z>boU!@{vXm6BEs+}Kqz##jp< zSK@_t{~HIiq6H3tKhUKZz2Ss4NpIp|Kt>YElt9520L)UBd*ZvG4Ca7lYkt-tXFPH0 zP0$%Vb1;dAoBi#EMOh%Q<_0}t3xL+rvNor<5g?C7gK_WQM08Zi_YD|A>cH3j-E>3D+WYOFbdZ zuL|=ad;#VyaF@dsfE1Jn8`&mbRlDF{h$cxSNh$Ly3oA=23ou8T0nRHHc!uK=dL)^F z&;KnT61GM57JmYr_YLy_o-5;{2`PhApj6;ga4ql=b{8%TBSlI^oW}3)H)ELB5w<*P zYmyO`LssC!jF$TFJ0qTd74}ugHY3E0^x>FK77nUDMUMaGoDP?LzbxwgJxKkeUdy)3 zjiYj|3zBJ_6&3m%+3v+%KN%7n$Ak$0-oKf-4M`f*|j3F$=f-GPaB>Ao6_hFVqzm@hrEHc$?==@ii`y~*Fb!*DE zXjqV&T{4Qo_Yr|R?DGQ2Bl&g3&a>s?l7xHg^Fqnf<>L~EtK!q5R-trg%2mWU#6!7E za6?cIXa73k(fDOmUM02#q!HVu(SU3Jr(p-yN0s^#QH}Vw;$I@BQe93zH%kAiX@Aw$ z#ykg_V;<0-Rryt7+DTQdeX*xTJO@50&o(cIuD=~}Cp?C{e}}zxRJm5-=_Wmgd8$s> zydEkkif)-ubS}oeN@3W$O07Ha?NAyIZ4(<)eX7$K549ItCF7C(stVhsQC8mV>!@K+ zf~7UakU@EW)(cqvC>jf>S`tGyXoBFSYrxJ-1o(w0HQ-nDlXG`>Q}S|4Dmg&XC;5}8yu9T$odO306%5dEjs{I2mtk|n& z0*NjJ-86K7YRg>vEH9wkbaX&%D=znFoO!TS#`Tv*_jsJKx@vEN3@>omYiF@eaampsh)Kz`LyY^iehQ)m6H{bzUm0 z39;3s?x1^KPSY#dMteU|-C1-qy)1Sbr0k%9pM5ci;RUq6(_#$G)|EK`AqwhT9FaHMrUAy_+VaYyHc*JlKpj#OE<}dVOQgZ+F zfgK<}2F??{rqoiRStEN20Jk+}w%m@2aA-JrW-&l*y0_Qzqi(j+N+@u?dp_mP4!CHmzjlVtumo4{_3=(%!H&J#_2f zvp54vuK#cw^v%$A9d>TuhaLP@tfxNmO(0DhUd|A((F@wX2Di8gpR@@dkl3BE8?vr{ z;TxuxU+o~@z04cTE?j!dZ1wruRz}S1KCC0>nY>lb>|eIna1o5o{q6k+W|kr5W55FD zMz7+3*ajJH{Ft?* z{Jx(M4)=!WQMm*3pD?0(66m425rD-Kpw)nXG=M1sV)qO&{lJ3nAhVJGB=|t(rVDu{ zZkRt|(};lzg|{H{2rVsOV`dZO`D%)WnpgnzJPC!2`y7TUCw{f!VP;Y@Cf1^4&w3QF*jU;eRjL;Cmw1zcj&O#JA*m@nJ z2>9@4Pu}@~;7gw@3wAHdO>IH;F~7SMHA_hHqj#klnit4yl38-;x7|!Y`sQS74b3To zhMwC;J+l+@9#3;gZ})OoG>QcHJP)1e2Lj67))T0o^6RL^s0m>=P!ZSTByNN->o3TI zjSRs?1s>F(jxxHZ_b2HiUO_0S7p2c;39(oKF=;TNPbGnDgh>%IgL)@LvA7$cN^wI{GNSr z&$<`MJIh4^&!-7xG{V&u8>#YTL6v-x!~~m2l%M|&*F~?^kAd}`NaqZ;Uld))| z%Q<+R9SyTAA3*mi|Krow9GBnWLE);<6)v{!5<=~EaH8&BGuA;;be#BdX$@o#)&8xx zVh0$~!osVeIlwj{!Fx>5qRjpiKnnE!2k}#ypd3JD&>aAzcgY-DA11+;FwV{jyp8&&TN02*X!+5ib)SK_X59|Y1) zGg!fR+T0AhhQnUHxx>-xTRw7YSdyMTfSN*qF5nG>$3(=K6TR-2Lwp-+MApDxw zTL29{o(_cRI^n})<~SLeA$KQe;#&1u#C8bI8q!1eW<6dfFnGOjGp=7CO)qBDtJ1^> zkDd-Ah%|7l`~8aKI8}{UR5_92o1C~ z8i|gSeFyj$<`d}$h^aU+-DUY&k0{+-37zRn&jtlCX>^>r@(;+WgPa0bnB-=-XA;0o zHS{OBaKk7_9RXEF-&n7zWk3`Yu;Aho(NPkJ@X3yp?6?LLqBGsqI<5S=O_<@V0P>5M zc$t|6#WwR9`DbQ_37yZQqkp}G6)-WWh)saoj(-lb$P+6*h0iybSr!W4tQR6)E(*US zz$O{VR46PrY`QD$8>K)G(gf)*6u>FPdPE8Mnt)xMP|=>gCXZMilP6@23EiOl3uTmk zZ74a4Ko6zaC4UoCGBqxJC<%k{gS6% z-K#kyULe&PpAe_DrSk@=ZAnt5>jp+gS~e{s*Y%DETh9)gJHss}K|4XuJp%jL{fUQC z@Y#x#kaFIH*sM}MgD&b7Q^aYmkfRIIMk8H5)(7X%WQUf8(`fq}97VnY&{xg5@%CA_ z@|h^p{`Hy*8!lGd#B;c;bgc%V?Hh+KdOiEp(`RH;)OVe#b?>HYVJosOOY<(E0CR4fd(_m$c&` z4F&jlu zbAs(y8|1J2V#Xv+YB#~(6Bg)2Ti}DqEcCJ((22<({nb^0lE(t~3}=GIz|;z?15n1u zRVuh4p~*CNZ3m%#59n7axS>Q7s%}E=Krs|@1EUj4chL{bSqd%v8pd1&4ZwxT*=zjn zV3`!NA=)r3XuFO;GoYrKZHp!@&b`fz&#bPj_IFZ#$*i4ieO~3UNz> z=`IDXF<>8naShc%-e-CsbOs4+nT5XD3UaH!8?@SmWnLl7A{@LvN848T3yLL0I z=-5U%|6XlB^O|oz$FSUb96yux-h7qYxZdx{BMa7e7FORBRA26xU3Rc>x@}MTs^O3Z zZdqgsRQygSGF4HSeQIS#Dm+VuDRv45Y`|ic@#Gb6FbPMZNd14M9P|*c z4ft@EXKsAe7Zkzc%O>W>C*eV5k>rg)N3p=d`{bqbja!!d#WXA<+yX!lr8~;kujVAK zp#7);I6s{eU2%z9TqRV{l!ed8+@&7n#(-jLSg|eAob_Nx?DDe{+>{1*hCt+Bp3)^c zLO{lK!Z0+ox^P4^8MG`uv@G#3X|Ou|vLgBaQ=SP?xjoHMxlJ|V^uuymP_twsQW8O_ z#(vYMn-ZwiMNq50ZK=n6=M`f?6&P4HaYh0jCF((q`h$)7GbQSWf3Q%GdU1O}pc#u- z0yO_K&=rcJBY>(cfvPPMQ9}w{LjYa#RZCr_*>4bF-p^h>+E_ID&tlB1K3#bY$)Ip< z4Cjh*=7NzHo#w4}?wXbNA1D&4LTl!B(>;%6@4bdDet3NkKa!!hKQZYWDAIQ=|Jt<# zWE~k#UjZ<6iB0P4;@HbdBUv}X32^#0br0HClnCS@m=v@W9CW9D- zzBr1A1q{+SNa;czMY9tcFI)!e;l#rd4${z&j6(80QuNC|B-NsKf=po2JlzWtxx7tG z3N4JBY}CkP9BpG-rVQHdt}2jBn1UYOo5m_o*|0+tK{HKC%VHX@v}27GkHAXRLZ;>a zF10&nBp$$(kDG5ZyNz4}o=-`}NTi{(#3p~*dgtidlbK@F#OdEJWtK6@=9;L{nTF*` z84rz^OwVPpz_>2uEYAGQ`Gq&vY!Vy-X`}nYqcOZ$4nGo7hZBZbU^p_!b+xBSGC-xk z>6~^~>{vXXyh9>ge=Krm@`W|S)GKr+8JdgMf&>d-%0FY@ZcN+RTRSKhPRbON({lJI zB}Rb_6_$-MhA?g>H>ZngIt%BIuHCUF)%DZcc3J7jE;1c7>0k~+DKky&PAqavu7J5E zvjdyAN~@gQRM69w!j-R6voS7hn7cn!Dcz~*CEL|y5L~7GONDW?kRsg(GRfa0G~}QS zS8QHI+D>{nbtz$q;H*ky0RL0Kq{g5u6RZGvS-6J3(T;E$DT4#kDCS?M(EOo|+RhnK zG?x)8nctiqlP`K!?_jQg!Wn`l0TcrL90u8MlU{Kq9_oMdc=RI_VznwR@{-|_}u^`t27;Pkpukz{%bdd z>G2ZL#$Fg7pyfdVgOp|`mx>ZJW?0V+J58*|?~Q`l`rZ@{*kS{TCK^+V38cT|?@RRM zZx^(}OPyz0ppG;;Bu%1`R3lPG7<~%p!uA>Dxfi6!7c@L!Pi<`mqYTD7vM|xd zur##G{}1BAWq4QUfJfUM+nOx6tDAw|?VYSxAL3fl3xY**km6k(Ti6K%%LQk2guqHs zG_J__6rn@iu&7H1LuAHb#2zCulq_2+ko$o;RQOTPWPVk1NOFI zmqD15=nB3|{H0Z~+Gt6SPKDb~NLekLHvFs*^ot%LK$0PCtfQO5Uu$b7Ecq;cRwtbH zpFPo+RudaSWCTX$EtvDL7?s`(gsS{^YH}^MXrbUL{R+0ockJ8BqEBWMu#>KoNQDM_ zls6sWSj@uUfnnRSr)mskHnI6G_7D2wVa^UT#0b}+Ag9~=Y)E171I-`|<*sg8|M!Tr z3nnzh0kjt{^}|1fYv{Zcv;nBxph<6mrndqc2^6UO3;;681GIjWguj=l0quI7(^9!H znP{J=3#bW?$zFZs@A_Lp*~LDqy|ID32j)8|1isqwiPWQr@=oy8VTa-68$|fl2#+thxW&D*Kg z{ZaMM3lf_(x|XG_q#c?_IxXNL0e$K%&fSPJCEVnw(l|t3J1uuHb$SioORvR+_3zF5 zJL^=3=SMd1T>+3pq}+GV5z|$A^N?%wTqttIgZEC%SuvysxYBt?h(ZC2)3Wt;U7fs` zyYXu|&DPHBJAWFL8Z(i@uf3P@wC~E{O`r1wW=4~Dzj~nl1f9?6)}3kr-`unOOlDiP}yRU(@*S5aTfcSqqi*}kCjVWLK0n8(WfO* z#SZ76kOaCq{LDt@TFfXjWQj8cr#a-BN)qSYTo>=7tT4HlTdN^>`QysqzItse^*MQu zL!nFOf7<^!n|Q*TKy+=pc!*GE71)xh%}yukgJn`r4OsD+960rxw~xzHo4AG=R-fB# z{B5T)c;yUd6O&iIzT#YswEzLVd0HViUj0Mwx#eZ@N&0m35%kAHx|N}2UwlYah}F@UGE-Xxywe{z^)u^KjouH(|?%%QCW~&`%7MW;tJulmGO6f26?5?}2eW zkdzOV$Sfa8$vcYh(M2)F+?l<3xo_m354BQFqFsYSbshcmzAlB`^HrT4!Ns#Z%OLVi z^g<`slDXx(hetCtNGYncl#-$7XyjZKXU!jVg#*b3x`ca${JOMv<@V`$HWX_gt3J_RG-*`hYv;SJY;`Op zXi%ouXhu}leMUS^yY@Whgs@Ub&+=Eod2&dqt>&2_{vM`;qfUDR5t=ejg(Ly5Eovl+M&i{ZK2@5BNa zX*CgL#ad`%NeDN`b#usAfkk8Y6hI4o9AdK`_wE(B^ZjdZN5f$MEo6&x8xPc4D=ZAG z{=v@~!E5a4V8Pp7CZK5qenSSm=PSNlizi7Z3&kD*WZbx?g`VY{4R!xE+nJ+qif+v5 z#~8>xf9ES@W7G;}o-$%RV1%yMic)6=HaVB0_bci@E zEMRKxqauZgJ+mbP5BB^kF6aH%y|~MgRu|=)8zvNAIw*3oXDY$&Il{q z{Rw0Q4g-DFA{47jUV{xU?$aEzne4b*-k8Lb7KXrSP)aO zqX=ar5~GXoXUCva-N|ubBuE6(W<$-^#GXIY6kbKRw&>L9w54UdrJ8RMf9WQVm;;5n zI7g#5Ql{n(Yotvc+Ad+Kh_x8CJ~^E@Z8Z%4;!#VvygtWKy@Cmxq|FG>jZz`qi?j25 zNO$W8pP+U`tNf|?MQ0OI;f}A7q=(Z{$?mKixZhT3pV^=~MaWrz z6q`BI5)x&SLX{|tAYoAph{!pO?(jV6Rf;S2DNlI>HAU%KkDU>1G-}7gX%I}sK5c&T zt2#QCRJ~{AYyeXwNmw5lOjwph4dwlOxAnko7mpoL`&yv3Y{u}-<#7}qhQh2A>!#%P zzmca+ky;xW_vjzzU`i=gbWub$G-e#H%(B8)3_Y0oaAQ|BzFdQ;ZHjj6WrO=@(xpvy z@g6RwDY6<^w>ms#>}MJE2grpOW$)j;D#cZc@=e45HpYegC_)B)cU~LNXcFceUSVC4 z6`?+N0c+7zKa<}?$8g+iA`bb-IgoSo4z%v3O_b|LB^YxI$)|F@e8QL-E$hfZP+pt- zmL?!%`;z`;c;Yv6$wHa+Y$>`G(mlVgs#3u1U|6{QM(|o%UmB`+P39r4n7>ohO_Xsa zb$othIo-YORBK23d?kC8(vu^*1EGTDEs;^HV`6tPCQ#yLG5|GP9^%eZr4!Q2GM^e% zhaA10)?eA2sbdBiA)il21Nfa2lt|!!V~z$yzM7g?^mUXOqr~pWlY8TjhWq{d>zk$N zD5=wjLk^b&Q$We?$3&?eo96_vd>vTkzV8R#!LNxsMCcK(%(1|`@C#IwCwk{hcU7l^~LJ0U70h{S$^ZCIVP?o^vOXi*J z%-W#{7VbgSSTu$fP7V0@@j_~GO!b1GMDfwuZ+14u5{B)|IfwVdvZ@F8omXJ*g6_FDMDpi7 zPgH|m@#xj1jom9=cj-bm{0;DzSS?P>frBO__iU1P_}yJ#FxDNX&48;N^p25)cdGFd&tWHxb~gk;S6|eloeGakx*T1w#=5V-gcu~? z4MVOM%i37>cLc}YX!O=?*!X7mpnGSkCzpHYs&Jn%`E$$r%YK!u&a7khcld4jIqZ#O ztCE`UYaO?`);TM#BOd*drE|JzBz2_&QSCVt$=_9en7wI-Ss#$(cihMafh<&VlXymK z4L;kF+-Rl``#BBy4!r7#XI0!)E)81mH&e2?96vJTGYrY?ed4-RjYAw%&!>;CGdp6f z5Bqw_Z~dGjykn{FRpcaYE9z;_fi?{9&!@*nAinb{$9HyKZ@m3P-nvnmFFdP>{n6?w zsl8o{#oR}3_t?{Mx-^2`0du$9vKK6qK3mA*UQ<#Z{yyG_Xu>t>_ttnqZ8Dpyc!R5C zq^-eS&*4DR;mFkCP_?00wqg|9$l%;Dkk6!EzEsBYxNt_H33sjxLS3R~i1Jalf9?r7 zohEj4mrhLg`=f7=Oph8DMdIhfxK#ta3bRP%=(wJlhClv4#Jdjb0l5dJ5fcx}tbr0= zsfqnXj2O}r<9meeS*Ww7HyuxOTo_qtf*KLw*+OoyX>XAy83akq;3EF^2tQ1IyH?l( zU^Ab$8w8&*y}h>MpR65_Zg^LNO&NgkXbPhA#9%8A+<0*Z--Ub&i+0|1Hwd`UU|XR> znS;Y%(t9({cN1RHiJ)l|(C&ejed`Wzn8(^xaUy2%q}qg$^Q5QxiPQq>DVVl2`7Km# z$oKP`!zVD~2L_=@3zuD<2VN9|!%d7~j>d%dtzn@?-O_}|tYsR*h@raoi*^$3DN;?V zcITEa;=NPna=A^AWnqz;b|FKPWf7pxmRVMFMLcW0=6^Z)x z;gP$8AYTA|1E!el#^@s zyRFkcV=PVG4eB7>GtI-20xqt&&k(J&5zpA%4*dOG2NP(-9CY%MHsZ=)lWsEHAahN%h!r%*s7Nd7E{M2TVIz~;$PO;_YN5ty3qPPn)n)-&r+|uc| ze=voI7B%XGww|de_qJqaiw}VxS6uPNo-n>cTtYSY%cT|wZrD{=4Pl#)a-Z`9+eV&_ z8&6$K+UINg!!86<5ku`%=}o#=CE{KsvDchFUpzYeu}Niq8JFcI=nSLjyid@MUOmR_ zB3eaKvl*g0CbgfOW)!fAFMrU096L2awJmi#cF`d6l-MRvo5)_EalJ2bX(c|!ZCB_a zZyoP`DD%?5P5mWLaOdBNs~zinQ2AHSeMXr$s-4JQ_@^X{JvOW??9i}UHi4Le&uS_G zrE+FALrVt7`Gv%aUMDiP^br)y{?iToR2=W0WVq?0(Qn}Dy)X#%D@sL8P{;LLL#7=1 z>DH|3Sjs;9J0FI(J>l)8>W0+vt=hC%ZD;S_%~X$6ch6r8q5{F7oHDsf4GUxYR&A{@BhPV` zG(4BLxWy)Tu}#Ag{4XgjSdo51mXrlQDxV=7PwJLYhT7L{o}xMl?+&y!$P1M8fDvmw zVEcMgWzG-q{~Fbpr0AAn`K1vK!2kdd{=bcCNZT6fTdC?hnClx@89OT3Iyn6w)WrYU z`%nI}{hwt2Qe-MG|59X{_`(o`Nb4~|f`Q0{1l5U3$06YN>9HpGRZY;l69Xrvvok^V zce7epR<<~oZ%{@oD~nW;L;eA2t}b)lwcMVw(9+Vfw*FAF?DgE8B#wi8Ue)#5dc5I! z-D>nQ#mN1dEer*i8t4Tv89J~wuBX|2l6MI0DW*<4BZnU5De8SJM) zE8*fb)T-kmrmrKnrUL5%LhkHx%N>_q=Ot5Xjk2y~nZ$buyP%q>$Lej3G;ikmJ9rqN;d> z>DfdJD%?L3^k0kw8iZpbJKQ(ZGRAz4u{Sin$As4Q>-#L|`*Gcg#+IIo^A88o7`43R z&+%)Nk)sUpU59=D^u;Lra} zduVfx2pMM=>C3Q!S9+OZp2&ePeX8O?HxPDHwOmHdcWX-|Wnd=y!l!RBY}*D({3*2z z69_rFC!jyQ|LA;t>4%l9j^CSgJ|Ypqr~-7eSGPHaeg)&$sFfii z23`{Kejp9%gc8hjGb3|Elqt3(LI=a1gV2!M+*|-^Yndan0W5k6< zAEgX$tBQ>kYYUyI9Ht5>jS+}5@CH33$Hads=wT>9of$=1Hk)FP0t%%x@-67_71cGE zsJekSyIQ{*WT%b4i3=UF6?KGDs9v>uF8mouY3jo4lKcj*-WaO*gUui@$uoxEhch~a z$tER=+F{0M>Ww^3DQN_PP0%d4s{^aDUev@qlbJo*04hWumS%0Ft^A+}1p}5A2^G;v zJYInB&>k4kWsqvALF*u2 z2a?SN6Z=$2TC6T~8NVqThFC=s`FK6zUm6HnSP{d$<#kk33u~K5Y}B{FzSc>kzLUg8 zUTlU#>H!vGJ+0%Rfi~gwl`%&o7#I0?GDNFL;CKzYxfUTt6q(8(mIy3q9#A%o6{kmC zcUsIW-g)tb8S}`&L>EGv#}YpqSmJf^c|?f)Eo4uTIoai6yMcIYf5zF!a+|2fq2>#h z>L0O$2AdB0s{F$?tr@QVKMhNUGb^I)`HOk@FW~0M%kk z`rvvqBh!2!g5!3JF0lZsL?vS<1hS zT_xkuAJN_55Sl7?+ir7f?qLM+u!GT|(a~b+(oui+MSJU6?5Z45y0G6k{AZP!n^N`c z4*lZw!T*uuW6iUWm2MR<$0VTQ4d|QSAKGk1X%WNZ7R?d`8gA4-3Rs9cigt2J_qT-A zPtY{#jf13IO4N&6F5dOi5nLJx&x8>dyu*nY!IIi~OO`NMgh=+OF?-0cYO(E~j!20v z`mEoLFD&^Tj#M^KBptFG_~{xY9n9+$<V4 zSoj5MF8>k~^+mhh6+CTsVuPODY!H-YmnF}g-W~$G-;`n6DCJFIE9S?TU-#WYFs=AF zHt0dWgY>T6F?{#cj5x}en^>&s>4~4h9%3-0Xti8QlUoW-^RTkM(5`o)1`%5HxlBl` zbO^IF**EW(&8%6?AJT~Sj`NcKOv||9V=f<34i|e>bFBPC`{xP9iL7n+mDN(zhYcGsGwDMxDY`MuqA3ka(7+7*SMnpo1CJKp6^8;5Y#-Or- z>AQRCEicJF6tCf%+uPIK_%ZSUlmD!{7wNg)X?K?ZF$Jw(xXkrnlRa=jX9hhSonDMhhZ5dKjMRY_a zO3H5Kskn+w4myjlxu@?ZmTt+9rTEp{ua{~D#))~#RNAPIGsGS{;I2bfFCWZ&E-I$u zG%zjCmeUIGKD;MDQdeoC-*y5ih#uVj*x}W#4?^FT62Qy1e<+OHd>03tpsTh>yz#2c z9}QD1R-91}#;Z8}56a#ty0U2N8VxJ9ZKq<}w(T9;wr$(CRTVp_*mlKsa#R0(I_KW6 zweRn3J?)3S9(J2+_A$nsy+1vSH&bIf2Qk$|{@BcysVWrA`2OJ#q^r<&5W%A?2+K8T z{7q)EupHG z+P6*pDcv!@Ke-))Bh5R#ibhvwMgO=F;!18BLay)Y%07&kfu==ZdGMz9phvNNJoe=C z*Qdifk9_;7>M7-RbKiwGK-_LvqwdUsr;{K~)!g^j$nN5aU0oG{e0(ah#^zKKJdSjg zi&IC@@|d|b^FmW{7Y{sO%(gnAincy8**JGGmiKHi*XVmdkJk~oE$N_Fv${{~_CQ3_ zA{u+tTX*^R#zWU4egeOP;aiu};tSc!&Xl;*4HytyI-$UPq0j{Qjg9ihth)b5aZhD^ zS%%!<{Pg$B4cP(D4#LnJ(-%UeZyN0GAM{88@{76l&bi$(K<*ZO@0Nv{iGSmD?3t+} z*pUT!qU0MadzR4PM9U7269wi&Qs#u3>@PE-<3o|Y?tt8Z3F)*75B7A0)C^^@bRc_p zMQdP;TZxx&R+@8cDU)=DHA-BN{Xs6t3vh;25?_h=8R@xZUR#{In+vD6^+`*`Z5kEP ztXjHm)qKwBGLl6bGn15qMq;O$*!wP9*y{3sU#{MiF&j~8ZbCNGH z9jcxV`K=0A>s+d6v&t(+P%nP*U*(0rs4Y~Yr&N)jlB$t4MO0_qPWNJGktfrcWES8b+v8}}@jD8x-m~?yLnghXej6r_y zoQBX{DUb;+R+7RbO&`P5$18p0WtZIXa(O!}tCCsNJsW>P~c5taFbb7@Y)?~XnSmVA+P>bHAs9dl*C?<=S%f4#$M)^M zESXgb#S&j!LS`cY3TzDu7azkSIp1^Y``UJVul{u}?$_fa zyXv}{qR`Lo0@^`;m+i;h{Qk!4cD1y3$e&dzI`OhP^puIu99U|xG-=B}6G}o}sy$V* zTCgTnuNs`b?xZT1TG1jVA=~24Ndg}Kda*zl#AHeqw`_Eq>TV~^yebgyc2-rr5=v7x zJdn9FS;mnQE%2Bum||DRICg;f2~B*5@+>XDLCtHk4{I4+G{lzTUF6ira;venu-Znq zwA!t#kQ)}-r7uZs?lJrv!DOJkd>E9H$BPyT>n7aulOS|sYjtN06PfK2^< zZQuw5fK2WWp#n}`FS5`nUCkMnOkek|31$dh9O8*?B2^(} zoquev^gk#a{kk%Dt_PkR#^tXacnD05&qLk#ZH=9o!Oqk#(cj##Lz-MA#IjLZEJB^ph6vc7?ji)xr2loyflQ><*X&> zr_dPF0+bY{siwDt`gy+9FsNsih2aaolrihVh1CZK2Jbz}rSRgyH6RA~*37!RJV0g*AmXd6py{qi}XL~BEvgdFZ zI{%U}lba;nc1ja&0|jKcQE=OyTtJWFJvGT9ia=NSG5H3W;a`b|lou7Q0xUl3TjQo{ zg+kLNtxy0r^Bf2Ereayr&lPIg%T$H2K&;9{jp2pp=uEmT*EUo*cWzfmJ~yd!eU=RM zs6uHGq%^{;PF^g3^3*P@Vt$rC{?JwKLPF~$NAspt*xN_EgWxdX0z{PI4}g5|FWayC@U3@ys$aGkBDuG(D)17 z?T;ZU?G*v%ucrpfe`qRFS?f5BR&&kx0Ll@Z7E(1(t=-kR^08ORS*O-Nce7~~iS!Pw zhsJ%$%0{|*j^2Weog>0zEenr3;n0Z{MeG3QB6wQrWKL$i-k zdEDs|G|yjFEIUlEF|6B}yY&6n>yNF-)`r%$(*^>jibgS?hFXl8YuX80N)oYB9wxOO z!)e329I1M9&XN@i0FT4JM|!` zt&uBX)tUKweZ4*q6W{)GIQ~*MwYl3p(eZ;>L$LF4kr*$Of_)hJB&7p|-R*R!&|cjFi0`y-^!g-{_Ze4-hurwuM<_rf(ayrCATVEAMXY#TMD zY8=f((D6ctC_^?6R>Jtsi8`ZZyCd*pH=<7|nQ%QYXN#))fV!hC=$&JwFf|c)H-snX zHsFFhnV1Kq6O$U&%XNhi!i34I9KQtJQ&8Yfe_s9|bEaSYtTZz-8$e1H57HKej@5lB z+bg{dn$_buxIpiyyz7n;@6T;=p9_&Tue=NGNvj}ugm#Q8Ai}mrPc@Xc2cFmi$YeP{ zewv?HFyg^^S=UG^G7?mu4mqXrwCk+=k#wXavg$YvP%b`Zu{aY3e^rcVY6m`kE_r~5 z`2eAB!aN?t1;nXYhl6ZDi+`pFC|AoQo z3%u?Or4SKn@4xw5P^PKurD&#Y}9;KvVvXt zHhwnD#{#|%q;4a`RR~`_M4B+cYEYbT-dfO%(645QU+^Ep*xCIg6cF+eA!;4;MzB$< zlBo=ZB^yE$h=-BrhMaApyq7yvv*U^sFn&1Po4=t=azlR&UBSqqYTt5OP5CuU%gk0t zy}<6*r7pbj|EG#84@){Sg9ZYc#|8r8`@d6h|3k3vKc;{9$NCR78oJ)fW>{apWap9- z(Iu$JejZ8>uaTBSqO`ddh6FlWaTixx|Ms81Z-#4@lvTRL#nuqc8EK;s}nuoDl{JP6cN^0f}3EyD3;ym`rJN|mln`vAA{8$435&TvS z2{o~-=Ui>ujt0PI_)Lj;7IUWJVo8$EP3fANQm+1*!etZ_pGqc>GF+Y9T&mr2=gO6I zOcF1!{M*O+784XIq&e=Zrm@J`HMdcr7BbhhAK`A=)1Uey4OIEQ6`iD^VL6D?Ur1bd zzw0M=1z5g0JIohfCm8l?X5fr^p2(U3%eQV1IRV2Qmp(#cPgK1X*&Gy$r2r|<@? zKI7Wd+Lb+dS5!KeD`-D%_3!#H?rBMu{rMmF)Qgpkbm<^CZ<2l~9jli-Ze?z@Ml0 z1gNUJ9qykUvI6tYT$%BdH7*Kk9geDiY{i8+)ruJXpA1v32^1->%A!@gRkCoiJt89q zdwUI&rnkpn7nf`a2v}i$ZtY@gG+I?9U|IH9aDh~_Sb?8HM34wOtWN?j1x5eVFdTbW zVCrO9s}UPFXicvW8m$TTzN^0+)CH*$HJmn=;~HD|%Qn#@)Lc+xtR4{g*8E4U%`K(} zmPGg9UX#)PFu$SCrEa1Nh%YiulCll_8mSt?1gE4@0e)2~I>wpYc(^{$ZsoPcF~QL0 zdUVBkXfYkr328djn+IF|4f|`JG=coC1c&rc;&Clh*sol?55iN>}sIMpwl4Y(BrUP@@Re9OogMwg@O!fja?UoVhom96kKZlE}?6DK&E(Px$QQ-6ER`yQ~+oDFmG$YB@k`2CPQek2c6G{Xfq5c3=f_LJH zCgs{b3)vKQ?(_o#XDm-QA zV`euia7SD1L)M`XdWt##G$Z50%mH@}U+$1{ynwFxJQ=Y1O2$e!=?9~zi4pAUM!k(0xVZINN9{Mb}PqL(7g$i!Kn<$wTm;8$ryL&?S+Wz z4Ux-9>4~JOe!1le6}0I2Y_96C-GAA{)=xAvC(p@NzVx=;#Rg%g(Ywcgd6ks?Z!TvY zb1p;Ih}i4of-B8lkaFOFuV!xA;NUu2>S(>my;hSQehVy)8uvOb0b4^LM|XVIu22V! zgX)wE7JU@7-Sw%S@58m59ES#egsGxKDgxOv_*W#<4xwgf*EPBNL`_WjAdf)ZkumVl zsFX+)u^yI9Uss1VDn!2vY8S)CJv90uK;2R^%iWe)-dkq^LHiBwrE}ft1-Pa{q)sF$ z%+5o&iIw-a*-I-!_F+3-2eh9_;A8nHX=7Lcxgv%|W?^lrKmh*drd-1lNw{9+Y5KBMiaHQ_Uh6zXv&3PYT*HnD6qy zXF%*3>=)!B&43FCgOvY+W^=2%uwLIWn)ht{GWa&3F1LvK2v*VC%Oz0B2x~7lZ3KL8 zO8fe7n^F<=EREpdt_Ms?+P24Xy&_)GMPU)SP8(@=aJ5bOVk9!)vsM5<5 z)#pMpl{T}Swl!@x=(EDbtroldJI!iS`>DFF;LFSMvN2^h;Pos>Esn!jnv?9o*xY?R z)|)&lnVzw<= zN`NggO&-o3=ALP6-;#W0Rjy8&9LS1d@7WrY*tQb8#y3&X+C+k}y@~IPm?5=0S3#$8 z`(X7Q8dy0Cc-$Sl-}pH8f==$9os;@^=PjB*$CZ9$LB0(?-Y4O#KAS`r-nZlTwwY?S z43S>(NFJW5U#>O^GiT2HW9*X~NhPfYkj8M-NLc%(?T+Ddo-R&x-V@;7<-t#N&vwd( z+|t#h>Uu|1BlLJ@QpD@nR!@EYhQ4Rh1?KT5<^B3o>NYl`KQ^;HI@8q_POt@H9ZZo< zp4jrRD^W{fnNNCL60d&C7DXU`C3tl+%D)oyDOtHi((K2H#qMH{Y5yZkCwFn5g00$9 zwv^QpGJ~(@wPIS0EU8DCXu?@AN&}qnV7`|Ijrc>edqWAG8ija*oPiye8ZJfF(6K^* zI8aJ8kb0=9`!-+Cqe1Bf@kq(=@?dl-$!Og463L=3s{J}2)w_gqX3q$}0TTg@cJwMgh}Imz&+fFW?P4?O z9qp&IP5H$)a;Y1=?4Fcf7QX8ulVcMu(dQA3fZ@V1wLr}hJ=#v1R^ZjI z|CF`PLyPQt;6Om{FhD?}|7%%mXX0WFkT7&I2RI2jJ3Cq!xi|y|3iwJ zwz9H1>ZfZU=h)aTF*ccdRgEf$WwV+kQ45HrEKV^RB(bFzGCWZ_3@>MbkzMPM+^I0P z&pE7oFGtR4(6kDs^vJ2U+3R;uq2KJ|`dhF+qRH!T!;2oyJ z9Fpvk3_GPm^p%b+-)i+!<5i(0P8$188{_Y<>~bE7WWZ<5how*zxcD&hQtMC(Bv+06Zw4Ij}n-(~h`+R2LkWE)}i9v5e`ee^SJkBxBdUjS~v%32aMVf%OC~ zM*FN9iJJa2ZAz_z-RkDevxdHRb*N&$jAqBB1l-hG^II;C?m!fXZ-j~a$sSg~rp+Y! z>Iw;H*mYxUn!ScW7ZZJQV@4n=ABSc$9{N0b+#p;t5pm2KxNEi2obmcm^?~Ss;pqAgbP94Q^s2{0YNUtzVvDC#3UU*m z84ZFnd5n=7Y6MVKh%qdPau+8d@W1nb^;YQVNcEn<^`_1p&w}hLeND5?pNfy_go)*| zkFu?tDif(szKhgobUMu0UFYkj;h{OazfRv{B|y8r^A^8tNHdirwGxjD&ri3GPg!9n zB38>tA`+&=*JR5LlV^1MG94&7kA|I8M(lM*ST_v%<^g3)!w~DOLY6x|-h>XMVka38@Z{M(eU(%zY>`OpPRwv)SSa%}-)lXWLr2KOv=a*XRSROk+w(}&*ECeNa zq=m9vdv0YZ>dG&)j{w15@>1nite#qVG7A|Kn59EUKESH5sT7?5(YEEdo5!8ake|BO z-6Pq#^_9EK&53byGl5t1k~sA(hEkl(d#-UT{_vS7$}3{OhxgdJD?7-e0ewDcgb1ai z(G8_!;q@L3nHM!zPbG7?6A~M>_uF&IGZ&iP?`^tZjs5`faWP^?pKZg^U?IbHS2R=? zcVLK3%sqOe?dh(No*XT437F-ddlG4Wa(CDD;jz;|LjYVHIPg^aLTP=ppe;EPlVFgi zgzD#^k79F!BW#Q9fh~0Q zYfxu?a(EB@~NDMG2t)e&@d>*ypcL3-cp*c7qDhzWrhjgw~-6R z;7_bcAAjQIoF7$%Ir=lx1w_*oGf^#S=F@hKUt-{*rn4!a>K4+;1#48^e+48jxHe5s z!r2*IrQ2IySM-5#t~EF%S}aD{`X2CFKSLvrU@#sM(GkpaO2*A&ykc{75Dm zpEvtM73c7EM!h2Q7}LABJd+~ODYDXI&%Pp)A~U_vG8c;fV2#!tL&yHzPBxAzmK;!B>$>*dc?MzpynKY7MK=sQ$8CN>C-@6>eWL_F0-rU zsH0d-CTg^KC?QCh>`B+A$LdPeri=p&Oin!xKXVq?0N@dA7@g@y3LDiL=hdABLG)_T) zBw_e)BnfOMMKpQed5fg7FTt1_`-xY#AHy)rSYQl`QL;o8pin_#@obXdUmI+P6Ji$w znh2M;q-~8wraXd%asLyKneK$PMb%^&!L-VA zMCw-OFvcY=DL|1jy)ndKz_~J27oDRjeVIVrx{RD*J?h!e?#OAgOR&4j80$)62@SuD zY*T&G1ot$681bRhj(>R^hKl!z+EjA{4&#ixOy$B?2M}ac>qCItZOH{!^{3Tty#Z&* zm*CBltzaLXjTGBXuY50+88(u8NUBBvRK)j?-B95;>50&}s=12$POyFI3Y zVBA>W?{N$AX1u1*(W}6;M|?IY!Yxr((ub&ayj@&brpC#S9{Kp3u2;~j8uQOX0or)3S14m+Em}g>Vxs`?@f9Cz zMEU!~1dGn95g*&WOe(~%p5ATSlo0PdMqBF!V{pA37H5M8Bo?!6}f#Xu*$&`YhG1BlyaoSf>n@=PYXLTRXNW>zI;}tn1^Q#F_|-pFjUN$5W$H zVYBReBe#>;(PV~`+v9Pa9Y4_IKH~t~x<$$PFwNF|s|QI**M-WwZJW)6EN=@t7dgGt zG8=cUp*GfxQ?%H~{(u4O{1^Ho85ox7Q}wS$DZeV_YXFa3_DqE$=`tP&;_`zrdMmZdVHA!dg{bjm*uM8*7f_qMPe4wW)?@=`6aWKF_; z>{JYGNU#RaO_Wl*QA>A`StYGqs3* zasFprX%?O(%J`VAai-yoQQ78>oT^>AGZWp7Ri`oJHopqB>xjiIVBp|h9QsczkZ`&P z=6#l+8Z8^~LEQZd^h=SCZ}PiFo?kev7IVXq$!zE!X7MeQNbnOp*;s;2K_1QzaFjd~ z(cIiH!lho3oIIpgC)Cj>w>v05==i1da}tFzpM|XCffGErA8z)J81e}%^yZnY5oi~t zFB(LXd&zM-i4-fty(IOn9!E5Eh<`@#6*SP<$VQWFjp7twF&rd^jU^Ol32QhT1Lvgn z8k1Q{smD~~~0r8~p$yp(xS`Vnl%;>(mx$ygqA z0!;Zm*r2`^P~8pUhr|%WMfDCwZ0BdXHJL5?Z3xbGRd z>U5Iy*R*D7mko4&l+nG*mK`(MQn;;gQ%lyreVntw`0`d=u671-K4BcCEN*&dvn`X& z%-y##e4V&&Jh>^e6fTMSZT5)lR<_UiZ*@C?g99EhG_pi)tyNtCfg9$#P49M+%Zbmt z$|On64&7x$)p`pI+eL^-u*}C)Cu5TL_Pwh|^j$U3ZIPZsJA1s)-HEoWAy?Ma;7wMl zFJkjM_cQjh+@L3!;bmf}VYHsU&3t5bNqcm!m17boh!}|#SCD>W+aYGnvA<={kX89a zASW~^?5fk^qT0bEq<5GiupJaIsKREK(@etJy`#%U*C?))mO86bG~rVr)EWK~I#Y?) z!x8kgBxOc=!ZS!J=)WrPX;w<6Pw83aDPbz7egYnH6PjQMj{Wxt=&nT zksAe{_Wj&&rSvYe4#43SGCD@AP}N^Zdk?*)f8NYPl7e~zf`QOji+zoacwnK4?-#Xf zVijOmqQE5KO(W~WRJ)cyjy7B*!W0grjcZ;a?IVP{Pj^NUHUm&x{nvpr!ggBAuMz}ESH(BS_l|KT6~Kh&t{{##$X^K8;OA2)Xs>_BA>QM=86I<%TY_3ppjyAz^4n)GTlo|{ZrLrisAkK@s*b{gdDIZSnD zF+bXj4PY~JmRmd2qf2)+4)9Dd-$55vXg*q||5$igh0e~|dg|0khMoWhShA@?Au{}7 z`lQI$1E$sbPe3roGuFRwG({;MsUQUbC-!>SvY|~~Td?hxmg$lpAa)j>NkhhC3oz1TQ*w$(a z`CW>r_vCVXc#sQIS?JH0a7H||gQ$~HH#gwMV}Om+HOrJ7xb>o^EJtrHP1w{ecoh-( zO9aHqh=O0;wp?O4>Kn0ls`DF4 z_*!SKDKl8Cv4(TAz>LgZLk5I2Qmzy+ilJxCox){?udWsjWNF)jpK;BQhM~TqkiSJ8 zdxJF_Lv_S)1=tB|f;dDN`jP(xhMSf{yeD^qH&ntQTGy#PM+e9G2pDbVdpSApmkuuL ze4+PN=MJiqDNAStQpt3&;PI5U;VVnc^ARPi|NgT>E_MX7jbwa9Rj*?RO2OA$o&-j; z7h5Qz;)XQBgWN98e0+(HRgoHvDo0ELD2^|gkLMX9q6hpLxH0J#79lR9G9U`p2z%vX zbFd_yBXDS;)GFXdCOl$1tPv7Ir`)5!{7o!2if&Y@Gn$&t@ z|Igi(#8t4<>AU@U@_m<&ks_&tkDjt<`OF zoiH~vHg=Zm9QW_jqIAA62&uujI5`ikUq6`JOdu!g*bFU~ITU|^aL{-cj8ga<42+k9 zPKtmRMMXkXK+5L&O`wAM1-|Vhmsl#v#nnnN)^Y58%)9Neef2io;d7f4_5{Qs)(##U zJ?wc_#H&4(-?MpM!M^A7&}Xi%&w^Zc#qbvW>C1c+h)B6@Y0dn1K&-gUx2DmxKp~$6 z&?Ev6gPLO^O4}uwU+?OW1|e$Su`AHvKd@yq1dd+odv%Bnu4CPjd6WOUaBXoP#%+y} zW^TQmqfI)W8pHiV^rIAJ9%|WY?N*R59)s>{K@4G>aUh0C#XOE>aBgkv907y{CdC#t zKQek2qoXB#(N5eLq{;HmdL)SRdOYPAx?LD+3GJnou5B4BW;ODG4FP@x$?=jWV0Cqg z=0~-?1hr=|4oorKI9}CE^x#j+ojyg+OJXUiq3~d^N-J$gT^W$sc`e#h4ZeWWK`ksc zs8ka#+Y3QTsC>EFW|4ebDQvUaXW))KMvx&_6$DTFYEo<9SQN@492=zdXwhi-LRO-Ay9}1dVa}uk%AE#s8A>@ZD(0G2S7m&)yZf;n6>V)A z2IiS|7&9o2pk4F9$yl{1TqLfBtr+-hSw|+kLY$NrS9JPND5lpYLo+=NgW$u- zwT%>XyZaqn@6i}pjx?2JbYrJfL(8Jd=ljuc10Ale{bex%$D>2ttF~d( zFzNMe)ZYOSXIK}#Y}Ztc-Iu?bM>{Zr`?oW?=4z)aF~sLKwm6^XIrs9lcY~siknF~R zOzMy*w?IbIo4AZ8s`Mz3&2CcU&$}F!U>1s@7>{}YS(q3YOcuH_2}9}}`4mx+eurub zl3k6d-z4lD-(bbz4Q+cjaEd46C=>>U9wNsZVoKI{R#+`Aea8*4Z>hAI6De{FTvpn? zX%^Nzvq9Eam!`rrO+#dwqE~7@W80G}9syB;~h{c08vw?p2Fc6`VgE1Agrj z*mlSGIp)n`iWBF27;@@lQd^Cgm62iXxE9?C6=YB~5T8Cq-((qf&Qw@qap0aZ1kGxc zldUb!WSI>v{g~&hpN7;kxF-iFEC-mI6J{rtkYOiEwys5{Ux51Xnp*eFqNs^7W3%+@ zicKcYjLAK@tK0@|_1#XY6Jasn;;H9mcX1biHspI`qOsxKX^P>-f0+u6s_XRPPaJ#l zL49)h6j65M#enP{xF!6B4JY>XY6jj&AJ!+Tqa7P7Lv9w(dVcR>WDZz`!evVgaR}@$ zpL3OjU9A*@8-Y2HHbuU$L8Zo^f23gevIPuJ04wyzWvfofQ}8cgqC3YK?Pm6uVrSy> z2Hy(2l!CqE(EUUmxa!5aZfMi+lC`MVE?R2Kb7fL zE~>g}Q(QewW3vqIggm=n>W5d&vFV%qv@k6u@pW0^FPKuXZogk0u8 z({k|WJWZLeOJ%lPAD1PqY|l7Nm}=sumigzAv;ggsVh8oxHHo|>0cC_YtJa<^i8=@s zg88II!dU&!0Cq@EXgcdC9irSgv>XI^D0w)Tb*JjQ`OXuQf_GaNN=(PzNz7a4dAo>dz zQw)&r&A9(9Y#GBFi}oEukI<}jC8z3)wimroenr|XEh{~pjlMlNe~4KR$)28Q2tCjh z{}qkwTre#vma9~ah#^%Fi;m{Zat%2@{Lrw|<_R%kb^7H;KmG%-#2d=g$J|zj+_kCrtW~7@=7j3o+Q%BI zw*|jNrWLil9Xzq#zR+RM`P3PsKA9fvvN3^ft?RbK9k%BLI6(+or|-I9fF9d6dLm%k z(+`|k!6v<>qv)IQ#a`E3(VY*1E*#@5913puhdqxAVK78;H)N?nJ@QPR&0s$6A@K~o zyN5pIt3SU}KT;1(7xXSdBE9fg?g?X<#V90c+owZoQY0+z`_?K6ytn8`hTcrUomR9(hlBDj$x!H(U&+SMwRMn%VArp zEb7G)I97pYUyv-#JKMn@?T-vPA&yB;nyFs$iQhsmqGKnPR7s#Oj5NsyEHjO(D0=n~ zzbA7Djp~F_%4zY>=!bQ`l8;&JC1oGu4@7PH<|^~gi22cgZsv%&Svh}xfd^5z7(uC8 zK!dDeUQtGSc(TMO#`Bb!oB>)*@LtJK^eIei8sRUJz4VrMuDKEq%WVhsr%}wmn97z5 za70t41GOF80Z6}&p8=M*2C4P9coI|BT-18sZQvQvBpi46jWDvp$cS9)B(RP zhkyN0EM)rYf62w5#NL}mPW?miM_PJ-qhbIwBaD+M8G1PNLe#1TQMWl-SdlJnfGs0J zj}hPNP{Im1`kt{-!d`w5z?9DAs}1@FeBp!N8m%B}_g#N+1g{Kht->9t@_~OS-nyqK zmK#I)MpyMJHs~x~Z{PHq{G8-h+#~$`&{?-xPy;{0tQ(zL#7}N76(y64K|?)?C%3dGxGxIn{0=4 zG2g$#+(MYo5hf5S5}GUDPy@~Sn?Iw3ulA7GK`U)sPM%Lc`7k%NJ-jVi0V%gjr8new z_SII0S3YT|K!>hVt6Zo}v~CDVa+J=}!i=!moax;x3DuBiHxyE6IUw%#%|+gfQnJ8R z>9tn@9l464Uo2JbVy2X)>vKU5ZA@_rS@H|xA_;99(mD)6o(kWPANUCE@&g7F2t|s~ zw`hyVAbGo>X+2^s7Bx*K%hf{8kjo_`mV&iiCRJx#pG~%!Wv?Bt>S+1P5-wgfRd7iJ-H9vygacU^%LFD5NBub%sC>Qe&ixxI?Mfuvvo)F;V<_ZuJ;;@#W(-q zZDNnCka|D{kUWZSBy~$K+W6z&(MMspC4P^AIeFI>(SVb|>fFFT`B{Iv+{St@f&U5{ z(@Q9-pHN^I>9-)hdPLC2+1d`scF?;)p(DhpPhCxmoO@}5vqM}9?hSQ6z#`s# zxP~__6Dhq4pGSb5l^?kf;$B z2@v2;RVMB+kNl>UX13OJPj zASRYz6-2>euCZ=XlBPjTfzIMJODpY`r8Tnlg-({Gk`QW1hDP(6P3xM?r=BIXuB(=x zAD2G#%tX;Rzdjl7rhA??oMv989cMoF{0O*!c2qJb!cCoeX04aW)Z7fi7SUpk=Vvdi zxpJlsiq2|um~z+54{yh;kGfYP0TIC|%tV2!;&ztOLw7GRW8RJNWb!Enrb8D|bP;xO zFw^cKWz$h;)y+_GzZH^qOvorQBh5UE#wH)n*=RbKsP6$NRr?tt>C#zQ{J;w=`FN2-f#>+xQTrP2SU?yQevqC1#lH($ZUk0atG5(`uZxVI)BX z=m>=Nx^H25?rma?BDDoGoU6I{Zs_@Tk z5voIT~jwa@s1SpV%nx zQ&LZ-*2ma~DY!44aTZo^ULE;F0e*R5nW_grVk8bRHjz<*s6F0H7<-5GXZeRcPbpO- z=AvU{aUzDlAFMB_xN<=vWu(#5)Jh1Za9d{8~%kXc~!wCLPB1YVPDbchx%w z#4M0$q2SFBNV<)39fCouYz^EFD~B>xubhEx8xiXB?bwz~x5A`mB;BKS2Ye3CA~q`b zIoRp-7g7fFbi)kR(=-yW`4v+`LW7;IR&*IA@xyM>u9m$ZP*(kF+@0WGFq~JI9&^;- z0dXtEK74L$`rCoQp?k@aWcJyTLh=Mi!hos8lTftZKeEdVE&yO)%`oPNHMhp^nNsc2?GC(eDav#9O@oH)c#=;eKbHusSTH;Hl z#~ghuHWIW+4UTe><~2aK6B!XyD{ebXF3)m(3nr4Kc;UUYQN1Y1d_Cs#tbk#F+{Ke+ ziJB?$zD44snDH4oYR&|O4haraK&_w^h&%UI0rhqYs^B)4w3vI0(nXGYnpRh4Wh+j5$}$tL+O}RFRaA~u_W}IYS>tdNcZA!E|6?^Z zFoAlAH27gBz6*FwMtSdE{;k_SiZASLZlvz~U^Ih69>EjM;)X|82;{wtMy+?4j8w%w zHKD=Yd?3m&oNjNE!6{Qutwz3dL^hh)x8pZ~SIV+k^j%Fj#-4a%G^EfjvH{96ZuHX& zV`Nyk#PnbJh7rRzWLvAMli9Ea{gfflU{7&6&HCx}dP^m^90g#6T_my>MJc%>_0l&O zZcukvw{oqgRR`b(8NtIaxy_l~yT~t?ebFv&)`rzLYL_cp4k=huHSDE)@qAa;vY?mfC zjo(&J$Il@I`~&nCUA!~vyXvjbGvz_KNHSEcC9YT~Y=nH|0(o<>u3i5RXWtlIdHZEq zv29dRv2EM7ZJU)!g*Uccv29jt+qP{?GQE0c_1itu|CxPnazEYu;jZz8t4{F0ep|BKlSw)W+u=6qFJa(>Zkah)*Q#zYix=Up#tRs&FNyh{wYc~BWbxyC zGm3sYeR^PUVz!zi+c+2Xs^+WGuNnHaO5xQZ5oXHTna|yQB{i^sQ@$%YzIWe)Bk&b` zpjWZxE&RtyeQ%9b53GCYw{Uu@>d1B}Z3?aV)JsFr$3U2brdPu51Er?7y)FJ;PfCb= z20n1zAAeH31Itj#w?dnh3}}B8xTh3%2Q6AP;HHTdD8DQMO-*l3rKT{}YZh!N^j&d^ z{37s?Qns@ib{H+m^QLLQUFkYLKWK!duq%?>EQ%idG$q|vpQc4ux{agAq_D2jLf?3H zRI;iwL3x$7k~1xfG;A3ewvh+=^PFnUrV^q=5SbzIF$}e~d`raPdLQKkHXIQ(tnu+| z&9GoozP%QKqCo-6`|x(!S7?a6aRG#~@VtQaI%}aJIO;?F^)BBy29lVGGQhk@-5epW64;+=e0R zcZm9Kf9E6G*-g?Chp^GDQD?1hvV9gl1+oKJ+`aO2A_vKsQN`N};mp*yU8N&}Z=N@Z z+)Y|AR&`5~-O_cJ-=^Y`PYA~zLWu6w(pjF?uv1i8Q9)Yuv4!YM?sHhKe`rEHS*(YV z#Ay6nb`{1pWeEz8=Gw&)Fw?gnZ@hp6^z+~)KG$Jl1D8MV}Ej%Cog0v|{&UoNJVp=eaKIM!AK6wJpt zT1j%O^zeA`u#0|V7?H5qtTeHxx7uTBfp0}%{;aOgb{$>1mK6S(C9W+A39hgvA65$0hwJ@YT6?f#U*vQ&=`0ePbdB}e;vV`Z(ep4m{xcaDkvp8Hw~-7s9bbVUVlN@3LS1| zlb*L{N`vOy)2$pP{8=<%{N=K#N*jXx>2=GO;87g2sjcrjqqv791mH^Kx*WGpZLV+* z$Vp;WW&Zr$_7brjy?xV^CcIT^F#nnTUgQPWqRA2<0D=nmFDZMm#CjETh32CGwAX?wYwgB?Dt(UWMMC4sew18F6U z_!*l38#ud+tJEM(LhJoOyL*d7YWm6*`*DYy+yo0d6wNVm00C~Y)=N9AJUq5AJ=Uw& zv^`_*iFhp+<@6CjrcQ2;M5x1^gn6HXWDruAGdE`ihn<(?sEuv6@Cwf5>z}UzBH;BO zMDKZolA0O8jzcM~!Vao5{jrHya8kr?2QK`$A$ z-?#M{RYp33$kxIvn=4Vf=5||TR$G3|CKxtHik!NA?yRSyRzAAP+&?M_z85aJ?^z}D z#(8}vGo3naGWIgZH$L94$b49uh$byHjSQTO1;aSS z>SL-b$+{JoV(8(xxQn8&O5*D3fM~L1Wh_*|0{FE${4-cbTVRhG&XaG+(TYYuj+5mJ zReaH|ks?d`)z#Sw#w2J~OF4E-tqVUztEp?K3}ZvP%3#A_iQLO|zzM*6neCn0TtNVS zv0V#uJLIA|uL@upFs~UFNi*RneddZ~*R0e@YhN&=B>U;9oh{iB#V9f7m23s6?3=L| zYghlsd>o^+hRFu6THC{Mbl>(dxq)|y#|GGh9B4#L%kw9`Nwisg0Ys7_6iD_RPOIs6 z$cZ*2gLmJ3JOncbL?C9!Q9AinXl^R`}PULK9h?8oQs7au(KFPTo|SfIKPc#N0Eto5fj2egT|ilTCPElc-7=FjW|3 z`Fp|&YE*^~@va+pf8>!7GqG8DerlH`%xAlM!x1XJw5rptd$cpbC9)_?+Il}K$%d8n4bGS5 z^YEgEhR+}k$*?8VRHyaDma~dHJNRbY;aZ7>1J3M9gz+nzjXYU_>&L)OI&dnbl7PTg zrf48M)Bv(bcNp*^r@v{aBo04u-Vog7`w8tjdk1F%LHYNYOu0IxP%pO%cPK(}W z0&KntQ%-Bys)@G!@9r4;uoQ|4&3cVwB`srq8s75)ZdN$k$ht}YV=~GVTsd6|rU9Vl z!jUOOfh98&J2Q0Zz&z1o(9!FMcGwG)*x=d(|s(Fn@evuCam} zp+4SbzL#pCrKQ%&xzUzg#gfhY@K2~RF%s5IF3E^Y0`zP=dlD@1rdU`K zsLPo>kd?Z`0Bk|Hhb!qrg2dCmQTd;X-e+AAs07a*swiFxsO@A3xTOuiK2)zvY@q2(dL~?% z!sw%P0Y^?f^B&_VRd;2*;DRvCSg(j5la+oG3Rr^g`Bfx{QU)h_i}Ne<&){_(q zd#T`n@O5@X06lfj)Z>gCj~s(g;I{Z$K6#yxk>8m(r6~r3!&g!z1)Pka#~0Ek`ep9n z7~1&&H8@6_Ec@?CyRxVqiJtCUFHcCr>tjM>Z$+n#$VQovCMobGX&Oq)QxZsm#>Gp9 z)WSPR0_D^b2o#5_JLy*)?m788CcP}NP07uhPYInG+x--zxShYf3A#IzF}SRN6+x(Q z-^h)*uW_hv#kX!X!&vx)y# z)7?4OFA{C&0f3O3(?8jHURNGHo%1A1;O9u}#}fEW1wlY>Jnn z#I_6uu}cHy@XHf9S%_oFkKtxR@`D?Nal}1qfq0lcdEQ|$4!L+3Fa=t4q2~A~#}M)) zm>g|dz_kVMuu6_LRj^||=J1?XJdW^F$q#5g1>Rv!{QPO5Cqg${+pFP?OkV{Kke!yO zsXYX}dOk0<>*Cd|<1wq`2_cDKEE>BPT?*9%zE zGgOVB8?DTbe0&n19{2t~HSh8NV+T;|7)=ri^s~MF{~}INvaqqY{y$~4FQzYiv3?;# z#YzrG43)d^Qx-LRYxro2%mD=U;B$v<H;E%P);<5D&Qa(tygVhC;+vya(-KJQ0dYlDbbc5I*%ZwzN*tJ^;3 zaLyK!wz30ImXeTlZA?ot+liT1Imh z;svax9hRv|_$dooZStRruog`ffHeZa8ZmF?cxG?9c#NU`P0t`bY-zPF)8=ZFq z-K3$?dT~$?s*Q3tocgICbI zM|`SCqh-ZWJTkViRJ+XyHteGA*yQ~5*hC4wU1w@6_8imj%r4XJbIS=X-y|!IrOx_n znvCp%9?ddMVK*CW+z#V+*=#nJeAEl5nh6WEF3j>GTy`Pv7}pLm9D>q<^(}46H>v{f zg1K+5M{J_#voK%}41N&q0;M;)%uDP)c<6qHcp0>3RQuRz*N_~lRh=n{#xU(yo2>7| zPGCYY*dpy14J$;4>v;zIFaYSxqa-dEJ&>*|H%lh;kzAv#{c6lMcIJ^fbQKE{{vwUF zb#2yNvu-NxNo2+zo5db91i`o?tKWJcH&J;6G!oyL-)fM`VX5_@-8RRe64mLxg4EJ& zYb z=b~U?Jfe}Pr~DPr4>a9`T{ZUjCi{q;-w|KQkY{&>`U@fI&cyTR#rHI-@K6i-cI|As z(YvIh0UL1p3q`qI_S4R9TX7>-j-^d{M+1t58&5nO0xs(F{Q`#%$Ktia7nYw?9;N<( zR6R?VEcpS*fPC+sL5UEG{Y~dQ*X{oyeH=Ck89X!jmq14fZN@nS%=_{mfu|-sC%*hM zL|lA^3;ut(qIUi?9X67%wQ!a(`5bi)-mJpg#Bw0)(Oi5A!hb!ZuXpuJJH@M z2%ck-Ji42?`g7dl^W|i>{`&Tk_06`^bke#ozP52>^%DNkRo1PPqo+dEW@N0~qs0sx zY~(hvS!p{GxS!r@{&z=C>p9>kHB*L{0PsE&voP}9F>bFy-5hG0;8;*^cX74K_~3fB zonwnewfbGJ=B(XQMj&4QeM3bcoZ$F{N%#~bj0-j-Kdy*nf}vb7lVHzYs`7fS`GhY=p*t>&HONykVhH0)4G5oa(Ywh^Wl=SmAcdK03$vuePqX;TWXmQ>oK>hU!S z4uLZ;?95TONRA5eB)%8~IA-^Hg~Xcivhdr2yU0_$59XY?#2EcEt3AM>LxQm*NWg{E4Dzc0st?#$hLw{V_S~;^h8vcH3rP28>|*K z-ah;Chz1yxGt6d3&kNnPGSogPK{ev|doTyKNUmg*xT3ixkx`SCUA{D4@dP!7C_3R# zFhI6*8mH#>zo?O6!ii=tL9j_PHj-*rXn2qtBxtpd+S(;(Xi7~4@wf6KpXR+>8}#9A zCXCSYSe}~k3RT*%I`28hi^zF4n+mua+g!0leF*!&U{uC0hG!)WiTv9%jtlmqsUQCM z*lqhU&lIGjR9c92Zjv)}bkf4e<4T9XW-l8(CU4P(gw8^J7D(FZ=S7bSungfk(CLj~ z%KQ_t7FP+LE@@mR&#r-CjZ3Vz!+`VTZMUjobZXD0JtBe%6|b=hF7Us0s_gy2>-29D zffo5crBnsEvFcnQZH5yH_^sk~M?qt6bqe$l$O(n53KN^SQ!KWJVUAkFHVi{Mb$aQ8 zpfz$kh}H!@6*R4&op~(51RCGkiv+gGc4?p$>$|K`h&1;hjmVl?O)5+%O#_E@5}sH# zKG^?;J`~%N()i92(Dge}nu! zt9@Ub1|rByy!9Gj@Jii!*T;!`J0su)8N;xHf){rMQ7{1OZ!wk{P%iil=jAPxJD>z?eS=RMoeU;~6 z-O26dW})%oo8zLvq)uf)Yl4w&=tEl$j<*oonrM%U*W2WaI&*-=Mzzk(nC}VHIf)Yz zJ)q~h+QIO!VQcpGS2NqjHFKcJiAdws{3Yy`XWHJ#VfW6f-62oo@J%4MP#X%1AAOH9 z+b$#kv!K{dk;Q~|JsGSb*vp=1J?KP^Tn`iBuVq-Bq6LA;2z{uLy47;Cu> zR|*w#Ug_64+~NRYnBg}R%58ZxSi?{PT;iVS69n3nTw}t5*+{0g<3yRL3T+-n9Yf4w zP}3AH7KK9e+paj;;-V`<7{pvlxx3-q=v)wV#5StNaBHM!9~};7s%K+am<~7 z*iWI@%kG#?&JH-ch9R@6HsE$FSSvTVnJZggOULWXR7Jr~Kz~k%&~U&%gf?uwqnugBxkbs52bzf z!3e?4RqIAEq%HLv&X_bn7V{i}4Sld1%-hyObDqF|r~zSHAfe9nd-@{20jZ3n8>o&< z%fHR~&PSWWls7psqd6rfU8s1n(K+SdO!nUmLf6Qe7bbIyFgih>!CGnk9{p*IZfZtb z6(Ip|i_aBX>@c3wBtIyFT1_frklqHun;z!~UHqd$-XY_{V|im&cY-~~$X6Age*i1T z31c;sH+*NFMksv^uE;>4d-;>H9a@At?nP)Z@#fO*Kb|FY!knnUPZg6M#J6uk|7s=n zU!0|XoTM+hFMLsdpO6X6p_!>Qz4xUGQ(80C!Qp07WSGZC}1FJ_`<}lX+Sw8u8#?mtH?z$K5)d zQm!uCyq~c;DOoX9bDDO9wH5-&?1E{6$aDt6TGq&=(<2_^IFr`zpMG5P+KN=8Rs;3R z^BfWy5q!4BZN<*+ifCYsvGx(J_?$8>?7?pR(!nj3CSR1wNP`3$h*= zL#=F;z#M_`T+Q^e$PynAQWM!~lfPjSj=bshpfg1Jg}{cwD)n5bIlF_z!R~w~ zI02GF23S~m1PI|+iAZlHhvbqoP{Z@J2>jsWHkY6kFDw1~*13~pHfq}>W3VPH^Zt4&HsE}mwyzbEJsSu;rwPbtQ9 z7sprAy>(hVhva#eZ-zU%VUFXmZX-~6Qku>M_}0SK3LSe2zuh~lz;esw%MAJ&EInI2 z?ia~54j5Hn=ep~4hLMhMkw|U};Dc0>3w{(#_Uxcn1Jq!OeBmt;0dWE9=ZE?QJyIzh zzHD?+N21?DeDv%n9y&!Y5VhVD~3seC|pOa!Hv?)_7?QQJfW?(hg59w;PDu^g427 zu-c^llE~~%Q+OlXG=&aS3qUr-BWH*2aLS{hQOjcn%5D;SP}PaQ)MBeZ?J;}$O(u)V z8A5r~O!F`yK7v(8&Tty3$>tpo_w!~}%YA(NS!AK;jJ=myOPdynK{2^~>^y>Es&)qFtze)7M4gBKmr{I`SoZ~w_YKa_-| zX|3&S4DGDw>>SPL>@#Z`e(IwB z+pCfPO``Pgbc!YhpCg$62p(T#U-%;aLW0UqYb6!TkBmE4oz@Xm{XGJ7tWaki4G;7+ z{Tj4_gf9CuA>EeN`wA-O#+`<}Y|!_vfZ(X2DPzo9i*OZ2LwO2FsNO~fUIi3+p&x!B z!JsJ2NGK<6<7Yro$^p17U3#8@Rpo{Kmq%SGTQT646O$QO70 zL&6KIf7hJRvhB^VRArUC}FrkG%`;Ndr#TELY@F# zxkq#xRo9>8B>m)_=ijQFgjeE(1!04yL_76={G>%yXwnand?AdbJB4v@lZE-K#HMft zlXjt%pG;PLC~%u&x{#*?j~fzg!E31yH#LVECB(ZgokPJKE)R@((2|Q{`Q-Xw_|!Lnr}`1iMj`SMEmC#etZnttFyr z3|MoQ_D;3r#k?X>rK>nS)4z{?>c@}$3H4xD5v@z^q1Wxjo+J;nB`FGZHyLG0pCH4A z=FTFG5(G^6VC*Z}s0{g<>Nn!3+sL{sv5u#RQ^U|PZuW7^H5g}=KzI}zuNvq}nPb0W zC4`HDT%+9hKeaTFpz=&juYFewA*1Hc3o${+@5-wv)$EodCJde(-sw5!H_#(!(y9=yN>s`Us0Q9{{2q#@(2^6d zZiQHqJ4q}v2UZGu_5$lA^XX+_o&i*DM$VAhndZs&K{?tB($mgzxMfU-CJ8Y7qvQ2C zaBf=ahqzEsR*3P46)ZYeg*^5&$kgRm1;;~9Vp*z5zQ8X*6gnk8;Gt$QDiTf!hoB|Z zh?L3A!phrr5X*;7m~g!xTu>o>?~26dar8LAgsz;^tY}JSV^f`nr<_KpfR@nf9nx`1 zJp4DNF3wyJn2LvOra0u1&~s%qh@iC;A^Y@4M(CfJT3FI6xoG;N-2(#ILMQ<9umMD` zEwzS8_q%%!DVGHH>I}<68oAb%gpp(WKs;ck!yHj-jCaVW(nZ`t`8l+d2VMf2BXlM? z2C$+)?SeeaP&jc)zmf()pQw8RuAi&+@?#jPOg48Pav!>D4Vh?(g}1id6>$gF-uIhQ z3ch&0H~oz?bYDTbN~;y(h&aX166`^WwM3QY5Qtd`443V00uH@izg3-Is)w=JGxCT- zni{ESP1;4-0E$~}U?%J$Rkv*55r!Did}NxUZc6vVGZ8NINmOc42$^Ba?F-M|Dj+VT zZailrx*T`(_Cqo&I;3lG4ezv;D}q?|KnMpsge^kXO@vcq9?Sf9)!28&V_OD~m2fT# zvY59$Q~@8u?DbtPcR05h9tMQJA-d=a>1st2GP7^(yJM3k=Hqu5-h%8fk{-Wh=HhRU z1-n^+cqA_d07wPQ7Zs>f0bDpAtT^CdvT-0dNC(XnceV$%C>IoTr{3c$K}S>KR^Q8M z0!hwmFIIVfe+X`Q?;<mjmbaHG-<*_a7p>AqfHb~?Q zO6Scgcu`V&|ZnPpIL znb@iV8ZvX>>O&R3e+DX}KNkH<)+u9!US3?My~KqfBH7_rJW6I; zI7?A;RzQ8ClwuTL^UL9#J$|?;Lug>KcAuV*>>5rMChpC783Jp|qZMK=_-Cyxl5Zp?p_ZjF0JPTT-U| z5~_Zc>R277@acv#_Nil?jb-2)wNLCl=-bpJ`~>~Q_JuFzFC?f+Ijtz8zE|w@R@mdI#1)iFN=OQ3 zFo&Q>!Z6zqID9|e<|L4nX6o7R?`X0#k;oO3RI^sEG8yS-I$f-XK`zMfH2|P7Q9la7 z9!Pq}K%Y`O{+if%>2QjSWPaMYNc#Ity$i3$Z*P`y{@qC7Dl_yA*6jpKtukfx=6ei9 zy{*aG9M6b^4?{T5J_NUseQn|rtUVMgy)^EGPOJrNZHDz4cU5NaD99F1P02%(21@{! zQdJpQM@A=NPyUCT%#R^@)O{vmM+7&=zE%?O#P5GhD;QxDT^k)&rqzw*uluIQH5t-Y zR--dlU_n;rDY)c_8=aLN&gpw+o|+j&rk(as`yEsTaN|JO!C-$-Lp_3{ z8A|fbdqq;3dZTa4=m+UDBM%7!P09vW-ISWb8_{|%Gf&xbs`S^{P^EX?P?gg;M4IuZ zL9XzQXnPd5h_xhUxZHkJ;v^~^^p7)XSvv%MK0M&&Fdy~*5rzB3>|+9V-g1&iSJ))| zD?|Q8nm?9J;!H{xNhT+{Wp|~!SlnAP@b`g&gm11+Nm*;)3VNOaAd|klT{YW@-M+#} zEx?sKBO$F!IZ(^NIgQeY{rm2qdkPol2AgncFw4N!gy5#Q8EAIyTqH$0tzA%Q{Q)dh zp2xHSN!GNcN|O+ZB;ePO0o=^Xmgnm2@am-rn?@<6nZl%u!tKcmb9$9my}nA*lx5+O zv`Z)&vsu3JldOpKAs|?8MsrF^>i5AFxZ>@0;$Wyj@@Wk1&-l}7+81UUG8>XLmF`F* zKSD0!Uqbl4m~YEPA?-W5$QlC{pax3ZE z3*W*|#2z;nJkH2gy^xAdr#)1?HSDvLdHawX9O9gLbHq7H#!89P1krG4TAg9W>!YXQ~Jir#`p6T+8? z)wNQj24&4Y$im+#0>>?;U*6SMzW~vQ5;lF|#}g*Jxc7bKL{2#Yd9opP%tiPVRu0NN z^Lyimv;}!pLcH|+=3aaO!pbc_X~yBZUyKmMzxx|p_90+*mBiB<)=uGlB2X<+9ldS2 z8TIF}z0_--_BV=_%%3s>^rgovo$cxdci1eJgTHH9ua%Hjn7oBb1Y80i738;1o|x_s z|CAxIR_;)fe~N`9KBW%-KlQJgqs4zVAO0fy!WZ!u5>%w@KkMIjTa;(WBdR*o!x8j^ zU3Ba)@@3#<)sh57ygoyLlx7*avp(jdRpQBKY*DPWA{ZTV>fXS}mP?&wtm94D@97S? zwreFjvSLY*8_fs1w*@jD){YZA93KylA0Mv|&%f0wfeyPBK)zeJF=pcN8Ijc-oL)60 zq(qvf55*^pHM@Ed|K&XA)L5bMH_(5f0So8EB1j@iBP&UfHoY4@A1=0@%?zB_2r#Zt4)U0OF9M^2YmGFH? zGsMi@bdvuFk8IEQ0Si*tC>I=i-iJ=e1v8-tIvczmJT=GaI5;BIA4iZ}Aj4PRb(r8L zGJ9oEU+x>)H=|sCWNRl#0c$8Do^G@N8|YkA6T>+}{TYoIVT+f=)$sB+>>@pyX(hEt zXrxuyoB7f3j8sJLXCo_4=pETrlJE@~qCR>%Of0k*h878hB;UbfcaXWvkoUZVq1${X z!AYK}#qxaVJ469i_aFWgo_sbW)?mchVvbA=X^4;3D4eP`$fiHlLL|?a@C$%Q&l=UyO>px;0*vxAq$O){Py&7EDcJJ=Sfe)GmFi? z8kFZWAh`*VPs@&R9+z1Jk)0OBc>^sb3=VFB(M||%xX&cG+qK!M&6M=8d*T{xv;}Pf z?%qeX>_ob%_uvpO5x?W#^Ro@}gHft>e@px3HklaUhSp{=ZgfH-4EnBGp=EVXt-s<> zeXQ+f+|_o6ZI+}cZ%Mnkt^zqTYBL-pUxMVi<`*Qb zfbeiMsIZqkw39httKz$sS$GI7hf^K-w^o^XfRk^8lWzdKZF9$b8W+JlGA=aNCM9wg+jEF2+TEhRwV|FIGZP`Y?kFvbf*QiHAl!b z>BX8>2Rh6VI*b9rz31Lyq1J1Bx7C&NcdfN~oKmQza`o#z0%K8YjvE?7iJu^Wd@2Us`T0dz=s@lr5pW@l#I|- z#TfNWAgHH~7MwldRxTsxvJ^5V-f)9sFW~kZHUVA{EI;W+rdcST_Xl&iwN1T)OGx6w zL;kW4BvDa{Z8j?3e4q1@V_B$1d=Ng)P~(;n9K6##Aq)uD{*;OV>U+X1L0#> z;&XZno3N~J7?#WMTPZG3X!g`GudQq%Kle&2Mq;DAU-2fq?&8uUON{Ec*v)=Ku* z;q^ndi4XFw5TQjt=)vNUOnFYr1kLZFSYj7w#E)Aqul&PM>m!2mwdekAL2RmI4gZR8 z{_THVqWtIn2H|HE{lE4%oE=R}{?Xcqi*qEq{Omx0Ab;*Y{O=0L|M`6ZLnmiPgU>B6 zwobOPcEgI0+JuD6ToWvrjlHZ4tYI0~fR527 zQ@Lj-Zs`cK9k~sE{&K$=#@jURqpr|zgWFHG@ykW@d)AuiYKK$o`f6Tr-T38X+RfX; zMv~L`8QbsQUbvl>ZKPE>^0+VpDAgBb6EOwtB@+h*PRqy zLNti*?JdUOWR6?&{49z%2YJ-YaJxEBvk{sZt-n?}rE{7`bO>|kDCO6VCvg^Ca;gRD zHAxGSnno6Vgf_cv{HUz2j7wg`6;_FQsq}n7ZP>LL=2J@9(?HlWUM{^tY#*vRN8J8% zs*;tH?%y%$u;z%@B5$1B74u!V+AsnLLn;Wcbl(JjZ*4yo-KMJfD74GEPG6}v$RxF- zn7LJp$(TfjHE9(`q3UFxAk-te6`#_M&@ABW&eQf=BQ)ArKn3-Q)U*j7E$s~Ji~&vB z+<=Vl4G5ewsk4)rfpc^*6HK2h)?_#1Uz$K~&?-gCR!x0xn-p$+)QVV#*7E^Y=jSRk z2XHYqc42AxHt)7WTV#r%g#pFUmVUfjCeFB9?>AFEM#g#z*eb!;`N9+~uw|Tpq~f;x zB?4_K6Ts0$k?t@wbqz-nYnZ5axc0)9=a7qkXH6XOi2wI=geB(^bd}#=0O0D6Ym=6> zvxs4xId&C1KIU+D2b9BKe-u~>!v^G~$dJR&l{2x&CzVNsg`9 z$c1!X$2DM*QKV7rE?wgQH>Aj!?_@ZojQ%_cFk7YDUJlMw5+pk~OpSv9iJ+9Xb4o-~ zB>~kNs%X8)G znmeMpaJN!YQa)gA+TlF-D#?{ci0?j_2~n_VGr&3=0Yg$ z3H>+M!(pb|=s5StFV>54+!KHUl*Z*t;O#)xwqW;axGd4OUO@iajLjqLHY*Nq+#xlN zE!lb1R&7Yq(j`alh|Qz+_Ko$U*EWpxqoAp;8t)xTrxtP+9l2+8sXQE@t#D`p+=ET& zuK~$HEL&p?9cX?w>6lh|dHaW*Xq;j!9 z;qj{lxq=8Tu=ONx!}3r7A*Z)6JL#`vNK^c)?GZzQ^%HhlM%u0+@~1lSK9a3Uv-@5` zd#BS(+|ItfSANcqzCGcw_2!VEU5moyIAVA=jUE5$skoRHD_(-ICE_=~e+sjRT93{4RyjLv zoV1-NAz;`S8F6UuqI_S5pz0~PPEEY=^~b*t-#Mzsp7`{sz-{w3YzVnGO?yLFLu6eHBY?uOTS05Jo-aSXPrj>wFj|yz3rqW zaKCWc6xix@>JD@ZfCv&{;w3t>+ES`-O2N|Yp}EAG%hg(Ho^aeVB~?nWUC z0b6lPVD?`7@c!`rZm0Jir}yz-w(!jh$&SieDxYjwDK~Cj{ocWqHn2p4iNVMO_1NZ2nl;lrs*g$I_?#T&jLN}YIrr!k8RKPp$h|=-o1==e9f14Wz7_y zdvRL~EgT!~00!1rb^uK|Ym=6YjlDN`Z#wif^ucmAc*4ieO|?d6RZDVzcnvwf8Z(zG zgEcFfAAH#>SU*f~Edmm@4(9yos>XQ#E#gt5wbim3MNiQ_gIiy}u^TW!a4z7+v^SG}?@2 zJuNn0Bm=w|E}H!)fP10Dh7aCSU^r#F^kF@%G-oFV4D``k>WkxuQepEF19}V>tv2&m zPs`08t1!I-(UO=8sf$4^R&iRFCE^4lXyg2cQYZr3KmIE7suA`n>Cv)uMqAZA80wMZ z>Z*k62cl~+3~=VByfPv!a`V;_2T#CLB`7~Bm)_7N{MGfdPWnN?Xt7LN`h8mcb-kKt ze$fcmWNdC#KLN@VxNU1+B!teY{0{UIxCsrvmUP-f{wrC#>^5= zT}okY^z>wJ$NGUTrwPKOl&kvO#F07)7mv+^B4o-*dl6Z+CrSXs3B93jNy=j?vI7Ov zcq5IcdqAsehx-z36`7klabZ;)B~p-=`jlR1jA<+BJ1^fuvqdr+g#M}8eP*z%G+etx zX7##MYCn_V#i`qQbN0kPo*GLlf#Ca-*XQaJu?TuNXH%!ZDV>3`547C$q=mCw6|f>? zb75dL<&dHJ-4_F-*G-vg%`gokeSRC>I+sZ!sTRq}yauc0p6o;cz}sNh&&~DDiX* z-dCwqa`~;`@*6(rro>74J4H$4?&V(FF;Yn+n#zEqJALJG{;{xv3t>=98>RSMan7+a zeAKSWbFj_57DFYGF&2GFxx&76`co~t9H~9q_$K`}J3u16-zeD-CiCEiFm{(O(2XI2 z#0zbK9iLYaJgZ9MBLeFcqP8T}sWc|HSe~eaB1@TdrRS9< z)V?{8Q=JdTvHp6PR&t9BHWOKq|5MExX7C#KKIDMRwYUTU$3Sw2vbizN6ONa6)QJb- z@3_H@ZMH!Kj<9uFEZl0~>tz2|Jm%`W-8hzw?S|gMkpPSsC%-DZlvgU!CP^6YytS2D z0giLDQm5KlhsK7=sw>B#P6aUSVJve=Tf%|9%3vK!3Upo3zx37NZ|6Tv9Kc>N50{&c zzMn=fM5tZ5U{vfl2Z{al#GCVjw`-c4IUd_efuUXKHp36XxUxnXbA2j=;4=fPA7HkL z660UiEu;(~aEw(}ga7Vo(4IGM4JMKv?al~7pKHl(8})$b5Ll%xn`7y)0b7|ckk#X8 z+s!cG==~Mj*gVNdYY)&)7lSz%=<}6l-(E+%`ZP8PgGtWoXNhu|Z2~7$t`ihE1h3|0(YZSZQq^$r!_2mO_i@X{I_o%MBl!#{!1BM z$lAck>A!eV{$lvT7uy%g)nVL~=aAmbYSRM8-~s{`V)b`PhDZtE`Y_C?1$|}_W605G zw@I4==8W0a)_l~dD3v8k8&-hrL^?w5jdU3 z+uhjMKBK(%ljB4>#|@{G>Hg>v*~eQa&^MM_r0$SvcP*E)C&pTm=4I;&crwnCIER_C z%o#jcVr--G0(@b1gC7Zm>c|qpvDHoZ903OKBXuL)rQM((luVhyy*Z#IWV-+@%~4^$ z%?JROw4i~%yh>wGuFagxkUQ}*YZyHy(kzY#(X-w60#Ol(0Bh- zQgpc#hcJZrM#eRJ9Fx2)aR@j>U9GJz9mB#b#lw?v!TQ|N=!VmEOf0wBn0<)WpkM|fnLBtLHEEjW z1rsa86q#dLF!OIg?MHXY((&=c(IL*sA@wG$TFlS!v==X{E#qzj4RpsX1$39U**fq&TBR1FH*5)wy6~LIw#ru6joU3 z6mjn7DsKaa->L(Vt7u5I?Fl4fgR0Zq2KJ9{-zhECJBOB_Cmj-NHp9i4W6MZ(;}htH zy5xOOD#|*%LVOWRfG_p2?RXM!4=6*t?MX1FO_$%PD5>P6egvkQ=yUR7^TU}UN-Blj zot>F#HMNI;beFZ}^qs~xUGAVxsUdY1vq!**SAzn8dd=&mBRTcl1*rl9U!abQ+^4-8vgY{=39J+ZApM`z^fOaoeJKM6bQbkRM#xq-m z6T=uWqw8P~Ynwl;ssg3Kqx&~aw|Ci(c#~pnc?%ZLo}!Gud=d)jRAPZ6qDKf;H9 z$hwmqz74QThEFZIW*BQx>3K5^uU@67KvoWz zkpxt-AI5z!K@8?1&Jae*4bR#hfxK{Yk3bQxR_yrCnSWlj=ow5~B<7((J zk5P)RM=1UA2XH9!#37OoYjLsrSP4NqzU*Z(F0dDdWDhZI3i+~Bdv0I$C#IG zHhPJf4G~O+KQvW)g`DA|6bW#E%GEBVlHV{p18)C=vUiN`yj!+LyJOq7ZKq==9ox2T z+qSLl*tTukHs9o&^WHJ`9{b$;+&S_gk@a;#$iJyD7lxF6)@tqK;F>L0N1sZD};sW_z!&rb{8x^n%5I8(e9Fj?@}ZY)6*h zxwt>*ztbZ41N17!clgByciTUrRjT?8Zyf7Yiv3r;alq&(kHKk7=@T@QfT`HI_aD;K zS<07dw%qMclXwaW86X=l8S!2ut4llXDJp&~ja+U96WU}mlgx`QH&jOt6@SKi?Nl|e zLeg-Qp5v5vm!LmapQcH6d$m8Yy6v&}i`HRD_dHFTb*~-`%i<4LDm9c*4MDU=#cKo8 z6Xiiqaq{1OUqtjb#~iaZdpQ;}?{-3M0cRxjdQ#Xuad+W%df4sn#-sZ2#+95NNmj{D zg3wTQ4t`k|wDrAf5!e-$PThlOb(i~jMIOE>#gr*%^U#SxwMFrQuVaFE;af-5vynW` z(~HgMBNzTe3bCjh+M(zHS)AN&=}#Hn?I9wL!@9hbdM;F-c#wyrJl6Hs}Z zvBsbzi78!)kAEKC?vQV%hb&IYrC;CHNt%7xTZ-VpXUOu;s~Hr&MhQE`s% z>a}AoEsISsi+h{zItIo5YoOf|+@8HCkBEUgZ?bV(a?zFTRljvzfoq1uv^OVWRb6Se zQ3WH~O2P~LAZPGyYA6PQZ0%o(i-X(VvSLb$kotht@wcx~k83zQh&oh* z##KO6(E=5*?^Od_=1di_+Cg|_I!pfBT(p0#2rFVay_uux4)QB(>zJd&c2V2;7Ckgp z+ENaQtDc|gp24|jrP8y9Zo!kXLTNZjn-Ah=59D3Ed&4?W<`l4!I7Qw@fBtw2YxHEq6GSFSW&?Md#sUmla1#z+RIH{6y>7^ zD`B(>G!50BIOz)^cyL*r35zS!(pZRmn9{1-JS_nyTaB)1IZONkj{$s=1RqZx>^} z#`mJ0^g>|&88vzKXu5#PHUr7VR(}s{hKmF2xl)rgT3dL{kp)TWZgxHsrlql}QUe`` z?=;_1_WCy$^OOzUphZ@ORjH7RO)c}1lIl~DXLph9UHeeMgK#`6Mqftsm;~4pM_b1| z$nIs+2Q!gdV}aVeV}OAe-|Rtuc4kMMr&-|3LGMAj`V`fU9NP zEgtZSy2`=2HqDtH`jWiXtlnm@0;Ab1L6zBVo{V)~#R@@G^1h~k{Hcr~a!>fLWMyp) zuQt`PRxZ@?1<&X17AM{L+t=*od8s>;^3XdNQQ}?jVvfMMMG#?Cpo35FqK4nh*(lb% zZiw3|RzTH22QGHAM$ik>S)E|92C+Y~|J8PKCTyfkc0+58b$0OP5Xkd&YPUPE%A#l+ zO&AzWgm6YWcS%<6tU!%kndiJoZ_PTB|F1YNt;EP64_A(~E^mi5dTrRD-3IZi?XQUA z{$9rRnni!U>J_T!$Ce88@l|Ypyhz1`v8lHxX5z0u3Ir~Q5&4CoY9HRNd<*DpdYa6Y zAk1YR^7z76TTwrjBj^{m>$x!vmVBC&a!rIW$8>slU?y;4CicpiBo3p5GRt_sGbkEI z{@S_Hy22-XuRe9MEww9sETzN;Q<_XbNzOQi^AZNjkF6pp{n@hRy6Cs)BJRmT?equv zH_6lo`$MCoS2cs*6e%n*GC(2OYCDj%cs;U&@2S zAidiGi6bni-p1z}@$qt}te+b>;S3B8cg-w~JL^&F+aA1zHqX0`Kgo8X?QkzuR zfaHSjW)`3%PG54$j(Of>U-lR!I{a)IXqSU|-LL2tP#(8vPq_!3vAu=LDvCCa@-|XZ z-D-pyxFYhvdRIn%q2QMxaO=2gPAhp7~8e46Bat@&j507mTa$V2|%?Bfy{!Q z=lI!?S+nz+3ZVm76 zrb-} z?O6c<2c5~WQb+z*q{}DS4eS((kZY&9i929VWWG(Uk=uvgUa-g&lewCM-bH|#_SO#e z)?;0nyE_M6+2u{F#rBI}JqH_mHmD=U1s=kGk@ek7D&p)_iUX2r=c$cPUq^;*hnF{k zDTs~TTQY2S>d%w#Fct-f!?uYv9hrJ3enN3tj$htSfy4CTr0Y)p2;w${A~gdMVlT!m z#Ixvef65_c%Y$9XgKa^FS%Csg(bY>k;$St*lyVIrCoPnnaF(BFB#)-sH;@{h5-Y9q zj(!E4a?E%*rAu1K52_ket^0X6b@(@>!^hA8vFA=m@M!dCkEtbyMIX?z+p-SXd74G~ zmHMsZlLF^U?^o==nY>rMYZ>$@#z_|3A(np(BmK&G%(Nm_>r!F3rm-S$IMsL*e`k4; z(|U{{edoxfHQ9uD9UW zpS6f-kjJ8LxQuOY3njp$>?Ab zH{&CWAdd#SN)B(SdIbYGYSTrx1z zS*nxlqb@C44RL_=Q@9E3+V>zQ>jYWZhUi|DKX!awO&9{!34`7D#zxy^nKQ#=;j+#Z zl+gI2RCntVnyu*tl`IEQ%%Mh8*E*+B{~CNfm>o6@$Jm+L0n`0005pvTAZpSy!%v8z zN9~Z<)8BEyP{$rw?0Qpp)b zDXH5URjmsWZ!5<-N~dzVub0B1jF?%X=!i`tQ|kBwT30!ey0#;Z+dSyKF;JA}p13+I zF`ZSStt@ULTBS7r$W;Jj4+#Z5NKu5FP;ZI*+(Fv7MRNRAC5{=F&ZNvpHMH2x`eT$0 z4Z+h`5YB%WyX=kHKwao6BUvsnqMQSqXwSoS*F_y+|6`pblc@POY+NN!b zg)7{8MKOxpj8@Q_iI49228{msVh%&zJOyq%%PV{40v^91|m%Y6dQjFL~8)5B5tA&F@mu zcwrt|yd8jzx(#bEAkKX)rov+Pd`+bZ$;YZKt>{=82!;LejXEpny^=30eR)9Q7gWm6 zIart(OXm@lL}_EHbp}RLj#MLa7!@Om71M*ljhnc_#LPiOj(T5LG)5z6@k%rY_Ie-`= zw-}Ho&sUalq)!tbtQRAs^gkIy2gv$!?&$U7)`p~Z>Vz?L-KH(vem30~dMIK%RrP=e zy4M!7l>7&68nZ%=c7Ht8938l#9EXHJR}zY8NyFFf4JOH?ndQAaV=3QK2EdA*b;!D) zK@n?p{bqOP$c#9m;b+7VC*Be@`GIK9qJ|$zd78aQl8G9Vh$Y-GXGRBwxQC;?cXwb^ z;K?Wksphnb(|xw?h`dNz>Vd=q`fw)B z0#55p!e8`#5n4dq1J0M)1scWMRi>0B*+`xRk=9L6~s2e&G9P(($Y*MBRmED9A1C2f##+aTH%+TF`X_LfWozHm9hhUf83xM z$d9HkqEqPDLNDqiLoGRG)Pj#X!CPZRS8s!?k=4mx%kG*pnV#cMDd#&YfKQ_soY!>H=IJwi} z=#c7mB9B>9t0H+FoK|ZRP&c6VSG4t~lrU7cLU=E^DA&p@op6rV{ngFsTphBUQ8b5i zGKzDf$UT%~cSZr!O!d{6Q86!q8Z(Tg>wk^|d+zyV^h)%MWDmurU(a}BC`;JN(itsZ z)x{)UoG|7ubbFj&lrUx*FDU4jyK;~e!@7sbr)hu&-5rMd z+Y{)vAxfuvS~=l5{tX2A{k&j7;tvncJg1EhX-C{7X0#5&jN*s>lF};6D{z<_$GXsiLju zL+UPj++0sub2~~Pp4mGtzL6((7G3NxgCPA4{9^G~QP5$P%3^VqGGcL-#Fi>3Fstjo zH6ddORhsKffex)oR-<)@?7+&^KKvX7R2<>t_nE9@cB#FcR3{Zm9ueMob~d6pxJ1AF zz8c^$=M6DsJp$rr`h)~ac7{3rW_<)wkp@rx)Ej9H!R{WYY@3C*FuR|3dDL$qiUoT{ z3h(2SjK8Ix$j~RRBz0LLO|=9)IxwZ`s}(}Uwm0oJ2&Gh`SKXlqp?}QN4=YO+y|o4Q zDyB(GJo|l~6E&Ajm3kx<7NXTO>$Bn!I{=z^n%Yov>c-F#OOy~p-R)~3N8GFZvq+A* ztpbn9ebyI_&O`_EqOc*rx*Xcd8)Ve5Bx+lM9ZOg|2{s&mTyF>~QMR_RA;AhcV?s`s zqvx_5Y@0dgiY#dhnx&sLd}8Jxt8jc+sC&b;UaEA5SPfA~V_r~O_CxQD`oNmpdo;*) z{NjHlUc z>E627ACW-&lvg;l7oJc%fF$F=E+IF&Pa*r)^f23q8<)j%PZ6BicK7-oQJ-7p9=^EO zg(U;t{T3d?2X-03w1PmJVQ3wQ=2z`YW7l?XG8& z{x;zh?G-*wYxb^>x3pT{AUO?lN84wv^U{OP)1*dRc&G3zH zwr|ucsoTqcd0RT!&HRc>5+_GUM<@ZFDS&HMG?l0W2-H*Sc6_TK0K z)gi0_D8C7mDX#3$pf{#$ z1wP4W#1y`pZSgUZia-a*lj({dFLrFHlo6NpSYxQYE>Nv&0aBw>S%2UzKV-P}9C1|k zGt0^=ES3SEb4X{O6$fh~v=q35KQ_mN!1Lk2Wul6emPr%xP1@rJpD}VTsJ=YfTvyx` zBW1p#34$C2N;{zUiV<`9tI<`B>J9rAP4!BP9Xw#V)+!~5w&~cgV7OIqI22uPI{2o~mXK|p#}ny6u!r6K{84r9X;*rby06@aYEb(7C!U0VqWm<}d}hYLU^ zKz+VFGq4hE3IZoX=J+9)$l;pk>peZngLV{jWSi`DlY2*_7`LIpe10G^!Y4iuI1Xp7 zE(=7lZM(}#Ft*%@(K#?i<_9HhH_hG1&3Tr0Ia{u4_e3f6=u)`xUceY9ZeqvFyQrQI z{c&$ELlFgRG|&~*!)QttB3Q|MEv5MoADoI><#^z5e14T0LzLAoMHdyJ$xOQ|Z}P;h zxUdiSC8gyz#bmvD->tC9J=bdh&{Sjvt>!j@`4$0i@T+i_;o$bI7Zg_*6D4Z8Xe-$L z9X`hR*~)8xRjt+TC&MeF2{bfZDfB=Yui%m>aDOr_p#)@im=AI0QwgS9<@`NnxIBJ+8?277k~(&{J=;d#Lk|mD znDjXrpBAP*k~MIFNXL3WS`ZdsG?6u!MN$$xEP1}nxxZps_+Y}c1CV$!r`tn>;_XFd z?{Rd5;Ee6J+FROmQm>r{RKC&QwAGD(9=ep`C*$;~Nm~U$cOtvX zm*w*g+kk!2A-^QWEz@QX$pD`o2=-e5?pkl#rr;vdjH2Q?Ke+p7U|wGoWy5Q?qvCPd zc)fZd8TJ{IPF!Ssza5i_o0D+J8IWVVq(*Q_%X;V5K>Pm%et68jMB+B~IHEPG9k2Kqq5beo8y~ z3Yz=K1AFvqLG-NDxIsf)q>HC$Oj*n~{rsV+c_a+rxlP%j2>woTb3 zWF2!{&>=Uc+qwIjfNlFQCXdxUZq{m$FeY`H@ma!uB7!B;(l~fQ%s-wyg#x{-W6C!U zLRs=2(asusGWWG?gN5ywK-{~}NY*UZdy9lyQXjoF552KT(~2>_^^Pr4dQCpnI(O1Y zFU80TBY!Q&&fZq4Pr=HnJ~k*cdd)dK#3bN)(ul~A$Ll;ID%M$CHmmdBz66ghVYYT( zeF~4S{LTK4Iv--DR$tC+|55h-P4bOz!f(_o{LilBB$S2yFA**T1ej>6;=*M$0k}?t zl(=>Y5r%frs+j7`1V*7vq#loBcM8y%MAX8TL-!z_1WWAFEm z55z7_E(4V-|FHAqhXBIO@VIeIW_1w$CH6&oJFQ;ICqsBZeH9*J+xEGbpU!(?b}9H9 zkYDGKdIHYs+Q)YvjR1*=vE{_AN<$w_eBbUE`=;20p56}RZb*xPiX=4NDuUf2?PU|R@(Z8R za5^_3c@QO3K6O1ig03D$kZ*ZPZmPpbrF#}_vx8@~?hZ#0l$m*wO}!RH&@&_P^jb#Q zr7Y*9oGY_lEBSg^d;jV3ooVkeFBQS_9H zi(@co)rxcGaA)Qnwlg5%s#X7P4SI~F#p`$%Jnec}7gs%Mt~m~XJZdOaQ5Ae8e2vM$ zU4!Xk6hlv)w3@94PhSbMr;n}q!H;We3{R1MrddLM-k?y@kX`b39-n5IxU6uW284v( zxq0 zV`*K~6~Es$Y+*<8SK6!RsblYdsS9}jTW|*sBO{Ie{P9Eb>k02a6P}7$ec5UKZ(5aa zns0nlej`%uf5Mw4K{FVZ99VE)0B9u7LeiyX02Lvgq|gLU>dLZ3awO)QCUw1s(tEgI zz7N#Phj+xq*h!xmW8d(yx%M!_{o%sn_2V9@lr+^#oNfp6LWY4_e>;eOIut|c zYSI=({={_wm_TX~RE5|$CUW^1b?@m*HqIlv>4g*8$o)DD=wJjWXf0NJNfX&N{-8os z8J1O)85Rx>TAko^Eu;{iliK5obpDW6BE7}JXWrkjC~?K4qoCpX7i(!?8FZs+DaNe6 zzd@$3XLF1}k!ZEnr_XOJ#&uYdXomh34SZQajl0q~m;H_BoNo zET+V@5#KMalNNbM=5)%%=OVg}xx?Y|UoY4H=ND8q6e6Gq_4_47$h_ zuoHmxmYqKfh%*%635?M9-56U$_`4)I1Oa>0`J>uTPj)kN^^&O0tp7<1{Ws4_OsFmf zwy#`v3Gvm2`e#Y;D;x>2p2(m#9hy zej*AnS&#=AUnO41P;ibfQ%T5udA&qa7l&^0^7`-9L!Jh2U)oIR!M3NV37?5N#(Ei! z*~1US_l$*9rd1VMRp!|ab2?T2p@mv0jXt==6kAYJrSjCbeaeK1c?jO-1(|bk4f{<# zE6~qb_8%t(qj5YAVg7~G4#w9uVPlfMSl2;zF@bWnTxgr0L#r0=Y_B)I0LASS1@}N$k%JNj zwK)u@g5o4xZxLj0wr?ss73j}!ix2E*Rngl=*Pk{cIjS_Z%M(R^*Jd#G1A&idn!J+? zW%elEsAL>jQvOJ5_bu+LJ?0+!4+& zp~XCkq3R$%TC!V7p&gAILLo{;;#y9*bMZl0Mw&YQJdsrgfB57sf6SMf2%v%9DD4Ea zCg-UVus5aHo8xR&gnUNFq>2bJoA_wN@^QqSs0=)8Y$|5jA(py=2JAMh zB?k4TAy)oYSy4XT+*)4jw1tlJrpyrhM8jl)EQOuEa3ALn;ceW;UTazSEs ziA)={4r00(eB8m!x9#%S2zgmObdN+0G5ShvkbBOF2zMuPQudYkLEAe3Fgo+T*hK7) zlpsRg(S~4M2%GD5MfK+9!Q~Uwy$Guf(Q9lr@~3AK8wKnP$nsG#QZ}K;=6eA687RDI#N zlN+(KJ9+!H(z_%DxP3hrMACK$&>@ClVLiZDQn07+t5=)^JjK!AGi%bo9h|Q=xgX~i z@ZV!5Qp|Y1EO9-M(3IRkyVTe@Aw;pV4P9fz-eFqtYgoKrG*Y04CR<*0HxzZZW)9as z^4bQ5F`e|?UDc02Bm4tpPgl5rve^uO9+K~0Awr1})^3W(^Q*DC!{6H>JBE^0D`vTe z$SyZ;=K=9Zcah>)Kkng~4OJ5Q+?yOghg^{mxkA3UQVP4E$$My{vmZ+AWt0!uIG_f( ziUT(XUBC;gSU9_u0VGW3Bpclh?U}F-31DEb0&A z41f66VWxPA3$}X9SUDli(ww3;LPC#)lnxtEDcE3(PZ?n38@6yxzX%_27+k~Fn5zJl3s z#IS1xy3>a}DxrKvRJU`2FWCSRyhNmdm4w%wj8vFwp-c=9xIpN6V~AxACiK7oe8ZTy z!89BamKYM|Ho)p}br+`n!j(8}0CtGUXUmRb?;;;QnHd zdze-GsAYcMKH03i`MPoYgJrv-D_%6qLMkGIf#BGFK-8R#c{)uRL)hG#3mG@0XoeWB zyTez0yLNj)h0UwRF**x#4D(n9bNEVh>)xI2raxH7BYl;A2x(||45$>0`jHO3^uFE#pK?#C@x`Vdb8MZ) z4DH4iB6-XNV%?y0#dSu?s?k}EQTqS9XP*y9t~WJ+Tg=Z6j}keojl%~;{uQ^RAP zPa0~iu_e3L28xIzCpqQi$~(5c9b$G) zPdGM4D}g~ik0ug<)+#3Olk~;Ch&BQ;qnVi|L++g$BCRr0p448>y_g_^yQf1QQi&ce z5>p@^kx=-?X9clY7KVsmTZJqmqRiR;kAwG}0ar$r!f%cD>!#Q>F%)?aK*tLiNfJU~ zZ6>3f*amDJK)+0xH6|A{GPz9cP0D-hGWc7yN!PVl7w+*!rHw%6;715E+LL2r7wQH7 zanYNT5y@ZJN;ea1b)n7SwB7G>ZT+h#8f_T3Dms4;d)oRvA!)2sY;0%W`rW^N1~DJ+ zx1FHbSwHHIc2p7-xsAuLE0?I2|0?25*8d z+7Ee9N&jo+rXX{6$}y!>m)ap?8x{Eo66iL?>o4AU37+swo9k(F^1{pZTQA#hJxRYd zEDZqsgfkz=o*Vsfw<#%gT|%|!mCeH%}R9G74)to>Om*DuGUe2%qH z9O#k}fIf~L&1Q?)%Y-%a^nr_K@+%cB2&8lrdAA7~%fiLFnMz0y8y?6*-Rf6}i!^If zifEu>bxG!<+T|Y8qjmQ-7TMq9*{qCDU^S8ftB%KbbboUQ{>QS8VVADz|6$o*x)Tk7T1) z$hpqumQ@!H@QE_R0PG-jMmlT9w!rQDX{kG$!!^43K`TG4JhWA=@X5@;IU3-ZNqt74 z`v&Lr26pZOnE3=g|4Ht&YYg>y$QGh)v-(UdaVZtCMV-;N8nV5Z7G>qPB4sX)n5d1I zB#pRK9k0lZJ=MoXR~2PPlowlI>r9-uHU`fy|4PtFR@vGfT$=vgXIKI=%@i(PEz^Bi zXbM3&hlacAdEzU2-=wS{L=It>(k=+`7PYup`}5P+Sg5+ydv;wsqinwMTC^6fIQ?&60e+cJLx{rfwTo`qZj#3dB%E9z7;$R`?dso^^ zy)?R-WlMwX5V$0|WT^fa9(zMIyRvq=`ur3Bk<5M0ZPD-O5WBAVR)__MDMRiQ(5IVt ztK`=tGCQF|EgDR=BMyDMBxUkQ^{aKT7-6)$yWW@wB~No?J7K>`h~hV8;u~-oe{DsV z@Ip6AY5%!guw~5+Ngb{_*Ljv-9V__?ciGsR(%wNEf1L!OcmOot!p)>Dwvq(n!iZa) zIOHc^Tfw@>%6ow)p{X_Txuv}cub05ec#se2xYm4XzGh>P&kDgC$D3gb=aa)oNzk_P z+iA(WJ^5w`gYdf8h<`~8O+}2Q&8QQTDD1*8jEf;@{$~G?yKV5@K68yU<$$ziY+g3U znD7DPsbarpPsD55@(|4PZQ)hA+|>p8PGRY6)szFr33jcGtD*!Uo^iVXD{D5tymhs6 z2~7&9SrpRx$r;frSwCGN+b?pM8*47X-@z#o&b_3;;74SBcC;4>`b*S<Xhfik@x-u=>CQ1{soENGtJF2$jvjU{`1E*SIGGdoZG(c8gcfZ zmMakGKBTK#AXNlDr2f!M`RGh}?@YPWu991%is!keeD&W5t$ZV2XtU|JS`(-e6jCEX z9j6xnvq^=iXS?!`GK2f@jl5C75B4yWHM3wBD<3Xl%T9jF&M>oQ45g99WnmnVd=EhC z8>xqG(kc8+{$h`G4X)ue&#>lK?1Ky7g9{<7#9~|iEMNTOn>yTD7j#B<1K?Yi@P&>v zbq`_p5^uqHf6BK!C6M)KJ-q_psBqd<=k3q$2d?m>E!c~V|JPOh1F)oOTUO^6~6DTQzOP2*WR~N+)(6BHFO~jnKZD;~d>M|E)k_i@LvLBHhOBQ{D$i(tJ#5h?a&v7J5v zUjIN4Cysgg!2?0xN^golOu@Akd_T6F%4lrl?EUfb0N5pu2Bq#b#p-dIu)4$D2*rqn zMzFQUcEx`=ba{=0);kfFlY|`BRo5?MlcD<_-RNwVl?tWSdyVzAkR}0^LK7Q94xQ+a zun(Ipe~{cO0<vAb(JZ^(-7nEz_ub z2I@deo#tkKkygU0o!x*aTa~Q|%xR(`pjrlRtcQlERmF&9I*PO6%s%|McMKlrFXMFO z@iEEZ+}bmTr1&>ac5K+I-wSI-Q;OqRGg9{(AIV~Ldni%CG&dbB>CFwh*ZI?3JA8w6 z8vHCP9hNPcj5Y@dD)P0}3{N4Rncr#?6ruMpP=EFc!1@u<3wh<||mYh+G? zRE+w61ykc!V6pwfqUL||qxt6e#y8(L>J$E}a~ZUGT&$T?tp*RgFOc9Qs|0KXl%5m1 zQlJBsD0ulljrmsj2-k|u{&tAZJ}q^a14>EPAd-G-vs z1QsqseB7ZylyrwInzJZJp^o(mChEdAGoybj$gD)c36s_XIKX5R-)q3P=YA(KG>-@^Vhk^ zl@znjs~prHU@k3^Cd?PNeBt+IyLKvX7nEEz>+bTl(f1)me}iVrYc`2Ei(HZ|5CpBL z8r!oR6EKI9m8PL!r&KLZ?UZh;N|=K7K6Rl_uX|Npp1924_gOV+qVh#9s_zXedj>Z? zxNeoXPO{&3##h<0P;9Sm;k)f<(D&HvplSxRbjb-yO~Q6HrQ_+^2Q0jBotr z659=7wuhKa;~rR2P9wRB>Coq>6P8%e)$#wJ@p&f0-c9*YCnOWDGa?6!U~ovz*^_LV zl|!#Tj+K8EZDDdLPms*)NHKCE&&W;D%N!6N=)*$~+a@A`uF z18H;tT&W|57k#!FF(2h+4&dA(aVPrK{dX3qL8Ymq^RU{Y(#!wj;Pl@Xo;%F1@3&vU zIrk-<{r|M^{4WP4F)Jr)b3;K_D_zU)O+o*09`()kjc?{}{9hq%5DJB3vp}Gl5L}@q z4P_YXFQ{oeMH<)yl9SmBCpnbH*6|CZ-t>XaU4Ie{1j)CbA7s0!rhqCdc(5I38SKfI zuM?@MUqaj`QXh0KKs&;1;sBWiTzJpz8 z1L+D>s<~j2>KP;=XmQZCMb2ZI@%ZA>6H~1ejX~yaLi+MRQOX&`D!#!i0(}q?0X1$} z_WgGdG{s|Rg;c=(F}auT=mpS;Qr8W@gZ6y{0yLgkCBDVvihy^LSqVk8sck_p4*l># zjX^AZE7N{j(8^^>ok320g^5!($Z2&TrN1pW3*1_M>faLP1nt-{`O2esbGEP#C?HK7z|Ob9wSB zK(k^ba@s%8fW)}SVT__*GdwE2p>fTkmE3;PD#4GOW|JcAos#7UAEvX*WeHMRz2`nL zuX36}-fkL5Q_Y%WO1FJ4B#x1B?1vmTQyX?!QQ1>1tariK5nUY(!S>a+S1J5X9 z&b$1IXKss<+SjTLHXiOxp*)KNP{yWN#kRT_es&W4LB7Ka z2ht)8WKAg^vOtcwsRA5{(@Uw5GpHv!1pyBuJ0-~#9qw&XL}U^wAB%Qq^yJR9l&^vo z%2n)ThH&FVt4ury)j%L3z4J8F%XV8TMtPuj2(k6tfqO9}%oP6x^S;yrrzpNBSpOpE zfqk$W^rH= zOs`^Cf7n_sszF~XwNhwoL4gm5$xisNLrPbSQ&B2=|I-2Jb51Byekksi2>K&CwPmGc z7%b1&SVvX;W0vQ{r1qxQ50ydtAmBmng^Zq3(<^5qzS;J;0nORD2FgOag@-fE!yza? z`U(f|H7b|2dFTzO2gZo{qUy{OV-5jtS=tn#pl1!#f{d&1044#Q-WuvGU6m+9_rbwi zD9^tZT-AC%!u)uk%E0i@{9pz4c1V*3|I9&`)T?x#CqT!csU+d=rFzJmPz=z~z>%W) z4U+J>XcwV*Q%TGIT&EjjFjk3h#9O9+4z*8c1{=WhR8rftyP=zi!AEI8 zuQYE*=4}`@3!?(jUy`Eo&~X@W(@b53iHdzvIxL66&+>(G=fWMF3&;sjsIon-xI*~N zZEtk8UeVQvqpOY>V_PEQ_TNOKE)(>3dRorZxr>qU-WbOr3)s1yr%Ma2 z{lu!v&JEPRa(p0zyuZ-n9MQ7br zTC#qNLqMpqh^AKt>I3EbBpj{a(cyyw;0`a6wSZ*fuZwK{B5;ecK~#-hNDgQtmL)Zp zg`WF`oyak8&#_=x3ivU-H3;(iS6Tych?@N(9~wc5nZt21(6+%2WX~OxGQE7i9D%A( zMf)Z&+|7PzVyLirxzm31jBJn}QlX1YYsp7L6A*Sa7wEbnkl+CEML zo(RSeJXfA7BbQ|z0adiv$Pk3k=VZa$C+5GNn9l8c{=%;Sm-`C#f2Nd^)YUVz_zwlb zH^Vo+*}n1LA0ssG*(9x`1`P!WKRbBcR$!%T8Zi8gnXfC@Qs3Y?1Gz+!X3e^u$1Uiy zPbmLf-;>c!G=mqTW^zLv3(r%{>v(Fd@q}~g`}652>krmzAKj7rvKIB_!=le1WruvH zoL8Jfx8V{S_tEuzaJrypnuA*KBu?2$xB!1Q;BTbHWLL8&kZm0n`z{O4{laFK+u{6PK&V<>n6 zc_Z(cjlmjOS_YysEptm4%D3LOnWr_0zob)S$kF=Ih>cT7c<<1SIN4YCKC)WX8_bd} z-Db9lBgpoyAbJg8-2mdDMq*Wl{AW`JeEi7A=nP=eQlVzKCyT;T8cu&>lDN7BP$gZ&>t}p3oMcfM@&9km=;& zVxXYU)R45!Ktyhpf5u_;{!;HRt;VSi^ha}-6zs0S>QLk@v9TU3Sqgwk)|mY>8e|;m z_#>*$k7>1A*le|oBS`y^OsQeL#rVcJY24I;z+w7_uyqR_(sVy6q2#1`U5gZ3zOzPn z2En^;9+<9Aiu^Aj+?yr=*_Lj85Y^J8zF#?487Y3Nw8(Wmq)?f|2JnT40K-&qdvOUE zrc;3A@X!+SP^dQaaGD9`cpNDnxMBUob!&U17%#cy$R27$3TOLu(P%He6%WYy)iSoJ z9^iXTz?;%(ftiuQV%eIn0HJE&9rG8F+<)lpuTIHk)@x@Z$MLj_BDgBPAQ&Fn9;e$;p0&ukJrCNhA&ax4YRl$2Y$DzELl4DTBxd=hZ+xm$b`P*6$2o zF@w6@7tJ4H!Y>Fp@H_p<_OgXsq{?}G9c7o*I|i3&I?iMV_DTfZI9Z~!zF^zG*}%%k z_#oBT$mzd@LL4}ZRKc>VFqwqgBac0QUDy5^5(Q{lH@EU(odr|J0_&@=lUl8Y8un?r zqGTBT394C)dZITLZT)LNHkWAl%4M=z&AbHCdsl?&Vi%sP^0BCC%3v_knpos3F?1N) z9pP(gU@xkhq;WG9jxK&bZ27yeRR7`;NT7k*U{@fy&Y`(R0;=gWjOLm$aq!1ExGP#i zn%3Dc-An)qDUjjcE*&gNLVTSq3_Dkie#fBaS+i9>IB}YGx)A6!L3$bNb-k2xC_;KF zDFZ>zW-qkgtTJ&w9|{gv-P>Aa*{x~v%?V?o35U}UClWY&7RBNT8)$y$LPgrPqDMQ#rafN&n%Bq;JWivQ$~tL(r`^>_!CZ#d+&SEnhoOagZI2?%19A4q z&5}5>>l`MOSsvc**$j4wL=?H`G6&UoAegxY)upxTk2-{;l66OSyNuv*V=pii%~y^0 z5M6-0DL%4RsO$kBUSUnq9+K8gEC^*9E>38UMCaWlegyOskT+w#a9lt^i;42INGbxaysgCpt@dmyI-Hygf$ZZ+pDtKbqL!b5p_$E8RIJ=TmRB*F3I+kkx zJn?v*v8>(M`3ZCdbP5%orOn)aL*LjBs>M=iG>*h`Xf$1V+pbjk^**DzCtnBZm{LwV zIlZURLbinU^n4GmchAsgUjMXD53G65PzN~3MqZ^uCxuq4zl*|NdEo$^AYFPLUL8t8 zSl7X;NH8;kzoyR4vvX| zh(K?d#X2SoSRZVF2316>aE}Rl`#Eg>jO;>oO&=|vW~7(S&>-kXxsKK#5{^kzv}sT( z{Ca+hZbNFcmctS%TBG)QtwuQC!X$rK8er2${buHcJ<%r*DQA9@>+v zZyTdVP2&LWVE8EGWn!sFa0$-wYeab~WsdK%82svF3;sl!3+L?Z@ljQqVQ^~& z0ivaf>1vgD2w>za#5%jxQg&j=Vyvm-MWWco3SHB-9ySB$uV)dvwTulu`4N*JvM0@~ zrkH63fuy)jj~T6p-|z3(A3xqFFQb2C{2$8RF*@^a*%t2Dcw*bOZKq?~Hai{LwryJ- z+g8UN+wPm}d*1hs^B?<+yYC#&cs|Zg^;=b|R@IzhX$GAqiO7q6vbxT8*Ft@j^yJzh zw<7JDEYzIybrV8C(`&AatU48zX62;S{){3&&a_%}P9YzeA}{>iPKw(MnVwFok6U4d zEq2JUs#PQltJ*V+Q&;L(vMvVKXs*J0WTs}==v$-%tyW1tpo9xSL|#zm>BtqE$HzC~ zIub3$n>Ri;M~N3nV<@h|kLgHne2E*k7XLV;7 z*mg>(Y&Y+pM}UDUZy#{W-qP2n4CZSY%r-D?S;L6t1#$zI&lYGxszJxCI8en6-kEa5 zm^vdgp@$Mlb#l~WYImx4!5M_X5_6CV z0cI7j6nD1lYScC6(BD_mVHX`NPKB?+^o%$CU8%v+VOlq0#pIJ>NblrUra7kJ65%XG zC*}nEiU*adq=U0zZkua!C@|QGqh{}$ zzfcnl7yNE)EuG@5p}%t>01YMuGx{tqC!8~V8+GRn!zcJM`vcrUwRt>;F2toSLu8$Y z4ZC_zXTqx0pC(||hL5WylsUFX#Q|=nmLZ)%%mj|61*X^Dd0L}DT7W|I2C#M%9~r&pn1WYnPc!y=jFNQ0yjS%gqIQMv#TbyUwRiai~^TLRh5c?Qd@Z|SKU{m z?jz_oA&IXme=8#CX0<3FwfhOG0}@>FFk=jOKqMl9<7Wazg((X{LgyP2CDnoIz2@c+ z{q;0M0L75KMzw=`W-s&NTM{%pNC;(**IqRHKYaI2IRG%vMFs;xV<3@L#NDzNxuBIw zNGXu4kgj0E4$??jcEGlPsBPs4a}mV{3F+?-QqmTHD2Xv|3#hU1Mo<$%BVc+~$_A)# zWXvVQUpoWBGE8q_YRvl>8B>Wdovn8tGsSP4lB6Hzif~kd_vG4<5U6#Gr91i6S|PfI6laGlI(A+A9w12j&>h!>Qne#d%*M+YxgkwlV3Og?m8{l@X^n#1;x@E*iB;TMjspLMOGRj zdKI1i*C$^l_?ZiYYd{$m*+R_djlvL?3DUV)E1}2p-+%NaP=gzrl|EA`=x0&L_y2x& z{hI{+#q@p2w9)!1CUuC&YuX_wfz+AUj`}5?zj|o`bWAoP1K}}rSh;Nj<;yZYu>we??9qDPt zWRka8hRdd){{V zcXpN1y7nSNG_|01*`Lq|=e~kD>Mxg@N_Hr-T3dYZyg6%znrQsR&DEAE`zwET@|I6m z{A8zOfqwCvM{87mb}u|A+%U#8-{S{vYRh)vS-?(9nU#x`r}G6H9Es2l=?1soenCXl zk>OcKgscxF`@>sPDatfMKqqQ%;m<)#*P_9cO#hJr!DpU(D@q<)&($7*b24R z*^2x=CtU_<(v=upTS#w8q})C76mnOk$f_TLp{vk^X0ka5yhdSwfZ92PwYd%O=!|SI zN(&`S$~93`kt8id8jvglb&{eI%u1HBkNB}v%T?Sw6xS5YN3;t7iV1ZKyrFbvlCCSu z+`Yhb6eQ#8;n@W20wwv-10o#Cw?bK8S~}!|F!07#?*8E+AWY)-Gwd@xW_?ch{$K53 z{?);jv9q&svH#yT&i_M;?ThRSU&LQ%QXN;sRzu`fLxLPw0gtR@)W3?55E61YLxeEk zgdVE1zJ{#9NL-e{ium-JiWhV3rGl}$!QM2Eqlqu~b-+_zdX7;3!yTW=ttfz|m`78u zf3)86>il@z{dn^D%bN?-9yz$DRAofGY9ctfDaR_URC6PI4NNwon8vE1vFk~@rQuYv z!F)=Sa}tK|N);qTq}UvNq4KBo8QM_=1aos9pAr~PTS+jjJ?kO`2x|f69G}>_tW62U zOj>;PYZ{iEwI5s{mhUE(n;)OEAG6L{6Q zDDA7D6hS*ZCUw_Vmq0iC2)Z;EtyR}egO*PL`~|D0s4VsLV?Bic?prLXF)}2Us15nINZBzc^p#GtUMQ2|ftTc6>pUtk) zp}ZaIS!_-o<*bxJYh%*b7oW~pdMu}*v8b*9)2^+S*kwoMp`yy>6`@)dyNGub9866! z-Os)WN4SL|CDi@xjj!m;KSoh}Q8TY8wrY=E{&RDfALFF2rDg^d>v#Y2_or_^e;gr* z!rOZw^z(C6pT0fh2W@r0qL44}-d$N@Y~$uBVN-!H7FGBXj|K)3H|<~n3K#rN+sm7I@ zA!{C9GEs#OR`q+yD1Tv>%O`%`eH#~272g@9uAB^%luzrN_9*So`)S*`r2?ZOXLBF zSdq64I$<3}*Nop~pOY)B@u~T``D3cf$?S1>x@HR~ zb4WJWD0{2a{T|geBBfKe&VModinC_p&u&|bvJ;5glGd&TLol*ds@yWjj#jfeyByQm zD{s#z>S@qm?2T^whS^b0+^y8SBX$z!4!5mQyr5H+id;Vuf^~2qaWdu#Q2^hc*630u zZOX-uyY*2i4?lw&y)5)`7;xA-<2V8OQRL|?-*Co;f<6V!_T_pg1v=K?N|`A)&Av}( zydq7E9}F;X5U@uQW}zk{J=KVRV2y>GM+DG1NVz6z*P$${w?FDlls05~26+b!^zk30 zGYVjj!O?GPG#hhhlEO4vtTS3b`^_zokMmBz$n7Q4%0Fw8$T~RzPz>)WE^PQyL=&$7U7q4VY5z**xGcEN zkoQ?#o^L53=6;`;7b)tyilVVcpmOk7xiRgz3-faC(GV7gaaTSEgm6WwQVhqjo&TOf zr2}gTWXI;PgLBhvIfhs(_F(QMrBvJ@(dy_^5aTVf*fC}?xxBnz_AVCLL>+6UrrL4= z6O26~aLCMsqIxJQ+L4)?7$ui9dFpqbaRry~tyuS3Ow@b7w%~F65wg{yzbfd$jHVR3 z(8cC|Ju@@3(@0pV60^yjh4U8vQK~HeN=exK++j2P{J#FPSHS=Mxqg+|B#i$Ung1gB z!WZEeq7-HAkQotw+BQQ;rg$~7c!5b+NHvrV#5C(bMY&J|Z$)Ss)9$KT?i7=VlD|a7EK1 z7I{-#LFVP0L!LcB>%qwHrQ|=nUKnH9WDov@KQeJK<^O38^EQ@n_uvU@r6vFai9wap zD32R#u&4PB3=MnllqT6xli0i=Rh1pl;+3u$eD2DkUf2o>uanKzg(#Ycaq}QzT4lEI zh^p}yQi=Fkr>yX|6VqS6OYwe0LR+-DKq}#x2R|lNY4ss2uuP8rrF-Qnx-f_h5@pI$ z=KUw*zS>P)9JjmRydm_%`gTY-2mB}^+ik(nj@H9)Pm#OyM0kk=T{D6tj`ZxPK#xiB zGJ6`&iFrcyx#wH`6*Z~UfJC#jTvsak1&+lu<73bv-w?|0S34(JzCMx z9;a*<-@%=5rz{XgABD2yO98k2Q&V8+_#aFuZ|4YD6Y|r#IVtxcU6F7sq0~Le;>)SUep>N;V|D$W${|TgjgwYqp7ryAeP=yWU zt~~hs*UYV9)RfavNTTm2Nk$-|NDqnc2xhcB=&UbMhOsajTZe&L|IT7LfvQzdvtqO= zAfhf?T@pA-JAB5|aB<0VtGQ_jWO_~Nug}5xIN=R%hDtrPIM6dG~8S;Wr9^ zYM>zB-*7{{NhviO`>KlK6-;v)_!ph(-L`7|fST$#wZnQ~BG{u&*>m+X_|^cvU#K#W zU3~(?YFx`4fZ$BP>kJY#2>}U*m6eX)H(*tQ)UGKpbfFU*F~u_nPc;-Zuy@{Ht}fOH*}m?)o9=(S`h!fL{#1$XU)E?vEuvN{)Cx9gxh=fGpz8o-#0jpOV~@lg=e z?;=#VviZ}B`P0C)U084p-of7ljA_m7R_OuI7U4?6%!?|Q)(@Zsa6IyTb3-2r^>YHt zS15W7DY^Aca4%jcpB+tZZUKw4ja73W{m2J6j9tCyO$D=oV>KL^9`~kDZ#`Q1L1I0A15&$x-SA1 zFUBfpUf2_%y*S7*5p^t0Hw=#K+qEG)TPxIQth*(o*%%XcYMO9>GR_}f)l|cPGKN`r zVSRHXN!Bb9SGG35!GVgi+|S=>8fzX@K8!*px`PN|v5QO*lMEU0j3pkwI>Mx2$~N>n zaFGbZiZaX~ut{#s{cz7Ll}$qMES(AeL~y*c$7;_&qZ5*FgCx9rA9||d_0@J3Wz8#k zTPxNHv(nV{4%RNf^X8!^v?pS~UCuFT?l57~gfO~}sJ&V~B~>!ZbSVOzQvOz+#!Xzi z<$|GkXA$j|%moX0sxI2S`0;a|{{}RO!@9?W8`}RfAZpbFwj6 z#*9}nvk-~mu}CCOc3Pv54+dY0=I{2{r+v`B3j8IC?CO0)oeIXW7dV)l-=VoTU>;Yu z@mjaw15i&O%8sNQDEvrRgKjgV+&u#%WRn#-L$D>5RFdn>s0|#0ft)%53%cUxQ0k$< zB5~v&$NNPI7wG~->{y12Z1r(YrLD(2@CA7C;SRPg`ZT zzC!E7y*WL$O(~Hhq<`Z#}{kusjR1`dISihKAo_REgr@EeFRtIC5)`;VK{ac91^APw} zpARMG(vz29^bi?oeSY8!Js*1FypgXE6dU5rw8mtVtkk}CzduETOo}a5AAyD#@}Ru2 zqfn}TqBcvT!?ZEs6%)56gC7!_CLkEw5d(x^oP}(4CX!7~ywf)pH6`SGdv*cafphQq z?swZ%rINNV1MYRvm)UPg<%(&uDA>gYT#W5Q#}=+Zm5MtLmMFUxyp6(nCszG5a{Q7k zr*3tAfH{?qo#tH2stouO=pA=H=|N-%iui;r9y6g3yze^6C#ywo-&R@LhO63n z{ZVzU+VpQlN0}8#^o~#`|2-2*s34q$vTjcjO~hO2SVew4I0qfbN7XeCG{M_8*QAQa zmXs@cedAEl6~5(U!;w54%v%bUdP0T{S6Y$4()A(EmZ_R1{FJJ#?|#N?D|eD9)hi7k#0p5zNEWi1Z+coXH0#5>Ywr(M`0Kn>J*r9S#dBrf|Q*D}}{gHSf>l@#}W+3cd1@7}#drvA%7T{CJ8p|h=B*L3u zDK=GW1sx&OYrEksg|^@yS9r+k8tCBo871Fa0M4EPYlP$BkJ7}BgUMTg85ENUj8x82 zteTCEj_0`8h^lYAdLPfm!$!kD?Ngf;EQ6#1KXiy2cfC*WiKb>CqxkoSkwHB2`AQNr zK74W6czk0BU|Es)J-LJUE(V1+67h@YzuN>-pa7fA;SD-GA-6A}nY;{101x5Q7I@V9 zK_ILXW@HAga2SM`svChYe?S>T@7(K_WUd#n-5cRZzZAkP?I;Bg*UFh!Jw@XBz>>0g zp~;i=a(!^!5kE0De9m*vx=M#I# z!-Z#v#pEY4o|JW&%9Yl2T)j5p2+3%We>!9+;GGD1WAORSRe+m9q48^*>!t{|X1jue z*?W?oyr6sUw41Rq0~J+mj-Sh_kR8*TOuiiYuWX2h&guhnN|b2%o-nnikB2~AU;kjx`HW2^ zqD`e^UfNyWtW9RaO=jZF*O?z%sgISRkKT83j3mbgmR|QEKrb%>Qw3{p+o{il49Zgo z5k2ggo8soLw~c1r1MLBuFhrX$$6XXBI2ciT`F@t{I6V!;w}Ac(QFjb zs6PnWK**F^`V0FJ7#sCT$`q$t1c5i?+}+{^I)b2{uoU|GpBXe9S)r$9?We(z8H~e; zJ8xA~Yx-;oT8f#(o!%*mi4kz9g;J&{%NK|SFKnj2su z>L)akT~nRJF7Qe9+#?}zh_!H12FR#bxaxrBBECnj#026@7R5} zQ7?=+a4$3ob>%gGs#|#{jdY7mbjg{z2V~yKIySb9m~4^}{{q?D;Y|g;M0UcL05YRW zb_P1MSlb6gQ0RKg;(()ALm|$tfB}tUf%t}EOZGByFSd8c z9+-ezUkK8yoM6<_PcKc2d2k*(Bx5~UFG1JbEMVuoRopetoLsf3Ka3*LtBetN%z(s9 z+}R~!RuO2GYy9=+9E|jPU7DoAberGtsmU0w4b8GrSE$27jmm;%HSRaGTcZFG|7Bzy zo2k;|D53WYGCv4$WmfrZ9Q3cnCyB*{0BtK)sVxB7L5E+IvV<5F>!EFkLZNSmyZ|^a z+Ia}XkR}dha=^?2wA-yv^BZQC2^pA5lK`OWf_1Gk1-<@HOf%;=&e9)sXyBe5{eHj< z@+|?#Z5}_DJ}6or28}-xO)!i-%ES8}{~N z`UafhsZg{!2-(eFlR3eOM!72g;s^^(x%1u!JL=d2I~eLrem>yjxcYHoM+<~3eFXE6 zccv7)8EFB(NT?TdG2#FSa&b_Elipj1qnU4RNSD?rhK43$5IB`nQP6knfpK$|rA-}M4b%47ZECRR0lba7&@)Wm8X~*Ab@%+?C{M6tewZ%Y_bK-ie zu>6+GEHRMWBbem4JBKq-N#DZy9v=286+%1x?lLwqo1)S)a| zrRFdS^qsMexuTq(O3+A;Jx8UMrO<8;Wuk1U7h&msn20=XmEm6o^Q}^rj#cdw1hfaq z|D+=p`tBEPEFlGH_dQvoM zkum$%ucp@I3e}?`h{_G0QXg0wM6aKHsQk6LU7+m32fTb;pnM%g+$E1Gy_!7LS*o-o z>BM{oN)`8=oTVKdfZv%+c%0wHwXU!d9Cn^+E$~DpbUhFGYh(t>?1*h#fcruJS5Njz zg%TPuQ8aL$ov#~exxDJd}+E-Fwl|~aw zF5-YUxVanR(-a5bMw3FQ6v+`%H-Iy>0&ta3Qa|d5;s+$+>qt(fIK2`auxD%)dlZ2m1Euj{~beH&hSO`)40I-fPnCD@W zz-1@eQPwhW)vXi}4yrN=t@FWn3NMC=X=aoYiy-?vcgkode5G=7LN66>XgnAlMU#Eb z_nP~#`?{=EMv0!`QL*8&0#1N}>#Z~2t$m*9JWpl3!$g5-y7-^bOgl3CqcHScL%I(4 zINRV7R^|y)wEFq0-HIRNy58UD0rsHO(zFh+_GQHv(k>u0^QOt7So#cL@Y_nUVe9 zGrMK;B&0bvq`EYy@0aST0@#M2t-pQndv7SKq7KtrE)yqk%?Mkj09D7sQl@b{B$1h_ zFLHvYnUP8b)u$GuIr9nG@n6uOIuW+s}~YrnVRC^m*aylsl05X}HQqgEtWerc9`{0B~A0S~Rq z`%~m(Yb_?rp6SOeE?li9by*wOtNotBMk9zPn)7z?i7QFJ&HgBHtA!nG3Fd$anQ>@0 z0E|)XkVTEU!T+zK2(c5dMxYH-=EuC>=;|5E67;Cd>$1f ztPQDvoj0gOQFl+*Do#!wq_aUR(UNN^C+bkz>5AEMT)Scu z;}q_lWDwv~qMbZzbViZ03GvS-wztIJWL(NLDAsW+?(x&nXKnFab^hUQ2NOxp6>hPf zS9k;Qk1IBrV@+#?2qo!)xPice$^_Xia~>L#`5B!Ce6hVo8bEA)?xD z$DWB#dV5qm5ucSw;fl9{C;V*8(TH#zRY?I+k^1d@KqNfuc65}iACwX7Afn8^E)_l{ z409Wqd51~?h&@!JR%0UA#*l7zTBQ5*6ybnq&#^;6GyF_j?M z5WxY;G+cU?FnPzk4(HQVwImEno5-?GY+*-AAxJhKs0P`#Q?fGuU?rd>Ozh-3{mQ!z zi#rfMChQv@rT>$^`H|<6m4-5RXdCf zva**Fhup;IZ`zK_Buy6okeAjyY|uZ&2qPeW-Er#8cf;C(M(kd%kNfuYNrAHWq{sFc zba&SJUCf?H_k?$`*dj1p6d~>K$NDBA!Lf*0N*uq#No}!s!qgv;-SS zKe2*#h=#ml|LyGKuR(&SY1zR>8kbC}LrJ!oRd03)8$=2C6TRLu1>PMn^J}ohJMoNU zsRKbW()y{xNsPH1Id%rPsJJefrlF97jj%sHPQdWCPA_FG-Gp{zw4N%dtKU#7bU`|P zTR8AcE^0fAOw`^kbbFJbw`(gVcQllsy9L*pYUeGB{$1!}9&LwzLSE~$+1CK~7xe}| zt=KjoW;E!dib}8zv>E{fT_g#3%qT}p7IEJUXtNYeolp9?FXVwZZp9GyGhhSAu-^ZuGCe!Z|^hZv6NDwd1f`+{Al zw*q&h9Ax=D>0L}Od7cRTu!N^Hclck3(-9)q{v#;#;X5pJDAS>{yCx3V?xLCWy2#7} zr@MyN!S?g>+Tf-KE#&rUlAPx{36^@2;ngUd%H&0iBEyKe5ikm4-a=? zuB)ErjM4SdUgn)jpJK`cysW6u|FWvgImL0*n4hy(o2UCpg(7O72<8tD{hh|JJ}Yh(7Id9dN~P+C5_QHk3_*z)gjX`tF16ps#W8ul4Y+#qe5yIdBzIS!`wLAq%IBG81K|>7!TOxySby_#nqA<03rmskHFB zHitaUYVtfOV@=8mc<6?cJ=W2==Nf1s;(UX+Vf;jKLpsk5R+!qif9N)95%JN8d=C62 zevV7={%7w|cE&E&CZg{4c8<>fW{U8O=nG$@U-18&H0(_7H^Kjf(mygL}?^*ynw4*=%L_t}~C&XXB%GL?Gn2#c6+*K3}>v zjVc-;B%(SzEi6oAeU_3dI0w+U&DUNao7bzS==-=q) z6e`JLLl7M(f)4e0o8Mdi6Jd7t=n#-jxV44Tdjc5K9fx@rz?6c=T69Qa@VMdPI%r+b z`%3|tDeP}?fdYZ=Lds8Ms*lHx)Eb=;csFG)@4P`Yk!7eP9v#aO8?q_eMp%%oAJ~27 zf~Sf@1|1mo^0z+lSqWPtG^x|FA8H*4!T64`C6z(t4$H7ZrzUi}NvW(%@?NJz)fHGi z`?Yssblc$eNxXBv1w_r-owfHo>^c6SS>*$tF zJtwXnS_iyA$GCEk&NMo4lc@$X^7MzL7i&f}AsifGWeFT|kdm%u?-YYBxIe7Y4-{Zs@lsP$ z6Z_nGb;-^mR+|VZYa0E0J?4`ig$Wdty?y=FGxWp6eGtpaLBT|*lcb7N%3fln06uxV zhf_vw=MK9h{GCn*6TF9BkC~U5Ki)HHw%n0>g4{Lrb(W-Djl~f#!uq0y%tNx}-B4)y zk1!^pWeX!eYkpxrMDw&?6S|Dn2a`feiijws^q5WfGvqFQ-^Jvyf#E>j*5c-vN2Bxn zO-$pvfEPW94EAq<^YsMMSSmZyCLtG!U6>nKi*8fWGqYQD<*`WUnsj7PCX|PL)97OZ zU=B)mZwu~b>#@dL4f+~aB)zf+CEa}5Y(`$=vQhSmwU?-33pVGS8g1C%I?FZ5mIwoL}&FLxUL6h_n)+;F~a-=jvIO7d6-rc4GAa(gOn`f=c?Sr zR!0?stSD11YU(g{2D5^+n4{n@(LoDKeoh$EMYXDUo1CSMd;n2kks1U6>a zH-Z{U0!@bqDRx$h-M`{1OI4n?K;&B*jq~O&ytK=&fy_v!UTpO=6k(Y zm@L{~?G_ISTJbWilaClR6WnArJu~#Yw}zZBE*<97zKBrHw36OZt(!>hE-(zDwNafl zmsUQ`&1MEmmbpR1rkTt_<)iHZIv8!e*d*aPY9fWHi`qL23@JCf2}JO;t%M{JM7AYvJO3alpNj2R;a`0 zhux#nrmc0@8CBUd&J3{XTM4nEEOUi-r+BuGlOs;UI$#9SL|I0~Fos;g9xW{jX*?-wLp*sZ!qnz3-J50(7m%*?wwy2m=F#Mx)w9afa#h6v#SsC+m zS742C2v49;&H0Q4hD^5wj{BffKXN-n?m37WSZYsf3vGl1p>nrl$QR`;lfZB1I6dPq zTeFL{G4|UTyKCNIKxY|0OP&ce1@>Yet7{ zxCQ&*TdJZ%*7?5o)L#^x0COa${Iqn6@syr5B@>G6-v)2T51RsW_4SW`NUBnew$vZI z@k9YUw?~hRb2u*cHgj02Q@I)$LodNSFr^uT!Eu-(n{$Su=4&TJnoZ3_YcZ1KG4q#L zP!F1Gk#gU}N3Std1K7Euqa=2rUdmUiXZ`Ge6?dy(D6bDd6nD=dNK0WPg>yxSdHe6G zl(Ys@H8F*lh0UP>;8kVi5;^JR5l3_BiA3#9#py(zjm2w3yO9hO0L!^yfbtG}`~^v( zI3=r_0qO-=q7uq8UgM6gcHk??nge%nNHg*lX{3-;BsT%+5N;yU9=v22j4~-HoorKL zD@Ax>D-NsTuF%4+B&8Z>vNZ2F__Sl2S=&GZPYlgDl6M4y0yj6<88IAj#etL!kk+__(^*NqTpFwqyu@{jHq00|F)y$l zUdj1<;z3^Bk+uMOOHefq=LmP_2o7iN$Sw@m*o^~%Fol(BDH5H^^g%wc8!m4akl*+d z^rOcSpa*K8yG2Y4j0iFll0edQsTlXNLjIVyVDmaq#ThCM7>_+9@4cNee!7GV!;k|N zC2(R_I1hv(@}#MFsri?Sbx6xxo~b(U!C+s#O~kwAZSW zOTExZbjPE56K*p(>_Fn%;&8}v!G(lE|8dD|3$dKr(C3SK@xog*-#W~EWR1R9$`gx+TabKwuiibMNYIt&T{cL^7WchHuTqb ze6R53YxewMv!`!9!+OWh2ye(adwN8nJ`sQJKHYahU7oa^cYhgj^V0XH)L+ERrrMT_ zUdQ6RXHY)$lLVD=YySq4f6OiUF*o0}ckF$7+$j#Z*OAzZxa3&%@@8Xzwoc> zQ~{B9p0<(}WS-A_T-vp%pQHu#g?nYJ_w_U9ItWG_T@f&#+ zEW?MgeF&Tp2_1~_*OSfIEmb8+k7gjtdPh_+MP@RZZ#s zS^~^dj84P-?80=dxt)0{j+%v{Ct%yy#E#iWcY@dL`(^v;Ik9TFWil!dvvmpVtr^oQ z)7rxQEJ$`kckBHmj~GQ_ne3q$!>X}DjimCe0?plz9NkuTgG_(2Wt)!t&MW+VjGYD;p0fenFfG1 z6<0T0+cfDf8kNWbbndgkh9M3C&{`I^EuwG5>&H>m25&#)x)faJuS{SA7 zSu(`&>&0jH#pJ`UJrw4@l=@(f|8(i;^+G>>lR|eY3Ac-~!9uof;ke;+>fS!HDXa|$ zIh%aEalmE&_OH^E>a#RuHFqEQuhO*Kbkz;{*1D)zxSFhCLa4jnlZ&P#pe<+Sm{<|X za?Ab|h6(W2b3?wtuY#j!rf5Owu&6e2l{RQq#Q1yfwPJPvTD1*pr*16k=^v%3TM*<9 z(r0MNeTLb8wv;9NuW0@5Xyu7#rlOPB^^5?K@?t)71R~rBGkbeG#eKU z%jIqji}X~ioLWnU&N~YYGUt=Nc!QohGgb@MbaSrq!B}+e0J=2Tqw!;ml!>NzA z`+II*8*65cxHC_M*HnlTV!Iz7wTG0WZI4_hkwPD;Vn(w&5DFn$`mjMpK4(Ajwk|#G zV26d`^H`EPi*7M02~&&!_Q8gG^bKW&M{cLE$AS~F!iv$zVp4&+!my~gHSz)-^H@I; zn`^0Ggw7eQIp(1f$`{f4r`|f#idfi>m9^OFM@(XcHiv*KS&-E09dIphX_*Tb;&P)m zhW_eS+4dm-^L<}vWDY=M)-c82!Q&BHvsGO>^*dYwyUBXANvV@p7WWKvcwcAzzKXsp|U3pbY&SQG? zKQdtzZMm$7E6gu@msp-+7s8_H)|=3q6ClHkHR}5d ziBLQUJS(4{0;pK;o2blm&QiJ{^8pD=#)GU7-%NHP@1?g`Z&g;ok!`lopTt~}>={iK z$7%E5glUH(dC{~&ONLmVp3kWgDMn;-V8~Y#&GY~rj^N9$F{rh1*2l>3 z90Ss4xRzh~w0`*RS5Q-Bgcj7839a%ADMLb(WV)IZ1<)zRnAuoUOU!tvil;1|;uzF5ByrMND){;ATK017)K&_^1SjMOIzEvA1B8w5eJ zCPA45J=S5QY7l4CzXr7xl<2z<;{6RjC{?GVNRg^{{46ca>0u)J{qF6Q-S?+8z_QNr zhr_8R=y8_0hxgpIB5B|wZ}(a7Zb|F86zSBiw1FSwpw+L#A9?sqUHD=~gz^+Iv5zb< z44aH_ecF2}?%7nBO$e>05PlL!z>83-@}(j}fD{B1l6hjhDz@_SnB-5*ZZDgTV}0m( zHt19b26!tZP83`jeZ>M!2v=1t0+c!G(PrDdF1x?XXR=Z&mG9!ol<7=y7L^ksN$e76 zd`Owua=~Kos@p41fzyGgGF`Z7^XT4Go8LID`ipA{r$R(u zc`nKYGRMB>j#*J&A;du(Pcjm9u{*7iO*5wZ_t%YSaO~5!#-zHqfm5_mgG_XEfY5AW zKX45*4RPQx+{RwM_+#Q2;0>>AmuDQO-2yR4yv7TzahkcpPb)WnCn>Zt!(H ze0s4DLR5CItp#79ih41t{*k#_E)RrWdgA(s7h`?^{_k-i=Rq%%_<4r>{#^1D{?Gb6 zF4oQ#f^sHqf{u;`9{#zNo+O|JxU#S&rY#YDNG-ZQu^NIzYG)MCL=1^|~GW>h@H9&nw*NP08YZ%>HrF=4Se^d}+u3ZNk9M zU z!Q&a?L-V!-=sz__8O*n_kjA6{5*Lt$jY~BP%#xB+X?~^B{Q5_aSWPMld%6@}F-N;9 zbS>~FnS|-%)OF2!SMA2BV=fepy?>(hR?+eZ>P1O^cEV6ZD+KTGHnmaA^w`{yG6r+Q zmYMG4A3o0|OJ({&MUs>~OUCP1k(;ERQAOtsJN%5n`mu`jLl}B_t@bqHd0fo>10Hd- z#A#GIA+Gnc-43(65wb+2` z6EeJs?VqrB9Ay-LFuufy^ei|LN0beVSw+&MbN)Oue~d#^(404g=9g#CM~h}Kj>aW? zS25#PWt?P@r-5O(!lCT!LB5e;VRpd96wqRa>~BmG6q)KsD2TKM~%*sj*0 zYr$23X*sF6cp1pKakXZ#-#L zaftBWKLo+IS*W1Tqpa&QV*fMW^6v&;MvkB6H2(QeYh(H>H=8w2MLiUmK^Z` zp;Lz?M0E(;8p}x}E>Ka{B5sUeNSq||bLG@fi(|qL6uKsNb*mPVKs%)3<9WhU9C3mhepluQK7b zf)gYquS66dJ7D9QLBOh36BSN{U+ix2qUMYG)db~yI_Hk(Zvh8+`k zsK#~SlGQTZvojHVJ))|?+QvbZGW^iAX*OcyD`p4MEi?`hZ@glBqCAhSQ21Ka9y@Sv zvpfL`kq*?|>3fY`|2X+19Eo%LKecD(5WamA_>WFLMH3@CM`K|-8+$uj6Wf2+oQ(dP@vS|IPM zo_ZdgP;h;&{1C(pf}0Iho&cuyV#Am|che3-^1t3xmpLEVpe#xkkMA~b*Q{z99@kzE z`t^UVZkceVqGp&5#;BVxZXBP`1Xb5+T-bC8vpVo2X=;XF zqhnDj>U_!?#Dxf<-)uE#?xt&=c-Bh1WrtfU&{7S)JfhKdzA0VhH(bsAb8b4;$b}Ks zbN6l9lyv1(h?HOkEA(9t6b@$lF%LF{QS$lSCcFjR1sF9TxQVaK%wrhLPah~)(|Z1U z3^+bofr7rIH*>NKR)A-HhyxQFo&-ieleR7mz#h!HM(wEu7L z8?nKl`k^=Ke=+tJu#E;=v*3i8nVDw7%p8ZAnVFfB2{SYEgqfL{nVFLbGjHbZYPIjz zzNcG~B}=x?C;Mx6pRRMd3JrT~xAK6+AN%KDc{M}3g_1Ct2Yp5U0njpI;z}=Q@8PV9{ zHfKv)DD^4M*IxCMS`0QAtvlVYmDAS25X>gClDdFK<$i9@hNy2V?as}X5NCsLD{VL? zcchZKaA4F=gp1IlCjVlOu%5Y|$WDNcL6@`}hGt_nn^op)w5mcj>z@*4S%d1hmgT`c zgYMQ#g)=E*(cqAItZ_`a$-LzeqtW)<&#OoM80uFC9-?K?D(b;aR+l>5zi2I9M@%}g zyMiK3C7O`;U)x6-{;H?dlrU%bu&;W*ORL*jRytOOb&^;_;TE3_u;Ve)13Y^x+E>(! zRYSpwF)D-gHz=lW_Ro@aHQZd^uHxs_d_H?HG^@pz*6#-sGCEFu^XOu(APbDbsjjFR54mZ^A z9|}bop$rq!nC-wU2PboM(NMYgsAKc1?Y5GpGA7ffQ#fb?hGsYN-IaSg(hJ;0?q0y| zun*0F&~IO$Rp+iLzaH|^*X#<-fg=R>TRQ&y1(`@2nCpVlaz83$^h%n>c6P!Eb9VIl z#W%>~7WIn=2Ut~~BNuS{Q!whlcx*vTXSgWy4euDDWq)^_pe%=<5EV;^a)CKmtYnHO zILW=+$JqiQhcjSyT9QmI0_d=P5HRxcND{6*)~s7gsaODgs2NQP!}dgF9WuDT5%(^X zVD?=t+i7#_M_LFJEUsxfg{i>lUo$L8o|o}lTXo70RgW(bl9GgmtN8PS5lsI3WKa+) zOdfzup9kq@+9%vfNq%3v-E)WJgu_dO7jkWvM_NLaifrW@B)S;#4QGr25?`>p!`8*b z3+*50-)HP2e`Dq*1JuGo&?@0^xJAp=lS}g#smGPTDmXA|Ohgu?3lCTP)p+2*2LC-<3{Mn0bk{KCXv2RvjC#*-#|L8ei}SCmp=xgixu%grEhQ*m5EQ zyY5*G+rh|6KA*j&w?|7nT;_Q^06(ad!gPwaG_(7(|CV=-mTxS;cX70k0!r}~g9(=U z3w;-Vn~(HajT_R+;(&jdpg?gvb9NRRFfRsEVb8YI7Gn^kWyT$4g*BC5w5WI-w%{(K z-|dMDF?7>Il*0b_G_9bbxRf=xltosdEwXguxRP73AG9>-pg+c$T<;^siys#wI=Xjb z&z)!I6U&+2cS<{SnvFE9960X^FAZH>jc8gMslJUmld$imf%T4$HN5K;oIS|M8>4`6 zCEs*aKg6dO%qvL3Yofy2%jp%)KFoEE<$T9+egTT#C(b>6Q_dblg4u5$X^4#SjIX;R z+U2{qM)wTey=VCzW*Z1&8c1L&g0~I#tU=x1OdRT%k9Rz%(&cF<@OQvf0&jTK0FQ;p zav^|BO**)|Bp>lBdw)dwO0nJb$mQwCg+l%qb&_kK)|Jm_SfSmBvGGmQ<|$^wCe>TG zGK{68J4zHzhAOGx_{QJr(tt^4Kr%A7=lo}U_WwMdPB7~sboagSi~Clw`tKG^rGJW8 z|3_txf3g1IU)+CaR9<($5kcgk8C9XKv<<6##^wr(Dr&@y(-RDh>a{n>H@eVr@>|(Z zxizr0=saK3rU;}c$$v)FDUrDOp{&*_SLk-c^$eeDszSz9r-Y2aEjE9acFKF~Bzr#H z{e2A94oMeLX?Syry(k2*>T8wA*w&nJquoDp@DOi&fS=*xPGRZ!*j8^WED)GRew-qi zeRXF1b#0eQzd$$^6!J=vg}B9H4Qw1#?L+X(lMOMg|3t0ZK!kMi~rczp3e>{Sih8NR_bxH=^0xn%anaLRWZ*r^Fmo zgC)UKMGPTUkfvw!9X0}*pLAoU#4UH~g4+r_Y1%!``HQ8sW)u#yQJOM7gb$J}!P?Sg z^2{}*GJ7wzZC_-;Q_U1gJnF`CXDQ?te#)+pN|wosFK!TO5Pio8+(%gMt3?Qg)j{R2 zMJm-~fHJ5Vh=MEa(IPmi1On}l0MZ>b&M>i$*Cz~B` zHx!`RV*smqgP+GY)mE?#r(HbSW~A(`MA}P?02aA+yc~&3PHMyL@WkTn1lv zF-mP})pdNR%p8k-{GRxI8Ve{)ehNKIfL0ZM-{BBzd>h9qWM-108?8}qn%uL?R2QN; z!GbTFw_n`({s+j}3J~(y22k+A?ucV1N6!J>?IXoIPoMj5%S^+deH~Fg8$v&2sU0D& zF|IoSZh#AXY;upt9P)_Z9P&!vT=;&6FkjH=&p#YGgD-Zv@5LHxGN)}cij=)BEMU8E z6H3)8?5$$erQHU%U~_@n_WCp(i9XI8jJ%jHK!&IGwJe{&DT2=+cW7Fp-WY!fzFsVo zKS18auT4WYPoa|+R-uy-N^|1+wv3Uk^f8~}jvkP2rMh}X!dYHBrNkjohp3W`gJ|T5 zE6Kx#>NfQTHo1SOsy897v&9`M+u4;9OMe8<1Qg_&xtZn_<-hAfb&u|?$-2$6YSpB~(IXJ5%-Q~S``!1)RGzi!1o29zV^zWGhv?}_2R zo2rD3w%pLEai4R1=W_N9R0L%7phN@WtP~fMuF#A3Re^fXjCpne&eJ3DR9Q zy%{vaPkF|kw&D1=;W+I*$zH`TyBDjC4A3}Q z^w;Px7<((4D`As zvOF=2V$xf5b;3J8qObQez`bOsrE9YRe!bFWph3!2YA0f37VDD^AEG7n&xjUj`rK?} zG9q*4f_#V`h{a4zbGmzHuM5V zjF{0dO_@&L@f7VnzqR*~@dr3O&?nyJ0ysdc4Uh?eT2JQHw&SzOtSXwl@vt8Xb%aLakpW9fpYm3P-2@(PVjuySh7 z{{Z#)8r&qdvpRgyfOaBSwE~8_JIXh15eW$q&(Op5`x9tBnzkpQ!6_cFoY=;65g8|o z6B_8bpEPLV5)yd#mNBm8%o5zmWd33uGa~ z-hUrY1Aj(E(w*}Wm2S{O(kvp2E{|tPHNRBo7twoX^QGZof0iHBUdt#CN+e5ELaG2n z`7M+w?Q7gjP>LU(FRx(spPD7NbU~bJ<{;JmcdX1!fjbCOrO3nN%c-N+D2ReunvPqh zS71X4_u!JA*rmlX9&&cj~@qfDo3#UA7!HzA-)H#9j;l6gPo!%mh_~-2_t- zS{H=7g24^w8mU9l<}JsZ9U+xtgSwg!()lwsj$5F#SHRnI@-5d|({+*PBkpOsadDAd zhSTF+9o}sTj!77;yAj{d>8cdd?w`}~GY&u!&#}fwmj1Fl9gV*KquRqIyhL#OP5k71 zCp3Kj6|+6)-?1S7y9NSYOKFu%lddr2@?4B zu;i=jtYYf-PU$G`+G&Kvy-H_{cx z%Z~ASlF-a;66P(lthlQqhF92RI# zz%}*r!UrH*QY-F!(G9=pd7pG9-g`(53{mGauSm)A6q(1TP=V!cyu2z?H z;2RviQ8<=P69#vQNvAQoikPu+U__Sx{dkBpL;AG z_90s8T!1cjPNG!g7Z841v>i(}w zBoThfSJF4fc=*k;|984G|AyHAhOGY=F&#(QHV9uyBTD5kuW$1bd@R|`Ooc)hN)Kn);kqYGXj*zSA(L^Q(lc(+f zEg;UA%`gF~-w$okzJWyGHd$A|BN>>fnG_?fb4}8Xy5J5Rss9-{5T!vXxQ;|IY9D;F zbz7wExov`3ayOzchE`XUc32B8WdH6OKvAVvRAkQl@GFAkA?L_AstyVHYkqT?CMtEq(-8 zseOSmdw)u8s#C)CU$w+x1EMjWnWrSGIuDZVcr3?ls*a}Dw7-_g;$^)DEln5EFR-7K zW?!(*Q(_5a1r%()x%ofjXX;2o-)i)Zob$#W>1we&7+A22^;H9k-OXRdc(4WD+oAC1 ze>j^9M3#?>mUN;*(Atme-HU;TAIn@$B)U;1-th`SmVn}on|Igq(c&vp0#r_}RjY;> zr1#-wzJNDj-P=d7Nh4gOr;Ts75b=wjV$*p1^=a|-4t}*Va2Fnj`e!SS!knn}lHC4T zJN>p5$fa)66eh1MUmygyq}Q$ApC1gLRHm(h7|EnMqivENrG&H0Po33S;HdJY@>n z%2X42Dy6CYJbk23o*LB?5?}m(HyJ*VZjXpAee>KpL`_>mST>EN4WSSqeK)cM0N-pq zrSqK;kMh#a|7cIP0=a9#`JM|~zaP^7)fB62X0h5%?U%x!R~~LQUt8{DkUbEd{LUQ(`p>4AP04 zqjK)W#mN&@>qoj303*A)Nt@%7kWE?j8*0FG4iz zZR}WRmCYVxf1=sgTs6(cwYjp!%0{(yi((nmcMHCTN8_RDtW&sH8nybkEtkUne$wOWhnL$#HQ5mwxzonxmumykg z{IIi9$zx)e){daVCCo!V^_<8Tu_mfFPNxv`8@es+nmOoWb1E$DYM5ris^3x1eiWQl zbkLA|#*qiBfzm2;&Ha^9 zFc@n<9wx={$E;*c;g{3mAVB?ArNqL+b>X*`S#2AcWE?c9QA5q~p|+O_6IDovWNihc zG*VkfC}C?mK|OEM?CQ3t!@}b-x(48|{oGL1TrgfhY*1^0^@>^~yl1JJwShT6hiM&` zYw)Bk3hh8^O&7jU3sL7tR)Lqj=E@n3&r+6IH)~I5Qh?|Px;Y)vmBS=?Q;HEOK$K|7 zt=ck?)KsCqW;ECxv?e;9kR>$;$Hky3ld2P@V=8lwYN0W)`?V>vCdyO8&{x7;0e>Qs zn`EADF;riO1p@mXNd0cr6dOe)m=Ie!zaM#~#bYzBzA;~t05}1C zkK7GV{)yLLV*@1!g`p(cRfKy8+?%x6wD)~Q@z;GSvizbF#!+PH>*C67YleWgG$)0? z8iXX_{ne!2Y|>qiG}%<7ANa2oIrIruQnMJ6BY!BQLXorf)!#P$n91<%7n1tL^^%_V zqpEU@7!Ds8CF)ulSXZ&TvNFkGhXeK;er64{G9`*p3@3J(N#)Tf1*)=s-r-JNgNsJ; z4kr@7=gg+ld9xFn|RgsiMsCC(#&6K^@nzcOxV)+4c8u=dzqSy=Z- znB_!X+CvE>zYBQ>?e{uAotd2~a|;}91(2S=dbTrMOv%`|Qq#G}-y1$(_xiv_dhrFB zqLck3x70H`Em=HHb1da~fCtjc%L92PlEE^x2f5fwr9u*TW~tJof0;M*7Kb>7z~$s$p(#(Bhjd4iv#grv13X z)~FU_0vyl}%wu&&h>kO&Bz%GmuwNR&ywdkLTZuN)r0QG}0A3 zqRHtT+9D8kCkydP9<$uSFc-(^GRNr_vN_+@`@hHgX}uyGeB!~|(u{0V@$(|wKFPm< zTWo_K(!_3qzFgqmS~_Wy_@->lj~q)M+>Im>`AWw6)(GAHIO~NvQkdK$OCqEX6cs2$NZ=^@{}%(_d3 zdC6qflhJVX$OmB!#Qx|R<9|)nLrNFCL%%cYuJ0`SzcU~G_L2DCWa|H7{KLO^|M35M zr4-Rr@ON4VU7~e|s$5@`-fv0?}yPMHJ>(Pk-|9{q_%7s0c z$sPmNs)AT{qS;`>SVNq3stE20OamF*dfz4~2Y=369U_S0excqPe=Bd{k%Q}FV)n#_ zkt&!E&`Z&}?*zj}41Q9xL9SMFkut!tCUySgr7sjB(zU1$yFs@}CTgTJIyKA^+;8pJ z8^9A?AX6U8QnU~q0qNFo5mJ5a4bJCYr=Scfhc!{8LJ~n?62nOyVhO%cX|$fcBTK2e z3L-aQFh*?V2;MD_Aq{@%iZn}7DD^E#8*`kSPA zfF?gL{_!8np9_8sY5g!2G1mnK;@~-VS4ZAC5sM@J()4jB{WcTjgklfd&vAB4K>KCr z(tDWB`fUDr*yfPD2q>9OX&jm2J)TYhnnMyk7R49K9JXlmeRlhm{VJpw>*G6MC)CtN zS}%JICl^BYO16_G9+`Bu;`9sNyn2+N*l{GCH^_Vv*YMz1DZ{Ja50bS;0M$ADHR6+4 zhGmc;s^RbC6LX~0ct+Aeu`c0RnrE6hLnrdeQ$wjtBAm6?)YxX0GoxQ+QR$I#rG{G3 zH7X4%#z9>4nKa7#smF;`%VE3&GcZY>nv#WmQ^%*txmggL>T|iMy-vuO; z#1FE1a!!LB69TIoqiL2qQpncuk}cf<7hzF#WaN?a(QoG;SDoW=@lOs99~@J*QR40w z#qP&$zK_%G&x`H+_FX+UR(9?feC;Wl??1;mv*g~1x5wRytZ!Jh_t(XEc@DlPLA-gq z@~pN(qIq_bJa0_=DY15v_`+yJNt^Wj@h2&5g8IFr7ltUzvx5>j7<0tY^$NoB^qu-# z)Snyd9ISmI5HB;kMm18lo4x!Nb-G=l6x~0gW&U(L(K-i;ugc8h35;X6KQ)FH?~{4m z?LX|fLw&k_jyofNtnaR_j`}*=lv^nCZf$pqm#;q<(NCtll@ouFrK!NA$9TWUhDVKg zTP@)Ai0SI+c)fr2AMTsI-z#%}XdS7){<^<89dt@hG}cMXdNF|ec>eQqN!%58@cd^; zcHz8R?TYX`aoDdDg2ys3^igeCo@k~M8?D*EB+D~LEs@(tvvdrwM+=l9CO2D7**qR! zlJJLumHKkFE4~g-mz%#2#`k~w4+nj9IzL!FJ~s!~ZS(5sBD_vjgH#;ckd-;U?yf5^ zZtTuCCsm&t%@vgF(_3j*;a%f5!3RCQp+4&fgIQq?>90EzDF~Rg$6)P$TgD*J?RvXDvcEqY^o@?z)2&o- z2b!nPAgk9SxD&qUrLM$?Xjn^y@(XKUPBy;3D?e9els+~|>`r{o=%sEwpM&o88|Fwm z(Dh&x@pbaJ$Jy^~%9LOA7lj%S$J#u$R3lxHodrj?qXW^GFLD)c5Ua~LbD@(6C#JKD z;Kx{It4T1C?`Vl(Bcry8-;IuUr1z_xm{V^ObpUlSZV0Y#{!KR<@(`d>774E@mNcus z91X+Ol;Twy?xrE2s#gziwT~N05UGP8$m*}wze<`X)}Ga>FFepU)QvD|3@xrH#fYHH zky*CeVO-&r=Zpz=M&DhHN`|s}R}X{$LQtv@>JqO5HNlI<=F=Z?@mMmjnkm7#Tudmr zW9^nqMoFF8wRe_We=zfG$G5Rn&B~Qjw|{XkpW4OrVE(=RR4l?>z0(}?NZVez1_<3@ zJ{`~3=v$1JH(8;M5XaZNw2YWaqne0Q59z@$%NcwjH84BI^5N~c(SGoDPA&~^w+01O z9Aezb#mkndg3W`MhM%Y~&|0)7I?gZ=!<`bv@>-}hYR?pHnd&?7YEeT^BJkshm8ZY= zrGL|fim3h)0AsRr@>wv5nu=+Ib4}TnDU_MIrOFcN0J`oT?{IpGzZ^;wmV5~e5v33l z_L%Mj@xh=Q%QQx`G47_XIU?H_q>P+Iv-4?bPYh&bA>x>W@phV_cCM;xkk~cg7w1?@ zPQ2b3kGa;n&)7Si$xfRUh7FQvTJF-`H*029I$>B0f5GIe5$*ru-b03%=HG zGIeC;-0C!(p*&f6y2ab#&k}h*2Uxph)1&gZktM9W)cJ3Qb{Fq6>f!Ya=*v z^y&DzBS;zMd$;NeBx?VD-)>YZ=*O)+U>9go>hU+Sb5j5Yl1H9?*vP0r(>%F{rs*^| zWZC7WAxHx}N-&O#?N}eG4IHw>0VGQ;UYXoKunN~jD!&}$2^!u6t>1f&%C<28rA0`N zq%}(QSM2a+HiP|s323W)D_%-XABzti-+uNO#mdc_5o72$nam7n2!dGk0#w@MJ)5R9 z@Qve|AVmP6_ird1Pzo~q^r*Dc@M)$x1`%uw1&B0@_XxiC`)V4NopJp=-gWy;)}*J%t6QgF+jD9;Qy?<1E0bB*pv=G3qb3F^86WYG?4^RL5+J()w$Msx#A3PO(qc}U{TmgRPn4Q)&YmK@f;%qq1Ec@^=1>M9S9n_ zygkvsD}|17y(V0gGqlFbvky6>fVEt5v|&$lNwFr3nTU^H$+7WRbeY^bak;%ZahqFp zq7iUdG75T65)bm-yz+cS13=R9?#cVd3y;$3v^lKuT7?SMraUuDZFe>B>sxm##BZSD z`uctMI=`+fUFP~S0|9w7A3r~FF_fi}nK@MJxz8gm_4gEqsQ9OGj7@%k^nn{5n~PbE z^glkANXNv;U@t4|LF=7O@N4u8j_AbEnfffzeEAR1MG3FeN*_s)gdv3?F! zuD+Rv$C}V?Onoz$nhD|OsAHvfs?2R^lF1;1@wSM9_$yd^H!vAA*u)RTUttdg zR-LlwF#8AWTxFyCr;8F!rdoo&Kgc;LTm&{Ulg-z=KoHkRf?u#W`&Bn%Cu5 zheY?by)kpatRNQR4NT!Ca%Bz#Ypw959w%O^c8;$qa_b2QE(=S#| zzU^JkeK3D=ZD$(#!e3^TmAYi;B;nHY|ySh5<3^Lpcd4=HN#h zAlPjU)z{6lZqeNY<8{fMB@4bgc_K)wvQ`7eZcZIYKmzgCL@HuS*VLEA!K(mH zGX=B9j89JdQEyXw$)K!utgA z#96kWOnpomTlsF<=G3S{#fRvW;aQ4ax0k|mi(r~F%jg!I%xnG(r_J;S?kKc%H_3=v zVHE)0Oz|e2vg^thS$>(zu8oz@HW%-g_csJpg0CC)HbPYtQAB}Py$;T_Di{^0Ye^?W zjF-t-x`L9syE_8fx7<1SH&M}oID5VA?QI0;6UtPLg$SsIm7FcIqumdi6qY6^v%lxi z-D!vNz!a_$8lv&>X9SsAb%$cdg!70rLN8oXNFy`vyytl)3Av_VDV>iS*-{+$_)ci7 zMl)4AP=1?;s>abf5?w{MH*-Rrm#o^gLoft0v(xd)@sm9x8|-ch9U3CuD^5(Dqh{&+ z`?Gp(;of7v=D>F%POw^bMYRGO6v<%=1F66|AIN(hAvJJYAC_v~ONa&rhYSrVCB7xS zJEi~Rh!gZw^$^%8v{Yj!Bi2ZPGDY7>?^>~=UAN)C!&MUDoHcPz*39c9b^|kK3dJj=Q6Z} z;X^S}>&yEggNTM%R@d^o!MIChGVR9Ad!90q%S-90-`3dC<0Z2N$gWotL$U{sghEpQ z;{__da`fssXru6~2yBFsd)T42k?kaQftUva<)JX}hiFD~uH+)DkI9PzFaaarcmTXKZZ{Bd)_>+-eqD0id@M;Zc5FQ9g|>1zNWVlLU8V2=VQ7 z`1>fU<$6w3M|AzBqUSyl!Fj(rff7|7y;`^57EucF!f|2SZd_1SSAkYw@~|A+4D?jk z-PUeetJ2YG(~gb5&?-`ljNNfNq3kV`1NBAx2%Y5sC04k`srHn6`6WYH67H6KaM#*- zSH(7yN5`xS0~@74Nut>NU6>rlV13j<-yGF)rV#{NDG~n&9(_*4U}NzAZFecR|5^AZ z&jQ81iAhDp!Yo{; z3t)CWF0Zsp)2N6k6Y8o{d{PL)N|Y`jPcywRc~R~)%0UJNaZDWlL=&j&Wm2UTXn2?S za}c848wbV+nh7uluBpX9rg#=ThnZb5SE-Y0f-L-RM#T&iS`dO1#_SX_juX@8RVhMj zVMh)bMyjjOX&(ZGcvLta++BLh#W7`k#2KZE*sUc-`d*Y_4$tv@IOC%T6E}Aa-*ZEl#N8x z3DdF``q3G&v4ghmcGVaBR<#SZ&TnCZH^HA!casY9+M=BXPFsDAy^|11m@fCe5$OalQN&e6WLnfT(6>_LF=x{nXa=%+1bHLY$+R)FEq` zSw6H*_L;hR%-G(!o})lK>!wnpwN3yfYnLyeIrRQtzjt0n4z6~)wGJ=+9UG=cJAq~wI2K8G9hap5lJWHQPk+= zQ(%Q%fK!f4KX@v=w8wRZes$?xZ-H74r>Q3r2<>v1cJ$qkZMjswCM3oafr(Mu^YA6X z#!@bl2<%n%&(gT}+pYnfgx{!OVb(Pt&s`lp&H-Cf$+jk-s<~^Ft6>@zcbbZ zR^PA8NJf$apI+xe{sw23lvMk!`KBL2*KRcp!pFEKd(MzHfK+>(B@f=X;u8rH7;!k& zg*;8F`H*XdAJrqG!8S+{ZRMVGijI2=8_M21{*BAAFkFBwrm*OaalNLsoG%_;IWl+_s`t9X^Q)w%lWlXX@$ zCo>Hx6C#Z_fyxvY6kx#2?^-c!r+ZvAm)0mV0KJW0Ak9JIO$c;iRPa?j`en90qw7L^ zm7%%_T+o8Eg1{>3oms`z>3SAjMuA|Ot{530KtlR?b`|L8cJo>0l(y?;^)Xf6Ppn_y zM?->x`I*|6d;p5(1tVfR-qt<I~}pBy+xqdxAnLHFf}M>iH>^_cbEB^0Brx)OwQ zk7mWg;AWG9+0pgP_chBxv@l=4iRNWikH^o0f4OtM-w7gZ;Ryk19w!yfUU}Ah;ewsi zjiN;#MH}R5*V)0jeYQP&360BK>Q|!dZZ3B0@z9^)ecSLnPzA45<;DUV(|)h3w9hbV z5hbYl#140N3*xi0cj4IaYX%34jy?`Wr#tdS0;w_#SuTGyeSml+n{w#U9p7yJ;n~MP ze>|)A>de_%kh^T|z4i0q+Cj>Ujp}c3;T$&&+RRGOXTgOMIJ5yi+q3SFikAg%7}#u zcF%x%Pm*9<&m9Xuo%`_J++@WduAq6A>EcT6my2T)=AKve%*)>SqujL1KT=cyk8sn??D+477JGI85EN$ z!jWFsyjWLI2;!0$D25qdbB zprzfoX87p}`)A@|{@i)&LwFoL2ZJ*G4?lY1+SV>HbJN=CZy|)9C>~rS_9jBnXoXtb z!0#{ADmH8FWtPRd52u4dswR<|cv>lP@q}s|@|9J(Bk~hl;iBFNdeh(;yNf$G%X|Ac z=g=5M0`bVsG|8*<0E30itusVa0AUbfXhI^>AOeHcFGX9`a!C&TL+cK^LElfje5Xu! zggl6ZeXl|d;2?U>&M1>-7`qvuJCCM`7obbe_<$%esZnSk;x&l8ISXmc%!d~n3;IF~ zCXLtxuQ6&VX#4)eNuxHe^T-bS`;U8LB|NOFxXTU+taJsZol8wS9XO7)de@q#?KKi^ zFB$Ozy{%p?APQlTXSjAJksfY;A51i?2{<{m0JdlnUPu-_9~b)CIB1RlgepRW@lcBV z6z0?T*U;v^qOL5XXpeK4t4YqS-Y}+rUd2UW4F|dHou>nmz0fHLQNtltP7T4n7NKHN z2PS%r;F}S;^HLF}Jejfa?dPCf3CyPx)FBex^}zR8VlAYW7Xy@#(Rw?F#X-i-N%^N< z!@g1?Tx(-1_mDm@4zkDxJ;HT?p;Ok^I49SXU0eT*!SzybV0${DLDfvQ;sc82%l28w6?@dL$+un6IeQn9M zckLR`kL-Zbb z31O4}WZNfyx=d=`O@HJ}1b)5G6AWB0P`RR$ZjVdw$7IGx5A2qDFTW<1C`Mw-G3K_B zW1L{LE#9v_+{ZJ_m=Re>c|j|l$#={FicbKyaI%>sfpF! z(>G2AIH|}E=#i5J0QlYhV9inEu-JZ-B6md7`r5|ti7Uy+%tA0_1%h#)hLjCmz@=sImBZ_%`yf^5lmb?BmqMP z)&&4m)CLq-^fh%MUQ{n+ zq*$*IGx@q_*~+ld@RtyRW}r-NoOTw1->~{_ij_h5htekY-Ktuy11D&O+}&ZieH{NA z4>gIb(t4Umh#}JidIR+eBrW~IB4pygBqb+E_{se8=rLyE;ktc0hNyRwr(J|v;&mg$ zaBcAxR}v!TVdr*ujGQT`y9Bslway&NdFSI9=j#nR%F>t-)VD-C^*pwKzO18y)7cZ{ zN1&p!7@u)4mN3XIM7+Z^_*zuqX_&>{mkF?eid3XVO&Wgz4KZV9ORDWcty>Uo{!|pr zk-;?SeuiQI;v%swTFGS3#yH*pE!EhY#Bt-5y&$l!;#|1Xi&}3=jhgvo8GLs$>WWQD zq^NqV`V`z*!;gla@pE;>SmAAKxYzNh2JZ8=a4?bdh4!flX9Bmg>vIH?C6GapS8#F_ zWI&60bk2~EJ&Ff-2Km}Jyv)Jxd2rM})VD5_z2@;!rDyw`_;4@$10Kc@w@$^v$`Aar z7(>=S@#@xKtKi~5TalzbQKUY#LmT>>N76Dnz153L(#cywqH*TmB{E%tHWCw!(_bk9 z_}y-?GCv{(1F{Lmu<#QZa8Ongx!E1Z@JIwlOM)livb1IvOU%Twe;k{HFnBc&!3$%6 zDok4cuW>p z@<-KtYTvUtkiLHx5Gkb^DUDe$AL#ebu}%5V_E7(f_f9@@toA^?<4=bA5ZuijGK7cr zsb838N`*n;n(gcx`x4j+8XeH@v|&LnPsVyh(vPrR@#=JXzNx|cVIkGQxr6 zX@>~)M49phM;-&gX z7G5($AZUJg&y;8q z0Di>f4E<8TbU+=n(>?>&hj`uywxO1m92N?ZUp3sUBb=gPwj`dL0TWh%)=4RdQ6yCx zW(iDKA?mMQaS}qfXo9g%agwzsG8i-WcE%V@N!2=-UW&+gcJyg(9GIjSOT(^Ug2+{A zE10=EjA@urr5bFR)K6&wv53&JHgpsdUVa7nBuU@RshqqM^}~PE*5nd5+Cgq`oxwzg zIB`{?K+d>&@e03qpU57Jxlkt{;et(Vv#guifvX|Xenb-rH7Vh$O&1N6CZ&j^m2mw* zCTvmPS6{M|ED70Hs2LavQAV6qq3%);{)IGsQ*Xf3nPv0Y(a9F$8to#Ka3OT6|1ia8 zqCE{=hQZw%X>x`qACm-9E6W2UgXG-~P6nLg9>ea#;c)nS>z1|pgaf4(r)dOh2*4bj zv!(0PvZqh^JAF=`xBk(LO4z4r-|b!X+&52J{JAvHI$d3%_6xTeD34yxvTZ)prO0sJ zF9MjUL)eqX9D=AG0E_Ih-%5ll-nxIC-|XCGNGAJWDu6eoaYZDwuHNyvPcx8!DrCoj zC_S_Ar^Q3=kH2=)b2&k1NkS*C6$zX6+v+-4Gi&0ZszT={i*#C zvDi!t;RlRG0$sj}%vGdxp*1+aj~-qPIsg~pi;{bI z`gIGxv6VUo*ornJ^n7)1w46@b^;x|wehe5ZTab& z_gtSVc$8H)Pt@aehp!#-2by8g$8M;fpfV?s4A8SP?ttlrxc{UKD`K?g;K4L%CRK5X zu_1d>heTmx3OWY*(>TaH4BXR`+7^>g$RE~|#k z^KD@iOrGlE1NuUm#W2obQ)`pkzwgabQn0pCH|3}~ValnjYQ%Qc9xWZeE)-WJpztga zCz8C-`>}4{UeJjye!sU6;Nr;N$6T>B3!3{9DRfuHn?-9Ky)Ed@{XG@LI5T z^@s!Kw{(&Vw$ILb#%nfEu5h+dXLJ1Ak}vf86;!)BET_k|K?&lD@}QdrIT|JoQW+7u zyKyWh=n795gRH#QRXjPq_yHe8@Z?H5`9K>6^_tAI;Cq{};NON@kad{8x$~zM%#(=K z!|g84S1j~_A@O(GPtqgYu?}1|XF@46y}HUm)#TsCLk( z2FcilvI(zb#^N6{uoH7}fK96xhel8W@h8+2LG=w3?lhYvZ&$h864vv0T z%>`BzHyaxxZ*FwE$6BC(ZbA-V5|QsGdc`NVp~z5hA0Wsk^TMJ&FAtR* z2C|R&jn;x!ZZwo)SYKV6#K+t<`uuD}DC&muKq}7kN57|)~C**-FP!YqM0S4hO0LD(yEk443$m(z1?pb9e(xfg4SRm~`}CVuBGnTRrQP&1NPKu3L&2fgw5L zjZ#NiyjL>rxLlJrSqkVrfmwjR5F&&9lH2*7V*>`qFmPIljJYQ`6m-SvM#J6r0XEtS z6yRP^oNCQX?Ttul1=WHAqG#F#tI9bc0CyH&nguc&})NGDvFz=oAxqZT@i zl!SEX!xVi8cb4elh=b-XQwULWRa|}!7~x%~70el9eOd}zyh!FR5ns&7j=?JIew|<= z+h0#6O9{L_s6xba4$Y#V8b|8iV_TFgDZw$~&0>rdH;jItFO`0O9I2H>UIBPNU6W%3 zt@XqWpkOvE#OuT72GPZ7t$gto>=AH=GxtRN=}2Nt{lnWnXjGeQB@=;>rhTca_waxfrXsiYzvj{-Mw1&}Hpca|*!b3%8ojsiLr(vV_w|Ny*TRJ;z;Q)a~H3x_! z#~{g}!)i|R8>XX}Y(!OI#+$-^eRpja8--t|nuI~-{yZ-{<^b=SgZ-f^#@5KD^V?dO zL%5+uvq&nY@tq}zuC!cA!_yW8fUr^bf0L8DY51>=O33OaRiam{HnYj5Ij4`!Cn5q)=x8Ih zCH~GVIKpmA%(S(`^I+5p@n3cK3@J-KxYVov!hn~_t@KbvEBk%T^r+j$4^0s<@QSPk zYdUP9zha|cgUqZ`ST2ZCD?nla%F^NgK(mvoark=;QEGhoHxkDtcHO*yE(R24v4?~yyuHJ#n`;TNiim_SFmOFY}ZKckTNOySF!r6t50`wAFvV4iTgICc` zVjO_C5$;lk-(gm>;~X5st3kO+$6}5J)WLe#zTKH!>%oCNlXL=?INTTVNC}2K!H5N1x8E<_3 zvs9C^Jo+xzjmzvR_@Gz|4n=jRN&0JC6zZ7}hq7=?5Hx|;;C!FdaFKbK_LJg0TFm&o zV?7Y9@Oz&~8f6;zu?||`SfNo!*&lUYt&#HP#9B={)t*%IuVz1~Q%2pklL+v_^u zg_IuFFLLstTr^xfz>l;AN(39(k-k$}pO96vCrTx4e%qNg z9$aW7TZ%v4k5^TV6!`%f%4$;No21y^YNzi$JADwJLrP2l&?BAoHU*(lOyNHc^rgPg zjx|`j4a%lX`T9zf<`wjS2r&nkZXLelUz{jm7)Q7C38YwcyhZBNqP%;Gdj?jY5{D16 z`dbE|NEPvWP9pk-@#Z+a zl9Ffm1goVOYiSFY>gML_li{+P#&Zy9@ME)}YNM^3hT6)DIx9jXNnP;kKIy$Sw~Mr^ zxZ*_h(&gg^eQG084gx1;n>qp5D0oK;26Ak)9nP5K`67uk3tLECRr}tlxLUWTH#4#;N zFS4mt%A_SZ%$nF#MjZ-=zcTdJ=$^uFfx*_#=Y5#W{v`h*`Q^V$UPs?VBB)W#PfNkL zr_MoH1iq&?VviWtoKhljt;5B-ltku$(#i2H(Wq}-7~eR2v0ldAP^_V{tP-8DS%bxQR4E)st z83sbkD`2T@?&(YJ0&ZPx(?aLbrrqf0txvRg-PSv5r~TU?_UaK61& zp1tP)Dp~)Ua#aIi4o_NC9mPh!Ll(KMqlOCI_#PrvR)wqm6Kf!fq`j{sUH)$oFE&0V zW{BiCim$=}kPrCCh;56;z5XGP?``Jv{4fmE8CNT*q)ft)MW1X5Q(Iu1`N8ty6HO$W zBZKIgyIQW$XSkNqkz!zR0aT8dfGUj8>pz>_or#91xgs4(W5Q_jLqscbJMOC#1} z%PnUr@=4FylugE}$pI16f*8}0?}VSQt_#6{d&mK6NP8EI72%BkbQM!BEX6|L(;%sr zmX`VKba#af+Sp#YqB%LCY|iZ-8@ACQhNq3M|662VeY{H^w_A74X=sMxv=?!e-n3FiGvdomI6X*+oOT{hwy}Dvrs$d9N%~Tnl+N)G zkOs}dA(N-3rx1mnaZdQ#Pj^D-%k)~r_~`@R4|dkufBr>^Vz5jFvlHkgI?|IK2)xcuSr^}F|sj`eslnMzSq2Ismm8ab^O z1P`lFkveP3Y&l;d)!LjRW$R)=K0orj_44^Q|MO34?jE;sBOHfr1QSd3Tf)?{C^s4W z2Z`Qtq?GG(h^L{j#qhWVuQ4{Vy{Y>SJ$jxkLl(~H$u+(nF`+qg!gQy_J$@WAGirD0 z-EdiL3b$lr1QDMp+hS-99JNTOz($m9k2%b*UtfNByya1F!6C)8VMpPoq+mikt-DTP zelk|o-;-u3Uz779h1&?JB)xo$@t_dpw%`M z0a^Fe42kZaC65&JkxjHrGc3L2!S;^dmHiKOTo_Y1REATIsulN$W^%F7Hz*!BSo4$U z(Tg~vIK|~6S;05i0ad{Aj)IL~%;T+C!vYC1XhXV8488fJDo$t&m(5A;4U}1GY-47~ zZj4zE(95~SZc&>S8#SB>10T||hMs9B>Zq)DNf5XY=M-MpBp&h8#e}gc;fOmapLdDC z8p*DMcOugfbIINpusIe)o{dxXFFbDqhRw5|Jor^gI=eL{c!BZnH{k}lK}lvspVV00 zX_snBOTr!!n@+}d4n0|@@4`(Y%>3D2sl||fOi&i?VF3FJD-<2d^NFd5t`<$|I)njD zE(1+SlXC?RVE*A&t19Fa5O_Q+08dCRuQ~gx;bCu)bPsL1(a-S8KN^~ZSA+nk2H!6m zNQkqo8ptW@+{|0t!R%V?8RP)5zl&?q0`l4bA40T~$qVIZGK%|cRtHaIOuTb1oJKy@ zedZ`+1wQDN_8<`2A`%9Tu*Yg%JgBXIg(8yK^w~YmX}@f$>+fv&0iU}eh&n2eBb6^a z$6FiE)(|~g_9i&8$(EW{5K8`UeJF*QHJp2#l^Pc90nMG~N|HFWY-;x^&+Rol7`BLS zLZj|O9#0GJ4SjT5939TxSbDy}Mb1LoXB6}s08$R=6-TAM?&Rs zwZA33hq~L?DyFJ5npNQ_jPZLvzlm4Zv~73_VFo>Lj#P{%AoupLWMJ-T^x03Pm?Ka` zmkyE77#sD*6R!zY4;0GY2c~XGpyGK>ZD-d%` zM$GBU#Qx`}fiQmzy-o0@ykQHrmwk`YFTaaVW1IJOS^pk;qv(fyI(&x@hV%_RHIjF%W2bNbLsbZ zw3J{c5R#*)^CFpY%uc~CVGN%A#3BKf>xx32q^Wal806?35cLB)Vf=N@>Q26@`l(Zm z!2*5v<5>NA^F@5~J!R}SP%?iNAEmswo+@_`Tx05?CC!0?N}}7B0iZu$OU|!Wi7w4j zAGcZR;{YD$ifb~laKKFLC~9J6?<7I!6yM?Q+B~!gzRe-Y&LaMGqlj=?qGifveSj-b z1BPR1aUDWwrsc2&umc*|uK8_=_H1xZQI7ER7guWst18T5f_d0#Jm^#a-I){(Nh$U{ zY?Hx0s=K5=z)XAx9eVW)mBN8)n!nV77}i z^OOtX$Io3G#2GZ&A|?pR7fhr6PguX{acolPJxDGr1HaBdPfV9dXfOI6wh8(T!=Rr6 zvfjjnuG2OpZX?fV;DPXb0bZiCxb27Avxf!8?P77(M|K{9 zq_i7h{k~d?O7W5O3O7Z&)LqvpI;>66MI*h+wjIT~yLIM`DI036+UQtJ+3{d7h(3Kn z^>9PkyPrOxr)H0trNG!pLH|`Wc&!q9JQW^;w6x?a+MYELdb2GUqp>R~y@U~2&C;Xl ztn%j>l3wl;#*?3Yb-uiycZ0-U7Mm#Aw z9_I>d2eQNu(Xm>Q#9|)_s!RS2_nb^puVr_B)S~Z4$3e;T@zd{;#fr|aEH9bw6ZFAH zc%2Y#fxL+(k)Ek8pK#2ml9&d;1o+PMr^S9t3vH0%GIS;EB3G5&7W$)5o%&zp`xIRC z>X(^`)7{-*&?cA(lcuQJ7FOJ~2a~-nI6sZq*c9Ef(M4CtO1;p^Q(2L@Z*r&kIlM6Z zm|CzDLYvy^1{^}aG;zig-Fs01k45@^%isW&*8d@m$3m-(&e{)2#TBVK*YCdn@cgoC6s{H|qsTG3)deq7 zeBF#JtY18rFfGdni7MOTr7CKiM%(kgFyUcyW!x>(Z|+?Bkt?j`g}lSkwMb@!HX(BS zBg zqjaQ0PSCzY27*5r-{Af~pf+_J=YSOD=#ICN76^mom>1(MjgIB#6e*1pjn_(;p%|g2s22u{Wd6z}SO)0ir5g#k7pNAYK<AB4sn&8WqgB|94?`iiw9a# zut<0+e%D51$FMy zkWE%?Im6f{u}OF8Tgccmk+C*9i<{Kkoc%oObKM5LDz|7!&YU*jC?y&+fwLAsS!lz6 z^UDutRH6`mY{HDHI}5BB>5?e60OGL(Q98@-vjC|q@jI$?$Sq+|8$mzM`5lMBazE{($1XQUCB> zwRGwy#{~)LwdyMGWQnOn!OZypoGK`xcz9dEfNzzyTC38{ zb_-w3Y26p|*4Gs99mJc_9yqwY3FO4U*){*gDRLby_)S?sbmDrRJ(dhHIgopE*!B4O zJqO+~I4m9IAJpV*w;zCJ)owYwBP`_*vWQ|bEsJGlKX+gtIhl;0Vy%oAiHLeMnTzJ? zS^Ss-`w2aOf7e~+n1_%=_apqV{P!2G3l_>QXw1fT+5+1f;P6?CxGS^?%|DHgS#va> zPUDj5Zo;Axqb5jJ+Wk^8DNyh|q@=SFxzVk2PMo#?^FW(WV4Sqzt$;Scc(0pQ*%J(V z4pEf145^6J8G=8NlN3?0Fe6ewS_+53>*$^3iYku~1(IE>-A#396ZBnrTLZ#nT(($l z1XqyQ6*zR7P&P|%@~-Vt3+-`u7Ruj)=+SdnBk0kK_4M;2pJ(D2acYcNm*`c*E^02O zIf6!OlH!#JLO!$DxE7M|^wiK5oVF;6avIh|@!>zFEsz50AOg_#7uJG$;c*Qm<*-1% zCh-F9cl7Kb@Cr`RZGRmlpPM6>>CJz0QQx_Eyj{A_7KQ0QvoG8d<5VlIk{>o;A` zy(qngs}AMFy5#rE7FhCg)Ss&tmk5hq3y&aj8N)iylY*3C+^*TirA;crM4j>M;bQK% zSpo|6jZesu)EJ#j=9>VWiwbtmP)#QHqs--!cC3E~tOGolfF6UMH>{~DOt!=z$9%L> z44DIIw^$+?DT48G9YJq^Lx!b?Y0>M0GI#6|hTX4|RmB)Fhv8shYrQ1fh&FL~z!?+xC1R-7V4rjsb1D!RSxy=ttSi58kr}Ny!;j zW^FEBsMM3=N^=Lt!@=3$;M3^9Xw;`I94e>vx?p&=n58SA=5c4BOse&&r~N2pmN2s&qw0?$WXZ;Tb!Ixv_qR2fBwL1o9RAMtWa5P&-AxHe)P_7?~agq0^~@bWRjtt z`#=M7@G|bh6BhaIwym2CEf||m4^4ObS8w~EjC}jy^7>k6-SJGK<&KHdTcie^Qf>gr8jk4ZUu;2zCiZk&vM|heognn93P{funqLOTlW1%)442 zTxV;F89w(33VpiZK|c4Ld|t+Atmi9NN+n+AAgwDwvFoc`;=CLFLDVsY_L%b={xBMx zbgi+sJC+5jD{Nn;$XT->-DdoRAT;&xSkBu_^dZWV^6W*i_j=K!l%LZT8Ev;o<~Th_ zINUOjpYaG`q0HuYZ>3R)pPAj}xfYyu(PyPgm6y$!3l8siu^O?wQfP&07aDYo25%O_ zw+C5%RlX-0sUlDOXZti~%ePRo~h-sz5g2I)=iBVKZnZ6%Ct z|CAtzHC8XfGBdKHu+R*@@Cr`hmv`&x-TWDHQap}EbtF%9>keTp_@fO$mg9_dzdmCYTssEeMivA;<|!M4pKXC4*JS+oSjB zC0MSB=AVgD^-^HfLc}G)_8%#G|6ZC=3GV3o53l!d8}5Do;fm`>N>=cmiefbO^63=z znSmmTd1?Y2E>2B@RQ2yw{Ohk|7?lZoo>9(W0-P6foSI_v0kDl?cvZf-#V@eKx#u98 zSo7VL{X@{R6x|N1%(j-8hG+LKQ>q^F-H74XG*P-p_WLdJ?S^N8#6E}~Ju70+>2TQ3 z^GOja=h~^2;J;D-I;Nbu(gYNAcif}Xt;2A!jKe4^Qhifo;zq6x+*6F;!bM-WYWH17 zIRA5#YWTZMpr9eh`G0Jc7G9zdCID6Wgh-!E`nbFi|0!~-e{(lBSp{+@VfBkaJxRl2 zW}KqH+$=~h;avHK$;CBbeSMl2(jt{?p!R_aw%r?(*UeQndq%AT94@l#uPKm}#GOtB0FR*R$rFszs*bEYKv;<;h2 zLg9Tg$GZhBsIY=+GRs$aT$JieVnpst%;?|+xX-mR2Res#3oqLVd)b0YLvR>r@|uww z55YA8+!yEhDiUD7=Y(ft4d)HUgxH0D_R1HXi{D zw;mT+(~8ei4q%EA6c}LfY>`htmrcP8z8$T$Z0aGzziwO_oEzY%#Q;ag&F1OT>kN$2 z%}1(YGS+K~M?<MU>^9QWJ`RsRR>xKu)qS^WGwD`lQYWxSfroF_G8nEH)oIY9Tz1YN^dv45#3Y zXTK>EgPy&`>Na+NOVKB^T3E)QlNKn{6E36}#OM|FFn;GBJsa$gfT^#_3q{lVUz zoa}BkK%1bq|D!~D|BQm~%7QNl@|lBW%CUE@GJ%_eottKmW)@qB1!&Vai|@3g#ub;; zsH4?MsDs41{>Vlx+FBE-SnlVkMbQ2v4B9`J0(Dv()zt>+Dj@+hk+2s zj9hAzsLFG5P+CxWok)rF03|M=Gnbijo34af>ebr|$Dxp9gZuPzx=LngOd37@w2w*S zpWYHx*QX1DLw5;j%!D==TZqmM4nAuDp~OXTW+K^EZ0k_rFA6Z>hu5lkKnGm>h#}fZ zc9#};hW0~v&1Kt;<&zdM^AnDlzqtH(arGK@x+@B zjFwB{kimn9QjEkFZ^@h-_UKP!LTD-|DSe3x!BdtwG5-k|1ruE4OK~)TWfEpOLG?4w zUJo1HCsHv!nOV%t-stpnPcwe4@w#_7+#A^0z`=|Enth$htmNT*gMaDS9{D26F0ga> z+v<3aP7cl`ll8DqH!Z6MBl(1`fm7e_;}#XRpbcC;KVouh5I%8q8M&kY>O=WFsGi5VNR+bcBz8|5%k(!tN8AKs{1fr$r=`TwN`mI78e#W}EJU80WSGnypz z@Zs^i$)@l#)ma~FicMUA94=5JacPJ4_HJ=O zjo8Zk_7Z_B|4SN7xx5gvva}SV2tm@(hlF(;biVfL zY-U6$1^bTKrQ_-6drD&`uv*0=&n&7BP*fj8k1nzs81l0q5pK-S zAGXZwX{8`;p4^O-v^lB;C_3k|*_|(^ktTc4a!_D85z$81im8+RfEb0}G`uq=`g~r6; zdOmzJ49ABGL(+|y97TQ5;HL!Cs~DjyTb+=5HQbC?WY~;bk&snRrU$CRJ6cNX*7bdg zg;%d$-0%3Pg(h}%-W>R0*U+H!S1v|K`OXbPLN&fA@AFj@h)c%Oe@Nz_!##|DKnnW} z;cv!WJD}aK>f@us?zVoRDMMAU>EkE+3S23})D#!0Go5IW5iFH+8mK{B%DK2R=E!)k$ z3DgoI8T!DqI%U{jqDIYRuiC2GY3U0jkhKdB%Y*KdxT*X%eG8JIgl$~*~O&k1Lkv^0`wOYi4hBD|jR*Y;VR2(m#Oa2~Am1Bo?thlVr zz)GyTmThu!`6(8lh>_Y9!eNOkczDq>387n}zH zNHIEMIP{KNc*BoRe9kLqr$fYpbHcTw(+`zV)~9RqS6Eg-9fB_GIU!{JJas%y8UUSg zAy&>-unJJ^?!!AgxV@d4ptqeVRkU0!)Z0sjNUfpJHMuGkr=6i2V8S}RnE8$yY|Gf6V_$l~ulGQ%u8V@1Z>BMF>2nbvcIar0 zF6SM?{Dm^-s-(D_Ie8*fXJlhL)VUp==_mbWYsUPqkZHcoZ;pP6?$D}a_7wWX$nzAn zssAJ8e*zacE}#UVJoBl-42c7PmWBW1YtF#B{M^j3>Vj7H_xA&^s$pko$KY^O<^C@d zXqKSD1@fo_!9N2F60U+|f2ObMm-MQANxJhL3kmJfl(E1Ai|%2D2N7K)5N;8M!mjAN zFoYw=EohLS%~vy20~Rb&6UtD>vK}7t02bmyl|o&a;4| znAJP{yJ*+=82&n^Ft;mG#OIp+rGyxqTqX5iK@6c<`5IA{ptE$+?jQ*ViYlp1fJQk2 z=hn_{3zax5uuZVgQ#jcTx}!G%eh;_IaSNxzF``b)MS9{r@`vh?4{<4SoP-=m5cIw- zAVY3JeL*^8b^RuUfSqhaNqzOh8;Mk4wwTBhdDB>AGPB%IlyFcgzRXY_Z{U4o>fylHg%TeyEC1#m#P z&`2HZ>f8_h*T0>O4i2BN-6TI~ewF@=aklAq{7dA)(BH3DA9Ku=cne!ce%0A}7T^5% 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

      >lW22E&2VM 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

      *?zfdqen5$neuSz8lFD5c^y@F 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

      $UjKX)}>$jhpG&UkY`! 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 Date: Wed, 25 Jun 2025 23:11:30 -0400 Subject: [PATCH 574/708] Changelog for 1.43.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25ff81fc0..843affcb2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,17 @@ # Change Log +## 1.43.0 (June 26th, 2025) + * performance - "Rebuild Projects" command should be done incrementally. See [#4041](https://github.com/redhat-developer/vscode-java/pull/4041). + * enhancement - Adopt quick fixes for various modifier corrections. See [JLS#1053](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/1053). + - `BodyForNativeMethod`, `MethodRequiresBody`, `OuterLocalMustBeEffectivelyFinal`, + - `MissingSynchronizedModifierInInheritedMethod`, `MethodCanBeStatic`, `OverridingDeprecatedMethod` + * enhancement - Add cleanups for various redundant modifiers/expressions/statements. See [#4066](https://github.com/redhat-developer/vscode-java/issues/4066). + * enhancement - Increase default value for maximum heap size (`Xmx`) from `1G` to `2G`. See [#4062](https://github.com/redhat-developer/vscode-java/pull/4062). + * bug fix - Fix issues with Lombok `@Builder` annotation on `record` type declarations. See [#4050](https://github.com/redhat-developer/vscode-java/issues/4050). + * bug fix - Prevent code actions from failing with "Document does not match the AST". See [#4027](https://github.com/redhat-developer/vscode-java/issues/4027). + * bug fix - Handle snippets when opened (empty) Java file triggers activation. See [#3940](https://github.com/redhat-developer/vscode-java/issues/3940). + * bug fix - Remove JAXP entity limits when runtime is Java 24 or higher. See [#4071](https://github.com/redhat-developer/vscode-java/pull/4071). + ## 1.42.0 (May 15th, 2025) * enhancement - Implement methods in newly created type from an inherited sealed class. See [JLS#1570](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/1570). * enhancement - Code action for "The left-hand side of an assginment must be a variable". See [JLS#3441](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3441). From 06e61a6d9c18fb67f12b140884534384ec7713c0 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 26 Jun 2025 14:29:42 -0400 Subject: [PATCH 575/708] Upversion to 1.44.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f42120203..275469f01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.43.0", + "version": "1.44.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.43.0", + "version": "1.44.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 659782af1..690384058 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.43.0", + "version": "1.44.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 088ee3ed923e9bb66e1f8fbf3cb8686b404b4d7b Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 30 Jun 2025 14:07:45 -0400 Subject: [PATCH 576/708] Changelog for 1.43.1 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 843affcb2..64e99d648 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Change Log +## 1.43.1 (July 1st, 2025) +* bug fix - Fix compilation issue when annotation exists on a record class. [#4096](https://github.com/redhat-developer/vscode-java/issues/4096) + ## 1.43.0 (June 26th, 2025) * performance - "Rebuild Projects" command should be done incrementally. See [#4041](https://github.com/redhat-developer/vscode-java/pull/4041). * enhancement - Adopt quick fixes for various modifier corrections. See [JLS#1053](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/1053). diff --git a/package-lock.json b/package-lock.json index 275469f01..f1de3bb0d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.44.0", + "version": "1.43.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.44.0", + "version": "1.43.1", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 690384058..1d9e841ac 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.44.0", + "version": "1.43.1", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 32fc8a8f4124159950312c4aae2cc8de5985fa1f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 1 Jul 2025 23:28:20 -0400 Subject: [PATCH 577/708] Upversion back to 1.44.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1de3bb0d..275469f01 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.43.1", + "version": "1.44.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.43.1", + "version": "1.44.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 1d9e841ac..690384058 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.43.1", + "version": "1.44.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 58a68f0e8f0a9735b32ae0635bfed214cec0d4ec Mon Sep 17 00:00:00 2001 From: mozhuanzuojing <63572041+mozhuanzuojing@users.noreply.github.com> Date: Fri, 20 Jun 2025 09:42:26 +0800 Subject: [PATCH 578/708] Update GitHub Actions, java-version: 23 -> 24 - java-version: '24' - distribution: 'adopt' -> 'temurin' because: `adopt` for the distribution input referred to AdoptOpenJDK. AdoptOpenJDK is now Eclipse Temurin: so use `temurin` instead. --- .github/workflows/pr-verify.yml | 4 ++-- .github/workflows/release.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 238bfd514..0e41d12c8 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -18,8 +18,8 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '21' - distribution: 'adopt' + java-version: '24' + distribution: 'temurin' - run: npm install -g typescript "vsce" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 219318108..2d2e4a688 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -81,8 +81,8 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '23' - distribution: 'adopt' + java-version: '24' + distribution: 'temurin' - name: Build JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" run: | From f9239a1d883a55a487f50f021db2a0b9e6578c4e Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Mon, 7 Jul 2025 23:30:47 -0400 Subject: [PATCH 579/708] Bump jdk-utils to 0.6.0. Signed-off-by: Roland Grunberg --- package-lock.json | 9 +++++---- package.json | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 275469f01..407ceaf32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.5.1", + "jdk-utils": "^0.6.0", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", @@ -4587,9 +4587,10 @@ } }, "node_modules/jdk-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.5.1.tgz", - "integrity": "sha512-BEQZ4JOmnWvZtuda+CRaCj8WbcgUs4RPZ07ZaM5bei+iFtx8fWrF0NpXDe3zM1k4SQajjYQ9zFc1/PhYT1Z6Og==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jdk-utils/-/jdk-utils-0.6.0.tgz", + "integrity": "sha512-/CHgo6Q5xyfW/+vWXLz7cAb+iwIye3mNo7SV8UTHsbLhRykk+N7LzKXRlCvdeoblyuTrA8pb00iZX8De3txvWQ==", + "license": "MIT", "bin": { "jdk-utils": "bin/cli.js" } diff --git a/package.json b/package.json index 690384058..c07959683 100644 --- a/package.json +++ b/package.json @@ -1987,7 +1987,7 @@ "fs-extra": "^8.1.0", "glob": "^7.1.3", "htmlparser2": "6.0.1", - "jdk-utils": "^0.5.1", + "jdk-utils": "^0.6.0", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", From 447475cb15ca7ecac40b7c2acae3ad460559eef2 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 5 Jun 2025 11:27:06 -0400 Subject: [PATCH 580/708] Use Java Application class data sharing (AppCDS). - Boost startup performance using AppCDS - Enable by default (auto) only for insiders & pre-release versions - Use java.jdt.ls.appcds.enabled to control the setting Signed-off-by: Roland Grunberg --- README.md | 3 +++ package.json | 12 ++++++++++++ src/javaServerStarter.ts | 22 ++++++++++++++++++++++ src/settings.ts | 3 ++- 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 62a167dab..12b25a53b 100644 --- a/README.md +++ b/README.md @@ -257,6 +257,9 @@ The following settings are supported: * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` +New in 1.44.0 +* `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index c07959683..ea30ea4a1 100644 --- a/package.json +++ b/package.json @@ -420,6 +420,18 @@ "scope": "window", "order": 95 }, + "java.jdt.ls.appcds.enabled": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "default": "auto", + "markdownDescription": "[Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions.", + "scope": "machine-overridable", + "order": 100 + }, "java.trace.server": { "type": "string", "enum": [ diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index d9f10aea2..78aa340d9 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -36,6 +36,11 @@ export const HEAP_DUMP = '-XX:+HeapDumpOnOutOfMemoryError'; const DEPENDENCY_COLLECTOR_IMPL= '-Daether.dependencyCollector.impl='; const DEPENDENCY_COLLECTOR_IMPL_BF= 'bf'; +const UNLOCK_DIAGNOSTIC_VM_OPTIONS= '-XX:+UnlockDiagnosticVMOptions'; +const ALLOW_ARCHIVING_WITH_JAVA_AGENT= '-XX:+AllowArchivingWithJavaAgent'; +const AUTO_CREATE_SHARED_ARCHIVE= '-XX:+AutoCreateSharedArchive'; +const SHARED_ARCHIVE_FILE_LOC= '-XX:SharedArchiveFile='; + export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); @@ -224,6 +229,23 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E if (sharedIndexLocation) { params.push(`-Djdt.core.sharedIndexLocation=${sharedIndexLocation}`); } + + const hasJDWP = params.find((param: string) => param.includes('jdwp')) !== undefined; + const isInsider: boolean = version.includes("insider"); + const extVersion = getVersion(context.extensionPath); + const isPreReleaseVersion = /^\d+\.\d+\.\d{10}/.test(extVersion); + const globalStoragePath = path.resolve(context.globalStorageUri?.fsPath, extVersion); // .../Code/User/globalStorage/redhat.java/1.42.0/ + const appCDSMode = workspace.getConfiguration().get('java.jdt.ls.appcds.enabled'); + const useAppCDS = (appCDSMode === 'on') || (appCDSMode === 'auto' && (isInsider || isPreReleaseVersion)); + + ensureExists(globalStoragePath); + const sharedArchiveLocation = path.join(globalStoragePath, "jdtls.jsa"); + if (useAppCDS && vmargs.indexOf(SHARED_ARCHIVE_FILE_LOC) < 0 && !hasJDWP) { + params.push(UNLOCK_DIAGNOSTIC_VM_OPTIONS); + params.push(ALLOW_ARCHIVING_WITH_JAVA_AGENT); // required due to use of '-javaagent' + params.push(AUTO_CREATE_SHARED_ARCHIVE); + params.push(`${SHARED_ARCHIVE_FILE_LOC}${sharedArchiveLocation}`); + } } // "OpenJDK 64-Bit Server VM warning: Options -Xverify:none and -noverify diff --git a/src/settings.ts b/src/settings.ts index fc6eeb592..1e3330ed2 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -139,7 +139,8 @@ function hasJavaConfigChanged(oldConfig: WorkspaceConfiguration, newConfig: Work || hasConfigKeyChanged('transport', oldConfig, newConfig) || hasConfigKeyChanged('diagnostic.filter', oldConfig, newConfig) || hasConfigKeyChanged('jdt.ls.javac.enabled', oldConfig, newConfig) - || hasConfigKeyChanged('completion.engine', oldConfig, newConfig); + || hasConfigKeyChanged('completion.engine', oldConfig, newConfig) + || hasConfigKeyChanged('jdt.ls.appcds.enabled', oldConfig, newConfig); } function hasConfigKeyChanged(key, oldConfig, newConfig) { From 3cde759dcf7858d763163efd61895fb7ac550eb7 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Tue, 29 Jul 2025 22:46:42 -0400 Subject: [PATCH 581/708] Changelog for 1.44.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64e99d648..e67f664fa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 1.44.0 (July 31st, 2025) + * performance - Improve startup with (optional) Java Application Class-Data Sharing. See [#4067](https://github.com/redhat-developer/vscode-java/pull/4067). + * enhancement - Add code actions for creating method in base type. See [#4064](https://github.com/redhat-developer/vscode-java/issues/4064). + * bug fix - Fix Gradle/Java Compatibility Matrix for recent Java versions. See [JLS#3485](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3485). + * bug fix - Detect JBang installed JDKs. See [#3799](https://github.com/redhat-developer/vscode-java/issues/3799). + * dependencies - Update M2E 2.8.0 to 2.9.0. See [JLS#3477](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3477). + ## 1.43.1 (July 1st, 2025) * bug fix - Fix compilation issue when annotation exists on a record class. [#4096](https://github.com/redhat-developer/vscode-java/issues/4096) From 88c8aa7711d26b66071479d5cb20d78418d6caed Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 31 Jul 2025 12:51:51 -0400 Subject: [PATCH 582/708] Upversion to 1.45.0 Signed-off-by: Roland Grunberg --- README.md | 2 -- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 12b25a53b..cff611657 100644 --- a/README.md +++ b/README.md @@ -256,8 +256,6 @@ The following settings are supported: * `java.jdt.ls.javac.enabled`: [Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 24. Defaults to `off`. * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` - -New in 1.44.0 * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. Semantic Highlighting diff --git a/package-lock.json b/package-lock.json index 407ceaf32..7abcc768f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.44.0", + "version": "1.45.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.44.0", + "version": "1.45.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index ea30ea4a1..a37049135 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.44.0", + "version": "1.45.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 053490ef0a7da1140ed19df474164595d8892f88 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 31 Jul 2025 14:51:43 -0400 Subject: [PATCH 583/708] Update GH Actions jobs from Node 18 to 20. Signed-off-by: Roland Grunberg --- .github/workflows/pr-verify.yml | 4 ++-- .github/workflows/release.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 0e41d12c8..01fbf5c67 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -14,13 +14,13 @@ jobs: - name: Set Up NodeJS uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' - name: Set Up Java uses: actions/setup-java@v4 with: java-version: '24' distribution: 'temurin' - - run: npm install -g typescript "vsce" + - run: npm install -g typescript "@vscode/vsce" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz - run: mkdir server && tar -xvzf jdt-language-server-latest.tar.gz -C ./server && rm jdt-language-server-latest.tar.gz - run: npm install diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2d2e4a688..10645bf74 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,7 +94,7 @@ jobs: - name: Set Up NodeJS uses: actions/setup-node@v4 with: - node-version: '18' + node-version: '20' - name: Install NodeJS dependencies run: npm install -g typescript "@vscode/vsce" "ovsx" - name: Download JDT-LS Release From b8d4078515d1a308107c594409b88a5a2bf84983 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 3 Sep 2025 08:32:32 -0400 Subject: [PATCH 584/708] Changelog for 1.45.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e67f664fa..da9f3d9b4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 1.45.0 (September 4th, 2025) + * performance - Delay registration of resource/element listeners. See [JLS#3510](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3510). + * bug fix - Path expansion is not working for the `sources` field in `referencedLibraries`. See [JLS#3495](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3495). + * bug fix - Send LSP server version with `InitializeResult`. See [JLS#3484](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3484). + * bug fix - Update the decompiler header for FernFlower. See [JLS#3512](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3512). + * bug fix - Remove unused options for completion & incomplete classpath severity. See [JLS#3506](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3506). + ## 1.44.0 (July 31st, 2025) * performance - Improve startup with (optional) Java Application Class-Data Sharing. See [#4067](https://github.com/redhat-developer/vscode-java/pull/4067). * enhancement - Add code actions for creating method in base type. See [#4064](https://github.com/redhat-developer/vscode-java/issues/4064). From a8b25b77533c5a2774f83839a79e8014c0052636 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 4 Sep 2025 14:34:10 -0400 Subject: [PATCH 585/708] Upversion to 1.46.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7abcc768f..7ca330187 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.45.0", + "version": "1.46.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.45.0", + "version": "1.46.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index a37049135..2a11123b9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.45.0", + "version": "1.46.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From b7bdb0f9619977ad07004b224fda25a460ac7009 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 4 Sep 2025 20:12:40 +0000 Subject: [PATCH 586/708] Bump brace-expansion from 1.1.11 to 1.1.12 Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.11 to 1.1.12. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/1.1.11...v1.1.12) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.12 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7ca330187..0fa7c47f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1735,9 +1735,10 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5284,9 +5285,9 @@ } }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7688,9 +7689,10 @@ } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } From d2df57bb05772512341619161a90fec0d68b66e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Tue, 16 Sep 2025 13:26:43 +0200 Subject: [PATCH 587/708] Remove node_modules prefix from gulp commands MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- package.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 2a11123b9..05ee87725 100644 --- a/package.json +++ b/package.json @@ -1945,13 +1945,13 @@ "watch": "webpack --mode development --watch", "pretest": "npm run compile", "test": "node ./out/test/runtest.js", - "build-server": "./node_modules/.bin/gulp build_server", - "build": "./node_modules/.bin/gulp build_or_download", - "fast-build-server": "./node_modules/.bin/gulp dev_server", - "watch-server": "./node_modules/.bin/gulp watch_server", + "build-server": "gulp build_server", + "build": "gulp build_or_download", + "fast-build-server": "gulp dev_server", + "watch-server": "gulp watch_server", "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx .", - "repo:check": "./node_modules/.bin/gulp repo_check", - "repo:fix": "./node_modules/.bin/gulp repo_fix" + "repo:check": "gulp repo_check", + "repo:fix": "gulp repo_fix" }, "devDependencies": { "@types/fs-extra": "^8.0.0", From 1bb0a9932dbd0714d8b4c9bc89f770f9a808b760 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Tue, 16 Sep 2025 22:19:14 +0200 Subject: [PATCH 588/708] Delete Java LS Configuration - delete the Java LS configuration (/redhat.java) when calling Clean Java Language Server Workspace --- src/extension.ts | 3 ++- src/utils.ts | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 21d659d52..77ad9031b 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -29,7 +29,7 @@ import { snippetCompletionProvider } from './snippetCompletionProvider'; import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause, getVersion } from './utils'; +import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause, getVersion, cleanJavaLSConfiguration } from './utils'; import glob = require('glob'); import { Telemetry } from './telemetry'; import { getMessage } from './errorUtils'; @@ -436,6 +436,7 @@ export async function activate(context: ExtensionContext): Promise cleanupWorkspaceState(context); deleteDirectory(workspacePath); deleteDirectory(syntaxServerWorkspacePath); + cleanJavaLSConfiguration(context); } catch (error) { data['error'] = getMessage(error); window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); diff --git a/src/utils.ts b/src/utils.ts index cb1cb3a99..989f3ab24 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -2,7 +2,7 @@ import * as fs from 'fs'; import * as path from 'path'; -import { workspace, WorkspaceConfiguration, commands, Uri, version } from 'vscode'; +import { workspace, WorkspaceConfiguration, commands, Uri, version, ExtensionContext } from 'vscode'; import { Commands } from './commands'; import { IJavaRuntime } from 'jdk-utils'; import { getSupportedJreNames, listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; @@ -22,6 +22,11 @@ export function isPreferenceOverridden(section: string): boolean { config.inspect(section).globalLanguageValue !== undefined; } +export function cleanJavaLSConfiguration(context: ExtensionContext) { + const globalStoragePath = context.globalStorageUri?.fsPath; // .../Code/User/globalStorage/redhat.java + deleteDirectory(globalStoragePath); +} + export function deleteDirectory(dir) { if (fs.existsSync(dir)) { fs.readdirSync(dir).forEach((child) => { From 90bcb729471f4a4322dcb5e5120e78517b821a5f Mon Sep 17 00:00:00 2001 From: redhattools-bot Date: Tue, 23 Sep 2025 01:54:27 +0000 Subject: [PATCH 589/708] Bump JDK to 25 --- README.md | 6 +++--- package.json | 5 +++-- src/requirements.ts | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index cff611657..9a6eab968 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/main/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.8 to Java 24 +* Supports code from Java 1.8 to Java 25 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -81,8 +81,8 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-11", }, { - "name": "JavaSE-24", - "path": "/path/to/jdk-24", + "name": "JavaSE-25", + "path": "/path/to/jdk-25", "default": true }, ] diff --git a/package.json b/package.json index 05ee87725..05e4213be 100644 --- a/package.json +++ b/package.json @@ -947,7 +947,8 @@ "JavaSE-21", "JavaSE-22", "JavaSE-23", - "JavaSE-24" + "JavaSE-24", + "JavaSE-25" ], "description": "Java Execution Environment name. Must be unique." }, @@ -2014,4 +2015,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file diff --git a/src/requirements.ts b/src/requirements.ts index 00bdfabb2..3eefeac1e 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -41,7 +41,7 @@ export async function resolveRequirements(context: ExtensionContext): Promise Date: Tue, 23 Sep 2025 13:37:23 +0800 Subject: [PATCH 590/708] Update release.yml Java 21 set java version = 21 --- .github/workflows/pr-verify.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-verify.yml b/.github/workflows/pr-verify.yml index 01fbf5c67..9240c9a1b 100644 --- a/.github/workflows/pr-verify.yml +++ b/.github/workflows/pr-verify.yml @@ -18,7 +18,7 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '24' + java-version: '21' distribution: 'temurin' - run: npm install -g typescript "@vscode/vsce" - run: wget http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 10645bf74..a6f239203 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -81,7 +81,7 @@ jobs: - name: Set Up Java uses: actions/setup-java@v4 with: - java-version: '24' + java-version: '21' distribution: 'temurin' - name: Build JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" From f6a18d8c77d56022360d7e0bad98779431f5ecf7 Mon Sep 17 00:00:00 2001 From: shblue21 Date: Mon, 29 Sep 2025 18:42:03 +0900 Subject: [PATCH 591/708] Add missing KO NLS keys and refine translations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Insert 5 keys to match base order: java.clean.sharedIndexes, java.server.restart, java.edit.smartSemicolonDetection, java.change.searchScope, java.action.showExtendedOutline - Translate remaining string: java.project.updateSourceAttachment -> “소스 첨부...” --- package.nls.ko.json | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/package.nls.ko.json b/package.nls.ko.json index ae20245ad..0b185fa05 100644 --- a/package.nls.ko.json +++ b/package.nls.ko.json @@ -7,22 +7,27 @@ "java.open.serverStderrLog": "Java Language Server 오류 로그 파일 열기", "java.open.clientLog": "Java Extension 로그 파일 열기", "java.open.logs": "모든 로그 파일 열기", - "java.workspace.compile": "Java 강제 컴파일", + "java.workspace.compile": "Java 컴파일 강제 실행", "java.project.build": "프로젝트 다시 빌드", "java.open.formatter.settings": "Java Formatter 설정 열기", "java.clean.workspace": "Java Language Server 작업 영역 정리", - "java.project.updateSourceAttachment": "Attach Source...", - "java.project.addToSourcePath": "Java Source 경로에 폴더 추가", - "java.project.removeFromSourcePath": "Java Source 경로에서 폴더 제거", - "java.project.listSourcePaths": "모든 Java Source 경로를 나열", + "java.project.updateSourceAttachment": "소스 첨부...", + "java.project.addToSourcePath": "Java 소스 경로에 폴더 추가", + "java.project.removeFromSourcePath": "Java 소스 경로에서 폴더 제거", + "java.project.listSourcePaths": "모든 Java 소스 경로 표시", "java.show.server.task.status": "빌드 작업 상태 표시", "java.action.navigateToSuperImplementation": "상위 구현으로 이동", "java.action.showTypeHierarchy": "Type 계층 구조 표시", "java.action.showClassHierarchy": "Class 계층 구조 표시", "java.action.showSupertypeHierarchy": "Supertype 계층 구조 표시", "java.action.showSubtypeHierarchy": "Subtype 계층 구조 표시", - "java.action.changeBaseType": "이 유형을 기준으로", + "java.action.changeBaseType": "이 타입을 기준으로", "java.project.createModuleInfo.command": "module-info.java 생성", + "java.clean.sharedIndexes": "공유 인덱스 정리", + "java.server.restart": "Java Language Server 다시 시작", + "java.edit.smartSemicolonDetection": "Java 스마트 세미콜론 감지", "java.action.filesExplorerPasteAction": "클립보드 텍스트를 파일에 붙여넣기", - "java.action.doCleanup": "정리 작업을 수행합니다" + "java.action.doCleanup": "정리 작업을 수행", + "java.change.searchScope": "검색 범위 변경", + "java.action.showExtendedOutline": "확장 개요 열기" } From 86f9253301321c3992a9c13f20e9410695b0f333 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 29 Sep 2025 17:21:33 +0200 Subject: [PATCH 592/708] fix: update java.jdt.ls.javac.enabled description to indicate Java 25 requirement Signed-off-by: Fred Bricon --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 05e4213be..1237a31f1 100644 --- a/package.json +++ b/package.json @@ -416,7 +416,7 @@ "off" ], "default": "off", - "markdownDescription": "[Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 24", + "markdownDescription": "[Experimental] Specify whether to enable Javac-based compilation in the language server. Requires running this extension with Java 25", "scope": "window", "order": 95 }, From 813f9e9f42ead472215085eed21798197e2bace5 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Sun, 28 Sep 2025 18:01:19 +0200 Subject: [PATCH 593/708] Enable formatting java in jupyter notebook --- src/commands.ts | 5 +++++ src/extension.ts | 22 +++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/commands.ts b/src/commands.ts index 3466633f7..db05507f2 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -366,6 +366,11 @@ export namespace Commands { */ export const SHOW_EXTEND_OUTLINE = 'java.action.showExtendedOutline'; + /** + * Get the content of the currently visible editor. + */ + export const GET_VISIBLE_EDITOR_CONTENT = '_java.getVisibleEditorContent'; + } /** diff --git a/src/extension.ts b/src/extension.ts index 77ad9031b..7a852563c 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -202,7 +202,8 @@ export async function activate(context: ExtensionContext): Promise documentSelector: [ { scheme: 'file', language: 'java' }, { scheme: 'jdt', language: 'java' }, - { scheme: 'untitled', language: 'java' } + { scheme: 'untitled', language: 'java' }, + { scheme: 'vscode-notebook-cell', language: 'java' } ], synchronize: { configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize', "files.associations"], @@ -233,6 +234,11 @@ export async function activate(context: ExtensionContext): Promise advancedUpgradeGradleSupport: true, executeClientCommandSupport: true, snippetEditSupport: true, + nonStandardJavaFormatting : { + schemes: ["vscode-notebook-cell"], + extensions: ["jsh", "jshell", "ipynb"], + getContentCallback: Commands.GET_VISIBLE_EDITOR_CONTENT, + } }, triggerFiles, }, @@ -511,6 +517,20 @@ export async function activate(context: ExtensionContext): Promise context.subscriptions.push(onConfigurationChange(workspacePath, context)); + context.subscriptions.push(commands.registerCommand(Commands.GET_VISIBLE_EDITOR_CONTENT, (uri: string) => { + for (const editor of window.visibleTextEditors) { + if (editor.document.uri.toString() === uri) { + return editor.document.getText(); + } + } + const editor = window.activeTextEditor; + if (editor) { + return editor.document.getText(); + } else { + return null; + } + })); + registerRestartJavaLanguageServerCommand(context); /** From 4b0ae528f5fa726fc2f7582ccec9c3c022604934 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 30 Sep 2025 16:54:47 +0200 Subject: [PATCH 594/708] fix: enable workspace/executeCommand in the Syntax language client Signed-off-by: Fred Bricon --- src/syntaxLanguageClient.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/syntaxLanguageClient.ts b/src/syntaxLanguageClient.ts index 57b0283a7..92f7d42fa 100644 --- a/src/syntaxLanguageClient.ts +++ b/src/syntaxLanguageClient.ts @@ -8,13 +8,14 @@ import { ClientErrorHandler } from "./clientErrorHandler"; import { ClientStatus } from "./extension.api"; import { logger } from "./log"; import { OutputInfoCollector } from "./outputInfoCollector"; -import { StatusNotification } from "./protocol"; +import { ExecuteClientCommandRequest, StatusNotification } from "./protocol"; import { RequirementsData } from "./requirements"; import { ServerMode } from "./settings"; import { snippetCompletionProvider } from "./snippetCompletionProvider"; import { getJavaConfig } from "./utils"; import { DEBUG } from "./javaServerStarter"; import { TracingLanguageClient } from "./TracingLanguageClient"; +import { commands } from "vscode"; const extensionName = "Language Support for Java (Syntax Server)"; @@ -90,6 +91,9 @@ export class SyntaxLanguageClient { apiManager.fireDidServerModeChange(ServerMode.lightWeight); } }); + this.languageClient.onRequest(ExecuteClientCommandRequest.type, (params) => { + return commands.executeCommand(params.command, ...params.arguments); + }); } } From 8a069ca75811c4fe0af0409afb69a28187ab9edd Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 29 Sep 2025 14:28:49 +0200 Subject: [PATCH 595/708] feat: add inlay hints for implicit variables Signed-off-by: Fred Bricon --- README.md | 4 ++++ package.json | 6 ++++++ src/telemetry.ts | 1 + 3 files changed, 11 insertions(+) diff --git a/README.md b/README.md index 9a6eab968..c653995bc 100644 --- a/README.md +++ b/README.md @@ -48,6 +48,7 @@ Features * Diagnostic tags * Call Hierarchy * Type Hierarchy +* Inlay Hints To launch and debug your Java programs, it's recommended you install *[Java Debug Extension for Visual Studio Code](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug)*. @@ -258,6 +259,9 @@ The following settings are supported: * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. +New in 1.46.0 +* `java.inlayHints.variableTypes.enabled`: Enable/disable inlay hints for implicit variable types. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 1237a31f1..9395e03df 100644 --- a/package.json +++ b/package.json @@ -1510,6 +1510,12 @@ "scope": "window", "order": 90 }, + "java.inlayHints.variableTypes.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable inlay hints for implicit variable types:\n```java\n\nvar foo /* :Path */ = Path.of(\"foo\");\n \n```", + "scope": "window" + }, "java.search.scope": { "type": "string", "enum": [ diff --git a/src/telemetry.ts b/src/telemetry.ts index 9b0b6c351..bc73eef51 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -61,6 +61,7 @@ export namespace Telemetry { "java.completion.collapseCompletionItems", "java.completion.guessMethodArguments", "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", + "java.inlayHints.variableTypes.enabled", "java.server.launchMode", "java.autobuild.enabled" ]; // settings where we only record their existence From 1fc4597b14c15665fc928ca15fe0e401994b4175 Mon Sep 17 00:00:00 2001 From: nkilders <71071641+nkilders@users.noreply.github.com> Date: Wed, 1 Oct 2025 19:18:28 +0200 Subject: [PATCH 596/708] Fix decompiler editor for WSL --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 9395e03df..f732606b2 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,9 @@ "selector": [ { "filenamePattern": "file:/**/*.class" + }, + { + "filenamePattern": "vscode-remote:/**/*.class" } ] } From 3b2133f704db184c68724183cdd2d3289f4b6da8 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 1 Oct 2025 16:44:20 -0400 Subject: [PATCH 597/708] Changelog 1.46.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index da9f3d9b4..738d36d4a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,22 @@ # Change Log +## 1.46.0 (October 2nd, 2025) + * performance - Cleaning workspace should also delete configuration folder. See [#4157](https://github.com/redhat-developer/vscode-java/issues/4157). + * performance - Improve Null Analysis by reducing & deferring expensive calls. See [JLS#3531](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3531). + * enhancement - Support Java 25. See [#4170](https://github.com/redhat-developer/vscode-java/pull/4170), [#4185](https://github.com/redhat-developer/vscode-java/pull/4185), [#4172](https://github.com/redhat-developer/vscode-java/pull/4172). + * enhancement - Support fuzzy camel case search for workspace symbols. See [JLS#3513](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3513). + * enhancement - Enable formatting Java in Jupyter Notebook. See [#4163](https://github.com/redhat-developer/vscode-java/issues/4163). + * enhancement - Add inlay hints for implicit variable types. See [#4031](https://github.com/redhat-developer/vscode-java/issues/4031). + * bug fix - Fix Android Support with recent AGP versions. See [#3682](https://github.com/redhat-developer/vscode-java/issues/3682). + * bug fix - Ensure Gradle 9.1.0 requires JDK >= 25. See [JLS#3540](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3540). + * bug fix - Eable `workspace/executeCommand` in the Syntax language client. See [#4187](https://github.com/redhat-developer/vscode-java/pull/4187). + * bug fix - Add missing KO NLS keys and refine translations. See [#4183](https://github.com/redhat-developer/vscode-java/pull/4183). + * bug fix - Show decompiled source when opening `.class` file on remote workspace. See [#4114](https://github.com/redhat-developer/vscode-java/issues/4114). + * dependencies - Bump brace-expansion from 1.1.11 to 1.1.12. See [#4150](https://github.com/redhat-developer/vscode-java/pull/4150). + * dependencies - Use the Eclipse 4.37 platform release repository. See [JLS#3526](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3526). + * dependencies - Update M2E 2.9.0 to 2.9.1. See [JLS#3520](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3520). + * build - Do not reference path when invoking `gulp`. See [#4158](https://github.com/redhat-developer/vscode-java/issues/4158). + ## 1.45.0 (September 4th, 2025) * performance - Delay registration of resource/element listeners. See [JLS#3510](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3510). * bug fix - Path expansion is not working for the `sources` field in `referencedLibraries`. See [JLS#3495](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3495). From f3753da1ac65357e938ba9ab9ce7453c3132ecae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 6 Aug 2025 08:35:19 +0200 Subject: [PATCH 598/708] Add PDE extension to recommended extensions.json MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- .vscode/extensions.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 7a024e403..ce6a89fdf 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,6 +5,7 @@ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", - "amodio.tsl-problem-matcher" + "amodio.tsl-problem-matcher", + "yaozheng.vscode-pde" ] } From 3a2a2a0269c2aa0f50860d5919e7bdacd869c3bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Tue, 2 Sep 2025 13:54:51 +0200 Subject: [PATCH 599/708] Initial dashboard implementation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- package.json | 19 +++++++ src/dashboard/dashboard.ts | 75 ++++++++++++++++++++++++++++ src/extension.ts | 41 +++++++++++++-- src/promiseUtil.ts | 13 +++++ src/webview/dashboard/dashboard.css | 0 src/webview/dashboard/dashboard.tsx | 69 +++++++++++++++++++++++++ src/webview/dashboard/index.tsx | 11 ++++ src/webview/dashboard/jvms.css | 22 ++++++++ src/webview/dashboard/jvms.tsx | 37 ++++++++++++++ src/webviewProtocol/common.ts | 6 +++ src/webviewProtocol/fromDashboard.ts | 7 +++ src/webviewProtocol/toDashboard.ts | 22 ++++++++ tsconfig.base.json | 1 + tsconfig.json | 3 +- tsconfig.webview.json | 6 +-- webpack.config.js | 49 ++++++++++++++++-- webview-resources/dashboard.css | 13 +++++ 17 files changed, 384 insertions(+), 10 deletions(-) create mode 100644 src/dashboard/dashboard.ts create mode 100644 src/promiseUtil.ts create mode 100644 src/webview/dashboard/dashboard.css create mode 100644 src/webview/dashboard/dashboard.tsx create mode 100644 src/webview/dashboard/index.tsx create mode 100644 src/webview/dashboard/jvms.css create mode 100644 src/webview/dashboard/jvms.tsx create mode 100644 src/webviewProtocol/common.ts create mode 100644 src/webviewProtocol/fromDashboard.ts create mode 100644 src/webviewProtocol/toDashboard.ts create mode 100644 webview-resources/dashboard.css diff --git a/package.json b/package.json index f732606b2..6be11514d 100644 --- a/package.json +++ b/package.json @@ -1947,6 +1947,25 @@ "when": "view == references-view.tree && reference-list.hasResult && reference-list.source == javaTypeHierarchy && viewItem != 'false'" } ] + }, + "viewsContainers": { + "activitybar": [ + { + "id": "vscode-java-container", + "title": "Java", + "icon": "icons/icon128.png" + } + ] + }, + "views": { + "vscode-java-container": [ + { + "type": "webview", + "id": "vscode-java-dashboard", + "name": "Dashboard", + "icon": "icons/icons128.png" + } + ] } }, "scripts": { diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts new file mode 100644 index 000000000..75ab3011a --- /dev/null +++ b/src/dashboard/dashboard.ts @@ -0,0 +1,75 @@ +import { prepareExecutable } from '../javaServerStarter'; +import { getComputedJavaConfig, getExecutable } from '../extension'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { getNonce, getUri } from '../webviewUtils'; +import { InitializeMessage, JVM, SettingChangedMessage } from '../webviewProtocol/toDashboard'; +import { isLombokSupportEnabled } from '../lombokSupport'; + + +async function getJvms(): Promise { + const config = await getComputedJavaConfig(); + const jres: JVM[] = config.configuration.runtimes.map(jre => ({ + name: jre.name, + version: jre.version, + path: jre.path, + })); + return jres; + +} + +export function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) { + setWebviewMessageListener(webview); + + const scriptUri = getUri(webview, extensionUri, [ + "dist", + "dashboard.js", + ]); + + const nonce = getNonce(); + + return /* html*/ ` + + + + + + + Dashboard + + +

      + + + +`; +} + +function setWebviewMessageListener(webview: vscode.Webview) { + vscode.workspace.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('java.jdt.ls.lombokSupport.enabled')) { + const msg: SettingChangedMessage = { + type: "settingsChanged", + lombokEnabled: isLombokSupportEnabled() + } + webview.postMessage(msg); + } + }); + + webview.onDidReceiveMessage( + async (message: any) => { + const command = message.command; + switch (command) { + case "webviewReady": + const message: InitializeMessage = { + type: "initialize", + jvms: await getJvms(), + lombokEnabled: isLombokSupportEnabled() + }; + await webview.postMessage(message); + break; + } + } + ); +} diff --git a/src/extension.ts b/src/extension.ts index 7a852563c..da199c8ef 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,9 +6,12 @@ import * as fse from 'fs-extra'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; +import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, + IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, + SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, + WebviewView, WebviewViewResolveContext, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; -import { LanguageClient } from 'vscode-languageclient/node'; +import { Executable, LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; import { ClientErrorHandler } from './clientErrorHandler'; import { Commands, CommandTitle } from './commands'; @@ -39,6 +42,8 @@ import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './ import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib/node'; +import { Deferred } from './promiseUtil'; +import { getWebviewContent } from './dashboard/dashboard'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -47,6 +52,17 @@ const extensionName = 'Language Support for Java'; let storagePath: string; let clientLogFile: string; +const excutable= new Deferred(); + +export async function getExecutable(): Promise { + return excutable.promise; +} + +const javaConfigDeferred = new Deferred(); +export async function getComputedJavaConfig(): Promise { + return javaConfigDeferred.promise; +} + /** * Shows a message about the server crashing due to an out of memory issue */ @@ -113,6 +129,21 @@ export function fixJdtLinksInDocumentation(oldDocumentation: MarkdownString): Ma } export async function activate(context: ExtensionContext): Promise { + console.log('registering webview provider'); + context.subscriptions.push(window.registerWebviewViewProvider('vscode-java-dashboard', { + resolveWebviewView: async function (webviewView: WebviewView, webviewContext: WebviewViewResolveContext, token: CancellationToken): Promise { + + webviewView.webview.options = { + enableScripts: true, + enableCommandUris: true, + localResourceRoots: [context.extensionUri] + }; + + webviewView.webview.html = await getWebviewContent(webviewView.webview, context.extensionUri); + } + })); + console.log('registered webview provider'); + await loadSupportedJreNames(context); context.subscriptions.push(commands.registerCommand(Commands.FILESEXPLORER_ONPASTE, async () => { const originalClipboard = await env.clipboard.readText(); @@ -196,6 +227,9 @@ export async function activate(context: ExtensionContext): Promise let requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); let initFailureReported: boolean = false; + const javaConfig = await getJavaConfig(requirements.java_home); + javaConfigDeferred.resolve(javaConfig); + // Options to control the language client const clientOptions: LanguageClientOptions = { // Register the server for java @@ -211,7 +245,7 @@ export async function activate(context: ExtensionContext): Promise initializationOptions: { bundles: collectJavaExtensions(extensions.all), workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, - settings: { java: await getJavaConfig(requirements.java_home) }, + settings: { java: javaConfig }, extendedClientCapabilities: { classFileContentsSupport: true, overrideMethodsPromptSupport: true, @@ -400,6 +434,7 @@ export async function activate(context: ExtensionContext): Promise // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); + excutable.resolve(serverOptions); if (requireSyntaxServer) { if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); diff --git a/src/promiseUtil.ts b/src/promiseUtil.ts new file mode 100644 index 000000000..b38510e68 --- /dev/null +++ b/src/promiseUtil.ts @@ -0,0 +1,13 @@ +export class Deferred { + readonly promise: Promise; + + resolve: (result: T) => void; + reject: (error: any) => void; + + constructor() { + this.promise= new Promise((resolve, reject) => { + this.resolve = resolve; + this.reject = reject; + }); + } +} diff --git a/src/webview/dashboard/dashboard.css b/src/webview/dashboard/dashboard.css new file mode 100644 index 000000000..e69de29bb diff --git a/src/webview/dashboard/dashboard.tsx b/src/webview/dashboard/dashboard.tsx new file mode 100644 index 000000000..6727d4bae --- /dev/null +++ b/src/webview/dashboard/dashboard.tsx @@ -0,0 +1,69 @@ +/* eslint-disable @typescript-eslint/naming-convention */ +/* eslint-disable @typescript-eslint/prefer-for-of */ +import React from "react"; +import { vscode } from "../vscodeApiWrapper"; +import { Jvms } from "./jvms"; +import { InitializeMessage, JVM, ToDashboardMessage, ToDashboardMessageType } from "../../webviewProtocol/toDashboard"; +import './dashboard.css'; + +type State = { + jvms: JVM[]; + lombokEnabled: boolean; +}; + +export interface AppProps { +} + +function openSettingsLink(settingId: string): string { + const args = { + query: settingId + }; + return `command:workbench.action.openSettings?${encodeURIComponent(JSON.stringify(args))}`; +} + +export class Dashboard extends React.Component { + + constructor(props: AppProps) { + super(props); + this.state = { + jvms: [], + lombokEnabled: false, + }; + } + + handleMessage = (event: MessageEvent) => { + const message = event.data as ToDashboardMessage; + switch (message.type) { + case "initialize": { + const initializeMessage = message as InitializeMessage; + this.setState({ jvms: initializeMessage.jvms, lombokEnabled: initializeMessage.lombokEnabled }); + break; + } case "settingsChanged": + this.setState({ lombokEnabled: (message as InitializeMessage).lombokEnabled }); + break; + } + }; + + componentDidMount(): void { + window.addEventListener("message", this.handleMessage); + vscode.postMessage({ + command: "webviewReady" + }); + } + + + render = () => { + + return ( + + ); + }; +} diff --git a/src/webview/dashboard/index.tsx b/src/webview/dashboard/index.tsx new file mode 100644 index 000000000..ee2cd1ea5 --- /dev/null +++ b/src/webview/dashboard/index.tsx @@ -0,0 +1,11 @@ +import React from "react"; +import ReactDOM from "react-dom"; +import { Dashboard } from "./dashboard"; + + +ReactDOM.render( + + + , + document.getElementById('root') +); \ No newline at end of file diff --git a/src/webview/dashboard/jvms.css b/src/webview/dashboard/jvms.css new file mode 100644 index 000000000..0748e852f --- /dev/null +++ b/src/webview/dashboard/jvms.css @@ -0,0 +1,22 @@ +.jvm-table { + text-align: left; + width: 100%; + border-collapse: collapse; + border: 1px solid var(--vscode-panel-border); +} + +.jvm-table td{ + border-left: 1px solid var(--vscode-panel-border); +} + +.jvm-table th{ + border-bottom: 1px solid var(--vscode-panel-border); +} + +.jvm-table th>td { + background-color: var(--vscode-sideBarSectionHeader-background); +} + +.jvm-table tbody tr.odd { + background-color: var(--vscode-tree-tableOddRowsBackground); +} \ No newline at end of file diff --git a/src/webview/dashboard/jvms.tsx b/src/webview/dashboard/jvms.tsx new file mode 100644 index 000000000..780219770 --- /dev/null +++ b/src/webview/dashboard/jvms.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { JVM } from "../../webviewProtocol/toDashboard"; +import path from "path"; +import './jvms.css'; + +export interface JvmsProps { + jvms: JVM[]; +} + +export class Jvms extends React.Component { + constructor(props: any) { + super(props); + this.state = { + }; + } + + render = () => { + return ( + + + + + + + + + {this.props.jvms.map((jvm, index) => ( + + + + + ))} + +
      NamePath
      {jvm.name}{jvm.path}
      + ); + }; +} \ No newline at end of file diff --git a/src/webviewProtocol/common.ts b/src/webviewProtocol/common.ts new file mode 100644 index 000000000..32214bedd --- /dev/null +++ b/src/webviewProtocol/common.ts @@ -0,0 +1,6 @@ +export interface WebviewMessage { + type: T; +} + +export type FromWebviewMessageType = "webviewReady"; +export type ToWebviewMessageType = "initialize" | "settingsChanged"; \ No newline at end of file diff --git a/src/webviewProtocol/fromDashboard.ts b/src/webviewProtocol/fromDashboard.ts new file mode 100644 index 000000000..b74d05243 --- /dev/null +++ b/src/webviewProtocol/fromDashboard.ts @@ -0,0 +1,7 @@ +import { FromWebviewMessageType, WebviewMessage } from "./common"; + +export type FromDashboardMessageType = FromWebviewMessageType; + +export interface DashboardMessage extends WebviewMessage { + message: FromDashboardMessageType; +} \ No newline at end of file diff --git a/src/webviewProtocol/toDashboard.ts b/src/webviewProtocol/toDashboard.ts new file mode 100644 index 000000000..c36a57cc6 --- /dev/null +++ b/src/webviewProtocol/toDashboard.ts @@ -0,0 +1,22 @@ +import { ToWebviewMessageType, WebviewMessage } from "./common"; + +export type ToDashboardMessageType = ToWebviewMessageType; + +export interface ToDashboardMessage extends WebviewMessage { +} + +export interface JVM { + name: string; + path: string; +} + +export interface InitializeMessage extends ToDashboardMessage { + type: "initialize"; + jvms: JVM[]; + lombokEnabled: boolean; +} + +export interface SettingChangedMessage extends ToDashboardMessage { + type: "settingsChanged"; + lombokEnabled: boolean; +} \ No newline at end of file diff --git a/tsconfig.base.json b/tsconfig.base.json index dfffa4556..17c7bc77a 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -4,6 +4,7 @@ "moduleResolution": "node", "outDir": "out", "sourceMap": true, + "skipLibCheck": true, "plugins": [ { "name": "eslint" diff --git a/tsconfig.json b/tsconfig.json index 762406ca7..6b133b627 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "node_modules", "server", ".vscode-test", - "src/webview" + "src/webview", + "test/resources/projects" ] } diff --git a/tsconfig.webview.json b/tsconfig.webview.json index a9d52e7cc..0c78cb638 100644 --- a/tsconfig.webview.json +++ b/tsconfig.webview.json @@ -2,16 +2,16 @@ "extends": "./tsconfig.base.json", "compilerOptions": { "lib": [ - "DOM" + "DOM", "ES6" ], "module": "ES6", /* Enabled for React */ "jsx": "react-jsx", "esModuleInterop": true, "allowSyntheticDefaultImports": true, - "skipLibCheck": true, }, "include": [ - "src/webview" + "src/webview", + "src/webviewProtocol" ] } diff --git a/webpack.config.js b/webpack.config.js index 811294e58..899f726b0 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -53,8 +53,8 @@ const config = { }, } -const configAssets = { - name: 'assets', +const configChangeSignature = { + name: 'changeSignature', mode: 'none', entry: { changeSignature: './src/webview/changeSignature/index.tsx', @@ -95,4 +95,47 @@ const configAssets = { extensions: ['.js', '.ts', '.tsx'] } } -module.exports = [config, configAssets]; + +const configDashboard = { + name: 'dashboard', + mode: 'none', + entry: { + dashboard: './src/webview/dashboard/index.tsx', + }, + module: { + rules: [{ + test: /\.ts(x?)$/, + exclude: /node_modules/, + loader: 'ts-loader', + options: { + configFile: 'tsconfig.webview.json' + } + }, { + test: /\.(css)$/, + use: [{ + loader: 'style-loader' + }, { + loader: 'css-loader' + }] + }, { + test: /\.(ttf)$/, + type: 'asset/inline', + }] + }, + output: { + filename: '[name].js', + path: path.resolve(__dirname, 'dist'), + publicPath: '/', + devtoolModuleFilenameTemplate: "../[resource-path]" + }, + plugins: [ + new webpack.ProvidePlugin({ + process: 'process/browser', + }), + ], + devtool: 'source-map', + resolve: { + extensions: ['.js', '.ts', '.tsx'] + } +} +module.exports = [config, configChangeSignature, configDashboard]; diff --git a/webview-resources/dashboard.css b/webview-resources/dashboard.css new file mode 100644 index 000000000..bbe7b6424 --- /dev/null +++ b/webview-resources/dashboard.css @@ -0,0 +1,13 @@ +.title { + font-weight: bold; + font-size: large; +}; + +.label { + font-weight: bold; + width: 30%; +}; + +.row { + width: 100%; +}; \ No newline at end of file From 20b26a9d04903ea7fa66ccc050cc02a92489f09f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Thu, 11 Sep 2025 14:36:51 +0200 Subject: [PATCH 600/708] Add more features to the Java Dashboard MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- icons/icon24.png | Bin 0 -> 1142 bytes icons/java-svgrepo-com.svg | 13 ++++ package.json | 43 +++++++---- src/commands.ts | 4 + src/dashboard/dashboard.ts | 109 +++++++++++++++++++++++---- src/extension.ts | 37 ++++----- src/lombokSupport.ts | 6 ++ src/webview/dashboard/dashboard.tsx | 48 +++++++++--- src/webviewProtocol/common.ts | 2 +- src/webviewProtocol/fromDashboard.ts | 3 +- src/webviewProtocol/toDashboard.ts | 24 ++++-- 11 files changed, 221 insertions(+), 68 deletions(-) create mode 100644 icons/icon24.png create mode 100644 icons/java-svgrepo-com.svg diff --git a/icons/icon24.png b/icons/icon24.png new file mode 100644 index 0000000000000000000000000000000000000000..41e133d27c6b8733ea7941075785e67e3c69b43c GIT binary patch literal 1142 zcmeAS@N?(olHy`uVBq!ia0vp^5+KaM1|%Pp+x`GjjKx9jP7LeL$-D$|SkfJR9T^xl z_H+M9WCij$3p^r=85s1GK$vmWqq~!U8X_}8B1$5BeXNr6bM+Ea@{>~aDsl^esu>t; zDy)Fa+|-gpg^Jvqyke^gTP3gxDz9|8>y;bpKhp88yV>WRp=I1=9MH? z=;jqGgUx^#;*wgNT$EW*l9`{U05UW&DZjMDRtac5*j*)=X$Yh9ilN>BdPpB6qi?8Z zpbs&O(*`79GdR}0Aja!w2d9FG3;%_n z1zUC-%T2rcE^j+8@A;LVtJCXl&%F7)Havix*GM>hiLcT0U=4Ti1-Dct%AUV@r6??koI9=%vlCNm}B(duP38JpFghHZPIAQHy1! zyx6nrsC~N5T=|)wW9(N}IyyRj`X0^yUG{8cgTsf#Mq3NHxcK_s`5bh2pMFEU>db4N zFZfD6~i!%lD+0!Huu~ zxZetIZ`#!VDRJW6y|rR_DxG!}ZvPIO#;tp+yuUwQ?s)U4A^Qa{ zMJ2(2t}g-Y*6M1GDUW6}JdEUSh-+WM=g+?0(xGaJ^co>&@7-tI7faaYotRSQx_`&@qKYeth!>Q!%S*D7YnRIt)B+OdJRVa1>7>X`L9F>$L~oX$R6 zA(3(B4xjhp=}qmqCpX`-W%c0RJ?V;B`<*{BFEYnIy@11_J01p3axHMhE1F$dK0+)eo3#~y~WS=BRk`TC-F8-HD(eF3qlWV<$dFP zO+ozej_TW?0X&}j+$7H5T6^F+zfqy}>gLwffilH={xT$F&s{co)^?N2?_}Gzomp?Y zwRo}Kq|T4LX@7z^9!D;@;FH~VSKV&urV|S+x0XHlAoXN!9$OTTQDv)G!pp^`hMj>| ic*M;kcX+-%Kkfg5gIw18Z%eNLWqwarKbLh*2~7Y*`pv`u literal 0 HcmV?d00001 diff --git a/icons/java-svgrepo-com.svg b/icons/java-svgrepo-com.svg new file mode 100644 index 000000000..17ea0060c --- /dev/null +++ b/icons/java-svgrepo-com.svg @@ -0,0 +1,13 @@ + + + + + + + + + + \ No newline at end of file diff --git a/package.json b/package.json index 6be11514d..937c196c0 100644 --- a/package.json +++ b/package.json @@ -1762,7 +1762,21 @@ "command": "java.action.showExtendedOutline", "title": "%java.action.showExtendedOutline%", "category": "Java" - } + }, + { + "command": "java.dashboard.refresh", + "category": "Java", + "title": "Refresh", + "icon": "$(refresh)", + "when": "java:dashboard == true" + }, + { + "command": "java.dashboard.dumpState", + "category": "Java", + "title": "Dump State", + "icon": "$(json)", + "when": "java:dashboard == true" + } ], "keybindings": [ { @@ -1938,6 +1952,16 @@ "command": "java.action.showSubtypeHierarchy", "group": "navigation@1", "when": "view == references-view.tree && reference-list.hasResult && reference-list.source == javaTypeHierarchy" + }, + { + "command": "java.dashboard.refresh", + "group": "navigation", + "when": "view == java.dashboard" + }, + { + "command": "java.dashboard.dumpState", + "group": "navigation", + "when": "view == java.dashboard" } ], "view/item/context": [ @@ -1948,22 +1972,13 @@ } ] }, - "viewsContainers": { - "activitybar": [ - { - "id": "vscode-java-container", - "title": "Java", - "icon": "icons/icon128.png" - } - ] - }, "views": { - "vscode-java-container": [ + "explorer": [ { "type": "webview", - "id": "vscode-java-dashboard", - "name": "Dashboard", - "icon": "icons/icons128.png" + "id": "java.dashboard", + "name": "Java Dashboard", + "icon": "icons/java-svgrepo-com.svg" } ] } diff --git a/src/commands.ts b/src/commands.ts index db05507f2..fea9a949b 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -371,6 +371,10 @@ export namespace Commands { */ export const GET_VISIBLE_EDITOR_CONTENT = '_java.getVisibleEditorContent'; + /** + * Get diagnostic info command in jdt.ls + */ + export const GET_DIAGNOSTIC_INFO = 'java.getDiagnosticInfo'; } /** diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 75ab3011a..80495764e 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -1,12 +1,57 @@ import { prepareExecutable } from '../javaServerStarter'; -import { getComputedJavaConfig, getExecutable } from '../extension'; +import { getComputedJavaConfig, getExecutable, getWorkspacePath } from '../extension'; import * as fs from 'fs'; import * as path from 'path'; import * as vscode from 'vscode'; import { getNonce, getUri } from '../webviewUtils'; -import { InitializeMessage, JVM, SettingChangedMessage } from '../webviewProtocol/toDashboard'; -import { isLombokSupportEnabled } from '../lombokSupport'; +import { DashboardState, DiagnosticInfo, JVM, UpdateMessage } from '../webviewProtocol/toDashboard'; +import { isLombokSupportEnabled, Lombok } from '../lombokSupport'; +import { Commands } from '../commands'; +import { apiManager } from '../apiManager'; +const currentState: DashboardState = { +}; + +export namespace Dashboard { + export function initialize(context: vscode.ExtensionContext): void { + console.log('registering dashboard webview provider'); + let webview: vscode.Webview; + + context.subscriptions.push(vscode.window.registerWebviewViewProvider('java.dashboard', { + resolveWebviewView: async function (webviewView: vscode.WebviewView, webviewContext: vscode.WebviewViewResolveContext, token: vscode.CancellationToken): Promise { + vscode.commands.executeCommand('setContext', 'java:dashboard', true); + webview = webviewView.webview; + webviewView.webview.options = { + enableScripts: true, + enableCommandUris: true, + localResourceRoots: [context.extensionUri] + }; + + webviewView.webview.html = await getWebviewContent(webviewView.webview, context); + webviewView.onDidDispose(() => { + vscode.commands.executeCommand('setContext', 'java:dashboard', false); + }); + } + })); + + context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.refresh', async () => { + refreshLSInfo(webview); + })); + + context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.revealFileInOS', async (arg: { path: string }) => { + await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(arg.path)); + })); + + context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.dumpState', async () => { + await vscode.workspace.openTextDocument({ + language: 'json', + content: JSON.stringify(currentState, null, 2) + }); + })); + + console.log('registered dashboard webview provider'); + } +} async function getJvms(): Promise { const config = await getComputedJavaConfig(); @@ -19,10 +64,10 @@ async function getJvms(): Promise { } -export function getWebviewContent(webview: vscode.Webview, extensionUri: vscode.Uri) { +function getWebviewContent(webview: vscode.Webview, context: vscode.ExtensionContext) { setWebviewMessageListener(webview); - const scriptUri = getUri(webview, extensionUri, [ + const scriptUri = getUri(webview, context.extensionUri, [ "dist", "dashboard.js", ]); @@ -45,30 +90,66 @@ export function getWebviewContent(webview: vscode.Webview, extensionUri: vscode. `; } +async function refreshLSInfo(webview: vscode.Webview): Promise { + try { + vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_DIAGNOSTIC_INFO).then(info => { + currentState.diagnosticInfo = info; + const msg: UpdateMessage = { + type: "update", + diagnosticInfo: info + }; + webview.postMessage(msg); + }); + } catch (e) { + console.error('Failed to get diagnostic info', e); + } +} + +function setWebviewMessageListener(webview: vscode.Webview) { -function setWebviewMessageListener(webview: vscode.Webview) { vscode.workspace.onDidChangeConfiguration(e => { if (e.affectsConfiguration('java.jdt.ls.lombokSupport.enabled')) { - const msg: SettingChangedMessage = { - type: "settingsChanged", + currentState.lombokEnabled = isLombokSupportEnabled(); + const msg: UpdateMessage = { + type: "update", lombokEnabled: isLombokSupportEnabled() - } + }; webview.postMessage(msg); } + if (e.affectsConfiguration('java')) { + setTimeout(() => refreshLSInfo(webview), 1000); // wait for LS to pick up the config change + } }); webview.onDidReceiveMessage( async (message: any) => { const command = message.command; switch (command) { - case "webviewReady": - const message: InitializeMessage = { - type: "initialize", - jvms: await getJvms(), - lombokEnabled: isLombokSupportEnabled() + case "webviewReady": { + await apiManager.getApiInstance().serverReady; + currentState.lombokEnabled = isLombokSupportEnabled(); + currentState.activeLombokPath = Lombok.getActiveLombokPath(); + currentState.workspacePath = getWorkspacePath(); + const message: UpdateMessage = { + type: "update", + lombokEnabled: isLombokSupportEnabled(), + activeLombokPath: Lombok.getActiveLombokPath(), + workspacePath: getWorkspacePath(), }; await webview.postMessage(message); + getJvms().then(jvms => { + currentState.jvms = jvms; + const msg: UpdateMessage = { + type: "update", + jvms: jvms + }; + + webview.postMessage(msg); + }); + + refreshLSInfo(webview); break; + } } } ); diff --git a/src/extension.ts b/src/extension.ts index da199c8ef..3e439a1aa 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -9,6 +9,7 @@ import * as semver from 'semver'; import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, + Webview, WebviewView, WebviewViewResolveContext, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { Executable, LanguageClient } from 'vscode-languageclient/node'; @@ -43,7 +44,7 @@ import { pasteFile } from './pasteAction'; import { ServerStatusKind } from './serverStatus'; import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib/node'; import { Deferred } from './promiseUtil'; -import { getWebviewContent } from './dashboard/dashboard'; +import { Dashboard } from './dashboard/dashboard'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -129,20 +130,11 @@ export function fixJdtLinksInDocumentation(oldDocumentation: MarkdownString): Ma } export async function activate(context: ExtensionContext): Promise { - console.log('registering webview provider'); - context.subscriptions.push(window.registerWebviewViewProvider('vscode-java-dashboard', { - resolveWebviewView: async function (webviewView: WebviewView, webviewContext: WebviewViewResolveContext, token: CancellationToken): Promise { - - webviewView.webview.options = { - enableScripts: true, - enableCommandUris: true, - localResourceRoots: [context.extensionUri] - }; - - webviewView.webview.html = await getWebviewContent(webviewView.webview, context.extensionUri); - } - })); - console.log('registered webview provider'); + storagePath = context.storagePath; + if (!storagePath) { + storagePath = getTempWorkspace(); + } + Dashboard.initialize(context); await loadSupportedJreNames(context); context.subscriptions.push(commands.registerCommand(Commands.FILESEXPLORER_ONPASTE, async () => { @@ -161,16 +153,13 @@ export async function activate(context: ExtensionContext): Promise markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.notCoveredExecution.md`)), 'Not Covered Maven Plugin Execution', "", context); })); - storagePath = context.storagePath; context.subscriptions.push(commands.registerCommand(Commands.METADATA_FILES_GENERATION, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `_java.metadataFilesGeneration.md`)), 'Metadata Files Generation', "", context); })); context.subscriptions.push(commands.registerCommand(Commands.LEARN_MORE_ABOUT_CLEAN_UPS, async () => { markdownPreviewProvider.show(context.asAbsolutePath(path.join('document', `${Commands.LEARN_MORE_ABOUT_CLEAN_UPS}.md`)), 'Java Clean Ups', "java-clean-ups", context); })); - if (!storagePath) { - storagePath = getTempWorkspace(); - } + const workspacePath = path.resolve(`${storagePath}/jdt_ws`); clientLogFile = path.join(storagePath, 'client.log'); const cleanWorkspaceExists = fs.existsSync(path.join(workspacePath, cleanWorkspaceFileName)); @@ -915,18 +904,22 @@ async function cleanSharedIndexes(context: ExtensionContext) { } function openServerLogFile(storagePath, column: ViewColumn = ViewColumn.Active): Thenable { - const workspacePath = getWorkspacePath(storagePath); + const workspacePath = computeWorkspacePath(storagePath); const serverLogFile = path.join(workspacePath, '.metadata', '.log'); return openLogFile(serverLogFile, 'Could not open Java Language Server log file', column); } -function getWorkspacePath(storagePath: any) { +function computeWorkspacePath(storagePath: any) { return path.join(storagePath, apiManager.getApiInstance().serverMode === ServerMode.lightWeight ? 'ss_ws' : 'jdt_ws'); } +export function getWorkspacePath() { + return computeWorkspacePath(storagePath); +} + function openRollingServerLogFile(storagePath, filename, column: ViewColumn = ViewColumn.Active): Thenable { return new Promise((resolve) => { - const workspacePath = getWorkspacePath(storagePath); + const workspacePath = computeWorkspacePath(storagePath); const dirname = path.join(workspacePath, '.metadata'); // find out the newest one diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index 4d791223b..b77b64932 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -30,6 +30,12 @@ let isLombokCommandInitialized: boolean = false; let isExtensionLombok: boolean = false; // whether use extension's Lombok or not let projectLombokPath: string = undefined; // the project's Lombok classpath +export namespace Lombok { + + export function getActiveLombokPath(): string | undefined { + return activeLombokPath; + } +} export function isLombokSupportEnabled(): boolean { return vscode.workspace.getConfiguration().get("java.jdt.ls.lombokSupport.enabled"); } diff --git a/src/webview/dashboard/dashboard.tsx b/src/webview/dashboard/dashboard.tsx index 6727d4bae..88a8ffcd9 100644 --- a/src/webview/dashboard/dashboard.tsx +++ b/src/webview/dashboard/dashboard.tsx @@ -3,12 +3,15 @@ import React from "react"; import { vscode } from "../vscodeApiWrapper"; import { Jvms } from "./jvms"; -import { InitializeMessage, JVM, ToDashboardMessage, ToDashboardMessageType } from "../../webviewProtocol/toDashboard"; +import { DiagnosticInfo, JVM, ToDashboardMessage, ToDashboardMessageType, UpdateMessage } from "../../webviewProtocol/toDashboard"; import './dashboard.css'; type State = { + workspacePath: string; jvms: JVM[]; lombokEnabled: boolean; + activeLombokPath: string | undefined; + diagnosticInfo: DiagnosticInfo | undefined; }; export interface AppProps { @@ -26,21 +29,29 @@ export class Dashboard extends React.Component { constructor(props: AppProps) { super(props); this.state = { + workspacePath: 'unknown', jvms: [], lombokEnabled: false, + activeLombokPath: 'unknown', + diagnosticInfo: { + mavenUserSettings: 'unknown', + mavenGlobalSettings: 'unknown', + activeImporters: [], + gradleUserHome: 'unknown', + gradleJavaHome: 'unknown' + } }; } handleMessage = (event: MessageEvent) => { const message = event.data as ToDashboardMessage; switch (message.type) { - case "initialize": { - const initializeMessage = message as InitializeMessage; - this.setState({ jvms: initializeMessage.jvms, lombokEnabled: initializeMessage.lombokEnabled }); - break; - } case "settingsChanged": - this.setState({ lombokEnabled: (message as InitializeMessage).lombokEnabled }); - break; + case "update": { + for (const [key, value] of Object.entries(message as UpdateMessage)) { + this.setState({ [key]: value } as Pick); + } + } + break; } }; @@ -54,15 +65,34 @@ export class Dashboard extends React.Component { render = () => { + const args = [ { + path: this.state.workspacePath + }]; + return (
      +

      Workspace

      +
      Path: {this.state.workspacePath || 'undefined'}
      +

      Detected Java Installations

      configure...

      Lombok Support

      - enabled +
      enabled configure... +
      +
      Using Lombok at: {this.state.activeLombokPath || ''}
      +

      Maven

      +
      User Settings: {this.state.diagnosticInfo?.mavenUserSettings || 'undefined'} configure...
      +
      Global Settings: {this.state.diagnosticInfo?.mavenGlobalSettings || 'undefined'} configure...
      +

      Gradle

      +
      User Home: {this.state.diagnosticInfo?.gradleUserHome || 'undefined'} configure...
      +
      Java Home: {this.state.diagnosticInfo?.gradleJavaHome || 'undefined'} configure...
      +

      Registered Project Importers

      + {this.state.diagnosticInfo?.activeImporters.map((clazz, index) => ( +
      {clazz}
      + ))}
      ); }; diff --git a/src/webviewProtocol/common.ts b/src/webviewProtocol/common.ts index 32214bedd..efb51cd9f 100644 --- a/src/webviewProtocol/common.ts +++ b/src/webviewProtocol/common.ts @@ -3,4 +3,4 @@ export interface WebviewMessage { } export type FromWebviewMessageType = "webviewReady"; -export type ToWebviewMessageType = "initialize" | "settingsChanged"; \ No newline at end of file +export type ToWebviewMessageType = "update"; \ No newline at end of file diff --git a/src/webviewProtocol/fromDashboard.ts b/src/webviewProtocol/fromDashboard.ts index b74d05243..f1d0ace2d 100644 --- a/src/webviewProtocol/fromDashboard.ts +++ b/src/webviewProtocol/fromDashboard.ts @@ -4,4 +4,5 @@ export type FromDashboardMessageType = FromWebviewMessageType; export interface DashboardMessage extends WebviewMessage { message: FromDashboardMessageType; -} \ No newline at end of file +} + diff --git a/src/webviewProtocol/toDashboard.ts b/src/webviewProtocol/toDashboard.ts index c36a57cc6..df4133284 100644 --- a/src/webviewProtocol/toDashboard.ts +++ b/src/webviewProtocol/toDashboard.ts @@ -1,3 +1,4 @@ +import { Diagnostic } from "vscode"; import { ToWebviewMessageType, WebviewMessage } from "./common"; export type ToDashboardMessageType = ToWebviewMessageType; @@ -10,13 +11,22 @@ export interface JVM { path: string; } -export interface InitializeMessage extends ToDashboardMessage { - type: "initialize"; - jvms: JVM[]; - lombokEnabled: boolean; +export interface DashboardState { + jvms?: JVM[]; + workspacePath?: string; + lombokEnabled?: boolean; + activeLombokPath?: string | undefined; + diagnosticInfo?: DiagnosticInfo; } -export interface SettingChangedMessage extends ToDashboardMessage { - type: "settingsChanged"; - lombokEnabled: boolean; +export interface DiagnosticInfo { + readonly mavenUserSettings: string; + readonly mavenGlobalSettings: string; + readonly activeImporters: string[]; + readonly gradleUserHome: string; + readonly gradleJavaHome: string; +} + +export interface UpdateMessage extends ToDashboardMessage, DashboardState { + type: "update"; } \ No newline at end of file From 60e056d05fac2827d484b1d13145c5bf1397e1f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Tue, 16 Sep 2025 11:03:11 +0200 Subject: [PATCH 601/708] Adapt to renames in jdt.ls MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- src/commands.ts | 2 +- src/dashboard/dashboard.ts | 2 +- src/webview/dashboard/dashboard.tsx | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index fea9a949b..94c5e2408 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -374,7 +374,7 @@ export namespace Commands { /** * Get diagnostic info command in jdt.ls */ - export const GET_DIAGNOSTIC_INFO = 'java.getDiagnosticInfo'; + export const GET_TROUBLESHOOTING_INFO = 'java.getTroubleshootingInfo'; } /** diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 80495764e..ebe9e3851 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -92,7 +92,7 @@ function getWebviewContent(webview: vscode.Webview, context: vscode.ExtensionCon } async function refreshLSInfo(webview: vscode.Webview): Promise { try { - vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_DIAGNOSTIC_INFO).then(info => { + vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_TROUBLESHOOTING_INFO).then(info => { currentState.diagnosticInfo = info; const msg: UpdateMessage = { type: "update", diff --git a/src/webview/dashboard/dashboard.tsx b/src/webview/dashboard/dashboard.tsx index 88a8ffcd9..9586624e8 100644 --- a/src/webview/dashboard/dashboard.tsx +++ b/src/webview/dashboard/dashboard.tsx @@ -91,7 +91,7 @@ export class Dashboard extends React.Component {
      Java Home: {this.state.diagnosticInfo?.gradleJavaHome || 'undefined'} configure...

      Registered Project Importers

      {this.state.diagnosticInfo?.activeImporters.map((clazz, index) => ( -
      {clazz}
      +
      {clazz}
      ))} ); From 22dbbc7e22661cf63faa5207b273915de64f31e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 1 Oct 2025 14:12:44 +0200 Subject: [PATCH 602/708] Changed dashboard to webview panel and addressed some PR comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- package.json | 41 ++--- src/commands.ts | 2 +- src/dashboard/dashboard.ts | 276 +++++++++++++++------------- src/webview/dashboard/dashboard.css | 12 ++ src/webview/dashboard/dashboard.tsx | 11 +- 5 files changed, 194 insertions(+), 148 deletions(-) diff --git a/package.json b/package.json index 937c196c0..78f0dc938 100644 --- a/package.json +++ b/package.json @@ -1776,7 +1776,13 @@ "title": "Dump State", "icon": "$(json)", "when": "java:dashboard == true" - } + }, + { + "command": "java.dashboard.open", + "category": "Java", + "title": "Open Java Dashboard", + "icon": "$(dashboard)" + } ], "keybindings": [ { @@ -1829,7 +1835,20 @@ "group": "1_javaactions@2" } ], + "editor/title": [ + { + "command": "java.dashboard.refresh", + "group": "navigation", + "when": "webviewId == java.dashboard" + }, + { + "command": "java.dashboard.dumpState", + "group": "navigation", + "when": "webviewId == java.dashboard" + } + ], "editor/context": [ + { "command": "java.project.updateSourceAttachment.command", "when": "editorReadonly && editorLangId == java", @@ -1952,16 +1971,6 @@ "command": "java.action.showSubtypeHierarchy", "group": "navigation@1", "when": "view == references-view.tree && reference-list.hasResult && reference-list.source == javaTypeHierarchy" - }, - { - "command": "java.dashboard.refresh", - "group": "navigation", - "when": "view == java.dashboard" - }, - { - "command": "java.dashboard.dumpState", - "group": "navigation", - "when": "view == java.dashboard" } ], "view/item/context": [ @@ -1971,16 +1980,6 @@ "when": "view == references-view.tree && reference-list.hasResult && reference-list.source == javaTypeHierarchy && viewItem != 'false'" } ] - }, - "views": { - "explorer": [ - { - "type": "webview", - "id": "java.dashboard", - "name": "Java Dashboard", - "icon": "icons/java-svgrepo-com.svg" - } - ] } }, "scripts": { diff --git a/src/commands.ts b/src/commands.ts index 94c5e2408..b37c0f2eb 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -372,7 +372,7 @@ export namespace Commands { export const GET_VISIBLE_EDITOR_CONTENT = '_java.getVisibleEditorContent'; /** - * Get diagnostic info command in jdt.ls + * Get troubleshooting info command in jdt.ls */ export const GET_TROUBLESHOOTING_INFO = 'java.getTroubleshootingInfo'; } diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index ebe9e3851..62de02701 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -1,156 +1,186 @@ -import { prepareExecutable } from '../javaServerStarter'; -import { getComputedJavaConfig, getExecutable, getWorkspacePath } from '../extension'; -import * as fs from 'fs'; -import * as path from 'path'; import * as vscode from 'vscode'; -import { getNonce, getUri } from '../webviewUtils'; -import { DashboardState, DiagnosticInfo, JVM, UpdateMessage } from '../webviewProtocol/toDashboard'; -import { isLombokSupportEnabled, Lombok } from '../lombokSupport'; -import { Commands } from '../commands'; import { apiManager } from '../apiManager'; +import { Commands } from '../commands'; +import { getComputedJavaConfig, getWorkspacePath } from '../extension'; +import { isLombokSupportEnabled, Lombok } from '../lombokSupport'; +import { DashboardState, DiagnosticInfo, JVM, UpdateMessage } from '../webviewProtocol/toDashboard'; +import { getNonce, getUri } from '../webviewUtils'; const currentState: DashboardState = { }; -export namespace Dashboard { - export function initialize(context: vscode.ExtensionContext): void { - console.log('registering dashboard webview provider'); - let webview: vscode.Webview; - context.subscriptions.push(vscode.window.registerWebviewViewProvider('java.dashboard', { - resolveWebviewView: async function (webviewView: vscode.WebviewView, webviewContext: vscode.WebviewViewResolveContext, token: vscode.CancellationToken): Promise { - vscode.commands.executeCommand('setContext', 'java:dashboard', true); - webview = webviewView.webview; - webviewView.webview.options = { - enableScripts: true, - enableCommandUris: true, - localResourceRoots: [context.extensionUri] - }; +class DashboardPanel { + private disposables: vscode.Disposable[] = []; - webviewView.webview.html = await getWebviewContent(webviewView.webview, context); - webviewView.onDidDispose(() => { - vscode.commands.executeCommand('setContext', 'java:dashboard', false); - }); + constructor(private webView: vscode.Webview, private readonly context: vscode.ExtensionContext) { + this.init(); + } + + private init(): void { + this.disposables.push(vscode.workspace.onDidChangeConfiguration(e => { + if (e.affectsConfiguration('java.jdt.ls.lombokSupport.enabled')) { + currentState.lombokEnabled = isLombokSupportEnabled(); + const msg: UpdateMessage = { + type: "update", + lombokEnabled: isLombokSupportEnabled() + }; + this.postMessage(msg); + } + if (e.affectsConfiguration('java')) { + setTimeout(() => this.refreshLSInfo(), 1000); // wait for LS to pick up the config change } })); - - context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.refresh', async () => { - refreshLSInfo(webview); + this.setWebviewMessageListener(); + this.webView.html = this.getWebviewContent(); + this.disposables.push(vscode.commands.registerCommand('java.dashboard.refresh', async () => { + this.refreshLSInfo(); })); - context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.revealFileInOS', async (arg: { path: string }) => { + this.disposables.push(vscode.commands.registerCommand('java.dashboard.revealFileInOS', async (arg: { path: string }) => { await vscode.commands.executeCommand('revealFileInOS', vscode.Uri.file(arg.path)); })); - context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.dumpState', async () => { - await vscode.workspace.openTextDocument({ + this.disposables.push(vscode.commands.registerCommand('java.dashboard.dumpState', async () => { + const doc = await vscode.workspace.openTextDocument({ language: 'json', content: JSON.stringify(currentState, null, 2) }); + vscode.window.showTextDocument(doc); })); + } - console.log('registered dashboard webview provider'); + private postMessage(message: UpdateMessage) { + if (this.webView) { + this.webView.postMessage(message); + } } -} -async function getJvms(): Promise { - const config = await getComputedJavaConfig(); - const jres: JVM[] = config.configuration.runtimes.map(jre => ({ - name: jre.name, - version: jre.version, - path: jre.path, - })); - return jres; + private setWebviewMessageListener() { + this.webView.onDidReceiveMessage( + async (message: any) => { + const command = message.command; + switch (command) { + case "webviewReady": { + await apiManager.getApiInstance().serverReady(); + currentState.lombokEnabled = isLombokSupportEnabled(); + currentState.activeLombokPath = Lombok.getActiveLombokPath(); + currentState.workspacePath = getWorkspacePath(); + const message: UpdateMessage = { + type: "update", + lombokEnabled: isLombokSupportEnabled(), + activeLombokPath: Lombok.getActiveLombokPath(), + workspacePath: getWorkspacePath(), + }; + await this.postMessage(message); + this.getJvms().then(jvms => { + currentState.jvms = jvms; + const msg: UpdateMessage = { + type: "update", + jvms: jvms + }; + + this.postMessage(msg); + }); + + this.refreshLSInfo(); + break; + } + } + } + ); + } -} + public dispose(): void { + this.webView = undefined; + for (const disposable of this.disposables) { + disposable.dispose(); + } + } + + private async getJvms(): Promise { + const config = await getComputedJavaConfig(); + const jres: JVM[] = config.configuration.runtimes.map(jre => ({ + name: jre.name, + version: jre.version, + path: jre.path, + })); + return jres; -function getWebviewContent(webview: vscode.Webview, context: vscode.ExtensionContext) { - setWebviewMessageListener(webview); - - const scriptUri = getUri(webview, context.extensionUri, [ - "dist", - "dashboard.js", - ]); - - const nonce = getNonce(); - - return /* html*/ ` - - - - - - - Dashboard - - -
      - - - -`; -} -async function refreshLSInfo(webview: vscode.Webview): Promise { - try { - vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_TROUBLESHOOTING_INFO).then(info => { - currentState.diagnosticInfo = info; - const msg: UpdateMessage = { - type: "update", - diagnosticInfo: info - }; - webview.postMessage(msg); - }); - } catch (e) { - console.error('Failed to get diagnostic info', e); } -} -function setWebviewMessageListener(webview: vscode.Webview) { + private getWebviewContent(): string { + const scriptUri = getUri(this.webView, this.context.extensionUri, [ + "dist", + "dashboard.js", + ]); + + const nonce = getNonce(); + const codiconsUri = this.webView.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, 'node_modules', '@vscode/codicons', 'dist', 'codicon.css')); + + return /* html*/ ` + + + + + + + + Dashboard + + +
      + + + + `; + } - vscode.workspace.onDidChangeConfiguration(e => { - if (e.affectsConfiguration('java.jdt.ls.lombokSupport.enabled')) { - currentState.lombokEnabled = isLombokSupportEnabled(); - const msg: UpdateMessage = { - type: "update", - lombokEnabled: isLombokSupportEnabled() - }; - webview.postMessage(msg); + private async refreshLSInfo(): Promise { + if (!this.webView) { + return; } - if (e.affectsConfiguration('java')) { - setTimeout(() => refreshLSInfo(webview), 1000); // wait for LS to pick up the config change + try { + vscode.commands.executeCommand(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_TROUBLESHOOTING_INFO).then(info => { + currentState.diagnosticInfo = info; + const msg: UpdateMessage = { + type: "update", + diagnosticInfo: info + }; + this.postMessage(msg); + }); + } catch (e) { + console.error('Failed to get diagnostic info', e); } - }); - - webview.onDidReceiveMessage( - async (message: any) => { - const command = message.command; - switch (command) { - case "webviewReady": { - await apiManager.getApiInstance().serverReady; - currentState.lombokEnabled = isLombokSupportEnabled(); - currentState.activeLombokPath = Lombok.getActiveLombokPath(); - currentState.workspacePath = getWorkspacePath(); - const message: UpdateMessage = { - type: "update", - lombokEnabled: isLombokSupportEnabled(), - activeLombokPath: Lombok.getActiveLombokPath(), - workspacePath: getWorkspacePath(), - }; - await webview.postMessage(message); - getJvms().then(jvms => { - currentState.jvms = jvms; - const msg: UpdateMessage = { - type: "update", - jvms: jvms - }; + } +} - webview.postMessage(msg); - }); +export namespace Dashboard { + export function initialize(context: vscode.ExtensionContext): void { + console.log('registering dashboard webview provider'); + let dashboardPanel: DashboardPanel; + let webviewPanel: vscode.WebviewPanel; - refreshLSInfo(webview); - break; - } + context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.open', async () => { + if (!dashboardPanel) { + webviewPanel = vscode.window.createWebviewPanel('java.dashboard', 'Dashboard', vscode.ViewColumn.Active, { + enableScripts: true, + enableCommandUris: true, + retainContextWhenHidden: true, + localResourceRoots: [context.extensionUri] + }); + dashboardPanel = new DashboardPanel(webviewPanel.webview, context); + + webviewPanel.onDidDispose(() => { + dashboardPanel.dispose(); + dashboardPanel = undefined; + webviewPanel = undefined; + vscode.commands.executeCommand('setContext', 'java:dashboard', false); + }, undefined, context.subscriptions); + } else { + webviewPanel.reveal(); } - } - ); + })); + console.log('registered dashboard webview provider'); + } } diff --git a/src/webview/dashboard/dashboard.css b/src/webview/dashboard/dashboard.css index e69de29bb..66a6fc969 100644 --- a/src/webview/dashboard/dashboard.css +++ b/src/webview/dashboard/dashboard.css @@ -0,0 +1,12 @@ +.toolbar { + margin: 8px; + width: 100%; + display: flex; + flex-flow: row nowrap; + gap: 4px; + justify-content: flex-end; +} + +.toolbarItem { + color: var(--vscode-sideBarSectionHeader-foreground); +} \ No newline at end of file diff --git a/src/webview/dashboard/dashboard.tsx b/src/webview/dashboard/dashboard.tsx index 9586624e8..da6ff61a3 100644 --- a/src/webview/dashboard/dashboard.tsx +++ b/src/webview/dashboard/dashboard.tsx @@ -68,9 +68,12 @@ export class Dashboard extends React.Component { const args = [ { path: this.state.workspacePath }]; - return (
      +
      + + +

      Workspace

      Path: {this.state.workspacePath || 'undefined'}
      @@ -79,8 +82,10 @@ export class Dashboard extends React.Component { configure...

      Lombok Support

      -
      enabled - configure... +
      + enabled + + configure...
      Using Lombok at: {this.state.activeLombokPath || ''}

      Maven

      From 9b7b998191d24ddbf14dd25abf6417df48d28f4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Wed, 1 Oct 2025 14:43:19 +0200 Subject: [PATCH 603/708] Fix tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- test/lightweight-mode-suite/extension.test.ts | 3 ++- test/standard-mode-suite/extension.test.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 23f1a2758..cce4986b3 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -26,7 +26,8 @@ suite('Java Language Extension - LightWeight', () => { Commands.CLEAN_SHARED_INDEXES, Commands.RESTART_LANGUAGE_SERVER, Commands.FILESEXPLORER_ONPASTE, - Commands.CHANGE_JAVA_SEARCH_SCOPE + Commands.CHANGE_JAVA_SEARCH_SCOPE, + "java.dashboard.open" ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 54df60897..5ce91f9b9 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -127,7 +127,8 @@ suite('Java Language Extension - Standard', () => { Commands.RESOLVE_SOURCE_ATTACHMENT, Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, - Commands.CHANGE_JAVA_SEARCH_SCOPE + Commands.CHANGE_JAVA_SEARCH_SCOPE, + "java.dashboard.open" ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 2fc70a75fa804efce86756e527d1f12acf924919 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Thu, 2 Oct 2025 10:35:21 +0200 Subject: [PATCH 604/708] Add OPEN_JAVA_DASHBOARD command to commands.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- src/commands.ts | 5 +++++ src/dashboard/dashboard.ts | 2 +- test/lightweight-mode-suite/extension.test.ts | 2 +- test/standard-mode-suite/extension.test.ts | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/commands.ts b/src/commands.ts index b37c0f2eb..11048b3f5 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -375,6 +375,11 @@ export namespace Commands { * Get troubleshooting info command in jdt.ls */ export const GET_TROUBLESHOOTING_INFO = 'java.getTroubleshootingInfo'; + + /** + * Open Java Dashboard + */ + export const OPEN_JAVA_DASHBOARD = 'java.dashboard.open'; } /** diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 62de02701..30752d6cb 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -161,7 +161,7 @@ export namespace Dashboard { let dashboardPanel: DashboardPanel; let webviewPanel: vscode.WebviewPanel; - context.subscriptions.push(vscode.commands.registerCommand('java.dashboard.open', async () => { + context.subscriptions.push(vscode.commands.registerCommand(Commands.OPEN_JAVA_DASHBOARD, async () => { if (!dashboardPanel) { webviewPanel = vscode.window.createWebviewPanel('java.dashboard', 'Dashboard', vscode.ViewColumn.Active, { enableScripts: true, diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index cce4986b3..6f15765ba 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -27,7 +27,7 @@ suite('Java Language Extension - LightWeight', () => { Commands.RESTART_LANGUAGE_SERVER, Commands.FILESEXPLORER_ONPASTE, Commands.CHANGE_JAVA_SEARCH_SCOPE, - "java.dashboard.open" + Commands.OPEN_JAVA_DASHBOARD ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 5ce91f9b9..807c11ed8 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -128,7 +128,7 @@ suite('Java Language Extension - Standard', () => { Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, Commands.CHANGE_JAVA_SEARCH_SCOPE, - "java.dashboard.open" + Commands.OPEN_JAVA_DASHBOARD ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 6f351d5598f76d48ec580e65cc519b610b7aa03e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Thu, 2 Oct 2025 15:34:22 +0200 Subject: [PATCH 605/708] Addresses more PR comments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- .vscode/extensions.json | 3 +-- src/dashboard/dashboard.ts | 2 +- src/webview/dashboard/dashboard.tsx | 2 +- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.vscode/extensions.json b/.vscode/extensions.json index ce6a89fdf..7a024e403 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -5,7 +5,6 @@ // Extension identifier format: ${publisher}.${name}. Example: vscode.csharp "dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", - "amodio.tsl-problem-matcher", - "yaozheng.vscode-pde" + "amodio.tsl-problem-matcher" ] } diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 30752d6cb..61d591678 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -163,7 +163,7 @@ export namespace Dashboard { context.subscriptions.push(vscode.commands.registerCommand(Commands.OPEN_JAVA_DASHBOARD, async () => { if (!dashboardPanel) { - webviewPanel = vscode.window.createWebviewPanel('java.dashboard', 'Dashboard', vscode.ViewColumn.Active, { + webviewPanel = vscode.window.createWebviewPanel('java.dashboard', 'Java Dashboard', vscode.ViewColumn.Active, { enableScripts: true, enableCommandUris: true, retainContextWhenHidden: true, diff --git a/src/webview/dashboard/dashboard.tsx b/src/webview/dashboard/dashboard.tsx index da6ff61a3..699157f21 100644 --- a/src/webview/dashboard/dashboard.tsx +++ b/src/webview/dashboard/dashboard.tsx @@ -75,7 +75,7 @@ export class Dashboard extends React.Component {

      Workspace

      -
      Path: {this.state.workspacePath || 'undefined'}
      +
      Language Server Workspace: {this.state.workspacePath || 'undefined'}

      Detected Java Installations

      From 5edfbe0ddc6800777bb8614de8bee73fc38e01ac Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 2 Oct 2025 13:23:10 -0400 Subject: [PATCH 606/708] Add changelog entry for "Java Dashboard" enhancement. Signed-off-by: Roland Grunberg --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 738d36d4a..ab2b744ec 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ * performance - Cleaning workspace should also delete configuration folder. See [#4157](https://github.com/redhat-developer/vscode-java/issues/4157). * performance - Improve Null Analysis by reducing & deferring expensive calls. See [JLS#3531](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3531). * enhancement - Support Java 25. See [#4170](https://github.com/redhat-developer/vscode-java/pull/4170), [#4185](https://github.com/redhat-developer/vscode-java/pull/4185), [#4172](https://github.com/redhat-developer/vscode-java/pull/4172). + * enhancement - Add a "Java Dashboard" view that presents information for troubleshooting. See [#4128](https://github.com/redhat-developer/vscode-java/issues/4128). * enhancement - Support fuzzy camel case search for workspace symbols. See [JLS#3513](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3513). * enhancement - Enable formatting Java in Jupyter Notebook. See [#4163](https://github.com/redhat-developer/vscode-java/issues/4163). * enhancement - Add inlay hints for implicit variable types. See [#4031](https://github.com/redhat-developer/vscode-java/issues/4031). From d4caa5bed7bf7e394405e17f65c0298cd7d2bf7f Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 2 Oct 2025 15:59:09 -0400 Subject: [PATCH 607/708] Upversion to 1.47.0. Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0fa7c47f1..0b8e2b3ea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.46.0", + "version": "1.47.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.46.0", + "version": "1.47.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 78f0dc938..d786d40d9 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.46.0", + "version": "1.47.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -1763,10 +1763,10 @@ "title": "%java.action.showExtendedOutline%", "category": "Java" }, - { - "command": "java.dashboard.refresh", - "category": "Java", - "title": "Refresh", + { + "command": "java.dashboard.refresh", + "category": "Java", + "title": "Refresh", "icon": "$(refresh)", "when": "java:dashboard == true" }, @@ -1776,7 +1776,7 @@ "title": "Dump State", "icon": "$(json)", "when": "java:dashboard == true" - }, + }, { "command": "java.dashboard.open", "category": "Java", @@ -1837,10 +1837,10 @@ ], "editor/title": [ { - "command": "java.dashboard.refresh", - "group": "navigation", - "when": "webviewId == java.dashboard" - }, + "command": "java.dashboard.refresh", + "group": "navigation", + "when": "webviewId == java.dashboard" + }, { "command": "java.dashboard.dumpState", "group": "navigation", @@ -1848,7 +1848,6 @@ } ], "editor/context": [ - { "command": "java.project.updateSourceAttachment.command", "when": "editorReadonly && editorLangId == java", @@ -2057,4 +2056,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 061cd2ae99d72ca9b8ce4f100ffad4a35030918e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Fri, 3 Oct 2025 16:38:18 +0200 Subject: [PATCH 608/708] Added Content-Security-Policy meta tags to webviews MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- package-lock.json | 113 ++++++++++++++++++++---- package.json | 2 +- src/dashboard/dashboard.ts | 14 ++- src/refactoring/changeSignaturePanel.ts | 14 ++- src/webview/dashboard/dashboard.css | 2 + src/webviewUtils.ts | 2 +- webpack.config.js | 12 ++- 7 files changed, 121 insertions(+), 38 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0b8e2b3ea..9f615027d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,11 +54,11 @@ "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", "lodash.template": ">=4.5.0", + "mini-css-extract-plugin": "^2.9.4", "minimist": ">=1.2.6", "mocha": "^11.1.0", "request": "^2.88.2", "sinon": "^14.0.0", - "style-loader": "^3.3.1", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -3301,6 +3301,23 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -5201,6 +5218,84 @@ "node": ">=6" } }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", + "integrity": "sha512-ZWYT7ln73Hptxqxk2DxPU9MmapXRhxkJD6tkSR04dnQxm8BGu2hzgKLugK5yySD97u/8yy7Ma7E76k9ZdvtjkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6895,22 +6990,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/style-loader": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-3.3.1.tgz", - "integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==", - "dev": true, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.0.0" - } - }, "node_modules/supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", diff --git a/package.json b/package.json index d786d40d9..e2ba6ae47 100644 --- a/package.json +++ b/package.json @@ -2024,7 +2024,7 @@ "mocha": "^11.1.0", "request": "^2.88.2", "sinon": "^14.0.0", - "style-loader": "^3.3.1", + "mini-css-extract-plugin": "^2.9.4", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 61d591678..7b0201d8e 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -110,27 +110,23 @@ class DashboardPanel { } private getWebviewContent(): string { - const scriptUri = getUri(this.webView, this.context.extensionUri, [ - "dist", - "dashboard.js", - ]); - - const nonce = getNonce(); - const codiconsUri = this.webView.asWebviewUri(vscode.Uri.joinPath(this.context.extensionUri, 'node_modules', '@vscode/codicons', 'dist', 'codicon.css')); + const scriptUri = getUri(this.webView, this.context.extensionUri, "dist", "dashboard.js"); + const styleUri = getUri(this.webView, this.context.extensionUri, "dist", "dashboard.css"); return /* html*/ ` + - Dashboard +
      - + `; diff --git a/src/refactoring/changeSignaturePanel.ts b/src/refactoring/changeSignaturePanel.ts index b9afd8cc9..5935d9f72 100644 --- a/src/refactoring/changeSignaturePanel.ts +++ b/src/refactoring/changeSignaturePanel.ts @@ -108,26 +108,24 @@ export class ChangeSignaturePanel { } private getWebviewContent(webview: Webview, extensionUri: Uri) { - - const scriptUri = getUri(webview, extensionUri, [ - "dist", - "changeSignature.js", - ]); - - const nonce = getNonce(); + const scriptUri = getUri(webview, extensionUri, "dist", "changeSignature.js"); + const styleUri = getUri(webview, extensionUri, "dist", "changeSignature.css"); return /* html*/ ` + + Change Signature +
      - + `; diff --git a/src/webview/dashboard/dashboard.css b/src/webview/dashboard/dashboard.css index 66a6fc969..96ed2d363 100644 --- a/src/webview/dashboard/dashboard.css +++ b/src/webview/dashboard/dashboard.css @@ -1,3 +1,5 @@ +@import "../../../node_modules/@vscode/codicons/dist/codicon.css"; + .toolbar { margin: 8px; width: 100%; diff --git a/src/webviewUtils.ts b/src/webviewUtils.ts index 394fd9410..3d79f13d4 100644 --- a/src/webviewUtils.ts +++ b/src/webviewUtils.ts @@ -1,6 +1,6 @@ import { Uri, Webview } from "vscode"; -export function getUri(webview: Webview, extensionUri: Uri, pathList: string[]) { +export function getUri(webview: Webview, extensionUri: Uri, ...pathList: string[]) { return webview.asWebviewUri(Uri.joinPath(extensionUri, ...pathList)); } diff --git a/webpack.config.js b/webpack.config.js index 899f726b0..ae1321324 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -53,6 +53,8 @@ const config = { }, } +const MiniCssExtractPlugin = require("mini-css-extract-plugin"); + const configChangeSignature = { name: 'changeSignature', mode: 'none', @@ -70,7 +72,7 @@ const configChangeSignature = { }, { test: /\.(css)$/, use: [{ - loader: 'style-loader' + loader: MiniCssExtractPlugin.loader, }, { loader: 'css-loader' }] @@ -86,6 +88,9 @@ const configChangeSignature = { devtoolModuleFilenameTemplate: "../[resource-path]" }, plugins: [ + new MiniCssExtractPlugin({ + filename: 'changeSignature.css' + }), new webpack.ProvidePlugin({ process: 'process/browser', }), @@ -113,7 +118,7 @@ const configDashboard = { }, { test: /\.(css)$/, use: [{ - loader: 'style-loader' + loader: MiniCssExtractPlugin.loader, }, { loader: 'css-loader' }] @@ -129,6 +134,9 @@ const configDashboard = { devtoolModuleFilenameTemplate: "../[resource-path]" }, plugins: [ + new MiniCssExtractPlugin({ + filename: 'dashboard.css' + }), new webpack.ProvidePlugin({ process: 'process/browser', }), From 0511638fefd5347137e96e5e9a5f1fb1ae4d1a34 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 3 Oct 2025 19:24:57 +0200 Subject: [PATCH 609/708] fix: add missing icon to Java Dashboard webview Signed-off-by: Fred Bricon --- src/dashboard/dashboard.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/dashboard/dashboard.ts b/src/dashboard/dashboard.ts index 7b0201d8e..772b06e94 100644 --- a/src/dashboard/dashboard.ts +++ b/src/dashboard/dashboard.ts @@ -5,6 +5,8 @@ import { getComputedJavaConfig, getWorkspacePath } from '../extension'; import { isLombokSupportEnabled, Lombok } from '../lombokSupport'; import { DashboardState, DiagnosticInfo, JVM, UpdateMessage } from '../webviewProtocol/toDashboard'; import { getNonce, getUri } from '../webviewUtils'; +import { Uri } from 'vscode'; +import * as path from 'path'; const currentState: DashboardState = { }; @@ -163,8 +165,9 @@ export namespace Dashboard { enableScripts: true, enableCommandUris: true, retainContextWhenHidden: true, - localResourceRoots: [context.extensionUri] + localResourceRoots: [context.extensionUri], }); + webviewPanel.iconPath = Uri.file(path.join(context.extensionPath, 'icons', 'icon128.png')); dashboardPanel = new DashboardPanel(webviewPanel.webview, context); webviewPanel.onDidDispose(() => { From f68c9865818409cff118d9ca3911011660808caa Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 6 Oct 2025 14:54:54 +0200 Subject: [PATCH 610/708] deps: bump vscode-redhat-telemetry to 0.9.2 Signed-off-by: Fred Bricon --- package-lock.json | 385 ++++++++++++++++++++++++++-------------------- package.json | 2 +- 2 files changed, 221 insertions(+), 166 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9f615027d..3bb65d78d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.2", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -311,6 +311,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.1.0.tgz", "integrity": "sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==", + "license": "MIT", "engines": { "node": ">=8" } @@ -319,6 +320,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/@lukeed/uuid/-/uuid-2.0.1.tgz", "integrity": "sha512-qC72D4+CDdjGqJvkFMMEAtancHUQ7/d/tAiHf64z8MopFDmcrtbcJuerDtFceuAfQJ2pDSfCKCtbqoGBNnwg0w==", + "license": "MIT", "dependencies": { "@lukeed/csprng": "^1.1.0" }, @@ -419,11 +421,12 @@ "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.1.tgz", - "integrity": "sha512-Pe7M2YQI+Yqq/nDJvQAWpCPMRULLsrwQ8XQnerSF2+2XvwLG8dReOAPgv+Jjxoy0OY6IKbAt3F0fuhjcuQCdeA==", + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.2.tgz", + "integrity": "sha512-Z321mYKwjX6bVXZ5f50G07swF75B6RlSyAjhyHBYeTHJWLtYbmT1fS44FVpHzBKSlS876Xhir2zp+2FM+04/nA==", + "license": "Apache-2.0", "dependencies": { - "@segment/analytics-node": "2.2.0", + "@segment/analytics-node": "2.3.0", "countries-and-timezones": "^3.4.1", "getos": "^3.2.1", "object-hash": "^3.0.0", @@ -433,111 +436,20 @@ "uuid": "^11.0.3" } }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/execa": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", - "dependencies": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", - "engines": { - "node": ">=8.12.0" - } - }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/invert-kv": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", - "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" - } - }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/lcid": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", - "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", - "dependencies": { - "invert-kv": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/object-hash": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", "engines": { "node": ">= 6" } }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/os-locale": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", - "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", - "dependencies": { - "execa": "^4.0.0", - "lcid": "^3.0.0", - "mem": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -545,31 +457,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/uuid": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.0.3.tgz", - "integrity": "sha512-d0z310fCWv5dJwnX1Y/MncBAqGMKEzlBb1AOf7z9K8ALnd0utBX/msg/fA0+sbyN1ihbMsLhrBlnl1ak7Wa0rg==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/esm/bin/uuid" } }, "node_modules/@segment/analytics-core": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.8.0.tgz", - "integrity": "sha512-6CrccsYRY33I3mONN2ZW8SdBpbLtu1Ict3xR+n0FemYF5RB/jG7pW6jOvDXULR8kuYMzMmGOP4HvlyUmf3qLpg==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@segment/analytics-core/-/analytics-core-1.8.2.tgz", + "integrity": "sha512-5FDy6l8chpzUfJcNlIcyqYQq4+JTUynlVoCeCUuVz+l+6W0PXg+ljKp34R4yLVCcY5VVZohuW+HH0VLWdwYVAg==", + "license": "MIT", "dependencies": { "@lukeed/uuid": "^2.0.0", "@segment/analytics-generic-utils": "1.2.0", @@ -580,12 +485,14 @@ "node_modules/@segment/analytics-core/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@segment/analytics-generic-utils": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@segment/analytics-generic-utils/-/analytics-generic-utils-1.2.0.tgz", "integrity": "sha512-DfnW6mW3YQOLlDQQdR89k4EqfHb0g/3XvBXkovH1FstUN93eL1kfW9CsDcVQyH3bAC5ZsFyjA/o/1Q2j0QeoWw==", + "license": "MIT", "dependencies": { "tslib": "^2.4.1" } @@ -593,15 +500,17 @@ "node_modules/@segment/analytics-generic-utils/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@segment/analytics-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.2.0.tgz", - "integrity": "sha512-mPFTSBr9CrkFBdgr7KU/YD8V/25P8vPb/hVvVHYKwEdHRovlizZ34ENgQlvqeRuamQiXD3RLM8pcWX+WxPz3lQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@segment/analytics-node/-/analytics-node-2.3.0.tgz", + "integrity": "sha512-fOXLL8uY0uAWw/sTLmezze80hj8YGgXXlAfvSS6TUmivk4D/SP0C0sxnbpFdkUzWg2zT64qWIZj26afEtSnxUA==", + "license": "MIT", "dependencies": { "@lukeed/uuid": "^2.0.0", - "@segment/analytics-core": "1.8.0", + "@segment/analytics-core": "1.8.2", "@segment/analytics-generic-utils": "1.2.0", "buffer": "^6.0.3", "jose": "^5.1.0", @@ -609,7 +518,7 @@ "tslib": "^2.4.1" }, "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/@segment/analytics-node/node_modules/buffer": { @@ -630,6 +539,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" @@ -638,7 +548,8 @@ "node_modules/@segment/analytics-node/node_modules/tslib": { "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/@sinonjs/commons": { "version": "2.0.0", @@ -2143,9 +2054,10 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, "node_modules/countries-and-timezones": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.5.1.tgz", - "integrity": "sha512-DlsW+qxiJI6HJ83Yjjmuokgul3KKs0BmraPigFZ1sjWHPZcOTJ0LwB5iewZT9wsMAbmgGSVUdY4nZ4JnHD6NBQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/countries-and-timezones/-/countries-and-timezones-3.8.0.tgz", + "integrity": "sha512-+Ze9h5f4dQpUwbzTm0DEkiPiZyim9VHV4/mSnT4zNYJnrnfwsKjAZPtnp7J5VzejCDgySs+2SSc6MDdCnD43GA==", + "license": "MIT", "engines": { "node": ">=8.x", "npm": ">=5.x" @@ -2517,6 +2429,7 @@ "version": "3.1.4", "resolved": "https://registry.npmjs.org/dset/-/dset-3.1.4.tgz", "integrity": "sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==", + "license": "MIT", "engines": { "node": ">=4" } @@ -3652,14 +3565,16 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", "integrity": "sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==", + "license": "MIT", "dependencies": { "async": "^3.2.0" } }, "node_modules/getos/node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" }, "node_modules/getpass": { "version": "0.1.7", @@ -4001,8 +3916,9 @@ "node_modules/gulp-download": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/gulp-download/-/gulp-download-0.0.1.tgz", - "integrity": "sha1-VKMBj8YZs0HM9kkWBvet8L08c5c=", + "integrity": "sha512-29jElBkclf3HMkWBl7WkEG5HrPm5lyVDE0hffqRlmB7Cf4nf+38TyzZAaC83NjM8qVLkZ1rDFo9/1DVob8V9LQ==", "dev": true, + "license": "MIT", "dependencies": { "gulp-util": "latest", "request": "latest", @@ -4010,27 +3926,13 @@ "through": "latest" } }, - "node_modules/gulp-download/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/gulp-download/node_modules/clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true - }, - "node_modules/gulp-download/node_modules/gulp-util": { + "node_modules/gulp-util": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", "dev": true, + "license": "MIT", "dependencies": { "array-differ": "^1.0.0", "array-uniq": "^1.0.2", @@ -4055,11 +3957,30 @@ "node": ">=0.10" } }, - "node_modules/gulp-download/node_modules/lodash.template": { + "node_modules/gulp-util/node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/gulp-util/node_modules/clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", + "dev": true, + "license": "MIT" + }, + "node_modules/gulp-util/node_modules/lodash.template": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", + "deprecated": "This package is deprecated. Use https://socket.dev/npm/package/eta instead.", "dev": true, + "license": "MIT", "dependencies": { "lodash._basecopy": "^3.0.0", "lodash._basetostring": "^3.0.0", @@ -4072,16 +3993,17 @@ "lodash.templatesettings": "^3.0.0" } }, - "node_modules/gulp-download/node_modules/object-assign": { + "node_modules/gulp-util/node_modules/object-assign": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/gulp-download/node_modules/replace-ext": { + "node_modules/gulp-util/node_modules/replace-ext": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", @@ -4090,11 +4012,12 @@ "node": ">= 0.4" } }, - "node_modules/gulp-download/node_modules/vinyl": { + "node_modules/gulp-util/node_modules/vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.0", "clone-stats": "^0.0.1", @@ -4384,6 +4307,18 @@ "node": ">=10.13.0" } }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, "node_modules/is-absolute": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", @@ -4643,9 +4578,10 @@ } }, "node_modules/jose": { - "version": "5.9.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-5.9.6.tgz", - "integrity": "sha512-AMlnetc9+CV9asI19zHmrgS/WYsWUwCn2R7RzlbJWD7F9eWYUTGyBmU9o6PxngtLGOiDGPRu+Uc4fhKzbpteZQ==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", + "integrity": "sha512-s+3Al/p9g32Iq+oqXxkW//7jk2Vig6FF1CFqzVXoTUXt2qz89YWbL+OwS17NFYEvxC35n0FKeGO2LGYSxeM2Gg==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" } @@ -4770,6 +4706,18 @@ "node": ">= 10.13.0" } }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "license": "MIT", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/lead": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", @@ -4861,31 +4809,36 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basetostring": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._basevalues": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._getnative": { "version": "3.9.1", "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._isiterateecall": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash._reescape": { "version": "3.0.0", @@ -4909,13 +4862,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.escape": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._root": "^3.0.0" } @@ -4937,19 +4892,22 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isarray": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.keys": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._getnative": "^3.0.0", "lodash.isarguments": "^3.0.0", @@ -4966,7 +4924,8 @@ "version": "3.6.1", "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.template": { "version": "4.5.0", @@ -4992,6 +4951,7 @@ "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", "dev": true, + "license": "MIT", "dependencies": { "lodash._reinterpolate": "^3.0.0", "lodash.escape": "^3.0.0" @@ -5133,6 +5093,7 @@ "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "license": "MIT", "dependencies": { "p-defer": "^1.0.0" }, @@ -5153,6 +5114,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", "integrity": "sha512-qvwipnozMohxLXG1pOqoLiZKNkC4r4qqRucSoDwXowsNGDSULiqFTRUF05vcZWnwJSG22qTsynQhxbaMtnX9gw==", + "license": "MIT", "dependencies": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^2.1.0", @@ -5636,6 +5598,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -5790,10 +5753,87 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/os-locale": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", + "integrity": "sha512-tqZcNEDAIZKBEPnHPlVDvKrp7NzgLi7jRmhKiUoa2NUmhl13FtkAGLUVR+ZsYvApBQdBfYm43A4tXXQ4IrYLBA==", + "license": "MIT", + "dependencies": { + "execa": "^4.0.0", + "lcid": "^3.0.0", + "mem": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale/node_modules/execa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", + "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/os-locale/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale/node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/os-locale/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-defer": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", "integrity": "sha512-wB3wfAxZpk2AzOfUMJNL+d36xothRSyj8EXOa4f6GMqYDN9BJaaSISbsk+wS9abmnebVw95C2Kb5t85UmpCxuw==", + "license": "MIT", "engines": { "node": ">=4" } @@ -5802,6 +5842,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "license": "MIT", "engines": { "node": ">=6" } @@ -6248,6 +6289,16 @@ "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", "dev": true }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -7219,7 +7270,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/triple-beam": { "version": "1.3.0", @@ -7394,6 +7446,7 @@ "url": "https://github.com/sponsors/faisalman" } ], + "license": "MIT", "bin": { "ua-parser-js": "script/cli.js" }, @@ -7836,7 +7889,8 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/webpack": { "version": "5.94.0", @@ -7985,6 +8039,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" diff --git a/package.json b/package.json index e2ba6ae47..70aa166e7 100644 --- a/package.json +++ b/package.json @@ -2032,7 +2032,7 @@ }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.0", + "@redhat-developer/vscode-redhat-telemetry": "^0.9.2", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", From caca5a7998f39e708bfcfd071d4a765655c1412e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 8 Oct 2025 17:56:20 +0200 Subject: [PATCH 611/708] feat: add inlay hints for lambda parameter types Signed-off-by: Fred Bricon --- README.md | 5 +++-- package.json | 6 ++++++ src/telemetry.ts | 2 ++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index c653995bc..4ef2df5bd 100644 --- a/README.md +++ b/README.md @@ -214,6 +214,7 @@ The following settings are supported: * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. * `java.inlayHints.parameterNames.enabled`: Enable/disable inlay hints for parameter names. Supported values are: `none`(disable parameter name hints), `literals`(Enable parameter name hints only for literal arguments) and `all`(Enable parameter name hints for literal and non-literal arguments). Defaults to `literals`. +* `java.inlayHints.parameterTypes.enabled`: Enable/disable inlay hints for (lambda) parameter types. Defaults to `false`. * `java.compile.nullAnalysis.nonnull`: Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. * `java.compile.nullAnalysis.nullable`: Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. * `java.compile.nullAnalysis.nonnullbydefault`: Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in your project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`. @@ -259,8 +260,8 @@ The following settings are supported: * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. -New in 1.46.0 -* `java.inlayHints.variableTypes.enabled`: Enable/disable inlay hints for implicit variable types. +New in 1.47.0 +* `java.inlayHints.parameterTypes.enabled`: Enable/disable inlay hints for (lambda) parameter types. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 70aa166e7..6a5072b61 100644 --- a/package.json +++ b/package.json @@ -1519,6 +1519,12 @@ "markdownDescription": "Enable/disable inlay hints for implicit variable types:\n```java\n\nvar foo /* :Path */ = Path.of(\"foo\");\n \n```", "scope": "window" }, + "java.inlayHints.parameterTypes.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable inlay hints for (lambda) parameter types:\n```java\n\nList.of(1, 2, 3, 4).filter(/*Integer */ n -> n % 2 == 0).toList();\n \n```", + "scope": "window" + }, "java.search.scope": { "type": "string", "enum": [ diff --git a/src/telemetry.ts b/src/telemetry.ts index bc73eef51..80bf8be4b 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -62,8 +62,10 @@ export namespace Telemetry { "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", "java.inlayHints.variableTypes.enabled", + "java.inlayHints.parameterTypes.enabled", "java.server.launchMode", "java.autobuild.enabled" ]; + // settings where we only record their existence const SETTINGS_CUSTOM = [ "java.settings.url", "java.format.settings.url" From e41e57a9768f23b517726d133fa60491ad1b0681 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 9 Oct 2025 09:56:04 +0200 Subject: [PATCH 612/708] fix: only call prepareExecutable for syntax server when needed Signed-off-by: Fred Bricon --- src/extension.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 3e439a1aa..f4ff04005 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -422,9 +422,9 @@ export async function activate(context: ExtensionContext): Promise // the promise is resolved // no need to pass `resolve` into any code past this point, // since `resolve` is a no-op from now on - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); - excutable.resolve(serverOptions); if (requireSyntaxServer) { + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); + excutable.resolve(serverOptions); if (process.env['SYNTAXLS_CLIENT_PORT']) { syntaxClient.initialize(requirements, clientOptions); } else { From a5ba68950fc320c90aad92d600d76e7493d9ca5e Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 6 Oct 2025 16:34:38 -0400 Subject: [PATCH 613/708] Update flags for jdt-javac Update the flags to match https://github.com/eclipse-jdtls/eclipse-jdt-core-incubator/blob/dom-with-javac/org.eclipse.jdt.core.javac/META-INF/p2.inf This opens a bunch of jdk internals that the jdt-javac work uses, and also sets the flags to enable the javac-based search. Signed-off-by: David Thompson --- src/javaServerStarter.ts | 81 ++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 37 deletions(-) diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 78aa340d9..5bfaa24b0 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -123,43 +123,50 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E if (javacEnabled) { // Javac flags params.push( - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', - '--add-opens', - 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets.snippet=ALL-UNNAMED', - '--add-opens', - 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED', - '--add-opens', - 'jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED', - '--add-opens', - 'jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED', - '--add-opens', - 'java.compiler/javax.tools=ALL-UNNAMED', - '--add-opens', - 'java.base/java.nio.channels=ALL-UNNAMED', - '--add-opens', - 'java.base/sun.nio.ch=ALL-UNNAMED', - '-DICompilationUnitResolver=org.eclipse.jdt.core.dom.JavacCompilationUnitResolver', - '-DCompilationUnit.DOM_BASED_OPERATIONS=true', - '-DAbstractImageBuilder.compilerFactory=org.eclipse.jdt.internal.javac.JavacCompilerFactory' + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED', + '--add-opens', + 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets.snippet=ALL-UNNAMED', + '--add-opens', + 'jdk.javadoc/jdk.javadoc.internal.doclets.formats.html.taglets=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.model=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.platform=ALL-UNNAMED', + '--add-opens', + 'jdk.compiler/com.sun.tools.javac.resources=ALL-UNNAMED', + '--add-opens', + 'java.base/sun.nio.ch=ALL-UNNAMED', + '--add-opens', + 'jdk.zipfs/jdk.nio.zipfs=ALL-UNNAMED', + '--add-opens', + 'java.compiler/javax.tools=ALL-UNNAMED', + '--add-opens', + 'java.base/java.nio.channels=ALL-UNNAMED', + '-DICompilationUnitResolver=org.eclipse.jdt.core.dom.JavacCompilationUnitResolver', + '-DAbstractImageBuilder.compilerFactory=org.eclipse.jdt.internal.javac.JavacCompilerFactory', + '-DCompilationUnit.DOM_BASED_OPERATIONS=true', + '-DSourceIndexer.DOM_BASED_INDEXER=true', + '-DMatchLocator.DOM_BASED_MATCH=true', + '-DIJavaSearchDelegate=org.eclipse.jdt.internal.core.search.DOMJavaSearchDelegate', ); if('dom' === getJavaConfiguration().get('completion.engine')){ From 83062851961cf9c237db2b3228cf3410631ec130 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 10 Oct 2025 13:12:07 +0200 Subject: [PATCH 614/708] feat: suppress same-name numbered parameters inlay hints Signed-off-by: Fred Bricon --- USAGE_DATA.md | 4 ++-- package.json | 7 +++++++ src/telemetry.ts | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/USAGE_DATA.md b/USAGE_DATA.md index fb6b7fdf0..c977296de 100644 --- a/USAGE_DATA.md +++ b/USAGE_DATA.md @@ -19,12 +19,12 @@ vscode-java has opt-in telemetry collection, provided by [vscode-redhat-telemetr * Errors relating to running the language server, such as the message & stacktrace * Whether there is a mismatch between the project's requested source level, and the JDK used for the project (eg. true) * Information about the following settings. In the case of settings that store a well defined value (eg. path/url/string), we simply collect whether the setting has been set. - * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.server.launchMode`, `java.autobuild.enabled`, `java.jdt.ls.javac.enabled` + * `java.settings.url`, `java.format.settings.url`, `java.quickfix.showAt`, `java.symbols.includeSourceMethodDeclarations`, `java.completion.collapseCompletionItems`, `java.completion.guessMethodArguments`, `java.completion.postfix.enabled`, `java.cleanup.actionsOnSave`, `java.sharedIndexes.enabled`, `java.inlayHints.parameterNames.enabled`, `java.inlayHints.parameterNames.suppressWhenSameNameNumbered`, `java.inlayHints.variableTypes.enabled`, `java.inlayHints.parameterTypes.enabled`, `java.server.launchMode`, `java.autobuild.enabled`, `java.jdt.ls.javac.enabled` * The extension name and the choice made when a recommendation to install a 3rd party extension is proposed * The name of Java commands being manually executed, and any resulting errors * The number of results (eg. 20), whether an error occurred (eg. false), engine type (eg. 'ecj', 'dom') and duration (in milliseconds) when code assist is activated * Whether the language server ran out of memory and the maximum allocated memory at which that occurred (eg. 200m) - + ## What's included in the general telemetry data Please see the diff --git a/package.json b/package.json index 6a5072b61..4b5fbc255 100644 --- a/package.json +++ b/package.json @@ -1503,6 +1503,13 @@ "scope": "window", "order": 80 }, + "java.inlayHints.parameterNames.suppressWhenSameNameNumbered": { + "type": "boolean", + "default": true, + "markdownDescription": "Suppress parameter name hints on arguments following the same-name numbered pattern.", + "scope": "window", + "order": 81 + }, "java.inlayHints.parameterNames.exclusions": { "type": "array", "items": { diff --git a/src/telemetry.ts b/src/telemetry.ts index 80bf8be4b..89796a5ff 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -61,6 +61,7 @@ export namespace Telemetry { "java.completion.collapseCompletionItems", "java.completion.guessMethodArguments", "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", + "java.inlayHints.parameterNames.suppressWhenSameNameNumbered", "java.inlayHints.variableTypes.enabled", "java.inlayHints.parameterTypes.enabled", "java.server.launchMode", "java.autobuild.enabled" From 0ec72fba1a71e5ab0ea7e3e2b489b42257a0016e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 6 Oct 2025 14:54:54 +0200 Subject: [PATCH 615/708] deps: remove gulp and other vulnerable dependencies Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 8 +- .vscode/launch.json | 19 +- .vscode/tasks.json | 18 +- CONTRIBUTING.md | 4 +- gulpfile.js | 285 -- package-lock.json | 2864 ++--------------- package.json | 37 +- scripts/index.mjs | 142 + scripts/jre.mjs | 126 + scripts/lombok.mjs | 36 + scripts/release.mjs | 60 + scripts/repo.mjs | 69 + scripts/server.mjs | 167 + scripts/test.mjs | 82 + scripts/utils.mjs | 102 + src/extension.ts | 117 +- src/javaServerStarter.ts | 7 +- src/webview/changeSignature/App.tsx | 10 +- test/lightweight-mode-suite/extension.test.ts | 2 + test/lightweight-mode-suite/index.ts | 30 +- test/runtest.ts | 30 +- test/standard-mode-suite/index.ts | 21 +- 22 files changed, 1149 insertions(+), 3087 deletions(-) delete mode 100644 gulpfile.js create mode 100644 scripts/index.mjs create mode 100644 scripts/jre.mjs create mode 100644 scripts/lombok.mjs create mode 100644 scripts/release.mjs create mode 100644 scripts/repo.mjs create mode 100644 scripts/server.mjs create mode 100644 scripts/test.mjs create mode 100644 scripts/utils.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a6f239203..36bf39cd9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -122,21 +122,21 @@ jobs: xvfb-run --auto-servernum npm run test --silent continue-on-error: true - name: Clean tests - run: npx gulp clean_test_folder + run: npm run clean-test-folder - name: Prepare Lombok Support if: false run: | - npx gulp download_lombok + npm run download-lombok - name: Prepare Pre-Release if: ${{ github.event_name == 'schedule' || inputs.publishPreRelease == 'true' }} run: | - npx gulp prepare_pre_release + npm run prepare-pre-release echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV - name: Package vscode-java run: | platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do - npx gulp download_jre --target ${platform} --javaVersion 21 + npm run download-jre -- --target ${platform} --javaVersion 21 vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix done rm -rf jre/ diff --git a/.vscode/launch.json b/.vscode/launch.json index 95a86e13a..7fe80719b 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -13,7 +13,6 @@ "DEBUG_VSCODE_JAVA":"true", "VSCODE_REDHAT_TELEMETRY_DEBUG":"true" }, - "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "preLaunchTask": "npm: watch", @@ -28,7 +27,6 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { @@ -45,7 +43,6 @@ "runtimeExecutable": "${execPath}", "debugWebviews": true, "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { @@ -65,7 +62,6 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { @@ -81,7 +77,6 @@ "request": "launch", "runtimeExecutable": "${execPath}", "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "env": { @@ -103,7 +98,6 @@ "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/standard-mode-suite" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": ["${workspaceRoot}/out/**/*.js"], "preLaunchTask": "prepareStandardTest", @@ -120,7 +114,6 @@ "--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test/lightweight-mode-suite" ], - "stopOnEntry": false, "sourceMaps": true, "outFiles": ["${workspaceRoot}/out/**/*.js"], "preLaunchTask": "prepareLightweightTest", @@ -128,10 +121,10 @@ }, { "args": [ - "${input:gulpTask}" + "${input:scriptTask}" ], - "name": "Launch Gulp Task", - "program": "${workspaceFolder}/node_modules/gulp/bin/gulp.js", + "name": "Launch Build Script", + "program": "${workspaceFolder}/scripts/index.js", "request": "launch", "skipFiles": [ "/**" @@ -141,10 +134,10 @@ ], "inputs": [ { - "id": "gulpTask", + "id": "scriptTask", "type": "promptString", - "description": "Name of the Gulp task to execute", - "default": "download_jre" + "description": "Name of the build script to execute (e.g., download-jre, build-server, etc.)", + "default": "download-jre" } ] } diff --git a/.vscode/tasks.json b/.vscode/tasks.json index e63b9f7a2..da12f3f4a 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -18,19 +18,19 @@ } }, { - "type": "gulp", - "label": "cleanTestFolder", - "task": "clean_test_folder" + "type": "npm", + "script": "clean-test-folder", + "label": "cleanTestFolder" }, { - "type": "gulp", - "label": "generateStandardTestFolder", - "task": "generate_standard_test_folder" + "type": "npm", + "script": "generate-standard-test-folder", + "label": "generateStandardTestFolder" }, { - "type": "gulp", - "label": "generateLightweightTestFolder", - "task": "generate_lightweight_test_folder" + "type": "npm", + "script": "generate-lightweight-test-folder", + "label": "generateLightweightTestFolder" }, { "label": "prepareStandardTest", diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 9a5782c9d..e63a1b05d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -57,7 +57,7 @@ The following will be a start to finish guide to get the entire language server 5. (**\*Optional**) Build a platform specific JRE: ```bash - $ npx gulp download_jre + $ npm run download-jre ``` You can also use the options `--target` and `--javaVersion` to build the specified JRE version for the specified target architecture. @@ -94,7 +94,7 @@ This will build and place the binaries under the `server` folder. Alternately yo ```bash $ cd ../vscode-java -$ ./node_modules/.bin/gulp download_server +$ npm run download-server ``` ### Setting up the JDT Language Server Below are the details about how to set up the JDT Language Server in different IDEs. **Notice**: You only need set up it once in any of your preferred IDE. diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index b25c3e5dc..000000000 --- a/gulpfile.js +++ /dev/null @@ -1,285 +0,0 @@ -'use strict'; -const gulp = require('gulp'); -const cp = require('child_process'); -const decompress = require('gulp-decompress'); -const download = require('gulp-download'); -const request = require('request'); -const glob = require('glob'); -const fse = require('fs-extra'); -const path = require('path'); -const url = require("url"); -const argv = require('minimist')(process.argv.slice(2)); -const server_dir = '../eclipse.jdt.ls'; -const originalTestFolder = path.join(__dirname, 'test', 'resources', 'projects', 'maven', 'salut'); -const tempTestFolder = path.join(__dirname, 'test-temp'); -const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); -const JDT_LS_SNAPSHOT_URL = "http://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz" -const NON_NPM_REPOSITORY_RE = new RegExp( - String.raw`"resolved":\s*"https://.+/registry.npmjs.org/`, - "g" -); -//... - -gulp.task('clean_jre', function (done) { - if (fse.existsSync('./jre')) { - fse.removeSync('./jre'); - } - - done(); -}); - -// Pls update the latest JRE if a new JDK is announced. -const LATEST_JRE = 21; - -/** - * Usage: - * npx gulp download_jre // Download the latest JRE for the platform of the current running machine. - * npx gulp download_jre --target darwin-x64 --javaVersion 21 // Download the specified JRE for the specified platform. - * - * Supported platforms: - * win32-x64, - * linux-x64, - * linux-arm64, - * darwin-x64, - * darwin-arm64 - */ -gulp.task('download_jre', async function (done) { - if (fse.existsSync('./jre')) { - fse.removeSync('./jre'); - } - - const platformMapping = { - "linux-arm64": "linux-aarch64", - "linux-x64": "linux-x86_64", - "darwin-arm64": "macosx-aarch64", - "darwin-x64": "macosx-x86_64", - "win32-x64": "win32-x86_64" - } - - const targetPlatform = argv.target || process.platform + "-" + process.arch; - if (targetPlatform && Object.keys(platformMapping).includes(targetPlatform)) { - const javaVersion = (!argv.javaVersion || argv.javaVersion === "latest") ? LATEST_JRE : argv.javaVersion; - console.log("Downloading justj JRE " + javaVersion + " for the platform " + targetPlatform) + "..."; - - const manifestUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/justj.manifest`; - // Download justj.manifest file - const manifest = await new Promise(function (resolve, reject) { - request.get(manifestUrl, function (err, response, body) { - if (err || response.statusCode >= 400) { - reject(err || `${response.statusCode} returned from ${manifestUrl}`); - } else { - resolve(String(body)); - } - }); - }); - - if (!manifest) { - done(new Error(`Failed to download justj.manifest, please check if the link ${manifestUrl} is valid.`)) - return; - } - - /** - * Here are the contents for a sample justj.manifest file: - * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-linux-aarch64.tar.gz - * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-linux-x86_64.tar.gz - * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-macosx-aarch64.tar.gz - * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-macosx-x86_64.tar.gz - * ../20241101_1100/org.eclipse.justj.openjdk.hotspot.jre.full.stripped-21.0.5-win32-x86_64.tar.gz - */ - const javaPlatform = platformMapping[targetPlatform]; - const list = manifest.split(/\r?\n/); - const jreIdentifier = list.find((value) => { - return value.indexOf("org.eclipse.justj.openjdk.hotspot.jre.full.stripped") >= 0 && value.indexOf(javaPlatform) >= 0; - }); - - if (!jreIdentifier) { - done(new Error(`justj doesn't support the jre ${javaVersion} for the platform ${javaPlatform} (${targetPlatform}), please refer to the link ${manifestUrl} for the supported platforms.`)); - return; - } - - const jreDownloadUrl = `https://download.eclipse.org/justj/jres/${javaVersion}/downloads/latest/${jreIdentifier}`; - const parsedDownloadUrl = url.parse(jreDownloadUrl); - const jreFileName = path.basename(parsedDownloadUrl.pathname) - .replace(/[\.7z|\.bz2|\.gz|\.rar|\.tar|\.zip|\.xz]*$/, ""); - const idx = jreFileName.indexOf('-'); - const jreVersionLabel = idx >= 0 ? jreFileName.substring(idx + 1) : jreFileName; - // Download justj JRE. - await new Promise(function (resolve, reject) { - download(jreDownloadUrl) - .on('error', reject) - .pipe(decompress({ strip: 0 })) - .pipe(gulp.dest('./jre/' + jreVersionLabel)) - .on('end', resolve); - }); - } else { - console.log("[Error] download_jre failed, please specify a valid target platform via --target argument. Here are the supported platform list:"); - for (const platform of Object.keys(platformMapping)) { - console.log(platform); - } - } - - done(); -}); - -gulp.task('download_lombok', async function (done) { - if (fse.existsSync('./lombok')) { - fse.removeSync('./lombok'); - } - - await new Promise(function (resolve, reject) { - const lombokVersion = '1.18.38'; - // The latest lombok version can be found on the website https://projectlombok.org/downloads - const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; - download(lombokUrl) - .pipe(gulp.dest("./lombok/")) - .on("error", reject) - .on("end", resolve); - }); - done(); -}); - -gulp.task('download_server', function (done) { - download_server_fn(); - done(); -}); - -gulp.task('build_server', function (done) { - build_server_fn(); - done(); -}); - -gulp.task('build_or_download', function (done) { - if (!fse.existsSync(server_dir)) { - console.log('NOTE: eclipse.jdt.ls is not found as a sibling directory, downloading the latest snapshot of the Eclipse JDT Language Server...'); - download_server_fn(); - } - else { - build_server_fn(); - } - done(); -}); - -gulp.task('dev_server', function (done) { - let command = mvnw() + ' -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package -Declipse.jdt.ls.skipGradleChecksums'; - console.log('executing ' + command); - cp.execSync(command, { cwd: server_dir, stdio: [0, 1, 2] }); - glob.Glob(server_dir + '/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar', - (_error, sources) => { - glob.Glob('./server/plugins/org.eclipse.jdt.ls.core_*.jar', - (_error, targets) => { - console.log('Copying ' + sources[0] + ' to ' + targets[0]); - fse.copy(sources[0], targets[0]); - }); - }); - done(); -}); - -gulp.task('watch_server', function (done) { - gulp.watch(server_dir + '/org.eclipse.jdt.ls.core/**/*.java', gulp.series('dev_server')); - done(); -}); - -gulp.task('generate_standard_test_folder', function (done) { - fse.copySync(originalTestFolder, tempTestFolder); - fse.ensureDirSync(path.join(tempTestFolder, '.vscode')); - fse.writeJSONSync(testSettings, { - "java.server.launchMode": "Standard", - "java.configuration.updateBuildConfiguration": "automatic" - }); - done(); -}); - -gulp.task('generate_lightweight_test_folder', function (done) { - fse.copySync(originalTestFolder, tempTestFolder); - fse.ensureDirSync(path.join(tempTestFolder, '.vscode')); - fse.writeJSONSync(testSettings, { - "java.server.launchMode": "LightWeight", - }); - done(); -}); - -gulp.task('clean_test_folder', function (done) { - fse.removeSync(tempTestFolder); - done(); -}); - -gulp.task('prepare_pre_release', function (done) { - const json = JSON.parse(fse.readFileSync("./package.json").toString()); - const stableVersion = json.version.match(/(\d+)\.(\d+)\.(\d+)/); - const major = stableVersion[1]; - const minor = stableVersion[2]; - const date = new Date(); - const month = date.getMonth() + 1; - const day = date.getDate(); - const hours = date.getHours(); - const patch = `${date.getFullYear()}${prependZero(month)}${prependZero(day)}${prependZero(hours)}`; - const insiderPackageJson = Object.assign(json, { - version: `${major}.${minor}.${patch}`, - }); - fse.writeFileSync("./package.json", JSON.stringify(insiderPackageJson, null, 2)); - done(); -}); - -gulp.task('repo_check', function (done) { - const data = fse.readFileSync("./package-lock.json", { encoding: "utf-8" }); - - if (NON_NPM_REPOSITORY_RE.test(data)) { - done(new Error("Found references to the internal registry in the file package-lock.json. Please fix it with 'npm run repo:fix'")); - } else { - done(); - } -}); - -gulp.task('repo_fix', function (done) { - const data = fse.readFileSync("./package-lock.json", { encoding: "utf-8" }); - const newData = data.replace(NON_NPM_REPOSITORY_RE, `"resolved": "https://registry.npmjs.org/`); - - if (data !== newData) { - fse.writeFileSync("./package-lock.json", newData, { - encoding: "utf-8", - }); - console.log(`successfully fixed package-lock.json`); - } else { - console.log("nothing to fix"); - } - - done(); -}); - -function isWin() { - return /^win/.test(process.platform); -} - -function isMac() { - return /^darwin/.test(process.platform); -} - -function isLinux() { - return /^linux/.test(process.platform); -} - -function mvnw() { - return isWin() ? "mvnw.cmd" : "./mvnw"; -} - -function prependZero(num) { - if (num > 99) { - throw "Unexpected value to prepend with zero"; - } - return `${num < 10 ? "0" : ""}${num}`; -} - -function download_server_fn(){ - fse.removeSync('./server'); - download(JDT_LS_SNAPSHOT_URL) - .pipe(decompress()) - .pipe(gulp.dest('./server')); -} - -function build_server_fn(){ - fse.removeSync('./server'); - cp.execSync(mvnw() + ' -Pserver-distro clean package -U -Declipse.jdt.ls.skipGradleChecksums', { cwd: server_dir, stdio: [0, 1, 2] }); - gulp.src(server_dir + '/org.eclipse.jdt.ls.product/distro/*.tar.gz', { encoding: false }) - .pipe(decompress()) - .pipe(gulp.dest('./server')); -} diff --git a/package-lock.json b/package-lock.json index 3bb65d78d..518edc152 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", - "glob": "^7.1.3", + "glob": "^11.0.3", "htmlparser2": "6.0.1", "jdk-utils": "^0.6.0", "react": "^17.0.2", @@ -49,16 +49,12 @@ "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", - "gulp": "^5.0.0", - "gulp-decompress": "^3.0.0", - "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", - "lodash.template": ">=4.5.0", "mini-css-extract-plugin": "^2.9.4", "minimist": ">=1.2.6", "mocha": "^11.1.0", - "request": "^2.88.2", "sinon": "^14.0.0", + "tar": "^7.5.1", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -105,27 +101,6 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@gulpjs/messages": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@gulpjs/messages/-/messages-1.1.0.tgz", - "integrity": "sha512-Ys9sazDatyTgZVb4xPlDufLweJ/Os2uHWOv+Caxvy2O85JcnT4M3vc73bi8pdLWlv3fdWQz3pdI9tVwo8rQQSg==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/@gulpjs/to-absolute-glob": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@gulpjs/to-absolute-glob/-/to-absolute-glob-4.0.0.tgz", - "integrity": "sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==", - "dev": true, - "dependencies": { - "is-negated-glob": "^1.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -146,11 +121,31 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@isaacs/balanced-match": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", + "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", + "license": "MIT", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/@isaacs/brace-expansion": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", + "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "license": "MIT", + "dependencies": { + "@isaacs/balanced-match": "^4.0.1" + }, + "engines": { + "node": "20 || >=22" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^5.1.2", @@ -168,7 +163,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -181,7 +175,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -194,14 +187,12 @@ "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true, "license": "MIT" }, "node_modules/@isaacs/cliui/node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", @@ -219,7 +210,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" @@ -235,7 +225,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", @@ -249,6 +238,19 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", @@ -1346,57 +1348,6 @@ "ajv": "^6.9.1" } }, - "node_modules/ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", - "dev": true, - "dependencies": { - "ansi-wrap": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", - "dev": true, - "dependencies": { - "ansi-wrap": "0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1409,69 +1360,12 @@ "node": ">= 8" } }, - "node_modules/archive-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", - "integrity": "sha1-+S5yIzBW38aWlHJ0nCZ72wRrHXA=", - "dev": true, - "dependencies": { - "file-type": "^4.2.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-differ": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", - "integrity": "sha512-LeZY+DZDRnvP7eMuQ6LHfCzUGxAAIViUBliK24P3hWXL6y4SortgR6Nim6xrkfSLlmH0+k+9NYNwVC2s53ZrYQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha512-zHjL5SZa68hkKHBFBK6DJCTtr9sfTCPCaph/L7tMSLcTFgy+zX7E+6q5UArbtOtMBCtxdICpfTCspRse+ywyXA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -1481,42 +1375,6 @@ "node": ">=8" } }, - "node_modules/array-uniq": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", - "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -1525,108 +1383,16 @@ "lodash": "^4.17.14" } }, - "node_modules/async-done": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-2.0.0.tgz", - "integrity": "sha512-j0s3bzYq9yKIVLKGE/tWlCpa3PfFLcrDZLTSVdnnCTGagXuXBJO4SsY9Xdk/fQBirCkH4evW5xOeJXqlAQFdsw==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.4.4", - "once": "^1.4.0", - "stream-exhaust": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/async-settle": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-2.0.0.tgz", - "integrity": "sha512-Obu/KE8FurfQRN6ODdHN9LuXqwC+JFIM9NRyZqJJ4ZfLJmIYN9Rg0/kb+wF70VV5+fJusTMQlJ1t5rF7J/ETdg==", - "dev": true, - "dependencies": { - "async-done": "^2.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", - "dev": true - }, - "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", - "dev": true - }, - "node_modules/bach": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/bach/-/bach-2.0.1.tgz", - "integrity": "sha512-A7bvGMGiTOxGMpNupYl9HQTf0FFDNF4VCmks4PJpFyN1AX2pdKuxuwdvUz2Hu388wcgp+OvGFNsumBfFNkR7eg==", - "dev": true, - "dependencies": { - "async-done": "^2.0.0", - "async-settle": "^2.0.0", - "now-and-later": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, - "node_modules/bare-events": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", - "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", - "dev": true, - "optional": true - }, "node_modules/base64-js": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/beeper": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", - "integrity": "sha512-3vqtKL1N45I5dV0RdssXZG7X6pCqQrWPNOlBPZPrd+QkE2HEhR57Z04m0KtpbsZH73j+a3F8UD1TQnn+ExTvIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1635,20 +1401,11 @@ "node": ">=8" } }, - "node_modules/bl": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", - "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", - "dev": true, - "dependencies": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - }, "node_modules/brace-expansion": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -1704,47 +1461,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", - "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", - "dev": true, - "dependencies": { - "base64-js": "^1.0.2", - "ieee754": "^1.1.4" - } - }, - "node_modules/buffer-alloc": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", - "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", - "dev": true, - "dependencies": { - "buffer-alloc-unsafe": "^1.1.0", - "buffer-fill": "^1.0.0" - } - }, - "node_modules/buffer-alloc-unsafe": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/buffer-fill": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=", - "dev": true - }, "node_modules/buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -1780,28 +1496,6 @@ } ] }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", - "dev": true, - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1839,6 +1533,16 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -1848,85 +1552,18 @@ "node": ">=6.0" } }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", - "dev": true - }, - "node_modules/cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "node": ">=6" } }, "node_modules/color": { @@ -1960,15 +1597,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true, - "bin": { - "color-support": "bin.js" - } - }, "node_modules/colorette": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", @@ -1997,18 +1625,6 @@ "text-hex": "1.0.x" } }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -2018,36 +1634,9 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/copy-props": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-4.0.0.tgz", - "integrity": "sha512-bVWtw1wQLzzKiYROtvNlbJgxgBYt2bMJpkCbKmXM3xyijvcjjWXEk5nyrrT3bgJ7ODb19ZohE2T0Y3FgNPyoTw==", - "dev": true, - "dependencies": { - "each-props": "^3.0.0", - "is-plain-object": "^5.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/copy-props/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -2144,27 +1733,6 @@ "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", "dev": true }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -2183,144 +1751,12 @@ } } }, - "node_modules/decompress": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", - "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", - "dev": true, - "dependencies": { - "decompress-tar": "^4.0.0", - "decompress-tarbz2": "^4.0.0", - "decompress-targz": "^4.0.0", - "decompress-unzip": "^4.0.1", - "graceful-fs": "^4.1.10", - "make-dir": "^1.0.0", - "pify": "^2.3.0", - "strip-dirs": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", - "integrity": "sha1-cYy9P8sWIJcW5womuE57pFkuWvE=", - "dev": true, - "dependencies": { - "file-type": "^5.2.0", - "is-stream": "^1.1.0", - "tar-stream": "^1.5.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tar/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", - "integrity": "sha1-MIKluIDqQEOBY0nzeLVsUWvho5s=", - "dev": true, - "dependencies": { - "decompress-tar": "^4.1.0", - "file-type": "^6.1.0", - "is-stream": "^1.1.0", - "seek-bzip": "^1.0.5", - "unbzip2-stream": "^1.0.9" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-tarbz2/node_modules/file-type": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", - "integrity": "sha1-5QzXXTVv/tTjBtxPW89Sp5kDqRk=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", - "integrity": "sha1-wJvDXE0R894J8tLaU+neI+fOHu4=", - "dev": true, - "dependencies": { - "decompress-tar": "^4.1.1", - "file-type": "^5.2.0", - "is-stream": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-targz/node_modules/file-type": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", - "integrity": "sha1-LdvqfHP/42No365J3DOMBYwritY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", - "integrity": "sha1-3qrM39FK6vhVePczroIQ+bSEj2k=", - "dev": true, - "dependencies": { - "file-type": "^3.8.0", - "get-stream": "^2.2.0", - "pify": "^2.3.0", - "yauzl": "^2.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/decompress-unzip/node_modules/file-type": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", - "integrity": "sha1-JXoHg4TR24CHvESdEH1SpSZyuek=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/diagnostics": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/diagnostics/-/diagnostics-1.1.1.tgz", @@ -2434,78 +1870,12 @@ "node": ">=4" } }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", - "dev": true, - "dependencies": { - "readable-stream": "~1.1.9" - } - }, - "node_modules/duplexer2/node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", - "dev": true - }, - "node_modules/duplexer2/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/duplexer2/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", - "dev": true - }, - "node_modules/each-props": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-3.0.0.tgz", - "integrity": "sha512-IYf1hpuWrdzse/s/YJOrFmU15lyhSzxelNVAHTEG3DtP4QsLTWZUzcUL3HMXmKQxXpa4EIrBPpwRgj0aehdvAw==", - "dev": true, - "dependencies": { - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/each-props/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true, "license": "MIT" }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, "node_modules/electron-to-chromium": { "version": "1.5.13", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", @@ -2515,8 +1885,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/enabled": { "version": "1.0.2", @@ -2608,15 +1977,6 @@ "node": ">=6" } }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/eslint": { "version": "8.13.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", @@ -3087,85 +2447,12 @@ "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", "integrity": "sha1-ct6KBIbMKKO71wRjU5iCW1tign0=" }, - "node_modules/expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==", - "dev": true, - "dependencies": { - "homedir-polyfill": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "dependencies": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extend-shallow/node_modules/is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "dependencies": { - "is-plain-object": "^2.0.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", - "dev": true, - "dependencies": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, "node_modules/fast-glob": { "version": "3.2.11", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", @@ -3200,15 +2487,6 @@ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", "dev": true }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-3.0.0.tgz", - "integrity": "sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==", - "dev": true, - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, "node_modules/fast-safe-stringify": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.6.tgz", @@ -3246,15 +2524,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fecha": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", @@ -3280,15 +2549,6 @@ "moment": "^2.29.1" } }, - "node_modules/file-type": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", - "integrity": "sha1-G2AOX8ofvcboDApwxxyNul95BsU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3300,59 +2560,10 @@ "node": ">=8" } }, - "node_modules/findup-sync": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-5.0.0.tgz", - "integrity": "sha512-MzwXju70AuyflbgeOhzvQWAvvQdo1XL0A9bVvlXsYcFEBM87WR4OakL4OfZq+QRmr+duJubio+UtNQCPsVESzQ==", - "dev": true, - "dependencies": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.3", - "micromatch": "^4.0.4", - "resolve-dir": "^1.0.1" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-2.0.0.tgz", - "integrity": "sha512-OFRzsL6ZMHz5s0JrsEr+TpdGNCtrVtnuG3x1yzGNiQHT0yaDnXAj8V/lWcpJVrnoDpcwXcASxAZYbuXda2Y82A==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^5.0.0", - "object.defaults": "^1.1.0", - "object.pick": "^1.3.0", - "parse-filepath": "^1.0.2" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/fined/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/flagged-respawn": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-2.0.0.tgz", - "integrity": "sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, "bin": { "flat": "cli.js" @@ -3371,6 +2582,28 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/flat-cache/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/flat-cache/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3400,35 +2633,13 @@ "lodash": "^4.17.14" } }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", - "dev": true, - "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/foreground-child": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", - "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", - "dev": true, + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "license": "ISC", "dependencies": { - "cross-spawn": "^7.0.0", + "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" }, "engines": { @@ -3442,7 +2653,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "license": "ISC", "engines": { "node": ">=14" @@ -3451,35 +2661,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, "node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -3493,23 +2674,12 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs-mkdirp-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-2.0.1.tgz", - "integrity": "sha512-UTOY+59K6IA94tec8Wjqm0FSh5OVudGNB0NL/P6fB3HiE3bYOY3VYBGijsnOHNkQSwC1FKkU77pmq7xp9CskLw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.8", - "streamx": "^2.12.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.2", @@ -3548,19 +2718,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", - "integrity": "sha1-Xzj5PzRgCWZu4BUKBUFn+Rvdld4=", - "dev": true, - "dependencies": { - "object-assign": "^4.0.1", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -3576,29 +2733,27 @@ "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", "license": "MIT" }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, "node_modules/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", + "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", + "license": "ISC", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.0.3", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": "*" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -3613,467 +2768,107 @@ "node": ">=10.13.0" } }, - "node_modules/glob-stream": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-8.0.2.tgz", - "integrity": "sha512-R8z6eTB55t3QeZMmU1C+Gv+t5UnNRkA55c5yo67fAVfxODxieTwsjNG7utxS/73NdP1NbDgCrhVEg2h00y4fFw==", - "dev": true, - "dependencies": { - "@gulpjs/to-absolute-glob": "^4.0.0", - "anymatch": "^3.1.3", - "fastq": "^1.13.0", - "glob-parent": "^6.0.2", - "is-glob": "^4.0.3", - "is-negated-glob": "^1.0.0", - "normalize-path": "^3.0.0", - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "node_modules/glob-watcher": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-6.0.0.tgz", - "integrity": "sha512-wGM28Ehmcnk2NqRORXFOTOR064L4imSw3EeOqU5bIwUf62eXGwg89WivH6VMahL8zlQHeodzvHpXplrqzrz3Nw==", - "dev": true, - "dependencies": { - "async-done": "^2.0.0", - "chokidar": "^3.5.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "dependencies": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha512-5lsx1NUDHtSjfg0eHlmYvZKv8/nVqX4ckFbM+FrGcQ+04KWcWFo9P5MxPZYSzUvyzmdTbI7Eix8Q4IbELDqzKg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, + "node_modules/glob/node_modules/jackspeak": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", + "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", + "license": "BlueOak-1.0.0", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=10" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glogg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", - "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gulp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-5.0.0.tgz", - "integrity": "sha512-S8Z8066SSileaYw1S2N1I64IUc/myI2bqe2ihOBzO6+nKpvNSg7ZcWJt/AwF8LC/NVN+/QZ560Cb/5OPsyhkhg==", - "dev": true, - "dependencies": { - "glob-watcher": "^6.0.0", - "gulp-cli": "^3.0.0", - "undertaker": "^2.0.0", - "vinyl-fs": "^4.0.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, - "engines": { - "node": ">=10.13.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/gulp-cli": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-3.0.0.tgz", - "integrity": "sha512-RtMIitkT8DEMZZygHK2vEuLPqLPAFB4sntSxg4NoDta7ciwGZ18l7JuhCTiS5deOJi2IoK0btE+hs6R4sfj7AA==", - "dev": true, - "dependencies": { - "@gulpjs/messages": "^1.1.0", - "chalk": "^4.1.2", - "copy-props": "^4.0.0", - "gulplog": "^2.2.0", - "interpret": "^3.1.1", - "liftoff": "^5.0.0", - "mute-stdout": "^2.0.0", - "replace-homedir": "^2.0.0", - "semver-greatest-satisfied-range": "^2.0.0", - "string-width": "^4.2.3", - "v8flags": "^4.0.0", - "yargs": "^16.2.0" - }, - "bin": { - "gulp": "bin/gulp.js" - }, + "node_modules/glob/node_modules/lru-cache": { + "version": "11.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.2.tgz", + "integrity": "sha512-F9ODfyqML2coTIsQpSkRHnLSZMtkU8Q+mSfcaIyKwy58u+8k5nvAYeiNhsyMARvzNcXJ9QfWVrcPsC9e9rAxtg==", + "license": "ISC", "engines": { - "node": ">=10.13.0" + "node": "20 || >=22" } }, - "node_modules/gulp-cli/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", + "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "@isaacs/brace-expansion": "^5.0.0" }, "engines": { - "node": ">=8" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/gulp-cli/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "node_modules/glob/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/gulp-cli/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/gulp-cli/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/gulp-cli/node_modules/glogg": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-2.2.0.tgz", - "integrity": "sha512-eWv1ds/zAlz+M1ioHsyKJomfY7jbDDPpwSkv14KQj89bycx1nvK5/2Cj/T9g7kzJcX5Bc7Yv22FjfBZS/jl94A==", - "dev": true, - "dependencies": { - "sparkles": "^2.1.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp-cli/node_modules/gulplog": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-2.2.0.tgz", - "integrity": "sha512-V2FaKiOhpR3DRXZuYdRLn/qiY0yI5XmqbTKrYbdemJ+xOh2d2MOweI/XFgMzd/9+1twdvMwllnZbWZNJ+BOm4A==", - "dev": true, - "dependencies": { - "glogg": "^2.2.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/gulp-cli/node_modules/sparkles": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-2.1.0.tgz", - "integrity": "sha512-r7iW1bDw8R/cFifrD3JnQJX0K1jqT0kprL48BiBpLZLJPmAm34zsVBsK5lc7HirZYZqMW65dOXZgbAGt/I6frg==", - "dev": true, - "engines": { - "node": ">= 10.13.0" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/gulp-cli/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "node_modules/globals": { + "version": "13.13.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", + "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "type-fest": "^0.20.2" }, "engines": { "node": ">=8" - } - }, - "node_modules/gulp-decompress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-decompress/-/gulp-decompress-3.0.0.tgz", - "integrity": "sha512-F7plBXKgjS2yBWRNqhLnPR5peOWbmKU1dTUHgUSATo4/Eet9FJC55S0mc13S+WptNvEx0cR8DMlFU7zGZJuYDQ==", - "dev": true, - "dependencies": { - "archive-type": "^4.0.0", - "decompress": "^4.0.0", - "plugin-error": "^1.0.1", - "readable-stream": "^3.4.0", - "vinyl": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/gulp-decompress/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gulp-download": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/gulp-download/-/gulp-download-0.0.1.tgz", - "integrity": "sha512-29jElBkclf3HMkWBl7WkEG5HrPm5lyVDE0hffqRlmB7Cf4nf+38TyzZAaC83NjM8qVLkZ1rDFo9/1DVob8V9LQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "gulp-util": "latest", - "request": "latest", - "request-progress": "latest", - "through": "latest" - } - }, - "node_modules/gulp-util": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", - "integrity": "sha512-q5oWPc12lwSFS9h/4VIjG+1NuNDlJ48ywV2JKItY4Ycc/n1fXJeYPVQsfu5ZrhQi7FGSDBalwUCLar/GyHXKGw==", - "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", - "dev": true, - "license": "MIT", - "dependencies": { - "array-differ": "^1.0.0", - "array-uniq": "^1.0.2", - "beeper": "^1.0.0", - "chalk": "^1.0.0", - "dateformat": "^2.0.0", - "fancy-log": "^1.1.0", - "gulplog": "^1.0.0", - "has-gulplog": "^0.1.0", - "lodash._reescape": "^3.0.0", - "lodash._reevaluate": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.template": "^3.0.0", - "minimist": "^1.1.0", - "multipipe": "^0.1.2", - "object-assign": "^3.0.0", - "replace-ext": "0.0.1", - "through2": "^2.0.0", - "vinyl": "^0.5.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/gulp-util/node_modules/clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/gulp-util/node_modules/clone-stats": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", - "integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA==", - "dev": true, - "license": "MIT" - }, - "node_modules/gulp-util/node_modules/lodash.template": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", - "integrity": "sha512-0B4Y53I0OgHUJkt+7RmlDFWKjVAI/YUpWNiL9GQz5ORDr4ttgfQGo+phBWKFLJbBdtOwgMuUkdOHOnPg45jKmQ==", - "deprecated": "This package is deprecated. Use https://socket.dev/npm/package/eta instead.", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash._basecopy": "^3.0.0", - "lodash._basetostring": "^3.0.0", - "lodash._basevalues": "^3.0.0", - "lodash._isiterateecall": "^3.0.0", - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0", - "lodash.keys": "^3.0.0", - "lodash.restparam": "^3.0.0", - "lodash.templatesettings": "^3.0.0" - } - }, - "node_modules/gulp-util/node_modules/object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha512-jHP15vXVGeVh1HuaA2wY6lxk+whK/x4KBG88VXeRma7CCun7iGD5qPc4eYykQ9sdQvg8jkwFKsSxHln2ybW3xQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gulp-util/node_modules/replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha512-AFBWBy9EVRTa/LhEcG8QDP3FvpwZqmvN2QFDuJswFeaVhWnZMp8q3E6Zd90SR04PlIwfGdyVjNyLPyen/ek5CQ==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/gulp-util/node_modules/vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha512-P5zdf3WB9uzr7IFoVQ2wZTmUwHL8cMZWJGzLBNCHNZ3NB6HTMsYABtt7z8tAGIINLXyAob9B9a1yzVGMFOYKEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.0", - "clone-stats": "^0.0.1", - "replace-ext": "0.0.1" }, - "engines": { - "node": ">= 0.9" - } - }, - "node_modules/gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", - "dev": true, - "dependencies": { - "glogg": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, "dependencies": { - "ansi-regex": "^2.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -4083,18 +2878,6 @@ "node": ">=8" } }, - "node_modules/has-gulplog": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", - "integrity": "sha512-+F4GzLjwHNNDEAJW2DC1xXfEoPkRDmUdJ7CBYw4MpqtDwOnqdImJl7GWlpqx+Wko6//J8uKTnIe4wZSv7yCqmw==", - "dev": true, - "dependencies": { - "sparkles": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", @@ -4116,18 +2899,6 @@ "he": "bin/he" } }, - "node_modules/homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "dependencies": { - "parse-passwd": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/htmlparser2": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.0.1.tgz", @@ -4146,21 +2917,6 @@ "entities": "^2.0.0" } }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -4170,18 +2926,6 @@ "node": ">=10.17.0" } }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -4281,7 +3025,10 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4292,21 +3039,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/interpret": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", - "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", @@ -4319,19 +3051,6 @@ "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" } }, - "node_modules/is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "dependencies": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4370,7 +3089,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -4386,21 +3104,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-natural-number": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=", - "dev": true - }, - "node_modules/is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha512-czXVVn/QEmgvej1f50BZ648vUI+em0xqMq2Sn+QncCLN4zj1UAxlT+kw/6ggQTOaZPd1HqKQGEqbpQVtJucWug==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4430,18 +3133,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "dependencies": { - "is-unc-path": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", @@ -4450,24 +3141,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "dependencies": { - "unc-path-regex": "^0.1.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", @@ -4480,24 +3153,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha512-AhiROmoEFDSsjx8hW+5sGwgKVIORcXnrlAx/R0ZSeaPw70Vw0CqkGBBhHGL58Uox2eXnU1AnvXJl1XlyedO5bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -4517,12 +3172,6 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "node_modules/jackspeak": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", @@ -4603,24 +3252,12 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -4633,12 +3270,6 @@ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", "dev": true }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -4647,21 +3278,6 @@ "graceful-fs": "^4.1.6" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/jszip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", @@ -4697,15 +3313,6 @@ "colornames": "^1.1.1" } }, - "node_modules/last-run": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-2.0.0.tgz", - "integrity": "sha512-j+y6WhTLN4Itnf9j5ZQos1BGPCS8DAwmgMroR3OzfxAsBxam0hMw7J8M3KqZl0pLQJ1jNnwIexg5DYpC/ctwEQ==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/lcid": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", @@ -4718,15 +3325,6 @@ "node": ">=8" } }, - "node_modules/lead": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-4.0.0.tgz", - "integrity": "sha512-DpMa59o5uGUWWjruMp71e6knmwKU3jRBBn1kjuLWN9EeIOxNeSAwvHf03WIl8g/ZMR2oSQC9ej3yeLBwdDc/pg==", - "dev": true, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -4749,33 +3347,6 @@ "immediate": "~3.0.5" } }, - "node_modules/liftoff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-5.0.0.tgz", - "integrity": "sha512-a5BQjbCHnB+cy+gsro8lXJ4kZluzOijzJ1UVVfyJYZC+IP2pLv1h4+aysQeKuTmyO8NAqfyQAk4HWaP/HjcKTg==", - "dev": true, - "dependencies": { - "extend": "^3.0.2", - "findup-sync": "^5.0.0", - "fined": "^2.0.0", - "flagged-respawn": "^2.0.0", - "is-plain-object": "^5.0.0", - "rechoir": "^0.8.0", - "resolve": "^1.20.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/liftoff/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/loader-runner": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", @@ -4805,76 +3376,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash._basecopy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", - "integrity": "sha512-rFR6Vpm4HeCK1WPGvjZSJ+7yik8d8PVUdCJx5rT2pogG4Ve/2ZS7kfmO5l5T2o5V2mqlNIfSF5MZlr1+xOoYQQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._basetostring": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", - "integrity": "sha512-mTzAr1aNAv/i7W43vOR/uD/aJ4ngbtsRaCubp2BfZhlGU/eORUjg/7F6X0orNMdv33JOrdgGybtvMN/po3EWrA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._basevalues": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", - "integrity": "sha512-H94wl5P13uEqlCg7OcNNhMQ8KvWSIyqXzOPusRgHC9DK3o54P6P3xtbXlVbRABG4q5gSmp7EDdJ0MSuW9HX6Mg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._getnative": { - "version": "3.9.1", - "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", - "integrity": "sha512-RrL9VxMEPyDMHOd9uFbvMe8X55X16/cGM5IgOKgRElQZutpX89iS6vwl64duTV1/16w5JY7tuFNXqoekmh1EmA==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._isiterateecall": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", - "integrity": "sha512-De+ZbrMu6eThFti/CSzhRvTKMgQToLxbij58LMfM8JnYDNSOjkjTCIaa8ixglOeGh2nyPlakbt5bJWJ7gvpYlQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._reescape": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", - "integrity": "sha512-Sjlavm5y+FUVIF3vF3B75GyXrzsfYV8Dlv3L4mEpuB9leg8N6yf/7rU06iLPx9fY0Mv3khVp9p7Dx0mGV6V5OQ==", - "dev": true - }, - "node_modules/lodash._reevaluate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", - "integrity": "sha512-OrPwdDc65iJiBeUe5n/LIjd7Viy99bKwDdk7Z5ljfZg0uFRFlfQaCy9tZ4YMAag9WAZmlVpe1iZrkIMMSMHD3w==", - "dev": true - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", - "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", - "dev": true - }, - "node_modules/lodash._root": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", - "integrity": "sha512-O0pWuFSK6x4EXhM1dhZ8gchNtG7JMqBtrHdoUFUWXD7dJnNSUze1GuyQr5sOs0aCvgGeI3o/OJW8f4ca7FDxmQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.escape": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", - "integrity": "sha512-n1PZMXgaaDWZDSvuNZ/8XOcYO2hOKDqZel5adtR30VKQAtoWs/5AOeFA0vPV8moiPzlqe7F4cP2tzpFewQyelQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash._root": "^3.0.0" - } - }, "node_modules/lodash.findindex": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.findindex/-/lodash.findindex-4.6.0.tgz", @@ -4888,75 +3389,12 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "dev": true }, - "node_modules/lodash.isarguments": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", - "integrity": "sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isarray": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", - "integrity": "sha512-JwObCrNJuT0Nnbuecmqr5DgtuBppuCvGD9lxjFpAzwnVtdGoDQ1zig+5W8k5/6Gcn0gZ3936HDAlGd28i7sOGQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.keys": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", - "integrity": "sha512-CuBsapFjcubOGMn3VD+24HOAPxM79tH+V6ivJL3CHYjtrawauDJHUk//Yew9Hvc6e9rbCrURGk8z6PC+8WJBfQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash._getnative": "^3.0.0", - "lodash.isarguments": "^3.0.0", - "lodash.isarray": "^3.0.0" - } - }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, - "node_modules/lodash.restparam": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", - "integrity": "sha512-L4/arjjuq4noiUJpt3yS6KIKDtJwNe2fIYgMqyYYKoeIfV1iEqvPwhCx23o+R9dzouGihDAPN1dTIRWa7zk8tw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.template": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", - "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.template/node_modules/lodash.templatesettings": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", - "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", - "dev": true, - "dependencies": { - "lodash._reinterpolate": "^3.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", - "integrity": "sha512-TcrlEr31tDYnWkHFWDCV3dHYroKEXpJZ2YJYvJdhN+y4AkWMDZ5I4I8XDtUKqSAyG81N7w+I1mFEJtcED+tGqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.escape": "^3.0.0" - } - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -5068,27 +3506,6 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", - "dev": true, - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/make-dir/node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -5101,15 +3518,6 @@ "node": ">=6" } }, - "node_modules/map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/mem": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/mem/-/mem-5.1.1.tgz", @@ -5262,6 +3670,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -5279,10 +3688,22 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "license": "ISC", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" } }, "node_modules/mocha": { @@ -5515,24 +3936,6 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "license": "MIT" }, - "node_modules/multipipe": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", - "integrity": "sha512-7ZxrUybYv9NonoXgwoOqtStIu18D1c3eFZj27hqgf5kBrBF8Q+tE8V0MW8dKM5QLkQPh1JhhbKgHLY9kifov4Q==", - "dev": true, - "dependencies": { - "duplexer2": "0.0.2" - } - }, - "node_modules/mute-stdout": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-2.0.0.tgz", - "integrity": "sha512-32GSKM3Wyc8dg/p39lWPKYu8zci9mJFzV1Np9Of0ZEpe6Fhssn/FbI7ywAMd40uX+p3ZKh3T5EeCFv81qS3HmQ==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/nanoid": { "version": "3.3.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", @@ -5628,18 +4031,6 @@ "node": ">=0.10.0" } }, - "node_modules/now-and-later": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-3.0.0.tgz", - "integrity": "sha512-pGO4pzSdaxhWTGkfSfHx3hVzJVslFPwBp2Myq9MYN/ChfJZF87ochMAXnvz6/58RJSf5ik2q9tXprBBrk2cpcg==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -5651,15 +4042,6 @@ "node": ">=8" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -5676,33 +4058,6 @@ "node": ">= 6" } }, - "node_modules/object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha512-c/K0mw/F11k4dEUBMW8naXUuBuhxRCfG7W+yFy8EcijU/rSmazOUd1XAEEe6bC0OuXY4HUKjTJv7xbxIMqdxrA==", - "dev": true, - "dependencies": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", - "dev": true, - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5890,7 +4245,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true, "license": "BlueOak-1.0.0" }, "node_modules/pako": { @@ -5911,38 +4265,6 @@ "node": ">=6" } }, - "node_modules/parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha512-FwdRXKCohSVeXqwtYonZTXtbGJKrn+HNyWDYVcp5yuJlesTwNH4rsmRZ+GrKAPJ5bLpRxESMeS+Rl0VCHRvB2Q==", - "dev": true, - "dependencies": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/parse-node-version": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.0.tgz", - "integrity": "sha512-02GTVHD1u0nWc20n2G7WX/PgdhNFG04j5fi1OkaJzPWLTcf6vh6229Lta1wTmXG/7Dg42tCssgkccVt7qvd8Kg==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -5955,7 +4277,9 @@ "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5974,27 +4298,6 @@ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "node_modules/path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha512-QLcPegTHF11axjfojBIoDygmS2E3Lf+8+jI6wOVmNVenrKSo3mFdSGiIgdSHenczw3wPtlVMQaFVwGmM7BJdtg==", - "dev": true, - "dependencies": { - "path-root-regex": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha512-4GlJ6rZDhQZFE0DPVKh0e9jmZ5egZfxTkp7bcRDuPlJXbAwhxcl2dINPUAsjLdejqaLsCeg8axcLjIbvBjN4pQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-scurry": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", @@ -6025,18 +4328,6 @@ "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", "dev": true }, - "node_modules/pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -6054,36 +4345,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", @@ -6148,21 +4409,6 @@ "node": ">=8" } }, - "node_modules/plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", - "dev": true, - "dependencies": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/postcss": { "version": "8.5.3", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", @@ -6283,12 +4529,6 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, - "node_modules/psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", - "dev": true - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -6308,15 +4548,6 @@ "node": ">=6" } }, - "node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -6337,12 +4568,6 @@ } ] }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -6402,18 +4627,6 @@ "node": ">=8.10.0" } }, - "node_modules/rechoir": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", - "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", - "dev": true, - "dependencies": { - "resolve": "^1.20.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -6426,71 +4639,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true - }, - "node_modules/replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/replace-homedir": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-2.0.0.tgz", - "integrity": "sha512-bgEuQQ/BHW0XkkJtawzrfzHFSN70f/3cNOiHa2QsYxqrjaC30X1k74FJ6xswVBP0sr0SpGIdVFuPwfrYziVeyw==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request-progress": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", - "integrity": "sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==", - "dev": true, - "dependencies": { - "throttleit": "^1.0.0" - } - }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -6538,19 +4686,6 @@ "node": ">=8" } }, - "node_modules/resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==", - "dev": true, - "dependencies": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -6560,18 +4695,6 @@ "node": ">=8" } }, - "node_modules/resolve-options": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-2.0.0.tgz", - "integrity": "sha512-/FopbmmFOQCfsCx77BRFdKOniglTiHumLgwvd6IDPihy1GKkadZbgQJBcTb2lMzSR1pndzd96b1nZrreZ7+9/A==", - "dev": true, - "dependencies": { - "value-or-function": "^4.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -6618,12 +4741,6 @@ "node": ">=10" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, "node_modules/scheduler": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz", @@ -6651,19 +4768,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/seek-bzip": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", - "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", - "dev": true, - "dependencies": { - "commander": "^2.8.1" - }, - "bin": { - "seek-bunzip": "bin/seek-bunzip", - "seek-table": "bin/seek-bzip-table" - } - }, "node_modules/semver": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", @@ -6678,18 +4782,6 @@ "node": ">=10" } }, - "node_modules/semver-greatest-satisfied-range": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-2.0.0.tgz", - "integrity": "sha512-lH3f6kMbwyANB7HuOWRMlLCa2itaCrZJ+SAqqkSZrZKO/cAsk2EOyaKHUtNkVLFyFW9pct22SFesFp3Z7zpA0g==", - "dev": true, - "dependencies": { - "sver": "^1.8.3" - }, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/serialize-javascript": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -6823,40 +4915,6 @@ "node": ">=0.10.0" } }, - "node_modules/sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -6865,35 +4923,6 @@ "node": "*" } }, - "node_modules/stream-composer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-composer/-/stream-composer-1.0.2.tgz", - "integrity": "sha512-bnBselmwfX5K10AH6L4c8+S5lgZMWI7ZYrz2rvYjCPB2DIMC4Ig8OpxGpNJSxRZ58oti7y1IcNvjBAz9vW5m4w==", - "dev": true, - "dependencies": { - "streamx": "^2.13.2" - } - }, - "node_modules/stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", - "dev": true - }, - "node_modules/streamx": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", - "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", - "dev": true, - "dependencies": { - "fast-fifo": "^1.3.2", - "queue-tick": "^1.0.1", - "text-decoder": "^1.1.0" - }, - "optionalDependencies": { - "bare-events": "^2.2.0" - } - }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -6906,7 +4935,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6921,7 +4949,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", @@ -6936,7 +4963,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -6946,7 +4972,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -6959,7 +4984,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -6968,7 +4992,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6976,24 +4999,11 @@ "node": ">=8" } }, - "node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -7006,21 +5016,11 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/strip-dirs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", - "integrity": "sha1-SYdzYmT8NEzyD2w0rKnRPR1O1sU=", - "dev": true, - "dependencies": { - "is-natural-number": "^4.0.1" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", @@ -7041,15 +5041,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -7057,28 +5048,9 @@ "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sver": { - "version": "1.8.4", - "resolved": "https://registry.npmjs.org/sver/-/sver-1.8.4.tgz", - "integrity": "sha512-71o1zfzyawLfIWBOmw8brleKyvnbn73oVHNCsu51uPMz/HWiKkkXsI31JjHW5zqXEqnPYkIiHd8ZmL7FCimLEA==", - "dev": true, - "optionalDependencies": { - "semver": "^6.3.0" - } - }, - "node_modules/sver/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "optional": true, - "bin": { - "semver": "bin/semver.js" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/tabbable": { @@ -7095,31 +5067,31 @@ "node": ">=6" } }, - "node_modules/tar-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", - "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "node_modules/tar": { + "version": "7.5.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", + "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", "dev": true, + "license": "ISC", "dependencies": { - "bl": "^1.0.0", - "buffer-alloc": "^1.2.0", - "end-of-stream": "^1.0.0", - "fs-constants": "^1.0.0", - "readable-stream": "^2.3.0", - "to-buffer": "^1.1.1", - "xtend": "^4.0.0" + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" }, "engines": { - "node": ">= 0.8.0" + "node": ">=18" } }, - "node_modules/teex": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/teex/-/teex-1.0.1.tgz", - "integrity": "sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "dependencies": { - "streamx": "^2.12.5" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" } }, "node_modules/terser": { @@ -7174,15 +5146,6 @@ } } }, - "node_modules/text-decoder": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", - "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4" - } - }, "node_modules/text-hex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", @@ -7194,43 +5157,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/throttleit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-1.0.0.tgz", - "integrity": "sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==", - "dev": true - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "node_modules/through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", - "dev": true, - "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" - } - }, - "node_modules/time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/to-buffer": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7242,31 +5168,6 @@ "node": ">=8.0" } }, - "node_modules/to-through": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-3.0.0.tgz", - "integrity": "sha512-y8MN937s/HVhEoBU1SxfHC+wxCHkV1a9gW8eAdTadYh/bGyesZIVcbjI+mSpFbSVwQici/XjBjuUyri1dnXwBw==", - "dev": true, - "dependencies": { - "streamx": "^2.12.5" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -7364,24 +5265,6 @@ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", "dev": true }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -7454,49 +5337,6 @@ "node": "*" } }, - "node_modules/unbzip2-stream": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", - "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", - "dev": true, - "dependencies": { - "buffer": "^5.2.1", - "through": "^2.3.8" - } - }, - "node_modules/unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/undertaker": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-2.0.0.tgz", - "integrity": "sha512-tO/bf30wBbTsJ7go80j0RzA2rcwX6o7XPBpeFcb+jzoeb4pfMM2zUeSDIkY1AWqeZabWxaQZ/h8N9t35QKDLPQ==", - "dev": true, - "dependencies": { - "bach": "^2.0.1", - "fast-levenshtein": "^3.0.0", - "last-run": "^2.0.0", - "undertaker-registry": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/undertaker-registry": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-2.0.0.tgz", - "integrity": "sha512-+hhVICbnp+rlzZMgxXenpvTxpuvA67Bfgtt+O9WOE5jo7w/dyiF1VmoZVIHvP2EkUjsyKyTwYKlLhA+j47m1Ew==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -7555,250 +5395,12 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, "node_modules/v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, - "node_modules/v8flags": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-4.0.1.tgz", - "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/value-or-function": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-4.0.0.tgz", - "integrity": "sha512-aeVK81SIuT6aMJfNo9Vte8Dw0/FZINGBV8BfCraGtqVxIeLAEhJyoWs8SmvRVmXfGss2PmmOwZCuBPbZR+IYWg==", - "dev": true, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vinyl": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.0.tgz", - "integrity": "sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg==", - "dev": true, - "dependencies": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vinyl-contents": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-contents/-/vinyl-contents-2.0.0.tgz", - "integrity": "sha512-cHq6NnGyi2pZ7xwdHSW1v4Jfnho4TEGtxZHw01cmnc8+i7jgR6bRnED/LbrKan/Q7CvVLbnvA5OepnhbpjBZ5Q==", - "dev": true, - "dependencies": { - "bl": "^5.0.0", - "vinyl": "^3.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-contents/node_modules/bl": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", - "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/vinyl-contents/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/vinyl-contents/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/vinyl-contents/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/vinyl-contents/node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dev": true, - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-fs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-4.0.0.tgz", - "integrity": "sha512-7GbgBnYfaquMk3Qu9g22x000vbYkOex32930rBnc3qByw6HfMEAoELjCjoJv4HuEQxHAurT+nvMHm6MnJllFLw==", - "dev": true, - "dependencies": { - "fs-mkdirp-stream": "^2.0.1", - "glob-stream": "^8.0.0", - "graceful-fs": "^4.2.11", - "iconv-lite": "^0.6.3", - "is-valid-glob": "^1.0.0", - "lead": "^4.0.0", - "normalize-path": "3.0.0", - "resolve-options": "^2.0.0", - "stream-composer": "^1.0.2", - "streamx": "^2.14.0", - "to-through": "^3.0.0", - "value-or-function": "^4.0.0", - "vinyl": "^3.0.0", - "vinyl-sourcemap": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-fs/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/vinyl-fs/node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dev": true, - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-sourcemap": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-2.0.0.tgz", - "integrity": "sha512-BAEvWxbBUXvlNoFQVFVHpybBbjW1r03WhohJzJDSfgrrK5xVYIDTan6xN14DlyImShgDRv2gl9qhM6irVMsV0Q==", - "dev": true, - "dependencies": { - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.10", - "now-and-later": "^3.0.0", - "streamx": "^2.12.5", - "vinyl": "^3.0.0", - "vinyl-contents": "^2.0.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/vinyl-sourcemap/node_modules/replace-ext": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz", - "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/vinyl-sourcemap/node_modules/vinyl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-3.0.0.tgz", - "integrity": "sha512-rC2VRfAVVCGEgjnxHUnpIVh3AGuk62rP3tqVrn+yab0YH7UULisC085+NYH+mnqf3Wx4SpSi1RQMwudL89N03g==", - "dev": true, - "dependencies": { - "clone": "^2.1.2", - "clone-stats": "^1.0.0", - "remove-trailing-separator": "^1.1.0", - "replace-ext": "^2.0.0", - "teex": "^1.0.1" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/vscode-jsonrpc": { "version": "8.2.1-next.1", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1-next.1.tgz", @@ -8213,7 +5815,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -8231,7 +5832,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=8" @@ -8241,7 +5841,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "license": "MIT", "dependencies": { "color-convert": "^2.0.1" @@ -8257,7 +5856,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "license": "MIT", "dependencies": { "color-name": "~1.1.4" @@ -8270,14 +5868,12 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, "license": "MIT" }, "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" @@ -8345,15 +5941,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/xtend": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", - "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -8368,33 +5955,6 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", @@ -8434,16 +5994,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 4b5fbc255..0bde06fdd 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "multi-root ready" ], "activationEvents": [ - "onLanguage:java", "workspaceContains:pom.xml", "workspaceContains:*/pom.xml", "workspaceContains:build.gradle", @@ -2000,13 +1999,21 @@ "watch": "webpack --mode development --watch", "pretest": "npm run compile", "test": "node ./out/test/runtest.js", - "build-server": "gulp build_server", - "build": "gulp build_or_download", - "fast-build-server": "gulp dev_server", - "watch-server": "gulp watch_server", + "build-server": "node scripts/index.mjs build-server", + "build": "node scripts/index.mjs build-or-download", + "fast-build-server": "node scripts/index.mjs dev-server", + "watch-server": "node scripts/index.mjs watch-server", "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx .", - "repo:check": "gulp repo_check", - "repo:fix": "gulp repo_fix" + "repo:check": "node scripts/index.mjs repo-check", + "repo:fix": "node scripts/index.mjs repo-fix", + "clean-jre": "node scripts/index.mjs clean-jre", + "download-jre": "node scripts/index.mjs download-jre", + "download-lombok": "node scripts/index.mjs download-lombok", + "download-server": "node scripts/index.mjs download-server", + "generate-standard-test-folder": "node scripts/index.mjs generate-standard-test-folder", + "generate-lightweight-test-folder": "node scripts/index.mjs generate-lightweight-test-folder", + "clean-test-folder": "node scripts/index.mjs clean-test-folder", + "prepare-pre-release": "node scripts/index.mjs prepare-pre-release" }, "devDependencies": { "@types/fs-extra": "^8.0.0", @@ -2028,16 +2035,12 @@ "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", - "gulp": "^5.0.0", - "gulp-decompress": "^3.0.0", - "gulp-download": "0.0.1", "lodash.findindex": "^4.6.0", - "lodash.template": ">=4.5.0", + "mini-css-extract-plugin": "^2.9.4", "minimist": ">=1.2.6", "mocha": "^11.1.0", - "request": "^2.88.2", "sinon": "^14.0.0", - "mini-css-extract-plugin": "^2.9.4", + "tar": "^7.5.1", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -2052,21 +2055,21 @@ "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", - "glob": "^7.1.3", + "glob": "^11.0.3", "htmlparser2": "6.0.1", "jdk-utils": "^0.6.0", "react": "^17.0.2", "react-dom": "^17.0.2", "semver": "^7.5.2", "vscode-languageclient": "8.2.0-next.3", + "vscode-variables": "^1.0.1", "winreg-utf8": "^0.1.1", "winston": "^3.2.1", - "winston-daily-rotate-file": "^4.7.1", - "vscode-variables": "^1.0.1" + "winston-daily-rotate-file": "^4.7.1" }, "overrides": { "vscode-languageserver-protocol": "3.17.6-next.1" }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file diff --git a/scripts/index.mjs b/scripts/index.mjs new file mode 100644 index 000000000..0e25ccd81 --- /dev/null +++ b/scripts/index.mjs @@ -0,0 +1,142 @@ +#!/usr/bin/env node + +import { cleanJre, downloadJre } from './jre.mjs'; +import { downloadLombok } from './lombok.mjs'; +import { downloadServer, buildServer, buildOrDownload, devServer, watchServer } from './server.mjs'; +import { generateStandardTestFolder, generateLightweightTestFolder, cleanTestFolder } from './test.mjs'; +import { preparePreRelease } from './release.mjs'; +import { repoCheck, repoFix } from './repo.mjs'; + +async function main() { + const command = process.argv[2]; + const args = process.argv.slice(3); + + switch (command) { + // JRE commands + case 'clean-jre': + await cleanJre(); + break; + case 'download-jre': + const targetIndex = args.indexOf('--target'); + const versionIndex = args.indexOf('--javaVersion'); + const targetPlatform = targetIndex !== -1 ? args[targetIndex + 1] : undefined; + const javaVersion = versionIndex !== -1 ? args[versionIndex + 1] : undefined; + await downloadJre(targetPlatform, javaVersion); + break; + + // Lombok commands + case 'download-lombok': + await downloadLombok(); + break; + + // Server commands + case 'download-server': + await downloadServer(); + break; + case 'build-server': + try { + await buildServer(); + } catch (error) { + console.error('Build failed:', error.message); + process.exit(1); + } + break; + case 'build-or-download': + await buildOrDownload(); + break; + case 'dev-server': + await devServer(); + break; + case 'watch-server': + try { + await watchServer(); + } catch (error) { + console.error('Error:', error.message); + process.exit(1); + } + break; + + // Test commands + case 'generate-standard-test-folder': + await generateStandardTestFolder(); + break; + case 'generate-lightweight-test-folder': + await generateLightweightTestFolder(); + break; + case 'clean-test-folder': + await cleanTestFolder(); + break; + + // Release commands + case 'prepare-pre-release': + await preparePreRelease(); + break; + + // Repository commands + case 'repo-check': + await repoCheck(); + break; + case 'repo-fix': + await repoFix(); + break; + + default: + console.log(` +Usage: node scripts/index.js [options] + +Commands: + JRE Management: + clean-jre Clean JRE directory + download-jre [--target ] [--javaVersion ] Download JRE + + Lombok Management: + download-lombok Download Lombok + + Server Management: + download-server Download JDT Language Server + build-server Build JDT Language Server + build-or-download Build or download JDT Language Server + dev-server Build development server + watch-server Watch server files for changes + + Test Environment: + generate-standard-test-folder Generate standard test folder + generate-lightweight-test-folder Generate lightweight test folder + clean-test-folder Clean test folder + + Release Management: + prepare-pre-release Prepare pre-release version + + Repository Management: + repo-check Check package-lock.json for internal registry references + repo-fix Fix package-lock.json registry references + +Examples: + node scripts/index.js download-jre --target darwin-x64 --javaVersion 21 + node scripts/index.js build-or-download + node scripts/index.js watch-server + `); + process.exit(1); + } +} + +if (import.meta.url === `file://${process.argv[1]}`) { + main().catch(console.error); +} + +export { + cleanJre, + downloadJre, + downloadLombok, + downloadServer, + buildServer, + buildOrDownload, + devServer, + watchServer, + generateStandardTestFolder, + generateLightweightTestFolder, + cleanTestFolder, + preparePreRelease, + repoCheck, + repoFix +}; diff --git a/scripts/jre.mjs b/scripts/jre.mjs new file mode 100644 index 000000000..25abd2b85 --- /dev/null +++ b/scripts/jre.mjs @@ -0,0 +1,126 @@ +#!/usr/bin/env node +/* eslint-disable @typescript-eslint/naming-convention */ + +import fs from 'fs-extra'; +import path from 'path'; +import https from 'https'; +import { downloadFile, getScriptDir, extractTarGz, handleError, setupMainExecution } from './utils.mjs'; + +const dirname = getScriptDir(); + +const LATEST_JRE = 21; + +const platformMapping = { + "linux-arm64": "linux-aarch64", + "linux-x64": "linux-x86_64", + "darwin-arm64": "macosx-aarch64", + "darwin-x64": "macosx-x86_64", + "win32-x64": "win32-x86_64" +}; + + +async function downloadManifest(manifestUrl) { + return new Promise((resolve, reject) => { + https.get(manifestUrl, (response) => { + if (response.statusCode >= 400) { + reject(new Error(`${response.statusCode} returned from ${manifestUrl}`)); + return; + } + let body = ''; + response.on('data', (chunk) => body += chunk); + response.on('end', () => resolve(body)); + }).on('error', reject); + }); +} + + +async function cleanJre() { + if (fs.existsSync('./jre')) { + fs.removeSync('./jre'); + console.log('Cleaned JRE directory'); + } +} + +async function downloadJre(targetPlatform, javaVersion) { + if (fs.existsSync('./jre')) { + fs.removeSync('./jre'); + } + + if (!targetPlatform || !Object.keys(platformMapping).includes(targetPlatform)) { + console.log("[Error] download_jre failed, please specify a valid target platform via --target argument. Here are the supported platform list:"); + for (const platform of Object.keys(platformMapping)) { + console.log(platform); + } + return; + } + + const version = (!javaVersion || javaVersion === "latest") ? LATEST_JRE : javaVersion; + console.log(`Downloading justj JRE ${version} for the platform ${targetPlatform}...`); + + const manifestUrl = `https://download.eclipse.org/justj/jres/${version}/downloads/latest/justj.manifest`; + + try { + const manifest = await downloadManifest(manifestUrl); + + if (!manifest) { + throw new Error(`Failed to download justj.manifest, please check if the link ${manifestUrl} is valid.`); + } + + const javaPlatform = platformMapping[targetPlatform]; + const list = manifest.split(/\r?\n/); + const jreIdentifier = list.find((value) => { + return value.indexOf("org.eclipse.justj.openjdk.hotspot.jre.full.stripped") >= 0 && value.indexOf(javaPlatform) >= 0; + }); + + if (!jreIdentifier) { + throw new Error(`justj doesn't support the jre ${version} for the platform ${javaPlatform} (${targetPlatform}), please refer to the link ${manifestUrl} for the supported platforms.`); + } + + const jreDownloadUrl = `https://download.eclipse.org/justj/jres/${version}/downloads/latest/${jreIdentifier}`; + const parsedDownloadUrl = new URL(jreDownloadUrl); + const jreFileName = path.basename(parsedDownloadUrl.pathname) + .replace(/[\.7z|\.bz2|\.gz|\.rar|\.tar|\.zip|\.xz]*$/, ""); + const idx = jreFileName.indexOf('-'); + const jreVersionLabel = idx >= 0 ? jreFileName.substring(idx + 1) : jreFileName; + + const tempFile = path.join(dirname, 'temp-jre.tar.gz'); + const destDir = path.join('./jre', jreVersionLabel); + + // Ensure the jre directory exists + fs.ensureDirSync('./jre'); + fs.ensureDirSync(destDir); + + console.log(`Downloading JRE from ${jreDownloadUrl}...`); + await downloadFile(jreDownloadUrl, tempFile); + + console.log(`Extracting JRE to ${destDir}...`); + await extractTarGz(tempFile, destDir); + + // Clean up temp file + fs.removeSync(tempFile); + + console.log(`Successfully downloaded and extracted JRE ${jreVersionLabel}`); + } catch (error) { + handleError(error, 'downloading JRE'); + } +} + +// Main execution +async function main() { + const args = process.argv.slice(2); + const targetIndex = args.indexOf('--target'); + const versionIndex = args.indexOf('--javaVersion'); + + const targetPlatform = targetIndex !== -1 ? args[targetIndex + 1] : `${process.platform}-${process.arch}`; + const javaVersion = versionIndex !== -1 ? args[versionIndex + 1] : LATEST_JRE; + + if (args.includes('clean')) { + await cleanJre(); + } else { + await downloadJre(targetPlatform, javaVersion); + } +} + +setupMainExecution(main); + +export { cleanJre, downloadJre }; diff --git a/scripts/lombok.mjs b/scripts/lombok.mjs new file mode 100644 index 000000000..fe372e2b2 --- /dev/null +++ b/scripts/lombok.mjs @@ -0,0 +1,36 @@ +#!/usr/bin/env node + +import fs from 'fs-extra'; +import path from 'path'; +import { downloadFile, handleError, setupMainExecution } from './utils.mjs'; + +async function downloadLombok() { + if (fs.existsSync('./lombok')) { + fs.removeSync('./lombok'); + } + + try { + const lombokVersion = '1.18.38'; + // The latest lombok version can be found on the website https://projectlombok.org/downloads + const lombokUrl = `https://projectlombok.org/downloads/lombok-${lombokVersion}.jar`; + + // Ensure the lombok directory exists + fs.ensureDirSync('./lombok'); + + console.log(`Downloading Lombok ${lombokVersion}...`); + await downloadFile(lombokUrl, path.join('./lombok', `lombok-${lombokVersion}.jar`)); + + console.log(`Successfully downloaded Lombok ${lombokVersion}`); + } catch (error) { + handleError(error, 'downloading Lombok'); + } +} + +// Main execution +async function main() { + await downloadLombok(); +} + +setupMainExecution(main); + +export { downloadLombok }; diff --git a/scripts/release.mjs b/scripts/release.mjs new file mode 100644 index 000000000..d9433b8ea --- /dev/null +++ b/scripts/release.mjs @@ -0,0 +1,60 @@ +#!/usr/bin/env node + +import fs from 'fs-extra'; +import { getProjectPath, handleError, setupMainExecution } from './utils.mjs'; + +function prependZero(num) { + if (num > 99) { + throw "Unexpected value to prepend with zero"; + } + return `${num < 10 ? "0" : ""}${num}`; +} + +async function preparePreRelease() { + console.log('Preparing pre-release version...'); + + try { + const packageJsonPath = getProjectPath('package.json'); + const json = JSON.parse(fs.readFileSync(packageJsonPath).toString()); + const stableVersion = json.version.match(/(\d+)\.(\d+)\.(\d+)/); + + if (!stableVersion) { + throw new Error('Invalid version format in package.json'); + } + + const major = stableVersion[1]; + const minor = stableVersion[2]; + const date = new Date(); + const month = date.getMonth() + 1; + const day = date.getDate(); + const hours = date.getHours(); + const patch = `${date.getFullYear()}${prependZero(month)}${prependZero(day)}${prependZero(hours)}`; + + const insiderPackageJson = Object.assign(json, { + version: `${major}.${minor}.${patch}`, + }); + + fs.writeFileSync(packageJsonPath, JSON.stringify(insiderPackageJson, null, 2)); + console.log(`Successfully updated version to ${insiderPackageJson.version}`); + } catch (error) { + handleError(error, 'preparing pre-release'); + } +} + +// Main execution +async function main() { + const command = process.argv[2]; + + switch (command) { + case 'prepare': + await preparePreRelease(); + break; + default: + console.log('Usage: node release.js [prepare]'); + process.exit(1); + } +} + +setupMainExecution(main); + +export { preparePreRelease }; diff --git a/scripts/repo.mjs b/scripts/repo.mjs new file mode 100644 index 000000000..1f51e2452 --- /dev/null +++ b/scripts/repo.mjs @@ -0,0 +1,69 @@ +#!/usr/bin/env node + +import fs from 'fs-extra'; +import { getProjectPath, handleError, setupMainExecution } from './utils.mjs'; + +const NON_NPM_REPOSITORY_RE = new RegExp( + String.raw`"resolved":\s*"https://.+/registry.npmjs.org/`, + "g" +); + +async function repoCheck() { + console.log('Checking package-lock.json for internal registry references...'); + + try { + const packageLockPath = getProjectPath('package-lock.json'); + const data = fs.readFileSync(packageLockPath, { encoding: "utf-8" }); + + if (NON_NPM_REPOSITORY_RE.test(data)) { + console.error("Found references to the internal registry in the file package-lock.json. Please fix it with 'npm run repo:fix'"); + process.exit(1); + } else { + console.log('No internal registry references found'); + } + } catch (error) { + handleError(error, 'checking repository'); + } +} + +async function repoFix() { + console.log('Fixing package-lock.json registry references...'); + + try { + const packageLockPath = getProjectPath('package-lock.json'); + const data = fs.readFileSync(packageLockPath, { encoding: "utf-8" }); + const newData = data.replace(NON_NPM_REPOSITORY_RE, `"resolved": "https://registry.npmjs.org/`); + + if (data !== newData) { + fs.writeFileSync(packageLockPath, newData, { + encoding: "utf-8", + }); + console.log('Successfully fixed package-lock.json'); + } else { + console.log('Nothing to fix'); + } + } catch (error) { + handleError(error, 'fixing repository'); + } +} + +// Main execution +async function main() { + const command = process.argv[2]; + + switch (command) { + case 'check': + await repoCheck(); + break; + case 'fix': + await repoFix(); + break; + default: + console.log('Usage: node repo.js [check|fix]'); + process.exit(1); + } +} + +setupMainExecution(main); + +export { repoCheck, repoFix }; diff --git a/scripts/server.mjs b/scripts/server.mjs new file mode 100644 index 000000000..2037d99c9 --- /dev/null +++ b/scripts/server.mjs @@ -0,0 +1,167 @@ +#!/usr/bin/env node + +/* eslint-disable no-underscore-dangle */ + +import fs from 'fs-extra'; +import path from 'path'; +import { execSync } from 'child_process'; +import chokidar from 'chokidar'; +import { glob } from 'glob'; +import { downloadFile, getScriptDir, extractTarGz, handleError, setupMainExecution } from './utils.mjs'; + +const dirname = getScriptDir(); + +const serverDir = path.join(dirname, '..', '..', 'eclipse.jdt.ls'); +const JDT_LS_SNAPSHOT_URL = "https://download.eclipse.org/jdtls/snapshots/jdt-language-server-latest.tar.gz"; + +function isWin() { + return /^win/.test(process.platform); +} + +function mvnw() { + return isWin() ? "mvnw.cmd" : "./mvnw"; +} + + +async function downloadServer() { + console.log('Downloading Eclipse JDT Language Server snapshot...'); + + fs.removeSync('./server'); + fs.ensureDirSync('./server'); + + const tempFile = path.join(dirname, 'temp-server.tar.gz'); + + try { + await downloadFile(JDT_LS_SNAPSHOT_URL, tempFile); + await extractTarGz(tempFile, './server'); + fs.removeSync(tempFile); + + console.log('Successfully downloaded and extracted JDT Language Server'); + } catch (error) { + handleError(error, 'downloading server'); + } +} + +async function buildServer() { + console.log('Building Eclipse JDT Language Server...'); + + fs.removeSync('./server'); + fs.ensureDirSync('./server'); + + try { + const command = `${mvnw() } -Pserver-distro clean package -U -Declipse.jdt.ls.skipGradleChecksums`; + console.log(`Executing: ${command}`); + execSync(command, { cwd: serverDir, stdio: [0, 1, 2] }); + + const sources = await glob(`${serverDir }/org.eclipse.jdt.ls.product/distro/*.tar.gz`); + + if (sources.length > 0) { + await extractTarGz(sources[0], './server'); + console.log('Successfully built and extracted JDT Language Server'); + } else { + throw new Error('No server distribution found after build'); + } + } catch (error) { + handleError(error, 'building server', false); + throw error; + } +} + +async function buildOrDownload() { + if (!fs.existsSync(serverDir)) { + console.log('NOTE: eclipse.jdt.ls is not found as a sibling directory, downloading the latest snapshot of the Eclipse JDT Language Server...'); + await downloadServer(); + } else { + await buildServer(); + } +} + +async function devServer() { + console.log('Building development server...'); + + try { + const command = `${mvnw() } -o -pl org.eclipse.jdt.ls.core,org.eclipse.jdt.ls.target clean package -Declipse.jdt.ls.skipGradleChecksums`; + console.log(`Executing: ${command}`); + execSync(command, { cwd: serverDir, stdio: [0, 1, 2] }); + + const sources = await glob(`${serverDir }/org.eclipse.jdt.ls.core/target/org.eclipse.jdt.ls.core-*-SNAPSHOT.jar`); + const targets = await glob('./server/plugins/org.eclipse.jdt.ls.core_*.jar'); + + if (sources.length > 0 && targets.length > 0) { + console.log(`Copying ${sources[0]} to ${targets[0]}`); + fs.copySync(sources[0], targets[0]); + console.log('Successfully built development server'); + } else { + throw new Error('Source or target JAR files not found'); + } + } catch (error) { + handleError(error, 'building development server'); + } +} + +async function watchServer() { + console.log('Watching server files for changes...'); + // if server_dir is not a directory, throw an error + if (!fs.existsSync(serverDir)) { + throw new Error(`Server directory '${serverDir}' does not exist. This command is for JDT Language Server development. You need to have the eclipse.jdt.ls repository as a sibling directory to use this feature.`); + } + const watcher = chokidar.watch(`${serverDir }/org.eclipse.jdt.ls.core/**/*.java`, { + ignored: /(^|[\/\\])\../, // ignore dotfiles + persistent: true + }); + + watcher.on('change', async (path) => { + console.log(`File ${path} has been changed, rebuilding...`); + try { + await devServer(); + } catch (error) { + handleError(error, 'rebuilding server', false); + } + }); + + console.log('Watching for changes. Press Ctrl+C to stop.'); + + // Handle graceful shutdown + process.on('SIGINT', () => { + console.log('\nStopping watcher...'); + watcher.close(); + process.exit(0); + }); + + // Keep the process alive by waiting indefinitely + return new Promise((resolve, reject) => { + console.log('Watcher is now active and waiting for file changes...'); + // This promise never resolves, keeping the process alive + // The process will only exit when SIGINT is received + }); +} + +// Main execution +async function main() { + const command = process.argv[2]; + + switch (command) { + case 'download': + await downloadServer(); + break; + case 'build': + await buildServer(); + break; + case 'build-or-download': + await buildOrDownload(); + break; + case 'dev': + await devServer(); + break; + case 'watch': + await watchServer(); + break; + default: + console.log('Usage: node server.js [download|build|build-or-download|dev|watch]'); + process.exit(1); + } +} + +setupMainExecution(main); + +export { downloadServer, buildServer, buildOrDownload, devServer, watchServer }; diff --git a/scripts/test.mjs b/scripts/test.mjs new file mode 100644 index 000000000..3886c5c19 --- /dev/null +++ b/scripts/test.mjs @@ -0,0 +1,82 @@ +#!/usr/bin/env node +/* eslint-disable @typescript-eslint/naming-convention */ + +import fs from 'fs-extra'; +import path from 'path'; +import { getProjectPath, handleError, setupMainExecution } from './utils.mjs'; + +const originalTestFolder = getProjectPath('test', 'resources', 'projects', 'maven', 'salut'); +const tempTestFolder = getProjectPath('test-temp'); +const testSettings = path.join(tempTestFolder, '.vscode', 'settings.json'); + +async function generateStandardTestFolder() { + console.log('Generating standard test folder...'); + + try { + fs.copySync(originalTestFolder, tempTestFolder); + fs.ensureDirSync(path.join(tempTestFolder, '.vscode')); + fs.writeJSONSync(testSettings, { + "java.server.launchMode": "Standard", + "java.configuration.updateBuildConfiguration": "automatic" + }); + + console.log('Successfully generated standard test folder'); + } catch (error) { + handleError(error, 'generating standard test folder'); + } +} + +async function generateLightweightTestFolder() { + console.log('Generating lightweight test folder...'); + + try { + fs.copySync(originalTestFolder, tempTestFolder); + fs.ensureDirSync(path.join(tempTestFolder, '.vscode')); + fs.writeJSONSync(testSettings, { + "java.server.launchMode": "LightWeight", + }); + + console.log('Successfully generated lightweight test folder'); + } catch (error) { + handleError(error, 'generating lightweight test folder'); + } +} + +async function cleanTestFolder() { + console.log('Cleaning test folder...'); + + try { + if (fs.existsSync(tempTestFolder)) { + fs.removeSync(tempTestFolder); + console.log('Successfully cleaned test folder'); + } else { + console.log('Test folder does not exist'); + } + } catch (error) { + handleError(error, 'cleaning test folder'); + } +} + +// Main execution +async function main() { + const command = process.argv[2]; + + switch (command) { + case 'standard': + await generateStandardTestFolder(); + break; + case 'lightweight': + await generateLightweightTestFolder(); + break; + case 'clean': + await cleanTestFolder(); + break; + default: + console.log('Usage: node test.js [standard|lightweight|clean]'); + process.exit(1); + } +} + +setupMainExecution(main); + +export { generateStandardTestFolder, generateLightweightTestFolder, cleanTestFolder }; diff --git a/scripts/utils.mjs b/scripts/utils.mjs new file mode 100644 index 000000000..49a2d1ad7 --- /dev/null +++ b/scripts/utils.mjs @@ -0,0 +1,102 @@ +#!/usr/bin/env node + +import https from 'https'; +import { createWriteStream } from 'fs'; +import { pipeline } from 'stream'; +import { promisify } from 'util'; +import { fileURLToPath } from 'url'; +import path from 'path'; +import fs from 'fs-extra'; +import * as tar from 'tar'; +import zlib from 'zlib'; + +const pipelineAsync = promisify(pipeline); + +/** + * Downloads a file from a URL to a destination path + * @param {string} url - The URL to download from + * @param {string} destPath - The destination path to save the file + * @returns {Promise} A promise that resolves when the download is complete + */ +async function downloadFile(url, destPath) { + return new Promise((resolve, reject) => { + const file = createWriteStream(destPath); + https.get(url, (response) => { + if (response.statusCode >= 400) { + reject(new Error(`${response.statusCode} returned from ${url}`)); + return; + } + pipelineAsync(response, file) + .then(() => resolve()) + .catch(reject); + }).on('error', reject); + }); +} + +/** + * Gets the directory name of the current script (ESM equivalent of __dirname) + * @returns {string} The directory path of the current script + */ +function getScriptDir() { + const filename = fileURLToPath(import.meta.url); + return path.dirname(filename); +} + +/** + * Extracts a tar.gz file to a destination directory + * @param {string} tarGzPath - Path to the tar.gz file + * @param {string} destDir - Destination directory for extraction + * @returns {Promise} A promise that resolves when extraction is complete + */ +async function extractTarGz(tarGzPath, destDir) { + return new Promise((resolve, reject) => { + fs.createReadStream(tarGzPath) + .pipe(zlib.createGunzip()) + .pipe(tar.extract({ cwd: destDir, strip: 0 })) + .on('end', resolve) + .on('error', reject); + }); +} + +/** + * Creates a path relative to the project root (parent of scripts directory) + * @param {...string} pathSegments - Path segments to join + * @returns {string} The constructed path + */ +function getProjectPath(...pathSegments) { + const scriptDir = getScriptDir(); + const projectRoot = path.join(scriptDir, '..'); + return path.join(projectRoot, ...pathSegments); +} + +/** + * Handles errors with consistent logging and exit behavior + * @param {Error} error - The error to handle + * @param {string} context - Context description for the error + * @param {boolean} shouldExit - Whether to exit the process (default: true) + */ +function handleError(error, context, shouldExit = true) { + console.error(`Error ${context}:`, error.message); + if (shouldExit) { + process.exit(1); + } +} + +/** + * Sets up the main execution pattern for scripts + * @param {Function} mainFunction - The main function to execute + */ +function setupMainExecution(mainFunction) { + if (import.meta.url === `file://${process.argv[1]}`) { + mainFunction().catch(console.error); + } +} + +export { + downloadFile, + getScriptDir, + extractTarGz, + getProjectPath, + handleError, + setupMainExecution +}; diff --git a/src/extension.ts b/src/extension.ts index f4ff04005..c12cf7f15 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -3,48 +3,47 @@ import * as chokidar from 'chokidar'; import * as fs from 'fs'; import * as fse from 'fs-extra'; +import { glob } from 'glob'; import * as os from 'os'; import * as path from 'path'; import * as semver from 'semver'; -import { CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, - IndentAction, InputBoxOptions, languages, Location, MarkdownString, QuickPickItemKind, Range, RelativePattern, - SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, - Webview, - WebviewView, WebviewViewResolveContext, window, workspace, WorkspaceConfiguration, WorkspaceEdit } from 'vscode'; +import { + CodeActionContext, commands, CompletionItem, ConfigurationTarget, Diagnostic, env, EventEmitter, ExtensionContext, extensions, + IndentAction, InputBoxOptions, languages, Location, MarkdownString, RelativePattern, + SnippetString, SnippetTextEdit, TextDocument, TextEditorRevealType, UIKind, Uri, version, ViewColumn, window, workspace, WorkspaceConfiguration +} from 'vscode'; import { CancellationToken, CodeActionParams, CodeActionRequest, CodeActionResolveRequest, Command, CompletionRequest, DidChangeConfigurationNotification, ExecuteCommandParams, ExecuteCommandRequest, LanguageClientOptions, RevealOutputChannelOn } from 'vscode-languageclient'; import { Executable, LanguageClient } from 'vscode-languageclient/node'; import { apiManager } from './apiManager'; +import { BuildFileSelector, cleanupWorkspaceState, PICKED_BUILD_FILES } from './buildFilesSelector'; import { ClientErrorHandler } from './clientErrorHandler'; -import { Commands, CommandTitle } from './commands'; +import { Commands } from './commands'; +import { Dashboard } from './dashboard/dashboard'; +import { getMessage } from './errorUtils'; import { ClientStatus, ExtensionAPI, TraceEvent } from './extension.api'; import * as fileEventHandler from './fileEventHandler'; +import { JavaClassEditorProvider } from './javaClassEditor'; import { getSharedIndexCache, HEAP_DUMP_LOCATION, prepareExecutable, removeEquinoxFragmentOnDarwinX64, startedFromSources } from './javaServerStarter'; +import { loadSupportedJreNames } from './jdkUtils'; import { initializeLogFile, logger } from './log'; import { cleanupLombokCache } from "./lombokSupport"; import { markdownPreviewProvider } from "./markdownPreviewProvider"; import { OutputInfoCollector } from './outputInfoCollector'; +import { pasteFile } from './pasteAction'; import { collectJavaExtensions, getBundlesToReload, getShortcuts, IJavaShortcut, isContributedPartUpdated } from './plugin'; +import { Deferred } from './promiseUtil'; import { fixJdtSchemeHoverLinks, registerClientProviders } from './providerDispatcher'; import * as requirements from './requirements'; import { languageStatusBarProvider } from './runtimeStatusBarProvider'; +import { ServerStatusKind } from './serverStatus'; import { serverStatusBarProvider, ShortcutQuickPickItem } from './serverStatusBarProvider'; -import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getJavaServerMode, handleTextDocumentChanges, getImportMode, onConfigurationChange, ServerMode, ImportMode } from './settings'; +import { activationProgressNotification } from "./serverTaskPresenter"; +import { ACTIVE_BUILD_TOOL_STATE, cleanWorkspaceFileName, getImportMode, getJavaServerMode, handleTextDocumentChanges, ImportMode, onConfigurationChange, ServerMode } from './settings'; import { snippetCompletionProvider } from './snippetCompletionProvider'; -import { JavaClassEditorProvider } from './javaClassEditor'; import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; -import { convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, hasBuildToolConflicts, resolveActualCause, getVersion, cleanJavaLSConfiguration } from './utils'; -import glob = require('glob'); import { Telemetry } from './telemetry'; -import { getMessage } from './errorUtils'; -import { activationProgressNotification } from "./serverTaskPresenter"; -import { loadSupportedJreNames } from './jdkUtils'; -import { BuildFileSelector, PICKED_BUILD_FILES, cleanupWorkspaceState } from './buildFilesSelector'; -import { pasteFile } from './pasteAction'; -import { ServerStatusKind } from './serverStatus'; -import { TelemetryService } from '@redhat-developer/vscode-redhat-telemetry/lib/node'; -import { Deferred } from './promiseUtil'; -import { Dashboard } from './dashboard/dashboard'; +import { cleanJavaLSConfiguration, convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, getVersion, hasBuildToolConflicts, resolveActualCause } from './utils'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -917,52 +916,51 @@ export function getWorkspacePath() { return computeWorkspacePath(storagePath); } -function openRollingServerLogFile(storagePath, filename, column: ViewColumn = ViewColumn.Active): Thenable { - return new Promise((resolve) => { - const workspacePath = computeWorkspacePath(storagePath); - const dirname = path.join(workspacePath, '.metadata'); +async function openRollingServerLogFile(storagePath, filename, column: ViewColumn = ViewColumn.Active): Promise { + const workspacePath = computeWorkspacePath(storagePath); + const dirname = path.join(workspacePath, '.metadata'); + try { // find out the newest one - glob(`${filename}-*`, { cwd: dirname }, (err, files) => { - if (!err && files.length > 0) { - files.sort(); + const files = await glob(`${filename}-*`, { cwd: dirname }); + if (files.length > 0) { + files.sort(); - const logFile = path.join(dirname, files[files.length - 1]); - openLogFile(logFile, `Could not open Java Language Server log file ${filename}`, column).then((result) => resolve(result)); - } else { - resolve(false); - } - }); - }); + const logFile = path.join(dirname, files[files.length - 1]); + return await openLogFile(logFile, `Could not open Java Language Server log file ${filename}`, column); + } + } catch (err) { + console.error("Error opening rolling server log file", err); + } + return false; } -function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Active): Thenable { - return new Promise((resolve) => { - const filename = path.basename(logFile); - const dirname = path.dirname(logFile); +async function openClientLogFile(logFile: string, column: ViewColumn = ViewColumn.Active): Promise { + const filename = path.basename(logFile); + const dirname = path.dirname(logFile); + try { // find out the newest one - glob(`${filename}.*`, { cwd: dirname }, (err, files) => { - if (!err && files.length > 0) { - files.sort((a, b) => { - const dateA = a.slice(11, 21), dateB = b.slice(11, 21); - if (dateA === dateB) { - if (a.length > 22 && b.length > 22) { - const extA = a.slice(22), extB = b.slice(22); - return parseInt(extA) - parseInt(extB); - } else { - return a.length - b.length; - } - } else { - return dateA < dateB ? -1 : 1; + const files = await glob(`${filename}.*`, { cwd: dirname }); + if (files.length > 0) { + files.sort((a, b) => { + const dateA = a.slice(11, 21), dateB = b.slice(11, 21); + if (dateA === dateB) { + if (a.length > 22 && b.length > 22) { + const extA = a.slice(22), extB = b.slice(22); + return parseInt(extA) - parseInt(extB); } - }); - logFile = path.join(dirname, files[files.length - 1]); - } + return a.length - b.length; + } + return dateA < dateB ? -1 : 1; + }); + logFile = path.join(dirname, files[files.length - 1]); + } - openLogFile(logFile, 'Could not open Java extension log file', column).then((result) => resolve(result)); - }); - }); + } catch (err) { + console.error("Error opening client log file", err); + } + return await openLogFile(logFile, 'Could not open Java extension log file', column); } async function openLogs() { @@ -1214,7 +1212,8 @@ async function cleanJavaWorkspaceStorage() { // find all folders of the form "redhat.java/jdt_ws/" and delete "redhat.java/" if (fs.existsSync(wsRoot)) { - new glob.Glob(`${wsRoot}/**/jdt_ws`, (_err, matches) => { + try { + const matches = await glob(`${wsRoot}/**/jdt_ws`); for (const javaWSCache of matches) { const entry = path.dirname(javaWSCache); const entryModTime = fs.statSync(entry).mtimeMs; @@ -1223,7 +1222,9 @@ async function cleanJavaWorkspaceStorage() { deleteDirectory(entry); } } - }); + } catch (err) { + logger.error('Error cleaning workspace storage:', err); + } } } diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 5bfaa24b0..bb517f509 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -1,7 +1,7 @@ import * as fs from 'fs'; import * as fse from 'fs-extra'; -import * as glob from 'glob'; +import { globSync } from 'glob'; import * as net from 'net'; import * as os from 'os'; import * as path from 'path'; @@ -12,7 +12,6 @@ import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion, getVSCodeVariablesMap } from './utils'; -import { log } from 'console'; // eslint-disable-next-line no-var declare var v8debug; @@ -263,7 +262,7 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E } const serverHome: string = process.env.JDT_LS_PATH || path.resolve(__dirname, '../server'); - const launchersFound: Array = glob.sync('**/plugins/org.eclipse.equinox.launcher_*.jar', { cwd: serverHome }); + const launchersFound: Array = globSync('**/plugins/org.eclipse.equinox.launcher_*.jar', { cwd: serverHome }); if (launchersFound.length) { params.push('-jar'); params.push(path.resolve(serverHome, launchersFound[0])); } else { @@ -399,7 +398,7 @@ export function parseVMargs(params: any[], vmargsLine: string) { export function removeEquinoxFragmentOnDarwinX64(context: ExtensionContext) { // https://github.com/redhat-developer/vscode-java/issues/3484 const extensionPath = context.extensionPath; - const matches = new glob.GlobSync(`${extensionPath}/server/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64*.jar`).found; + const matches = globSync(`${extensionPath}/server/plugins/org.eclipse.equinox.launcher.cocoa.macosx.x86_64*.jar`); for (const fragment of matches) { fse.removeSync(fragment); logger.info(`Removing Equinox launcher fragment : ${fragment}`); diff --git a/src/webview/changeSignature/App.tsx b/src/webview/changeSignature/App.tsx index 217075521..1531efeda 100644 --- a/src/webview/changeSignature/App.tsx +++ b/src/webview/changeSignature/App.tsx @@ -4,7 +4,7 @@ import { VSCodeButton, VSCodeTextField, VSCodeDropdown, VSCodeOption, VSCodeChec import "./App.css"; import React from "react"; import { vscode } from "../vscodeApiWrapper"; -import _ from "lodash"; +import cloneDeep from "lodash/cloneDeep"; type State = UIState & Metadata; @@ -132,8 +132,8 @@ export class App extends React.Component<{}, State> { accessType: this.initialMetadata.accessType, methodName: this.initialMetadata.methodName, returnType: this.initialMetadata.returnType, - parameters: _.cloneDeep(this.initialMetadata.parameters), - exceptions: _.cloneDeep(this.initialMetadata.exceptions), + parameters: cloneDeep(this.initialMetadata.parameters), + exceptions: cloneDeep(this.initialMetadata.exceptions), focusRow: -1, editParameterRow: -1, editExceptionRow: -1, @@ -354,8 +354,8 @@ export class App extends React.Component<{}, State> { accessType: this.initialMetadata.accessType, methodName: this.initialMetadata.methodName, returnType: this.initialMetadata.returnType, - parameters: _.cloneDeep(this.initialMetadata.parameters), - exceptions: _.cloneDeep(this.initialMetadata.exceptions), + parameters: cloneDeep(this.initialMetadata.parameters), + exceptions: cloneDeep(this.initialMetadata.exceptions), }); } }; diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 6f15765ba..924c34919 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -2,10 +2,12 @@ import * as assert from 'assert'; import * as vscode from 'vscode'; import { extensions } from 'vscode'; import { Commands } from '../../src/commands'; +import { getJavaConfiguration } from '../../src/utils'; suite('Java Language Extension - LightWeight', () => { suiteSetup(async function() { + getJavaConfiguration().update('server.launchMode', 'LightWeight'); await extensions.getExtension('redhat.java').activate(); }); diff --git a/test/lightweight-mode-suite/index.ts b/test/lightweight-mode-suite/index.ts index b04cc328f..a32edaa0c 100644 --- a/test/lightweight-mode-suite/index.ts +++ b/test/lightweight-mode-suite/index.ts @@ -12,24 +12,32 @@ import * as path from 'path'; import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import { glob } from 'glob'; -export function run(testsRoot: string): Promise { +export async function run(testsRoot: string): Promise { const mocha = new Mocha({ ui: 'tdd', useColors: true, timeout: 1 * 60 * 1000, /* ms*/ }); - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); + try { + const files = await glob('**/**.test.js', { cwd: testsRoot }); + // make sure publicApi.test.ts is added last + files.sort((a, b) => { + if (a === 'publicApi.test.ts') { + return 1; } + return -1; + }); + // Add files to the test suite + files.forEach(f => { + const filePath = path.resolve(testsRoot, f); + console.log("Adding file", filePath); + mocha.addFile(filePath); + }); - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); - + return new Promise((c, e) => { try { // Run the mocha test mocha.run(failures => { @@ -43,5 +51,7 @@ export function run(testsRoot: string): Promise { e(err); } }); - }); + } catch (err) { + throw err; + } } diff --git a/test/runtest.ts b/test/runtest.ts index 17f806587..7f264237e 100644 --- a/test/runtest.ts +++ b/test/runtest.ts @@ -10,20 +10,21 @@ async function main() { // The folder containing the Extension Manifest package.json // Passed to `--extensionDevelopmentPath` const extensionDevelopmentPath = path.resolve(__dirname, '../..'); - - // run tests for standard mode await fse.copy(testProjectOriginPath, testProjectPath); await fse.ensureDir(path.join(testProjectPath, '.vscode')); + + // run tests for lightweight mode + console.log("setup settings.json for lightweight mode..."); /* eslint-disable @typescript-eslint/naming-convention */ await fse.writeJSON(settingsJsonPath, { - "java.server.launchMode": "Standard", - "java.configuration.updateBuildConfiguration": "automatic" + "java.server.launchMode": "LightWeight", }); - /* eslint-enable @typescript-eslint/naming-convention */ + console.log("running lightweight cases..."); + /* eslint-enable @typescript-eslint/naming-convention */ await runTests({ extensionDevelopmentPath, - extensionTestsPath: path.resolve(__dirname, './standard-mode-suite'), + extensionTestsPath: path.resolve(__dirname, './lightweight-mode-suite'), launchArgs: [ testProjectPath, '--disable-extensions', @@ -31,24 +32,29 @@ async function main() { ] }); - // run tests for lightweight mode - console.log("setup settings.json for lightweight mode..."); + + // run tests for standard mode + + console.log("setup settings.json for standard mode..."); /* eslint-disable @typescript-eslint/naming-convention */ await fse.writeJSON(settingsJsonPath, { - "java.server.launchMode": "LightWeight", + "java.server.launchMode": "Standard", + "java.configuration.updateBuildConfiguration": "automatic" }); - /* eslint-enable @typescript-eslint/naming-convention */ - console.log("running lightweight cases..."); + console.log("running standard cases..."); + /* eslint-enable @typescript-eslint/naming-convention */ await runTests({ extensionDevelopmentPath, - extensionTestsPath: path.resolve(__dirname, './lightweight-mode-suite'), + extensionTestsPath: path.resolve(__dirname, './standard-mode-suite'), launchArgs: [ testProjectPath, '--disable-extensions', '--disable-workspace-trust' ] }); + + } catch (err) { console.error(`Failed to run tests: ${err}`); process.exit(1); diff --git a/test/standard-mode-suite/index.ts b/test/standard-mode-suite/index.ts index b04cc328f..479c5eedf 100644 --- a/test/standard-mode-suite/index.ts +++ b/test/standard-mode-suite/index.ts @@ -12,24 +12,21 @@ import * as path from 'path'; import * as Mocha from 'mocha'; -import * as glob from 'glob'; +import { glob } from 'glob'; -export function run(testsRoot: string): Promise { +export async function run(testsRoot: string): Promise { const mocha = new Mocha({ ui: 'tdd', useColors: true, timeout: 1 * 60 * 1000, /* ms*/ }); - return new Promise((c, e) => { - glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { - if (err) { - return e(err); - } - - // Add files to the test suite - files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + try { + const files = await glob('**/**.test.js', { cwd: testsRoot }); + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + return new Promise((c, e) => { try { // Run the mocha test mocha.run(failures => { @@ -43,5 +40,7 @@ export function run(testsRoot: string): Promise { e(err); } }); - }); + } catch (err) { + throw err; + } } From 25370d72949d166e6e9472d28911dcb8b6e984bd Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 13 Oct 2025 18:59:55 +0200 Subject: [PATCH 616/708] chore: report all errors for pre-releases or when running in Insiders Signed-off-by: Fred Bricon --- package-lock.json | 8 ++++---- package.json | 2 +- src/javaServerStarter.ts | 9 +++------ src/standardLanguageClient.ts | 4 ++-- src/utils.ts | 31 ++++++++++++++++++++++++++++++- 5 files changed, 40 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 518edc152..7a7feab5a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.2", + "@redhat-developer/vscode-redhat-telemetry": "0.10.2", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", @@ -423,9 +423,9 @@ "integrity": "sha512-ecJcUShveU2qFPvp/h/YaICRATQQAZarCQ+MApZmqWD1OC9ultnDHsSgqX2ircBX3d2Ni5mqRbKf+LlHQEFhKA==" }, "node_modules/@redhat-developer/vscode-redhat-telemetry": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.9.2.tgz", - "integrity": "sha512-Z321mYKwjX6bVXZ5f50G07swF75B6RlSyAjhyHBYeTHJWLtYbmT1fS44FVpHzBKSlS876Xhir2zp+2FM+04/nA==", + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@redhat-developer/vscode-redhat-telemetry/-/vscode-redhat-telemetry-0.10.2.tgz", + "integrity": "sha512-bkrwQN3J+VXbyk5fd173ezUq/uQxJuO2Sp1CXUwGmxf8KExFbCMUaTdXeJPdoFVMtY4sA5wyJ5EZNTtltSMiDQ==", "license": "Apache-2.0", "dependencies": { "@segment/analytics-node": "2.3.0", diff --git a/package.json b/package.json index 0bde06fdd..4249407bb 100644 --- a/package.json +++ b/package.json @@ -2048,7 +2048,7 @@ }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", - "@redhat-developer/vscode-redhat-telemetry": "^0.9.2", + "@redhat-developer/vscode-redhat-telemetry": "0.10.2", "@vscode/codicons": "^0.0.32", "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index bb517f509..5e5cbed6f 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -11,8 +11,7 @@ import { logger } from './log'; import { addLombokParam, isLombokSupportEnabled } from './lombokSupport'; import { RequirementsData } from './requirements'; import { IS_WORKSPACE_VMARGS_ALLOWED, getJavaEncoding, getJavaagentFlag, getKey, isInWorkspaceFolder } from './settings'; -import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion, getVSCodeVariablesMap } from './utils'; - +import { deleteDirectory, ensureExists, getJavaConfiguration, getTimestamp, getVersion, getVSCodeVariablesMap, isInsiderEditor, isPrereleaseOrInsiderVersion } from './utils'; // eslint-disable-next-line no-var declare var v8debug; export const DEBUG = (typeof v8debug === 'object') || startedInDebugMode(); @@ -237,12 +236,10 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E } const hasJDWP = params.find((param: string) => param.includes('jdwp')) !== undefined; - const isInsider: boolean = version.includes("insider"); const extVersion = getVersion(context.extensionPath); - const isPreReleaseVersion = /^\d+\.\d+\.\d{10}/.test(extVersion); const globalStoragePath = path.resolve(context.globalStorageUri?.fsPath, extVersion); // .../Code/User/globalStorage/redhat.java/1.42.0/ const appCDSMode = workspace.getConfiguration().get('java.jdt.ls.appcds.enabled'); - const useAppCDS = (appCDSMode === 'on') || (appCDSMode === 'auto' && (isInsider || isPreReleaseVersion)); + const useAppCDS = (appCDSMode === 'on') || (appCDSMode === 'auto' && (isPrereleaseOrInsiderVersion(context))); ensureExists(globalStoragePath); const sharedArchiveLocation = path.join(globalStoragePath, "jdtls.jsa"); @@ -290,7 +287,7 @@ function prepareParams(requirements: RequirementsData, workspacePath, context: E function resolveIndexCache(context: ExtensionContext) { let enabled: string = getJavaConfiguration().get("sharedIndexes.enabled"); if (enabled === "auto") { - enabled = version.includes("insider") ? "on" : "off"; + enabled = isInsiderEditor() ? "on" : "off"; } if (enabled !== "on") { diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index bb0ca1335..338a5d849 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -34,7 +34,7 @@ import { askForProjects, projectConfigurationUpdate, upgradeGradle } from "./sta import { TracingLanguageClient } from './TracingLanguageClient'; import { TypeHierarchyDirection, TypeHierarchyItem } from "./typeHierarchy/protocol"; import { typeHierarchyTree } from "./typeHierarchy/typeHierarchyTree"; -import { getAllJavaProjects, getAllProjects, getJavaConfiguration } from "./utils"; +import { getAllJavaProjects, getAllProjects, getJavaConfiguration, isPrereleaseOrInsiderVersion } from "./utils"; import { Telemetry } from "./telemetry"; import { TelemetryEvent } from "@redhat-developer/vscode-redhat-telemetry/lib"; import { registerDocumentValidationListener } from './diagnostic'; @@ -355,7 +355,7 @@ export class StandardLanguageClient { } } - if (tags.length > 0) { + if (tags.length > 0 || DEBUG || isPrereleaseOrInsiderVersion(context)) { e.properties['tags'] = tags; return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); } diff --git a/src/utils.ts b/src/utils.ts index 989f3ab24..8e3972c25 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -234,7 +234,7 @@ export async function getJavaConfig(javaHome: string) { javaConfig.format.tabSize = editorConfig.get('tabSize'); const filesConfig = workspace.getConfiguration('files'); javaConfig.associations = filesConfig.get('associations'); - const isInsider: boolean = version.includes("insider"); + const isInsider: boolean = isInsiderEditor(); const androidSupport = javaConfig.jdt.ls.androidSupport.enabled; switch (androidSupport) { case "auto": @@ -362,3 +362,32 @@ export function getVSCodeVariablesMap(): any { keys.forEach(key => res[key] = vscodeVariables(`\${${key}}`)); return res; } + +/** + * Check if the extension version is a pre-release version or running an insider editor. + * @param context The extension context or extension path + * @returns true if the version is a pre-release version or running an insider editor + */ +export function isPrereleaseOrInsiderVersion(context: ExtensionContext | string): boolean { + return isInsiderEditor() || isPreReleaseVersion(context); +} + +/** + * Check if the extension version is a pre-release version. + * Pre-release versions follow the pattern: major.minor.timestamp (e.g., 1.47.1234567890) + * @param context The extension context or extension path + * @returns true if the version is a pre-release version + */ +export function isPreReleaseVersion(context: ExtensionContext | string): boolean { + const extensionPath = typeof context === 'string' ? context : context.extensionPath; + const extVersion = getVersion(extensionPath); + return /^\d+\.\d+\.\d{10}/.test(extVersion); +} + +/** + * Check if the editor is an insider release. + * @returns true if the editor is an insider release + */ +export function isInsiderEditor(): boolean { + return version.includes("insider"); +} From 8dd2aa511fbc113f1017f2d389c7b187ce0a46e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Fri, 24 Oct 2025 19:42:37 +0200 Subject: [PATCH 617/708] Add more telemetry for project import & workspaces hash (#4177) --- src/standardLanguageClient.ts | 47 ++++++++++++++++++++++++--- src/telemetry.ts | 60 +++++++---------------------------- src/utils.ts | 19 +++++++++++ 3 files changed, 74 insertions(+), 52 deletions(-) diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 338a5d849..82eceabef 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -2,8 +2,8 @@ import * as net from 'net'; import * as path from 'path'; -import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace } from "vscode"; -import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, StaticFeature, ClientCapabilities, FeatureState } from "vscode-languageclient"; +import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from "vscode"; +import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, StaticFeature, ClientCapabilities, FeatureState, TelemetryEventNotification } from "vscode-languageclient"; import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; @@ -336,10 +336,49 @@ export class StandardLanguageClient { return result; }); + function getJavaSettingsForTelemetry(config: WorkspaceConfiguration) { + // settings whose values we can record + const SETTINGS_BASIC = [ + "java.quickfix.showAt", "java.symbols.includeSourceMethodDeclarations", + "java.completion.collapseCompletionItems", "java.completion.guessMethodArguments", + "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", + "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", + "java.inlayHints.parameterNames.suppressWhenSameNameNumbered", + "java.inlayHints.variableTypes.enabled", + "java.inlayHints.parameterTypes.enabled", + "java.server.launchMode", "java.autobuild.enabled" + ]; + + // settings where we only record their existence + const SETTINGS_CUSTOM = [ + "java.settings.url", "java.format.settings.url" + ]; + + let value: any; + const properties = {}; + + for (const key of SETTINGS_CUSTOM) { + if (config.get(key)) { + properties[key] = true; + } + } + for (const key of SETTINGS_BASIC) { + value = config.get(key); + if (value !== undefined) { + properties[key] = value; + } + } + + return properties; + } + this.languageClient.onTelemetry(async (e: TelemetryEvent) => { apiManager.fireTraceEvent(e); if (e.name === Telemetry.SERVER_INITIALIZED_EVT) { - return Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, e.properties); + const javaSettings = getJavaSettingsForTelemetry(workspace.getConfiguration()); + + const properties= { ...e.properties, ...javaSettings }; + await Telemetry.sendTelemetry(Telemetry.STARTUP_EVT, properties); } else if (e.name === Telemetry.LS_ERROR) { const tags = []; const exception: string = e?.properties.exception; @@ -357,7 +396,7 @@ export class StandardLanguageClient { if (tags.length > 0 || DEBUG || isPrereleaseOrInsiderVersion(context)) { e.properties['tags'] = tags; - return Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); + await Telemetry.sendTelemetry(Telemetry.LS_ERROR, e.properties); } } }); diff --git a/src/telemetry.ts b/src/telemetry.ts index 89796a5ff..382b4c940 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -1,5 +1,6 @@ import { TelemetryService, getRedHatService } from "@redhat-developer/vscode-redhat-telemetry"; import { ExtensionContext, workspace, WorkspaceConfiguration } from "vscode"; +import { cyrb53 } from "./utils"; /** * Wrap vscode-redhat-telemetry to suit vscode-java @@ -10,7 +11,9 @@ export namespace Telemetry { export const COMPLETION_EVENT = "textCompletion"; export const SERVER_INITIALIZED_EVT = "java.workspace.initialized"; export const LS_ERROR = "java.ls.error"; + let telemetryManager: TelemetryService = null; + let workspaceHash; /** * Starts the telemetry service @@ -22,6 +25,10 @@ export namespace Telemetry { if (!!telemetryManager) { throw new Error("The telemetry service for vscode-java has already been started"); } + workspaceHash = cyrb53(workspace.workspaceFolders.map(f => f.uri.toString()).join('|')); + workspace.onDidChangeWorkspaceFolders(() => { + workspaceHash = cyrb53(workspace.workspaceFolders.map(f => f.uri.toString()).join('|')); + }); const redhatService = await getRedHatService(context); const telemService = await redhatService.getTelemetryService(); telemetryManager = telemService; @@ -35,58 +42,15 @@ export namespace Telemetry { * @param data the telemetry data * @throws Error if the telemetry service has not been started yet */ - export async function sendTelemetry(eventName: string, data?: any): Promise { + export async function sendTelemetry(eventName: string, data?: object): Promise { if (!telemetryManager) { throw new Error("The telemetry service for vscode-java has not been started yet"); } - const javaSettings = getJavaSettingsForTelemetry(workspace.getConfiguration()); - - let properties: any; - if (eventName === STARTUP_EVT) { - properties= { ...data, ...javaSettings }; - } else { - properties= { ...data}; - } - return telemetryManager.send({ + const event = { name: eventName, - properties - }); - } - - function getJavaSettingsForTelemetry(config: WorkspaceConfiguration) { - // settings whose values we can record - const SETTINGS_BASIC = [ - "java.quickfix.showAt", "java.symbols.includeSourceMethodDeclarations", - "java.completion.collapseCompletionItems", "java.completion.guessMethodArguments", - "java.cleanup.actionsOnSave", "java.completion.postfix.enabled", - "java.sharedIndexes.enabled", "java.inlayHints.parameterNames.enabled", - "java.inlayHints.parameterNames.suppressWhenSameNameNumbered", - "java.inlayHints.variableTypes.enabled", - "java.inlayHints.parameterTypes.enabled", - "java.server.launchMode", "java.autobuild.enabled" - ]; - - // settings where we only record their existence - const SETTINGS_CUSTOM = [ - "java.settings.url", "java.format.settings.url" - ]; - - let value: any; - const properties = {}; - - for (const key of SETTINGS_CUSTOM) { - if (config.get(key)) { - properties[key] = true; - } - } - for (const key of SETTINGS_BASIC) { - value = config.get(key); - if (value !== undefined) { - properties[key] = value; - } - } - - return properties; + properties: { workspaceHash, ...data} + }; + return telemetryManager.send(event); } } diff --git a/src/utils.ts b/src/utils.ts index 8e3972c25..02a0becd5 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -391,3 +391,22 @@ export function isPreReleaseVersion(context: ExtensionContext | string): boolean export function isInsiderEditor(): boolean { return version.includes("insider"); } +/* +* cyrb53 (c) 2018 bryc (github.com/bryc) +* Public domain (or MIT if needed). Attribution appreciated. +* A fast and simple 53-bit string hash function with decent collision resistance. +* Largely inspired by MurmurHash2/3, but with a focus on speed/simplicity. +*/ +export function cyrb53 (str, seed = 0) { + let h1 = 0xdeadbeef ^ seed, h2 = 0x41c6ce57 ^ seed; + for (let i = 0, ch; i < str.length; i++) { + ch = str.charCodeAt(i); + h1 = Math.imul(h1 ^ ch, 2654435761); + h2 = Math.imul(h2 ^ ch, 1597334677); + } + h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507); + h1 ^= Math.imul(h2 ^ (h2 >>> 13), 3266489909); + h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507); + h2 ^= Math.imul(h1 ^ (h1 >>> 13), 3266489909); + return 4294967296 * (2097151 & h2) + (h1 >>> 0); +}; From 8d6fb5e37af5bd4db764ee4b5c5779b0a4accfc5 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 29 Oct 2025 16:05:59 -0400 Subject: [PATCH 618/708] Changelog for 1.47.0 Signed-off-by: Roland Grunberg --- CHANGELOG.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ab2b744ec..3073037ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 1.47.0 (October 30th, 2025) + * enhancement - Add inlay hints for lambda parameter types and option to suppress for same-name numbered parameters. See [#4203](https://github.com/redhat-developer/vscode-java/pull/4203), [#4208](https://github.com/redhat-developer/vscode-java/pull/4208). + * enhancement - Improve detection and setup of `sourcePath` for Android support. See [JLS#3490](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3490). + * enhancement - Disable unused lambda parameter warning by default. See [#4216](https://github.com/redhat-developer/vscode-java/issues/4216). + * bug fix - Resolve poor formatting issues in Jupyter notebooks. See [#4207](https://github.com/redhat-developer/vscode-java/issues/4207). + * bug fix - Fix failure in "Create method" quick assist with parameterized arguments. See [#4138](https://github.com/redhat-developer/vscode-java/issues/4138). + * bug fix - Prevent incorrect postfix completions on import statements. See [#3364](https://github.com/redhat-developer/vscode-java/issues/3364). + * bug fix - Fix multiple `NullPointerException` reported by telemetry. See [JLS#3570](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3570). + * bug fix - Fix "Resource leak" false positives. See [#1349](https://github.com/redhat-developer/vscode-java/issues/1349). + * bug fix - Update flags for `javac` compiler support. See [#4198](https://github.com/redhat-developer/vscode-java/pull/4198). + * bug fix - Revert change that ignored null unchecked conversion warnings by default. See [JLS#3472](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3472). + * bug fix - Only call `prepareExecutable` for syntax server when needed. See [#4202](https://github.com/redhat-developer/vscode-java/issues/4202). + * bug fix - Allow partial configuration updates for `workspace/didChangeConfiguration`. See [JLS#3108](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3108). + * bug fix - Add CSP for "Change Signature" & "Java Dashboard" webviews. See [#4193](https://github.com/redhat-developer/vscode-java/issues/4193). + * buf fix - Report all errors for pre-releases or when running in Insiders. See [#4210](https://github.com/redhat-developer/vscode-java/pull/4210). + * bug fix - Provide more comprehensive error telemetry, and include workspace identifier. See [JLS#3566](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3566), [#4175](https://github.com/redhat-developer/vscode-java/issues/4175). + * dependency - Bump `vscode-redhat-telemetry` to 0.9.2. See [#4195](https://github.com/redhat-developer/vscode-java/pull/4195). + * dependency - Update target platform to Eclipse 2025-09 (4.37) release. See [JLS#3530](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3530). + * build - Remove `gulp` and other vulnerable dependencies. See [#4199](https://github.com/redhat-developer/vscode-java/pull/4199). + ## 1.46.0 (October 2nd, 2025) * performance - Cleaning workspace should also delete configuration folder. See [#4157](https://github.com/redhat-developer/vscode-java/issues/4157). * performance - Improve Null Analysis by reducing & deferring expensive calls. See [JLS#3531](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3531). From c73f94401009cb1ec5d6dcda7d4ad6454e9add00 Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Thu, 30 Oct 2025 13:50:29 -0400 Subject: [PATCH 619/708] Upversion to 1.48.0 Signed-off-by: Roland Grunberg --- README.md | 3 --- package-lock.json | 4 ++-- package.json | 4 ++-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 4ef2df5bd..be5dcee30 100644 --- a/README.md +++ b/README.md @@ -260,9 +260,6 @@ The following settings are supported: * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. -New in 1.47.0 -* `java.inlayHints.parameterTypes.enabled`: Enable/disable inlay hints for (lambda) parameter types. Defaults to `false`. - Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package-lock.json b/package-lock.json index 7a7feab5a..dbe0b8958 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.47.0", + "version": "1.48.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.47.0", + "version": "1.48.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 4249407bb..5238c1c1c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.47.0", + "version": "1.48.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -2072,4 +2072,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 97f8cb2a6da1b99cdc4b78205bc547e25eea09f9 Mon Sep 17 00:00:00 2001 From: Nicolas Leduc Date: Wed, 5 Nov 2025 15:37:31 -0500 Subject: [PATCH 620/708] Fix bug#4226 : auto-detection of JDK Use the JDK found with jdk-utils if the embedded JDK does not meet the requirement --- src/requirements.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/requirements.ts b/src/requirements.ts index 3eefeac1e..cedb881ba 100644 --- a/src/requirements.ts +++ b/src/requirements.ts @@ -42,6 +42,10 @@ export async function resolveRequirements(context: ExtensionContext): Promise r.version.major >= REQUIRED_JDK_VERSION); if (validJdks.length > 0) { sortJdksBySource(validJdks); - javaHome = validJdks[0].homedir; - javaVersion = validJdks[0].version.major; - toolingJre = javaHome; - toolingJreVersion = javaVersion; + toolingJre = validJdks[0].homedir; + toolingJreVersion = validJdks[0].version.major; + if (!javaHome) { // keep javaHome if set even if it is an older JDK version + javaHome = toolingJre; + javaVersion = toolingJreVersion; + } } } else { // pick a default project JDK/JRE /** From 3dc0fbf0eae500c1e5e2de8f53a35f5a87b58757 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Oct 2025 18:31:50 +0000 Subject: [PATCH 621/708] Bump tar from 7.5.1 to 7.5.2 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.1 to 7.5.2. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.1...v7.5.2) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 10 +++++----- package.json | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index dbe0b8958..d338ad2d9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.1", + "tar": "^7.5.2", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -5068,11 +5068,11 @@ } }, "node_modules/tar": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.1.tgz", - "integrity": "sha512-nlGpxf+hv0v7GkWBK2V9spgactGOp0qvfWRxUMjqHyzrt3SgwE48DIv/FhqPHJYLHpgW1opq3nERbz5Anq7n1g==", + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", + "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", diff --git a/package.json b/package.json index 5238c1c1c..a99908c88 100644 --- a/package.json +++ b/package.json @@ -2040,7 +2040,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.1", + "tar": "^7.5.2", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", From b8b83b388147900703377c4a34eedb02476e2d74 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Mon, 10 Nov 2025 13:16:14 +0100 Subject: [PATCH 622/708] Use 'pathToFileUrl' to compare file URLs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Thomas Mäder --- scripts/index.mjs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/index.mjs b/scripts/index.mjs index 0e25ccd81..ceb5f9c86 100644 --- a/scripts/index.mjs +++ b/scripts/index.mjs @@ -6,6 +6,7 @@ import { downloadServer, buildServer, buildOrDownload, devServer, watchServer } import { generateStandardTestFolder, generateLightweightTestFolder, cleanTestFolder } from './test.mjs'; import { preparePreRelease } from './release.mjs'; import { repoCheck, repoFix } from './repo.mjs'; +import { pathToFileURL } from 'url'; async function main() { const command = process.argv[2]; @@ -120,7 +121,7 @@ Examples: } } -if (import.meta.url === `file://${process.argv[1]}`) { +if (import.meta.url === pathToFileURL(process.argv[1]).toString()) { main().catch(console.error); } From c3fd1e06ea9be64b3d6be8429d15fd01ab3c8b07 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=A4der?= Date: Mon, 10 Nov 2025 17:37:27 +0100 Subject: [PATCH 623/708] Add command to add JDK to settings (#4162) --- package.json | 8 ++- package.nls.json | 3 +- src/commands.ts | 5 ++ src/extension.ts | 2 + src/javaRuntimes.ts | 69 +++++++++++++++++++ test/lightweight-mode-suite/extension.test.ts | 3 +- test/standard-mode-suite/extension.test.ts | 3 +- 7 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/javaRuntimes.ts diff --git a/package.json b/package.json index a99908c88..d72b98029 100644 --- a/package.json +++ b/package.json @@ -930,9 +930,6 @@ "name": { "type": "string", "enum": [ - "J2SE-1.5", - "JavaSE-1.6", - "JavaSE-1.7", "JavaSE-1.8", "JavaSE-9", "JavaSE-10", @@ -1794,6 +1791,11 @@ "category": "Java", "title": "Open Java Dashboard", "icon": "$(dashboard)" + }, + { + "command": "java.runtimes.add", + "title": "%java.runtimes.add%", + "category": "Java" } ], "keybindings": [ diff --git a/package.nls.json b/package.nls.json index 33307fcaa..2ac32d40a 100644 --- a/package.nls.json +++ b/package.nls.json @@ -29,5 +29,6 @@ "java.action.filesExplorerPasteAction": "Paste Clipboard Text Into a File", "java.action.doCleanup": "Performs Cleanup Actions", "java.change.searchScope": "Change Search Scope", - "java.action.showExtendedOutline": "Open Extended Outline" + "java.action.showExtendedOutline": "Open Extended Outline", + "java.runtimes.add": "Add Java Runtime" } diff --git a/src/commands.ts b/src/commands.ts index 11048b3f5..be87ca431 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -380,6 +380,11 @@ export namespace Commands { * Open Java Dashboard */ export const OPEN_JAVA_DASHBOARD = 'java.dashboard.open'; + + /** + * Add Java Runtime + */ + export const ADD_JAVA_RUNTIME = 'java.runtimes.add'; } /** diff --git a/src/extension.ts b/src/extension.ts index c12cf7f15..f3a7f5c73 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -44,6 +44,7 @@ import { StandardLanguageClient } from './standardLanguageClient'; import { SyntaxLanguageClient } from './syntaxLanguageClient'; import { Telemetry } from './telemetry'; import { cleanJavaLSConfiguration, convertToGlob, deleteClientLog, deleteDirectory, ensureExists, getBuildFilePatterns, getExclusionGlob, getInclusionPatternsFromNegatedExclusion, getJavaConfig, getJavaConfiguration, getVersion, hasBuildToolConflicts, resolveActualCause } from './utils'; +import { JavaRuntimes } from './javaRuntimes'; const syntaxClient: SyntaxLanguageClient = new SyntaxLanguageClient(); const standardClient: StandardLanguageClient = new StandardLanguageClient(); @@ -136,6 +137,7 @@ export async function activate(context: ExtensionContext): Promise Dashboard.initialize(context); await loadSupportedJreNames(context); + await JavaRuntimes.initialize(context); context.subscriptions.push(commands.registerCommand(Commands.FILESEXPLORER_ONPASTE, async () => { const originalClipboard = await env.clipboard.readText(); // Hack in order to get path to selected folder if applicable (see https://github.com/microsoft/vscode/issues/3553#issuecomment-1098562676) diff --git a/src/javaRuntimes.ts b/src/javaRuntimes.ts new file mode 100644 index 000000000..4301318d5 --- /dev/null +++ b/src/javaRuntimes.ts @@ -0,0 +1,69 @@ +import { getRuntime, IJavaRuntime } from "jdk-utils"; +import * as vscode from "vscode"; +import { getSupportedJreNames } from "./jdkUtils"; +import { Commands } from "./commands"; +import * as path from "path"; + + +export namespace JavaRuntimes { + function compatible(runtime: IJavaRuntime, jreName: string): boolean { + if (!runtime.version) { + return true; + } + const majorVersion = runtime.version.major; + if (majorVersion === 8) { + return jreName === 'JavaSE-1.8'; + } + const versionStrings = /[0-9]+/g.exec(jreName); + if (versionStrings && versionStrings.length > 0) { + return majorVersion >= parseInt(versionStrings[0]); + } + return false; + } + + export async function initialize(context: vscode.ExtensionContext): Promise { + context.subscriptions.push(vscode.commands.registerCommand(Commands.ADD_JAVA_RUNTIME, async () => { + const lastSelectedDirectory: vscode.Uri | undefined = context.workspaceState.get('java.runtimes.lastSelectedDirectory'); + const directory = await vscode.window.showOpenDialog({ + canSelectFiles: false, + canSelectFolders: true, + canSelectMany: false, + title: 'Select JDK Directory', + defaultUri: lastSelectedDirectory, + }); + if (directory) { + context.workspaceState.update('java.runtimes.lastSelectedDirectory', vscode.Uri.file(path.dirname(directory[0].fsPath))); + const runtime = await getRuntime(directory[0].fsPath, {withVersion: true}); + if (runtime) { + const config = vscode.workspace.getConfiguration('java.configuration').get('runtimes'); + if (Array.isArray(config)) { + const candidates = getSupportedJreNames().filter(name => compatible(runtime, name)).reverse(); + if (candidates.length > 0) { + const name = await vscode.window.showQuickPick(candidates, { + title: 'Select Java Runtime', + }); + if (name) { + const newConfig = { + name: name, + path: directory[0].fsPath, + }; + const index = config.findIndex(r => r.name === name); + if (index >= 0) { + config[index] = newConfig; + } else { + config.push(newConfig); + } + vscode.workspace.getConfiguration('java.configuration').update('runtimes', config, vscode.ConfigurationTarget.Global); + vscode.window.showInformationMessage(`JDK Directory ${directory[0].fsPath} added`); + } + } else { + vscode.window.showErrorMessage('No compatible environment available'); + } + } + } else { + vscode.window.showErrorMessage(`Invalid JDK Directory ${directory[0].fsPath}`); + } + } + })); + } +} \ No newline at end of file diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 924c34919..1c3f8e08a 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -29,7 +29,8 @@ suite('Java Language Extension - LightWeight', () => { Commands.RESTART_LANGUAGE_SERVER, Commands.FILESEXPLORER_ONPASTE, Commands.CHANGE_JAVA_SEARCH_SCOPE, - Commands.OPEN_JAVA_DASHBOARD + Commands.OPEN_JAVA_DASHBOARD, + Commands.ADD_JAVA_RUNTIME ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 807c11ed8..a1237467b 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -128,7 +128,8 @@ suite('Java Language Extension - Standard', () => { Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, Commands.CHANGE_JAVA_SEARCH_SCOPE, - Commands.OPEN_JAVA_DASHBOARD + Commands.OPEN_JAVA_DASHBOARD, + Commands.ADD_JAVA_RUNTIME ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); From 19e5b5a8f8447b3e5528344764055263ff6ca782 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 10 Nov 2025 18:48:38 +0100 Subject: [PATCH 624/708] fix: parsing lombok version error Signed-off-by: Fred Bricon --- src/lombokSupport.ts | 44 +++++++++++++++++++++++++++----------------- 1 file changed, 27 insertions(+), 17 deletions(-) diff --git a/src/lombokSupport.ts b/src/lombokSupport.ts index b77b64932..1ec595d56 100644 --- a/src/lombokSupport.ts +++ b/src/lombokSupport.ts @@ -67,22 +67,30 @@ function getExtensionLombokPath(context: ExtensionContext): string { return path.join(context.asAbsolutePath("lombok"), files[0]); } -function lombokPath2Version(lombokPath: string): string { - const lombokVersion = lombokJarRegex.exec(lombokPath)[0].split('.jar')[0]; +function lombokPath2Version(lombokPath: string): string | undefined { + const match = lombokJarRegex.exec(lombokPath); + if (!match) { + return undefined; + } + const lombokVersion = match[0].split('.jar')[0]; return lombokVersion; } -function lombokPath2VersionNumber(lombokPath: string): string { - const lombokVersionNumber = lombokPath2Version(lombokPath).split('-')[1]; +function lombokPath2VersionNumber(lombokPath: string): string | undefined { + const lombokVersion = lombokPath2Version(lombokPath); + if (!lombokVersion) { + return undefined; + } + const lombokVersionNumber = lombokVersion.split('-')[1]; return lombokVersionNumber; } -export function getLombokVersion(): string { - return lombokPath2Version(activeLombokPath); +export function getLombokVersion(): string | undefined { + return lombokPath2VersionNumber(activeLombokPath); } -function isCompatibleLombokVersion(currentVersion: string): boolean { - return semver.gte(currentVersion, compatibleVersion); +function isCompatibleLombokVersion(currentVersion: string | undefined): boolean { + return currentVersion && semver.gte(currentVersion, compatibleVersion); } export function addLombokParam(context: ExtensionContext, params: string[]) { @@ -102,12 +110,14 @@ export function addLombokParam(context: ExtensionContext, params: string[]) { isExtensionLombok = true; let lombokJarPath: string = context.workspaceState.get(JAVA_LOMBOK_PATH); if (lombokJarPath && fse.existsSync(lombokJarPath)) { - if (isCompatibleLombokVersion(lombokPath2VersionNumber(lombokJarPath))) { + const lombokVersion = lombokPath2VersionNumber(lombokJarPath); + if (lombokVersion && isCompatibleLombokVersion(lombokVersion)) { isExtensionLombok = false; } else { cleanupLombokCache(context); - logger.warn(`The project's Lombok version ${lombokPath2VersionNumber(lombokJarPath)} is not supported, Falling back to the built-in Lombok version ${lombokPath2VersionNumber(getExtensionLombokPath(context))}`); + const extensionLombokVersion = lombokPath2VersionNumber(getExtensionLombokPath(context)); + logger.warn(`The project's Lombok version ${lombokVersion || 'unknown'} is not supported, Falling back to the built-in Lombok version ${extensionLombokVersion || 'unknown'}`); } } if (isExtensionLombok) { @@ -197,11 +207,11 @@ export function registerLombokConfigureCommand(context: ExtensionContext) { const lombokPathItems = [ { label: isExtensionLombok? extensionItemLabelCheck : extensionItemLabel, - description: lombokPath2Version(extensionLombokPath) + description: `Lombok ${lombokPath2VersionNumber(extensionLombokPath) || 'unknown'}` }, { label: isExtensionLombok? projectItemLabel : projectItemLabelCheck, - description: lombokPath2Version(projectLombokPath), + description: `Lombok ${lombokPath2VersionNumber(projectLombokPath) || 'unknown'}`, detail: projectLombokPath } ]; @@ -222,7 +232,7 @@ export function registerLombokConfigureCommand(context: ExtensionContext) { if (isExtensionLombok) { const projectLombokVersion = lombokPath2VersionNumber(projectLombokPath); if (!isCompatibleLombokVersion(projectLombokVersion)) { - const msg = `The project's Lombok version ${projectLombokVersion} is not supported. Falling back to the built-in Lombok version in the extension.`; + const msg = `The project's Lombok version ${projectLombokVersion || 'unknown'} is not supported. Falling back to the built-in Lombok version in the extension.`; window.showWarningMessage(msg); return; } @@ -250,17 +260,17 @@ export function registerLombokConfigureCommand(context: ExtensionContext) { } export namespace LombokVersionItemFactory { - export function create(text: string): vscode.LanguageStatusItem { + export function create(version: string): vscode.LanguageStatusItem { const item = vscode.languages.createLanguageStatusItem("javaLombokVersionItem", languageServerDocumentSelector); item.severity = vscode.LanguageStatusSeverity?.Information; item.name = "Lombok Version"; - item.text = text; + update(item, version); item.command = getLombokChangeCommand(); return item; } - export function update(item: any, text: string): void { - item.text = text; + export function update(item: any, version: string | undefined): void { + item.text = `Lombok ${version || 'unknown'}`; } function getLombokChangeCommand(): vscode.Command { From 294ffefbb395d053bb7a4fb3e710b13cc11ec340 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 10 Nov 2025 17:54:39 +0100 Subject: [PATCH 625/708] fix: safeguard workspace hash computation in telemetry service Signed-off-by: Fred Bricon --- src/telemetry.ts | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/telemetry.ts b/src/telemetry.ts index 382b4c940..35f702603 100644 --- a/src/telemetry.ts +++ b/src/telemetry.ts @@ -25,9 +25,9 @@ export namespace Telemetry { if (!!telemetryManager) { throw new Error("The telemetry service for vscode-java has already been started"); } - workspaceHash = cyrb53(workspace.workspaceFolders.map(f => f.uri.toString()).join('|')); + workspaceHash = computeWorkspaceHash(); workspace.onDidChangeWorkspaceFolders(() => { - workspaceHash = cyrb53(workspace.workspaceFolders.map(f => f.uri.toString()).join('|')); + workspaceHash = computeWorkspaceHash(); }); const redhatService = await getRedHatService(context); const telemService = await redhatService.getTelemetryService(); @@ -35,6 +35,13 @@ export namespace Telemetry { return telemService; } + function computeWorkspaceHash(): number { + if (!workspace.workspaceFolders?.length) { + return 0; + } + return cyrb53(workspace.workspaceFolders.map(f => f.uri.toString()).join('|')); + } + /** * Send a telemetry event with the given name and data * From 99f4812e4663497e5ef2018d8393d060ee29879c Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 12 Nov 2025 13:01:17 +0100 Subject: [PATCH 626/708] add JSpecify annotations for null analysis --- package.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index d72b98029..14905f43b 100644 --- a/package.json +++ b/package.json @@ -859,7 +859,8 @@ "default": [ "javax.annotation.Nonnull", "org.eclipse.jdt.annotation.NonNull", - "org.springframework.lang.NonNull" + "org.springframework.lang.NonNull", + "org.jspecify.annotations.NonNull" ], "markdownDescription": "Specify the Nonnull annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" @@ -869,7 +870,8 @@ "default": [ "javax.annotation.Nullable", "org.eclipse.jdt.annotation.Nullable", - "org.springframework.lang.Nullable" + "org.springframework.lang.Nullable", + "org.jspecify.annotations.Nullable" ], "markdownDescription": "Specify the Nullable annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" @@ -879,7 +881,8 @@ "default": [ "javax.annotation.ParametersAreNonnullByDefault", "org.eclipse.jdt.annotation.NonNullByDefault", - "org.springframework.lang.NonNullApi" + "org.springframework.lang.NonNullApi", + "org.jspecify.annotations.NullMarked" ], "markdownDescription": "Specify the NonNullByDefault annotation types to be used for null analysis. If more than one annotation is specified, then the topmost annotation will be used first if it exists in project dependencies. This setting will be ignored if `java.compile.nullAnalysis.mode` is set to `disabled`", "scope": "window" From 3df18e83f8f2814ac63c8597b786844623d5bf9a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Nov 2025 16:55:54 +0000 Subject: [PATCH 627/708] Bump glob Bumps [glob](https://github.com/isaacs/node-glob) to 11.1.0 and updates ancestor dependency . These dependencies need to be updated together. Updates `glob` from 11.0.3 to 11.1.0 - [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md) - [Commits](https://github.com/isaacs/node-glob/compare/v11.0.3...v11.1.0) Updates `glob` from 10.4.5 to 10.5.0 - [Changelog](https://github.com/isaacs/node-glob/blob/main/changelog.md) - [Commits](https://github.com/isaacs/node-glob/compare/v11.0.3...v11.1.0) --- updated-dependencies: - dependency-name: glob dependency-version: 11.1.0 dependency-type: direct:production - dependency-name: glob dependency-version: 10.5.0 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 26 +++++++++++++------------- package.json | 2 +- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index d338ad2d9..eb36caec6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", - "glob": "^11.0.3", + "glob": "^11.1.0", "htmlparser2": "6.0.1", "jdk-utils": "^0.6.0", "react": "^17.0.2", @@ -2734,14 +2734,14 @@ "license": "MIT" }, "node_modules/glob": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.3.tgz", - "integrity": "sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==", - "license": "ISC", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "license": "BlueOak-1.0.0", "dependencies": { "foreground-child": "^3.3.1", "jackspeak": "^4.1.1", - "minimatch": "^10.0.3", + "minimatch": "^10.1.1", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^2.0.0" @@ -2799,10 +2799,10 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.3.tgz", - "integrity": "sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==", - "license": "ISC", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", + "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/brace-expansion": "^5.0.0" }, @@ -3816,9 +3816,9 @@ } }, "node_modules/mocha/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "dev": true, "license": "ISC", "dependencies": { diff --git a/package.json b/package.json index 14905f43b..bdec967cd 100644 --- a/package.json +++ b/package.json @@ -2060,7 +2060,7 @@ "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", "fs-extra": "^8.1.0", - "glob": "^11.0.3", + "glob": "^11.1.0", "htmlparser2": "6.0.1", "jdk-utils": "^0.6.0", "react": "^17.0.2", From 34126d81dfbd457044a9d7ae3f2b4d52dad06a34 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 10 Nov 2025 11:49:47 +0100 Subject: [PATCH 628/708] fix: use same indentation rules as JS/TS Signed-off-by: Fred Bricon --- .../java/language-configuration.json | 134 ++++++++++++++++++ src/extension.ts | 50 +------ 2 files changed, 135 insertions(+), 49 deletions(-) diff --git a/language-support/java/language-configuration.json b/language-support/java/language-configuration.json index 683d60232..90e2c5fec 100644 --- a/language-support/java/language-configuration.json +++ b/language-support/java/language-configuration.json @@ -88,5 +88,139 @@ "<", ">" ] + ], + "autoCloseBefore": ";:.,=}])>` \n\t", + "folding": { + "markers": { + "start": "^\\s*//\\s*#?region\\b", + "end": "^\\s*//\\s*#?endregion\\b" + } + }, + "wordPattern": { + "pattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)" + }, + "indentationRules": { + "decreaseIndentPattern": { + "pattern": "^((?!.*?\\/\\*).*\\*/)?\\s*[\\)\\}\\]].*$" + }, + "increaseIndentPattern": { + "pattern": "^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$" + }, + "unIndentedLinePattern": { + "pattern": "^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$|^(\\t|[ ])*[ ]\\*/\\s*$|^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$" + }, + "indentNextLinePattern": { + "pattern": "^((.*=>\\s*)|((.*[^\\w]+|\\s*)((if|while|for)\\s*\\(.*\\)\\s*|else\\s*)))$" + } + }, + "onEnterRules": [ + { + "beforeText": { + "pattern": "^\\s*/\\*\\*(?!/)([^\\*]|\\*(?!/))*$" + }, + "afterText": { + "pattern": "^\\s*\\*/$" + }, + "action": { + "indent": "indentOutdent", + "appendText": " * " + } + }, + { + "beforeText": { + "pattern": "^\\s*/\\*\\*(?!/)([^\\*]|\\*(?!/))*$" + }, + "action": { + "indent": "none", + "appendText": " * " + } + }, + { + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*([ ]([^\\*]|\\*(?!/))*)?$" + }, + "previousLineText": { + "pattern": "(?=^(\\s*(/\\*\\*|\\*)).*)(?=(?!(\\s*\\*/)))" + }, + "action": { + "indent": "none", + "appendText": "* " + } + }, + { + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*/\\s*$" + }, + "action": { + "indent": "none", + "removeText": 1 + } + }, + { + "beforeText": { + "pattern": "^(\\t|[ ])*[ ]\\*[^/]*\\*/\\s*$" + }, + "action": { + "indent": "none", + "removeText": 1 + } + }, + { + "beforeText": { + "pattern": "^\\s*(\\bcase\\s.+:|\\bdefault:)$" + }, + "afterText": { + "pattern": "^(?!\\s*(\\bcase\\b|\\bdefault\\b))" + }, + "action": { + "indent": "indent" + } + }, + { + "previousLineText": "^\\s*(((else ?)?if|for|while)\\s*\\(.*\\)\\s*|else\\s*)$", + "beforeText": "^\\s+([^{i\\s]|i(?!f\\b))", + "action": { + "indent": "outdent" + } + }, + { + "beforeText": "^.*\\([^\\)]*$", + "afterText": "^\\s*\\).*$", + "action": { + "indent": "indentOutdent", + "appendText": "\t" + } + }, + { + "beforeText": "^.*\\{[^\\}]*$", + "afterText": "^\\s*\\}.*$", + "action": { + "indent": "indentOutdent", + "appendText": "\t" + } + }, + { + "beforeText": "^.*\\[[^\\]]*$", + "afterText": "^\\s*\\].*$", + "action": { + "indent": "indentOutdent", + "appendText": "\t" + } + }, + { + "beforeText": "(? Telemetry.startTelemetry(context); - enableJavadocSymbols(); - registerOutOfMemoryDetection(storagePath); cleanJavaWorkspaceStorage(); @@ -816,52 +814,6 @@ export async function getActiveLanguageClient(): Promise\/\?\s]+)/g, - onEnterRules: [ - { - // e.g. /** | */ or /* | */ - beforeText: /^\s*\/\*\*?(?!\/)([^\*]|\*(?!\/))*$/, - afterText: /^\s*\*\/$/, - action: { indentAction: IndentAction.IndentOutdent, appendText: ' * ' } - }, - { - // e.g. /** ...| - beforeText: /^\s*\/\*\*(?!\/)([^\*]|\*(?!\/))*$/, - action: { indentAction: IndentAction.None, appendText: ' * ' } - }, - { - // e.g. * ...| - beforeText: /^(\t|(\ \ ))*\ \*(\ ([^\*]|\*(?!\/))*)?$/, - action: { indentAction: IndentAction.None, appendText: '* ' } - }, - { - // e.g. */| - beforeText: /^(\t|(\ \ ))*\ \*\/\s*$/, - action: { indentAction: IndentAction.None, removeText: 1 } - }, - { - // e.g. *-----*/| - beforeText: /^(\t|(\ \ ))*\ \*[^/]*\*\/\s*$/, - action: { indentAction: IndentAction.None, removeText: 1 } - }, - { - // e.g. /// ...| (Markdown javadoc) - beforeText: /^\s*\/\/\/(.*)?$/, - action: { indentAction: IndentAction.None, appendText: '/// ' } - } - ] - }); -} export function getTempWorkspace() { return path.resolve(os.tmpdir(), `vscodesws_${makeRandomHexString(5)}`); From cdf94220481fc81c64874b023a4510075ef6e652 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 15 Nov 2025 10:37:19 +0000 Subject: [PATCH 629/708] Bump js-yaml from 4.1.0 to 4.1.1 Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 4.1.0 to 4.1.1. - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/4.1.0...4.1.1) --- updated-dependencies: - dependency-name: js-yaml dependency-version: 4.1.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index eb36caec6..9308fc199 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3241,10 +3241,11 @@ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, From a6035818855fb9f0ba56dc993436d50a8e627dfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:40:33 +0000 Subject: [PATCH 630/708] Bump org.apache.commons:commons-lang3 Bumps org.apache.commons:commons-lang3 from 3.5 to 3.18.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-lang3 dependency-version: 3.18.0 dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- test/resources/projects/maven/salut-java11/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/resources/projects/maven/salut-java11/pom.xml b/test/resources/projects/maven/salut-java11/pom.xml index e5f845376..b57ccc6c0 100644 --- a/test/resources/projects/maven/salut-java11/pom.xml +++ b/test/resources/projects/maven/salut-java11/pom.xml @@ -19,7 +19,7 @@ org.apache.commons commons-lang3 - 3.5 + 3.18.0 \ No newline at end of file From 4a0dc1d798f76d5adf7d59cdbb2b0c0e48867563 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 19 Nov 2025 10:50:24 +0100 Subject: [PATCH 631/708] chore: upversion to 1.49.0 Signed-off-by: Fred Bricon --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9308fc199..2889bbdb6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.48.0", + "version": "1.49.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.48.0", + "version": "1.49.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index bdec967cd..8e145d11a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.48.0", + "version": "1.49.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -1794,7 +1794,7 @@ "category": "Java", "title": "Open Java Dashboard", "icon": "$(dashboard)" - }, + }, { "command": "java.runtimes.add", "title": "%java.runtimes.add%", From 13f4a420b9f7d21d15b979f9737ba2f0a17580f1 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 19 Nov 2025 11:18:51 +0100 Subject: [PATCH 632/708] chore: Changelog for 1.49.0 Signed-off-by: Fred Bricon --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3073037ae..e77c7529a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,26 @@ # Change Log +## 1.49.0 (November 19th, 2025) + * performance - Avoid unnecessary Maven project rebuild when the window is reloaded. See [#4250](https://github.com/redhat-developer/vscode-java/issues/4250). + * performance - Prevent unnecessary Maven project rebuild when configuring test classpath flag. See [JLS#3590](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3590). + * enhancement - Add JSpecify annotations for null analysis. See [#4249](https://github.com/redhat-developer/vscode-java/pull/4249). + * enhancement - Improve code completion type for annotation attributes (now using `Field` kind). See [#3242](https://github.com/redhat-developer/vscode-java/issues/3242). + * enhancement - Use discovered, compatible JDK, if embedded JDK does not meet requirements. See [#4226](https://github.com/redhat-developer/vscode-java/issues/4226). + * enhancement - Command to add a JVM install. See [#4161](https://github.com/redhat-developer/vscode-java/issues/4161). + * bug fix - 1.48.0 only contains the universal version. See [4256](https://github.com/redhat-developer/vscode-java/issues/4256). + * bug fix - Fix indentation rules when a line is moved. See [#692](https://github.com/redhat-developer/vscode-java/issues/692). + * bug fix - Inner classes are now correctly shown/decompiled via Fernflower. See [JLS#2815](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2815). + * bug fix - Ensure accurate 'build finished' status by waiting for all background processes. See [#4230](https://github.com/redhat-developer/vscode-java/issues/4230). + * bug fix - Fix discrepency in annotation processing, between full and incremental builds. See [#2117](https://github.com/redhat-developer/vscode-java/issues/2117). + * bug fix - Suppress incorrect error logging related to content providers and decompiler checks. See [#3178](https://github.com/redhat-developer/vscode-java/issues/3178). + * bug fix - Ensure we correctly parse the Lombok version. See [#2765](https://github.com/redhat-developer/vscode-java/issues/2765). + * bug fix - Safeguard workspace hash computation in telemetry service. See [#4246](https://github.com/redhat-developer/vscode-java/pull/4246). + * dependencies - Bump glob to 11.1.0. See [#4255](https://github.com/redhat-developer/vscode-java/pull/4255). + * dependencies - Bump js-yaml from 4.1.0 to 4.1.1. See [#4252](https://github.com/redhat-developer/vscode-java/pull/4252). + * dependencies - Bump tar from 7.5.1 to 7.5.2. See [#4224](https://github.com/redhat-developer/vscode-java/pull/4224). + * dependencies - Bump org.apache.commons:commons-lang3 from 3.5 to 3.18.0 in /test/resources/projects/maven/salut-java11. See [#4243](https://github.com/redhat-developer/vscode-java/pull/4243). + * build - Fix `npm run build` on Windows. See [#4244](https://github.com/redhat-developer/vscode-java/issues/4244). + ## 1.47.0 (October 30th, 2025) * enhancement - Add inlay hints for lambda parameter types and option to suppress for same-name numbered parameters. See [#4203](https://github.com/redhat-developer/vscode-java/pull/4203), [#4208](https://github.com/redhat-developer/vscode-java/pull/4208). * enhancement - Improve detection and setup of `sourcePath` for Android support. See [JLS#3490](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3490). From 114980f83ef34f7085491a2c1350cfc86463836a Mon Sep 17 00:00:00 2001 From: Roland Grunberg Date: Wed, 19 Nov 2025 23:36:48 -0500 Subject: [PATCH 633/708] Upversion to 1.50.0 Signed-off-by: Roland Grunberg --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2889bbdb6..45098d4b9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.49.0", + "version": "1.50.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.49.0", + "version": "1.50.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 8e145d11a..e7cd2547c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.49.0", + "version": "1.50.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 5aeb018ca7a5ee848c08600fb879042282f10837 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 24 Nov 2025 11:24:30 -0500 Subject: [PATCH 634/708] Remove title for package.json schema contribution This title will compete with the title of the base schema in cases like highlight, and the title is nonsensical for package.json for things other than VS Code extensions. Fixes #4268 Signed-off-by: David Thompson --- schemas/package.schema.json | 1 - 1 file changed, 1 deletion(-) diff --git a/schemas/package.schema.json b/schemas/package.schema.json index a74bd2a10..53d17634c 100644 --- a/schemas/package.schema.json +++ b/schemas/package.schema.json @@ -1,6 +1,5 @@ { "$schema": "http://json-schema.org/draft-04/schema#", - "title": "Java Language server contributions to package.json", "type": "object", "properties": { "contributes": { From ee8bb39674aecfef44f46eddafee2553bd645754 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 21 Nov 2025 09:13:23 +0100 Subject: [PATCH 635/708] feat: add preference to disable returning Javadoc on hover Signed-off-by: Fred Bricon --- README.md | 3 +++ package.json | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/README.md b/README.md index be5dcee30..74024545e 100644 --- a/README.md +++ b/README.md @@ -260,6 +260,9 @@ The following settings are supported: * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. +New in 1.50.0 +* `java.hover.javadoc.enabled` : Enable/disable displaying Javadoc on hover. Defaults to `true`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index e7cd2547c..460a2bfa8 100644 --- a/package.json +++ b/package.json @@ -1424,6 +1424,13 @@ "title": "Code Navigation", "order": 120, "properties": { + "java.hover.javadoc.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable displaying Javadoc on hover.", + "scope": "window", + "order": 5 + }, "java.referencesCodeLens.enabled": { "type": "boolean", "default": false, From 0add7a60a0e42f279bdc50f1faffc93cbba62af8 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 25 Nov 2025 15:51:44 +0100 Subject: [PATCH 636/708] chore: changelog for 1.50.0 Signed-off-by: Fred Bricon --- CHANGELOG.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e77c7529a..3740d257b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,16 @@ # Change Log +## 1.50.0 (November 26th, 2025) + * enhancement - Add preference to disable returning Javadoc on hover. See [#1420](https://github.com/redhat-developer/vscode-java/issues/1420). + * enhancement - Adopt quick fixes for the following problems. See [JLS#3609](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3609). + - `UnusedMethodDeclaredThrownException`, + - `InvalidOperator`, + - `RedundantSpecificationOfTypeArguments` + * enhancement - Refresh codelens when updating preferences. See [JLS#3047](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3047). + * bug fix - Do not define title in package.json schema as it is shown in tooltip for all package.json files. See [#4268](https://github.com/redhat-developer/vscode-java/issues/4268). + * bug fix - Temporary rollback of junit bundles to fix JUnit 6 support. See [#4260](https://github.com/redhat-developer/vscode-java/issues/4260). + * bug fix - Fixed NPE thrown when computing Code Actions on invalid code. See [JLS#3602](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3602). + ## 1.49.0 (November 19th, 2025) * performance - Avoid unnecessary Maven project rebuild when the window is reloaded. See [#4250](https://github.com/redhat-developer/vscode-java/issues/4250). * performance - Prevent unnecessary Maven project rebuild when configuring test classpath flag. See [JLS#3590](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3590). From c7014730bcb07ee664eea2af34747613736a81ec Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 26 Nov 2025 18:11:41 +0100 Subject: [PATCH 637/708] chore: upversion to 1.51.0 Signed-off-by: Fred Bricon --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 45098d4b9..839ce83b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.50.0", + "version": "1.51.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.50.0", + "version": "1.51.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 460a2bfa8..d2a744a7d 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.50.0", + "version": "1.51.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 61b7ec6b79bbd6600ec6a7594abf9e3e586ab177 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 16 Dec 2025 10:44:44 -0500 Subject: [PATCH 638/708] CHANGELOG for 1.51.0 Signed-off-by: David Thompson --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3740d257b..950289884 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +## 1.51.0 (December 16th, 2025) + * enhancement - Add a quickfix to replace a deprecated field with one referenced in the docs. See [JLS#3626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3626). + * enhancement - Add a quickfix for "type safety warning" to infer type arguments. See [JLS#626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/626). + * bug fix - "Generate constructor" feature can now be used when the type has no fields. See [#4154](https://github.com/redhat-developer/vscode-java/issues/4154). + * bug fix - When viewing Javadoc through hover, any Javadoc with `{@literal}` tags now has proper newlines. See [#3758](https://github.com/redhat-developer/vscode-java/issues/3758). + * bug fix - Handle and tags placed in `{@literal}` properly in Javadoc hover. See [#1838](https://github.com/redhat-developer/vscode-java/issues/1838). + * bug fix - Fix how tables are displayed in Javadoc hover. See [#2465](https://github.com/redhat-developer/vscode-java/issues/2465). + * bug fix - Fix a bug in the quickfix that replaces a deprecated method with one refrenced in the docs. See [JLS#3638](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3638). + * dependencies - Address vulnerability in version of jsoup being used. See [#3859](https://github.com/redhat-developer/vscode-java/issues/3859). + ## 1.50.0 (November 26th, 2025) * enhancement - Add preference to disable returning Javadoc on hover. See [#1420](https://github.com/redhat-developer/vscode-java/issues/1420). * enhancement - Adopt quick fixes for the following problems. See [JLS#3609](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3609). From c27a08d6a3f9a28e5693d990caefbf2cc92f7933 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 16 Dec 2025 11:30:14 -0500 Subject: [PATCH 639/708] Update release date I'm new to the release process and didn't realize it's going to take two days. Signed-off-by: David Thompson --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 950289884..103e15ea4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.51.0 (December 16th, 2025) +## 1.51.0 (December 17th, 2025) * enhancement - Add a quickfix to replace a deprecated field with one referenced in the docs. See [JLS#3626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3626). * enhancement - Add a quickfix for "type safety warning" to infer type arguments. See [JLS#626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/626). * bug fix - "Generate constructor" feature can now be used when the type has no fields. See [#4154](https://github.com/redhat-developer/vscode-java/issues/4154). From c6f1f3a190bc4868927f837dacd683672905d9ce Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 19 Dec 2025 12:05:02 +0100 Subject: [PATCH 640/708] doc: update changelog as 1.51.0 is postponed to January 2026 Signed-off-by: Fred Bricon --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 103e15ea4..dd30aee2f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.51.0 (December 17th, 2025) +## 1.51.0 (TBD January 2026) * enhancement - Add a quickfix to replace a deprecated field with one referenced in the docs. See [JLS#3626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3626). * enhancement - Add a quickfix for "type safety warning" to infer type arguments. See [JLS#626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/626). * bug fix - "Generate constructor" feature can now be used when the type has no fields. See [#4154](https://github.com/redhat-developer/vscode-java/issues/4154). From 8ff74a2b1d7f5087e54e81d8dc7f5ff0a4e89314 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 6 Jan 2026 09:47:13 +0100 Subject: [PATCH 641/708] Changelog for 1.51.0 - take 2 Signed-off-by: Fred Bricon --- CHANGELOG.md | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dd30aee2f..38d492f6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,17 @@ # Change Log -## 1.51.0 (TBD January 2026) +## 1.51.0 (January 6th, 2026) * enhancement - Add a quickfix to replace a deprecated field with one referenced in the docs. See [JLS#3626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3626). * enhancement - Add a quickfix for "type safety warning" to infer type arguments. See [JLS#626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/626). * bug fix - "Generate constructor" feature can now be used when the type has no fields. See [#4154](https://github.com/redhat-developer/vscode-java/issues/4154). * bug fix - When viewing Javadoc through hover, any Javadoc with `{@literal}` tags now has proper newlines. See [#3758](https://github.com/redhat-developer/vscode-java/issues/3758). - * bug fix - Handle and tags placed in `{@literal}` properly in Javadoc hover. See [#1838](https://github.com/redhat-developer/vscode-java/issues/1838). + * bug fix - Handle tags placed in `{@literal}` properly in Javadoc hover. See [#1838](https://github.com/redhat-developer/vscode-java/issues/1838). * bug fix - Fix how tables are displayed in Javadoc hover. See [#2465](https://github.com/redhat-developer/vscode-java/issues/2465). - * bug fix - Fix a bug in the quickfix that replaces a deprecated method with one refrenced in the docs. See [JLS#3638](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3638). + * bug fix - Fix a bug in the quickfix that replaces a deprecated method with one referenced in the docs. See [JLS#3638](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3638). + * bug fix - Fix Move method refactoring causing syntax errors due to calling private fields. See [#3604](https://github.com/redhat-developer/vscode-java/issues/3604) + * bug fix - Fix Move method refactoring causing syntax errors due to dependency on internal classes. See [#3607](https://github.com/redhat-developer/vscode-java/issues/3607) + * bug fix - Fix formatting breaking fenced blocks in Markdown javadoc [4209](https://github.com/redhat-developer/vscode-java/issues/4209). + * bug fix - Ensure importers with the same order number are not dropped. See [JLS#3658](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3658). * dependencies - Address vulnerability in version of jsoup being used. See [#3859](https://github.com/redhat-developer/vscode-java/issues/3859). ## 1.50.0 (November 26th, 2025) From 788a76e59cc6c29400b5b958a5ff90f08ea31304 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 7 Jan 2026 10:35:51 +0100 Subject: [PATCH 642/708] chore: upversion to 1.52.0 Signed-off-by: Fred Bricon --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 839ce83b6..5d03e0776 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.51.0", + "version": "1.52.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.51.0", + "version": "1.52.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index d2a744a7d..933990c67 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.51.0", + "version": "1.52.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 603e87c489b2e0151e441a728879b9eca315f962 Mon Sep 17 00:00:00 2001 From: CookedMelon <88501646+CookedMelon@users.noreply.github.com> Date: Tue, 13 Jan 2026 18:28:13 +0800 Subject: [PATCH 643/708] Fix pasting a single line without selection --- src/pasteEventHandler.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/pasteEventHandler.ts b/src/pasteEventHandler.ts index 9606e19c2..c93cc0376 100644 --- a/src/pasteEventHandler.ts +++ b/src/pasteEventHandler.ts @@ -55,6 +55,7 @@ class PasteEditProvider implements DocumentPasteEditProvider { this.languageClient = languageClient; } + async prepareDocumentPaste?(document: TextDocument, _ranges: readonly Range[], dataTransfer: DataTransfer, _token: CancellationToken): Promise { const copiedContent: string = await dataTransfer.get(TEXT_MIMETYPE).asString(); if (copiedContent) { @@ -73,6 +74,13 @@ class PasteEditProvider implements DocumentPasteEditProvider { return null; } + const editorData = dataTransfer.get("vscode-editor-data")?.value; + const isSingleLineCopy = Boolean(editorData && JSON.parse(editorData).isFromEmptySelection); + const isFromSameDocument = this.copiedContent === insertText && this.copiedDocumentUri === document.uri.toString(); + if (isSingleLineCopy && isFromSameDocument) { + return undefined; // Let VS Code handle this normally + } + const range = ranges[0]; const location: Location = { From 7a25262842f30a4a275419b576866c7e25c6bbab Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Sun, 11 Jan 2026 23:11:21 +0100 Subject: [PATCH 644/708] Support AspectJ in Gradle projects --- README.md | 1 + package.json | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 74024545e..d8531de40 100644 --- a/README.md +++ b/README.md @@ -221,6 +221,7 @@ The following settings are supported: * `java.import.maven.offline.enabled`: Enable/disable the Maven offline mode. Defaults to `false`. * `java.codeAction.sortMembers.avoidVolatileChanges`: Reordering of fields, enum constants, and initializers can result in semantic and runtime changes due to different initialization and persistence order. This setting prevents this from occurring. Defaults to `true`. * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. +* `java.jdt.ls.aspectjSupport.enabled`: Specify whether to enable `io.freefair.aspectj` plugin in Gradle projects. Defaults to `false`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. * `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. diff --git a/package.json b/package.json index 933990c67..0b4fb90a1 100644 --- a/package.json +++ b/package.json @@ -399,6 +399,13 @@ "scope": "window", "order": 80 }, + "java.jdt.ls.aspectjSupport.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Specify whether to enable `io.freefair.aspectj` plugin in Gradle projects. Defaults to `false`.", + "scope": "window", + "order": 80 + }, "java.jdt.ls.androidSupport.enabled": { "type": "string", "enum": [ From fbd4da7a8ac7f80ec408cca9353a7c2b000a4c60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 17 Jan 2026 15:47:48 +0000 Subject: [PATCH 645/708] Bump tar from 7.5.2 to 7.5.3 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.2 to 7.5.3. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.2...v7.5.3) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.3 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5d03e0776..cc3f878ca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.2", + "tar": "^7.5.3", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -5069,9 +5069,9 @@ } }, "node_modules/tar": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.2.tgz", - "integrity": "sha512-7NyxrTE4Anh8km8iEy7o0QYPs+0JKBTj5ZaqHg6B39erLg0qYXN3BijtShwbsNSvQ+LN75+KV+C4QR/f6Gwnpg==", + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", + "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/package.json b/package.json index 0b4fb90a1..a36852b6f 100644 --- a/package.json +++ b/package.json @@ -2059,7 +2059,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.2", + "tar": "^7.5.3", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", From 67492aab779413e821d249d0ec395126f56d35e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 21:18:12 +0000 Subject: [PATCH 646/708] Bump tar from 7.5.3 to 7.5.4 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.3 to 7.5.4. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.3...v7.5.4) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.4 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index cc3f878ca..a481a832b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.3", + "tar": "^7.5.4", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -5069,9 +5069,9 @@ } }, "node_modules/tar": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.3.tgz", - "integrity": "sha512-ENg5JUHUm2rDD7IvKNFGzyElLXNjachNLp6RaGf4+JOgxXHkqA+gq81ZAMCUmtMtqBsoU62lcp6S27g1LCYGGQ==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.4.tgz", + "integrity": "sha512-AN04xbWGrSTDmVwlI4/GTlIIwMFk/XEv7uL8aa57zuvRy6s4hdBed+lVq2fAZ89XDa7Us3ANXcE3Tvqvja1kTA==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/package.json b/package.json index a36852b6f..b15d9f9e5 100644 --- a/package.json +++ b/package.json @@ -2059,7 +2059,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.3", + "tar": "^7.5.4", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", From a420e3f9cb929dfc95d4c9f99240c7af14d426f4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Jan 2026 23:27:28 +0000 Subject: [PATCH 647/708] Bump lodash from 4.17.21 to 4.17.23 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.21 to 4.17.23. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.21...4.17.23) --- updated-dependencies: - dependency-name: lodash dependency-version: 4.17.23 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index a481a832b..f33ce0604 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3373,9 +3373,10 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "license": "MIT" }, "node_modules/lodash.findindex": { "version": "4.6.0", From eee2963eaba44e52da4d68cf82db63612c572e4b Mon Sep 17 00:00:00 2001 From: mozhuanzuojing <63572041+mozhuanzuojing@users.noreply.github.com> Date: Tue, 30 Dec 2025 09:05:00 +0800 Subject: [PATCH 648/708] Upgrade GitHub Actions to version 5 - actions/checkout@v5 - actions/cache@v5 - actions/setup-java@v5 - actions/setup-node@v5 - actions/upload-artifact@v5 - actions/download-artifact@v5 --- .github/workflows/release.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 36bf39cd9..7ff391459 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,12 +38,12 @@ jobs: outputs: repo-cache-hit: ${{ steps.cache-last-commit.outputs.cache-hit }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: repository: 'eclipse-jdtls/eclipse.jdt.ls' fetch-depth: 2 path: eclipse.jdt.ls - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: repository: 'redhat-developer/vscode-java' fetch-depth: 2 @@ -56,7 +56,7 @@ jobs: git rev-parse HEAD >> ../lastCommit - name: Check New Changes id: cache-last-commit - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: lastCommit key: lastCommit-${{ hashFiles('lastCommit') }} @@ -67,11 +67,11 @@ jobs: steps: - name: Checkout JDT-LS if: "${{ inputs.JDT_LS_VERSION == '' }}" - uses: actions/checkout@v4 + uses: actions/checkout@v5 with: repository: eclipse-jdtls/eclipse.jdt.ls - name: Cache Maven local repository - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: | ~/.m2/repository @@ -79,7 +79,7 @@ jobs: !~/.m2/repository/org/eclipse/jdt/ls key: maven-local-${{ hashFiles('**/pom.xml') }} - name: Set Up Java - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: java-version: '21' distribution: 'temurin' @@ -90,9 +90,9 @@ jobs: mkdir ../staging cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging - name: Check Out VS Code Java - uses: actions/checkout@v4 + uses: actions/checkout@v5 - name: Set Up NodeJS - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: '20' - name: Install NodeJS dependencies @@ -143,7 +143,7 @@ jobs: vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix ls -lash *.vsix - name: Upload VSIX Artifacts - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v5 with: name: vscode-java path: | @@ -167,14 +167,14 @@ jobs: needs: packaging-job steps: - name: Set Up NodeJS - uses: actions/setup-node@v4 + uses: actions/setup-node@v5 with: node-version: '20' - name: Install dependencies run: | npm install -g typescript "@vscode/vsce" "ovsx" - name: Download VSIX & JDT-LS - uses: actions/download-artifact@v4 + uses: actions/download-artifact@v5 - name: Publish to VS Code Marketplace if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | From eeeb4edb4189cb8bcc0a8d236bcdbe78718d7650 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Wed, 28 Jan 2026 19:31:10 +0100 Subject: [PATCH 649/708] Changelog for 1.52.0 Signed-off-by: Fred Bricon --- CHANGELOG.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38d492f6e..43b4ae8a3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,19 @@ # Change Log +## 1.52.0 (January 29th, 2026) + * enhancement - Add library info on hover. See [#3872](https://github.com/redhat-developer/vscode-java/issues/3872). + * enhancement - Support AspectJ in Gradle projects. See [#4304](https://github.com/redhat-developer/vscode-java/pull/4304). + * enhancement - Enable more quick-fixes from upstream JDT. See [JLS#3660](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3660). + * bug fix - Fix wrong type mismatch errors. See [JLS#3691](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3691). + * bug fix - Fix incorrect Markdown hover rendering for inline `{@link}`/`{@linkplain}` member references. See [JLS#3655](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3655). + * bug fix - Watch `java.settings.url` file modifications. See [JLS#3679](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3679). + * bug fix - Don't create unnecessary new lines when pasting text including literal `\n`. See [#4305](https://github.com/redhat-developer/vscode-java/issues/4305), [#4306](https://github.com/redhat-developer/vscode-java/pull/4306). + * bug fix - Automatic source discovery fails for jars not built with Maven. See [#4301](https://github.com/redhat-developer/vscode-java/issues/4301). + * bug fix - Fix Javadoc braces rendering in hover. See [#1291](https://github.com/redhat-developer/vscode-java/issues/1291). + * dependencies - Bump tar from 7.5.2 to 7.5.4. See [#4311](https://github.com/redhat-developer/vscode-java/pull/4311), [#4315](https://github.com/redhat-developer/vscode-java/pull/4315). + * dependencies - Bump lodash from 4.17.21 to 4.17.23. See [#4316](https://github.com/redhat-developer/vscode-java/pull/4316). + * build - Upgrade GitHub Actions to version 5. See [#4296](https://github.com/redhat-developer/vscode-java/pull/4296). + ## 1.51.0 (January 6th, 2026) * enhancement - Add a quickfix to replace a deprecated field with one referenced in the docs. See [JLS#3626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3626). * enhancement - Add a quickfix for "type safety warning" to infer type arguments. See [JLS#626](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/626). From 0b7cba52640fea081cec9ee95bee6a5d8a3c7ad8 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 29 Jan 2026 17:01:19 +0100 Subject: [PATCH 650/708] test 1 Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 47 +++-------------------------------- 1 file changed, 4 insertions(+), 43 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ff391459..5bfee3bf9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,12 +83,6 @@ jobs: with: java-version: '21' distribution: 'temurin' - - name: Build JDT-LS - if: "${{ inputs.JDT_LS_VERSION == '' }}" - run: | - ./mvnw clean verify -B -U -DskipTests -Pserver-distro - mkdir ../staging - cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging - name: Check Out VS Code Java uses: actions/checkout@v5 - name: Set Up NodeJS @@ -97,32 +91,9 @@ jobs: node-version: '20' - name: Install NodeJS dependencies run: npm install -g typescript "@vscode/vsce" "ovsx" - - name: Download JDT-LS Release - if: "${{ inputs.JDT_LS_VERSION != '' }}" - run: | - version=`echo ${{ inputs.JDT_LS_VERSION }} | cut -d- -f1` - curl -LO https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${{ inputs.JDT_LS_VERSION }}.tar.gz - name: Build vscode-java run: | npm install - - name: Prepare JDT-LS - run: | - rm -rf ./out - mkdir server/ - if [ -e jdt-language-server-*.tar.gz ]; then - tar -xf jdt-language-server-*.tar.gz -C server/ - else - tar -xf ../staging/jdt-language-server-*.tar.gz -C server/ - fi - echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV - - name: Test vscode-java - env: - SKIP_COMMANDS_TEST: true - run: | - xvfb-run --auto-servernum npm run test --silent - continue-on-error: true - - name: Clean tests - run: npm run clean-test-folder - name: Prepare Lombok Support if: false run: | @@ -136,10 +107,8 @@ jobs: run: | platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do - npm run download-jre -- --target ${platform} --javaVersion 21 vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix done - rm -rf jre/ vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix ls -lash *.vsix - name: Upload VSIX Artifacts @@ -170,25 +139,17 @@ jobs: uses: actions/setup-node@v5 with: node-version: '20' - - name: Install dependencies - run: | - npm install -g typescript "@vscode/vsce" "ovsx" - name: Download VSIX & JDT-LS uses: actions/download-artifact@v5 + - name: Display structure of downloaded files + run: ls -R - name: Publish to VS Code Marketplace if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do - vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} - done - vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - - name: Publish to OpenVSX Registry - if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }} - run: | - for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do - ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + ls ${platformVsix} done - ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + ls vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - name: Delete saved artifact if: always() uses: geekyeggo/delete-artifact@e46cfb9575865f907c2beb2e4170b5f4c7d77c52 From 43038857bd5d608945fdfd5f12157bafff56f439 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 29 Jan 2026 17:22:13 +0100 Subject: [PATCH 651/708] Revert "test 1" This reverts commit 0b7cba52640fea081cec9ee95bee6a5d8a3c7ad8. --- .github/workflows/release.yml | 47 ++++++++++++++++++++++++++++++++--- 1 file changed, 43 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5bfee3bf9..7ff391459 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,6 +83,12 @@ jobs: with: java-version: '21' distribution: 'temurin' + - name: Build JDT-LS + if: "${{ inputs.JDT_LS_VERSION == '' }}" + run: | + ./mvnw clean verify -B -U -DskipTests -Pserver-distro + mkdir ../staging + cp org.eclipse.jdt.ls.product/distro/jdt-language-server-*.tar.gz ../staging - name: Check Out VS Code Java uses: actions/checkout@v5 - name: Set Up NodeJS @@ -91,9 +97,32 @@ jobs: node-version: '20' - name: Install NodeJS dependencies run: npm install -g typescript "@vscode/vsce" "ovsx" + - name: Download JDT-LS Release + if: "${{ inputs.JDT_LS_VERSION != '' }}" + run: | + version=`echo ${{ inputs.JDT_LS_VERSION }} | cut -d- -f1` + curl -LO https://download.eclipse.org/jdtls/milestones/${version}/jdt-language-server-${{ inputs.JDT_LS_VERSION }}.tar.gz - name: Build vscode-java run: | npm install + - name: Prepare JDT-LS + run: | + rm -rf ./out + mkdir server/ + if [ -e jdt-language-server-*.tar.gz ]; then + tar -xf jdt-language-server-*.tar.gz -C server/ + else + tar -xf ../staging/jdt-language-server-*.tar.gz -C server/ + fi + echo "EXT_VERSION=$(cat package.json | jq -r .version)" >> $GITHUB_ENV + - name: Test vscode-java + env: + SKIP_COMMANDS_TEST: true + run: | + xvfb-run --auto-servernum npm run test --silent + continue-on-error: true + - name: Clean tests + run: npm run clean-test-folder - name: Prepare Lombok Support if: false run: | @@ -107,8 +136,10 @@ jobs: run: | platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do + npm run download-jre -- --target ${platform} --javaVersion 21 vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix done + rm -rf jre/ vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix ls -lash *.vsix - name: Upload VSIX Artifacts @@ -139,17 +170,25 @@ jobs: uses: actions/setup-node@v5 with: node-version: '20' + - name: Install dependencies + run: | + npm install -g typescript "@vscode/vsce" "ovsx" - name: Download VSIX & JDT-LS uses: actions/download-artifact@v5 - - name: Display structure of downloaded files - run: ls -R - name: Publish to VS Code Marketplace if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do - ls ${platformVsix} + vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} + done + vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + - name: Publish to OpenVSX Registry + if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }} + run: | + for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do + ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done - ls vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - name: Delete saved artifact if: always() uses: geekyeggo/delete-artifact@e46cfb9575865f907c2beb2e4170b5f4c7d77c52 From 7b70e189ee14e8860ac2983095b7ec8c583da7cc Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 29 Jan 2026 17:39:06 +0100 Subject: [PATCH 652/708] fix: changed expected vsix path following upgrade to actions/download-artifact@v5 Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 7ff391459..a0349ed56 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -178,17 +178,17 @@ jobs: - name: Publish to VS Code Marketplace if: ${{ github.event_name == 'schedule' || inputs.publishToMarketPlace == 'true' || inputs.publishPreRelease == 'true' }} run: | - for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do + for platformVsix in java-*-*-${GITHUB_RUN_NUMBER}.vsix; do vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done - vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + vsce publish --skip-duplicate -p ${{ secrets.VSCODE_MARKETPLACE_TOKEN }} --packagePath vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - name: Publish to OpenVSX Registry if: ${{ github.event_name == 'schedule' || inputs.publishToOVSX == 'true' || inputs.publishPreRelease == 'true' }} run: | - for platformVsix in vscode-java/java-*-*-${GITHUB_RUN_NUMBER}.vsix; do + for platformVsix in java-*-*-${GITHUB_RUN_NUMBER}.vsix; do ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath ${platformVsix} done - ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java/vscode-java-*-${GITHUB_RUN_NUMBER}.vsix + ovsx publish --skip-duplicate -p ${{ secrets.OVSX_MARKETPLACE_TOKEN }} --packagePath vscode-java-*-${GITHUB_RUN_NUMBER}.vsix - name: Delete saved artifact if: always() uses: geekyeggo/delete-artifact@e46cfb9575865f907c2beb2e4170b5f4c7d77c52 From b3bf490b0dc7d521b995441609ed6ed1ef9867ed Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 30 Jan 2026 09:07:09 +0100 Subject: [PATCH 653/708] chore: upversion to 1.53.0 Signed-off-by: Fred Bricon --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index f33ce0604..2da1652e9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.52.0", + "version": "1.53.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.52.0", + "version": "1.53.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index b15d9f9e5..a535e3c90 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.52.0", + "version": "1.53.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From 159baecf101f05fe9ed0ec9c13b34a298442a12e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 14:01:23 +0000 Subject: [PATCH 654/708] Bump tar from 7.5.4 to 7.5.7 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.4 to 7.5.7. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.4...v7.5.7) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.7 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2da1652e9..2d81a8b7c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.4", + "tar": "^7.5.7", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", @@ -5070,9 +5070,9 @@ } }, "node_modules/tar": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.4.tgz", - "integrity": "sha512-AN04xbWGrSTDmVwlI4/GTlIIwMFk/XEv7uL8aa57zuvRy6s4hdBed+lVq2fAZ89XDa7Us3ANXcE3Tvqvja1kTA==", + "version": "7.5.7", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", + "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/package.json b/package.json index a535e3c90..7dc9181c9 100644 --- a/package.json +++ b/package.json @@ -2059,7 +2059,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.4", + "tar": "^7.5.7", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.94.0", From c0723ba66b9e3a64acda075152f0a70896feac89 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 30 Jan 2026 11:56:15 +0100 Subject: [PATCH 655/708] build: provide extension for Windows ARM64 Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 2 +- README.md | 4 ++-- scripts/jre.mjs | 3 ++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a0349ed56..44c1c27ad 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -134,7 +134,7 @@ jobs: echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV - name: Package vscode-java run: | - platforms=("win32-x64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") + platforms=("win32-x64" "win32-arm64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do npm run download-jre -- --target ${platform} --javaVersion 21 vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix diff --git a/README.md b/README.md index d8531de40..943e71899 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Provides Java ™ language support via Quick Start ============ 1. Install the Extension -2. On the following platforms, the extension should activate without any setup : `win32-x64`, `darwin-x64`, `darwin-arm64`, `linux-x64`, `linux-arm64`.\ +2. On the following platforms, the extension should activate without any setup : `win32-x64`, `win32-arm64`, `darwin-x64`, `darwin-arm64`, `linux-x64`, `linux-arm64`.\ If on another platform, or using the "universal" version, you can [set](#setting-the-jdk) a _Java_ Development Kit. It must be Java 21 or above. 3. Optionally, download and install a Java Development Kit for your project (Java 1.8 or above is supported). See [Project JDKs](#project-jdks) for more details 4. Extension is activated when you first access a Java file @@ -57,7 +57,7 @@ See the [changelog](CHANGELOG.md) for the latest release. You might also find us Setting the JDK =============== ## Java Tooling JDK -Now that Java extension will publish platform specific versions, it will embed a JRE for supported platforms such as `win32-x64`, `linux-x64`, `linux-arm64`, `darwin-x64`, `darwin-arm64`. The embedded JRE is used to launch the Language Server for Java. Users are only responsible for configuring [Project JDKs](#project-jdks) to compile your Java projects. +Now that Java extension will publish platform specific versions, it will embed a JRE for supported platforms such as `win32-x64`, `win32-arm64`, `linux-x64`, `linux-arm64`, `darwin-x64`, `darwin-arm64`. The embedded JRE is used to launch the Language Server for Java. Users are only responsible for configuring [Project JDKs](#project-jdks) to compile your Java projects. The following part is only kept for the universal version without embedded JRE. diff --git a/scripts/jre.mjs b/scripts/jre.mjs index 25abd2b85..0485afda7 100644 --- a/scripts/jre.mjs +++ b/scripts/jre.mjs @@ -15,7 +15,8 @@ const platformMapping = { "linux-x64": "linux-x86_64", "darwin-arm64": "macosx-aarch64", "darwin-x64": "macosx-x86_64", - "win32-x64": "win32-x86_64" + "win32-x64": "win32-x86_64", + "win32-arm64": "win32-aarch64" }; From 4680aa2c38dcc5988acd885f4c68932c1f2ad258 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 16 Jan 2026 14:46:34 +0100 Subject: [PATCH 656/708] feat: 'new file' template respects indentation and braces position settings Signed-off-by: Fred Bricon --- src/fileEventHandler.ts | 47 +++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 3d6595987..52b44ee58 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -14,6 +14,12 @@ import { apiManager } from './apiManager'; let serverReady: boolean = false; +const BRACE_POSITION_KEY = "org.eclipse.jdt.core.formatter.brace_position_for_type_declaration"; +const END_OF_LINE = "end_of_line"; +const NEXT_LINE = "next_line"; +const NEXT_LINE_SHIFTED = "next_line_shifted"; + + export function setServerStatus(ready: boolean) { serverReady = ready; } @@ -76,6 +82,14 @@ async function handleNewJavaFiles(e: FileCreateEvent) { // the event source, a workaround is to wait 100ms and let WorkspaceEdit // to take effect first, then check if the workingcopy is filled with content. const timeout = setTimeout(async() => { + const editorConfig = workspace.getConfiguration('editor'); + const insertSpaces = editorConfig.get('insertSpaces', true); + const tabSize = editorConfig.get('tabSize', 4); + const indent = insertSpaces ? ' '.repeat(tabSize) : '\t'; + + const projectSetting: {} = await commands.executeCommand<{}>(Commands.EXECUTE_WORKSPACE_COMMAND, Commands.GET_PROJECT_SETTINGS, emptyFiles[0].toString(), [BRACE_POSITION_KEY]); + projectSetting[BRACE_POSITION_KEY] = projectSetting[BRACE_POSITION_KEY] || END_OF_LINE; + const formatNumber = (num => num > 9 ? String(num) : `0${num}`); for (let i = 0; i < emptyFiles.length; i++) { if (textDocuments[i].getText()) { @@ -126,16 +140,37 @@ async function handleNewJavaFiles(e: FileCreateEvent) { snippets.push(stringInterpolate(template, context)); } } - + let declaration: string; if (isModuleInfo) { - snippets.push(`module \${1:name} {`); + declaration = `module \${1:name}`; } else if (!serverReady || await isVersionLessThan(emptyFiles[i].toString(), 14)) { - snippets.push(`public \${1|class,interface,enum,abstract class,@interface|} ${typeName} {`); + declaration = `public \${1|class,interface,enum,abstract class,@interface|} ${typeName}`; } else { - snippets.push(`public \${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|} {`); + declaration = `public \${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|}`; + } + let bracePosition = projectSetting[BRACE_POSITION_KEY]; + if (bracePosition !== END_OF_LINE && bracePosition !== NEXT_LINE && bracePosition !== NEXT_LINE_SHIFTED) { + bracePosition = END_OF_LINE; } - snippets.push("\t${0}"); - snippets.push("}"); + + let body = `${indent}\${0}`; + if (bracePosition === END_OF_LINE) { + snippets.push(`${declaration} {`); + } else if (bracePosition === NEXT_LINE) { + snippets.push(`${declaration}`); + snippets.push("{"); + } else if (bracePosition === NEXT_LINE_SHIFTED) { + snippets.push(declaration); + snippets.push(`${indent}{`); + body = `${indent}${body}`; + } + snippets.push(body); + if (bracePosition === NEXT_LINE_SHIFTED) { + snippets.push(`${indent}}`); + } else { + snippets.push("}"); + } + snippets.push(""); } const textEditor = await window.showTextDocument(textDocuments[i]); From d966c74765cca8317cec83accb3b6df74689338e Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 30 Jan 2026 11:42:03 +0100 Subject: [PATCH 657/708] feat: add setting to disable adding imports on paste Signed-off-by: Fred Bricon --- README.md | 5 +++-- package.json | 7 +++++++ src/pasteAction.ts | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 943e71899..86afdb001 100644 --- a/README.md +++ b/README.md @@ -260,10 +260,11 @@ The following settings are supported: * `java.completion.engine`: [Experimental] Select code completion engine. Defaults to `ecj`. * `java.references.includeDeclarations`: Include declarations when finding references. Defaults to `true` * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. - -New in 1.50.0 * `java.hover.javadoc.enabled` : Enable/disable displaying Javadoc on hover. Defaults to `true`. +New in 1.53.0 +* `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. + Semantic Highlighting =============== [Semantic Highlighting](https://github.com/redhat-developer/vscode-java/wiki/Semantic-Highlighting) fixes numerous syntax highlighting issues with the default Java Textmate grammar. However, you might experience a few minor issues, particularly a delay when it kicks in, as it needs to be computed by the Java Language server, when opening a new file or when typing. Semantic highlighting can be disabled for all languages using the `editor.semanticHighlighting.enabled` setting, or for Java only using [language-specific editor settings](https://code.visualstudio.com/docs/getstarted/settings#_languagespecific-editor-settings). diff --git a/package.json b/package.json index 7dc9181c9..c7f902c98 100644 --- a/package.json +++ b/package.json @@ -1387,6 +1387,13 @@ "scope": "window", "order": 20 }, + "java.updateImportsOnPaste.enabled": { + "type": "boolean", + "default": true, + "description": "Enable/disable auto organize imports when pasting code", + "scope": "window", + "order": 25 + }, "java.sources.organizeImports.starThreshold": { "type": "integer", "description": "Specifies the number of imports added before a star-import declaration is used.", diff --git a/src/pasteAction.ts b/src/pasteAction.ts index d50755601..e5e03d9d7 100644 --- a/src/pasteAction.ts +++ b/src/pasteAction.ts @@ -14,6 +14,7 @@ export function registerCommands(languageClient: LanguageClient, context: Extens } export async function registerOrganizeImportsOnPasteCommand(): Promise { + const clipboardText: string = await env.clipboard.readText(); const editor: TextEditor = window.activeTextEditor; const documentText: string = editor.document.getText(); @@ -40,6 +41,10 @@ export async function registerOrganizeImportsOnPasteCommand(): Promise { action.then((wasApplied) => { if (wasApplied && editor.document.languageId === "java") { + const updateImportsOnPasteEnabled = workspace.getConfiguration().get("java.updateImportsOnPaste.enabled", true); + if (!updateImportsOnPasteEnabled) { + return; + } const fileURI = editor.document.uri.toString(); const hasText: boolean = documentText !== null && /\S/.test(documentText); if (hasText) { From 986af8cd838af6de007a74c863ef46d8b7580231 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 3 Feb 2026 12:05:39 +0100 Subject: [PATCH 658/708] build: avoid calling webpack for each platform build Signed-off-by: Fred Bricon --- .github/workflows/release.yml | 9 ++++++--- package.json | 2 +- scripts/prepublish.mjs | 35 +++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 scripts/prepublish.mjs diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 44c1c27ad..eafd7f074 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -134,13 +134,16 @@ jobs: echo "publishPreReleaseFlag=--pre-release" >> $GITHUB_ENV - name: Package vscode-java run: | + # Compile JavaScript once for the universal VSIX (webpack is platform-independent) + vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix + + # Package for each platform (only downloads JDK and creates VSIX, no recompilation) platforms=("win32-x64" "win32-arm64" "linux-x64" "linux-arm64" "darwin-x64" "darwin-arm64") for platform in ${platforms[@]}; do npm run download-jre -- --target ${platform} --javaVersion 21 - vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix + SKIP_WEBPACK=true vsce package ${{ env.publishPreReleaseFlag }} --target ${platform} -o java-${platform}-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix done - rm -rf jre/ - vsce package ${{ env.publishPreReleaseFlag }} -o vscode-java-${{ env.EXT_VERSION }}-${GITHUB_RUN_NUMBER}.vsix + ls -lash *.vsix - name: Upload VSIX Artifacts uses: actions/upload-artifact@v5 diff --git a/package.json b/package.json index c7f902c98..8e4b289f9 100644 --- a/package.json +++ b/package.json @@ -2020,7 +2020,7 @@ } }, "scripts": { - "vscode:prepublish": "webpack --mode production", + "vscode:prepublish": "node scripts/prepublish.mjs", "compile": "tsc -p ./&webpack --mode development", "watch": "webpack --mode development --watch", "pretest": "npm run compile", diff --git a/scripts/prepublish.mjs b/scripts/prepublish.mjs new file mode 100644 index 000000000..4159eef9f --- /dev/null +++ b/scripts/prepublish.mjs @@ -0,0 +1,35 @@ +#!/usr/bin/env node + +// Skip webpack if SKIP_WEBPACK environment variable is set to 'true' +if (process.env.SKIP_WEBPACK === 'true') { + console.log('Skipping webpack compilation (SKIP_WEBPACK=true)'); + process.exit(0); +} + +// Otherwise, run webpack using the local webpack-cli installation +const { spawn } = await import('child_process'); +const { fileURLToPath } = await import('url'); +const { dirname, resolve, join } = await import('path'); + +const scriptFilename = fileURLToPath(import.meta.url); +const scriptDirname = dirname(scriptFilename); +const projectRoot = resolve(scriptDirname, '..'); + +// Use webpack-cli from local node_modules (cross-platform) +const webpackCliPath = join(projectRoot, 'node_modules', '.bin', 'webpack'); +const isWindows = process.platform === 'win32'; +const webpackCommand = isWindows ? `${webpackCliPath}.cmd` : webpackCliPath; + +const webpack = spawn(webpackCommand, ['--mode', 'production'], { + stdio: 'inherit', + cwd: projectRoot +}); + +webpack.on('close', (code) => { + process.exit(code || 0); +}); + +webpack.on('error', (error) => { + console.error('Error running webpack:', error); + process.exit(1); +}); From fd6fc3b7a9792d3f2a31d08d3d0259a360edb14f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 7 Feb 2026 06:17:56 +0000 Subject: [PATCH 659/708] Bump webpack from 5.94.0 to 5.105.0 Bumps [webpack](https://github.com/webpack/webpack) from 5.94.0 to 5.105.0. - [Release notes](https://github.com/webpack/webpack/releases) - [Changelog](https://github.com/webpack/webpack/blob/main/CHANGELOG.md) - [Commits](https://github.com/webpack/webpack/compare/v5.94.0...v5.105.0) --- updated-dependencies: - dependency-name: webpack dependency-version: 5.105.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 744 ++++++++++++++++++++++------------------------ package.json | 2 +- 2 files changed, 358 insertions(+), 388 deletions(-) diff --git a/package-lock.json b/package-lock.json index 2d81a8b7c..09ce93eb0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -57,7 +57,7 @@ "tar": "^7.5.7", "ts-loader": "^9.4.2", "typescript": "^4.6.4", - "webpack": "^5.94.0", + "webpack": "^5.105.0", "webpack-cli": "^4.6.0" }, "engines": { @@ -252,17 +252,14 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { @@ -270,40 +267,35 @@ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -606,11 +598,34 @@ "node": ">= 6" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "8.0.0", @@ -1061,148 +1076,163 @@ } }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -1246,19 +1276,22 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -1266,13 +1299,17 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-jsx": { @@ -1339,15 +1376,6 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true, - "peerDependencies": { - "ajv": "^6.9.1" - } - }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1393,6 +1421,16 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1430,9 +1468,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -1448,11 +1486,13 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", - "node-releases": "^2.0.18", - "update-browserslist-db": "^1.1.0" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -1462,10 +1502,11 @@ } }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" }, "node_modules/callsites": { "version": "3.1.0", @@ -1477,9 +1518,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001653", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001653.tgz", - "integrity": "sha512-XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw==", + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "dev": true, "funding": [ { @@ -1494,7 +1535,8 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chokidar": { "version": "3.5.3", @@ -1629,7 +1671,8 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-map": { "version": "0.0.1", @@ -1877,10 +1920,11 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.13", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.13.tgz", - "integrity": "sha512-lbBcvtIJ4J6sS4tb5TLp1b4LyfCdMkwStzXPyAgVgTRAsep4bvrAGaBOP7ZJtQMNJpSQ9SqG4brWOroNaQtm7Q==", - "dev": true + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", + "dev": true, + "license": "ISC" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -1904,13 +1948,14 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.0" }, "engines": { "node": ">=10.13.0" @@ -1963,16 +2008,18 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", + "dev": true, + "license": "MIT" }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -2112,34 +2159,6 @@ "@types/json-schema": "*" } }, - "node_modules/eslint-webpack-plugin/node_modules/ajv": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", - "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { "version": "28.1.3", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", @@ -2154,46 +2173,6 @@ "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" } }, - "node_modules/eslint-webpack-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true - }, - "node_modules/eslint-webpack-plugin/node_modules/schema-utils": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.0.tgz", - "integrity": "sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.8.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.0.0" - }, - "engines": { - "node": ">= 12.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/eslint/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -2772,7 +2751,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/node_modules/jackspeak": { "version": "4.1.1", @@ -3202,6 +3182,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -3211,21 +3192,6 @@ "node": ">= 10.13.0" } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/jose": { "version": "5.10.0", "resolved": "https://registry.npmjs.org/jose/-/jose-5.10.0.tgz", @@ -3349,12 +3315,17 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -3611,63 +3582,6 @@ "webpack": "^5.0.0" } }, - "node_modules/mini-css-extract-plugin/node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3880,21 +3794,6 @@ "node": ">=8" } }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, "node_modules/mocha/node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", @@ -4020,10 +3919,11 @@ } }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", - "dev": true + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" }, "node_modules/normalize-path": { "version": "3.0.0", @@ -4753,14 +4653,16 @@ } }, "node_modules/schema-utils": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", - "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, + "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -4770,6 +4672,43 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, "node_modules/semver": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", @@ -4889,6 +4828,16 @@ "node": ">=8" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -4903,20 +4852,12 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", @@ -5043,6 +4984,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", @@ -5061,12 +5018,17 @@ "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/tar": { @@ -5097,13 +5059,14 @@ } }, "node_modules/terser": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -5115,16 +5078,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", - "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -5354,9 +5318,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -5372,9 +5336,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -5478,10 +5443,11 @@ "integrity": "sha512-iZ1d08I30ktqv4mMszGz2Y2o53r+PBpF5tEnwf8NNzKoxeuo0thoaFRG98uJkNVhOtiDmH4HJ3KlqfjM6XIxbA==" }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -5497,34 +5463,37 @@ "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.94.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.94.0.tgz", - "integrity": "sha512-KcsGn50VT+06JH/iunZJedYGUJS5FGjow8wb9c0v5n1Om8O1g4L6LjtfxwlXIATopoQu+vOXXa7gYisWxCoPyg==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -5631,10 +5600,11 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } diff --git a/package.json b/package.json index 8e4b289f9..b9a2e05c8 100644 --- a/package.json +++ b/package.json @@ -2069,7 +2069,7 @@ "tar": "^7.5.7", "ts-loader": "^9.4.2", "typescript": "^4.6.4", - "webpack": "^5.94.0", + "webpack": "^5.105.0", "webpack-cli": "^4.6.0" }, "dependencies": { From 8967a6a90aea043a662ab677f782f0b262eb4a61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Feb 2026 19:51:37 +0000 Subject: [PATCH 660/708] Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1 Bumps @isaacs/brace-expansion from 5.0.0 to 5.0.1. --- updated-dependencies: - dependency-name: "@isaacs/brace-expansion" dependency-version: 5.0.1 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 09ce93eb0..9c4a5d46e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -131,9 +131,9 @@ } }, "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", + "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", "license": "MIT", "dependencies": { "@isaacs/balanced-match": "^4.0.1" From 84defed5920e531e127632f85c2206204da573dd Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Fri, 13 Feb 2026 10:23:22 +0100 Subject: [PATCH 661/708] fix 'Goto Super Implementation' test following #4297 Signed-off-by: Fred Bricon --- test/standard-mode-suite/gotoSuperImplementation.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/standard-mode-suite/gotoSuperImplementation.test.ts b/test/standard-mode-suite/gotoSuperImplementation.test.ts index 34a1285d1..7d00fd5eb 100644 --- a/test/standard-mode-suite/gotoSuperImplementation.test.ts +++ b/test/standard-mode-suite/gotoSuperImplementation.test.ts @@ -26,6 +26,6 @@ suite('Goto Super Implementation', () => { await commands.executeCommand(Commands.NAVIGATE_TO_SUPER_IMPLEMENTATION_COMMAND); - assert.equal(path.basename(window.activeTextEditor.document.fileName), "Object.class"); + assert.equal(path.basename(window.activeTextEditor.document.fileName), "Object.java"); }); }); From 05e0324014c3603c1f1377bfcf705c1ba4719304 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 16 Feb 2026 11:20:14 +0100 Subject: [PATCH 662/708] chore: new issue templates Signed-off-by: Fred Bricon --- .github/ISSUE_TEMPLATE.md | 25 ----------------- .github/ISSUE_TEMPLATE/bug_report.md | 34 +++++++++++++++++++++++ .github/ISSUE_TEMPLATE/config.yml | 8 ++++++ .github/ISSUE_TEMPLATE/feature_request.md | 20 +++++++++++++ 4 files changed, 62 insertions(+), 25 deletions(-) delete mode 100644 .github/ISSUE_TEMPLATE.md create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md deleted file mode 100644 index d7790cc00..000000000 --- a/.github/ISSUE_TEMPLATE.md +++ /dev/null @@ -1,25 +0,0 @@ - - -[provide a description of the issue] - -##### Environment -- Operating System: -- JDK version: -- Visual Studio Code version: -- Java extension version: - -##### Steps To Reproduce -1. [step 1] -2. [step 2] - -[Please attach a sample project reproducing the error] -[Please attach logs](https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting#enable-logging) - -##### Current Result - -##### Expected Result - -##### Additional Information diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 000000000..ab4541af8 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,34 @@ +--- +name: 🐛 Bug report +about: Report an issue about editing, completion, navigation, build, etc. +title: '' +labels: ['bug'] +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the problem is. + +**To Reproduce** +Steps to reproduce the behavior: +1. [step 1] +2. [step 2] +3. ... + +[Please attach a sample project reproducing the error] +[Please attach logs. See https://github.com/redhat-developer/vscode-java/wiki/Troubleshooting#enable-logging] + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Environment** +- Operating System: +- JDK version: +- Visual Studio Code version: +- Java extension version: + +**Additional Information** diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 000000000..4304c8477 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,8 @@ +blank_issues_enabled: false +contact_links: + - name: 🧪 Issue about running unit tests + url: https://github.com/microsoft/vscode-java-test/issues/new + about: If your problem is about running or debugging unit tests, open an issue in the Test Runner for Java extension. + - name: 🏃‍♂️ Issue about running or debugging application code + url: https://github.com/microsoft/vscode-java-debug/issues/new + about: If your problem is about running or debugging Java application code, open an issue in the Debugger for Java extension. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 000000000..36bddafeb --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: 💡 Feature request +about: Suggest a new feature or improvement for editing, completion, navigation, build, etc. +title: '' +labels: ['enhancement'] +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. \ No newline at end of file From 5884eb5df9f7becde6358947d8d0009093074ab0 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 12 Feb 2026 14:56:46 +0100 Subject: [PATCH 663/708] feat: allow turning off automatic creation of class body when creating a new java file Signed-off-by: Fred Bricon --- README.md | 1 + package.json | 7 +++++++ src/fileEventHandler.ts | 3 +++ 3 files changed, 11 insertions(+) diff --git a/README.md b/README.md index 86afdb001..4c168dea2 100644 --- a/README.md +++ b/README.md @@ -263,6 +263,7 @@ The following settings are supported: * `java.hover.javadoc.enabled` : Enable/disable displaying Javadoc on hover. Defaults to `true`. New in 1.53.0 +* `java.templates.newFile.enabled` : Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`. * `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. Semantic Highlighting diff --git a/package.json b/package.json index b9a2e05c8..156ca9778 100644 --- a/package.json +++ b/package.json @@ -1191,6 +1191,13 @@ "title": "Code Generation", "order": 100, "properties": { + "java.templates.newFile.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`.", + "scope": "window", + "order": 5 + }, "java.templates.fileHeader": { "type": "array", "markdownDescription": "Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 52b44ee58..03e950b5a 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -47,6 +47,9 @@ export function registerFileEventHandlers(client: LanguageClient, context: Exten } async function handleNewJavaFiles(e: FileCreateEvent) { + if (!getJavaConfiguration().get('templates.newFile.enabled', true)) { + return; + } const emptyFiles: Uri[] = []; const textDocuments: TextDocument[] = []; for (const uri of e.files) { From 492b0f602561ba53e9900ff415fe6ab6e5acc77f Mon Sep 17 00:00:00 2001 From: Shi Chen Date: Wed, 22 Mar 2023 15:33:02 +0800 Subject: [PATCH 664/708] deprecate 'java.saveActions.organizeImports' Signed-off-by: Shi Chen --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index 156ca9778..c2f4220c4 100644 --- a/package.json +++ b/package.json @@ -1391,6 +1391,7 @@ "type": "boolean", "default": false, "description": "Enable/disable auto organize imports on save action", + "deprecationMessage": "This setting is deprecated, please configure 'editor.codeActionsOnSave' instead.", "scope": "window", "order": 20 }, From f4db4064805a561252931d2cb6dcb16875bca0dd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Feb 2026 18:47:58 +0000 Subject: [PATCH 665/708] build(deps-dev): bump tar from 7.5.7 to 7.5.8 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.7 to 7.5.8. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.7...v7.5.8) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.8 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9c4a5d46e..b5619f9f1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.7", + "tar": "^7.5.8", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.105.0", @@ -5032,9 +5032,9 @@ } }, "node_modules/tar": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.7.tgz", - "integrity": "sha512-fov56fJiRuThVFXD6o6/Q354S7pnWMJIVlDBYijsTNx6jKSE4pvrDTs6lUnmGvNyfJwFQQwWy3owKz1ucIhveQ==", + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", + "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/package.json b/package.json index c2f4220c4..1e8932f20 100644 --- a/package.json +++ b/package.json @@ -2074,7 +2074,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.7", + "tar": "^7.5.8", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.105.0", From 68c3baa3dbc2be2f310d4342c4b43692051870d8 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Mon, 23 Feb 2026 13:56:34 +0100 Subject: [PATCH 666/708] feat: update Eclipse formatter template to version 23 Signed-off-by: Fred Bricon --- formatters/eclipse-formatter.xml | 128 ++++++++++++++++++++++++++----- 1 file changed, 109 insertions(+), 19 deletions(-) diff --git a/formatters/eclipse-formatter.xml b/formatters/eclipse-formatter.xml index 7f8c57d13..8b078b85a 100644 --- a/formatters/eclipse-formatter.xml +++ b/formatters/eclipse-formatter.xml @@ -1,45 +1,69 @@ - - - - - - - - + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + @@ -48,19 +72,25 @@ + + + + + + @@ -69,11 +99,15 @@ + + + + @@ -88,6 +122,7 @@ + @@ -112,18 +147,14 @@ - - - - - - - + + + - + @@ -149,11 +180,17 @@ + + + + + + @@ -170,6 +207,7 @@ + @@ -178,13 +216,19 @@ + + + + + + - + @@ -201,6 +245,7 @@ + @@ -227,11 +272,16 @@ + + + + + @@ -243,6 +293,8 @@ + + @@ -258,6 +310,7 @@ + @@ -268,9 +321,12 @@ + + + @@ -280,16 +336,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -299,17 +379,27 @@ + + + + - + + + + + + + From b1f4e81c4095d4698c7962cd5ef55ae002df36a0 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Wed, 21 Jan 2026 01:45:41 +0100 Subject: [PATCH 667/708] Support Kotlin,Groovy in Gradle projects --- README.md | 2 ++ package.json | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/README.md b/README.md index 4c168dea2..5a544fde4 100644 --- a/README.md +++ b/README.md @@ -265,6 +265,8 @@ The following settings are supported: New in 1.53.0 * `java.templates.newFile.enabled` : Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`. * `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. +* `java.jdt.ls.kotlinSupport.enabled`: [Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`. +* `java.jdt.ls.groovySupport.enabled`: [Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 1e8932f20..9b066e12d 100644 --- a/package.json +++ b/package.json @@ -406,6 +406,20 @@ "scope": "window", "order": 80 }, + "java.jdt.ls.kotlinSupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "[Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`.", + "scope": "window", + "order": 80 + }, + "java.jdt.ls.groovySupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "[Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`.", + "scope": "window", + "order": 80 + }, "java.jdt.ls.androidSupport.enabled": { "type": "string", "enum": [ From 7a454dd27262a562840cb3d929d9eac1ca55f1ec Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 12 Feb 2026 13:17:00 +0100 Subject: [PATCH 668/708] feat: add setting to show generated code in document symbols Signed-off-by: Fred Bricon --- README.md | 1 + package.json | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 5a544fde4..b9a0235ca 100644 --- a/README.md +++ b/README.md @@ -267,6 +267,7 @@ New in 1.53.0 * `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. * `java.jdt.ls.kotlinSupport.enabled`: [Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`. * `java.jdt.ls.groovySupport.enabled`: [Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`. +* `java.symbols.includeGeneratedCode` : Include generated code (e.g. Lombok getters, setters, constructors) in document outline/symbols. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index 9b066e12d..4151bd374 100644 --- a/package.json +++ b/package.json @@ -1521,6 +1521,13 @@ "scope": "window", "order": 60 }, + "java.symbols.includeGeneratedCode": { + "type": "boolean", + "markdownDescription": "Include generated code (e.g. Lombok getters, setters, constructors) in document outline/symbols.", + "default": false, + "scope": "window", + "order": 65 + }, "java.typeHierarchy.lazyLoad": { "type": "boolean", "default": false, From a9c5a3ab5bbf3acc9c9d94170fa30648595ef1e0 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Tue, 24 Feb 2026 19:33:06 +0100 Subject: [PATCH 669/708] Changelog for 1.53.0 Signed-off-by: Fred Bricon --- CHANGELOG.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43b4ae8a3..2d653ec0f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,29 @@ # Change Log +## 1.53.0 (February 26th, 2026) + * enhancement - Kotlin imports into Java file are unresolved. See [#531](https://github.com/redhat-developer/vscode-java/issues/531). + * enhancement - After opening the Kotlin class of a downloaded Maven dependency source, show `.kt` file instead of `.class`. See [#4297](https://github.com/redhat-developer/vscode-java/issues/4297). + * enhancement - Disable automatic imports on paste. See [#4325](https://github.com/redhat-developer/vscode-java/issues/4325). + * enhancement - Option to turn off automatic creation of class body when creating a new Java file. See [#2652](https://github.com/redhat-developer/vscode-java/issues/2652). + * enhancement - Update Eclipse formatter template to version 23. See [#4344](https://github.com/redhat-developer/vscode-java/pull/4344). + * enhancement - Set `o.e.j.core.compiler.problem.forbiddenReference=ignore` by default. See [JLS#3720](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3720). + * enhancement - Add setting to show generated code in document symbols. See [4084](https://github.com/redhat-developer/vscode-java/issues/4084). + * enhancement - Provide a Windows ARM64 build. See [#4324](https://github.com/redhat-developer/vscode-java/issues/4324). + * enhancement - Log server version+commit on startup. See [JLS#3689](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3689). + * bug fix - Suggestion issue for Variable Arity Parameters. See [#4267](https://github.com/redhat-developer/vscode-java/issues/4267). + * bug fix - Annotations + generics + explicit receiver fail to compile. See [#3744](https://github.com/redhat-developer/vscode-java/issues/3744). + * bug fix - Autocompletion not working in `@interface` class. See [#3533](https://github.com/redhat-developer/vscode-java/issues/3533). + * bug fix - Deprecate `java.saveActions.organizeImports` setting. See [#2207](https://github.com/redhat-developer/vscode-java/issues/2207) and [#659](https://github.com/redhat-developer/vscode-java/issues/659). + * bug fix - Fix code completion in JEP 512: Compact Source Files with static variables. See [JLS#3680](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3680). + * bug fix - JEP 511: module completion now shows documentation. See [JLS#3710](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3710). + * dependencies - Update Fernflower to 253.29346.240, fetched via the target platform. See [JLS#3667](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3667). + * dependencies - Bump tar from 7.5.4 to 7.5.7. See [#4322](https://github.com/redhat-developer/vscode-java/pull/4322). + * dependencies - Bump webpack from 5.94.0 to 5.105.0. See [#4332](https://github.com/redhat-developer/vscode-java/pull/4332). + * dependencies - Bump @isaacs/brace-expansion from 5.0.0 to 5.0.1. See [#4331](https://github.com/redhat-developer/vscode-java/pull/4331). + * dependencies - Bump tar from 7.5.7 to 7.5.8. See [#4343](https://github.com/redhat-developer/vscode-java/pull/4343). + * build - Avoid calling webpack for each platform build. See [#4330](https://github.com/redhat-developer/vscode-java/pull/4330). + * build - New issue templates. See [#4339](https://github.com/redhat-developer/vscode-java/pull/4339). + ## 1.52.0 (January 29th, 2026) * enhancement - Add library info on hover. See [#3872](https://github.com/redhat-developer/vscode-java/issues/3872). * enhancement - Support AspectJ in Gradle projects. See [#4304](https://github.com/redhat-developer/vscode-java/pull/4304). From 0199be96abc5c1e69d32389c4ca95416da883aeb Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 26 Feb 2026 12:24:56 +0100 Subject: [PATCH 670/708] chore: upversion to 1.54.0 Signed-off-by: Fred Bricon --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index b5619f9f1..35913e36b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.53.0", + "version": "1.54.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.53.0", + "version": "1.54.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 4151bd374..d1405130e 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.53.0", + "version": "1.54.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, From dca8a279b5e3e8df1dc9d1478ef80a08f61abdc9 Mon Sep 17 00:00:00 2001 From: Fred Bricon Date: Thu, 26 Feb 2026 17:35:50 +0100 Subject: [PATCH 671/708] feat: add hinlay hints for format parameters Signed-off-by: Fred Bricon --- README.md | 13 +++++++------ package.json | 6 ++++++ src/standardLanguageClient.ts | 1 + 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index b9a0235ca..00ec18351 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,7 @@ The following settings are supported: Default launch mode is `Hybrid`. Legacy mode is `Standard` * `java.sources.organizeImports.starThreshold`: Specifies the number of imports added before a star-import declaration is used, default is 99. * `java.sources.organizeImports.staticStarThreshold`: Specifies the number of static imports added before a star-import declaration is used, default is 99. +* `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. * `java.imports.gradle.wrapper.checksums`: Defines allowed/disallowed SHA-256 checksums of Gradle Wrappers. * `java.project.importOnFirstTimeStartup`: Specifies whether to import the Java projects, when opening the folder in Hybrid mode for the first time. Supported values are `disabled` (never imports), `interactive` (asks to import or not), `automatic` (always imports). Default to `automatic`. * `java.project.importHint`: Enable/disable the server-mode switch information, when Java projects import is skipped on startup. Defaults to `true`. @@ -192,6 +193,7 @@ The following settings are supported: * `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules","\.git"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to ["node_modules","\.git"]. * `java.templates.fileHeader`: Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.typeComment`: Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). +* `java.templates.newFile.enabled` : Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`. * `java.references.includeAccessors`: Include getter, setter and builder/constructor when finding references. Default to true. * `java.configuration.maven.globalSettings` : Path to Maven's global settings.xml. * `java.configuration.maven.lifecycleMappings` : Path to Maven's lifecycle mappings xml. @@ -210,6 +212,7 @@ The following settings are supported: - `all`: Generate 'final' modifier for all new declarations * `java.settings.url` : Specifies the url or file path to the workspace Java settings. See [Setting Global Preferences](https://github.com/redhat-developer/vscode-java/wiki/Settings-Global-Preferences) * `java.symbols.includeSourceMethodDeclarations` : Include method declarations from source files in symbol search. Defaults to `false`. +* `java.symbols.includeGeneratedCode` : Include generated code (e.g. Lombok getters, setters, constructors) in document outline/symbols. Defaults to `false`. * `java.quickfix.showAt` : Show quickfixes at the problem or line level. * `java.configuration.workspaceCacheLimit` : The number of days (if enabled) to keep unused workspace cache data. Beyond this limit, cached workspace data may be removed. * `java.import.generatesMetadataFilesAtProjectRoot` : Specify whether the project metadata files(.project, .classpath, .factorypath, .settings/) will be generated at the project root. Defaults to `false`. @@ -223,6 +226,8 @@ The following settings are supported: * `java.jdt.ls.protobufSupport.enabled`: Specify whether to automatically add Protobuf output source directories to the classpath. **Note:** Only works for Gradle `com.google.protobuf` plugin `0.8.4` or higher. Defaults to `true`. * `java.jdt.ls.aspectjSupport.enabled`: Specify whether to enable `io.freefair.aspectj` plugin in Gradle projects. Defaults to `false`. * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. +* `java.jdt.ls.kotlinSupport.enabled`: [Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`. +* `java.jdt.ls.groovySupport.enabled`: [Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. * `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. * `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. @@ -262,12 +267,8 @@ The following settings are supported: * `java.jdt.ls.appcds.enabled` : [Experimental] Enable Java AppCDS (Application Class Data Sharing) for improvements to extension activation. When set to `auto`, AppCDS will be enabled in Visual Studio Code - Insiders, and for pre-release versions. * `java.hover.javadoc.enabled` : Enable/disable displaying Javadoc on hover. Defaults to `true`. -New in 1.53.0 -* `java.templates.newFile.enabled` : Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`. -* `java.updateImportsOnPaste.enabled` : Enable/disable auto organize imports when pasting code. Defaults to `true`. -* `java.jdt.ls.kotlinSupport.enabled`: [Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`. -* `java.jdt.ls.groovySupport.enabled`: [Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`. -* `java.symbols.includeGeneratedCode` : Include generated code (e.g. Lombok getters, setters, constructors) in document outline/symbols. Defaults to `false`. +New in 1.54.0 +* `java.inlayHints.formatParameters.enabled`: Enable/disable inlay hints for format specifiers in format strings (e.g. `String.format()`, `String.formatted()`, `PrintStream.printf()`). Shows which argument corresponds to each format specifier. Defaults to `false`. Semantic Highlighting =============== diff --git a/package.json b/package.json index d1405130e..60ef98214 100644 --- a/package.json +++ b/package.json @@ -1581,6 +1581,12 @@ "markdownDescription": "Enable/disable inlay hints for (lambda) parameter types:\n```java\n\nList.of(1, 2, 3, 4).filter(/*Integer */ n -> n % 2 == 0).toList();\n \n```", "scope": "window" }, + "java.inlayHints.formatParameters.enabled": { + "type": "boolean", + "default": false, + "markdownDescription": "Enable/disable inlay hints for format specifiers in format strings (e.g. `String.format()`, `String.formatted()`, `PrintStream.printf()`). Shows which argument corresponds to each format specifier.", + "scope": "window" + }, "java.search.scope": { "type": "string", "enum": [ diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 82eceabef..11eac27db 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -346,6 +346,7 @@ export class StandardLanguageClient { "java.inlayHints.parameterNames.suppressWhenSameNameNumbered", "java.inlayHints.variableTypes.enabled", "java.inlayHints.parameterTypes.enabled", + "java.inlayHints.formatParameters.enabled", "java.server.launchMode", "java.autobuild.enabled" ]; From 181fbb258002728645e27089844189f61d1136c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 21:25:12 +0000 Subject: [PATCH 672/708] build(deps-dev): bump tar from 7.5.8 to 7.5.11 Bumps [tar](https://github.com/isaacs/node-tar) from 7.5.8 to 7.5.11. - [Release notes](https://github.com/isaacs/node-tar/releases) - [Changelog](https://github.com/isaacs/node-tar/blob/main/CHANGELOG.md) - [Commits](https://github.com/isaacs/node-tar/compare/v7.5.8...v7.5.11) --- updated-dependencies: - dependency-name: tar dependency-version: 7.5.11 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 8 ++++---- package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35913e36b..bbda63fee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -54,7 +54,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.8", + "tar": "^7.5.11", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.105.0", @@ -5032,9 +5032,9 @@ } }, "node_modules/tar": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", - "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", + "version": "7.5.11", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.11.tgz", + "integrity": "sha512-ChjMH33/KetonMTAtpYdgUFr0tbz69Fp2v7zWxQfYZX4g5ZN2nOBXm1R2xyA+lMIKrLKIoKAwFj93jE/avX9cQ==", "dev": true, "license": "BlueOak-1.0.0", "dependencies": { diff --git a/package.json b/package.json index 60ef98214..2f31bacbc 100644 --- a/package.json +++ b/package.json @@ -2101,7 +2101,7 @@ "minimist": ">=1.2.6", "mocha": "^11.1.0", "sinon": "^14.0.0", - "tar": "^7.5.8", + "tar": "^7.5.11", "ts-loader": "^9.4.2", "typescript": "^4.6.4", "webpack": "^5.105.0", From 00cbc84e2cb5e0a8434eaf246d88e463a4d31304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Feb 2026 16:30:45 +0000 Subject: [PATCH 673/708] build(deps): bump minimatch Bumps and [minimatch](https://github.com/isaacs/minimatch). These dependencies needed to be updated together. Updates `minimatch` from 10.1.1 to 10.2.4 - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v10.1.1...v10.2.4) Updates `minimatch` from 5.1.6 to 5.1.9 - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v10.1.1...v10.2.4) Updates `minimatch` from 3.1.2 to 3.1.5 - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v10.1.1...v10.2.4) Updates `minimatch` from 9.0.5 to 9.0.9 - [Changelog](https://github.com/isaacs/minimatch/blob/main/changelog.md) - [Commits](https://github.com/isaacs/minimatch/compare/v10.1.1...v10.2.4) --- updated-dependencies: - dependency-name: minimatch dependency-version: 10.2.4 dependency-type: indirect - dependency-name: minimatch dependency-version: 5.1.9 dependency-type: indirect - dependency-name: minimatch dependency-version: 3.1.5 dependency-type: indirect - dependency-name: minimatch dependency-version: 9.0.9 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 80 ++++++++++++++++++++++++----------------------- 1 file changed, 41 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbda63fee..33057c2fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -121,27 +121,6 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.1.tgz", - "integrity": "sha512-WMz71T1JS624nWj2n2fnYAuPovhv7EUhk69R6i9dsVyzxt5eM3bjwvgk9L+APE1TRscGysAVMANkB0jh0LQZrQ==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -2754,6 +2733,27 @@ "dev": true, "license": "BSD-2-Clause" }, + "node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/glob/node_modules/jackspeak": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", @@ -2779,15 +2779,15 @@ } }, "node_modules/glob/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "license": "BlueOak-1.0.0", "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -3583,10 +3583,11 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3753,13 +3754,13 @@ } }, "node_modules/mocha/node_modules/glob/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^2.0.2" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -3769,9 +3770,9 @@ } }, "node_modules/mocha/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, "license": "ISC", "dependencies": { @@ -5399,9 +5400,10 @@ } }, "node_modules/vscode-languageclient/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, From 162ad9e63d805fa134b8e3290aab100381d07fa7 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Thu, 19 Mar 2026 17:45:18 +0100 Subject: [PATCH 674/708] Add JDK 26 --- README.md | 8 +++++++- package.json | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 00ec18351..425edf87e 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ Features ========= ![ screencast ](https://raw.githubusercontent.com/redhat-developer/vscode-java/main/images/vscode-java.0.0.1.gif) -* Supports code from Java 1.8 to Java 25 +* Supports code from Java 1.8 to Java 26 * Maven pom.xml project support * Gradle project support (with experimental Android project import support) * Standalone Java files support @@ -86,6 +86,12 @@ If you need to compile your projects against a different JDK version, it's recom "path": "/path/to/jdk-25", "default": true }, + , + { + "name": "JavaSE-26", + "path": "/path/to/jdk-26", + "default": true + }, ] ``` The default runtime will be used when you open standalone Java files. diff --git a/package.json b/package.json index 2f31bacbc..a6f494ffc 100644 --- a/package.json +++ b/package.json @@ -971,7 +971,8 @@ "JavaSE-22", "JavaSE-23", "JavaSE-24", - "JavaSE-25" + "JavaSE-25", + "JavaSE-26" ], "description": "Java Execution Environment name. Must be unique." }, @@ -2133,4 +2134,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} +} \ No newline at end of file From 4f862f592c7a0256a1d6393f183135eb49ffedb2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Mar 2026 22:02:11 +0000 Subject: [PATCH 675/708] build(deps): bump @tootallnate/once and @vscode/test-electron Removes [@tootallnate/once](https://github.com/TooTallNate/once). It's no longer used after updating ancestor dependency [@vscode/test-electron](https://github.com/Microsoft/vscode-test). These dependencies need to be updated together. Removes `@tootallnate/once` Updates `@vscode/test-electron` from 2.3.8 to 2.5.2 - [Changelog](https://github.com/microsoft/vscode-test/blob/main/CHANGELOG.md) - [Commits](https://github.com/Microsoft/vscode-test/commits/v2.5.2) --- updated-dependencies: - dependency-name: "@tootallnate/once" dependency-version: dependency-type: indirect - dependency-name: "@vscode/test-electron" dependency-version: 2.5.2 dependency-type: direct:development ... Signed-off-by: dependabot[bot] --- package-lock.json | 443 ++++++++++++++++++++++++++++++++-------------- package.json | 2 +- 2 files changed, 311 insertions(+), 134 deletions(-) diff --git a/package-lock.json b/package-lock.json index 33057c2fb..7253c7d21 100644 --- a/package-lock.json +++ b/package-lock.json @@ -45,7 +45,7 @@ "@types/winston": "^2.4.4", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", - "@vscode/test-electron": "^2.3.8", + "@vscode/test-electron": "^2.5.2", "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", @@ -138,18 +138,6 @@ "node": ">=12" } }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", - "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/ansi-styles": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", @@ -185,21 +173,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -568,15 +541,6 @@ "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -988,59 +952,22 @@ "integrity": "sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg==" }, "node_modules/@vscode/test-electron": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.3.8.tgz", - "integrity": "sha512-b4aZZsBKtMGdDljAsOPObnAi7+VWIaYl3ylCz1jTs+oV6BZ4TNHcVNC3xUn0azPeszBmwSBDQYfFESIaUQnrOg==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", + "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", "dev": true, + "license": "MIT", "dependencies": { - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", "jszip": "^3.10.1", - "semver": "^7.5.2" + "ora": "^8.1.0", + "semver": "^7.6.2" }, "engines": { "node": ">=16" } }, - "node_modules/@vscode/test-electron/node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/@vscode/test-electron/node_modules/http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "dev": true, - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/@vscode/test-electron/node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/@vscode/webview-ui-toolkit": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", @@ -1300,6 +1227,16 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1355,6 +1292,18 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1517,6 +1466,19 @@ ], "license": "CC-BY-4.0" }, + "node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, "node_modules/chokidar": { "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", @@ -1573,6 +1535,35 @@ "node": ">=6.0" } }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/clone-deep": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", @@ -1722,21 +1713,6 @@ } } }, - "node_modules/css-loader/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -2676,6 +2652,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/getos": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/getos/-/getos-3.2.1.tgz", @@ -2897,6 +2886,34 @@ "entities": "^2.0.0" } }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -3084,6 +3101,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -3468,17 +3498,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/map-age-cleaner": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", @@ -3561,6 +3580,19 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mini-css-extract-plugin": { "version": "2.9.4", "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.4.tgz", @@ -4011,6 +4043,98 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/os-locale": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-5.0.0.tgz", @@ -4598,6 +4722,52 @@ "node": ">=8" } }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -4711,12 +4881,10 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.5.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", - "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4867,6 +5035,19 @@ "node": "*" } }, + "node_modules/stdin-discarder": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz", + "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/string_decoder": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", @@ -4943,6 +5124,21 @@ "node": ">=8" } }, + "node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -5411,20 +5607,6 @@ "node": ">=10" } }, - "node_modules/vscode-languageclient/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/vscode-languageserver-protocol": { "version": "3.17.6-next.1", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.6-next.1.tgz", @@ -5924,11 +6106,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yargs-unparser": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", diff --git a/package.json b/package.json index a6f494ffc..ff146e413 100644 --- a/package.json +++ b/package.json @@ -2093,7 +2093,7 @@ "@types/winston": "^2.4.4", "@typescript-eslint/eslint-plugin": "^5.18.0", "@typescript-eslint/parser": "^5.18.0", - "@vscode/test-electron": "^2.3.8", + "@vscode/test-electron": "^2.5.2", "css-loader": "^6.7.3", "eslint": "^8.13.0", "eslint-webpack-plugin": "^3.2.0", From 6f8b4eb9995d420a3710ee7bd08d7cdb296f69bb Mon Sep 17 00:00:00 2001 From: Changyong Gong Date: Fri, 27 Mar 2026 14:36:27 +0800 Subject: [PATCH 676/708] feat: add serverRunning() API (v0.14) for progressive loading Add serverRunning() promise to ExtensionAPI that resolves when the server process is alive and can handle requests, even before project imports complete. This enables dependent extensions to show progressive content during long imports instead of waiting for full initialization. Bump extensionApiVersion to 0.14. --- src/apiManager.ts | 13 +++++++++++++ src/extension.api.ts | 10 +++++++++- src/standardLanguageClient.ts | 3 +++ 3 files changed, 25 insertions(+), 1 deletion(-) diff --git a/src/apiManager.ts b/src/apiManager.ts index 6cdbf8e62..7f3879188 100644 --- a/src/apiManager.ts +++ b/src/apiManager.ts @@ -22,6 +22,7 @@ class ApiManager { private traceEventEmitter: Emitter = new Emitter(); private sourceInvalidatedEventEmitter: Emitter = new Emitter(); private serverReadyPromiseResolve: (result: boolean) => void; + private serverRunningPromiseResolve: (result: boolean) => void; public initialize(requirements: RequirementsData, serverMode: ServerMode): void { // if it's manual import mode, set the server mode to lightweight, so that the @@ -57,6 +58,13 @@ class ApiManager { return serverReadyPromise; }; + const serverRunningPromise: Promise = new Promise((resolve) => { + this.serverRunningPromiseResolve = resolve; + }); + const serverRunning = async () => { + return serverRunningPromise; + }; + this.api = { apiVersion: extensionApiVersion, javaRequirement: requirements, @@ -73,6 +81,7 @@ class ApiManager { onDidProjectsImport, onDidProjectsDelete, serverReady, + serverRunning, onWillRequestStart, onDidRequestEnd, trackEvent: traceEvent, @@ -123,6 +132,10 @@ class ApiManager { public resolveServerReadyPromise(): void { this.serverReadyPromiseResolve(true); } + + public resolveServerRunningPromise(): void { + this.serverRunningPromiseResolve?.(true); + } } export const apiManager: ApiManager = new ApiManager(); diff --git a/src/extension.api.ts b/src/extension.api.ts index 4c8661062..7e44da530 100644 --- a/src/extension.api.ts +++ b/src/extension.api.ts @@ -111,7 +111,7 @@ export interface SourceInvalidatedEvent { affectedEditorDocuments?: Uri[]; } -export const extensionApiVersion = '0.13'; +export const extensionApiVersion = '0.14'; export interface ExtensionAPI { readonly apiVersion: string; @@ -167,6 +167,14 @@ export interface ExtensionAPI { */ readonly serverReady: () => Promise; + /** + * A promise that will be resolved when the language server process is running + * and can accept requests, even if project imports have not yet completed. + * This allows extensions to start querying for projects incrementally during import. + * @since API version 0.14 + */ + readonly serverRunning?: () => Promise; + /** * An event that's fired when a request is about to send to language server. * @since API version 0.12 diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 11eac27db..7a0aae0eb 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -121,6 +121,9 @@ export class StandardLanguageClient { public registerLanguageClientActions(context: ExtensionContext, hasImported: boolean, jdtEventEmitter: EventEmitter) { activationProgressNotification.showProgress(); this.languageClient.onNotification(StatusNotification.type, (report) => { + // Resolve serverRunning on the first status notification from the server, + // indicating the server process is alive and can accept requests. + apiManager.resolveServerRunningPromise(); switch (report.type) { case 'ServiceReady': apiManager.updateServerMode(ServerMode.standard); From 6cc0beb32a72b91ff87007f4699527f743809cd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Mar 2026 14:26:24 +0000 Subject: [PATCH 677/708] build(deps-dev): bump brace-expansion from 1.1.12 to 1.1.13 Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) from 1.1.12 to 1.1.13. - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v1.1.12...v1.1.13) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 1.1.13 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7253c7d21..98405d779 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1368,9 +1368,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", "dev": true, "license": "MIT", "dependencies": { @@ -2732,9 +2732,9 @@ } }, "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", - "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" @@ -3712,9 +3712,9 @@ } }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "dev": true, "license": "MIT", "dependencies": { @@ -5587,9 +5587,9 @@ } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", + "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" From c893eb93d2362342abcbcda51c5c00eff3c135fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Mar 2026 22:18:51 +0000 Subject: [PATCH 678/708] build(deps): bump picomatch Bumps and [picomatch](https://github.com/micromatch/picomatch). These dependencies needed to be updated together. Updates `picomatch` from 4.0.3 to 4.0.4 - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4) Updates `picomatch` from 2.3.1 to 2.3.2 - [Release notes](https://github.com/micromatch/picomatch/releases) - [Changelog](https://github.com/micromatch/picomatch/blob/master/CHANGELOG.md) - [Commits](https://github.com/micromatch/picomatch/compare/4.0.3...4.0.4) --- updated-dependencies: - dependency-name: picomatch dependency-version: 4.0.4 dependency-type: indirect - dependency-name: picomatch dependency-version: 2.3.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 98405d779..0c70622fb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -392,9 +392,9 @@ } }, "node_modules/@redhat-developer/vscode-redhat-telemetry/node_modules/picomatch": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "license": "MIT", "engines": { "node": ">=12" @@ -4362,9 +4362,10 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", "engines": { "node": ">=8.6" }, From c4a1cd6a5eac3cd25145147dfb9c87ad5524e189 Mon Sep 17 00:00:00 2001 From: Amrita kumari mishra Date: Mon, 30 Mar 2026 12:54:31 +0000 Subject: [PATCH 679/708] Fix: escape backslashes and dollar signs in code action snippets (#4314) --- src/extension.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/extension.ts b/src/extension.ts index 807fd31e9..b7c221562 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -346,7 +346,11 @@ export async function activate(context: ExtensionContext): Promise for (const edit of docChange.edits) { if ("snippet" in edit) { documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); - const snippet = new SnippetTextEdit(client.protocol2CodeConverter.asRange((edit as any).range), new SnippetString((edit as any).snippet.value)); + const snippetValue = (edit as any).snippet.value; + const snippet = new SnippetTextEdit( + client.protocol2CodeConverter.asRange((edit as any).range), + new SnippetString(escapeSnippetLiterals(snippetValue)) + ); if (semver.gte(version, '1.98.0')) { snippet["keepWhitespace"] = true; } @@ -1267,3 +1271,9 @@ function registerRestartJavaLanguageServerCommand(context: ExtensionContext) { } })); } + +function escapeSnippetLiterals(value: string): string { + return value + .replace(/\\/g, '\\\\') // Escape backslashes + .replace(/\$(?!\{)/g, '\\$'); // Escape $ only if NOT followed by { +} From 86550e19cbda23acaf48df5e3869cd8bd467cf19 Mon Sep 17 00:00:00 2001 From: Snjezana Peco Date: Mon, 9 Mar 2026 16:24:55 +0100 Subject: [PATCH 680/708] Support Scala in Gradle projects --- README.md | 1 + package.json | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 425edf87e..d5e2fec88 100644 --- a/README.md +++ b/README.md @@ -234,6 +234,7 @@ The following settings are supported: * `java.jdt.ls.androidSupport.enabled`: [Experimental] Specify whether to enable Android project importing. When set to `auto`, the Android support will be enabled in Visual Studio Code - Insiders. **Note:** Only works for Android Gradle Plugin `3.2.0` or higher. Defaults to `auto`. * `java.jdt.ls.kotlinSupport.enabled`: [Experimental] Specify whether to enable `org.jetbrains.kotlin.jvm` plugin in Gradle projects. Defaults to `true`. * `java.jdt.ls.groovySupport.enabled`: [Experimental] Specify whether to enable `groovy` plugin in Gradle projects. Defaults to `true`. +* `java.jdt.ls.scalaSupport.enabled`: [Experimental] Specify whether to enable `scala` plugin in Gradle projects. Defaults to `true`. * `java.completion.postfix.enabled`: Enable/disable postfix completion support. Defaults to `true`. * `java.completion.chain.enabled`: Enable/disable chain completion support. Defaults to `false`. * `java.completion.matchCase`: Specify whether to match case for code completion. Defaults to `firstLetter`. diff --git a/package.json b/package.json index ff146e413..57c87391b 100644 --- a/package.json +++ b/package.json @@ -413,6 +413,13 @@ "scope": "window", "order": 80 }, + "java.jdt.ls.scalaSupport.enabled": { + "type": "boolean", + "default": true, + "markdownDescription": "[Experimental] Specify whether to enable `scala` plugin in Gradle projects. Defaults to `true`.", + "scope": "window", + "order": 80 + }, "java.jdt.ls.groovySupport.enabled": { "type": "boolean", "default": true, From fd0e5dfea861631b6c6244a44b2162356da16854 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 7 Apr 2026 14:34:04 -0400 Subject: [PATCH 681/708] CHANGELOG for 1.54.0 Signed-off-by: David Thompson --- CHANGELOG.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2d653ec0f..cfad14a79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,23 @@ # Change Log +## 1.54.0 (April 8th, 2026) + * enhancement - Add `serverRunning()` API (v0.14) for progressive loading. See [#4372](https://github.com/redhat-developer/vscode-java/pull/4372). + * enhancement - Add JDK 26. See [#4367](https://github.com/redhat-developer/vscode-java/pull/4367). + * enhancement - Add inlay hints for format parameters. See [#4350](https://github.com/redhat-developer/vscode-java/issues/4350). + * enhancement - Support Scala in Gradle projects. See [#4358](https://github.com/redhat-developer/vscode-java/issues/4358). + * enhancement - Progressive project import notifications for tree view. See [JLS#3744](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3744). + * enhancement - Add Null Annotation quick-fixes from JDT to jdt.ls. See [JLS#3727](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3727). + * enhancement - Remove the first blank line from generated classes created in the default package. See [JLS#3725](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3725). + * enhancement - Add quick-assist to convert a class to a record. See [JLS#3723](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3723). + * enhancement - Enable change compiler compliance quick-fixes. See [JLS#3743](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3743). + * bug fix - Regression in 1.53.0: Gradle import stuck at 70% with Groovy support enabled in custom multi-project settings plugin layout. See [#4360](https://github.com/redhat-developer/vscode-java/issues/4360). + * bug fix - Navigating to a Kotlin class now opens the sources instead of the decompiled code. See [#4345](https://github.com/redhat-developer/vscode-java/issues/4345). + * bug fix - Quick fix "Add throws declaration" removes backslashes and qute fragments. See [#4314](https://github.com/redhat-developer/vscode-java/issues/4314). + * bug fix - Constructor code completion is broken in certain situations. See [#2336](https://github.com/redhat-developer/vscode-java/issues/2336). + * dependencies - bump brace-expansion from 1.1.12 to 1.1.13. See [#4373](https://github.com/redhat-developer/vscode-java/pull/4373). + * dependencies - bump picomatch. See [#4370](https://github.com/redhat-developer/vscode-java/pull/4370). + * dependencies - bump @tootallnate/once and @vscode/test-electron. See [#4355](https://github.com/redhat-developer/vscode-java/pull/4355). + ## 1.53.0 (February 26th, 2026) * enhancement - Kotlin imports into Java file are unresolved. See [#531](https://github.com/redhat-developer/vscode-java/issues/531). * enhancement - After opening the Kotlin class of a downloaded Maven dependency source, show `.kt` file instead of `.class`. See [#4297](https://github.com/redhat-developer/vscode-java/issues/4297). From 8bd39ef742dc4efe8fe2b38f9ed6c792c1eeb55d Mon Sep 17 00:00:00 2001 From: David Thompson Date: Fri, 10 Apr 2026 10:08:40 -0400 Subject: [PATCH 682/708] Update release date Signed-off-by: David Thompson --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index cfad14a79..33c81d401 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.54.0 (April 8th, 2026) +## 1.54.0 (April 13th, 2026) * enhancement - Add `serverRunning()` API (v0.14) for progressive loading. See [#4372](https://github.com/redhat-developer/vscode-java/pull/4372). * enhancement - Add JDK 26. See [#4367](https://github.com/redhat-developer/vscode-java/pull/4367). * enhancement - Add inlay hints for format parameters. See [#4350](https://github.com/redhat-developer/vscode-java/issues/4350). From 711770dfa1ad5b5a3d37f8667b483058aa6f24ab Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 15 Apr 2026 08:51:37 -0400 Subject: [PATCH 683/708] Update release date Signed-off-by: David Thompson --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 33c81d401..5c4d91788 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Change Log -## 1.54.0 (April 13th, 2026) +## 1.54.0 (April 15th, 2026) * enhancement - Add `serverRunning()` API (v0.14) for progressive loading. See [#4372](https://github.com/redhat-developer/vscode-java/pull/4372). * enhancement - Add JDK 26. See [#4367](https://github.com/redhat-developer/vscode-java/pull/4367). * enhancement - Add inlay hints for format parameters. See [#4350](https://github.com/redhat-developer/vscode-java/issues/4350). From c1d24bbe208470a19a29f86100503a5f22aa3d19 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 15 Apr 2026 12:21:20 -0400 Subject: [PATCH 684/708] Bump version to 1.55.0 Signed-off-by: David Thompson --- package-lock.json | 4 ++-- package.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c70622fb..4069fd86d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.54.0", + "version": "1.55.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.54.0", + "version": "1.55.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 57c87391b..87d6e1150 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.54.0", + "version": "1.55.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -2141,4 +2141,4 @@ }, "segmentWriteKey": "Y7Y5Xk8dKEhVZHTmAkFZkqgdN4d7c4lt", "segmentWriteKeyDebug": "BflPll7uuKOCm3y0g7JpfXLVBVFBivDE" -} \ No newline at end of file +} From 6144574f7d409b71706d6c04b4926b3bd73ea9ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 May 2026 19:31:38 +0000 Subject: [PATCH 685/708] build(deps-dev): bump fast-uri from 3.1.0 to 3.1.2 Bumps [fast-uri](https://github.com/fastify/fast-uri) from 3.1.0 to 3.1.2. - [Release notes](https://github.com/fastify/fast-uri/releases) - [Commits](https://github.com/fastify/fast-uri/compare/v3.1.0...v3.1.2) --- updated-dependencies: - dependency-name: fast-uri dependency-version: 3.1.2 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4069fd86d..d6eddb1fd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2427,9 +2427,9 @@ "integrity": "sha512-q8BZ89jjc+mz08rSxROs8VsrBBcn1SIw1kq9NjolL509tkABRk9io01RAjSaEv1Xb2uFLt8VtRiZbGp5H8iDtg==" }, "node_modules/fast-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", - "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", + "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", "dev": true, "funding": [ { From 8bec23010f419a3fa541b6a1ff194fa670b20918 Mon Sep 17 00:00:00 2001 From: MEHER SRUJANA MATCHA Date: Fri, 29 May 2026 11:34:47 +0100 Subject: [PATCH 686/708] Fix #3210: map decorator token to annotation scope --- package.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package.json b/package.json index 87d6e1150..3eb845a54 100644 --- a/package.json +++ b/package.json @@ -182,6 +182,9 @@ "annotation": [ "storage.type.annotation.java" ], + "decorator": [ + "storage.type.annotation.java" + ], "annotationMember": [ "entity.name.annotationMember.java", "constant.other.key.java" From 14fdf792687405911200a458be671a95609caab0 Mon Sep 17 00:00:00 2001 From: MeherSrujana <71970450+MeherSru@users.noreply.github.com> Date: Tue, 16 Jun 2026 14:09:10 +0100 Subject: [PATCH 687/708] Add Copy Fully Qualified Name command (#4428) * Add Copy Fully Qualified Name command * Update command registration tests * Address review comments --------- Co-authored-by: MEHER SRUJANA MATCHA --- package.json | 10 +++++++ package.nls.json | 3 ++- src/commands.ts | 6 +++++ src/extension.ts | 26 +++++++++++++++++++ test/lightweight-mode-suite/extension.test.ts | 3 ++- test/standard-mode-suite/extension.test.ts | 3 +++ 6 files changed, 49 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3eb845a54..9fe83f02d 100644 --- a/package.json +++ b/package.json @@ -1866,6 +1866,11 @@ "command": "java.runtimes.add", "title": "%java.runtimes.add%", "category": "Java" + }, + { + "command": "java.action.copyFullyQualifiedName", + "title": "%java.action.copyFullyQualifiedName%", + "category": "Java" } ], "keybindings": [ @@ -1951,6 +1956,11 @@ "command": "java.action.showTypeHierarchy", "when": "javaLSReady && editorTextFocus && editorLangId == java", "group": "0_navigation@3" + }, + { + "command": "java.action.copyFullyQualifiedName", + "when": "javaLSReady && editorTextFocus && editorLangId == java", + "group": "1_javaactions" } ], "commandPalette": [ diff --git a/package.nls.json b/package.nls.json index 2ac32d40a..c695cfe3e 100644 --- a/package.nls.json +++ b/package.nls.json @@ -30,5 +30,6 @@ "java.action.doCleanup": "Performs Cleanup Actions", "java.change.searchScope": "Change Search Scope", "java.action.showExtendedOutline": "Open Extended Outline", - "java.runtimes.add": "Add Java Runtime" + "java.runtimes.add": "Add Java Runtime", + "java.action.copyFullyQualifiedName": "Copy Fully Qualified Name" } diff --git a/src/commands.ts b/src/commands.ts index be87ca431..ab5aa0543 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -385,6 +385,12 @@ export namespace Commands { * Add Java Runtime */ export const ADD_JAVA_RUNTIME = 'java.runtimes.add'; + + /** + * Copy fully qualified name. + */ + export const COPY_FULLY_QUALIFIED_NAME = 'java.action.copyFullyQualifiedName'; + export const GET_FULLY_QUALIFIED_NAME = 'java.getFullyQualifiedName'; } /** diff --git a/src/extension.ts b/src/extension.ts index b7c221562..c59602ff5 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -558,6 +558,32 @@ export async function activate(context: ExtensionContext): Promise } })); + context.subscriptions.push(commands.registerCommand(Commands.COPY_FULLY_QUALIFIED_NAME, async () => { + const editor = window.activeTextEditor; + if (!editor || editor.document.languageId !== 'java') { + return; + } + + const params = { + textDocument: { + uri: editor.document.uri.toString() + }, + position: { + line: editor.selection.active.line, + character: editor.selection.active.character + } + }; + + const fullyQualifiedName = await commands.executeCommand( + Commands.EXECUTE_WORKSPACE_COMMAND, + Commands.GET_FULLY_QUALIFIED_NAME, + JSON.stringify(params) + ); + + if (fullyQualifiedName) { + await env.clipboard.writeText(fullyQualifiedName); + } + })); registerRestartJavaLanguageServerCommand(context); /** diff --git a/test/lightweight-mode-suite/extension.test.ts b/test/lightweight-mode-suite/extension.test.ts index 1c3f8e08a..bb65dd02e 100644 --- a/test/lightweight-mode-suite/extension.test.ts +++ b/test/lightweight-mode-suite/extension.test.ts @@ -30,7 +30,8 @@ suite('Java Language Extension - LightWeight', () => { Commands.FILESEXPLORER_ONPASTE, Commands.CHANGE_JAVA_SEARCH_SCOPE, Commands.OPEN_JAVA_DASHBOARD, - Commands.ADD_JAVA_RUNTIME + Commands.ADD_JAVA_RUNTIME, + Commands.COPY_FULLY_QUALIFIED_NAME ].sort(); const foundJavaCommands = commands.filter((value) => { return JAVA_COMMANDS.indexOf(value)>=0 || value.startsWith('java.'); diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index a1237467b..3b23a654a 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -128,6 +128,9 @@ suite('Java Language Extension - Standard', () => { Commands.FILESEXPLORER_ONPASTE, Commands.RESOLVE_PASTED_TEXT, Commands.CHANGE_JAVA_SEARCH_SCOPE, + Commands.COPY_FULLY_QUALIFIED_NAME, + Commands.GET_FULLY_QUALIFIED_NAME, + Commands.GET_TROUBLESHOOTING_INFO, Commands.OPEN_JAVA_DASHBOARD, Commands.ADD_JAVA_RUNTIME ].sort(); From 40e69709030784632016608a2ad09ec3636d62ff Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 15 Jun 2026 12:07:53 -0400 Subject: [PATCH 688/708] Sanitize existing command links from hover Javadocs Replace any existing `command:command.name?param=true` style links in hover Javadoc with the display text for the link. eg. `[click here](command:command.name?param=true)` becomes `click here`. Signed-off-by: David Thompson --- .vscode/settings.json | 2 +- src/extension.ts | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4012de914..528142020 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,7 +6,7 @@ "search.exclude": { "out": true // set this to false to include "out" folder in search results }, - "typescript.tsdk": "./node_modules/typescript/lib", + "js/ts.tsdk.path": "./node_modules/typescript/lib", "git.alwaysSignOff": true, "vsicons.presets.angular": false // we want to use the TS server from our node_modules folder to control its version } \ No newline at end of file diff --git a/src/extension.ts b/src/extension.ts index c59602ff5..7cbed65d6 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -110,6 +110,7 @@ function getHeapDumpFolderFromSettings(): string { } const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\\\))|([^)]))+))\)/g; +const EXISTING_COMMAND_PATTERN: RegExp = /\[([^\]]+)\]\(command:[^)]+\)/g; /** * Replace `jdt://` links in the documentation with links that execute the VS Code command required to open the referenced file. @@ -120,7 +121,11 @@ const REPLACE_JDT_LINKS_PATTERN: RegExp = /(\[(?:[^\]])+\]\()(jdt:\/\/(?:(?:(?:\ * @returns the documentation with fixed links */ export function fixJdtLinksInDocumentation(oldDocumentation: MarkdownString): MarkdownString { - const newContent: string = oldDocumentation.value.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { + // sanitize existing command: links + const sanitizedContent = oldDocumentation.value.replace(EXISTING_COMMAND_PATTERN, (_substring, group1: string, group2) => { + return group1; + }); + const newContent: string = sanitizedContent.replace(REPLACE_JDT_LINKS_PATTERN, (_substring, group1, group2) => { const uri = `command:${Commands.OPEN_FILE}?${encodeURI(JSON.stringify([encodeURIComponent(group2)]))}`; return `${group1}${uri})`; }); From 6109b9a755b88747aac9865b2ff9f3864472d2df Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 23 Jun 2026 18:56:39 -0400 Subject: [PATCH 689/708] CHANGELOG for 1.55.0 Signed-off-by: David Thompson --- CHANGELOG.md | 20 ++++++++++++++++++++ changes | 7 +++++++ 2 files changed, 27 insertions(+) create mode 100644 changes diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c4d91788..d08992ad8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,25 @@ # Change Log +## 1.55.0 (June 24, 2026) + * enhancement - Use standard `decorator` instead of `annotation` token type for highlighting Java annotation. See [#4421](https://github.com/redhat-developer/vscode-java/pull/4421). + * enhancement - Add right click menu item to copy the fully qualified name of the identifier under the cursor. See [#374](https://github.com/redhat-developer/vscode-java/issues/374). + * enhancement - Add regenerate hashCode()/equals() method quick-fix. See [JLS#3764](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3764). + * enhancement - Add type annotation quick-fixes. See [JLS#3759](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3759). + * enhancement - Add Java 26 to Gradle/Java Compatibility Matrix. See [JLS#3757](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3757). + * enhancement - Add new quick-fixes (type argument and modifier related). See [JLS#3756](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3756). + * enhancement - Add varargs-related quick-fixes. See [JLS#3754](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3754). + * enhancement - Add new null annotation quick-fixes from upstream JDT. See [JLS#3752](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3752). + * enhancement - Add support for vscode path variables for settings url settings. See [JLS#2529](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/2529). + * bug fix - Sanitize existing command links from hover Javadocs. See [#4429](https://github.com/redhat-developer/vscode-java/pull/4429). + * bug fix - Maven projects 5 folders deep were not loaded as Java projects. See [#4364](https://github.com/redhat-developer/vscode-java/issues/4364). + * bug fix - Prevent Javadoc entries with tables from being truncated in the hover documentation. See [#4219](https://github.com/redhat-developer/vscode-java/issues/4219). + * bug fix - Keep LSP initialize() resilient when m2e is not yet available. See [#3469](https://github.com/redhat-developer/vscode-java/issues/3469). + * bug fix - If the specified type comment template is empty, use the default. See [JLS#3816](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3816). + * bug fix - Prevent setter generation for record components. See [#JLS3812](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3812). + * bug fix - JDTLS batch file fails when located in a folder path with spaces. See [JLS#3783](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3783). + * bug fix - Completion of annotation properties proposes invalid choices. See [JLS#3604](https://github.com/eclipse-jdtls/eclipse.jdt.ls/issues/3604). + * bug fix - Do not offer override/implement actions for annotation types. See [JLS#3814](https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3814). + ## 1.54.0 (April 15th, 2026) * enhancement - Add `serverRunning()` API (v0.14) for progressive loading. See [#4372](https://github.com/redhat-developer/vscode-java/pull/4372). * enhancement - Add JDK 26. See [#4367](https://github.com/redhat-developer/vscode-java/pull/4367). diff --git a/changes b/changes new file mode 100644 index 000000000..92b7e65b1 --- /dev/null +++ b/changes @@ -0,0 +1,7 @@ +Fetching issues from https://api.github.com/repos/redhat-developer/vscode-java/issues?state=closed&milestone=154&page=1 + * enhancement - Fix #3210: map decorator token to annotation scope. See [#4421](https://github.com/redhat-developer/vscode-java/pull/4421). + * enhancement - Add feature: copy fully qualified name . See [#374](https://github.com/redhat-developer/vscode-java/issues/374). + * bug fix - Sanitize existing command links from hover Javadocs. See [#4429](https://github.com/redhat-developer/vscode-java/pull/4429). + * bug fix - Maven project 5 folders deap are not loaded as java projects. See [#4364](https://github.com/redhat-developer/vscode-java/issues/4364). + * bug fix - Very long Javadoc is truncated on hover. See [#4219](https://github.com/redhat-developer/vscode-java/issues/4219). + * bug fix - Failed to initialize language server due to "Internal error. Caused by: NPE: Cannot invoke 'o.e.m.c.e.IMaven.getSettings()' because the return value of 'o.e.m.c.MavenPlugin.getMaven()' is null". See [#3469](https://github.com/redhat-developer/vscode-java/issues/3469). From dbc98239935285430ddcbd2c9ef2efc28d4a1e59 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 29 Jun 2026 11:31:08 -0400 Subject: [PATCH 690/708] Upversion to 1.56.0 Signed-off-by: David Thompson --- package-lock.json | 4 ++-- package.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index d6eddb1fd..c15737e4a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "java", - "version": "1.55.0", + "version": "1.56.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "java", - "version": "1.55.0", + "version": "1.56.0", "license": "EPL-2.0", "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/package.json b/package.json index 9fe83f02d..0b750e53b 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "author": "Red Hat", "icon": "icons/icon128.png", "license": "EPL-2.0", - "version": "1.55.0", + "version": "1.56.0", "publisher": "redhat", "bugs": "https://github.com/redhat-developer/vscode-java/issues", "preview": false, @@ -1868,9 +1868,9 @@ "category": "Java" }, { - "command": "java.action.copyFullyQualifiedName", - "title": "%java.action.copyFullyQualifiedName%", - "category": "Java" + "command": "java.action.copyFullyQualifiedName", + "title": "%java.action.copyFullyQualifiedName%", + "category": "Java" } ], "keybindings": [ From 1be4fb642212d775fad0207d1f39c532583e0aa3 Mon Sep 17 00:00:00 2001 From: wenytang-ms Date: Mon, 29 Jun 2026 14:28:14 +0800 Subject: [PATCH 691/708] Fix Go to Super Implementation hover link not clickable (#4438) The command-link sanitization added in fixJdtSchemeHoverLinks stripped all [label](command:...) links, including the trusted ones the extension contributes (e.g. Go to Super Implementation). Skip sanitizing trusted contributed content; only untrusted server Javadoc is sanitized. Add unit tests covering the hover link sanitization. --- src/hoverAction.ts | 2 +- src/providerDispatcher.ts | 8 ++++- test/standard-mode-suite/hoverLinks.test.ts | 37 +++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 test/standard-mode-suite/hoverLinks.test.ts diff --git a/src/hoverAction.ts b/src/hoverAction.ts index f4e91f4d0..760013524 100644 --- a/src/hoverAction.ts +++ b/src/hoverAction.ts @@ -74,7 +74,7 @@ class JavaHoverProvider implements HoverProvider { } const contributed = new MarkdownString(contributedCommands.map((command) => this.convertCommandToMarkdown(command)).join(' | ')); - contributed.isTrusted = true; + contributed.isTrusted = { enabledCommands: contributedCommands.map((command) => command.command) }; let contents: MarkdownString[] = [ contributed ]; let range; if (serverHover && serverHover.contents) { diff --git a/src/providerDispatcher.ts b/src/providerDispatcher.ts index 3d4e29414..abacbe141 100644 --- a/src/providerDispatcher.ts +++ b/src/providerDispatcher.ts @@ -211,7 +211,13 @@ export function fixJdtSchemeHoverLinks(hover: Hover): Hover { const newContents: (MarkedString | MarkdownString)[] = []; for (const content of hover.contents) { if (content instanceof MarkdownString) { - newContents.push(fixJdtLinksInDocumentation(content)); + // Skip our own trusted contributed commands (e.g. "Go to Super Implementation"); + // only sanitize untrusted server-provided Javadoc. + if (content.isTrusted) { + newContents.push(content); + } else { + newContents.push(fixJdtLinksInDocumentation(content)); + } } else { newContents.push(content); } diff --git a/test/standard-mode-suite/hoverLinks.test.ts b/test/standard-mode-suite/hoverLinks.test.ts new file mode 100644 index 000000000..627dc8867 --- /dev/null +++ b/test/standard-mode-suite/hoverLinks.test.ts @@ -0,0 +1,37 @@ +'use strict'; + +import * as assert from 'assert'; +import { Hover, MarkdownString } from 'vscode'; +import { fixJdtSchemeHoverLinks } from '../../src/providerDispatcher'; + +suite('Hover Links Test', () => { + + test('trusted contributed command links are preserved (super implementation)', () => { + const contributed = new MarkdownString('[Go to Super Implementation](command:java.action.navigateToSuperImplementation?%5B%5D)'); + contributed.isTrusted = { enabledCommands: ['java.action.navigateToSuperImplementation'] }; + const hover = new Hover([contributed]); + + const fixed = fixJdtSchemeHoverLinks(hover); + const value = (fixed.contents[0] as MarkdownString).value; + assert.ok(value.includes('(command:java.action.navigateToSuperImplementation'), 'contributed command link should not be sanitized'); + }); + + test('untrusted server command links are sanitized', () => { + const javadoc = new MarkdownString('[click here](command:evil.command?param=true)'); + const hover = new Hover([javadoc]); + + const fixed = fixJdtSchemeHoverLinks(hover); + const value = (fixed.contents[0] as MarkdownString).value; + assert.strictEqual(value, 'click here', 'server command link should be stripped to its label'); + }); + + test('jdt:// links are converted to command links', () => { + const javadoc = new MarkdownString('[String](jdt://contents/Foo.class)'); + const hover = new Hover([javadoc]); + + const fixed = fixJdtSchemeHoverLinks(hover); + const value = (fixed.contents[0] as MarkdownString).value; + assert.ok(value.includes('(command:'), 'jdt link should be converted to a command link'); + assert.ok(!value.includes('jdt://'), 'jdt scheme should be replaced'); + }); +}); From 35e0173fb02ed73eb141d2386a33e65eb566aada Mon Sep 17 00:00:00 2001 From: MEHER SRUJANA MATCHA Date: Tue, 23 Jun 2026 16:11:22 +0100 Subject: [PATCH 692/708] #2906 Refactor activate() --- src/extension.ts | 52 ++++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 15 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 7cbed65d6..645891a50 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -195,7 +195,11 @@ export async function activate(context: ExtensionContext): Promise } } - return requirements.resolveRequirements(context).catch(error => { + let requirementsData: requirements.RequirementsData; + + try { + requirementsData = await requirements.resolveRequirements(context); + } catch (error) { // show error window.showErrorMessage(error.message, error.label).then((selection) => { if (error.label && error.label === selection && error.command) { @@ -204,9 +208,8 @@ export async function activate(context: ExtensionContext): Promise }); // rethrow to disrupt the chain. throw error; - }).then(async (requirements) => { + } const triggerFiles = await getTriggerFiles(); - return new Promise(async (resolve) => { const syntaxServerWorkspacePath = path.resolve(`${storagePath}/ss_ws`); let serverMode = getJavaServerMode(); @@ -217,10 +220,10 @@ export async function activate(context: ExtensionContext): Promise commands.executeCommand('setContext', 'java:serverMode', serverMode); const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; const requireSyntaxServer = (serverMode !== ServerMode.standard) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); - let requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); + const requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); let initFailureReported: boolean = false; - const javaConfig = await getJavaConfig(requirements.java_home); + const javaConfig = await getJavaConfig(requirementsData.java_home); javaConfigDeferred.resolve(javaConfig); // Options to control the language client @@ -274,7 +277,7 @@ export async function activate(context: ExtensionContext): Promise didChangeConfiguration: async () => { await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { settings: { - java: await getJavaConfig(requirements.java_home), + java: await getJavaConfig(requirementsData.java_home), } }); } @@ -424,13 +427,35 @@ export async function activate(context: ExtensionContext): Promise outputChannelName: extensionName }; - apiManager.initialize(requirements, serverMode); + apiManager.initialize(requirementsData, serverMode); registerCodeCompletionTelemetryListener(); - resolve(apiManager.getApiInstance()); - // the promise is resolved - // no need to pass `resolve` into any code past this point, - // since `resolve` is a no-op from now on - if (requireSyntaxServer) { + void postExtensionStartInit( + context, + requirementsData, + clientOptions, + workspacePath, + syntaxServerWorkspacePath, + serverMode, + requireSyntaxServer, + requireStandardServer, + cleanWorkspaceExists + ); + + return apiManager.getApiInstance(); +} + +async function postExtensionStartInit( + context: ExtensionContext, + requirements: requirements.RequirementsData, + clientOptions: LanguageClientOptions, + workspacePath: string, + syntaxServerWorkspacePath: string, + serverMode: ServerMode, + requireSyntaxServer: boolean, + requireStandardServer: boolean, + cleanWorkspaceExists: boolean +): Promise { + if (requireSyntaxServer) { const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); excutable.resolve(serverOptions); if (process.env['SYNTAXLS_CLIENT_PORT']) { @@ -699,10 +724,7 @@ export async function activate(context: ExtensionContext): Promise })); } context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextDocumentChanges(event.document, event.contentChanges))); - }); - }); } - async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, triggeredByCommand: boolean = false) { if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { return; From 47627fec08b6c898ea9583263ea976028d9ee806 Mon Sep 17 00:00:00 2001 From: MEHER SRUJANA MATCHA Date: Wed, 24 Jun 2026 10:11:19 +0100 Subject: [PATCH 693/708] Address PR review comments --- src/extension.ts | 912 +++++++++++++++++++++++------------------------ 1 file changed, 456 insertions(+), 456 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 645891a50..4f2072a96 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -209,239 +209,239 @@ export async function activate(context: ExtensionContext): Promise // rethrow to disrupt the chain. throw error; } - const triggerFiles = await getTriggerFiles(); - const syntaxServerWorkspacePath = path.resolve(`${storagePath}/ss_ws`); + const triggerFiles = await getTriggerFiles(); + const syntaxServerWorkspacePath = path.resolve(`${storagePath}/ss_ws`); - let serverMode = getJavaServerMode(); - const isWorkspaceTrusted = (workspace as any).isTrusted; // TODO: use workspace.isTrusted directly when other clients catch up to adopt 1.56.0 - if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 - serverMode = ServerMode.lightWeight; - } - commands.executeCommand('setContext', 'java:serverMode', serverMode); - const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; - const requireSyntaxServer = (serverMode !== ServerMode.standard) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); - const requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); - let initFailureReported: boolean = false; - - const javaConfig = await getJavaConfig(requirementsData.java_home); - javaConfigDeferred.resolve(javaConfig); - - // Options to control the language client - const clientOptions: LanguageClientOptions = { - // Register the server for java - documentSelector: [ - { scheme: 'file', language: 'java' }, - { scheme: 'jdt', language: 'java' }, - { scheme: 'untitled', language: 'java' }, - { scheme: 'vscode-notebook-cell', language: 'java' } - ], - synchronize: { - configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize', "files.associations"], - }, - initializationOptions: { - bundles: collectJavaExtensions(extensions.all), - workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, - settings: { java: javaConfig }, - extendedClientCapabilities: { - classFileContentsSupport: true, - overrideMethodsPromptSupport: true, - hashCodeEqualsPromptSupport: true, - advancedOrganizeImportsSupport: true, - generateToStringPromptSupport: true, - advancedGenerateAccessorsSupport: true, - generateConstructorsPromptSupport: true, - generateDelegateMethodsPromptSupport: true, - advancedExtractRefactoringSupport: true, - inferSelectionSupport: ["extractMethod", "extractVariable", "extractField"], - moveRefactoringSupport: true, - clientHoverProvider: true, - clientDocumentSymbolProvider: true, - gradleChecksumWrapperPromptSupport: true, - advancedIntroduceParameterRefactoringSupport: true, - actionableRuntimeNotificationSupport: true, - onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", - extractInterfaceSupport: true, - advancedUpgradeGradleSupport: true, - executeClientCommandSupport: true, - snippetEditSupport: true, - nonStandardJavaFormatting : { - schemes: ["vscode-notebook-cell"], - extensions: ["jsh", "jshell", "ipynb"], - getContentCallback: Commands.GET_VISIBLE_EDITOR_CONTENT, + let serverMode = getJavaServerMode(); + const isWorkspaceTrusted = (workspace as any).isTrusted; // TODO: use workspace.isTrusted directly when other clients catch up to adopt 1.56.0 + if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 + serverMode = ServerMode.lightWeight; + } + commands.executeCommand('setContext', 'java:serverMode', serverMode); + const isDebugModeByClientPort = !!process.env['SYNTAXLS_CLIENT_PORT'] || !!process.env['JDTLS_CLIENT_PORT']; + const requireSyntaxServer = (serverMode !== ServerMode.standard) && (!isDebugModeByClientPort || !!process.env['SYNTAXLS_CLIENT_PORT']); + const requireStandardServer = (serverMode !== ServerMode.lightWeight) && (!isDebugModeByClientPort || !!process.env['JDTLS_CLIENT_PORT']); + let initFailureReported: boolean = false; + + const javaConfig = await getJavaConfig(requirementsData.java_home); + javaConfigDeferred.resolve(javaConfig); + + // Options to control the language client + const clientOptions: LanguageClientOptions = { + // Register the server for java + documentSelector: [ + { scheme: 'file', language: 'java' }, + { scheme: 'jdt', language: 'java' }, + { scheme: 'untitled', language: 'java' }, + { scheme: 'vscode-notebook-cell', language: 'java' } + ], + synchronize: { + configurationSection: ['java', 'editor.insertSpaces', 'editor.tabSize', "files.associations"], + }, + initializationOptions: { + bundles: collectJavaExtensions(extensions.all), + workspaceFolders: workspace.workspaceFolders ? workspace.workspaceFolders.map(f => f.uri.toString()) : null, + settings: { java: javaConfig }, + extendedClientCapabilities: { + classFileContentsSupport: true, + overrideMethodsPromptSupport: true, + hashCodeEqualsPromptSupport: true, + advancedOrganizeImportsSupport: true, + generateToStringPromptSupport: true, + advancedGenerateAccessorsSupport: true, + generateConstructorsPromptSupport: true, + generateDelegateMethodsPromptSupport: true, + advancedExtractRefactoringSupport: true, + inferSelectionSupport: ["extractMethod", "extractVariable", "extractField"], + moveRefactoringSupport: true, + clientHoverProvider: true, + clientDocumentSymbolProvider: true, + gradleChecksumWrapperPromptSupport: true, + advancedIntroduceParameterRefactoringSupport: true, + actionableRuntimeNotificationSupport: true, + onCompletionItemSelectedCommand: "editor.action.triggerParameterHints", + extractInterfaceSupport: true, + advancedUpgradeGradleSupport: true, + executeClientCommandSupport: true, + snippetEditSupport: true, + nonStandardJavaFormatting: { + schemes: ["vscode-notebook-cell"], + extensions: ["jsh", "jshell", "ipynb"], + getContentCallback: Commands.GET_VISIBLE_EDITOR_CONTENT, + } + }, + triggerFiles, + }, + middleware: { + workspace: { + didChangeConfiguration: async () => { + await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { + settings: { + java: await getJavaConfig(requirementsData.java_home), } - }, - triggerFiles, - }, - middleware: { - workspace: { - didChangeConfiguration: async () => { - await standardClient.getClient().sendNotification(DidChangeConfigurationNotification.type, { - settings: { - java: await getJavaConfig(requirementsData.java_home), + }); + } + }, + resolveCompletionItem: async (item, token, next): Promise => { + const completionItem = await next(item, token); + if (completionItem?.documentation instanceof MarkdownString) { + completionItem.documentation = fixJdtLinksInDocumentation(completionItem.documentation); + } + return completionItem; + }, + // https://github.com/redhat-developer/vscode-java/issues/2130 + // include all diagnostics for the current line in the CodeActionContext params for the performance reason + provideCodeActions: async (document, range, context, token, next) => { + const client: LanguageClient = standardClient.getClient(); + const params: CodeActionParams = { + textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), + range: client.code2ProtocolConverter.asRange(range), + context: await client.code2ProtocolConverter.asCodeActionContext(context) + }; + const showAt = getJavaConfiguration().get("quickfix.showAt"); + if (showAt === 'line' && range.start.line === range.end.line && range.start.character === range.end.character) { + const textLine = document.lineAt(params.range.start.line); + if (textLine !== null) { + const diagnostics = client.diagnostics.get(document.uri); + const allDiagnostics: Diagnostic[] = []; + for (const diagnostic of diagnostics) { + if (textLine.range.intersection(diagnostic.range)) { + const newLen = allDiagnostics.push(diagnostic); + if (newLen > 1000) { + break; } - }); - } - }, - resolveCompletionItem: async (item, token, next): Promise => { - const completionItem = await next(item, token); - if (completionItem?.documentation instanceof MarkdownString) { - completionItem.documentation = fixJdtLinksInDocumentation(completionItem.documentation); + } } - return completionItem; - }, - // https://github.com/redhat-developer/vscode-java/issues/2130 - // include all diagnostics for the current line in the CodeActionContext params for the performance reason - provideCodeActions: async (document, range, context, token, next) => { - const client: LanguageClient = standardClient.getClient(); - const params: CodeActionParams = { - textDocument: client.code2ProtocolConverter.asTextDocumentIdentifier(document), - range: client.code2ProtocolConverter.asRange(range), - context: await client.code2ProtocolConverter.asCodeActionContext(context) + const codeActionContext: CodeActionContext = { + diagnostics: allDiagnostics, + only: context.only, + triggerKind: context.triggerKind, }; - const showAt = getJavaConfiguration().get("quickfix.showAt"); - if (showAt === 'line' && range.start.line === range.end.line && range.start.character === range.end.character) { - const textLine = document.lineAt(params.range.start.line); - if (textLine !== null) { - const diagnostics = client.diagnostics.get(document.uri); - const allDiagnostics: Diagnostic[] = []; - for (const diagnostic of diagnostics) { - if (textLine.range.intersection(diagnostic.range)) { - const newLen = allDiagnostics.push(diagnostic); - if (newLen > 1000) { - break; + params.context = await client.code2ProtocolConverter.asCodeActionContext(codeActionContext); + } + } + return client.sendRequest(CodeActionRequest.type, params, token).then(async (values) => { + if (values === null) { + return undefined; + } + const result = []; + for (const item of values) { + if (Command.is(item)) { + result.push(client.protocol2CodeConverter.asCommand(item)); + } + else { + result.push(await client.protocol2CodeConverter.asCodeAction(item)); + } + } + return result; + }, (error) => { + return client.handleFailedRequest(CodeActionRequest.type, token, error, []); + }); + }, + + resolveCodeAction: async (item, token, next) => { + const client: LanguageClient = standardClient.getClient(); + const documentUris = []; + const snippetEdits = []; + return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then(async (result) => { + if (token.isCancellationRequested) { + return item; + } + const docChanges = result.edit !== undefined ? result.edit.documentChanges : undefined; + if (docChanges !== undefined) { + for (const docChange of docChanges) { + if ("textDocument" in docChange) { + for (const edit of docChange.edits) { + if ("snippet" in edit) { + documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); + const snippetValue = (edit as any).snippet.value; + const snippet = new SnippetTextEdit( + client.protocol2CodeConverter.asRange((edit as any).range), + new SnippetString(escapeSnippetLiterals(snippetValue)) + ); + if (semver.gte(version, '1.98.0')) { + snippet["keepWhitespace"] = true; } + snippetEdits.push(snippet); } } - const codeActionContext: CodeActionContext = { - diagnostics: allDiagnostics, - only: context.only, - triggerKind: context.triggerKind, - }; - params.context = await client.code2ProtocolConverter.asCodeActionContext(codeActionContext); } } - return client.sendRequest(CodeActionRequest.type, params, token).then(async (values) => { - if (values === null) { - return undefined; - } - const result = []; - for (const item of values) { - if (Command.is(item)) { - result.push(client.protocol2CodeConverter.asCommand(item)); - } - else { - result.push(await client.protocol2CodeConverter.asCodeAction(item)); - } - } - return result; - }, (error) => { - return client.handleFailedRequest(CodeActionRequest.type, token, error, []); - }); - }, - - resolveCodeAction: async (item, token, next) => { - const client: LanguageClient = standardClient.getClient(); - const documentUris = []; - const snippetEdits = []; - return client.sendRequest(CodeActionResolveRequest.type, client.code2ProtocolConverter.asCodeActionSync(item), token).then(async (result) => { - if (token.isCancellationRequested) { - return item; - } - const docChanges = result.edit !== undefined ? result.edit.documentChanges : undefined; - if (docChanges !== undefined) { - for (const docChange of docChanges) { - if ("textDocument" in docChange) { - for (const edit of docChange.edits) { - if ("snippet" in edit) { - documentUris.push(Uri.parse(docChange.textDocument.uri).toString()); - const snippetValue = (edit as any).snippet.value; - const snippet = new SnippetTextEdit( - client.protocol2CodeConverter.asRange((edit as any).range), - new SnippetString(escapeSnippetLiterals(snippetValue)) - ); - if (semver.gte(version, '1.98.0')) { - snippet["keepWhitespace"] = true; - } - snippetEdits.push(snippet); - } + const codeAction = await client.protocol2CodeConverter.asCodeAction(result, token); + const docEdits = codeAction.edit !== undefined ? codeAction.edit.entries() : []; + for (const docEdit of docEdits) { + const uri = docEdit[0]; + if (documentUris.includes(uri.toString())) { + const editList = []; + for (const edit of docEdit[1]) { + let isSnippet = false; + snippetEdits.forEach((snippet, index) => { + if (edit.range.isEqual(snippet.range) && documentUris[index] === uri.toString()) { + editList.push(snippet); + isSnippet = true; } + }); + if (!isSnippet) { + editList.push(edit); } } - const codeAction = await client.protocol2CodeConverter.asCodeAction(result, token); - const docEdits = codeAction.edit !== undefined? codeAction.edit.entries() : []; - for (const docEdit of docEdits) { - const uri = docEdit[0]; - if (documentUris.includes(uri.toString())) { - const editList = []; - for (const edit of docEdit[1]) { - let isSnippet = false; - snippetEdits.forEach((snippet, index) => { - if (edit.range.isEqual(snippet.range) && documentUris[index] === uri.toString()) { - editList.push(snippet); - isSnippet = true; - } - }); - if (!isSnippet) { - editList.push(edit); - } - } - codeAction.edit.set(uri, null); - codeAction.edit.set(uri, editList); - } - } - return codeAction; + codeAction.edit.set(uri, null); + codeAction.edit.set(uri, editList); } - return await client.protocol2CodeConverter.asCodeAction(result, token); - }, (error) => { - return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item); - }); - }, - - provideReferences: async(document, position, options, token, next): Promise => { - // Override includeDeclaration from VS Code by allowing it to be configured - options.includeDeclaration = getJavaConfiguration().get('references.includeDeclarations'); - return await next(document, position, options, token); - } - }, - revealOutputChannelOn: RevealOutputChannelOn.Never, - errorHandler: new ClientErrorHandler(extensionName), - initializationFailedHandler: error => { - logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); - if ((error.toString().includes('Connection') && error.toString().includes('disposed')) || error.toString().includes('Internal error')) { - if (!initFailureReported) { - apiManager.fireTraceEvent({ - name: "java.client.error.initialization", - properties: { - message: error && error.toString(), - data: resolveActualCause(error?.data), - }, - }); } - initFailureReported = true; - return false; - } else { - return true; + return codeAction; } - }, - outputChannel: requireStandardServer ? new OutputInfoCollector(extensionName) : undefined, - outputChannelName: extensionName - }; + return await client.protocol2CodeConverter.asCodeAction(result, token); + }, (error) => { + return client.handleFailedRequest(CodeActionResolveRequest.type, token, error, item); + }); + }, + + provideReferences: async (document, position, options, token, next): Promise => { + // Override includeDeclaration from VS Code by allowing it to be configured + options.includeDeclaration = getJavaConfiguration().get('references.includeDeclarations'); + return await next(document, position, options, token); + } + }, + revealOutputChannelOn: RevealOutputChannelOn.Never, + errorHandler: new ClientErrorHandler(extensionName), + initializationFailedHandler: error => { + logger.error(`Failed to initialize ${extensionName} due to ${error && error.toString()}`); + if ((error.toString().includes('Connection') && error.toString().includes('disposed')) || error.toString().includes('Internal error')) { + if (!initFailureReported) { + apiManager.fireTraceEvent({ + name: "java.client.error.initialization", + properties: { + message: error && error.toString(), + data: resolveActualCause(error?.data), + }, + }); + } + initFailureReported = true; + return false; + } else { + return true; + } + }, + outputChannel: requireStandardServer ? new OutputInfoCollector(extensionName) : undefined, + outputChannelName: extensionName + }; - apiManager.initialize(requirementsData, serverMode); - registerCodeCompletionTelemetryListener(); - void postExtensionStartInit( - context, - requirementsData, - clientOptions, - workspacePath, - syntaxServerWorkspacePath, - serverMode, - requireSyntaxServer, - requireStandardServer, - cleanWorkspaceExists - ); - - return apiManager.getApiInstance(); + apiManager.initialize(requirementsData, serverMode); + registerCodeCompletionTelemetryListener(); + void postExtensionStartInit( + context, + requirementsData, + clientOptions, + workspacePath, + syntaxServerWorkspacePath, + serverMode, + requireSyntaxServer, + requireStandardServer, + cleanWorkspaceExists + ); + + return apiManager.getApiInstance(); } async function postExtensionStartInit( @@ -456,274 +456,274 @@ async function postExtensionStartInit( cleanWorkspaceExists: boolean ): Promise { if (requireSyntaxServer) { - const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); - excutable.resolve(serverOptions); - if (process.env['SYNTAXLS_CLIENT_PORT']) { - syntaxClient.initialize(requirements, clientOptions); - } else { - syntaxClient.initialize(requirements, clientOptions, serverOptions); - } - syntaxClient.start().then(() => { - syntaxClient.registerSyntaxClientActions(serverOptions); - }); - serverStatusBarProvider.showLightWeightStatus(); - } + const serverOptions = prepareExecutable(requirements, syntaxServerWorkspacePath, context, true); + excutable.resolve(serverOptions); + if (process.env['SYNTAXLS_CLIENT_PORT']) { + syntaxClient.initialize(requirements, clientOptions); + } else { + syntaxClient.initialize(requirements, clientOptions, serverOptions); + } + syntaxClient.start().then(() => { + syntaxClient.registerSyntaxClientActions(serverOptions); + }); + serverStatusBarProvider.showLightWeightStatus(); + } - context.subscriptions.push(commands.registerCommand(Commands.EXECUTE_WORKSPACE_COMMAND, (command, ...rest) => { - const api: ExtensionAPI = apiManager.getApiInstance(); - if (api.serverMode === ServerMode.lightWeight) { - console.warn(`The command: ${command} is not supported in LightWeight mode. See: https://github.com/redhat-developer/vscode-java/issues/1480`); - return; - } - let token: CancellationToken; - let commandArgs: any[] = rest; - if (rest && rest.length && CancellationToken.is(rest[rest.length - 1])) { - token = rest[rest.length - 1]; - commandArgs = rest.slice(0, rest.length - 1); - } - const params: ExecuteCommandParams = { - command, - arguments: commandArgs - }; - if (token) { - return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params, token); - } else { - return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params); - } - })); - - if (cleanWorkspaceExists) { - const data = {}; - try { - cleanupLombokCache(context); - cleanupWorkspaceState(context); - deleteDirectory(workspacePath); - deleteDirectory(syntaxServerWorkspacePath); - cleanJavaLSConfiguration(context); - } catch (error) { - data['error'] = getMessage(error); - window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); - } - await Telemetry.sendTelemetry(Commands.CLEAN_WORKSPACE, data); - } + context.subscriptions.push(commands.registerCommand(Commands.EXECUTE_WORKSPACE_COMMAND, (command, ...rest) => { + const api: ExtensionAPI = apiManager.getApiInstance(); + if (api.serverMode === ServerMode.lightWeight) { + console.warn(`The command: ${command} is not supported in LightWeight mode. See: https://github.com/redhat-developer/vscode-java/issues/1480`); + return; + } + let token: CancellationToken; + let commandArgs: any[] = rest; + if (rest && rest.length && CancellationToken.is(rest[rest.length - 1])) { + token = rest[rest.length - 1]; + commandArgs = rest.slice(0, rest.length - 1); + } + const params: ExecuteCommandParams = { + command, + arguments: commandArgs + }; + if (token) { + return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params, token); + } else { + return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params); + } + })); - // Register commands here to make it available even when the language client fails - context.subscriptions.push(commands.registerCommand(Commands.OPEN_STATUS_SHORTCUT, async (status: string) => { - const items: ShortcutQuickPickItem[] = []; - if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { - commands.executeCommand("workbench.panel.markers.view.focus"); - } else { - commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS, true); - } + if (cleanWorkspaceExists) { + const data = {}; + try { + cleanupLombokCache(context); + cleanupWorkspaceState(context); + deleteDirectory(workspacePath); + deleteDirectory(syntaxServerWorkspacePath); + cleanJavaLSConfiguration(context); + } catch (error) { + data['error'] = getMessage(error); + window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); + } + await Telemetry.sendTelemetry(Commands.CLEAN_WORKSPACE, data); + } - items.push(...getShortcuts().map((shortcut: IJavaShortcut) => { - return { - label: shortcut.title, - command: shortcut.command, - args: shortcut.arguments, - }; - })); - - const choice = await window.showQuickPick(items); - if (!choice) { - return; - } + // Register commands here to make it available even when the language client fails + context.subscriptions.push(commands.registerCommand(Commands.OPEN_STATUS_SHORTCUT, async (status: string) => { + const items: ShortcutQuickPickItem[] = []; + if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { + commands.executeCommand("workbench.panel.markers.view.focus"); + } else { + commands.executeCommand(Commands.SHOW_SERVER_TASK_STATUS, true); + } - apiManager.fireTraceEvent({ - name: "triggerShortcutCommand", - properties: { - message: choice.command, - }, - }); + items.push(...getShortcuts().map((shortcut: IJavaShortcut) => { + return { + label: shortcut.title, + command: shortcut.command, + args: shortcut.arguments, + }; + })); - if (choice.command) { - commands.executeCommand(choice.command, ...(choice.args || [])); - } - })); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(storagePath, column))); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.out-jdt.ls', column))); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.error-jdt.ls', column))); - - context.subscriptions.push(commands.registerCommand(Commands.OPEN_CLIENT_LOG, (column: ViewColumn) => openClientLogFile(clientLogFile, column))); - - context.subscriptions.push(commands.registerCommand(Commands.OPEN_LOGS, () => openLogs())); - - context.subscriptions.push(commands.registerCommand(Commands.OPEN_FORMATTER, async () => openFormatter(context.extensionPath))); - context.subscriptions.push(commands.registerCommand(Commands.OPEN_FILE, async (uri: string) => { - const parsedUri = Uri.parse(uri); - const editor = await window.showTextDocument(parsedUri); - // Reveal the document at the specified line, if possible (e.g. jumping to a specific javadoc method). - if (editor && parsedUri.scheme === 'jdt' && parsedUri.fragment) { - const line = parseInt(parsedUri.fragment); - if (isNaN(line) || line < 1 || line > editor.document.lineCount) { - return; - } - const range = editor.document.lineAt(line -1).range; - editor.revealRange(range, TextEditorRevealType.AtTop); - } - })); + const choice = await window.showQuickPick(items); + if (!choice) { + return; + } - context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); - context.subscriptions.push(commands.registerCommand(Commands.CLEAN_SHARED_INDEXES, () => cleanSharedIndexes(context))); + apiManager.fireTraceEvent({ + name: "triggerShortcutCommand", + properties: { + message: choice.command, + }, + }); - context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); + if (choice.command) { + commands.executeCommand(choice.command, ...(choice.args || [])); + } + })); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_LOG, (column: ViewColumn) => openServerLogFile(storagePath, column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDOUT_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.out-jdt.ls', column))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_SERVER_STDERR_LOG, (column: ViewColumn) => openRollingServerLogFile(storagePath, '.error-jdt.ls', column))); + + context.subscriptions.push(commands.registerCommand(Commands.OPEN_CLIENT_LOG, (column: ViewColumn) => openClientLogFile(clientLogFile, column))); + + context.subscriptions.push(commands.registerCommand(Commands.OPEN_LOGS, () => openLogs())); + + context.subscriptions.push(commands.registerCommand(Commands.OPEN_FORMATTER, async () => openFormatter(context.extensionPath))); + context.subscriptions.push(commands.registerCommand(Commands.OPEN_FILE, async (uri: string) => { + const parsedUri = Uri.parse(uri); + const editor = await window.showTextDocument(parsedUri); + // Reveal the document at the specified line, if possible (e.g. jumping to a specific javadoc method). + if (editor && parsedUri.scheme === 'jdt' && parsedUri.fragment) { + const line = parseInt(parsedUri.fragment); + if (isNaN(line) || line < 1 || line > editor.document.lineCount) { + return; + } + const range = editor.document.lineAt(line - 1).range; + editor.revealRange(range, TextEditorRevealType.AtTop); + } + })); - context.subscriptions.push(commands.registerCommand(Commands.REFRESH_BUNDLES_COMMAND, () => { - return getBundlesToReload(); - })); + context.subscriptions.push(commands.registerCommand(Commands.CLEAN_WORKSPACE, (force?: boolean) => cleanWorkspace(workspacePath, force))); + context.subscriptions.push(commands.registerCommand(Commands.CLEAN_SHARED_INDEXES, () => cleanSharedIndexes(context))); - context.subscriptions.push(onConfigurationChange(workspacePath, context)); + context.subscriptions.push(commands.registerCommand(Commands.GET_WORKSPACE_PATH, () => workspacePath)); - context.subscriptions.push(commands.registerCommand(Commands.GET_VISIBLE_EDITOR_CONTENT, (uri: string) => { - for (const editor of window.visibleTextEditors) { - if (editor.document.uri.toString() === uri) { - return editor.document.getText(); - } - } - const editor = window.activeTextEditor; - if (editor) { - return editor.document.getText(); - } else { - return null; - } - })); + context.subscriptions.push(commands.registerCommand(Commands.REFRESH_BUNDLES_COMMAND, () => { + return getBundlesToReload(); + })); - context.subscriptions.push(commands.registerCommand(Commands.COPY_FULLY_QUALIFIED_NAME, async () => { - const editor = window.activeTextEditor; - if (!editor || editor.document.languageId !== 'java') { - return; - } + context.subscriptions.push(onConfigurationChange(workspacePath, context)); - const params = { - textDocument: { - uri: editor.document.uri.toString() - }, - position: { - line: editor.selection.active.line, - character: editor.selection.active.character - } - }; + context.subscriptions.push(commands.registerCommand(Commands.GET_VISIBLE_EDITOR_CONTENT, (uri: string) => { + for (const editor of window.visibleTextEditors) { + if (editor.document.uri.toString() === uri) { + return editor.document.getText(); + } + } + const editor = window.activeTextEditor; + if (editor) { + return editor.document.getText(); + } else { + return null; + } + })); - const fullyQualifiedName = await commands.executeCommand( - Commands.EXECUTE_WORKSPACE_COMMAND, - Commands.GET_FULLY_QUALIFIED_NAME, - JSON.stringify(params) - ); + context.subscriptions.push(commands.registerCommand(Commands.COPY_FULLY_QUALIFIED_NAME, async () => { + const editor = window.activeTextEditor; + if (!editor || editor.document.languageId !== 'java') { + return; + } - if (fullyQualifiedName) { - await env.clipboard.writeText(fullyQualifiedName); - } - })); - registerRestartJavaLanguageServerCommand(context); - - /** - * Command to switch the server mode. Currently it only supports switch from lightweight to standard. - * @param force force to switch server mode without asking - */ - commands.registerCommand(Commands.SWITCH_SERVER_MODE, async (switchTo: ServerMode, force: boolean = false) => { - const isWorkspaceTrusted = (workspace as any).isTrusted; - if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 - const button = "Manage Workspace Trust"; - const choice = await window.showInformationMessage("For security concern, Java language server cannot be switched to Standard mode in untrusted workspaces.", button); - if (choice === button) { - commands.executeCommand("workbench.trust.manage"); - } - return; - } + const params = { + textDocument: { + uri: editor.document.uri.toString() + }, + position: { + line: editor.selection.active.line, + character: editor.selection.active.character + } + }; - const clientStatus: ClientStatus = standardClient.getClientStatus(); - if (clientStatus === ClientStatus.starting || clientStatus === ClientStatus.started) { - return; - } + const fullyQualifiedName = await commands.executeCommand( + Commands.EXECUTE_WORKSPACE_COMMAND, + Commands.GET_FULLY_QUALIFIED_NAME, + JSON.stringify(params) + ); - const api: ExtensionAPI = apiManager.getApiInstance(); - if (!force && (api.serverMode === switchTo || api.serverMode === ServerMode.standard)) { - return; - } + if (fullyQualifiedName) { + await env.clipboard.writeText(fullyQualifiedName); + } + })); + registerRestartJavaLanguageServerCommand(context); + + /** + * Command to switch the server mode. Currently it only supports switch from lightweight to standard. + * @param force force to switch server mode without asking + */ + commands.registerCommand(Commands.SWITCH_SERVER_MODE, async (switchTo: ServerMode, force: boolean = false) => { + const isWorkspaceTrusted = (workspace as any).isTrusted; + if (isWorkspaceTrusted !== undefined && !isWorkspaceTrusted) { // keep compatibility for old engines < 1.56.0 + const button = "Manage Workspace Trust"; + const choice = await window.showInformationMessage("For security concern, Java language server cannot be switched to Standard mode in untrusted workspaces.", button); + if (choice === button) { + commands.executeCommand("workbench.trust.manage"); + } + return; + } - let choice: string; - if (force) { - choice = "Yes"; - } else { - choice = await window.showInformationMessage("Are you sure you want to switch the Java language server to Standard mode?", "Yes", "No"); - } + const clientStatus: ClientStatus = standardClient.getClientStatus(); + if (clientStatus === ClientStatus.starting || clientStatus === ClientStatus.started) { + return; + } - if (choice === "Yes") { - await startStandardServer(context, requirements, clientOptions, workspacePath, true /* triggeredByCommand */); - } - }); + const api: ExtensionAPI = apiManager.getApiInstance(); + if (!force && (api.serverMode === switchTo || api.serverMode === ServerMode.standard)) { + return; + } - context.subscriptions.push(commands.registerCommand(Commands.CHANGE_JAVA_SEARCH_SCOPE, async () => { - const selection = await window.showQuickPick(["all", "main"], { - canPickMany: false, - placeHolder: `Current: ${workspace.getConfiguration().get("java.search.scope")}`, - }); - if(selection) { - workspace.getConfiguration().update("java.search.scope", selection, false); - } - })); + let choice: string; + if (force) { + choice = "Yes"; + } else { + choice = await window.showInformationMessage("Are you sure you want to switch the Java language server to Standard mode?", "Yes", "No"); + } - context.subscriptions.push(snippetCompletionProvider.initialize()); - context.subscriptions.push(serverStatusBarProvider); - context.subscriptions.push(languageStatusBarProvider); + if (choice === "Yes") { + await startStandardServer(context, requirements, clientOptions, workspacePath, true /* triggeredByCommand */); + } + }); - const classEditorProviderRegistration = window.registerCustomEditorProvider(JavaClassEditorProvider.viewType, new JavaClassEditorProvider(context)); - context.subscriptions.push(classEditorProviderRegistration); + context.subscriptions.push(commands.registerCommand(Commands.CHANGE_JAVA_SEARCH_SCOPE, async () => { + const selection = await window.showQuickPick(["all", "main"], { + canPickMany: false, + placeHolder: `Current: ${workspace.getConfiguration().get("java.search.scope")}`, + }); + if (selection) { + workspace.getConfiguration().update("java.search.scope", selection, false); + } + })); - registerClientProviders(context, { contentProviderEvent: jdtEventEmitter.event }); + context.subscriptions.push(snippetCompletionProvider.initialize()); + context.subscriptions.push(serverStatusBarProvider); + context.subscriptions.push(languageStatusBarProvider); - apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { - if (event === ServerMode.standard) { - syntaxClient.stop(); - fileEventHandler.setServerStatus(true); - languageStatusBarProvider.initialize(context); - } - commands.executeCommand('setContext', 'java:serverMode', event); - }); + const classEditorProviderRegistration = window.registerCustomEditorProvider(JavaClassEditorProvider.viewType, new JavaClassEditorProvider(context)); + context.subscriptions.push(classEditorProviderRegistration); - if (serverMode === ServerMode.hybrid && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { - const config = getJavaConfiguration(); - const importOnStartupSection: string = "project.importOnFirstTimeStartup"; - const importOnStartup = config.get(importOnStartupSection); - if (importOnStartup === "disabled" || - env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { - apiManager.getApiInstance().serverMode = ServerMode.lightWeight; - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - requireStandardServer = false; - } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { - apiManager.getApiInstance().serverMode = ServerMode.lightWeight; - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - requireStandardServer = await promptUserForStandardServer(config); - } else { - requireStandardServer = true; - } - } + registerClientProviders(context, { contentProviderEvent: jdtEventEmitter.event }); - if (requireStandardServer) { - await startStandardServer(context, requirements, clientOptions, workspacePath); - } + apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { + if (event === ServerMode.standard) { + syntaxClient.stop(); + fileEventHandler.setServerStatus(true); + languageStatusBarProvider.initialize(context); + } + commands.executeCommand('setContext', 'java:serverMode', event); + }); - const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; - if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 - context.subscriptions.push(onDidGrantWorkspaceTrust(() => { - if (getJavaServerMode() !== ServerMode.lightWeight) { - // See the issue https://github.com/redhat-developer/vscode-java/issues/1994 - // Need to recollect the Java bundles before starting standard mode. - let pollingCount: number = 0; - // Poll every ~100ms (timeout after 1s) and check whether contributing javaExtensions have changed. - const intervalId = setInterval(() => { - const existingJavaExtensions = clientOptions.initializationOptions.bundles; - clientOptions.initializationOptions.bundles = collectJavaExtensions(extensions.all); - if (++pollingCount >= 10 || isContributedPartUpdated(existingJavaExtensions, clientOptions.initializationOptions.bundles)) { - clearInterval(intervalId); - commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.standard, true); - return; - } - }, 100); + if (serverMode === ServerMode.hybrid && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { + const config = getJavaConfiguration(); + const importOnStartupSection: string = "project.importOnFirstTimeStartup"; + const importOnStartup = config.get(importOnStartupSection); + if (importOnStartup === "disabled" || + env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); + requireStandardServer = false; + } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); + requireStandardServer = await promptUserForStandardServer(config); + } else { + requireStandardServer = true; + } + } + + if (requireStandardServer) { + await startStandardServer(context, requirements, clientOptions, workspacePath); + } + + const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; + if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 + context.subscriptions.push(onDidGrantWorkspaceTrust(() => { + if (getJavaServerMode() !== ServerMode.lightWeight) { + // See the issue https://github.com/redhat-developer/vscode-java/issues/1994 + // Need to recollect the Java bundles before starting standard mode. + let pollingCount: number = 0; + // Poll every ~100ms (timeout after 1s) and check whether contributing javaExtensions have changed. + const intervalId = setInterval(() => { + const existingJavaExtensions = clientOptions.initializationOptions.bundles; + clientOptions.initializationOptions.bundles = collectJavaExtensions(extensions.all); + if (++pollingCount >= 10 || isContributedPartUpdated(existingJavaExtensions, clientOptions.initializationOptions.bundles)) { + clearInterval(intervalId); + commands.executeCommand(Commands.SWITCH_SERVER_MODE, ServerMode.standard, true); + return; } - })); + }, 100); } - context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextDocumentChanges(event.document, event.contentChanges))); + })); + } + context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextDocumentChanges(event.document, event.contentChanges))); } async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, triggeredByCommand: boolean = false) { if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { From 21989a67552d5023813a3bea672417241f931373 Mon Sep 17 00:00:00 2001 From: MEHER SRUJANA MATCHA Date: Mon, 29 Jun 2026 16:41:23 +0100 Subject: [PATCH 694/708] Fix #3881: add support for field reference CodeLens --- README.md | 1 + package.json | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index d5e2fec88..bdf6a30e7 100644 --- a/README.md +++ b/README.md @@ -130,6 +130,7 @@ The following settings are supported: * `java.configuration.maven.userSettings` : Path to Maven's user settings.xml. * `java.configuration.checkProjectSettingsExclusions`: **Deprecated, please use 'java.import.generatesMetadataFilesAtProjectRoot' to control whether to generate the project metadata files at the project root. And use 'files.exclude' to control whether to hide the project metadata files from the file explorer.** Controls whether to exclude extension-generated project settings files (`.project`, `.classpath`, `.factorypath`, `.settings/`) from the file explorer. Defaults to `false`. * `java.referencesCodeLens.enabled` : Enable/disable the references code lenses. +* `java.referencesCodeLens.includeFields` : Enable/disable the references code lens for fields. * `java.implementationCodeLens` : Enable/disable the implementations code lens for the provided categories. * `java.signatureHelp.enabled` : Enable/disable signature help support (triggered on `(`). * `java.signatureHelp.description.enabled` : Enable/disable to show the description in signature help. Defaults to `false`. diff --git a/package.json b/package.json index 0b750e53b..854b94023 100644 --- a/package.json +++ b/package.json @@ -1485,6 +1485,13 @@ "scope": "window", "order": 10 }, + "java.referencesCodeLens.includeFields": { + "type": "boolean", + "default": false, + "description": "Enable/disable the references code lens for fields.", + "scope": "window", + "order": 15 + }, "java.implementationCodeLens": { "type": "string", "enum": [ From 10040c1f4085fd651ce934e22a32640b39abd819 Mon Sep 17 00:00:00 2001 From: wenyutang-ms Date: Wed, 1 Jul 2026 15:44:11 +0800 Subject: [PATCH 695/708] Migrate Change Signature webview off toolkit --- package-lock.json | 65 ----- package.json | 1 - src/refactoring/changeSignaturePanel.ts | 4 +- src/webview/changeSignature/App.css | 231 +++++++++++++++--- src/webview/changeSignature/App.tsx | 309 ++++++++++++------------ 5 files changed, 361 insertions(+), 249 deletions(-) diff --git a/package-lock.json b/package-lock.json index c15737e4a..7d308c280 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,6 @@ "@redhat-developer/vscode-extension-proposals": "0.0.23", "@redhat-developer/vscode-redhat-telemetry": "0.10.2", "@vscode/codicons": "^0.0.32", - "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", @@ -274,47 +273,6 @@ "node": ">=8" } }, - "node_modules/@microsoft/fast-element": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@microsoft/fast-element/-/fast-element-1.11.0.tgz", - "integrity": "sha512-VKJYMkS5zgzHHb66sY7AFpYv6IfFhXrjQcAyNgi2ivD65My1XOhtjfKez5ELcLFRJfgZNAxvI8kE69apXERTkw==" - }, - "node_modules/@microsoft/fast-foundation": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/@microsoft/fast-foundation/-/fast-foundation-2.47.0.tgz", - "integrity": "sha512-EyFuioaZQ9ngjUNRQi8R3dIPPsaNQdUOS+tP0G7b1MJRhXmQWIitBM6IeveQA6ZvXG6H21dqgrfEWlsYrUZ2sw==", - "dependencies": { - "@microsoft/fast-element": "^1.11.0", - "@microsoft/fast-web-utilities": "^5.4.1", - "tabbable": "^5.2.0", - "tslib": "^1.13.0" - } - }, - "node_modules/@microsoft/fast-foundation/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" - }, - "node_modules/@microsoft/fast-react-wrapper": { - "version": "0.1.48", - "resolved": "https://registry.npmjs.org/@microsoft/fast-react-wrapper/-/fast-react-wrapper-0.1.48.tgz", - "integrity": "sha512-9NvEjru9Kn5ZKjomAMX6v+eF0DR+eDkxKDwDfi+Wb73kTbrNzcnmlwd4diN15ygH97kldgj2+lpvI4CKLQQWLg==", - "dependencies": { - "@microsoft/fast-element": "^1.9.0", - "@microsoft/fast-foundation": "^2.41.1" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, - "node_modules/@microsoft/fast-web-utilities": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/@microsoft/fast-web-utilities/-/fast-web-utilities-5.4.1.tgz", - "integrity": "sha512-ReWYncndjV3c8D8iq9tp7NcFNc1vbVHvcBFPME2nNFKNbS1XCesYZGlIlf3ot5EmuOXPlrzUHOWzQ2vFpIkqDg==", - "dependencies": { - "exenv-es6": "^1.1.1" - } - }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -968,19 +926,6 @@ "node": ">=16" } }, - "node_modules/@vscode/webview-ui-toolkit": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@vscode/webview-ui-toolkit/-/webview-ui-toolkit-1.2.2.tgz", - "integrity": "sha512-xIQoF4FC3Xh6d7KNKIoIezSiFWYFuf6gQMdDyKueKBFGeKwaHWEn+dY2g3makvvEsNMEDji/woEwvg9QSbuUsw==", - "dependencies": { - "@microsoft/fast-element": "^1.6.2", - "@microsoft/fast-foundation": "^2.38.0", - "@microsoft/fast-react-wrapper": "^0.1.18" - }, - "peerDependencies": { - "react": ">=16.9.0" - } - }, "node_modules/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -2371,11 +2316,6 @@ "node": ">=8" } }, - "node_modules/exenv-es6": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/exenv-es6/-/exenv-es6-1.1.1.tgz", - "integrity": "sha512-vlVu3N8d6yEMpMsEm+7sUBAI81aqYYuEvfK0jNqmdb/OPXzzH7QWDDnVjMvDSY47JdHEqx/dfC/q8WkfoTmpGQ==" - }, "node_modules/expand-home-dir": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", @@ -5210,11 +5150,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tabbable": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-5.3.3.tgz", - "integrity": "sha512-QD9qKY3StfbZqWOPLp0++pOrAVb/HbUi5xCc8cUo4XjP19808oaMiDzn0leBY5mCespIBM0CIZePzZjgzR83kA==" - }, "node_modules/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", diff --git a/package.json b/package.json index 854b94023..eaceef004 100644 --- a/package.json +++ b/package.json @@ -2139,7 +2139,6 @@ "@redhat-developer/vscode-extension-proposals": "0.0.23", "@redhat-developer/vscode-redhat-telemetry": "0.10.2", "@vscode/codicons": "^0.0.32", - "@vscode/webview-ui-toolkit": "1.2.2", "chokidar": "^3.5.3", "expand-home-dir": "^0.0.3", "fmtr": "^1.1.2", diff --git a/src/refactoring/changeSignaturePanel.ts b/src/refactoring/changeSignaturePanel.ts index 5935d9f72..f5f7728a0 100644 --- a/src/refactoring/changeSignaturePanel.ts +++ b/src/refactoring/changeSignaturePanel.ts @@ -116,8 +116,8 @@ export class ChangeSignaturePanel { - - + + Change Signature diff --git a/src/webview/changeSignature/App.css b/src/webview/changeSignature/App.css index 2feef25ea..102e8222f 100644 --- a/src/webview/changeSignature/App.css +++ b/src/webview/changeSignature/App.css @@ -4,6 +4,9 @@ main { max-width: 600px; margin-left: auto; margin-right: auto; + color: var(--vscode-foreground); + font-family: var(--vscode-font-family); + font-size: var(--vscode-font-size); } .section { @@ -13,18 +16,18 @@ main { .section-columns { display: flex; width: 100%; - padding-left: calc(var(--design-unit) * 1px); + padding-left: 4px; } .text-title { margin: 0; - height: calc(var(--input-height) * 0.8px); + height: 21px; } .text-title-content { - padding: 0 0 0 calc(var(--design-unit) * 1px); + padding: 0 0 0 4px; margin: 0.5rem 0 0 0; - height: calc(var(--input-height) * 0.8px); + height: 21px; } .header-left { @@ -51,6 +54,91 @@ main { box-sizing: border-box; } +/* Form controls -------------------------------------------------------- */ + +.vsc-textfield, +.vsc-dropdown { + box-sizing: border-box; + width: 100%; + height: 26px; + padding: 2px 6px; + color: var(--vscode-input-foreground); + background-color: var(--vscode-input-background); + border: 1px solid var(--vscode-dropdown-border, var(--vscode-input-border, transparent)); + border-radius: 2px; + font-family: inherit; + font-size: inherit; + outline: none; +} + +.vsc-textfield:focus, +.vsc-dropdown:focus { + border-color: var(--vscode-focusBorder); +} + +.vsc-dropdown { + cursor: pointer; +} + +/* Buttons -------------------------------------------------------------- */ + +.btn { + display: inline-flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + height: 26px; + padding: 0 11px; + border: 1px solid var(--vscode-button-border, transparent); + border-radius: 2px; + font-family: inherit; + font-size: inherit; + cursor: pointer; + outline: none; +} + +.btn:focus-visible { + outline: 1px solid var(--vscode-focusBorder); + outline-offset: 2px; +} + +.btn:disabled { + opacity: 0.4; + cursor: default; +} + +.btn-primary { + color: var(--vscode-button-foreground); + background-color: var(--vscode-button-background); +} + +.btn-primary:hover:not(:disabled) { + background-color: var(--vscode-button-hoverBackground); +} + +.btn-secondary { + color: var(--vscode-button-secondaryForeground); + background-color: var(--vscode-button-secondaryBackground); +} + +.btn-secondary:hover:not(:disabled) { + background-color: var(--vscode-button-secondaryHoverBackground); +} + +.btn-icon { + height: 22px; + width: 22px; + padding: 0; + color: var(--vscode-icon-foreground); + background-color: transparent; + border: none; + border-radius: 4px; +} + +.btn-icon:hover:not(:disabled) { + background-color: var(--vscode-toolbar-hoverBackground); +} + .vsc-button-left { float: left; margin: 0 0.5rem 0.5rem 0; @@ -66,80 +154,150 @@ main { } .bottom-buttons { - padding: 0 0 0 calc(var(--design-unit) * 1px); + padding: 0 0 0 4px; margin: 0.5rem 0 0 0; + overflow: hidden; } .preview { - padding: 0 0 0 calc(var(--design-unit) * 1px); + box-sizing: border-box; margin: 0 0 0.5rem 0; width: 99%; + color: var(--vscode-input-foreground); + background-color: var(--vscode-input-background); + border: 1px solid var(--vscode-input-border, transparent); + border-radius: 2px; + padding: 4px 6px; + font-family: var(--vscode-editor-font-family, monospace); + font-size: inherit; + resize: vertical; + outline: none; +} + +.preview:focus { + border-color: var(--vscode-focusBorder); } +/* Tabs ----------------------------------------------------------------- */ + .parameters-panel { margin: 0; width: calc(99% + 4px); } +.tabs { + display: flex; + border-bottom: 1px solid var(--vscode-panel-border, var(--vscode-editorGroup-border)); +} + +.tab { + padding: 6px 10px; + background-color: transparent; + border: none; + border-bottom: 1px solid transparent; + color: var(--vscode-panelTitle-inactiveForeground, var(--vscode-foreground)); + font-family: inherit; + font-size: inherit; + cursor: pointer; + outline: none; +} + +.tab:hover { + color: var(--vscode-panelTitle-activeForeground, var(--vscode-foreground)); +} + +.tab-active { + color: var(--vscode-panelTitle-activeForeground, var(--vscode-foreground)); + border-bottom-color: var(--vscode-panelTitle-activeBorder, var(--vscode-focusBorder)); +} + +.tab:focus-visible { + outline: 1px solid var(--vscode-focusBorder); + outline-offset: -1px; +} + .parameters-view { - padding: 0 0 0 calc(var(--design-unit) * 1px); + padding: 0 0 0 4px; + display: flex; flex-direction: column; } -.parameter-cell { - padding-left: 0; - pointer-events: none; +.parameters-view[hidden] { + display: none; } -.parameter-cell-title { - padding-left: 0; +/* Table ---------------------------------------------------------------- */ + +.parameter-table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; } -.parameter-cell-title:focus { - border-color: var(--vscode-keybindingTable-headerBackground); - background-color: inherit; - color: inherit; +.parameter-table th, +.parameter-table td { + text-align: left; + vertical-align: middle; + padding: 2px 4px; + height: 26px; + box-sizing: border-box; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.parameter-cell-title { + padding-left: 4px; + font-weight: 600; } .parameter-cell-header { background-color: var(--vscode-keybindingTable-headerBackground); } +.parameter-cell { + padding-left: 4px; +} + .parameter-cell-edit { - padding-left: 0; + padding: 0 4px; background-color: var(--vscode-input-background); } -.parameter-cell-edit-button { +.parameter-input { + box-sizing: border-box; + width: 100%; + height: 100%; padding: 0; border: 0; - display: flex; - justify-content: right; - background-color: var(--vscode-input-background); + outline: none; + background-color: transparent; + color: var(--vscode-input-foreground); + font-family: inherit; + font-size: inherit; } +.parameter-cell-edit-button, .parameter-cell-button { padding: 0; border: 0; - display: flex; - justify-content: right; -} - -.parameter-cell-button:focus { - background-color: inherit; + text-align: right; + width: 1%; + white-space: nowrap; } -.parameter-cell-button:active { - background-color: inherit; +.parameter-cell-edit-button { + background-color: var(--vscode-input-background); } .table-buttons { display: inline-flex; + justify-content: flex-end; } .table-buttons-edit { display: inline-flex; - background-color: var(--vscode-editor-background); + justify-content: flex-end; } .table-buttons-edit-ok { @@ -151,7 +309,18 @@ main { margin: 0; } +/* Checkbox ------------------------------------------------------------- */ + .delegate { - padding: 0 0 0 calc(var(--design-unit) * 1px); + display: flex; + align-items: center; + gap: 6px; + padding: 0 0 0 4px; margin: 0.5rem 0 0.5rem 0; + cursor: pointer; +} + +.delegate input[type="checkbox"] { + accent-color: var(--vscode-checkbox-background); + cursor: pointer; } diff --git a/src/webview/changeSignature/App.tsx b/src/webview/changeSignature/App.tsx index 1531efeda..4e33a3e16 100644 --- a/src/webview/changeSignature/App.tsx +++ b/src/webview/changeSignature/App.tsx @@ -1,6 +1,5 @@ /* eslint-disable @typescript-eslint/naming-convention */ /* eslint-disable @typescript-eslint/prefer-for-of */ -import { VSCodeButton, VSCodeTextField, VSCodeDropdown, VSCodeOption, VSCodeCheckbox, VSCodePanels, VSCodePanelTab, VSCodePanelView, VSCodeDataGrid, VSCodeDataGridCell, VSCodeDataGridRow, VSCodeTextArea } from "@vscode/webview-ui-toolkit/react"; import "./App.css"; import React from "react"; import { vscode } from "../vscodeApiWrapper"; @@ -8,10 +7,13 @@ import cloneDeep from "lodash/cloneDeep"; type State = UIState & Metadata; +type ActiveTab = "parameters" | "exceptions"; + interface UIState { focusRow: number; editParameterRow: number; editExceptionRow: number; + activeTab: ActiveTab; } interface Metadata { @@ -50,6 +52,7 @@ export class App extends React.Component<{}, State> { focusRow: -1, editParameterRow: -1, editExceptionRow: -1, + activeTab: "parameters", methodIdentifier: undefined, isDelegate: false, methodName: undefined, @@ -91,6 +94,10 @@ export class App extends React.Component<{}, State> { this.setState({ methodName: event.target.value }); + } else if (id === "delegate") { + this.setState({ + isDelegate: event.target.checked + }); } return; }; @@ -121,7 +128,11 @@ export class App extends React.Component<{}, State> { if (!id) { return; } - if (id === "refactor") { + if (id === "tab-parameters") { + this.setState({ activeTab: "parameters", focusRow: -1 }); + } else if (id === "tab-exceptions") { + this.setState({ activeTab: "exceptions", focusRow: -1 }); + } else if (id === "refactor") { this.doRefactor(false); } else if (id === "preview") { this.doRefactor(true); @@ -175,11 +186,13 @@ export class App extends React.Component<{}, State> { editParameterRow: selectedRowNumber, editExceptionRow: -1, focusRow: -1, + }, () => { + const elementToSelect = document.getElementById(`parameterType-${selectedRowNumber}`) as HTMLInputElement | null; + if (elementToSelect) { + elementToSelect.focus(); + elementToSelect.select(); + } }); - const elementToSelect = document.getElementById(`parameterType-${selectedRowNumber}`); - if (elementToSelect) { - elementToSelect.focus(); - } } else if (id.startsWith("editException")) { const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); if (selectedRowNumber === undefined) { @@ -189,11 +202,13 @@ export class App extends React.Component<{}, State> { editParameterRow: -1, editExceptionRow: selectedRowNumber, focusRow: -1, + }, () => { + const elementToSelect = document.getElementById(`exceptionType-${selectedRowNumber}`) as HTMLInputElement | null; + if (elementToSelect) { + elementToSelect.focus(); + elementToSelect.select(); + } }); - const elementToSelect = document.getElementById(`exceptionType-${selectedRowNumber}`); - if (elementToSelect) { - elementToSelect.focus(); - } } else if (id.startsWith("upParameter")) { const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); if (selectedRowNumber === undefined) { @@ -244,29 +259,25 @@ export class App extends React.Component<{}, State> { return i !== selectedRowNumber; }) }); - } else if (id === "delegate") { - this.setState({ - isDelegate: event.target.checked - }); } else if (id.startsWith("confirmParameter")) { const selectedRowNumber: number | undefined = this.getSelectedRowNumber(id); if (selectedRowNumber === undefined) { return; } - const parameterType = document.getElementById(`parameterType-${selectedRowNumber}`); - const parameterName = document.getElementById(`parameterName-${selectedRowNumber}`); - const parameterDefault = this.isDefaultValueEditable(selectedRowNumber) ? document.getElementById(`parameterDefault-${selectedRowNumber}`) : undefined; + const parameterType = document.getElementById(`parameterType-${selectedRowNumber}`) as HTMLInputElement | null; + const parameterName = document.getElementById(`parameterName-${selectedRowNumber}`) as HTMLInputElement | null; + const parameterDefault = this.isDefaultValueEditable(selectedRowNumber) ? document.getElementById(`parameterDefault-${selectedRowNumber}`) as HTMLInputElement | null : undefined; this.setState({ parameters: this.state.parameters.map((e, i) => { if (i === selectedRowNumber) { - if (parameterType?.outerText) { - e.type = parameterType.outerText; + if (parameterType?.value) { + e.type = parameterType.value; } - if (parameterName?.outerText) { - e.name = parameterName.outerText; + if (parameterName?.value) { + e.name = parameterName.value; } - if (parameterDefault?.outerText) { - e.defaultValue = parameterDefault.outerText; + if (parameterDefault?.value) { + e.defaultValue = parameterDefault.value; } } return e; @@ -280,20 +291,6 @@ export class App extends React.Component<{}, State> { if (selectedRowNumber === undefined) { return; } - const parameterType = document.getElementById(`parameterType-${selectedRowNumber}`); - if (parameterType) { - parameterType.textContent = this.state.parameters[selectedRowNumber].type; - } - const parameterName = document.getElementById(`parameterName-${selectedRowNumber}`); - if (parameterName) { - parameterName.textContent = this.state.parameters[selectedRowNumber].name; - } - if (this.isDefaultValueEditable(selectedRowNumber)) { - const parameterDefault = document.getElementById(`parameterDefault-${selectedRowNumber}`); - if (parameterDefault) { - parameterDefault.textContent = this.state.parameters[selectedRowNumber].defaultValue; - } - } this.setState({ editParameterRow: -1, editExceptionRow: -1, @@ -304,12 +301,12 @@ export class App extends React.Component<{}, State> { if (selectedRowNumber === undefined) { return; } - const exceptionType = document.getElementById(`exceptionType-${selectedRowNumber}`); + const exceptionType = document.getElementById(`exceptionType-${selectedRowNumber}`) as HTMLInputElement | null; this.setState({ exceptions: this.state.exceptions.map((e, i) => { if (i === selectedRowNumber) { - if (exceptionType?.outerText) { - e.type = exceptionType.outerText; + if (exceptionType?.value) { + e.type = exceptionType.value; } } return e; @@ -323,10 +320,6 @@ export class App extends React.Component<{}, State> { if (selectedRowNumber === undefined) { return; } - const exceptionType = document.getElementById(`exceptionType-${selectedRowNumber}`); - if (exceptionType) { - exceptionType.textContent = this.state.exceptions[selectedRowNumber].type; - } this.setState({ editParameterRow: -1, editExceptionRow: -1, @@ -361,7 +354,9 @@ export class App extends React.Component<{}, State> { }; onMouseEnter = (event: any) => { - const id = event.target.id as string; + const currentTarget = event.currentTarget as HTMLElement | null; + const target = event.target as HTMLElement | null; + const id = currentTarget?.id || target?.id || currentTarget?.closest("tr")?.id || target?.closest("tr")?.id || ""; if (id.includes("Header")) { this.setState({ focusRow: -1 @@ -383,7 +378,6 @@ export class App extends React.Component<{}, State> { }; componentDidMount(): void { - this.setTextAreaCursorStyle(); window.addEventListener("message", this.handleMessage); vscode.postMessage({ command: "webviewReady" @@ -410,19 +404,6 @@ export class App extends React.Component<{}, State> { : o1 === o2; }; - /** - * Set the cursor style of the text area to text. Since the text area is - * inside a shadow DOM, we need to add a style element to the shadow DOM. - */ - setTextAreaCursorStyle(): void { - const host = document.getElementById("textArea"); - if (host?.shadowRoot) { - const style = document.createElement('style'); - style.innerHTML = '.control { cursor: text !important; }'; - host.shadowRoot.appendChild(style); - } - } - isDefaultValueEditable = (row: number) => { return this.state.parameters[row].originalIndex === -1; }; @@ -431,54 +412,69 @@ export class App extends React.Component<{}, State> { return this.isDefaultValueEditable(row) ? this.state.parameters[row].defaultValue : "-"; }; + /** + * Render a table cell whose value can be edited. When editing, a real + * control is rendered so that the typed text is visibly rendered + * and read back reliably via its value (see redhat-developer/vscode-java#4417). + */ + renderEditableCell = (id: string, value: string, editing: boolean, editable: boolean) => { + return + {editable + ? + : {value}} + ; + }; + generateParameterDataGridRow = (row: number) => { - return - {this.state.parameters[row].type} - {this.state.parameters[row].name} - {this.getDefaultValue(row)} - - {row === this.state.editParameterRow ? + const editing = row === this.state.editParameterRow; + return + {this.renderEditableCell(`parameterType-${row}`, this.state.parameters[row].type, editing, editing)} + {this.renderEditableCell(`parameterName-${row}`, this.state.parameters[row].name, editing, editing)} + {this.renderEditableCell(`parameterDefault-${row}`, this.getDefaultValue(row), editing, editing && this.isDefaultValueEditable(row))} + + {editing ?
      - OK - Cancel + +
      : row === this.state.focusRow ?
      - {row === 0 ? <> : - - } - {row === this.state.parameters.length - 1 ? <> : - - } - - - - - - + {row === 0 ? <> : } + {row === this.state.parameters.length - 1 ? <> : } + +
      :
      } -
      -
      ; + + ; }; generateExceptionDataGridRow = (row: number) => { - return - {this.state.exceptions[row].type} - - {row === this.state.editExceptionRow ? + const editing = row === this.state.editExceptionRow; + return + {this.renderEditableCell(`exceptionType-${row}`, this.state.exceptions[row].type, editing, editing)} + + {editing ?
      - OK - Cancel + +
      : row === this.state.focusRow ?
      - - - - - - + +
      :
      } -
      -
      ; + + ; }; render = () => { @@ -489,76 +485,89 @@ export class App extends React.Component<{}, State> {
      Access modifier:
      - - public - protected - package-private - private - +
      Return type:
      - +
      Method name:
      - +
      +

      Detected Java Installations

      + +
      configure... +
      +

      Lombok Support

      + enabled + configure... +

      TKvc{-Id~gVR{1LCiY(2M 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%0AhLp! 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≺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℞}k(hA^b_bdQOq}v)D3Ck{^O9x%Xr= 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

      - - Parameters - Exceptions - - - - Type - Name - Default value - - - { - (() => { - const options: JSX.Element[] = []; - for (let row = 0; row < this.state.parameters.length; row++) { - options.push(this.generateParameterDataGridRow(row)); - } - return options; - })() - } - +
      +
      + + +
      + + +
      Method signature:
      - - Keep original method as delegate to changed method + +
      - Refactor - Preview - Reset + + +
      ); From 1bf38779d6db8cab379bacb5a5c030513dcb560d Mon Sep 17 00:00:00 2001 From: MeherSrujana <71970450+MeherSru@users.noreply.github.com> Date: Wed, 8 Jul 2026 15:19:55 +0100 Subject: [PATCH 696/708] Fix #3874: preserve escaped commas in snippet literals (#4436) * Fix #3874: preserve escaped commas in snippet literals * Add test for #3874 snippet escaping --------- Co-authored-by: MEHER SRUJANA MATCHA --- src/extension.ts | 4 ++-- test/standard-mode-suite/extension.test.ts | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 4f2072a96..5deac6e13 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -1325,8 +1325,8 @@ function registerRestartJavaLanguageServerCommand(context: ExtensionContext) { })); } -function escapeSnippetLiterals(value: string): string { +export function escapeSnippetLiterals(value: string): string { return value - .replace(/\\/g, '\\\\') // Escape backslashes + .replace(/\\(?!,)/g, '\\\\') // Escape backslashes, but preserve escaped commas .replace(/\$(?!\{)/g, '\\$'); // Escape $ only if NOT followed by { } diff --git a/test/standard-mode-suite/extension.test.ts b/test/standard-mode-suite/extension.test.ts index 3b23a654a..aee1a1d02 100644 --- a/test/standard-mode-suite/extension.test.ts +++ b/test/standard-mode-suite/extension.test.ts @@ -7,6 +7,7 @@ import { Commands } from '../../src/commands'; import * as java from '../../src/javaServerStarter'; import * as plugin from '../../src/plugin'; import * as requirements from '../../src/requirements'; +import { escapeSnippetLiterals } from '../../src/extension'; suite('Java Language Extension - Standard', () => { @@ -233,4 +234,10 @@ suite('Java Language Extension - Standard', () => { assert(java.hasDebugFlag(['foo', '--debug=1234'])); assert(java.hasDebugFlag(['foo', '--debug-brk=1234'])); }); + + test('should preserve escaped commas in code action snippets', () => { + const snippet = '${1|HashMap,Map|} ${2:x} = new HashMap();'; + + assert.equal(escapeSnippetLiterals(snippet), snippet); + }); }); From 834edeb2f432beee7dff67b4b2f22842beb5d5fa Mon Sep 17 00:00:00 2001 From: David Thompson Date: Mon, 29 Jun 2026 16:50:25 -0400 Subject: [PATCH 697/708] Fix conflict detection Bump the action version to a commit that addresses the root cause Signed-off-by: David Thompson --- .github/workflows/conflictDetector.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/conflictDetector.yaml b/.github/workflows/conflictDetector.yaml index 15a95fd88..afa7436c8 100644 --- a/.github/workflows/conflictDetector.yaml +++ b/.github/workflows/conflictDetector.yaml @@ -6,7 +6,7 @@ jobs: triage: runs-on: ubuntu-latest steps: - - uses: mschilde/auto-label-merge-conflicts@8c6faa8a252e35ba5e15703b3d747bf726cdb95c + - uses: mschilde/auto-label-merge-conflicts@cd484bbf0476fbe79474a937681a253e094cac3d with: CONFLICT_LABEL_NAME: "has conflicts" GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From a267c6184171e45e5109602da6a060de1082112a Mon Sep 17 00:00:00 2001 From: Morgan Chang Date: Tue, 14 Jul 2026 09:17:06 -0400 Subject: [PATCH 698/708] Fix race condition when executing Java workspace commands during standard server startup (#4462) * Fix race when executing Java workspace commands during standard server startup Signed-off-by: Morgan Chang * remove inaccurate comment Signed-off-by: Morgan Chang --------- Signed-off-by: Morgan Chang --- src/extension.ts | 143 +++++++++++++++++++++++++++++------------------ 1 file changed, 89 insertions(+), 54 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 5deac6e13..8679e85e9 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -52,6 +52,7 @@ const jdtEventEmitter = new EventEmitter(); const extensionName = 'Language Support for Java'; let storagePath: string; let clientLogFile: string; +let standardServerStart: Promise | undefined; const excutable= new Deferred(); @@ -444,6 +445,17 @@ export async function activate(context: ExtensionContext): Promise return apiManager.getApiInstance(); } +async function getStandardLanguageClient(): Promise { + try { + if (standardServerStart) { + return await standardServerStart; + } + } catch (error) { + logger.error(`Failed to initialize the Java language client: ${getMessage(error)}`); + } + return standardClient.getClient(); +} + async function postExtensionStartInit( context: ExtensionContext, requirements: requirements.RequirementsData, @@ -469,7 +481,53 @@ async function postExtensionStartInit( serverStatusBarProvider.showLightWeightStatus(); } - context.subscriptions.push(commands.registerCommand(Commands.EXECUTE_WORKSPACE_COMMAND, (command, ...rest) => { + apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { + if (event === ServerMode.standard) { + syntaxClient.stop(); + fileEventHandler.setServerStatus(true); + languageStatusBarProvider.initialize(context); + } + commands.executeCommand('setContext', 'java:serverMode', event); + }); + + if (cleanWorkspaceExists) { + const data = {}; + try { + cleanupLombokCache(context); + cleanupWorkspaceState(context); + deleteDirectory(workspacePath); + deleteDirectory(syntaxServerWorkspacePath); + cleanJavaLSConfiguration(context); + } catch (error) { + data['error'] = getMessage(error); + window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); + } + await Telemetry.sendTelemetry(Commands.CLEAN_WORKSPACE, data); + } + + if (serverMode === ServerMode.hybrid && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { + const config = getJavaConfiguration(); + const importOnStartupSection: string = "project.importOnFirstTimeStartup"; + const importOnStartup = config.get(importOnStartupSection); + if (importOnStartup === "disabled" || + env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); + requireStandardServer = false; + } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { + apiManager.getApiInstance().serverMode = ServerMode.lightWeight; + apiManager.fireDidServerModeChange(ServerMode.lightWeight); + requireStandardServer = await promptUserForStandardServer(config); + } else { + requireStandardServer = true; + } + } + + if (requireStandardServer) { + void startStandardServer(context, requirements, clientOptions, workspacePath); + } + + context.subscriptions.push(commands.registerCommand(Commands.EXECUTE_WORKSPACE_COMMAND, async (command, ...rest) => { const api: ExtensionAPI = apiManager.getApiInstance(); if (api.serverMode === ServerMode.lightWeight) { console.warn(`The command: ${command} is not supported in LightWeight mode. See: https://github.com/redhat-developer/vscode-java/issues/1480`); @@ -485,29 +543,18 @@ async function postExtensionStartInit( command, arguments: commandArgs }; + const client: LanguageClient | undefined = await getStandardLanguageClient(); + if (!client) { + console.warn(`Cannot execute Java workspace command '${command}' because the Java language client is not initialized`); + return; + } if (token) { - return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params, token); + return client.sendRequest(ExecuteCommandRequest.type, params, token); } else { - return standardClient.getClient().sendRequest(ExecuteCommandRequest.type, params); + return client.sendRequest(ExecuteCommandRequest.type, params); } })); - if (cleanWorkspaceExists) { - const data = {}; - try { - cleanupLombokCache(context); - cleanupWorkspaceState(context); - deleteDirectory(workspacePath); - deleteDirectory(syntaxServerWorkspacePath); - cleanJavaLSConfiguration(context); - } catch (error) { - data['error'] = getMessage(error); - window.showErrorMessage(`Failed to delete ${workspacePath}: ${error}`); - } - await Telemetry.sendTelemetry(Commands.CLEAN_WORKSPACE, data); - } - - // Register commands here to make it available even when the language client fails context.subscriptions.push(commands.registerCommand(Commands.OPEN_STATUS_SHORTCUT, async (status: string) => { const items: ShortcutQuickPickItem[] = []; if (status === ServerStatusKind.error || status === ServerStatusKind.warning) { @@ -672,37 +719,6 @@ async function postExtensionStartInit( registerClientProviders(context, { contentProviderEvent: jdtEventEmitter.event }); - apiManager.getApiInstance().onDidServerModeChange((event: ServerMode) => { - if (event === ServerMode.standard) { - syntaxClient.stop(); - fileEventHandler.setServerStatus(true); - languageStatusBarProvider.initialize(context); - } - commands.executeCommand('setContext', 'java:serverMode', event); - }); - - if (serverMode === ServerMode.hybrid && !await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins"))) { - const config = getJavaConfiguration(); - const importOnStartupSection: string = "project.importOnFirstTimeStartup"; - const importOnStartup = config.get(importOnStartupSection); - if (importOnStartup === "disabled" || - env.uiKind === UIKind.Web && env.appName.includes("Visual Studio Code")) { - apiManager.getApiInstance().serverMode = ServerMode.lightWeight; - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - requireStandardServer = false; - } else if (importOnStartup === "interactive" && await workspaceContainsBuildFiles()) { - apiManager.getApiInstance().serverMode = ServerMode.lightWeight; - apiManager.fireDidServerModeChange(ServerMode.lightWeight); - requireStandardServer = await promptUserForStandardServer(config); - } else { - requireStandardServer = true; - } - } - - if (requireStandardServer) { - await startStandardServer(context, requirements, clientOptions, workspacePath); - } - const onDidGrantWorkspaceTrust = (workspace as any).onDidGrantWorkspaceTrust; if (onDidGrantWorkspaceTrust !== undefined) { // keep compatibility for old engines < 1.56.0 context.subscriptions.push(onDidGrantWorkspaceTrust(() => { @@ -725,16 +741,34 @@ async function postExtensionStartInit( } context.subscriptions.push(workspace.onDidChangeTextDocument(event => handleTextDocumentChanges(event.document, event.contentChanges))); } -async function startStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, triggeredByCommand: boolean = false) { +async function startStandardServer( + context: ExtensionContext, + requirements: requirements.RequirementsData, + clientOptions: LanguageClientOptions, + workspacePath: string, + triggeredByCommand: boolean = false +): Promise { + if (standardServerStart) { + const client = await standardServerStart; + if (client || !triggeredByCommand) { + return client; + } + } if (standardClient.getClientStatus() !== ClientStatus.uninitialized) { - return; + return standardClient.getClient(); } + standardServerStart = doStartStandardServer(context, requirements, clientOptions, workspacePath, triggeredByCommand).finally(() => { + standardServerStart = undefined; + }); + return standardServerStart; +} +async function doStartStandardServer(context: ExtensionContext, requirements: requirements.RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, triggeredByCommand: boolean = false): Promise { const selector: BuildFileSelector = new BuildFileSelector(context, []); const importMode: ImportMode = await getImportMode(context, selector); if (importMode === ImportMode.automatic) { if (!await ensureNoBuildToolConflicts(context, clientOptions)) { - return; + return undefined; } } else { const buildFiles: string[] = []; @@ -749,7 +783,7 @@ async function startStandardServer(context: ExtensionContext, requirements: requ if (buildFiles.length === 0) { commands.executeCommand('setContext', 'java:serverMode', ServerMode.lightWeight); serverStatusBarProvider.showNotImportedStatus(); - return; + return undefined; } clientOptions.initializationOptions.projectConfigurations = buildFiles; } @@ -764,6 +798,7 @@ async function startStandardServer(context: ExtensionContext, requirements: requ standardClient.registerLanguageClientActions(context, await fse.pathExists(path.join(workspacePath, ".metadata", ".plugins")), jdtEventEmitter); }); serverStatusBarProvider.setBusy("Activating..."); + return standardClient.getClient(); } async function workspaceContainsBuildFiles(): Promise { From 94d60718c1e2ffbe933e091ce0cf1b70397453a7 Mon Sep 17 00:00:00 2001 From: MeherSrujana <71970450+MeherSru@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:23:18 +0100 Subject: [PATCH 699/708] Fix #4167: use java.projects context for explorer actions (#4450) * Fix #4167: use java.projects context for explorer actions * Address review feedback for java.projects context * Use java.projects to scope source path actions * Retrigger CI --------- Co-authored-by: MEHER SRUJANA MATCHA --- package.json | 4 ++-- src/standardLanguageClient.ts | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index eaceef004..43f95d171 100644 --- a/package.json +++ b/package.json @@ -1921,12 +1921,12 @@ "group": "1_javaactions" }, { - "when": "explorerResourceIsFolder&&javaLSReady", + "when": "explorerResourceIsFolder&&javaLSReady&&resourceDirname in java.projects", "command": "java.project.addToSourcePath.command", "group": "1_javaactions@1" }, { - "when": "explorerResourceIsFolder&&javaLSReady", + "when": "explorerResourceIsFolder&&javaLSReady&&resourceDirname in java.projects", "command": "java.project.removeFromSourcePath.command", "group": "1_javaactions@2" } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index 7a0aae0eb..fc73cbadc 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -120,7 +120,7 @@ export class StandardLanguageClient { public registerLanguageClientActions(context: ExtensionContext, hasImported: boolean, jdtEventEmitter: EventEmitter) { activationProgressNotification.showProgress(); - this.languageClient.onNotification(StatusNotification.type, (report) => { + this.languageClient.onNotification(StatusNotification.type, async (report) => { // Resolve serverRunning on the first status notification from the server, // indicating the server process is alive and can accept requests. apiManager.resolveServerRunningPromise(); @@ -149,10 +149,17 @@ export class StandardLanguageClient { apiManager.getApiInstance().onDidClasspathUpdate((projectUri: Uri) => { checkLombokDependency(context, projectUri); }); + apiManager.getApiInstance().onDidProjectsImport(() => { + updateJavaProjectsContext(); + }); + apiManager.getApiInstance().onDidProjectsDelete(() => { + updateJavaProjectsContext(); + }); // Disable the client-side snippet provider since LS is ready. snippetCompletionProvider.dispose(); registerDocumentValidationListener(context, this.languageClient); commands.executeCommand('setContext', 'javaLSReady', true); + updateJavaProjectsContext(); break; case 'Started': this.status = ClientStatus.started; @@ -844,6 +851,15 @@ export class StandardLanguageClient { } } +function updateJavaProjectsContext(): void { + getAllJavaProjects().then((projectUris) => { + const projectPaths = projectUris.map((uriString) => Uri.parse(uriString).fsPath.replace(/[\\/]$/, '')); + commands.executeCommand('setContext', 'java.projects', projectPaths); + }).catch((error) => { + logger.error(error); + }); +} + async function showImportFinishNotification(context: ExtensionContext) { const neverShow: boolean | undefined = context.globalState.get("java.neverShowImportFinishNotification"); if (!neverShow) { From ffbcf2d4a5048086440a3337e517f7c2dbedd642 Mon Sep 17 00:00:00 2001 From: MEHER SRUJANA MATCHA Date: Tue, 14 Jul 2026 17:54:51 +0100 Subject: [PATCH 700/708] Add settings for the TODO comment in generated method/catch stubs --- README.md | 3 +++ document/_java.templateVariables.md | 4 ++++ package.json | 30 +++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+) diff --git a/README.md b/README.md index bdf6a30e7..25cc83005 100644 --- a/README.md +++ b/README.md @@ -199,6 +199,9 @@ The following settings are supported: * `java.import.gradle.java.home`: Specifies the location to the JVM used to run the Gradle daemon. * `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules","\.git"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to ["node_modules","\.git"]. * `java.templates.fileHeader`: Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). +* `java.templates.methodBody`: Specifies the method body snippet for unimplemented methods (e.g. generated by "Add unimplemented methods"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). +* `java.templates.methodBodySuper`: Specifies the method body snippet for overridden methods that call `super` (e.g. generated by "Override/Implement Methods"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). +* `java.templates.catchBody`: Specifies the catch block body snippet (e.g. generated by "Surround with try/catch"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.typeComment`: Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.newFile.enabled` : Enable/disable automatic generation of class body and package declaration when creating a new Java file. Set to `false` to create empty Java files. Defaults to `true`. * `java.references.includeAccessors`: Include getter, setter and builder/constructor when finding references. Default to true. diff --git a/document/_java.templateVariables.md b/document/_java.templateVariables.md index f3f78c5d0..2b4f0fcec 100644 --- a/document/_java.templateVariables.md +++ b/document/_java.templateVariables.md @@ -13,3 +13,7 @@ Below are the predefined variables you could use in the template settings such a - `${day}` - current day of the month - `${hour}` - current hour - `${minute}` - current minute +- `${todo}` - the configured task tag (e.g. "TODO") +- `${enclosing_method}` - name of the method being implemented or overridden +- `${body_statement}` - the generated body statement (e.g. a call to the overridden `super` method) +- `${exception_var}` - name of the caught exception variable diff --git a/package.json b/package.json index 43f95d171..79f94c8e5 100644 --- a/package.json +++ b/package.json @@ -1237,6 +1237,36 @@ "default": [], "order": 20 }, + "java.templates.methodBody": { + "type": "array", + "markdownDescription": "Specifies the method body snippet for unimplemented methods (e.g. generated by \"Add unimplemented methods\"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [ + "// ${todo} Auto-generated method stub", + "throw new UnsupportedOperationException(\"Unimplemented method '${enclosing_method}'\");" + ], + "order": 30 + }, + "java.templates.methodBodySuper": { + "type": "array", + "markdownDescription": "Specifies the method body snippet for overridden methods that call `super` (e.g. generated by \"Override/Implement Methods\"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [ + "// ${todo} Auto-generated method stub", + "${body_statement}" + ], + "order": 31 + }, + "java.templates.catchBody": { + "type": "array", + "markdownDescription": "Specifies the catch block body snippet (e.g. generated by \"Surround with try/catch\"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", + "scope": "window", + "default": [ + "// ${todo} Auto-generated catch block", + "${exception_var}.printStackTrace();" + ], + "order": 32 + }, "java.codeGeneration.insertionLocation": { "type": "string", "enum": [ From 18413af294dbf19b8be0ef3362bb8ee7f41a8d33 Mon Sep 17 00:00:00 2001 From: Sougandh S Date: Tue, 21 Jul 2026 19:24:24 +0530 Subject: [PATCH 701/708] Add Settings for Generate Javadoc in Markdown (#4465) Adds preference "java.codeGeneration.generateCommentsInMarkdown" to generate javadoc in markdown style Server side changes : https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3837 --- README.md | 1 + package.json | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/README.md b/README.md index 25cc83005..3eaacf920 100644 --- a/README.md +++ b/README.md @@ -169,6 +169,7 @@ The following settings are supported: * `java.codeGeneration.hashCodeEquals.useJava7Objects`: Use Objects.hash and Objects.equals when generating the hashCode and equals methods. This setting only applies to Java 7 and higher. Defaults to `false`. * `java.codeGeneration.useBlocks`: Use blocks in 'if' statements when generating the methods. Defaults to `false`. * `java.codeGeneration.generateComments`: Generate method comments when generating the methods. Defaults to `false`. +* `java.codeGeneration.generateCommentsInMarkdown`: Generate Javadoc comments in Markdown style when generating methods, constructors, and types. Requires source compliance >= 23. Defaults to false. * `java.codeGeneration.toString.template`: The template for generating the toString method. Defaults to `${object.className} [${member.name()}=${member.value}, ${otherMembers}]`. * `java.codeGeneration.toString.codeStyle`: The code style for generating the toString method. Defaults to `STRING_CONCATENATION`. * `java.codeGeneration.toString.skipNullValues`: Skip null values when generating the toString method. Defaults to `false`. diff --git a/package.json b/package.json index 79f94c8e5..a963641e4 100644 --- a/package.json +++ b/package.json @@ -1326,6 +1326,11 @@ "default": false, "scope": "window" }, + "java.codeGeneration.generateCommentsInMarkdown": { + "type": "boolean", + "description": "Generate Javadoc comments in Markdown style (requires source compliance >= 23).", + "default": false + }, "java.codeGeneration.toString.template": { "type": "string", "description": "The template for generating the toString method.", From d432ad39c5b80d9411bf9fd16e7a42b12f679709 Mon Sep 17 00:00:00 2001 From: MeherSrujana <71970450+MeherSru@users.noreply.github.com> Date: Wed, 29 Jul 2026 13:28:42 +0100 Subject: [PATCH 702/708] Update ESLint to v10 (#4470) * Update ESLint to v10 (#4469) * Address review comments --------- Co-authored-by: MEHER SRUJANA MATCHA --- .eslintignore | 22 - .eslintrc.json | 115 --- eslint.config.mjs | 146 ++++ package-lock.json | 2072 ++++++++++++++++++++------------------------ package.json | 15 +- scripts/jre.mjs | 1 - scripts/server.mjs | 2 - scripts/test.mjs | 1 - 8 files changed, 1080 insertions(+), 1294 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json create mode 100644 eslint.config.mjs diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 35ef0867f..000000000 --- a/.eslintignore +++ /dev/null @@ -1,22 +0,0 @@ -# .gitignore -out -server -node_modules -*.vsix -.DS_Store -.vscode-test -undefined -target -dist -jre -lombok -bin/ -.settings -.classpath -.project -test/resources/projects/**/.vscode -test/resources/projects/maven/salut/testGradle -test-temp - -# specific to eslint -vscode*.d.ts \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index fa1f61863..000000000 --- a/.eslintrc.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "env": { - "es6": true, - "node": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest", - "project": [ - "tsconfig.webview.json", - "tsconfig.json" - ] - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": { - "@typescript-eslint/member-delimiter-style": [ - "error", - { - "multiline": { - "delimiter": "semi", - "requireLast": true - }, - "singleline": { - "delimiter": "semi", - "requireLast": false - } - } - ], - "@typescript-eslint/naming-convention": "error", - "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", - "@typescript-eslint/prefer-for-of": "error", - "@typescript-eslint/semi": [ - "error", - "always" - ], - "@typescript-eslint/type-annotation-spacing": "error", - "curly": [ - "error", - "multi-line" - ], - "eqeqeq": [ - "error", - "always" - ], - "id-denylist": [ - "error", - "any", - "Number", - "number", - "String", - "string", - "Boolean", - "boolean", - "Undefined", - "undefined" - ], - "id-match": "error", - "no-debugger": "error", - "no-multiple-empty-lines": "error", - "no-trailing-spaces": "error", - "no-underscore-dangle": "error", - "no-var": "error", - "prefer-arrow-callback": [ - "error", - { - "allowNamedFunctions": true - } - ], - "prefer-const": "error", - "prefer-template": "error", - "quote-props": [ - "error", - "as-needed" - ], - "semi": "error", - "spaced-comment": [ - "error", - "always", - { - "markers": [ - "/" - ] - } - ] - }, - "overrides": [ - { - "files": [ - "**/*.js" - ], - "rules": { - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/naming-convention": "off", - "@typescript-eslint/semi": "off", - "prefer-arrow/prefer-arrow-functions": "off", - "prefer-arrow-callback": "off", - "no-useless-escape": "off", - "spaced-comment": "off", - "semi": "off", - "prefer-template": "off", - "prefer-const": "off" - } - }, - { - "files": [ - "**/*.test.ts" - ], - "rules": { - "prefer-arrow-callback": "off" - } - } - ] -} \ No newline at end of file diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 000000000..7eaef9353 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,146 @@ +import { defineConfig, globalIgnores } from "eslint/config"; +import tseslint from "typescript-eslint"; +import globals from "globals"; +import stylistic from "@stylistic/eslint-plugin"; + +export default defineConfig([globalIgnores([ + "out", + "server", + "node_modules", + "*.vsix", + ".DS_Store", + ".vscode-test", + "undefined", + "target", + "dist", + "jre", + "lombok", + "bin/", + ".settings", + ".classpath", + ".project", + "test/resources/projects/**/.vscode", + "test/resources/projects/maven/salut/testGradle", + "test-temp", + "vscode*.d.ts", +]), { + files: ["src/**"], + + plugins: { + "@typescript-eslint": tseslint.plugin, + "stylistic": stylistic, + }, + + languageOptions: { + globals: { + ...globals.node, + }, + + parser: tseslint.parser, + ecmaVersion: "latest", + sourceType: "commonjs", + + parserOptions: { + project: ["tsconfig.webview.json", "tsconfig.json"], + }, + }, + + rules: { + "stylistic/member-delimiter-style": ["error", { + multiline: { + delimiter: "semi", + requireLast: true, + }, + + singleline: { + delimiter: "semi", + requireLast: false, + }, + }], + + "@typescript-eslint/naming-convention": "error", + "@typescript-eslint/prefer-for-of": "error", + "stylistic/semi": ["error", "always"], + "stylistic/type-annotation-spacing": "error", + curly: ["error", "multi-line"], + eqeqeq: ["error", "always"], + + "id-denylist": [ + "error", + "any", + "Number", + "number", + "String", + "string", + "Boolean", + "boolean", + "Undefined", + "undefined", + ], + + "id-match": "error", + "no-debugger": "error", + "no-multiple-empty-lines": "error", + "no-trailing-spaces": "error", + "no-underscore-dangle": "error", + "no-var": "error", + + "prefer-arrow-callback": ["error", { + allowNamedFunctions: true, + }], + + "prefer-const": "error", + "prefer-template": "error", + "quote-props": ["error", "as-needed"], + semi: "error", + + "spaced-comment": ["error", "always", { + markers: ["/"], + }], + }, +}, { + files: ["**/*.js", "**/*.mjs"], + + plugins: { + "@typescript-eslint": tseslint.plugin, + }, + + languageOptions: { + globals: { + ...globals.node, + }, + + parser: tseslint.parser, + ecmaVersion: "latest", + sourceType: "commonjs", + }, + + rules: { + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/naming-convention": "off", + "stylistic/semi": "off", + "prefer-arrow/prefer-arrow-functions": "off", + "prefer-arrow-callback": "off", + "no-useless-escape": "off", + "spaced-comment": "off", + semi: "off", + "prefer-template": "off", + "prefer-const": "off", + }, +}, { + files: ["**/*.test.ts"], + + languageOptions: { + globals: { + ...globals.node, + }, + + parser: tseslint.parser, + ecmaVersion: "latest", + sourceType: "commonjs", + }, + + rules: { + "prefer-arrow-callback": "off", + }, +}]); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 7d308c280..bff0a8b8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,6 +29,7 @@ "winston-daily-rotate-file": "^4.7.1" }, "devDependencies": { + "@stylistic/eslint-plugin": "^5.10.0", "@types/fs-extra": "^8.0.0", "@types/glob": "5.0.30", "@types/lodash.findindex": "^4.6.6", @@ -42,12 +43,11 @@ "@types/vscode-webview": "^1.57.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^5.18.0", - "@typescript-eslint/parser": "^5.18.0", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "css-loader": "^6.7.3", - "eslint": "^8.13.0", - "eslint-webpack-plugin": "^3.2.0", + "eslint": "^10.7.0", + "eslint-webpack-plugin": "^6.0.0", + "globals": "^17.7.0", "lodash.findindex": "^4.6.0", "mini-css-extract-plugin": "^2.9.4", "minimist": ">=1.2.6", @@ -56,8 +56,9 @@ "tar": "^7.5.11", "ts-loader": "^9.4.2", "typescript": "^4.6.4", + "typescript-eslint": "^8.65.0", "webpack": "^5.105.0", - "webpack-cli": "^4.6.0" + "webpack-cli": "^7.2.1" }, "engines": { "vscode": "^1.77.0" @@ -72,53 +73,174 @@ } }, "node_modules/@discoveryjs/json-ext": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.2.tgz", - "integrity": "sha512-HyYEUDeIj5rRQU2Hk5HTB2uHsbRQpF70nvMhVzi+VJR0X+xNEhjPui4/kBf3VeH/wqD28PT4sVOm8qqLjBrSZg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-1.1.0.tgz", + "integrity": "sha512-Xc3VhU02wqZ1HvHRJUwL09HkZSTvidqY5Ya0NXBSYOxAp+Ln9dcJr9fySI+CkONzP3PekQo9WdzCv0PGER/mOA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=10.0.0" + "node": ">=14.17.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.1.tgz", - "integrity": "sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz", + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==", "dev": true, + "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.3.1", - "globals": "^13.9.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.23.5", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.5.tgz", + "integrity": "sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^3.0.5", + "debug": "^4.3.1", + "minimatch": "^10.2.4" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", - "integrity": "sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==", + "node_modules/@eslint/config-helpers": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.6.0.tgz", + "integrity": "sha512-ii6Bw9jJ2zi2cWA2Z+9/QZ/+3DX6kwaV5Q986D/CdP3Lap3w/pgQZ373FV7byY/i7L4IRH/G43I5dz1ClsCbpA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^1.2.1", - "debug": "^4.1.1", - "minimatch": "^3.0.4" + "@eslint/core": "^1.2.1" }, "engines": { - "node": ">=10.10.0" + "node": "^20.19.0 || ^22.13.0 || >=24" } }, - "node_modules/@humanwhocodes/object-schema": { + "node_modules/@eslint/core": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", - "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", - "dev": true + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.2.1.tgz", + "integrity": "sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/object-schema": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.5.tgz", + "integrity": "sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.7.2.tgz", + "integrity": "sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^1.2.1", + "levn": "^0.4.1" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz", + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/types": "^0.15.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.8", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz", + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.2", + "@humanfs/types": "^0.15.0", + "@humanwhocodes/retry": "^0.4.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/types": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz", + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz", + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -273,41 +395,6 @@ "node": ">=8" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/@pkgjs/parseargs": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", @@ -499,6 +586,81 @@ "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", "dev": true }, + "node_modules/@stylistic/eslint-plugin": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.10.0.tgz", + "integrity": "sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/types": "^8.56.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.0.0 || ^10.0.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/espree": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz", + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.15.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -521,6 +683,13 @@ "@types/estree": "*" } }, + "node_modules/@types/esrecurse": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz", + "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", @@ -675,281 +844,105 @@ "winston": "*" } }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", - "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", + "node_modules/@typescript-eslint/project-service": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.65.0.tgz", + "integrity": "sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/type-utils": "5.18.0", - "@typescript-eslint/utils": "5.18.0", - "debug": "^4.3.2", - "functional-red-black-tree": "^1.0.1", - "ignore": "^5.1.8", - "regexpp": "^3.2.0", - "semver": "^7.3.5", - "tsutils": "^3.21.0" + "@typescript-eslint/tsconfig-utils": "^8.65.0", + "@typescript-eslint/types": "^8.65.0", + "debug": "^4.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", - "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.65.0.tgz", + "integrity": "sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==", "dev": true, - "dependencies": { - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", - "debug": "^4.3.2" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", - "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.65.0.tgz", + "integrity": "sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0" - }, + "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", - "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", + "node_modules/@vscode/codicons": { + "version": "0.0.32", + "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz", + "integrity": "sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg==" + }, + "node_modules/@vscode/test-electron": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-3.1.0.tgz", + "integrity": "sha512-CRqv5u+YYoseuNVJ6Tyo4k0sF0mx4qnKMihRB0PjsUF8Dc0WKtCXo6CNL6nWWm5esfFQsQA/pejMj4ZbpJVLTw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "5.18.0", - "debug": "^4.3.2", - "tsutils": "^3.21.0" + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^8.1.0", + "semver": "^7.6.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">=22" } }, - "node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", - "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } + "license": "MIT" }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", - "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/visitor-keys": "5.18.0", - "debug": "^4.3.2", - "globby": "^11.0.4", - "is-glob": "^4.0.3", - "semver": "^7.3.5", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", - "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", - "dev": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.18.0", - "@typescript-eslint/types": "5.18.0", - "@typescript-eslint/typescript-estree": "5.18.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", - "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.18.0", - "eslint-visitor-keys": "^3.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vscode/codicons": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/@vscode/codicons/-/codicons-0.0.32.tgz", - "integrity": "sha512-3lgSTWhAzzWN/EPURoY4ZDBEA80OPmnaknNujA3qnI4Iu7AONWd9xF3iE4L+4prIe8E3TUnLQ4pxoaFTEEZNwg==" - }, - "node_modules/@vscode/test-electron": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.5.2.tgz", - "integrity": "sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "jszip": "^3.10.1", - "ora": "^8.1.0", - "semver": "^7.6.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT" + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { "version": "1.14.1", @@ -1087,42 +1080,6 @@ "@xtuc/long": "4.2.2" } }, - "node_modules/@webpack-cli/configtest": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.0.2.tgz", - "integrity": "sha512-3OBzV2fBGZ5TBfdW50cha1lHDVf9vlvRXnjpVbJBa20pSZQaSkMJZiwA8V2vD9ogyeXn8nU5s5A6mHyf5jhMzA==", - "dev": true, - "peerDependencies": { - "webpack": "4.x.x || 5.x.x", - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/info": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.2.3.tgz", - "integrity": "sha512-lLek3/T7u40lTqzCGpC6CAbY6+vXhdhmwFRxZLMnRm6/sIF/7qMpT8MocXCRQfz0JAh63wpbXLMnsQ5162WS7Q==", - "dev": true, - "dependencies": { - "envinfo": "^7.7.3" - }, - "peerDependencies": { - "webpack-cli": "4.x.x" - } - }, - "node_modules/@webpack-cli/serve": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.3.1.tgz", - "integrity": "sha512-0qXvpeYO6vaNoRBI52/UsbcaBydJCggoBBnIo/ovQQdn6fug0BgwsjorV1hVS7fMqGVTZGcVxv8334gjmbj5hw==", - "dev": true, - "peerDependencies": { - "webpack-cli": "4.x.x" - }, - "peerDependenciesMeta": { - "webpack-dev-server": { - "optional": true - } - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -1138,9 +1095,9 @@ "license": "Apache-2.0" }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "dev": true, "license": "MIT", "bin": { @@ -1168,6 +1125,7 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } @@ -1183,10 +1141,11 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -1267,15 +1226,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/async": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", @@ -1313,14 +1263,24 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, + "version": "5.0.7", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", + "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/brace-expansion/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -1381,15 +1341,6 @@ "dev": true, "license": "MIT" }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/caniuse-lite": { "version": "1.0.30001769", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", @@ -1514,6 +1465,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -1554,12 +1506,6 @@ "simple-swizzle": "^0.2.2" } }, - "node_modules/colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - }, "node_modules/colornames": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/colornames/-/colornames-1.1.1.tgz", @@ -1589,12 +1535,6 @@ "dev": true, "license": "MIT" }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, "node_modules/core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1677,9 +1617,9 @@ "dev": true }, "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1698,7 +1638,8 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/diagnostics": { "version": "1.1.1", @@ -1720,39 +1661,6 @@ "node": ">=0.3.1" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/dom-serializer": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", @@ -1861,27 +1769,6 @@ "node": ">=10.13.0" } }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/enquirer/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/entities": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", @@ -1896,10 +1783,11 @@ "integrity": "sha512-zoB603vQReOFvTg5xMl9I1P2PnHsHQQKTEowsKKD7nseUfJq6UWzK+4YtlWUO1nhiQUxe6XMkk+JleSZD1NZFA==" }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.21.0.tgz", + "integrity": "sha512-Lw7I8Zp5YKHFCXL7+Dz95g4CcbMEpgvqZNNq3AmlT5XAV6CgAAk6gyAMqn2zjw08K9BHfcNuKrMiCPLByGafow==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -1907,6 +1795,16 @@ "node": ">=4" } }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-module-lexer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", @@ -1925,55 +1823,62 @@ } }, "node_modules/eslint": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.13.0.tgz", - "integrity": "sha512-D+Xei61eInqauAyTJ6C0q6x9mx7kTUC1KZ0m0LSEexR0V+e94K12LmWX076ZIsldwfQ2RONdaJe0re0TRGQbRQ==", + "version": "10.7.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.7.0.tgz", + "integrity": "sha512-GVTD7s1vdIl6UYvAfriOPeY1Df8LIZjfofLvHwde+erDHGGuHyuM6xoxRxmHiebhYuD2p1vN4wWh0XzPARSGDQ==", "dev": true, + "license": "MIT", + "workspaces": [ + "packages/*" + ], "dependencies": { - "@eslint/eslintrc": "^1.2.1", - "@humanwhocodes/config-array": "^0.9.2", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.1.1", - "eslint-utils": "^3.0.0", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^6.0.1", - "globals": "^13.6.0", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", "ignore": "^5.2.0", - "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", + "minimatch": "^10.2.4", "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "regexpp": "^3.2.0", - "strip-ansi": "^6.0.1", - "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-scope": { @@ -1989,148 +1894,43 @@ "node": ">=8.0.0" } }, - "node_modules/eslint-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", - "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^2.0.0" - }, - "engines": { - "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=5" - } - }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-visitor-keys": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", - "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-webpack-plugin": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-3.2.0.tgz", - "integrity": "sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-webpack-plugin/-/eslint-webpack-plugin-6.0.0.tgz", + "integrity": "sha512-x9m9cH0Rw0RNJB/utP9AMGzmuXg/yLP/FCHSVSfsyjQUyetXN4g1BaIqxkj1i3mVX48aOys0bsVt63LLfh6oYg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/eslint": "^7.29.0 || ^8.4.1", - "jest-worker": "^28.0.2", - "micromatch": "^4.0.5", + "@types/eslint": "^9.6.1", + "micromatch": "^4.0.8", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0" + "schema-utils": "^4.3.3" }, "engines": { - "node": ">= 12.13.0" + "node": ">= 20.9.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0", + "eslint": "^9.0.0 || ^10.0.0", "webpack": "^5.0.0" } }, - "node_modules/eslint-webpack-plugin/node_modules/@types/eslint": { - "version": "8.4.5", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.4.5.tgz", - "integrity": "sha512-dhsC09y1gpJWnK+Ff4SGvCuSnk9DaU0BJZSzOwa6GVSg65XtTugLBITDAAzRU5duGBoXBHpdR/9jHGxJjNflJQ==", - "dev": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/eslint-webpack-plugin/node_modules/jest-worker": { - "version": "28.1.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-28.1.3.tgz", - "integrity": "sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0" - } - }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2144,16 +1944,35 @@ } }, "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.1.1.tgz", - "integrity": "sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==", + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz", + "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { + "@types/esrecurse": "^4.3.1", + "@types/estree": "^1.0.8", "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint/node_modules/estraverse": { @@ -2161,53 +1980,48 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "node_modules/espree": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz", + "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "ansi-regex": "^5.0.1" + "acorn": "^8.16.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^5.0.1" }, "engines": { - "node": ">=8" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/espree": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.1.tgz", - "integrity": "sha512-bvdyLmJMfwkV3NCRl5ZhJf22zBFo1y8bYh3VYb+bfzqNB4Je68P2sSuXyuFquzWLebHpNd2/d5uv7yoP9ISnGQ==", + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", "dev": true, - "dependencies": { - "acorn": "^8.7.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^3.3.0" - }, + "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz", + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -2220,6 +2034,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -2255,10 +2070,11 @@ } }, "node_modules/esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -2272,50 +2088,6 @@ "node": ">=0.8.x" } }, - "node_modules/execa": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", - "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/execa/node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/execa/node_modules/is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/expand-home-dir": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/expand-home-dir/-/expand-home-dir-0.0.3.tgz", @@ -2327,39 +2099,19 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "node_modules/fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" }, "node_modules/fast-safe-stringify": { "version": "2.0.6", @@ -2383,36 +2135,22 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fastest-levenshtein": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", - "integrity": "sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, "node_modules/fecha": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-2.3.3.tgz", "integrity": "sha512-lUGBnIamTAwk4znq5BcqsDaxSmZ9nDVJaij6NvRt/Tg4R69gERA+otPKbS86ROw9nxVMw2/mp1fnaiWqbs6Sdg==" }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/file-stream-rotator": { @@ -2434,6 +2172,23 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/flat": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", @@ -2444,60 +2199,25 @@ } }, "node_modules/flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "dev": true, - "dependencies": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flat-cache/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/flat-cache/node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.3.tgz", + "integrity": "sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==", + "dev": true, + "license": "ISC" }, "node_modules/fmtr": { "version": "1.1.2", @@ -2548,13 +2268,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, "node_modules/fsevents": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", @@ -2573,16 +2286,11 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, "node_modules/get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", @@ -2662,27 +2370,6 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", - "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, "node_modules/glob/node_modules/jackspeak": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", @@ -2707,21 +2394,6 @@ "node": "20 || >=22" } }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", - "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob/node_modules/path-scurry": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", @@ -2739,35 +2411,13 @@ } }, "node_modules/globals": { - "version": "13.13.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", - "integrity": "sha512-EQ7Q18AJlPwp3vUDL4mKA0KXrXyNIQyWon6T6XQiBQF0XHvRsiCSrWmmeATpUzdJN2HhWZU6Pdl0a9zdep5p6A==", - "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "version": "17.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-17.7.0.tgz", + "integrity": "sha512-Czmyns5dUsq4seFBR/Kdydhmo8y9kC79hiSkPn0YcGtNnYWnrgt0vjrSjx9tspoDGWm2CMarffRuLjM4xUz8xg==", "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -2788,10 +2438,11 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -2854,15 +2505,6 @@ "node": ">= 14" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, "node_modules/icss-utils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", @@ -2909,36 +2551,12 @@ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -2948,6 +2566,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -2959,23 +2580,21 @@ "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, + "node_modules/interpret": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", + "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/invert-kv": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", @@ -3000,12 +2619,13 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -3074,8 +2694,9 @@ "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha1-LBY7P6+xtgbZ0Xko8FwqHDjgdnc=", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -3116,8 +2737,9 @@ "node_modules/isobject": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3189,6 +2811,13 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -3199,7 +2828,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -3233,11 +2863,22 @@ "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", "dev": true }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -3267,6 +2908,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -3332,12 +2974,6 @@ "deprecated": "This package is deprecated. Use the optional chaining (?.) operator instead.", "dev": true }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3469,15 +3105,6 @@ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -3555,16 +3182,18 @@ } }, "node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^5.0.5" }, "engines": { - "node": "*" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -3688,22 +3317,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mocha/node_modules/glob": { "version": "10.5.0", "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", @@ -3961,28 +3574,23 @@ } }, "node_modules/optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", - "word-wrap": "^1.2.3" + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/optionator/node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true - }, "node_modules/ora": { "version": "8.2.0", "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", @@ -4200,10 +3808,11 @@ } }, "node_modules/p-try": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", - "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4220,18 +3829,6 @@ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4241,16 +3838,6 @@ "node": ">=8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4263,7 +3850,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-scurry": { "version": "1.11.1", @@ -4318,6 +3906,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -4330,6 +3919,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -4343,6 +3933,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -4355,6 +3946,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -4370,6 +3962,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -4488,6 +4081,7 @@ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -4516,26 +4110,6 @@ "node": ">=6" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -4595,16 +4169,17 @@ "node": ">=8.10.0" } }, - "node_modules/regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "node_modules/rechoir": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", + "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT", + "dependencies": { + "resolve": "^1.20.0" }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "engines": { + "node": ">= 10.13.0" } }, "node_modules/require-directory": { @@ -4626,18 +4201,23 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "dev": true, + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "es-errors": "^1.3.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -4647,6 +4227,7 @@ "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -4659,6 +4240,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4709,39 +4291,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -4854,6 +4403,7 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -4929,15 +4479,6 @@ "node": ">=8" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5143,6 +4684,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -5250,11 +4792,53 @@ "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "node_modules/tinyglobby": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.17.tgz", + "integrity": "sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.5.tgz", + "integrity": "sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, "node_modules/to-regex-range": { "version": "5.0.1", @@ -5278,6 +4862,19 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" }, + "node_modules/ts-api-utils": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz", + "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, "node_modules/ts-loader": { "version": "9.4.2", "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.2.tgz", @@ -5358,17 +4955,12 @@ "node": ">=8" } }, - "node_modules/tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -5385,29 +4977,232 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=10" + "node": ">=4.2.0" + } + }, + "node_modules/typescript-eslint": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.65.0.tgz", + "integrity": "sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.65.0", + "@typescript-eslint/parser": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" } }, - "node_modules/typescript": { - "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.65.0.tgz", + "integrity": "sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/type-utils": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" }, "engines": { - "node": ">=4.2.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.65.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.65.0.tgz", + "integrity": "sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.65.0.tgz", + "integrity": "sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.65.0.tgz", + "integrity": "sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0", + "@typescript-eslint/utils": "8.65.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.65.0.tgz", + "integrity": "sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/project-service": "8.65.0", + "@typescript-eslint/tsconfig-utils": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/visitor-keys": "8.65.0", + "debug": "^4.4.3", + "minimatch": "^10.2.2", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.5.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.65.0.tgz", + "integrity": "sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.65.0", + "@typescript-eslint/types": "8.65.0", + "@typescript-eslint/typescript-estree": "8.65.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.65.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.65.0.tgz", + "integrity": "sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.65.0", + "eslint-visitor-keys": "^5.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/typescript-eslint/node_modules/eslint-visitor-keys": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz", + "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/typescript-eslint/node_modules/ignore": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.6.tgz", + "integrity": "sha512-BAg6QkE8W+TuQLrrw0Ugr7HegXduRuuj8/ti2kSOc+jz1dmx8/WNcjr6XGnq5YpDWxFwwaavqD0+jIUOKelTsw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/ua-parser-js": { @@ -5495,12 +5290,6 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vscode-jsonrpc": { "version": "8.2.1-next.1", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.1-next.1.tgz", @@ -5632,40 +5421,47 @@ } }, "node_modules/webpack-cli": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.6.0.tgz", - "integrity": "sha512-9YV+qTcGMjQFiY7Nb1kmnupvb1x40lfpj8pwdO/bom+sQiP4OBMKjHq29YQrlDWDPZO9r/qWaRRywKaRDKqBTA==", - "dev": true, - "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^1.0.2", - "@webpack-cli/info": "^1.2.3", - "@webpack-cli/serve": "^1.3.1", - "colorette": "^1.2.1", - "commander": "^7.0.0", - "enquirer": "^2.3.6", - "execa": "^5.0.0", - "fastest-levenshtein": "^1.0.12", - "import-local": "^3.0.2", - "interpret": "^2.2.0", - "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^5.7.3" + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-7.2.1.tgz", + "integrity": "sha512-YwSGbcZdfz12DM8JIseVPr3oBb09IgVCVc4vY3oDvZnI/mALTGPAP1QiqOi4/bBLSJrRHaqDIXeHcNA0+G38aw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "^1.1.0", + "commander": "^14.0.3", + "cross-spawn": "^7.0.6", + "envinfo": "^7.21.0", + "import-local": "^3.2.0", + "interpret": "^3.1.1", + "rechoir": "^0.8.0", + "webpack-merge": "^6.0.1" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=10.13.0" + "node": ">=20.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "4.x.x || 5.x.x" + "js-yaml": "^4.0.0 || ^5.0.0", + "json5": "^2.2.3", + "toml": "^3.0.0 || ^4.0.0", + "webpack": "^5.101.0", + "webpack-bundle-analyzer": "^4.0.0 || ^5.0.0", + "webpack-dev-server": "^5.0.0 || ^6.0.0" }, "peerDependenciesMeta": { - "@webpack-cli/generators": { + "js-yaml": { + "optional": true + }, + "json5": { "optional": true }, - "@webpack-cli/migrate": { + "toml": { "optional": true }, "webpack-bundle-analyzer": { @@ -5677,46 +5473,28 @@ } }, "node_modules/webpack-cli/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/webpack-cli/node_modules/interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/webpack-cli/node_modules/rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, - "dependencies": { - "resolve": "^1.9.0" - }, + "license": "MIT", "engines": { - "node": ">= 0.10" + "node": ">=20" } }, "node_modules/webpack-merge": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.7.3.tgz", - "integrity": "sha512-6/JUQv0ELQ1igjGDzHkXbVDRxkfA57Zw7PfiupdLFJYrgFqY5ZP8xxbpp2lU3EPwYx89ht5Z/aDkD40hFCm5AA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-6.0.1.tgz", + "integrity": "sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "flat": "^5.0.2", + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-sources": { @@ -5754,10 +5532,11 @@ } }, "node_modules/wildcard": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz", - "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==", - "dev": true + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" }, "node_modules/winreg-utf8": { "version": "0.1.1", @@ -5870,10 +5649,11 @@ } }, "node_modules/word-wrap": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.4.tgz", - "integrity": "sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } diff --git a/package.json b/package.json index a963641e4..e36dc28da 100644 --- a/package.json +++ b/package.json @@ -2127,7 +2127,7 @@ "build": "node scripts/index.mjs build-or-download", "fast-build-server": "node scripts/index.mjs dev-server", "watch-server": "node scripts/index.mjs watch-server", - "eslint": "eslint --ignore-path .eslintignore --ext .js,.ts,.tsx .", + "eslint": "eslint .", "repo:check": "node scripts/index.mjs repo-check", "repo:fix": "node scripts/index.mjs repo-fix", "clean-jre": "node scripts/index.mjs clean-jre", @@ -2140,6 +2140,7 @@ "prepare-pre-release": "node scripts/index.mjs prepare-pre-release" }, "devDependencies": { + "@stylistic/eslint-plugin": "^5.10.0", "@types/fs-extra": "^8.0.0", "@types/glob": "5.0.30", "@types/lodash.findindex": "^4.6.6", @@ -2153,12 +2154,11 @@ "@types/vscode-webview": "^1.57.0", "@types/winreg": "^1.2.30", "@types/winston": "^2.4.4", - "@typescript-eslint/eslint-plugin": "^5.18.0", - "@typescript-eslint/parser": "^5.18.0", - "@vscode/test-electron": "^2.5.2", + "@vscode/test-electron": "^3.1.0", "css-loader": "^6.7.3", - "eslint": "^8.13.0", - "eslint-webpack-plugin": "^3.2.0", + "eslint": "^10.7.0", + "eslint-webpack-plugin": "^6.0.0", + "globals": "^17.7.0", "lodash.findindex": "^4.6.0", "mini-css-extract-plugin": "^2.9.4", "minimist": ">=1.2.6", @@ -2167,8 +2167,9 @@ "tar": "^7.5.11", "ts-loader": "^9.4.2", "typescript": "^4.6.4", + "typescript-eslint": "^8.65.0", "webpack": "^5.105.0", - "webpack-cli": "^4.6.0" + "webpack-cli": "^7.2.1" }, "dependencies": { "@redhat-developer/vscode-extension-proposals": "0.0.23", diff --git a/scripts/jre.mjs b/scripts/jre.mjs index 0485afda7..f66f8062f 100644 --- a/scripts/jre.mjs +++ b/scripts/jre.mjs @@ -1,5 +1,4 @@ #!/usr/bin/env node -/* eslint-disable @typescript-eslint/naming-convention */ import fs from 'fs-extra'; import path from 'path'; diff --git a/scripts/server.mjs b/scripts/server.mjs index 2037d99c9..b2592250f 100644 --- a/scripts/server.mjs +++ b/scripts/server.mjs @@ -1,7 +1,5 @@ #!/usr/bin/env node -/* eslint-disable no-underscore-dangle */ - import fs from 'fs-extra'; import path from 'path'; import { execSync } from 'child_process'; diff --git a/scripts/test.mjs b/scripts/test.mjs index 3886c5c19..b3c6489ff 100644 --- a/scripts/test.mjs +++ b/scripts/test.mjs @@ -1,5 +1,4 @@ #!/usr/bin/env node -/* eslint-disable @typescript-eslint/naming-convention */ import fs from 'fs-extra'; import path from 'path'; From f4994be80a7e32db05da216c072d71811adec199 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Aug 2026 17:34:37 +0000 Subject: [PATCH 703/708] build(deps): bump brace-expansion Bumps and [brace-expansion](https://github.com/juliangruber/brace-expansion). These dependencies needed to be updated together. Updates `brace-expansion` from 5.0.7 to 5.0.9 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.7...v5.0.9) Updates `brace-expansion` from 2.0.3 to 2.1.4 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](https://github.com/juliangruber/brace-expansion/compare/v5.0.7...v5.0.9) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 5.0.9 dependency-type: indirect - dependency-name: brace-expansion dependency-version: 2.1.4 dependency-type: indirect ... Signed-off-by: dependabot[bot] --- package-lock.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index bff0a8b8d..44a307b19 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1263,15 +1263,15 @@ } }, "node_modules/brace-expansion": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz", - "integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz", + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==", "license": "MIT", "dependencies": { "balanced-match": "^4.0.2" }, "engines": { - "node": "18 || 20 || >=22" + "node": "20 || >=22" } }, "node_modules/brace-expansion/node_modules/balanced-match": { @@ -3281,9 +3281,9 @@ } }, "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -5312,9 +5312,9 @@ } }, "node_modules/vscode-languageclient/node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.1.4.tgz", + "integrity": "sha512-hGfVzPxthbf3+2yjg/RBs60cB0FhqBS/zvdV/4wn4/BmN0bNMMHPc4V/BbFieqf1TKAGGAHnY4eSjajCl0f2Xg==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" From 1a90cbde2d1a9f3af8ec4f1db2ab91cefaeee5a0 Mon Sep 17 00:00:00 2001 From: Changyong Gong Date: Tue, 30 Jun 2026 11:01:25 +0800 Subject: [PATCH 704/708] fix: fall back to stdio when pipe startup fails --- src/fileEventHandler.ts | 14 +++- src/standardLanguageClient.ts | 32 +++++-- src/standardLanguageClientStart.ts | 66 +++++++++++++++ .../standardLanguageClient.test.ts | 83 +++++++++++++++++++ 4 files changed, 185 insertions(+), 10 deletions(-) create mode 100644 src/standardLanguageClientStart.ts create mode 100644 test/standard-mode-suite/standardLanguageClient.test.ts diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index 03e950b5a..e2268c5f8 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -13,6 +13,7 @@ import * as stringInterpolate from 'fmtr'; import { apiManager } from './apiManager'; let serverReady: boolean = false; +type LanguageClientProvider = LanguageClient | (() => LanguageClient); const BRACE_POSITION_KEY = "org.eclipse.jdt.core.formatter.brace_position_for_type_declaration"; const END_OF_LINE = "end_of_line"; @@ -24,7 +25,7 @@ export function setServerStatus(ready: boolean) { serverReady = ready; } -export function registerFileEventHandlers(client: LanguageClient, context: ExtensionContext) { +export function registerFileEventHandlers(client: LanguageClientProvider, context: ExtensionContext) { if (workspace.onDidCreateFiles) {// Theia doesn't support workspace.onDidCreateFiles yet context.subscriptions.push(workspace.onDidCreateFiles(handleNewJavaFiles)); } @@ -188,7 +189,11 @@ async function handleNewJavaFiles(e: FileCreateEvent) { }, 100); } -function getWillRenameHandler(client: LanguageClient) { +function getLanguageClient(client: LanguageClientProvider): LanguageClient { + return typeof client === 'function' ? client() : client; +} + +function getWillRenameHandler(client: LanguageClientProvider) { return function handleWillRenameFiles(e: FileWillRenameEvent): void { if (!serverReady) { return; @@ -213,10 +218,11 @@ function getWillRenameHandler(client: LanguageClient) { return; } - const edit = await client.sendRequest(WillRenameFiles.type, { + const languageClient = getLanguageClient(client); + const edit = await languageClient.sendRequest(WillRenameFiles.type, { files: javaRenameEvents }); - resolve(await client.protocol2CodeConverter.asWorkspaceEdit(edit)); + resolve(await languageClient.protocol2CodeConverter.asWorkspaceEdit(edit)); } catch (ex) { reject(ex); } diff --git a/src/standardLanguageClient.ts b/src/standardLanguageClient.ts index fc73cbadc..8677708fc 100644 --- a/src/standardLanguageClient.ts +++ b/src/standardLanguageClient.ts @@ -4,7 +4,7 @@ import * as net from 'net'; import * as path from 'path'; import { CancellationToken, CodeActionKind, commands, ConfigurationTarget, DocumentSelector, EventEmitter, ExtensionContext, extensions, languages, Location, ProgressLocation, TextEditor, Uri, ViewColumn, window, workspace, WorkspaceConfiguration } from "vscode"; import { ConfigurationParams, ConfigurationRequest, LanguageClientOptions, Location as LSLocation, MessageType, Position as LSPosition, TextDocumentPositionParams, WorkspaceEdit, StaticFeature, ClientCapabilities, FeatureState, TelemetryEventNotification } from "vscode-languageclient"; -import { LanguageClient, StreamInfo } from "vscode-languageclient/node"; +import { LanguageClient, ServerOptions, StreamInfo } from "vscode-languageclient/node"; import { apiManager } from "./apiManager"; import * as buildPath from './buildpath'; import { javaRefactorKinds, RefactorDocumentProvider } from "./codeActionProvider"; @@ -42,6 +42,7 @@ import { listJdks, sortJdksBySource, sortJdksByVersion } from './jdkUtils'; import { ClientCodeActionProvider } from './clientCodeActionProvider'; import { BuildFileSelector } from './buildFilesSelector'; import { extendedOutlineQuickPick } from "./outline/extendedOutlineQuickPick"; +import { startWithStdioFallback } from './standardLanguageClientStart'; const extensionName = 'Language Support for Java'; const GRADLE_CHECKSUM = "gradle/checksum/prompt"; @@ -50,6 +51,7 @@ const USE_JAVA = "Use Java "; const AS_GRADLE_JVM = " as Gradle JVM"; const UPGRADE_GRADLE = "Upgrade Gradle to "; const GRADLE_IMPORT_JVM = "java.import.gradle.java.home"; +const PIPE_START_TIMEOUT_MS = 30000; export const JAVA_SELECTOR: DocumentSelector = [ { scheme: "file", language: "java", pattern: "**/*.java" }, { scheme: "jdt", language: "java", pattern: "**/*.class" }, @@ -59,6 +61,8 @@ export const JAVA_SELECTOR: DocumentSelector = [ export class StandardLanguageClient { private languageClient: LanguageClient; + private serverOptions: ServerOptions; + private clientOptions: LanguageClientOptions; private status: ClientStatus = ClientStatus.uninitialized; public async initialize(context: ExtensionContext, requirements: RequirementsData, clientOptions: LanguageClientOptions, workspacePath: string, jdtEventEmitter: EventEmitter): Promise { @@ -85,7 +89,7 @@ export class StandardLanguageClient { } }); - let serverOptions; + let serverOptions: ServerOptions; const port = process.env['JDTLS_SERVER_PORT']; if (!port) { const lsPort = process.env['JDTLS_CLIENT_PORT']; @@ -105,19 +109,26 @@ export class StandardLanguageClient { // used during development serverOptions = awaitServerConnection.bind(null, port); } + this.serverOptions = serverOptions; + this.clientOptions = clientOptions; // Create the language client and start the client. - this.languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions, DEBUG); - this.languageClient.registerFeature(new DisableWillRenameFeature()); + this.languageClient = this.createLanguageClient(serverOptions, clientOptions); this.registerCommandsForStandardServer(context, jdtEventEmitter); - fileEventHandler.registerFileEventHandlers(this.languageClient, context); + fileEventHandler.registerFileEventHandlers(() => this.languageClient, context); collectBuildFilePattern(extensions.all); this.status = ClientStatus.initialized; } + private createLanguageClient(serverOptions: ServerOptions, clientOptions: LanguageClientOptions): LanguageClient { + const languageClient = new TracingLanguageClient('java', extensionName, serverOptions, clientOptions, DEBUG); + languageClient.registerFeature(new DisableWillRenameFeature()); + return languageClient; + } + public registerLanguageClientActions(context: ExtensionContext, hasImported: boolean, jdtEventEmitter: EventEmitter) { activationProgressNotification.showProgress(); this.languageClient.onNotification(StatusNotification.type, async (report) => { @@ -777,7 +788,16 @@ export class StandardLanguageClient { public start(): Promise { if (this.languageClient && this.status === ClientStatus.initialized) { this.status = ClientStatus.starting; - return this.languageClient.start(); + return startWithStdioFallback({ + languageClient: this.languageClient, + serverOptions: this.serverOptions, + createLanguageClient: (serverOptions) => this.createLanguageClient(serverOptions, this.clientOptions), + pipeStartTimeout: PIPE_START_TIMEOUT_MS, + onFallback: (error) => logger.warn(`Falling back to 'stdio' (from 'pipe') because starting the pipe transport failed: ${error}`), + }).then(result => { + this.languageClient = result.client; + this.serverOptions = result.serverOptions; + }); } } diff --git a/src/standardLanguageClientStart.ts b/src/standardLanguageClientStart.ts new file mode 100644 index 000000000..5ba496859 --- /dev/null +++ b/src/standardLanguageClientStart.ts @@ -0,0 +1,66 @@ +import { Executable, ServerOptions, TransportKind } from "vscode-languageclient/node"; + +export interface StartableLanguageClient { + start(): Promise; +} + +export interface StartWithStdioFallbackOptions { + languageClient: T; + serverOptions: ServerOptions; + createLanguageClient(serverOptions: Executable): T; + pipeStartTimeout: number; + onFallback?(error: any): void; +} + +class PipeStartTimeoutError extends Error { +} + +export async function startWithStdioFallback(options: StartWithStdioFallbackOptions): Promise<{ client: T; serverOptions: ServerOptions }> { + if (!isPipeExecutable(options.serverOptions)) { + await options.languageClient.start(); + return { client: options.languageClient, serverOptions: options.serverOptions }; + } + + try { + await startWithTimeout(options.languageClient, options.pipeStartTimeout); + return { client: options.languageClient, serverOptions: options.serverOptions }; + } catch (error) { + if (!(error instanceof PipeStartTimeoutError)) { + throw error; + } + options.onFallback?.(error); + const stdioServerOptions = createStdioServerOptions(options.serverOptions); + const stdioClient = options.createLanguageClient(stdioServerOptions); + await stdioClient.start(); + return { client: stdioClient, serverOptions: stdioServerOptions }; + } +} + +async function startWithTimeout(client: StartableLanguageClient, timeout: number): Promise { + let timeoutHandle: NodeJS.Timeout | undefined; + try { + await Promise.race([ + client.start(), + new Promise((_resolve, reject) => { + timeoutHandle = setTimeout(() => reject(new PipeStartTimeoutError(`Starting pipe transport timed out after ${timeout}ms.`)), timeout); + }) + ]); + } finally { + if (timeoutHandle) { + clearTimeout(timeoutHandle); + } + } +} + +function isPipeExecutable(serverOptions: ServerOptions): serverOptions is Executable { + return !!serverOptions && typeof (serverOptions as Executable).command === 'string' && (serverOptions as Executable).transport === TransportKind.pipe; +} + +function createStdioServerOptions(serverOptions: Executable): Executable { + return { + ...serverOptions, + args: serverOptions.args?.slice(), + options: serverOptions.options ? { ...serverOptions.options } : undefined, + transport: TransportKind.stdio, + }; +} diff --git a/test/standard-mode-suite/standardLanguageClient.test.ts b/test/standard-mode-suite/standardLanguageClient.test.ts new file mode 100644 index 000000000..f30564da3 --- /dev/null +++ b/test/standard-mode-suite/standardLanguageClient.test.ts @@ -0,0 +1,83 @@ +'use strict'; + +import * as assert from 'assert'; +import { Executable, TransportKind } from 'vscode-languageclient/node'; +import { startWithStdioFallback, StartableLanguageClient } from '../../src/standardLanguageClientStart'; + +class TestLanguageClient implements StartableLanguageClient { + public startCount = 0; + + constructor(private readonly startResult: Promise) { + } + + public start(): Promise { + this.startCount++; + return this.startResult; + } +} + +suite('Standard Language Client Test', () => { + + test('startWithStdioFallback() - does not fall back when pipe start rejects', async () => { + const pipeClient = new TestLanguageClient(Promise.reject(new Error('pipe failed'))); + const stdioClient = new TestLanguageClient(Promise.resolve()); + const pipeOptions = createServerOptions(TransportKind.pipe); + let fallbackOptions: Executable | undefined; + + await assert.rejects(startWithStdioFallback({ + languageClient: pipeClient, + serverOptions: pipeOptions, + createLanguageClient: serverOptions => { + fallbackOptions = serverOptions; + return stdioClient; + }, + pipeStartTimeout: 1000, + }), /pipe failed/); + + assert.equal(pipeClient.startCount, 1); + assert.equal(stdioClient.startCount, 0); + assert.equal(fallbackOptions, undefined); + }); + + test('startWithStdioFallback() - falls back when pipe start times out', async () => { + const pipeClient = new TestLanguageClient(new Promise(() => { /* never resolves */ })); + const stdioClient = new TestLanguageClient(Promise.resolve()); + let fallbackError: any; + + const result = await startWithStdioFallback({ + languageClient: pipeClient, + serverOptions: createServerOptions(TransportKind.pipe), + createLanguageClient: () => stdioClient, + pipeStartTimeout: 1, + onFallback: error => fallbackError = error, + }); + + assert.equal(pipeClient.startCount, 1); + assert.equal(stdioClient.startCount, 1); + assert.equal(result.client, stdioClient); + assert.equal((result.serverOptions as Executable).transport, TransportKind.stdio); + assert.ok(String(fallbackError).includes('timed out')); + }); + + test('startWithStdioFallback() - does not fall back for stdio start failures', async () => { + const stdioClient = new TestLanguageClient(Promise.reject(new Error('stdio failed'))); + + await assert.rejects(startWithStdioFallback({ + languageClient: stdioClient, + serverOptions: createServerOptions(TransportKind.stdio), + createLanguageClient: () => new TestLanguageClient(Promise.resolve()), + pipeStartTimeout: 1, + }), /stdio failed/); + + assert.equal(stdioClient.startCount, 1); + }); +}); + +function createServerOptions(transport: TransportKind): Executable { + return { + command: 'java', + args: ['-version'], + options: { env: { test: 'true' } }, + transport, + }; +} From 3f8f369a60df543ecd3994be8bd2589db0c3023a Mon Sep 17 00:00:00 2001 From: wenyt <75360946+wenytang-ms@users.noreply.github.com> Date: Wed, 12 Aug 2026 05:00:10 +0800 Subject: [PATCH 705/708] Start JDT LS with a UTF-8 locale when the environment selects ASCII (#4473) The JVM derives sun.jnu.encoding - the charset it uses to decode and encode file names on POSIX systems - from the process locale at startup, and silently ignores -Dsun.jnu.encoding, so neither java.jdt.ls.vmargs nor -Dfile.encoding can influence it. Containers routinely start with an unset or C/POSIX locale, which makes the JVM fall back to ASCII. Any workspace file whose name contains non-ASCII characters is then decoded into U+FFFD and can no longer be turned into a java.nio.file.Path, so importing the workspace fails with "InvalidPathException: Malformed input or input contains unmappable characters" and every project after the failing one is missing from the Java Projects view. This is why the reported project only reproduces inside a container and works fine locally and over SSH remote. Correct the locale of the JDT LS process when, and only when, the inherited one cannot represent non-ASCII file names. A deliberately configured non-UTF-8 locale such as zh_CN.GBK is left untouched, and only the LC_CTYPE category is set unless LC_ALL is the variable selecting ASCII, so message, number and time formatting keep following the environment. Fixes https://github.com/microsoft/vscode-java-dependency/issues/1041 --- src/javaServerStarter.ts | 57 +++++++++- .../javaServerStarter.test.ts | 103 ++++++++++++++++++ 2 files changed, 159 insertions(+), 1 deletion(-) create mode 100644 test/standard-mode-suite/javaServerStarter.test.ts diff --git a/src/javaServerStarter.ts b/src/javaServerStarter.ts index 5e5cbed6f..9b566f372 100644 --- a/src/javaServerStarter.ts +++ b/src/javaServerStarter.ts @@ -42,7 +42,7 @@ const SHARED_ARCHIVE_FILE_LOC= '-XX:SharedArchiveFile='; export function prepareExecutable(requirements: RequirementsData, workspacePath, context: ExtensionContext, isSyntaxServer: boolean): Executable { const executable: Executable = Object.create(null); const options: ExecutableOptions = Object.create(null); - options.env = Object.assign({ syntaxserver: isSyntaxServer }, process.env, getVSCodeVariablesMap()); + options.env = Object.assign({ syntaxserver: isSyntaxServer }, process.env, getVSCodeVariablesMap(), getUnicodeLocaleEnv()); if (os.platform() === 'win32') { const vmargs = getJavaConfiguration().get('jdt.ls.vmargs', ''); const watchParentProcess = '-DwatchParentProcess=false'; @@ -73,6 +73,61 @@ export function prepareExecutable(requirements: RequirementsData, workspacePath, logger.info(`Starting Java server with: ${executable.command} ${executable.args?.join(' ')}`); return executable; } + +/** + * Environment variables that select the JVM's file name charset on POSIX systems, in the precedence + * order POSIX defines for the `LC_CTYPE` category. The JVM reads them through `setlocale(LC_ALL, "")` + * followed by `ParseLocale(LC_CTYPE, ...)` in `unix/native/libjava/java_props_md.c`. + */ +export const LOCALE_ENV_VARS: string[] = ['LC_ALL', 'LC_CTYPE', 'LANG']; + +/** Locales under which the JVM falls back to ASCII and cannot represent non-ASCII file names. */ +const ASCII_LOCALES: string[] = ['C', 'POSIX', 'C.ASCII']; + +export const UTF8_LOCALE: string = 'C.UTF-8'; + +/** + * On POSIX systems the JVM decodes and encodes file names with `sun.jnu.encoding`, which it derives + * from the process locale at startup. `-Dsun.jnu.encoding=...` is silently ignored, so neither + * `java.jdt.ls.vmargs` nor `-Dfile.encoding` can influence it. + * + * Containers and services routinely start with an unset or `C`/`POSIX` locale, which makes the JVM + * fall back to ASCII. Every workspace file whose name contains non-ASCII characters is then decoded + * into U+FFFD by `JNU_NewStringPlatform` and can no longer be encoded back by `UnixPath.encode`, + * which throws `InvalidPathException: Malformed input or input contains unmappable characters` and + * aborts the whole workspace initialization. + * See https://github.com/microsoft/vscode-java-dependency/issues/1041 + * + * Only the unset/`C`/`POSIX` cases are overridden, so a deliberately configured non-UTF-8 locale + * (e.g. `zh_CN.GBK`, matching file names actually stored in that encoding) is left untouched. When + * the locale has to be corrected, only the `LC_CTYPE` category is set, so message/number/time + * formatting keeps following the environment. + */ +export function getUnicodeLocaleEnv(): { [key: string]: string } { + // Windows is unaffected and does not read these variables: the JVM derives sun.jnu.encoding from + // GetACP() there, and file names never go through a charset because WinNTFileSystem hands the + // UTF-16 WIN32_FIND_DATAW.cFileName straight to NewString and WindowsPath copies the Java String + // into the native buffer verbatim. Injecting POSIX locale variables would only leak into the + // child processes JDT LS spawns. + if (os.platform() === 'win32') { + return {}; + } + const locale = LOCALE_ENV_VARS.map(name => process.env[name]).find(value => !!value); + if (locale && !ASCII_LOCALES.includes(locale)) { + return {}; + } + logger.info(`Locale '${locale ?? ''}' cannot represent non-ASCII file names, starting JDT LS with ${UTF8_LOCALE}`); + const env: { [key: string]: string } = {}; + if (process.env.LC_ALL) { + // LC_ALL overrides every other category, so it has to be replaced when it is the one selecting ASCII. + env.LC_ALL = UTF8_LOCALE; + } else { + // LC_CTYPE is the only category that selects the charset, so leave the others alone. + env.LC_CTYPE = UTF8_LOCALE; + } + return env; +} + export function awaitServerConnection(port): Thenable { const addr = parseInt(port); return new Promise((res, rej) => { diff --git a/test/standard-mode-suite/javaServerStarter.test.ts b/test/standard-mode-suite/javaServerStarter.test.ts new file mode 100644 index 000000000..95e898d26 --- /dev/null +++ b/test/standard-mode-suite/javaServerStarter.test.ts @@ -0,0 +1,103 @@ +'use strict'; + +import * as assert from 'assert'; +import { platform } from 'os'; +import { getUnicodeLocaleEnv, LOCALE_ENV_VARS, UTF8_LOCALE } from '../../src/javaServerStarter'; + +function setLocale(...values: [string, string][]): void { + for (const name of LOCALE_ENV_VARS) { + delete process.env[name]; + } + for (const [name, value] of values) { + process.env[name] = value; + } +} + +function utf8Env(variable: string): { [key: string]: string } { + const env: { [key: string]: string } = {}; + env[variable] = UTF8_LOCALE; + return env; +} + +suite('Java Server Starter Test', () => { + + const saved: [string, string][] = []; + + suiteSetup(() => { + for (const name of LOCALE_ENV_VARS) { + if (process.env[name] !== undefined) { + saved.push([name, process.env[name]]); + } + } + }); + + suiteTeardown(() => { + setLocale(...saved); + }); + + test('getUnicodeLocaleEnv() - never overrides the locale on Windows', function () { + if (platform() !== 'win32') { + this.skip(); + } + setLocale(); + assert.deepStrictEqual(getUnicodeLocaleEnv(), {}); + }); + + test('getUnicodeLocaleEnv() - forces UTF-8 when the locale is unset', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(); + assert.deepStrictEqual(getUnicodeLocaleEnv(), utf8Env('LC_CTYPE')); + }); + + test('getUnicodeLocaleEnv() - forces UTF-8 for ASCII only locales', function () { + if (platform() === 'win32') { + this.skip(); + } + for (const locale of ['C', 'POSIX', 'C.ASCII']) { + setLocale(['LANG', locale]); + assert.deepStrictEqual(getUnicodeLocaleEnv(), utf8Env('LC_CTYPE'), `LANG=${locale}`); + } + }); + + test('getUnicodeLocaleEnv() - keeps an existing UTF-8 locale', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(['LANG', 'en_US.UTF-8']); + assert.deepStrictEqual(getUnicodeLocaleEnv(), {}); + }); + + test('getUnicodeLocaleEnv() - keeps a deliberately configured non-UTF-8 locale', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(['LANG', 'zh_CN.GBK']); + assert.deepStrictEqual(getUnicodeLocaleEnv(), {}); + }); + + test('getUnicodeLocaleEnv() - replaces LC_ALL because it overrides every other category', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(['LC_ALL', 'C'], ['LANG', 'en_US.UTF-8']); + assert.deepStrictEqual(getUnicodeLocaleEnv(), utf8Env('LC_ALL')); + }); + + test('getUnicodeLocaleEnv() - only corrects LC_CTYPE when LC_ALL is unset', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(['LC_CTYPE', 'C'], ['LANG', 'en_US.UTF-8']); + assert.deepStrictEqual(getUnicodeLocaleEnv(), utf8Env('LC_CTYPE')); + }); + + test('getUnicodeLocaleEnv() - LC_CTYPE takes precedence over LANG', function () { + if (platform() === 'win32') { + this.skip(); + } + setLocale(['LC_CTYPE', 'en_US.UTF-8'], ['LANG', 'C']); + assert.deepStrictEqual(getUnicodeLocaleEnv(), {}); + }); +}); From 46bda369349935188769c6e78edeed078ab03a1a Mon Sep 17 00:00:00 2001 From: David Thompson Date: Wed, 29 Jul 2026 16:45:34 -0400 Subject: [PATCH 706/708] Project-only search scope See https://github.com/eclipse-jdtls/eclipse.jdt.ls/pull/3850, this is the client side changes needed to adopt that PR. Signed-off-by: David Thompson --- package.json | 6 ++++-- src/extension.ts | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index e36dc28da..a31fc8a99 100644 --- a/package.json +++ b/package.json @@ -1644,11 +1644,13 @@ "type": "string", "enum": [ "all", - "main" + "main", + "projectOnly" ], "enumDescriptions": [ "Search on all classpath entries including reference libraries and projects.", - "All classpath entries excluding test classpath entries." + "All classpath entries excluding test classpath entries.", + "Only search sources, tests, and referenced projects, excluding the JDK and referenced libraries from the search." ], "default": "all", "markdownDescription": "Specifies the scope which must be used for search operation like \n - Find Reference\n - Call Hierarchy\n - Workspace Symbols", diff --git a/src/extension.ts b/src/extension.ts index 8679e85e9..48a71c1dd 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -701,7 +701,7 @@ async function postExtensionStartInit( }); context.subscriptions.push(commands.registerCommand(Commands.CHANGE_JAVA_SEARCH_SCOPE, async () => { - const selection = await window.showQuickPick(["all", "main"], { + const selection = await window.showQuickPick(["all", "main", "projectOnly"], { canPickMany: false, placeHolder: `Current: ${workspace.getConfiguration().get("java.search.scope")}`, }); From 56d9cc3a7a5c3aeb91b7126fd0e3ddc928590f0f Mon Sep 17 00:00:00 2001 From: MeherSrujana <71970450+MeherSru@users.noreply.github.com> Date: Thu, 13 Aug 2026 19:17:54 +0100 Subject: [PATCH 707/708] Add setting to make new classes package-private instead of public (#4484) --- README.md | 1 + package.json | 7 +++++++ src/fileEventHandler.ts | 6 ++++-- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 3eaacf920..488ac8885 100644 --- a/README.md +++ b/README.md @@ -201,6 +201,7 @@ The following settings are supported: * `java.project.resourceFilters`: Excludes files and folders from being refreshed by the Java Language Server, which can improve the overall performance. For example, ["node_modules","\.git"] will exclude all files and folders named 'node_modules' or '.git'. Pattern expressions must be compatible with `java.util.regex.Pattern`. Defaults to ["node_modules","\.git"]. * `java.templates.fileHeader`: Specifies the file header comment for new Java file. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.methodBody`: Specifies the method body snippet for unimplemented methods (e.g. generated by "Add unimplemented methods"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). +* `java.templates.preferPackagePrivateVisibility`: Specifies whether newly created top-level types (class/interface/enum/record) should be package-private instead of public. Defaults to `false`. * `java.templates.methodBodySuper`: Specifies the method body snippet for overridden methods that call `super` (e.g. generated by "Override/Implement Methods"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.catchBody`: Specifies the catch block body snippet (e.g. generated by "Surround with try/catch"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). * `java.templates.typeComment`: Specifies the type comment for new Java type. Supports configuring multi-line comments with an array of strings, and using ${variable} to reference the [predefined variables](https://github.com/redhat-developer/vscode-java/wiki/Predefined-Variables-for-Java-Template-Snippets). diff --git a/package.json b/package.json index a31fc8a99..fff1f8de0 100644 --- a/package.json +++ b/package.json @@ -1247,6 +1247,13 @@ ], "order": 30 }, + "java.templates.preferPackagePrivateVisibility": { + "type": "boolean", + "markdownDescription": "Specifies whether newly created top-level types (class/interface/record) should be package-private instead of public.", + "scope": "window", + "default": false, + "order": 40 + }, "java.templates.methodBodySuper": { "type": "array", "markdownDescription": "Specifies the method body snippet for overridden methods that call `super` (e.g. generated by \"Override/Implement Methods\"). Supports configuring multi-line content with an array of strings, and using ${variable} to reference the [predefined variables](command:_java.templateVariables).", diff --git a/src/fileEventHandler.ts b/src/fileEventHandler.ts index e2268c5f8..2fa9a35cf 100644 --- a/src/fileEventHandler.ts +++ b/src/fileEventHandler.ts @@ -145,12 +145,14 @@ async function handleNewJavaFiles(e: FileCreateEvent) { } } let declaration: string; + const preferPackagePrivate = getJavaConfiguration().get("templates.preferPackagePrivateVisibility", false); + const visibilityPrefix = preferPackagePrivate ? "" : "public "; if (isModuleInfo) { declaration = `module \${1:name}`; } else if (!serverReady || await isVersionLessThan(emptyFiles[i].toString(), 14)) { - declaration = `public \${1|class,interface,enum,abstract class,@interface|} ${typeName}`; + declaration = `${visibilityPrefix}\${1|class,interface,enum,abstract class,@interface|} ${typeName}`; } else { - declaration = `public \${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|}`; + declaration = `${visibilityPrefix}\${1|class ${typeName},interface ${typeName},enum ${typeName},record ${typeName}(),abstract class ${typeName},@interface ${typeName}|}`; } let bracePosition = projectSetting[BRACE_POSITION_KEY]; if (bracePosition !== END_OF_LINE && bracePosition !== NEXT_LINE && bracePosition !== NEXT_LINE_SHIFTED) { From 80cb18b7d468b2ffc535e3f03092ad6c4bd0e87d Mon Sep 17 00:00:00 2001 From: Morgan Chang Date: Fri, 14 Aug 2026 08:56:30 -0400 Subject: [PATCH 708/708] Implement confirmation for non-fatal "Move Instance Method" problems before applying edits (#4482) * implement confirmation for move instance method errors before applying edits Signed-off-by: Morgan Chang * advertise support for move refactoring confirmation Signed-off-by: Morgan Chang --------- Signed-off-by: Morgan Chang --- src/extension.ts | 1 + src/protocol.ts | 4 +++- src/refactorAction.ts | 31 ++++++++++++++++++++++++++++--- 3 files changed, 32 insertions(+), 4 deletions(-) diff --git a/src/extension.ts b/src/extension.ts index 48a71c1dd..b7bec291a 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -255,6 +255,7 @@ export async function activate(context: ExtensionContext): Promise advancedExtractRefactoringSupport: true, inferSelectionSupport: ["extractMethod", "extractVariable", "extractField"], moveRefactoringSupport: true, + moveRefactoringConfirmationSupport: true, clientHoverProvider: true, clientDocumentSymbolProvider: true, gradleChecksumWrapperPromptSupport: true, diff --git a/src/protocol.ts b/src/protocol.ts index c31b5a590..6e9f61b9d 100644 --- a/src/protocol.ts +++ b/src/protocol.ts @@ -350,9 +350,10 @@ export interface RenamePosition { } export interface RefactorWorkspaceEdit { - edit: WorkspaceEdit; + edit?: WorkspaceEdit; command?: Command; errorMessage?: string; + confirmationToken?: string; } export interface GetRefactorEditParams { @@ -411,6 +412,7 @@ export interface MoveParams { params: CodeActionParams; destination?: any; updateReferences?: boolean; + confirmationToken?: string; } export interface MoveDestinationsResponse { diff --git a/src/refactorAction.ts b/src/refactorAction.ts index f8b37fb54..b675f6408 100644 --- a/src/refactorAction.ts +++ b/src/refactorAction.ts @@ -6,7 +6,7 @@ import { commands, ExtensionContext, Position, QuickPickItem, TextDocument, Uri, import { FormattingOptions, WorkspaceEdit, RenameFile, DeleteFile, TextDocumentEdit, CodeActionParams, SymbolInformation } from 'vscode-languageclient'; import { LanguageClient } from 'vscode-languageclient/node'; import { Commands as javaCommands } from './commands'; -import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest, GetChangeSignatureInfoRequest, ChangeSignatureInfo } from './protocol'; +import { GetRefactorEditRequest, MoveRequest, RefactorWorkspaceEdit, RenamePosition, GetMoveDestinationsRequest, SearchSymbols, SelectionInfo, InferSelectionRequest, GetChangeSignatureInfoRequest, ChangeSignatureInfo, MoveParams } from './protocol'; import { ChangeSignaturePanel } from './refactoring/changeSignaturePanel'; import { getExtractInterfaceArguments, revealExtractedInterface } from './refactoring/extractInterface'; @@ -252,6 +252,32 @@ async function applyRefactorEdit(languageClient: LanguageClient, refactorEdit: R } } +async function requestMoveWithConfirmation(languageClient: LanguageClient, moveParams: MoveParams): Promise { + let refactorEdit: RefactorWorkspaceEdit = await languageClient.sendRequest(MoveRequest.type, moveParams); + if (!refactorEdit?.confirmationToken) { + await applyRefactorEdit(languageClient, refactorEdit); + return refactorEdit; + } + + const continueAction = 'Continue'; + const detail = 'Review the details below before continuing:\n\n' + refactorEdit.errorMessage; + const selection = await window.showWarningMessage( + 'This refactoring may change program behavior. Continue anyway?', + { modal: true, detail }, + continueAction, + ); + if (selection !== continueAction) { + return undefined; + } + + refactorEdit = await languageClient.sendRequest(MoveRequest.type, { + ...moveParams, + confirmationToken: refactorEdit.confirmationToken, + }); + await applyRefactorEdit(languageClient, refactorEdit); + return refactorEdit; +} + async function moveFile(languageClient: LanguageClient, fileUris: Uri[]) { if (!hasCommonParent(fileUris)) { window.showErrorMessage("Moving files from different directories are not supported. Please make sure they are from the same directory."); @@ -417,13 +443,12 @@ async function moveInstanceMethod(languageClient: LanguageClient, params: CodeAc return; } - const refactorEdit: RefactorWorkspaceEdit = await languageClient.sendRequest(MoveRequest.type, { + await requestMoveWithConfirmation(languageClient, { moveKind: 'moveInstanceMethod', sourceUris: [ params.textDocument.uri ], params, destination: selected.destination, }); - await applyRefactorEdit(languageClient, refactorEdit); } async function moveStaticMember(languageClient: LanguageClient, params: CodeActionParams, commandInfo: any) {

      DcjOS6Ac%V50qL0( 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