diff --git a/.github/workflows/report-viewer-demo.yml b/.github/workflows/report-viewer-demo.yml
index da6817c102..e7b97498b0 100644
--- a/.github/workflows/report-viewer-demo.yml
+++ b/.github/workflows/report-viewer-demo.yml
@@ -102,7 +102,7 @@ jobs:
npm run build-demo
- name: Deploy 🚀
- uses: JamesIves/github-pages-deploy-action@v4.6.9
+ uses: JamesIves/github-pages-deploy-action@v4.7.2
with:
branch: gh-pages
folder: report-viewer/dist
diff --git a/.github/workflows/report-viewer-dev.yml b/.github/workflows/report-viewer-dev.yml
index 874ae38df8..00278337a1 100644
--- a/.github/workflows/report-viewer-dev.yml
+++ b/.github/workflows/report-viewer-dev.yml
@@ -27,7 +27,7 @@ jobs:
npm run build-dev
- name: Deploy 🚀
- uses: JamesIves/github-pages-deploy-action@v4.6.9
+ uses: JamesIves/github-pages-deploy-action@v4.7.2
with:
branch: gh-pages
folder: report-viewer/dist
diff --git a/cli/pom.xml b/cli/pom.xml
index fe351d8d08..e9f33c9386 100644
--- a/cli/pom.xml
+++ b/cli/pom.xml
@@ -118,6 +118,11 @@
llvmir
${revision}
+
+ de.jplag
+ multi-language
+ ${revision}
+
org.kohsuke.metainf-services
diff --git a/cli/src/main/java/de/jplag/cli/options/LanguageCandidates.java b/cli/src/main/java/de/jplag/cli/options/LanguageCandidates.java
index e1c764b8f5..0bddd656e6 100644
--- a/cli/src/main/java/de/jplag/cli/options/LanguageCandidates.java
+++ b/cli/src/main/java/de/jplag/cli/options/LanguageCandidates.java
@@ -2,6 +2,8 @@
import java.util.ArrayList;
+import de.jplag.LanguageLoader;
+
/**
* Helper class for picocli to find all available languages.
*/
diff --git a/cli/src/main/java/de/jplag/cli/options/LanguageConverter.java b/cli/src/main/java/de/jplag/cli/options/LanguageConverter.java
index 9f92ec9449..6af53239f9 100644
--- a/cli/src/main/java/de/jplag/cli/options/LanguageConverter.java
+++ b/cli/src/main/java/de/jplag/cli/options/LanguageConverter.java
@@ -1,6 +1,7 @@
package de.jplag.cli.options;
import de.jplag.Language;
+import de.jplag.LanguageLoader;
import picocli.CommandLine;
diff --git a/cli/src/main/java/de/jplag/cli/picocli/CliInputHandler.java b/cli/src/main/java/de/jplag/cli/picocli/CliInputHandler.java
index 4bc388a35d..7f909f8911 100644
--- a/cli/src/main/java/de/jplag/cli/picocli/CliInputHandler.java
+++ b/cli/src/main/java/de/jplag/cli/picocli/CliInputHandler.java
@@ -14,9 +14,9 @@
import java.util.stream.Collectors;
import de.jplag.Language;
+import de.jplag.LanguageLoader;
import de.jplag.cli.CliException;
import de.jplag.cli.options.CliOptions;
-import de.jplag.cli.options.LanguageLoader;
import de.jplag.options.LanguageOption;
import de.jplag.options.LanguageOptions;
diff --git a/cli/src/test/java/de/jplag/cli/LanguageTest.java b/cli/src/test/java/de/jplag/cli/LanguageTest.java
index 4a7c84e0a1..5de06f7516 100644
--- a/cli/src/test/java/de/jplag/cli/LanguageTest.java
+++ b/cli/src/test/java/de/jplag/cli/LanguageTest.java
@@ -13,14 +13,16 @@
import org.junit.jupiter.params.provider.MethodSource;
import de.jplag.Language;
+import de.jplag.LanguageLoader;
import de.jplag.cli.options.CliOptions;
-import de.jplag.cli.options.LanguageLoader;
import de.jplag.cli.test.CliArgument;
import de.jplag.cli.test.CliTest;
import de.jplag.exceptions.ExitException;
+import de.jplag.multilang.MultiLanguage;
import de.jplag.options.JPlagOptions;
class LanguageTest extends CliTest {
+ private static final List> ignoredLanguages = List.of(MultiLanguage.class);
@Test
void testDefaultLanguage() throws ExitException, IOException {
@@ -38,7 +40,7 @@ void testInvalidLanguage() {
@Test
void testLoading() {
var languages = LanguageLoader.getAllAvailableLanguages();
- assertEquals(19, languages.size(), "Loaded Languages: " + languages.keySet());
+ assertEquals(20, languages.size(), "Loaded Languages: " + languages.keySet());
}
@ParameterizedTest
@@ -58,6 +60,7 @@ void testCustomSuffixes() throws ExitException, IOException {
}
public static Collection getAllLanguages() {
- return LanguageLoader.getAllAvailableLanguages().values();
+ return LanguageLoader.getAllAvailableLanguages().values().stream().filter(language -> !ignoredLanguages.contains(language.getClass()))
+ .toList();
}
}
diff --git a/endtoend-testing/src/main/java/de/jplag/endtoend/helper/LanguageDeserializer.java b/endtoend-testing/src/main/java/de/jplag/endtoend/helper/LanguageDeserializer.java
index 22e231eac9..44878ab6cb 100644
--- a/endtoend-testing/src/main/java/de/jplag/endtoend/helper/LanguageDeserializer.java
+++ b/endtoend-testing/src/main/java/de/jplag/endtoend/helper/LanguageDeserializer.java
@@ -3,7 +3,7 @@
import java.io.IOException;
import de.jplag.Language;
-import de.jplag.cli.options.LanguageLoader;
+import de.jplag.LanguageLoader;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
diff --git a/cli/src/main/java/de/jplag/cli/options/LanguageLoader.java b/language-api/src/main/java/de/jplag/LanguageLoader.java
similarity index 98%
rename from cli/src/main/java/de/jplag/cli/options/LanguageLoader.java
rename to language-api/src/main/java/de/jplag/LanguageLoader.java
index 4082476381..f0b11f5878 100644
--- a/cli/src/main/java/de/jplag/cli/options/LanguageLoader.java
+++ b/language-api/src/main/java/de/jplag/LanguageLoader.java
@@ -1,4 +1,4 @@
-package de.jplag.cli.options;
+package de.jplag;
import java.util.Collections;
import java.util.Map;
@@ -11,8 +11,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import de.jplag.Language;
-
/**
* This class contains methods to load {@link Language Languages}.
* @author Dominik Fuchss
diff --git a/language-api/src/main/java/de/jplag/options/DefaultLanguageOption.java b/language-api/src/main/java/de/jplag/options/DefaultLanguageOption.java
index 3be2a255dc..892628cba6 100644
--- a/language-api/src/main/java/de/jplag/options/DefaultLanguageOption.java
+++ b/language-api/src/main/java/de/jplag/options/DefaultLanguageOption.java
@@ -20,7 +20,7 @@ public class DefaultLanguageOption implements LanguageOption {
this.hasValue = true;
}
- DefaultLanguageOption(OptionType type, String description, String name) {
+ DefaultLanguageOption(OptionType type, String name, String description) {
this(type, name, description, null);
this.hasValue = false;
}
diff --git a/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java b/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java
index f659ba2b22..1681903a5b 100644
--- a/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java
+++ b/language-testutils/src/test/java/de/jplag/testutils/LanguageModuleTest.java
@@ -12,6 +12,7 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import org.junit.jupiter.api.AfterAll;
@@ -247,7 +248,7 @@ final List getTokenPositionTestData() {
@MethodSource("getAllTestData")
@DisplayName("Test that the tokens map to ascending line numbers")
final void testMonotoneTokenOrder(TestData data) throws ParsingException, IOException {
- List tokens = parseTokens(data);
+ List tokens = parseTokens(data).stream().filter(it -> !getIgnoredTokensForMonotoneTokenOrder().contains(it.getType())).toList();
for (int i = 0; i < tokens.size() - 2; i++) {
Token first = tokens.get(i);
@@ -338,4 +339,8 @@ private > C ignoreEmptyTestType(C data) {
protected File getTestFileLocation() {
return new File(DEFAULT_TEST_CODE_PATH_BASE.toFile(), this.language.getIdentifier());
}
+
+ protected List getIgnoredTokensForMonotoneTokenOrder() {
+ return Collections.emptyList();
+ }
}
diff --git a/languages/java/src/main/java/de/jplag/java/TokenGeneratingTreeScanner.java b/languages/java/src/main/java/de/jplag/java/TokenGeneratingTreeScanner.java
index 9589da81b7..503c84fb04 100644
--- a/languages/java/src/main/java/de/jplag/java/TokenGeneratingTreeScanner.java
+++ b/languages/java/src/main/java/de/jplag/java/TokenGeneratingTreeScanner.java
@@ -136,7 +136,8 @@ public Void visitClass(ClassTree node, Void unused) {
}
}
- long start = positions.getStartPosition(ast, node);
+ long start = positions.getEndPosition(ast, node.getModifiers()) + 1;
+ long nameLength = node.getSimpleName().length();
long end = positions.getEndPosition(ast, node) - 1;
CodeSemantics semantics = CodeSemantics.createControl();
if (node.getKind() == Tree.Kind.ENUM) {
@@ -146,7 +147,9 @@ public Void visitClass(ClassTree node, Void unused) {
} else if (node.getKind() == Tree.Kind.RECORD) {
addToken(JavaTokenType.J_RECORD_BEGIN, start, 1, semantics);
} else if (node.getKind() == Tree.Kind.ANNOTATION_TYPE) {
- addToken(JavaTokenType.J_ANNO_T_BEGIN, start, 10, semantics);
+ // The start position for the is calculated that way, because the @ is the final element in the modifier list for
+ // annotations
+ addToken(JavaTokenType.J_ANNO_T_BEGIN, start - 2, (start - 2) + 11 + nameLength, semantics);
} else if (node.getKind() == Tree.Kind.CLASS) {
addToken(JavaTokenType.J_CLASS_BEGIN, start, 5, semantics);
}
@@ -508,7 +511,8 @@ public Void visitMethodInvocation(MethodInvocationTree node, Void unused) {
@Override
public Void visitAnnotation(AnnotationTree node, Void unused) {
long start = positions.getStartPosition(ast, node);
- addToken(JavaTokenType.J_ANNO, start, 1, new CodeSemantics());
+ String annotationName = node.getAnnotationType().toString();
+ addToken(JavaTokenType.J_ANNO, start, annotationName.length() + 1, new CodeSemantics());
return super.visitAnnotation(node, null);
}
diff --git a/languages/java/src/test/java/de/jplag/java/JavaLanguageTest.java b/languages/java/src/test/java/de/jplag/java/JavaLanguageTest.java
index a4f89d9bb0..8e9320553c 100644
--- a/languages/java/src/test/java/de/jplag/java/JavaLanguageTest.java
+++ b/languages/java/src/test/java/de/jplag/java/JavaLanguageTest.java
@@ -29,6 +29,9 @@
import static de.jplag.java.JavaTokenType.J_TRY_END;
import static de.jplag.java.JavaTokenType.J_VARDEF;
+import java.util.List;
+
+import de.jplag.TokenType;
import de.jplag.testutils.LanguageModuleTest;
import de.jplag.testutils.datacollector.TestDataCollector;
import de.jplag.testutils.datacollector.TestSourceIgnoredLinesCollector;
@@ -84,4 +87,9 @@ protected void configureIgnoredLines(TestSourceIgnoredLinesCollector collector)
collector.ignoreLinesByPrefix("})");
collector.ignoreByCondition(line -> line.contains("else") && !line.contains("if"));
}
+
+ @Override
+ protected List getIgnoredTokensForMonotoneTokenOrder() {
+ return List.of(JavaTokenType.J_ANNO);
+ }
}
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_1.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_1.java
new file mode 100644
index 0000000000..e78c1a3f9d
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_1.java
@@ -0,0 +1,3 @@
+>@SuppressWarnings
+$| J_ANNO 17
+>class Anno {}
\ No newline at end of file
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_2.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_2.java
new file mode 100644
index 0000000000..54f9b612a9
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_2.java
@@ -0,0 +1,3 @@
+>@SuppressWarnings("SomeWarning")
+$| J_ANNO 17
+>class Anno {}
\ No newline at end of file
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_3.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_3.java
new file mode 100644
index 0000000000..522a18dae9
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_3.java
@@ -0,0 +1,6 @@
+>class Anno {
+> @Deprecated
+$ | J_ANNO 11
+> public void testFunction() {
+> }
+>}
\ No newline at end of file
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_4.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_4.java
new file mode 100644
index 0000000000..92db1e255a
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/Anno_4.java
@@ -0,0 +1,7 @@
+>import javax.annotation.processing.Generated;
+>
+>class Anno {
+> public void testMethod(@Generated String param) {
+$ | J_ANNO 10
+> }
+>}
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_1.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_1.java
new file mode 100644
index 0000000000..1199729611
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_1.java
@@ -0,0 +1,3 @@
+>public @interface MyAnnotation {}
+$ | J_ANNO_T_BEGIN 23
+$ | J_ANNO_T_END 1
\ No newline at end of file
diff --git a/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_2.java b/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_2.java
new file mode 100644
index 0000000000..0d0d89d1e3
--- /dev/null
+++ b/languages/java/src/test/resources/de/jplag/java/tokenPositions/JAnnoTBegin-End_2.java
@@ -0,0 +1,4 @@
+>public @interface MyAnnotation {
+$ | J_ANNO_T_BEGIN 23
+>}
+$| J_ANNO_T_END 1
diff --git a/languages/multi-language/pom.xml b/languages/multi-language/pom.xml
new file mode 100644
index 0000000000..ca87dfa7e1
--- /dev/null
+++ b/languages/multi-language/pom.xml
@@ -0,0 +1,26 @@
+
+
+ 4.0.0
+
+ de.jplag
+ languages
+ ${revision}
+
+ multi-language
+
+
+
+ de.jplag
+ java
+ ${revision}
+ test
+
+
+ de.jplag
+ cpp
+ ${revision}
+ test
+
+
+
+
diff --git a/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguage.java b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguage.java
new file mode 100644
index 0000000000..827910a74e
--- /dev/null
+++ b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguage.java
@@ -0,0 +1,55 @@
+package de.jplag.multilang;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Set;
+
+import org.kohsuke.MetaInfServices;
+
+import de.jplag.Language;
+import de.jplag.LanguageLoader;
+import de.jplag.ParsingException;
+import de.jplag.Token;
+import de.jplag.options.LanguageOptions;
+
+@MetaInfServices(Language.class)
+public class MultiLanguage implements Language {
+ private final MultiLanguageOptions options;
+
+ public MultiLanguage() {
+ this.options = new MultiLanguageOptions();
+ }
+
+ @Override
+ public String[] suffixes() {
+ return LanguageLoader.getAllAvailableLanguages().values().stream().filter(it -> it != this).flatMap(it -> Arrays.stream(it.suffixes()))
+ .toArray(String[]::new);
+ }
+
+ @Override
+ public String getName() {
+ return "multi-language";
+ }
+
+ @Override
+ public String getIdentifier() {
+ return "multi";
+ }
+
+ @Override
+ public int minimumTokenMatch() {
+ return this.options.getLanguages().stream().mapToInt(Language::minimumTokenMatch).min().orElse(9);
+ }
+
+ @Override
+ public List parse(Set files, boolean normalize) throws ParsingException {
+ MultiLanguageParser parser = new MultiLanguageParser(this.options);
+ return parser.parseFiles(files, normalize);
+ }
+
+ @Override
+ public LanguageOptions getOptions() {
+ return this.options;
+ }
+}
diff --git a/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageOptions.java b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageOptions.java
new file mode 100644
index 0000000000..eb6a65fe0a
--- /dev/null
+++ b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageOptions.java
@@ -0,0 +1,42 @@
+package de.jplag.multilang;
+
+import java.util.Arrays;
+import java.util.List;
+
+import de.jplag.Language;
+import de.jplag.LanguageLoader;
+import de.jplag.options.LanguageOption;
+import de.jplag.options.LanguageOptions;
+import de.jplag.options.OptionType;
+
+public class MultiLanguageOptions extends LanguageOptions {
+ private static final String ERROR_LANGUAGE_NOT_FOUND = "The selected language %s could not be found";
+ private static final String ERROR_NOT_ENOUGH_LANGUAGES = "To use multi language specify at least 1 language";
+ private static final String OPTION_DESCRIPTION_LANGUAGES = "The languages that should be used. This is a ',' separated list";
+
+ private final LanguageOption languageNames = createOption(OptionType.string(), "languages", OPTION_DESCRIPTION_LANGUAGES);
+ private List languages = null;
+
+ public List getLanguages() {
+ if (this.languages == null) {
+ if (languageNames.getValue() == null) {
+ throw new IllegalArgumentException(ERROR_NOT_ENOUGH_LANGUAGES);
+ }
+
+ this.languages = Arrays.stream(languageNames.getValue().split(","))
+ .map(name -> LanguageLoader.getLanguage(name)
+ .orElseThrow(() -> new IllegalArgumentException(String.format(ERROR_LANGUAGE_NOT_FOUND, name))))
+ .filter(language -> !language.getClass().equals(MultiLanguage.class)).toList();
+
+ if (this.languages.isEmpty()) {
+ throw new IllegalArgumentException(ERROR_NOT_ENOUGH_LANGUAGES);
+ }
+ }
+
+ return this.languages;
+ }
+
+ public LanguageOption getLanguageNames() {
+ return this.languageNames;
+ }
+}
diff --git a/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageParser.java b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageParser.java
new file mode 100644
index 0000000000..d560219d37
--- /dev/null
+++ b/languages/multi-language/src/main/java/de/jplag/multilang/MultiLanguageParser.java
@@ -0,0 +1,36 @@
+package de.jplag.multilang;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+
+import de.jplag.Language;
+import de.jplag.ParsingException;
+import de.jplag.Token;
+
+public class MultiLanguageParser {
+ private final List languages;
+
+ public MultiLanguageParser(MultiLanguageOptions options) {
+ this.languages = options.getLanguages();
+ }
+
+ public List parseFiles(Set files, boolean normalize) throws ParsingException {
+ List results = new ArrayList<>();
+ for (File file : files) {
+ Optional language = findLanguageForFile(file);
+ if (language.isPresent()) {
+ results.addAll(language.get().parse(Set.of(file), normalize));
+ }
+ }
+ return results;
+ }
+
+ private Optional findLanguageForFile(File file) {
+ return this.languages.stream().filter(language -> Arrays.stream(language.suffixes()).anyMatch(suffix -> file.getName().endsWith(suffix)))
+ .findFirst();
+ }
+}
diff --git a/languages/multi-language/src/test/java/de/java/multilang/MultilangTest.java b/languages/multi-language/src/test/java/de/java/multilang/MultilangTest.java
new file mode 100644
index 0000000000..8293a29c1a
--- /dev/null
+++ b/languages/multi-language/src/test/java/de/java/multilang/MultilangTest.java
@@ -0,0 +1,79 @@
+package de.java.multilang;
+
+import static de.jplag.SharedTokenType.FILE_END;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.junit.jupiter.api.AfterAll;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import de.jplag.ParsingException;
+import de.jplag.Token;
+import de.jplag.TokenType;
+import de.jplag.cpp.CPPTokenType;
+import de.jplag.java.JavaTokenType;
+import de.jplag.multilang.MultiLanguage;
+import de.jplag.multilang.MultiLanguageOptions;
+
+class MultilangTest {
+ private static File testDataDirectory;
+ private static File javaCode;
+ private static File cppCode;
+
+ private static List expectedTokens = List.of(CPPTokenType.FUNCTION_BEGIN, CPPTokenType.RETURN, CPPTokenType.FUNCTION_END, FILE_END,
+ JavaTokenType.J_CLASS_BEGIN, JavaTokenType.J_CLASS_END, FILE_END);
+
+ @BeforeAll
+ static void setUp() throws IOException {
+ testDataDirectory = Files.createTempDirectory("multiLanguageTestData").toFile();
+ cppCode = new File(testDataDirectory, "CppCode.cpp");
+ javaCode = new File(testDataDirectory, "JavaCode.java");
+
+ MultilangTest.class.getResourceAsStream("/de/jplag/multilang/testDataSet/CppCode.cpp").transferTo(new FileOutputStream(cppCode));
+ MultilangTest.class.getResourceAsStream("/de/jplag/multilang/testDataSet/JavaCode.java").transferTo(new FileOutputStream(javaCode));
+ }
+
+ @Test
+ void testMultiLanguageParsing() throws ParsingException {
+ MultiLanguage languageModule = new MultiLanguage();
+ ((MultiLanguageOptions) languageModule.getOptions()).getLanguageNames().setValue("java,cpp");
+
+ Set sources = new TreeSet<>(List.of(javaCode, cppCode)); // Using TreeSet to ensure order of entries
+ List tokens = languageModule.parse(sources, false);
+
+ Assertions.assertEquals(expectedTokens, tokens.stream().map(Token::getType).toList());
+ }
+
+ @Test
+ void testNoLanguagesConfigured() {
+ MultiLanguage languageModule = new MultiLanguage();
+ Assertions.assertThrowsExactly(IllegalArgumentException.class, () -> {
+ languageModule.parse(Set.of(javaCode, cppCode), false);
+ });
+ }
+
+ @Test
+ void testInvalidLanguage() {
+ MultiLanguage languageModule = new MultiLanguage();
+ ((MultiLanguageOptions) languageModule.getOptions()).getLanguageNames().setValue("thisIsNotALanguage");
+
+ Assertions.assertThrowsExactly(IllegalArgumentException.class, () -> {
+ languageModule.parse(Set.of(javaCode, cppCode), false);
+ });
+ }
+
+ @AfterAll
+ static void cleanUp() {
+ javaCode.delete();
+ cppCode.delete();
+ testDataDirectory.delete();
+ }
+}
diff --git a/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/CppCode.cpp b/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/CppCode.cpp
new file mode 100644
index 0000000000..e9cdae1659
--- /dev/null
+++ b/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/CppCode.cpp
@@ -0,0 +1,3 @@
+int main() {
+ return 0;
+}
\ No newline at end of file
diff --git a/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/JavaCode.java b/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/JavaCode.java
new file mode 100644
index 0000000000..32aacd210f
--- /dev/null
+++ b/languages/multi-language/src/test/resources/de/jplag/multilang/testDataSet/JavaCode.java
@@ -0,0 +1,3 @@
+public class JavaCode {
+
+}
\ No newline at end of file
diff --git a/languages/pom.xml b/languages/pom.xml
index 819b1f491e..6e19523aa5 100644
--- a/languages/pom.xml
+++ b/languages/pom.xml
@@ -29,6 +29,7 @@
typescript
javascript
llvmir
+ multi-language
diff --git a/pom.xml b/pom.xml
index ebcb7c7136..591e7bb1fe 100644
--- a/pom.xml
+++ b/pom.xml
@@ -83,7 +83,7 @@
2.38.0
2.40.0
2.38.0
- 3.21.0
+ 3.22.0
1.1.0
@@ -141,7 +141,7 @@
com.fasterxml.jackson.core
jackson-databind
- 2.18.1
+ 2.18.2
diff --git a/report-viewer/package-lock.json b/report-viewer/package-lock.json
index 79b95d8d72..b8025e3848 100644
--- a/report-viewer/package-lock.json
+++ b/report-viewer/package-lock.json
@@ -17,12 +17,12 @@
"chartjs-plugin-datalabels": "^2.2.0",
"highlight.js": "^11.10.0",
"jszip": "^3.10.0",
- "pinia": "^2.2.6",
+ "pinia": "^2.3.0",
"slash": "^5.1.0",
- "vue": "^3.5.12",
+ "vue": "^3.5.13",
"vue-chartjs": "^5.3.2",
"vue-draggable-next": "^2.2.1",
- "vue-router": "^4.4.5",
+ "vue-router": "^4.5.0",
"vue-virtual-scroller": "^2.0.0-beta.8"
},
"devDependencies": {
@@ -37,7 +37,7 @@
"@vue/eslint-config-prettier": "^10.1.0",
"@vue/eslint-config-typescript": "^14.1.4",
"@vue/test-utils": "^2.4.6",
- "@vue/tsconfig": "^0.6.0",
+ "@vue/tsconfig": "^0.7.0",
"autoprefixer": "^10.4.20",
"eslint": "^9.16.0",
"eslint-plugin-vue": "^9.32.0",
@@ -47,11 +47,11 @@
"postcss": "^8.4.45",
"prettier": "^3.4.1",
"prettier-plugin-tailwindcss": "^0.6.9",
- "tailwindcss": "^3.4.14",
- "typescript": "5.6.3",
+ "tailwindcss": "^3.4.16",
+ "typescript": "^5.6.3",
"typescript-eslint": "^8.16.0",
"vite": "^5.4.11",
- "vitest": "^2.1.5",
+ "vitest": "^2.1.8",
"vue-tsc": "^2.1.10"
}
},
@@ -77,27 +77,30 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz",
- "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
+ "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/helper-validator-identifier": {
- "version": "7.25.7",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz",
- "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==",
+ "version": "7.25.9",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
+ "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
+ "license": "MIT",
"engines": {
"node": ">=6.9.0"
}
},
"node_modules/@babel/parser": {
- "version": "7.25.8",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz",
- "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==",
+ "version": "7.26.2",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz",
+ "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==",
+ "license": "MIT",
"dependencies": {
- "@babel/types": "^7.25.8"
+ "@babel/types": "^7.26.0"
},
"bin": {
"parser": "bin/babel-parser.js"
@@ -107,13 +110,13 @@
}
},
"node_modules/@babel/types": {
- "version": "7.25.8",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz",
- "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==",
+ "version": "7.26.0",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz",
+ "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==",
+ "license": "MIT",
"dependencies": {
- "@babel/helper-string-parser": "^7.25.7",
- "@babel/helper-validator-identifier": "^7.25.7",
- "to-fast-properties": "^2.0.0"
+ "@babel/helper-string-parser": "^7.25.9",
+ "@babel/helper-validator-identifier": "^7.25.9"
},
"engines": {
"node": ">=6.9.0"
@@ -1477,13 +1480,13 @@
}
},
"node_modules/@vitest/expect": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.5.tgz",
- "integrity": "sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.8.tgz",
+ "integrity": "sha512-8ytZ/fFHq2g4PJVAtDX57mayemKgDR6X3Oa2Foro+EygiOJHUXhCqBAAKQYYajZpFoIfvBCF1j6R6IYRSIUFuw==",
"dev": true,
"dependencies": {
- "@vitest/spy": "2.1.5",
- "@vitest/utils": "2.1.5",
+ "@vitest/spy": "2.1.8",
+ "@vitest/utils": "2.1.8",
"chai": "^5.1.2",
"tinyrainbow": "^1.2.0"
},
@@ -1492,12 +1495,12 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.5.tgz",
- "integrity": "sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.8.tgz",
+ "integrity": "sha512-7guJ/47I6uqfttp33mgo6ga5Gr1VnL58rcqYKyShoRK9ebu8T5Rs6HN3s1NABiBeVTdWNrwUMcHH54uXZBN4zA==",
"dev": true,
"dependencies": {
- "@vitest/spy": "2.1.5",
+ "@vitest/spy": "2.1.8",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.12"
},
@@ -1518,9 +1521,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz",
- "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz",
+ "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==",
"dev": true,
"dependencies": {
"tinyrainbow": "^1.2.0"
@@ -1530,12 +1533,12 @@
}
},
"node_modules/@vitest/runner": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.5.tgz",
- "integrity": "sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.8.tgz",
+ "integrity": "sha512-17ub8vQstRnRlIU5k50bG+QOMLHRhYPAna5tw8tYbj+jzjcspnwnwtPtiOlkuKC4+ixDPTuLZiqiWWQ2PSXHVg==",
"dev": true,
"dependencies": {
- "@vitest/utils": "2.1.5",
+ "@vitest/utils": "2.1.8",
"pathe": "^1.1.2"
},
"funding": {
@@ -1543,12 +1546,12 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.5.tgz",
- "integrity": "sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.8.tgz",
+ "integrity": "sha512-20T7xRFbmnkfcmgVEz+z3AU/3b0cEzZOt/zmnvZEctg64/QZbSDJEVm9fLnnlSi74KibmRsO9/Qabi+t0vCRPg==",
"dev": true,
"dependencies": {
- "@vitest/pretty-format": "2.1.5",
+ "@vitest/pretty-format": "2.1.8",
"magic-string": "^0.30.12",
"pathe": "^1.1.2"
},
@@ -1557,9 +1560,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.5.tgz",
- "integrity": "sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.8.tgz",
+ "integrity": "sha512-5swjf2q95gXeYPevtW0BLk6H8+bPlMb4Vw/9Em4hFxDcaOxS+e0LOX4yqNxoHzMR2akEB2xfpnWUzkZokmgWDg==",
"dev": true,
"dependencies": {
"tinyspy": "^3.0.2"
@@ -1569,12 +1572,12 @@
}
},
"node_modules/@vitest/utils": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz",
- "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz",
+ "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==",
"dev": true,
"dependencies": {
- "@vitest/pretty-format": "2.1.5",
+ "@vitest/pretty-format": "2.1.8",
"loupe": "^3.1.2",
"tinyrainbow": "^1.2.0"
},
@@ -1609,12 +1612,13 @@
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.12.tgz",
- "integrity": "sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz",
+ "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==",
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
- "@vue/shared": "3.5.12",
+ "@vue/shared": "3.5.13",
"entities": "^4.5.0",
"estree-walker": "^2.0.2",
"source-map-js": "^1.2.0"
@@ -1623,45 +1627,50 @@
"node_modules/@vue/compiler-core/node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
},
"node_modules/@vue/compiler-dom": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.12.tgz",
- "integrity": "sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz",
+ "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==",
+ "license": "MIT",
"dependencies": {
- "@vue/compiler-core": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/compiler-core": "3.5.13",
+ "@vue/shared": "3.5.13"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.12.tgz",
- "integrity": "sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz",
+ "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==",
+ "license": "MIT",
"dependencies": {
"@babel/parser": "^7.25.3",
- "@vue/compiler-core": "3.5.12",
- "@vue/compiler-dom": "3.5.12",
- "@vue/compiler-ssr": "3.5.12",
- "@vue/shared": "3.5.12",
+ "@vue/compiler-core": "3.5.13",
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.11",
- "postcss": "^8.4.47",
+ "postcss": "^8.4.48",
"source-map-js": "^1.2.0"
}
},
"node_modules/@vue/compiler-sfc/node_modules/estree-walker": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
- "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "license": "MIT"
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.12.tgz",
- "integrity": "sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz",
+ "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==",
+ "license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/shared": "3.5.13"
}
},
"node_modules/@vue/compiler-vue2": {
@@ -1743,49 +1752,54 @@
}
},
"node_modules/@vue/reactivity": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.12.tgz",
- "integrity": "sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz",
+ "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==",
+ "license": "MIT",
"dependencies": {
- "@vue/shared": "3.5.12"
+ "@vue/shared": "3.5.13"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.12.tgz",
- "integrity": "sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz",
+ "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==",
+ "license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/reactivity": "3.5.13",
+ "@vue/shared": "3.5.13"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.12.tgz",
- "integrity": "sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz",
+ "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==",
+ "license": "MIT",
"dependencies": {
- "@vue/reactivity": "3.5.12",
- "@vue/runtime-core": "3.5.12",
- "@vue/shared": "3.5.12",
+ "@vue/reactivity": "3.5.13",
+ "@vue/runtime-core": "3.5.13",
+ "@vue/shared": "3.5.13",
"csstype": "^3.1.3"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.12.tgz",
- "integrity": "sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz",
+ "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==",
+ "license": "MIT",
"dependencies": {
- "@vue/compiler-ssr": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/compiler-ssr": "3.5.13",
+ "@vue/shared": "3.5.13"
},
"peerDependencies": {
- "vue": "3.5.12"
+ "vue": "3.5.13"
}
},
"node_modules/@vue/shared": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.12.tgz",
- "integrity": "sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg=="
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz",
+ "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==",
+ "license": "MIT"
},
"node_modules/@vue/test-utils": {
"version": "2.4.6",
@@ -1798,13 +1812,14 @@
}
},
"node_modules/@vue/tsconfig": {
- "version": "0.6.0",
- "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.6.0.tgz",
- "integrity": "sha512-MHXNd6lzugsEHvuA6l1GqrF5jROqUon8sP/HInLPnthJiYvB0VvpHMywg7em1dBZfFZNBSkR68qH37zOdRHmCw==",
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.7.0.tgz",
+ "integrity": "sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==",
"dev": true,
+ "license": "MIT",
"peerDependencies": {
"typescript": "5.x",
- "vue": "^3.3.0"
+ "vue": "^3.4.0"
},
"peerDependenciesMeta": {
"typescript": {
@@ -1929,6 +1944,7 @@
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -2054,12 +2070,16 @@
"dev": true
},
"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==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz",
+ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/boolbase": {
@@ -2260,16 +2280,11 @@
}
},
"node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
+ "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==",
"dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
+ "license": "MIT",
"dependencies": {
"anymatch": "~3.1.2",
"braces": "~3.0.2",
@@ -2282,6 +2297,9 @@
"engines": {
"node": ">= 8.10.0"
},
+ "funding": {
+ "url": "https://paulmillr.com/funding/"
+ },
"optionalDependencies": {
"fsevents": "~2.3.2"
}
@@ -2291,6 +2309,7 @@
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
+ "license": "ISC",
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -2486,7 +2505,8 @@
"node_modules/csstype": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
- "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
+ "license": "MIT"
},
"node_modules/d3-dispatch": {
"version": "3.0.1",
@@ -3833,6 +3853,7 @@
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -4097,10 +4118,11 @@
}
},
"node_modules/jiti": {
- "version": "1.21.0",
- "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
- "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
+ "version": "1.21.6",
+ "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
+ "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
"dev": true,
+ "license": "MIT",
"bin": {
"jiti": "bin/jiti.js"
}
@@ -4252,10 +4274,11 @@
}
},
"node_modules/lilconfig": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
- "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz",
+ "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=14"
},
@@ -4817,6 +4840,7 @@
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=0.10.0"
}
@@ -5292,9 +5316,10 @@
}
},
"node_modules/picocolors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
- "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw=="
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
+ "license": "ISC"
},
"node_modules/picomatch": {
"version": "2.3.1",
@@ -5330,9 +5355,10 @@
}
},
"node_modules/pinia": {
- "version": "2.2.6",
- "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.2.6.tgz",
- "integrity": "sha512-vIsR8JkDN5Ga2vAxqOE2cJj4VtsHnzpR1Fz30kClxlh0yCHfec6uoMeM3e/ddqmwFUejK3NlrcQa/shnpyT4hA==",
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.0.tgz",
+ "integrity": "sha512-ohZj3jla0LL0OH5PlLTDMzqKiVw2XARmC1XYLdLWIPBMdhDW/123ZWr4zVAhtJm+aoSkFa13pYXskAvAscIkhQ==",
+ "license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.6.3",
"vue-demi": "^0.14.10"
@@ -5341,14 +5367,10 @@
"url": "https://github.com/sponsors/posva"
},
"peerDependencies": {
- "@vue/composition-api": "^1.4.0",
"typescript": ">=4.4.4",
- "vue": "^2.6.14 || ^3.5.11"
+ "vue": "^2.7.0 || ^3.5.11"
},
"peerDependenciesMeta": {
- "@vue/composition-api": {
- "optional": true
- },
"typescript": {
"optional": true
}
@@ -5421,9 +5443,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.47",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
- "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
+ "version": "8.4.49",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz",
+ "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==",
"funding": [
{
"type": "opencollective",
@@ -5438,9 +5460,10 @@
"url": "https://github.com/sponsors/ai"
}
],
+ "license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.1.0",
+ "picocolors": "^1.1.1",
"source-map-js": "^1.2.1"
},
"engines": {
@@ -5519,29 +5542,37 @@
}
},
"node_modules/postcss-nested": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
- "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz",
+ "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "license": "MIT",
"dependencies": {
- "postcss-selector-parser": "^6.0.11"
+ "postcss-selector-parser": "^6.1.1"
},
"engines": {
"node": ">=12.0"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": "^8.2.14"
}
},
"node_modules/postcss-selector-parser": {
- "version": "6.0.15",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
- "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
+ "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -5774,6 +5805,7 @@
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -6494,33 +6526,34 @@
}
},
"node_modules/tailwindcss": {
- "version": "3.4.14",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz",
- "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==",
+ "version": "3.4.16",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.16.tgz",
+ "integrity": "sha512-TI4Cyx7gDiZ6r44ewaJmt0o6BrMCT5aK5e0rmJ/G9Xq3w7CX/5VXl/zIPEJZFUK5VEqwByyhqNPycPlvcK4ZNw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
- "chokidar": "^3.5.3",
+ "chokidar": "^3.6.0",
"didyoumean": "^1.2.2",
"dlv": "^1.1.3",
- "fast-glob": "^3.3.0",
+ "fast-glob": "^3.3.2",
"glob-parent": "^6.0.2",
"is-glob": "^4.0.3",
- "jiti": "^1.21.0",
- "lilconfig": "^2.1.0",
- "micromatch": "^4.0.5",
+ "jiti": "^1.21.6",
+ "lilconfig": "^3.1.3",
+ "micromatch": "^4.0.8",
"normalize-path": "^3.0.0",
"object-hash": "^3.0.0",
- "picocolors": "^1.0.0",
- "postcss": "^8.4.23",
+ "picocolors": "^1.1.1",
+ "postcss": "^8.4.47",
"postcss-import": "^15.1.0",
"postcss-js": "^4.0.1",
- "postcss-load-config": "^4.0.1",
- "postcss-nested": "^6.0.1",
- "postcss-selector-parser": "^6.0.11",
- "resolve": "^1.22.2",
- "sucrase": "^3.32.0"
+ "postcss-load-config": "^4.0.2",
+ "postcss-nested": "^6.2.0",
+ "postcss-selector-parser": "^6.1.2",
+ "resolve": "^1.22.8",
+ "sucrase": "^3.35.0"
},
"bin": {
"tailwind": "lib/cli.js",
@@ -6530,15 +6563,6 @@
"node": ">=14.0.0"
}
},
- "node_modules/tailwindcss/node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
"node_modules/thenify": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
@@ -6617,14 +6641,6 @@
"integrity": "sha512-j4OxQI5rc1Ve/4m/9o2WhWSC4jGc4uVbCINdOEJRAraCi0YqTqgMcxUx7DbmuP0G3PCixoof/RZB0Q5Kh9tagw==",
"dev": true
},
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/to-regex-range": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
@@ -6948,9 +6964,9 @@
}
},
"node_modules/vite-node": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.5.tgz",
- "integrity": "sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.8.tgz",
+ "integrity": "sha512-uPAwSr57kYjAUux+8E2j0q0Fxpn8M9VoyfGiRI8Kfktz9NcYMCenwY5RnZxnF1WTu3TGiYipirIzacLL3VVGFg==",
"dev": true,
"dependencies": {
"cac": "^6.7.14",
@@ -6984,18 +7000,18 @@
}
},
"node_modules/vitest": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.5.tgz",
- "integrity": "sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==",
- "dev": true,
- "dependencies": {
- "@vitest/expect": "2.1.5",
- "@vitest/mocker": "2.1.5",
- "@vitest/pretty-format": "^2.1.5",
- "@vitest/runner": "2.1.5",
- "@vitest/snapshot": "2.1.5",
- "@vitest/spy": "2.1.5",
- "@vitest/utils": "2.1.5",
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.8.tgz",
+ "integrity": "sha512-1vBKTZskHw/aosXqQUlVWWlGUxSJR8YtiyZDJAFeW2kPAeX6S3Sool0mjspO+kXLuxVWlEDDowBAeqeAQefqLQ==",
+ "dev": true,
+ "dependencies": {
+ "@vitest/expect": "2.1.8",
+ "@vitest/mocker": "2.1.8",
+ "@vitest/pretty-format": "^2.1.8",
+ "@vitest/runner": "2.1.8",
+ "@vitest/snapshot": "2.1.8",
+ "@vitest/spy": "2.1.8",
+ "@vitest/utils": "2.1.8",
"chai": "^5.1.2",
"debug": "^4.3.7",
"expect-type": "^1.1.0",
@@ -7007,7 +7023,7 @@
"tinypool": "^1.0.1",
"tinyrainbow": "^1.2.0",
"vite": "^5.0.0",
- "vite-node": "2.1.5",
+ "vite-node": "2.1.8",
"why-is-node-running": "^2.3.0"
},
"bin": {
@@ -7022,8 +7038,8 @@
"peerDependencies": {
"@edge-runtime/vm": "*",
"@types/node": "^18.0.0 || >=20.0.0",
- "@vitest/browser": "2.1.5",
- "@vitest/ui": "2.1.5",
+ "@vitest/browser": "2.1.8",
+ "@vitest/ui": "2.1.8",
"happy-dom": "*",
"jsdom": "*"
},
@@ -7055,15 +7071,16 @@
"dev": true
},
"node_modules/vue": {
- "version": "3.5.12",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.12.tgz",
- "integrity": "sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==",
+ "version": "3.5.13",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz",
+ "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==",
+ "license": "MIT",
"dependencies": {
- "@vue/compiler-dom": "3.5.12",
- "@vue/compiler-sfc": "3.5.12",
- "@vue/runtime-dom": "3.5.12",
- "@vue/server-renderer": "3.5.12",
- "@vue/shared": "3.5.12"
+ "@vue/compiler-dom": "3.5.13",
+ "@vue/compiler-sfc": "3.5.13",
+ "@vue/runtime-dom": "3.5.13",
+ "@vue/server-renderer": "3.5.13",
+ "@vue/shared": "3.5.13"
},
"peerDependencies": {
"typescript": "*"
@@ -7139,9 +7156,10 @@
}
},
"node_modules/vue-router": {
- "version": "4.4.5",
- "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.4.5.tgz",
- "integrity": "sha512-4fKZygS8cH1yCyuabAXGUAsyi1b2/o/OKgu/RUb+znIYOxPRxdkytJEx+0wGcpBE1pX6vUgh5jwWOKRGvuA/7Q==",
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.5.0.tgz",
+ "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==",
+ "license": "MIT",
"dependencies": {
"@vue/devtools-api": "^6.6.4"
},
diff --git a/report-viewer/package.json b/report-viewer/package.json
index 250458e604..13ba9f02d2 100644
--- a/report-viewer/package.json
+++ b/report-viewer/package.json
@@ -28,12 +28,12 @@
"chartjs-plugin-datalabels": "^2.2.0",
"highlight.js": "^11.10.0",
"jszip": "^3.10.0",
- "pinia": "^2.2.6",
+ "pinia": "^2.3.0",
"slash": "^5.1.0",
- "vue": "^3.5.12",
+ "vue": "^3.5.13",
"vue-chartjs": "^5.3.2",
"vue-draggable-next": "^2.2.1",
- "vue-router": "^4.4.5",
+ "vue-router": "^4.5.0",
"vue-virtual-scroller": "^2.0.0-beta.8"
},
"devDependencies": {
@@ -48,7 +48,7 @@
"@vue/eslint-config-prettier": "^10.1.0",
"@vue/eslint-config-typescript": "^14.1.4",
"@vue/test-utils": "^2.4.6",
- "@vue/tsconfig": "^0.6.0",
+ "@vue/tsconfig": "^0.7.0",
"autoprefixer": "^10.4.20",
"eslint": "^9.16.0",
"eslint-plugin-vue": "^9.32.0",
@@ -58,11 +58,11 @@
"postcss": "^8.4.45",
"prettier": "^3.4.1",
"prettier-plugin-tailwindcss": "^0.6.9",
- "tailwindcss": "^3.4.14",
+ "tailwindcss": "^3.4.16",
"typescript": "^5.6.3",
"typescript-eslint": "^8.16.0",
"vite": "^5.4.11",
- "vitest": "^2.1.5",
+ "vitest": "^2.1.8",
"vue-tsc": "^2.1.10"
}
}