From cee07a6f7fa68e383457d5b4fd8e712067b45e19 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Tue, 12 Apr 2022 11:19:30 +0200 Subject: [PATCH 01/10] added additional log output for debugging purposes --- .../completion/VscodeCompletionEngineAdapter.java | 7 +++++-- .../languageserver/util/SimpleTextDocumentService.java | 5 ++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java index a43add9b0..2dbe095e9 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/completion/VscodeCompletionEngineAdapter.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2021 Pivotal, Inc. + * Copyright (c) 2016, 2022 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -127,13 +127,15 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { SimpleTextDocumentService documents = server.getTextDocumentService(); + log.info("completion handling - retrieve lastest snapshot for: " + params.getTextDocument().getUri()); + TextDocument doc = documents.getLatestSnapshot(params); if (doc != null) { CompletionList list = new CompletionList(); try { - log.info("Starting completion handling"); + log.info("Starting completion handling for: " + params.getTextDocument().getUri()); if (resolver!=null) { //Assumes we don't have more than one completion request in flight from the client. @@ -203,6 +205,7 @@ public class VscodeCompletionEngineAdapter implements VscodeCompletionEngine { } } + log.info("no completions computed due to missing document snapshot for: ", params.getTextDocument().getUri()); return SimpleTextDocumentService.NO_COMPLETIONS; } diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index 0c1728078..d34557675 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2021 Pivotal, Inc. + * Copyright (c) 2016, 2022 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -255,9 +255,12 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE return CompletableFutures.computeAsync(cancelToken -> { CompletionHandler h = completionHandler; + if (h != null) { return Either.forRight(completionHandler.handle(cancelToken, position)); } + + log.info("no completions computed due to no completion handler registered for: " + position.getTextDocument().getUri()); return Either.forRight(NO_COMPLETIONS); }); } From cda0b75048cd28aa44ac26b0cf56160bb0df4632 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Tue, 12 Apr 2022 11:19:43 +0200 Subject: [PATCH 02/10] little cleanup --- .../commons/languageserver/util/SimpleLanguageServer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java index d561bf006..49a603934 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleLanguageServer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2016, 2021 Pivotal, Inc. + * Copyright (c) 2016, 2022 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -559,7 +559,7 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC @Override public synchronized SimpleTextDocumentService getTextDocumentService() { - if (tds==null) { + if (tds == null) { tds = createTextDocumentService(); } return tds; @@ -575,7 +575,7 @@ public final class SimpleLanguageServer implements Sts4LanguageServer, LanguageC @Override public synchronized SimpleWorkspaceService getWorkspaceService() { - if (workspace==null) { + if (workspace == null) { workspace = createWorkspaceService(); } return workspace; From 5d0bed47e4ff5a8d3f95d894963e2764e4173680 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 13 Apr 2022 16:42:07 +0200 Subject: [PATCH 03/10] GH-750 - introduce dedicated thread pool executors to avoid handing threads to block everything else --- .../util/SimpleTextDocumentService.java | 26 ++++++++++++------- .../v2/SpringProcessConnectorLocal.java | 11 +++++--- .../livehover/v2/SpringProcessDescriptor.java | 9 ++++--- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java index d34557675..b5fa78b60 100644 --- a/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java +++ b/headless-services/commons/commons-language-server/src/main/java/org/springframework/ide/vscode/commons/languageserver/util/SimpleTextDocumentService.java @@ -17,6 +17,8 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import java.util.function.Consumer; import java.util.stream.Collectors; @@ -90,6 +92,8 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE private final ListenerList documentCloseListeners = new ListenerList<>(); private final ListenerList documentOpenListeners = new ListenerList<>(); private List> documentSaveListeners = ImmutableList.of(); + + private final Executor messageWorkerThreadPool; private CompletionHandler completionHandler; private CompletionResolveHandler completionResolveHandler; @@ -104,6 +108,8 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public SimpleTextDocumentService(SimpleLanguageServer server, LanguageServerProperties props) { this.server = server; this.props = props; + + this.messageWorkerThreadPool = Executors.newCachedThreadPool(); } /** @@ -253,7 +259,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public CompletableFuture, CompletionList>> completion(CompletionParams position) { log.info("completion request arrived: " + position.getTextDocument().getUri()); - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { CompletionHandler h = completionHandler; if (h != null) { @@ -269,7 +275,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public CompletableFuture resolveCompletionItem(CompletionItem unresolved) { log.info("Completion item resolve request received: {}", unresolved.getLabel()); - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { try { CompletionResolveHandler h = completionResolveHandler; if (h != null) { @@ -291,7 +297,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public CompletableFuture hover(HoverParams hoverParams) { log.debug("hover requested for {}", hoverParams.getPosition()); - CompletableFuture result = CompletableFutures.computeAsync(cancelToken -> { + CompletableFuture result = CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { return computeHover(cancelToken, hoverParams); }); @@ -330,7 +336,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE DefinitionHandler h = this.definitionHandler; if (h != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { cancelToken.checkCanceled(); @@ -361,7 +367,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE ReferencesHandler h = this.referencesHandler; if (h != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { List list = h.handle(cancelToken, params); return list != null && list.isEmpty() ? null : list; }); @@ -376,7 +382,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE DocumentSymbolHandler h = this.documentSymbolHandler; if (h != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { cancelToken.checkCanceled(); try { @@ -433,7 +439,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE CodeLensHandler handler = this.codeLensHandler; if (handler != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { return handler.handle(cancelToken, params); }); } @@ -445,7 +451,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE CodeLensResolveHandler handler = this.codeLensResolveHandler; if (handler != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { return handler.handle(unresolved); }); @@ -476,7 +482,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE } } } - }); + }, messageWorkerThreadPool); } } @@ -484,7 +490,7 @@ public class SimpleTextDocumentService implements TextDocumentService, DocumentE public CompletableFuture> documentHighlight(DocumentHighlightParams highlightParams) { DocumentHighlightHandler handler = this.documentHighlightHandler; if (handler != null) { - return CompletableFutures.computeAsync(cancelToken -> { + return CompletableFutures.computeAsync(messageWorkerThreadPool, cancelToken -> { return handler.handle(cancelToken, highlightParams); }); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java index 35e63f3c6..b84b01034 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorLocal.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2020 Pivotal, Inc. + * Copyright (c) 2019, 2022 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -20,6 +20,8 @@ import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; @@ -36,7 +38,6 @@ import com.sun.tools.attach.VirtualMachineDescriptor; */ @SuppressWarnings("restriction") public class SpringProcessConnectorLocal { - private static final Logger log = LoggerFactory.getLogger(SpringProcessConnectorLocal.class); @@ -47,12 +48,16 @@ public class SpringProcessConnectorLocal { private final Set processes; private final SpringProcessConnectorService processConnectorService; + private final Executor statusUpdateThreadPool; private boolean projectsChanged; + public SpringProcessConnectorLocal(SpringProcessConnectorService processConnector, ProjectObserver projectObserver) { this.projects = new ConcurrentHashMap<>(); this.processes = Collections.synchronizedSet(new HashSet<>()); + this.statusUpdateThreadPool = Executors.newFixedThreadPool(10); + this.projectsChanged = false; this.processConnectorService = processConnector; @@ -168,7 +173,7 @@ public class SpringProcessConnectorLocal { List> futures = new ArrayList<>(); for (SpringProcessDescriptor process : processes) { - futures.add(process.updateStatus(projects::containsKey, projects::get)); + futures.add(process.updateStatus(projects::containsKey, projects::get, statusUpdateThreadPool)); } CompletableFuture allStatusUpdates = CompletableFuture.allOf((CompletableFuture[]) futures.toArray(new CompletableFuture[futures.size()])); diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessDescriptor.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessDescriptor.java index 69ab3bb03..3c2bf8fb3 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessDescriptor.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessDescriptor.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2020 Pivotal, Inc. + * Copyright (c) 2019, 2022 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -12,6 +12,7 @@ package org.springframework.ide.vscode.boot.java.livehover.v2; import java.util.Properties; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.Executor; import java.util.function.Predicate; import org.slf4j.Logger; @@ -57,7 +58,7 @@ public class SpringProcessDescriptor { private SpringProcessStatus status; private String projectName; - + public SpringProcessDescriptor(String processKey, String processID, String processName, VirtualMachineDescriptor vm) { this.processKey = processKey; this.processID = processID; @@ -109,11 +110,11 @@ public class SpringProcessDescriptor { return true; } - public CompletableFuture updateStatus(Predicate projectIsKnown, Predicate projectHasActuators) { + public CompletableFuture updateStatus(Predicate projectIsKnown, Predicate projectHasActuators, Executor statusUpdateThreadPool) { return CompletableFuture.supplyAsync(() -> { this.status = checkStatus(projectIsKnown, projectHasActuators); return null; - }); + }, statusUpdateThreadPool); } private SpringProcessStatus checkStatus(Predicate projectIsKnown, Predicate projectHasActuators) { From 15722b017c6626005c1ba313af1708b9e6a28588 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 16 Feb 2022 12:13:42 -0500 Subject: [PATCH 04/10] Connect to Spring process directly, no tracking --- .../ide/vscode/boot/app/BootJavaConfig.java | 4 +- .../v2/SpringProcessCommandHandler.java | 12 ++- .../v2/SpringProcessConnectorService.java | 4 +- .../lib/debug-config-provider.ts | 78 ++++++++++++++----- .../lib/live-hover-connect-ui.ts | 3 +- .../vscode-spring-boot/package.json | 12 +-- .../vscode-spring-boot/tsconfig.json | 3 +- 7 files changed, 83 insertions(+), 33 deletions(-) diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java index 6730e5259..3a85aecaa 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/app/BootJavaConfig.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2017, 2019 Pivotal, Inc. + * Copyright (c) 2017, 2022 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -30,7 +30,7 @@ import org.springframework.stereotype.Component; @Component public class BootJavaConfig implements InitializingBean { - public static final boolean LIVE_INFORMATION_AUTOMATIC_TRACKING_ENABLED_DEFAULT = true; + public static final boolean LIVE_INFORMATION_AUTOMATIC_TRACKING_ENABLED_DEFAULT = false; public static final int LIVE_INFORMATION_AUTOMATIC_TRACKING_DELAY_DEFAULT = 5000; public static final int LIVE_INFORMATION_FETCH_DATA_RETRY_MAX_NO_DEFAULT = 10; diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java index 9e12b519f..831fd2b4d 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessCommandHandler.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; -import java.util.stream.Collector; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -93,6 +92,8 @@ public class SpringProcessCommandHandler { // try local processes if (SpringProcessConnectorLocal.isAvailable()) { + + // Try cached processes. SpringProcessDescriptor[] processes = localProcessConnector.getProcesses(false, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT); for (SpringProcessDescriptor process : processes) { if (process.getProcessKey().equals(processKey)) { @@ -100,6 +101,15 @@ public class SpringProcessCommandHandler { return CompletableFuture.completedFuture(null); } } + + processes = localProcessConnector.getProcesses(true, SpringProcessStatus.REGULAR, SpringProcessStatus.AUTO_CONNECT); + for (SpringProcessDescriptor process : processes) { + if (process.getProcessKey().equals(processKey)) { + localProcessConnector.connectProcess(process); + return CompletableFuture.completedFuture(null); + } + } + } // try remote processes diff --git a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java index 3cfb51a83..0f90c1355 100644 --- a/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java +++ b/headless-services/spring-boot-language-server/src/main/java/org/springframework/ide/vscode/boot/java/livehover/v2/SpringProcessConnectorService.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2019, 2020 Pivotal, Inc. + * Copyright (c) 2019, 2022 Pivotal, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -142,7 +142,7 @@ public class SpringProcessConnectorService { * common method to generate process keys from process IDs and process names */ public static String getProcessKey(String processID, String processName) { - return processID + " - " + processName; + return processID; } private void scheduleConnect(ProgressTask progressTask, String processKey, SpringProcessConnector connector, long delay, TimeUnit unit, int retryNo) { diff --git a/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts b/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts index 4dd4cfff5..247a75484 100644 --- a/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts +++ b/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts @@ -2,6 +2,7 @@ import { CancellationToken, DebugConfiguration, DebugConfigurationProvider, Prov import * as path from "path"; import * as VSCode from "vscode"; import { Disposable } from "vscode"; +import psList from 'ps-list'; const JMX_VM_ARG = '-Dspring.jmx.enabled=' const ADMIN_VM_ARG = '-Dspring.application.admin.enabled=' @@ -10,7 +11,7 @@ const BOOT_PROJECT_ARG = '-Dspring.boot.project.name='; class SpringBootDebugConfigProvider implements DebugConfigurationProvider { resolveDebugConfigurationWithSubstitutedVariables(folder: WorkspaceFolder | undefined, debugConfiguration: DebugConfiguration, token?: CancellationToken): ProviderResult { - if (isAutoConnect() && this.isActuatorOnClasspath(debugConfiguration)) { + if (isAutoConnect() && isActuatorOnClasspath(debugConfiguration)) { if (debugConfiguration.vmArgs) { if (debugConfiguration.vmArgs.indexOf(JMX_VM_ARG) < 0) { debugConfiguration.vmArgs += ` ${JMX_VM_ARG}true`; @@ -28,28 +29,69 @@ class SpringBootDebugConfigProvider implements DebugConfigurationProvider { return debugConfiguration; } - private isActuatorOnClasspath(debugConfiguration: DebugConfiguration): boolean { - if (Array.isArray(debugConfiguration.classPaths)) { - return !!debugConfiguration.classPaths.find(this.isActuatorJarFile); - } - return false; - } - - private isActuatorJarFile(f: string): boolean { - const fileName = path.basename(f || ""); - if (/^spring-boot-actuator-\d+\.\d+\.\d+(.*)?.jar$/.test(fileName)) { - return true; - } - return false; - } +} +interface ProcessEvent { + type: string; + pid: number; + shellProcessId: number } export function startDebugSupport(): Disposable { - // VSCode.debug.onDidStartDebugSession(handleDebugSessionStarted); + VSCode.debug.onDidReceiveDebugSessionCustomEvent(handleCustomDebugEvent); return VSCode.debug.registerDebugConfigurationProvider('java', new SpringBootDebugConfigProvider(), VSCode.DebugConfigurationProviderTriggerKind.Initial); } -function isAutoConnect(): boolean { - return VSCode.workspace.getConfiguration("boot-java.live-information.automatic-tracking")?.get('on'); +async function handleCustomDebugEvent(e: VSCode.DebugSessionCustomEvent): Promise { + if (e.session?.type === 'java' && e?.body?.type === 'processid') { + const debugConfiguration: DebugConfiguration = e.session.configuration; + if (isBootAppWithJmxSetup(debugConfiguration)) { + setTimeout(async () => { + const pid = await getAppPid(e.body as ProcessEvent); + const processKey = pid.toString(); + VSCode.commands.executeCommand('sts/livedata/connect', { processKey }); + }, 500); + } + } +} + +async function getAppPid(e: ProcessEvent): Promise { + if (e.pid) { + return e.pid; + } else if (e.shellProcessId) { + const processes = await psList(); + const appProcess = processes.find(p => p.ppid === e.shellProcessId); + if (appProcess) { + return appProcess.pid; + } + throw Error(`No child process found for parent shell process with pid = ${e.shellProcessId}`); + } else { + throw Error('No pid or parent shell process id available'); + } +} + +function isActuatorOnClasspath(debugConfiguration: DebugConfiguration): boolean { + if (Array.isArray(debugConfiguration.classPaths)) { + return !!debugConfiguration.classPaths.find(isActuatorJarFile); + } + return false; +} + +function isActuatorJarFile(f: string): boolean { + const fileName = path.basename(f || ""); + if (/^spring-boot-actuator-\d+\.\d+\.\d+(.*)?.jar$/.test(fileName)) { + return true; + } + return false; +} + +function isBootAppWithJmxSetup(debugConfiguration: DebugConfiguration): boolean { + return debugConfiguration.vmArgs.indexOf(`${JMX_VM_ARG}true`) >= 0 + && debugConfiguration.vmArgs.indexOf(`${ADMIN_VM_ARG}true`) >= 0 + && debugConfiguration.vmArgs.indexOf(`${BOOT_PROJECT_ARG}${debugConfiguration.projectName}`) >= 0 + && isActuatorOnClasspath(debugConfiguration); +} + +function isAutoConnect(): boolean { + return VSCode.workspace.getConfiguration("boot-java.live-information.automatic-connection")?.get('on'); } diff --git a/vscode-extensions/vscode-spring-boot/lib/live-hover-connect-ui.ts b/vscode-extensions/vscode-spring-boot/lib/live-hover-connect-ui.ts index 432a2001e..854f44b6a 100644 --- a/vscode-extensions/vscode-spring-boot/lib/live-hover-connect-ui.ts +++ b/vscode-extensions/vscode-spring-boot/lib/live-hover-connect-ui.ts @@ -7,7 +7,8 @@ import { ActivatorOptions } from '@pivotal-tools/commons-vscode'; interface ProcessCommandInfo { processKey : string; label: string; - action: string + action: string; + projectName: string; } async function liveHoverConnectHandler() { diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index e3eaee78e..a4f12974a 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -75,15 +75,10 @@ "type": "object", "title": "Boot-Java Configuration", "properties": { - "boot-java.live-information.automatic-tracking.on": { + "boot-java.live-information.automatic-connection.on": { "type": "boolean", "default": true, - "description": "Live Information - Automatic Process Tracking Enabled" - }, - "boot-java.live-information.automatic-tracking.delay": { - "type": "number", - "default": 5000, - "description": "Live Information - Automatic Process Tracking Delay in ms" + "description": "Live Information - Automatic Process Connection Enabled" }, "boot-java.live-information.fetch-data.max-retries": { "type": "number", @@ -518,13 +513,14 @@ }, "dependencies": { "@pivotal-tools/commons-vscode": "file:../commons-vscode/pivotal-tools-commons-vscode-0.2.4.tgz", + "ps-list": "^7.2.0", "vscode-languageclient": "^7.0.0" }, "devDependencies": { "@types/node": "^16.11.11", "@types/vscode": "^1.53.0", "typescript": "^4.1.2", - "vsce": "^2.5.1" + "vsce": "^2.6.7" }, "extensionDependencies": [ "redhat.java" diff --git a/vscode-extensions/vscode-spring-boot/tsconfig.json b/vscode-extensions/vscode-spring-boot/tsconfig.json index 1905ffea7..1905844a5 100644 --- a/vscode-extensions/vscode-spring-boot/tsconfig.json +++ b/vscode-extensions/vscode-spring-boot/tsconfig.json @@ -9,7 +9,8 @@ "declaration": true, "outDir": "out", "sourceMap": true, - "rootDir": "." + "rootDir": ".", + "esModuleInterop": true }, "include": [ "typings/*.d.ts", From 04c32a98f67c7a5c7c8bcf1af3092accbd9349e8 Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 20 Apr 2022 16:27:49 +0200 Subject: [PATCH 05/10] changelog updates for 4.14.1 release --- vscode-extensions/vscode-spring-boot/CHANGELOG.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/vscode-extensions/vscode-spring-boot/CHANGELOG.md b/vscode-extensions/vscode-spring-boot/CHANGELOG.md index f5fd5052a..ed7c63c40 100644 --- a/vscode-extensions/vscode-spring-boot/CHANGELOG.md +++ b/vscode-extensions/vscode-spring-boot/CHANGELOG.md @@ -1,3 +1,15 @@ +## 2022-04-27 (4.14.1 RELEASE, incl. language servers version 1.33.0) + +#### import changes + +* _(VSCode)_ enhancement: live hovers are now automatically show up when you launch a Spring Boot application in VSCode. Additional JVM args for the Spring Boot app to enable JMX are added to the launch automatically. More details can be found in the user guide section about [Live Application Information](https://github.com/spring-projects/sts4/wiki/Live-Application-Information). + +#### fixes and improvements + +* _(Spring Boot)_ fixed: use `startupSnapshot` instead of `startup` timer call to avoid wiping out the underlying data +* _(Spring Boot, VSCode)_ fixed: When vscode opens a Java project for about 2 hours, the suggestion function will fail ([#750](https://github.com/spring-projects/sts4/issues/750)) +* _(VSCode)_ improvement: add extension APIs to get live data ([#751](https://github.com/spring-projects/sts4/pull/751)) - contributed by @Eskibear + ## 2022-03-16 (4.14.0 RELEASE, incl. language servers version 1.32.0) * _(VSCode)_ fixed: VSCode Spring boot tools 1.30.0 error trying to find JVM ([#726](https://github.com/spring-projects/sts4/issues/726)) From 07aed4709210f08b97275a1149fa6695922fe63e Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 20 Apr 2022 16:29:46 +0200 Subject: [PATCH 06/10] changelog updates for 4.14.1 release --- vscode-extensions/vscode-manifest-yaml/CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vscode-extensions/vscode-manifest-yaml/CHANGELOG.md b/vscode-extensions/vscode-manifest-yaml/CHANGELOG.md index e71b185e8..197da81a7 100644 --- a/vscode-extensions/vscode-manifest-yaml/CHANGELOG.md +++ b/vscode-extensions/vscode-manifest-yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2022-04-27 (4.14.1 RELEASE, incl. language servers version 1.33.0) + +* no major changes + ## 2022-03-16 (4.14.0 RELEASE, incl. language servers version 1.32.0) * no major changes @@ -168,4 +172,4 @@ ## 2017-12-04 -* initial public beta launch \ No newline at end of file +* initial public beta launch From 9cf897dd63badd18964c65c0fe0f6a98fff341dc Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 20 Apr 2022 16:30:29 +0200 Subject: [PATCH 07/10] changelog updates for 4.14.1 release --- vscode-extensions/vscode-bosh/CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vscode-extensions/vscode-bosh/CHANGELOG.md b/vscode-extensions/vscode-bosh/CHANGELOG.md index b5bce0252..62c8cf1d8 100644 --- a/vscode-extensions/vscode-bosh/CHANGELOG.md +++ b/vscode-extensions/vscode-bosh/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2022-04-27 (4.14.1 RELEASE, incl. language servers version 1.33.0) + +* no major changes + ## 2022-03-16 (4.14.0 RELEASE, incl. language servers version 1.32.0) * no major changes From 5c64b637eac4f8d9252544497517d5998f3995fb Mon Sep 17 00:00:00 2001 From: Martin Lippert Date: Wed, 20 Apr 2022 16:31:06 +0200 Subject: [PATCH 08/10] changelog updates for 4.14.1 release --- vscode-extensions/vscode-concourse/CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/vscode-extensions/vscode-concourse/CHANGELOG.md b/vscode-extensions/vscode-concourse/CHANGELOG.md index 345d65751..98c399c81 100644 --- a/vscode-extensions/vscode-concourse/CHANGELOG.md +++ b/vscode-extensions/vscode-concourse/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2022-04-27 (4.14.1 RELEASE, incl. language servers version 1.33.0) + +* no major changes + ## 2022-03-16 (4.14.0 RELEASE, incl. language servers version 1.32.0) * no major changes @@ -203,4 +207,4 @@ ## 2017-12-04 -* initial public beta launch \ No newline at end of file +* initial public beta launch From 025b69fae1bb7f01c465075632b298e0043a84b9 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 20 Apr 2022 12:52:47 -0400 Subject: [PATCH 09/10] Polish auto connect to process for VSCode --- .../commons-vscode/src/launch-util.ts | 8 ++- .../lib/debug-config-provider.ts | 61 ++++++++++++------- .../vscode-spring-boot/package.json | 2 +- 3 files changed, 47 insertions(+), 24 deletions(-) diff --git a/vscode-extensions/commons-vscode/src/launch-util.ts b/vscode-extensions/commons-vscode/src/launch-util.ts index 05dfd0134..24524b68a 100644 --- a/vscode-extensions/commons-vscode/src/launch-util.ts +++ b/vscode-extensions/commons-vscode/src/launch-util.ts @@ -412,10 +412,10 @@ export interface ListenableSetting { export class ListenablePreferenceSetting implements ListenableSetting { private _onDidChangeValue = new EventEmitter(); + private _disposable: Disposable; constructor(private section: string) { - VSCode.workspace.onDidChangeConfiguration(e => { - console.log('Settings changed! value = ' + this.value); + this._disposable = VSCode.workspace.onDidChangeConfiguration(e => { if (e.affectsConfiguration(this.section)) { this._onDidChangeValue.fire(); } @@ -430,4 +430,8 @@ export class ListenablePreferenceSetting implements ListenableSetting { return this._onDidChangeValue.event; } + dispose(): any { + return this._disposable.dispose(); + } + } diff --git a/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts b/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts index 247a75484..805bb580f 100644 --- a/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts +++ b/vscode-extensions/vscode-spring-boot/lib/debug-config-provider.ts @@ -3,6 +3,7 @@ import * as path from "path"; import * as VSCode from "vscode"; import { Disposable } from "vscode"; import psList from 'ps-list'; +import { ListenablePreferenceSetting } from "@pivotal-tools/commons-vscode/lib/launch-util"; const JMX_VM_ARG = '-Dspring.jmx.enabled=' const ADMIN_VM_ARG = '-Dspring.application.admin.enabled=' @@ -11,7 +12,7 @@ const BOOT_PROJECT_ARG = '-Dspring.boot.project.name='; class SpringBootDebugConfigProvider implements DebugConfigurationProvider { resolveDebugConfigurationWithSubstitutedVariables(folder: WorkspaceFolder | undefined, debugConfiguration: DebugConfiguration, token?: CancellationToken): ProviderResult { - if (isAutoConnect() && isActuatorOnClasspath(debugConfiguration)) { + if (isActuatorOnClasspath(debugConfiguration)) { if (debugConfiguration.vmArgs) { if (debugConfiguration.vmArgs.indexOf(JMX_VM_ARG) < 0) { debugConfiguration.vmArgs += ` ${JMX_VM_ARG}true`; @@ -37,21 +38,50 @@ interface ProcessEvent { shellProcessId: number } +function hookListenerToBooleanPreference(setting: string, listenerCreator: () => Disposable): Disposable { + const listenableSetting = new ListenablePreferenceSetting(setting); + let listener: Disposable | undefined = listenableSetting.value ? listenerCreator() : undefined; + listenableSetting.onDidChangeValue(() => { + if (listenableSetting.value) { + if (!listener) { + listener = listenerCreator(); + } + } else { + if (listener) { + listener.dispose(); + listener = undefined; + } + } + }); + + return { + dispose: () => { + if (listener) { + listener.dispose(); + } + listenableSetting.dispose(); + } + }; +} + export function startDebugSupport(): Disposable { - VSCode.debug.onDidReceiveDebugSessionCustomEvent(handleCustomDebugEvent); - return VSCode.debug.registerDebugConfigurationProvider('java', new SpringBootDebugConfigProvider(), VSCode.DebugConfigurationProviderTriggerKind.Initial); + return hookListenerToBooleanPreference( + 'boot-java.live-information.automatic-connection.on', + () => Disposable.from( + VSCode.debug.onDidReceiveDebugSessionCustomEvent(handleCustomDebugEvent), + VSCode.debug.registerDebugConfigurationProvider('java', new SpringBootDebugConfigProvider(), VSCode.DebugConfigurationProviderTriggerKind.Initial) + ) + ); } async function handleCustomDebugEvent(e: VSCode.DebugSessionCustomEvent): Promise { if (e.session?.type === 'java' && e?.body?.type === 'processid') { const debugConfiguration: DebugConfiguration = e.session.configuration; - if (isBootAppWithJmxSetup(debugConfiguration)) { - setTimeout(async () => { - const pid = await getAppPid(e.body as ProcessEvent); - const processKey = pid.toString(); - VSCode.commands.executeCommand('sts/livedata/connect', { processKey }); - }, 500); - } + setTimeout(async () => { + const pid = await getAppPid(e.body as ProcessEvent); + const processKey = pid.toString(); + VSCode.commands.executeCommand('sts/livedata/connect', { processKey }); + }, 500); } } @@ -84,14 +114,3 @@ function isActuatorJarFile(f: string): boolean { } return false; } - -function isBootAppWithJmxSetup(debugConfiguration: DebugConfiguration): boolean { - return debugConfiguration.vmArgs.indexOf(`${JMX_VM_ARG}true`) >= 0 - && debugConfiguration.vmArgs.indexOf(`${ADMIN_VM_ARG}true`) >= 0 - && debugConfiguration.vmArgs.indexOf(`${BOOT_PROJECT_ARG}${debugConfiguration.projectName}`) >= 0 - && isActuatorOnClasspath(debugConfiguration); -} - -function isAutoConnect(): boolean { - return VSCode.workspace.getConfiguration("boot-java.live-information.automatic-connection")?.get('on'); -} diff --git a/vscode-extensions/vscode-spring-boot/package.json b/vscode-extensions/vscode-spring-boot/package.json index a4f12974a..a1be670e7 100644 --- a/vscode-extensions/vscode-spring-boot/package.json +++ b/vscode-extensions/vscode-spring-boot/package.json @@ -78,7 +78,7 @@ "boot-java.live-information.automatic-connection.on": { "type": "boolean", "default": true, - "description": "Live Information - Automatic Process Connection Enabled" + "description": "Live Information - Automatic addition of JVM arguments enabling JMX and Process Connection via JMX Enabled" }, "boot-java.live-information.fetch-data.max-retries": { "type": "number", From 4f51a8523151e7539b1e1bd9ca02e52e279a3265 Mon Sep 17 00:00:00 2001 From: BoykoAlex Date: Wed, 20 Apr 2022 13:00:28 -0400 Subject: [PATCH 10/10] Update dependencies to silence dependency bit --- .../commons-vscode/package-lock.json | 317 ++++++++++-------- 1 file changed, 185 insertions(+), 132 deletions(-) diff --git a/vscode-extensions/commons-vscode/package-lock.json b/vscode-extensions/commons-vscode/package-lock.json index 3ada4fc63..8a42987e7 100644 --- a/vscode-extensions/commons-vscode/package-lock.json +++ b/vscode-extensions/commons-vscode/package-lock.json @@ -30,21 +30,21 @@ "integrity": "sha512-NjADvQGJRECRkNts2xUALwPj/KJkvCOkwkm+/v9pP6mKhVtMh2wABaeAggae4x7+hBNJH0V0mw60Y0kk/rbSpw==" }, "node_modules/@types/node": { - "version": "16.11.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", - "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "version": "16.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.27.tgz", + "integrity": "sha512-C1pD3kgLoZ56Uuy5lhfOxie4aZlA3UMGLX9rXteq4WitEZH6Rl80mwactt9QG0w0gLFlN/kLBTFnGXtDVWvWQw==", "dev": true }, "node_modules/@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "dev": true }, "node_modules/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==", "dependencies": { "lodash": "^4.17.14" } @@ -128,20 +128,24 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -149,15 +153,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -215,6 +219,14 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -255,17 +267,28 @@ } }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "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==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -375,9 +398,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "engines": { "node": ">= 0.4" }, @@ -386,9 +409,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -423,9 +446,12 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -485,20 +511,24 @@ } }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -526,9 +556,9 @@ } }, "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" @@ -538,16 +568,16 @@ } }, "node_modules/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==" }, "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -559,9 +589,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -620,12 +650,13 @@ } }, "node_modules/regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -635,9 +666,9 @@ } }, "node_modules/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.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -687,9 +718,9 @@ } }, "node_modules/typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -814,21 +845,21 @@ "integrity": "sha512-NjADvQGJRECRkNts2xUALwPj/KJkvCOkwkm+/v9pP6mKhVtMh2wABaeAggae4x7+hBNJH0V0mw60Y0kk/rbSpw==" }, "@types/node": { - "version": "16.11.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.11.tgz", - "integrity": "sha512-KB0sixD67CeecHC33MYn+eYARkqTheIRNuu97y2XMjR7Wu3XibO1vaY6VBV6O/a89SPI81cEUIYT87UqUWlZNw==", + "version": "16.11.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.27.tgz", + "integrity": "sha512-C1pD3kgLoZ56Uuy5lhfOxie4aZlA3UMGLX9rXteq4WitEZH6Rl80mwactt9QG0w0gLFlN/kLBTFnGXtDVWvWQw==", "dev": true }, "@types/vscode": { - "version": "1.62.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.62.0.tgz", - "integrity": "sha512-iGlQJ1w5e3qPUryroO6v4lxg3ql1ztdTCwQW3xEwFawdyPLoeUSv48SYfMwc7kQA7h6ThUqflZIjgKAykeF9oA==", + "version": "1.66.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.66.0.tgz", + "integrity": "sha512-ZfJck4M7nrGasfs4A4YbUoxis3Vu24cETw3DERsNYtDZmYSYtk6ljKexKFKhImO/ZmY6ZMsmegu2FPkXoUFImA==", "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" } @@ -900,17 +931,18 @@ } }, "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==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -918,15 +950,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -969,6 +1001,11 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==" + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -997,14 +1034,22 @@ } }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "requires": { + "get-intrinsic": "^1.1.1" + } }, "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==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -1069,14 +1114,14 @@ "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==" }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -1096,9 +1141,12 @@ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-string": { "version": "1.0.7", @@ -1134,17 +1182,21 @@ "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==" }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-weakset": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.1.tgz", - "integrity": "sha512-pi4vhbhVHGLxohUw7PhGsueT4vRGFoXhP7+RGN0jKIv9+8PWYCQTqtADngrxOm2g46hoH0+g8uZZBzMrvVGDmw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz", + "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "isarray": { "version": "2.0.5", @@ -1166,25 +1218,25 @@ } }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "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" } }, "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==" }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "ms": { @@ -1193,9 +1245,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "object-inspect": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.1.tgz", - "integrity": "sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA==" + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" }, "object-is": { "version": "1.1.5", @@ -1233,18 +1285,19 @@ } }, "regexp.prototype.flags": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", - "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" } }, "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.7", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -1279,9 +1332,9 @@ } }, "typescript": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz", - "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "unbox-primitive": {