From 00475b9bb091d76708f90dacfb886b4440835cc1 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Mon, 14 Jul 2025 08:11:35 +0100 Subject: [PATCH 01/11] Support LuaTable arguments in @LuaFunction --- .../computercraft/api/lua/ObjectLuaTable.java | 10 +++++++ .../computercraft/core/asm/Generator.java | 21 ++++++++++++-- .../computercraft/core/asm/GeneratorTest.java | 28 ++++++++++++++++--- 3 files changed, 52 insertions(+), 7 deletions(-) diff --git a/projects/core-api/src/main/java/dan200/computercraft/api/lua/ObjectLuaTable.java b/projects/core-api/src/main/java/dan200/computercraft/api/lua/ObjectLuaTable.java index 5a133b742..dc0e45f5c 100644 --- a/projects/core-api/src/main/java/dan200/computercraft/api/lua/ObjectLuaTable.java +++ b/projects/core-api/src/main/java/dan200/computercraft/api/lua/ObjectLuaTable.java @@ -61,4 +61,14 @@ public class ObjectLuaTable implements LuaTable { public Set> entrySet() { return map.entrySet(); } + + @Override + public boolean equals(Object o) { + return this == o || o instanceof Map otherMap && map.equals(otherMap); + } + + @Override + public int hashCode() { + return map.hashCode(); + } } diff --git a/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java b/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java index e31cac71e..6e6acebff 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java +++ b/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java @@ -73,6 +73,22 @@ final class Generator { addArgType(argMethodMap, Map.class, "Table"); addArgType(argMethodMap, String.class, "String"); addArgType(argMethodMap, ByteBuffer.class, "Bytes"); + argMethodMap.put(LuaTable.class, new ArgMethods( + // i -> new ObjectLuaTable(getTable(i)) + MethodHandles.filterReturnValue( + LOOKUP.findVirtual(IArguments.class, "getTable", MethodType.methodType(Map.class, int.class)), + LOOKUP.findConstructor(ObjectLuaTable.class, MethodType.methodType(void.class, Map.class)) + .asType(MethodType.methodType(LuaTable.class, Map.class)) + ), + // i -> optTable(i).map(ObjectLuaTable::new) + MethodHandles.filterReturnValue( + LOOKUP.findVirtual(IArguments.class, "optTable", MethodType.methodType(Optional.class, int.class)), + MethodHandles.insertArguments( + LOOKUP.findVirtual(Optional.class, "map", MethodType.methodType(Optional.class, Function.class)), + 1, (Function, LuaTable>) ObjectLuaTable::new + ) + ) + )); argMethods = Map.copyOf(argMethodMap); ARG_TABLE_UNSAFE = ArgMethods.of(LuaTable.class, "TableUnsafe"); @@ -335,10 +351,9 @@ final class Generator { } private static @Nullable ArgMethods getArgMethods(Class type, boolean unsafe) { - var getter = argMethods.get(type); - if (getter != null) return getter; if (type == LuaTable.class && unsafe) return ARG_TABLE_UNSAFE; - return null; + + return argMethods.get(type); } /** diff --git a/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java b/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java index 9c956f7f6..dab569ccd 100644 --- a/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java +++ b/projects/core/src/test/java/dan200/computercraft/core/asm/GeneratorTest.java @@ -10,6 +10,7 @@ import dan200.computercraft.core.computer.ComputerSide; import dan200.computercraft.core.methods.LuaMethod; import dan200.computercraft.core.methods.NamedMethod; import org.hamcrest.Matcher; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.Test; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; @@ -123,6 +124,17 @@ public class GeneratorTest { assertThrows(LuaException.class, () -> apply(methods, new EnumMethods(), "getEnum", "not as side")); } + @Test + public void testLuaTable() throws LuaException { + var methods = GENERATOR.getMethods(TableMethods.class); + assertThat(methods, containsInAnyOrder(named("getTable"), named("optTable"))); + + assertThat(apply(methods, new TableMethods(), "getTable", Map.of("x", "y")), one(is(Map.of("x", "y")))); + assertThat(apply(methods, new TableMethods(), "optTable", Map.of("x", "y")), one(is(Map.of("x", "y")))); + assertThat(apply(methods, new TableMethods(), "optTable"), one(nullValue())); + assertThrows(LuaException.class, () -> apply(methods, new TableMethods(), "getTable", "not a table")); + } + @Test public void testMainThread() throws LuaException { var methods = GENERATOR.getMethods(MainThread.class); @@ -277,6 +289,18 @@ public class GeneratorTest { } } + public static class TableMethods { + @LuaFunction + public final LuaTable getTable(LuaTable table) { + return table; + } + + @LuaFunction + public final @Nullable LuaTable optTable(Optional> table) { + return table.orElse(null); + } + } + public static class MainThread { @LuaFunction(mainThread = true) public final void go() { @@ -288,10 +312,6 @@ public class GeneratorTest { public final void withUnsafe(LuaTable table) { } - @LuaFunction - public final void withoutUnsafe(LuaTable table) { - } - @LuaFunction(unsafe = true, mainThread = true) public final void invalid(LuaTable table) { } From 5f16909d4b6dc41cd92143587a032eb2d1544e70 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sat, 19 Jul 2025 22:21:53 +0100 Subject: [PATCH 02/11] Remove empty-argument optimisation This doesn't work with getTableUnsafe, as empty arguments are considered closed already. We could argubly special-case the empty args, but the optimisation has very minor benefits, so I don't think worrying about too much. Fixes #2246. --- .../computercraft/core/lua/VarargArguments.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/projects/core/src/main/java/dan200/computercraft/core/lua/VarargArguments.java b/projects/core/src/main/java/dan200/computercraft/core/lua/VarargArguments.java index 45003276d..554c45d10 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/lua/VarargArguments.java +++ b/projects/core/src/main/java/dan200/computercraft/core/lua/VarargArguments.java @@ -20,13 +20,8 @@ import static org.squiddev.cobalt.Constants.NAME; final class VarargArguments implements IArguments { private static final Logger LOG = LoggerFactory.getLogger(VarargArguments.class); - private static final VarargArguments EMPTY = new VarargArguments(Constants.NONE); private static boolean reportedIllegalGet; - static { - EMPTY.escapes = EMPTY.closed = true; - } - private final Varargs varargs; private volatile boolean closed; @@ -51,7 +46,7 @@ final class VarargArguments implements IArguments { } static VarargArguments of(Varargs values) { - return values == Constants.NONE ? EMPTY : new VarargArguments(values); + return new VarargArguments(values); } boolean isClosed() { @@ -138,9 +133,7 @@ final class VarargArguments implements IArguments { if (count < 0) throw new IllegalStateException("count cannot be negative"); if (count == 0) return this; - var newArgs = varargs.subargs(count + 1); - if (newArgs == Constants.NONE) return EMPTY; - return new VarargArguments(newArgs, this, count); + return new VarargArguments(varargs.subargs(count + 1), this, count); } @Override From 5a9e21ccc370eb0376922a304a23873ab7bd61e1 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 20 Jul 2025 11:16:39 +0100 Subject: [PATCH 03/11] Clarify behaviour of itemGroups field The availability of this field changes between Minecraft versions, but we didn't make that entirely clear. See #2247 --- .../generic/methods/AbstractInventoryMethods.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/AbstractInventoryMethods.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/AbstractInventoryMethods.java index 56be72a8e..74bfcf2bd 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/AbstractInventoryMethods.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/generic/methods/AbstractInventoryMethods.java @@ -81,11 +81,10 @@ public abstract class AbstractInventoryMethods implements GenericPeripheral { * recommended to print it out using [`textutils.serialize`] or in the Lua * REPL, to explore what is available. *

- * > [Deprecated fields][!INFO] - * > Older versions of CC: Tweaked exposed an {@code itemGroups} field, listing the - * > creative tabs an item was available under. This information is no longer available on - * > more recent versions of the game, and so this field will always be empty. Do not use this - * > field in new code! + * > [Missing fields][!INFO] + * > CC: Tweaked exposes an {@code itemGroups} field, listing the creative tabs an + * > item is available under. This information is not available on Minecraft 1.19.3 + * > to 1.20.3, and so this field will be empty on those versions. * * @param inventory The current inventory. * @param slot The slot to get information about. From 9e233a916fca02be1366dadeaec09e7882aaf459 Mon Sep 17 00:00:00 2001 From: Zirunis <122003158+Zirunis@users.noreply.github.com> Date: Fri, 8 Aug 2025 11:45:46 +0200 Subject: [PATCH 04/11] Fixed typo in docstring of textutils.serializeJSON (#2260) --- .../resources/data/computercraft/lua/rom/apis/textutils.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua b/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua index 7dd0b5af4..40a5f18cc 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua @@ -864,7 +864,7 @@ values do not serialise cleanly into JSON. A consequence of this is that an empty table will always be serialised to an object, not an array. [`textutils.empty_json_array`] may be used to express an empty array. - - Lua strings are an a sequence of raw bytes, and do not have any specific encoding. + - Lua strings are a sequence of raw bytes, and do not have any specific encoding. However, JSON strings must be valid unicode. By default, non-ASCII characters in a string are serialised to their unicode code point (for instance, `"\xfe"` is converted to `"\u00fe"`). The `unicode_strings` option may be set to treat all input From a683697e8c37505a95957a7213f6551ea3b8e123 Mon Sep 17 00:00:00 2001 From: Zirunis <122003158+Zirunis@users.noreply.github.com> Date: Wed, 27 Aug 2025 07:47:42 +0200 Subject: [PATCH 05/11] Fixed two typos in dfpwm.lua (#2272) --- .../computercraft/lua/rom/modules/main/cc/audio/dfpwm.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/modules/main/cc/audio/dfpwm.lua b/projects/core/src/main/resources/data/computercraft/lua/rom/modules/main/cc/audio/dfpwm.lua index 47034fe42..8de77b964 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/modules/main/cc/audio/dfpwm.lua +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/modules/main/cc/audio/dfpwm.lua @@ -8,8 +8,8 @@ Convert between streams of DFPWM audio data and a list of amplitudes. DFPWM (Dynamic Filter Pulse Width Modulation) is an audio codec designed by GreaseMonkey. It's a relatively compact format compared to raw PCM data, only using 1 bit per sample, but is simple enough to encode and decode in real time. -Typically DFPWM audio is read from [the filesystem][`fs.ReadHandle`] or a [a web request][`http.Response`] as a string, -and converted a format suitable for [`speaker.playAudio`]. +Typically DFPWM audio is read from [the filesystem][`fs.ReadHandle`] or [a web request][`http.Response`] as a string, +and converted to a format suitable for [`speaker.playAudio`]. ## Encoding and decoding files This module exposes two key functions, [`make_decoder`] and [`make_encoder`], which construct a new decoder or encoder. From d0fbec6c6baa1315faccb6f6f8dfbf48f68c248c Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Thu, 28 Aug 2025 08:04:52 +0100 Subject: [PATCH 06/11] Add bounds checks for compartment lookup This *shouldn't* be needed, as the compartment index is always >= 0, and Inventory.getItem returns an empty stack if the item is not found. However, some mods pass a negative compartment index, which causes getItem to throw an AIOOB instead. Fixes #2267 --- .../java/dan200/computercraft/shared/util/InventoryUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/projects/common/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java b/projects/common/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java index c2acfe1f5..4616f8328 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/util/InventoryUtil.java @@ -54,7 +54,7 @@ public final class InventoryUtil { */ public static int getInventorySlotFromCompartment(Player player, int slot, ItemStack stack) { if (stack.isEmpty()) throw new IllegalArgumentException("Cannot search for empty stack"); - if (player.getInventory().getItem(slot) == stack) return slot; + if (slot >= 0 && slot < Inventory.INVENTORY_SIZE && player.getInventory().getItem(slot) == stack) return slot; if (player.getInventory().getItem(Inventory.SLOT_OFFHAND) == stack) return Inventory.SLOT_OFFHAND; return -1; } From b9ed66983d714bcb5c6bf15b428e01a035106dbf Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 31 Aug 2025 12:11:34 +0100 Subject: [PATCH 07/11] Fix some isues in SNBT parsing - Accept the full range of unquoted strings - Fix error when failing to parse an unquoted string See #2277. This is not sufficient to close the issue (wow, there's so much more wrong with the code), but at least stops unserialiseJSON crashing. --- .../computercraft/lua/rom/apis/textutils.lua | 3 +- .../test-rom/spec/apis/textutils_spec.lua | 36 ++++++++++++++++--- 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua b/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua index 40a5f18cc..af9b27b81 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/apis/textutils.lua @@ -616,7 +616,8 @@ do end local function parse_ident(str, pos) - local _, last, val = find(str, '^([%a][%w_]*)', pos) + local _, last, val = find(str, '^([%w_+.-]+)', pos) + if not last then error_at(pos, "Expected object key") end return val, last + 1 end diff --git a/projects/core/src/test/resources/test-rom/spec/apis/textutils_spec.lua b/projects/core/src/test/resources/test-rom/spec/apis/textutils_spec.lua index 8ea92d717..9dd295903 100644 --- a/projects/core/src/test/resources/test-rom/spec/apis/textutils_spec.lua +++ b/projects/core/src/test/resources/test-rom/spec/apis/textutils_spec.lua @@ -246,11 +246,25 @@ describe("The textutils library", function() describe("parses using NBT-style syntax", function() local function exp(x) local res, err = textutils.unserializeJSON(x, { nbt_style = true }) - if not res then error(err, 2) end + if not res then fail(err) end return expect(res) end + + local function exp_err(x) + local res, err = textutils.unserializeJSON(x, { nbt_style = true }) + if res ~= nil then + fail(("Expected %q not to parse, but returned %s"):format(x, textutils.serialise(res))) + end + return expect(err) + end + it("basic objects", function() - exp([[{ a: 1, b:2 }]]):same { a = 1, b = 2 } + exp("{ a: 1, b:2 }"):same { a = 1, b = 2 } + exp("{0+_-.aA: 1}"):same { ["0+_-.aA"] = 1 } + exp("{}"):same {} + + exp_err("{: 123}"):eq("Malformed JSON at position 2: Expected object key") + exp_err("{#: 123}"):eq("Malformed JSON at position 2: Expected object key") end) it("suffixed numbers", function() @@ -258,9 +272,21 @@ describe("The textutils library", function() exp("1.1d"):eq(1.1) end) - it("strings", function() - exp("'123'"):eq("123") - exp("\"123\""):eq("123") + describe("strings", function() + it("empty quoted strings", function() + exp("''"):eq("") + exp("\"\""):eq("") + end) + + pending("unquoted strings", function() + exp("hello"):eq("hello") + exp("0+_-.aA"):eq("0+_-.aA") + end) + + it("quoted strings", function() + exp("'123'"):eq("123") + exp("\"123\""):eq("123") + end) end) it("typed arrays", function() From 157ce4fa553a932e5dea31f3461b5140712cc65a Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sun, 26 Oct 2025 12:36:48 +0000 Subject: [PATCH 08/11] Update Create for Fabric Awww no, here we go again. The Forge/Fabric versions are identical again, but keeping them separate for now, as I'm a) lazy and b) not convinced they won't diverge again. Fixes #2311 --- gradle/libs.versions.toml | 2 +- .../computercraft/shared/integration/CreateIntegration.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 54b0935ff..d44d8b455 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -47,7 +47,7 @@ rei = "12.0.626" rubidium = "0.6.1" sodium = "mc1.20-0.4.10" create-forge = "6.0.0-9" -create-fabric = "0.5.1-f-build.1467+mc1.20.1" +create-fabric = "6.0.7.0+mc1.20.1-build.1716" # Testing hamcrest = "2.2" diff --git a/projects/fabric/src/main/java/dan200/computercraft/shared/integration/CreateIntegration.java b/projects/fabric/src/main/java/dan200/computercraft/shared/integration/CreateIntegration.java index d7880d950..a606f9376 100644 --- a/projects/fabric/src/main/java/dan200/computercraft/shared/integration/CreateIntegration.java +++ b/projects/fabric/src/main/java/dan200/computercraft/shared/integration/CreateIntegration.java @@ -4,8 +4,8 @@ package dan200.computercraft.shared.integration; -import com.simibubi.create.content.contraptions.BlockMovementChecks; -import com.simibubi.create.content.contraptions.BlockMovementChecks.CheckResult; +import com.simibubi.create.api.contraption.BlockMovementChecks; +import com.simibubi.create.api.contraption.BlockMovementChecks.CheckResult; import dan200.computercraft.shared.peripheral.modem.wired.CableBlock; import dan200.computercraft.shared.peripheral.modem.wireless.WirelessModemBlock; From 569de7fafb5c0ad6374db7584ba7361c054be933 Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Fri, 31 Oct 2025 19:50:44 +0000 Subject: [PATCH 09/11] Update to Gradle 9.2 - Update to Loom 1.12. This requires Java 21, so we now build with Java 21, but targetting 17. The new "-release" flag does make this much easier, so hopefully shouldn't cause too many issues. - Bump versions of a lot of other things. - Fix various errorprone/checkstyle grumbles. --- build.gradle.kts | 10 +- buildSrc/build.gradle.kts | 3 +- .../main/kotlin/cc-tweaked.fabric.gradle.kts | 21 +- .../cc-tweaked.java-convention.gradle.kts | 23 +- .../src/main/kotlin/cc-tweaked.mod.gradle.kts | 3 + .../cc/tweaked/gradle/CCTweakedExtension.kt | 2 +- .../cc/tweaked/gradle/CCTweakedPlugin.kt | 15 +- .../cc/tweaked/gradle/DependencyCheck.kt | 4 + .../kotlin/cc/tweaked/gradle/Extensions.kt | 2 +- .../tweaked/gradle/MinecraftConfigurations.kt | 1 - gradle/gradle-daemon-jvm.properties | 2 +- gradle/libs.versions.toml | 50 +- gradle/wrapper/gradle-wrapper.properties | 2 +- package-lock.json | 754 ++++++++++-------- projects/common-api/build.gradle.kts | 17 +- .../api/turtle/ITurtleUpgrade.java | 2 +- projects/common/build.gradle.kts | 2 +- .../impl/network/wired/InvariantChecker.java | 2 - .../computercraft/shared/ModRegistry.java | 2 +- .../client/SpeakerStopClientMessage.java | 2 +- .../modem/wired/WiredModemPeripheral.java | 14 +- .../impl/network/wired/NetworkBenchmark.java | 8 +- projects/core/build.gradle.kts | 3 + .../core/apis/PeripheralAPI.java | 18 +- .../core/apis/http/CheckUrl.java | 2 +- .../core/apis/http/Resource.java | 2 +- .../computercraft/core/asm/Generator.java | 2 +- .../computerthread/ComputerThread.java | 2 +- ...eplaceUnderscoresDisplayNameGenerator.java | 3 +- projects/fabric/build.gradle.kts | 2 - .../data/FabricDataProviders.java | 4 +- projects/forge/build.gradle.kts | 1 - projects/lints/build.gradle.kts | 4 + .../cc/tweaked/javadoc/SnippetTaglet.kt | 138 ---- .../main/java/cc/tweaked/standalone/Main.java | 39 +- .../web/builder/TransformingClassLoader.java | 3 +- .../java/cc/tweaked/web/EmulatedComputer.java | 4 +- .../core/apis/http/request/THttpRequest.java | 2 +- settings.gradle.kts | 1 + 39 files changed, 584 insertions(+), 587 deletions(-) delete mode 100644 projects/lints/src/main/kotlin/cc/tweaked/javadoc/SnippetTaglet.kt diff --git a/build.gradle.kts b/build.gradle.kts index a17602442..4d5991ea0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,13 +4,11 @@ import cc.tweaked.gradle.JUnitExt import net.fabricmc.loom.api.LoomGradleExtensionAPI -import net.fabricmc.loom.util.gradle.SourceSetHelper import org.jetbrains.gradle.ext.* import org.jetbrains.gradle.ext.Application plugins { publishing - alias(libs.plugins.taskTree) alias(libs.plugins.githubRelease) alias(libs.plugins.gradleVersions) alias(libs.plugins.versionCatalogUpdate) @@ -70,7 +68,7 @@ idea.project.settings.runConfigurations { val fabricProject = evaluationDependsOn(":fabric") val classPathGroup = fabricProject.extensions.getByType().mods .joinToString(File.pathSeparator + File.pathSeparator) { modSettings -> - SourceSetHelper.getClasspath(modSettings, project).joinToString(File.pathSeparator) { it.absolutePath } + modSettings.modFiles.joinToString(File.pathSeparator) { it.absolutePath } } vmParameters = "-ea -Dfabric.classPathGroups=$classPathGroup" @@ -115,8 +113,12 @@ idea.project.settings.compiler.javac { .toMap() } +repositories() { + mavenCentral() +} + versionCatalogUpdate { sortByKey = false pin { versions.addAll("fastutil", "guava", "netty", "slf4j") } - keep { keepUnusedLibraries = true } + keep { keepUnusedVersions = true } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 1e9e1df23..a3b20b390 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -25,6 +25,7 @@ repositories { name = "Fabric" content { includeGroup("net.fabricmc") + includeGroup("net.fabricmc.unpick") } } @@ -69,6 +70,6 @@ gradlePlugin { versionCatalogUpdate { sortByKey = false - keep { keepUnusedLibraries = true } + keep { keepUnusedVersions = true } catalogFile = file("../gradle/libs.versions.toml") } diff --git a/buildSrc/src/main/kotlin/cc-tweaked.fabric.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.fabric.gradle.kts index eede5d234..4716304cf 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.fabric.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.fabric.gradle.kts @@ -4,10 +4,7 @@ /** Default configuration for Fabric projects. */ -import cc.tweaked.gradle.CCTweakedExtension -import cc.tweaked.gradle.CCTweakedPlugin -import cc.tweaked.gradle.IdeaRunConfigurations -import cc.tweaked.gradle.MinecraftConfigurations +import cc.tweaked.gradle.* plugins { `java-library` @@ -67,3 +64,19 @@ dependencies { tasks.ideaSyncTask { doLast { IdeaRunConfigurations(project).patch() } } + +tasks.named("checkDependencyConsistency", DependencyCheck::class.java) { + val libs = project.extensions.getByType().named("libs") + // Minecraft depends on lwjgl, but Fabric forces it to a more recent version + for (lwjgl in listOf( + "lwjgl", + "lwjgl-glfw", + "lwjgl-jemalloc", + "lwjgl-openal", + "lwjgl-opengl", + "lwjgl-stb", + "lwjgl-tinyfd", + )) { + override("org.lwjgl", lwjgl, "3.3.2") + } +} diff --git a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts index 4bd108aa5..8265c8865 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts @@ -17,6 +17,8 @@ plugins { checkstyle id("com.diffplug.spotless") id("net.ltgt.errorprone") + // Required for cross-project dependencies in Fabric + id("net.fabricmc.fabric-loom-companion") } val modVersion: String by extra @@ -28,9 +30,9 @@ version = modVersion base.archivesName.convention("cc-tweaked-$mcVersion-${project.name}") java { - toolchain { - languageVersion = CCTweakedPlugin.JAVA_VERSION - } + toolchain { languageVersion = CCTweakedPlugin.JDK_VERSION } + sourceCompatibility = CCTweakedPlugin.JAVA_VERSION + targetCompatibility = CCTweakedPlugin.JAVA_VERSION withSourcesJar() } @@ -79,8 +81,18 @@ dependencies { // Configure default JavaCompile tasks with our arguments. sourceSets.all { tasks.named(compileJavaTaskName, JavaCompile::class.java) { - // Processing just gives us "No processor claimed any of these annotations", so skip that! - options.compilerArgs.addAll(listOf("-Xlint", "-Xlint:-processing")) + // Explicitly set release, as that limits the APIs we can use to the right version of Java. + options.release = CCTweakedPlugin.JAVA_TARGET.asInt() + + options.compilerArgs.addAll( + listOf( + "-Xlint", + // Processing just gives us "No processor claimed any of these annotations", so skip that! + "-Xlint:-processing", + // We violate this pattern too often for it to be a helpful warning. Something to improve one day! + "-Xlint:-this-escape", + ), + ) options.errorprone { check("InvalidBlockTag", CheckSeverity.OFF) // Broken by @cc.xyz @@ -93,6 +105,7 @@ sourceSets.all { check("NonOverridingEquals", CheckSeverity.OFF) // Peripheral.equals makes this hard to avoid check("FutureReturnValueIgnored", CheckSeverity.OFF) // Too many false positives with Netty check("InvalidInlineTag", CheckSeverity.OFF) // Triggered by @snippet. Can be removed on Java 21. + option("UnusedMethod:ExemptingMethodAnnotations", "dan200.computercraft.api.lua.LuaFunction") check("NullAway", CheckSeverity.ERROR) option( diff --git a/buildSrc/src/main/kotlin/cc-tweaked.mod.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.mod.gradle.kts index 0e720766d..f7b940709 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.mod.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.mod.gradle.kts @@ -8,6 +8,7 @@ * See notes in [cc.tweaked.gradle.MinecraftConfigurations] for the general design behind these cursed ideas. */ +import cc.tweaked.gradle.CCTweakedPlugin import cc.tweaked.gradle.MinecraftConfigurations import cc.tweaked.gradle.clientClasses import cc.tweaked.gradle.commonClasses @@ -52,3 +53,5 @@ dependencies { testImplementation(testFixtures(project)) } + +kotlin.compilerOptions.jvmTarget = CCTweakedPlugin.KOTLIN_TARGET diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedExtension.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedExtension.kt index 2c0228ce6..cad70d349 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedExtension.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedExtension.kt @@ -223,7 +223,7 @@ abstract class CCTweakedExtension(private val project: Project) { ).resolve().single() } - private fun gitProvider(default: T, command: List, process: (String) -> T): Provider { + private fun gitProvider(default: T, command: List, process: (String) -> T): Provider { val baseResult = project.providers.exec { commandLine = listOf("git", "-C", project.rootDir.absolutePath) + command } diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedPlugin.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedPlugin.kt index 5a5e27eb6..bd25d1b59 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedPlugin.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/CCTweakedPlugin.kt @@ -4,6 +4,7 @@ package cc.tweaked.gradle +import org.gradle.api.JavaVersion import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.plugins.JavaPlugin @@ -13,6 +14,7 @@ import org.gradle.plugins.ide.idea.model.IdeaModel import org.jetbrains.gradle.ext.IdeaExtPlugin import org.jetbrains.gradle.ext.runConfigurations import org.jetbrains.gradle.ext.settings +import org.jetbrains.kotlin.gradle.dsl.JvmTarget /** * Configures projects to match a shared configuration. @@ -42,6 +44,17 @@ class CCTweakedPlugin : Plugin { } companion object { - val JAVA_VERSION = JavaLanguageVersion.of(17) + /** + * The version we run with. We use Java 21 here, as our Gradle build requires that. + */ + val JDK_VERSION = JavaLanguageVersion.of(21) + + /** + * The Java version we target. Should be the same as what Minecraft uses. + */ + val JAVA_TARGET = JavaLanguageVersion.of(17) + + val JAVA_VERSION = JavaVersion.toVersion(JAVA_TARGET.asInt()) + val KOTLIN_TARGET = JvmTarget.fromTarget(JAVA_TARGET.toString()) } } diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/DependencyCheck.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/DependencyCheck.kt index 9f7f41960..fd3643ace 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/DependencyCheck.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/DependencyCheck.kt @@ -45,6 +45,10 @@ abstract class DependencyCheck : DefaultTask() { overrides.putAll(project.provider { mutableMapOf(module.get().module.toString() to version) }) } + fun override(group: String, module: String, version: String) { + overrides.put("$group:$module", version) + } + /** * Add a configuration to check. */ diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/Extensions.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/Extensions.kt index beca80746..01a212824 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/Extensions.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/Extensions.kt @@ -124,7 +124,7 @@ class CloseScope : AutoCloseable { } /** Proxy method to avoid overload ambiguity. */ -fun Property.setProvider(provider: Provider) = set(provider) +fun Property.setProvider(provider: Provider) = set(provider) /** Short-cut method to get the absolute path of a [FileSystemLocation] provider. */ fun Provider.getAbsolutePath(): String = get().asFile.absolutePath diff --git a/buildSrc/src/main/kotlin/cc/tweaked/gradle/MinecraftConfigurations.kt b/buildSrc/src/main/kotlin/cc/tweaked/gradle/MinecraftConfigurations.kt index a4caa5dec..86befec72 100644 --- a/buildSrc/src/main/kotlin/cc/tweaked/gradle/MinecraftConfigurations.kt +++ b/buildSrc/src/main/kotlin/cc/tweaked/gradle/MinecraftConfigurations.kt @@ -40,7 +40,6 @@ class MinecraftConfigurations private constructor(private val project: Project) // Set up an API configuration for clients (to ensure it's consistent with the main source set). val clientApi = configurations.maybeCreate(client.apiConfigurationName).apply { - isVisible = false isCanBeConsumed = false isCanBeResolved = false } diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index 858feb7e3..63e5bbdf4 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,2 +1,2 @@ #This file is generated by updateDaemonJvm -toolchainVersion=17 +toolchainVersion=21 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d44d8b455..d211d1244 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,17 +23,17 @@ netty = "4.1.82.Final" slf4j = "2.0.1" # Core dependencies (independent of Minecraft) -asm = "9.6" +asm = "9.9" autoService = "1.1.1" -checkerFramework = "3.42.0" +checkerFramework = "3.51.1" cobalt = { strictly = "0.9.6" } -commonsCli = "1.6.0" -jetbrainsAnnotations = "24.1.0" +commonsCli = "1.10.0" +jetbrainsAnnotations = "26.0.2-1" jspecify = "1.0.0" jzlib = "1.1.3" -kotlin = "2.1.10" -kotlin-coroutines = "1.10.1" -nightConfig = "3.8.1" +kotlin = "2.2.21" +kotlin-coroutines = "1.10.2" +nightConfig = "3.8.3" # Minecraft mods emi = "1.0.8+1.20.1" @@ -50,32 +50,31 @@ create-forge = "6.0.0-9" create-fabric = "6.0.7.0+mc1.20.1-build.1716" # Testing -hamcrest = "2.2" -jqwik = "1.8.2" -junit = "5.11.4" -junitPlatform = "1.11.4" +hamcrest = "3.0" +jqwik = "1.9.3" +junit = "6.0.1" +junitPlatform = "6.0.1" jmh = "1.37" # Build tools cctJavadoc = "1.8.4" -checkstyle = "10.23.1" -errorProne-core = "2.38.0" -errorProne-plugin = "4.1.0" -fabric-loom = "1.10.4" +checkstyle = "12.1.1" +errorProne-core = "2.43.0" +errorProne-plugin = "4.3.0" +fabric-loom = "1.12.3" githubRelease = "2.5.2" -gradleVersions = "0.50.0" -ideaExt = "1.1.7" +gradleVersions = "0.53.0" +ideaExt = "1.3" illuaminate = "0.1.0-83-g1131f68" -lwjgl = "3.3.3" +lwjgl = "3.3.6" minotaur = "2.8.7" -modDevGradle = "2.0.95" -nullAway = "0.12.7" -shadow = "8.3.1" -spotless = "7.0.2" -taskTree = "2.1.1" -teavm = "0.13.0-SQUID.1" +modDevGradle = "2.0.116" +nullAway = "0.12.11" +shadow = "9.2.2" +spotless = "8.0.0" +teavm = "0.13.0-SQUID.2" vanillaExtract = "0.2.1" -versionCatalogUpdate = "0.8.1" +versionCatalogUpdate = "1.0.1" [libraries] # Normal dependencies @@ -174,7 +173,6 @@ githubRelease = { id = "com.github.breadmoirai.github-release", version.ref = "g gradleVersions = { id = "com.github.ben-manes.versions", version.ref = "gradleVersions" } kotlin = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } shadow = { id = "com.gradleup.shadow", version.ref = "shadow" } -taskTree = { id = "com.dorongold.task-tree", version.ref = "taskTree" } versionCatalogUpdate = { id = "nl.littlerobots.version-catalog-update", version.ref = "versionCatalogUpdate" } [bundles] diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index cea7a793a..bad7c2462 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/package-lock.json b/package-lock.json index bb8d6eb6c..496e265ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,9 +31,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.5.tgz", - "integrity": "sha512-9o3TMmpmftaCMepOdA5k/yDw8SfInyzWWTjYTFCX3kPSDJMROQTb8jg+h9Cnwnmm1vOzvxN7gIfB5V2ewpjtGA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.11.tgz", + "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", "cpu": [ "ppc64" ], @@ -48,9 +48,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.5.tgz", - "integrity": "sha512-AdJKSPeEHgi7/ZhuIPtcQKr5RQdo6OO2IL87JkianiMYMPbCtot9fxPbrMiBADOWWm3T2si9stAiVsGbTQFkbA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.11.tgz", + "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", "cpu": [ "arm" ], @@ -65,9 +65,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.5.tgz", - "integrity": "sha512-VGzGhj4lJO+TVGV1v8ntCZWJktV7SGCs3Pn1GRWI1SBFtRALoomm8k5E9Pmwg3HOAal2VDc2F9+PM/rEY6oIDg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.11.tgz", + "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", "cpu": [ "arm64" ], @@ -82,9 +82,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.5.tgz", - "integrity": "sha512-D2GyJT1kjvO//drbRT3Hib9XPwQeWd9vZoBJn+bu/lVsOZ13cqNdDeqIF/xQ5/VmWvMduP6AmXvylO/PIc2isw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.11.tgz", + "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", "cpu": [ "x64" ], @@ -99,9 +99,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.5.tgz", - "integrity": "sha512-GtaBgammVvdF7aPIgH2jxMDdivezgFu6iKpmT+48+F8Hhg5J/sfnDieg0aeG/jfSvkYQU2/pceFPDKlqZzwnfQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.11.tgz", + "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", "cpu": [ "arm64" ], @@ -116,9 +116,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.5.tgz", - "integrity": "sha512-1iT4FVL0dJ76/q1wd7XDsXrSW+oLoquptvh4CLR4kITDtqi2e/xwXwdCVH8hVHU43wgJdsq7Gxuzcs6Iq/7bxQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.11.tgz", + "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", "cpu": [ "x64" ], @@ -133,9 +133,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.5.tgz", - "integrity": "sha512-nk4tGP3JThz4La38Uy/gzyXtpkPW8zSAmoUhK9xKKXdBCzKODMc2adkB2+8om9BDYugz+uGV7sLmpTYzvmz6Sw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.11.tgz", + "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", "cpu": [ "arm64" ], @@ -150,9 +150,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.5.tgz", - "integrity": "sha512-PrikaNjiXdR2laW6OIjlbeuCPrPaAl0IwPIaRv+SMV8CiM8i2LqVUHFC1+8eORgWyY7yhQY+2U2fA55mBzReaw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.11.tgz", + "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", "cpu": [ "x64" ], @@ -167,9 +167,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.5.tgz", - "integrity": "sha512-cPzojwW2okgh7ZlRpcBEtsX7WBuqbLrNXqLU89GxWbNt6uIg78ET82qifUy3W6OVww6ZWobWub5oqZOVtwolfw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.11.tgz", + "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", "cpu": [ "arm" ], @@ -184,9 +184,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.5.tgz", - "integrity": "sha512-Z9kfb1v6ZlGbWj8EJk9T6czVEjjq2ntSYLY2cw6pAZl4oKtfgQuS4HOq41M/BcoLPzrUbNd+R4BXFyH//nHxVg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.11.tgz", + "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", "cpu": [ "arm64" ], @@ -201,9 +201,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.5.tgz", - "integrity": "sha512-sQ7l00M8bSv36GLV95BVAdhJ2QsIbCuCjh/uYrWiMQSUuV+LpXwIqhgJDcvMTj+VsQmqAHL2yYaasENvJ7CDKA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.11.tgz", + "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", "cpu": [ "ia32" ], @@ -218,9 +218,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.5.tgz", - "integrity": "sha512-0ur7ae16hDUC4OL5iEnDb0tZHDxYmuQyhKhsPBV8f99f6Z9KQM02g33f93rNH5A30agMS46u2HP6qTdEt6Q1kg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.11.tgz", + "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", "cpu": [ "loong64" ], @@ -235,9 +235,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.5.tgz", - "integrity": "sha512-kB/66P1OsHO5zLz0i6X0RxlQ+3cu0mkxS3TKFvkb5lin6uwZ/ttOkP3Z8lfR9mJOBk14ZwZ9182SIIWFGNmqmg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.11.tgz", + "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", "cpu": [ "mips64el" ], @@ -252,9 +252,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.5.tgz", - "integrity": "sha512-UZCmJ7r9X2fe2D6jBmkLBMQetXPXIsZjQJCjgwpVDz+YMcS6oFR27alkgGv3Oqkv07bxdvw7fyB71/olceJhkQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.11.tgz", + "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", "cpu": [ "ppc64" ], @@ -269,9 +269,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.5.tgz", - "integrity": "sha512-kTxwu4mLyeOlsVIFPfQo+fQJAV9mh24xL+y+Bm6ej067sYANjyEw1dNHmvoqxJUCMnkBdKpvOn0Ahql6+4VyeA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.11.tgz", + "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", "cpu": [ "riscv64" ], @@ -286,9 +286,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.5.tgz", - "integrity": "sha512-K2dSKTKfmdh78uJ3NcWFiqyRrimfdinS5ErLSn3vluHNeHVnBAFWC8a4X5N+7FgVE1EjXS1QDZbpqZBjfrqMTQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.11.tgz", + "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", "cpu": [ "s390x" ], @@ -303,9 +303,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.5.tgz", - "integrity": "sha512-uhj8N2obKTE6pSZ+aMUbqq+1nXxNjZIIjCjGLfsWvVpy7gKCOL6rsY1MhRh9zLtUtAI7vpgLMK6DxjO8Qm9lJw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.11.tgz", + "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", "cpu": [ "x64" ], @@ -320,9 +320,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.5.tgz", - "integrity": "sha512-pwHtMP9viAy1oHPvgxtOv+OkduK5ugofNTVDilIzBLpoWAM16r7b/mxBvfpuQDpRQFMfuVr5aLcn4yveGvBZvw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.11.tgz", + "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", "cpu": [ "arm64" ], @@ -337,9 +337,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.5.tgz", - "integrity": "sha512-WOb5fKrvVTRMfWFNCroYWWklbnXH0Q5rZppjq0vQIdlsQKuw6mdSihwSo4RV/YdQ5UCKKvBy7/0ZZYLBZKIbwQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.11.tgz", + "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", "cpu": [ "x64" ], @@ -354,9 +354,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.5.tgz", - "integrity": "sha512-7A208+uQKgTxHd0G0uqZO8UjK2R0DDb4fDmERtARjSHWxqMTye4Erz4zZafx7Di9Cv+lNHYuncAkiGFySoD+Mw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.11.tgz", + "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", "cpu": [ "arm64" ], @@ -371,9 +371,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.5.tgz", - "integrity": "sha512-G4hE405ErTWraiZ8UiSoesH8DaCsMm0Cay4fsFWOOUcz8b8rC6uCvnagr+gnioEjWn0wC+o1/TAHt+It+MpIMg==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.11.tgz", + "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", "cpu": [ "x64" ], @@ -387,10 +387,27 @@ "node": ">=18" } }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.11.tgz", + "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.5.tgz", - "integrity": "sha512-l+azKShMy7FxzY0Rj4RCt5VD/q8mG/e+mDivgspo+yL8zW7qEwctQ6YqKX34DTEleFAvCIUviCFX1SDZRSyMQA==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.11.tgz", + "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", "cpu": [ "x64" ], @@ -405,9 +422,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.5.tgz", - "integrity": "sha512-O2S7SNZzdcFG7eFKgvwUEZ2VG9D/sn/eIiz8XRZ1Q/DO5a3s76Xv0mdBzVM5j5R639lXQmPmSo0iRpHqUUrsxw==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.11.tgz", + "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", "cpu": [ "arm64" ], @@ -422,9 +439,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.5.tgz", - "integrity": "sha512-onOJ02pqs9h1iMJ1PQphR+VZv8qBMQ77Klcsqv9CNW2w6yLqoURLcgERAIurY6QE63bbLuqgP9ATqajFLK5AMQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.11.tgz", + "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", "cpu": [ "ia32" ], @@ -439,9 +456,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.5.tgz", - "integrity": "sha512-TXv6YnJ8ZMVdX+SXWVBo/0p8LTcrUYngpWjvm91TMjjBQii7Oz11Lw5lbDV5Y0TzuhSJHwiH4hEtC1I42mMS0g==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.11.tgz", + "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", "cpu": [ "x64" ], @@ -456,9 +473,9 @@ } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", - "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.3.tgz", + "integrity": "sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==", "dev": true, "license": "MIT", "dependencies": { @@ -481,9 +498,9 @@ } }, "node_modules/@rollup/plugin-typescript": { - "version": "12.1.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.1.4.tgz", - "integrity": "sha512-s5Hx+EtN60LMlDBvl5f04bEiFZmAepk27Q+mr85L/00zPDn1jtzlTV6FWn81MaIwqfWzKxmOJrBWHU6vtQyedQ==", + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-12.3.0.tgz", + "integrity": "sha512-7DP0/p7y3t67+NabT9f8oTBFE6gGkto4SA6Np2oudYmZE/m1dt8RB0SjL1msMxFpLo631qjRCcBlAbq1ml/Big==", "dev": true, "license": "MIT", "dependencies": { @@ -531,9 +548,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", - "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.3.0.tgz", + "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", "dev": true, "license": "MIT", "dependencies": { @@ -554,9 +571,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.44.1.tgz", - "integrity": "sha512-JAcBr1+fgqx20m7Fwe1DxPUl/hPkee6jA6Pl7n1v2EFiktAHenTaXl5aIFjUIEsfn9w3HE4gK1lEgNGMzBDs1w==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.52.5.tgz", + "integrity": "sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==", "cpu": [ "arm" ], @@ -568,9 +585,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.44.1.tgz", - "integrity": "sha512-RurZetXqTu4p+G0ChbnkwBuAtwAbIwJkycw1n6GvlGlBuS4u5qlr5opix8cBAYFJgaY05TWtM+LaoFggUmbZEQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.52.5.tgz", + "integrity": "sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==", "cpu": [ "arm64" ], @@ -582,9 +599,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.44.1.tgz", - "integrity": "sha512-fM/xPesi7g2M7chk37LOnmnSTHLG/v2ggWqKj3CCA1rMA4mm5KVBT1fNoswbo1JhPuNNZrVwpTvlCVggv8A2zg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.52.5.tgz", + "integrity": "sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==", "cpu": [ "arm64" ], @@ -596,9 +613,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.44.1.tgz", - "integrity": "sha512-gDnWk57urJrkrHQ2WVx9TSVTH7lSlU7E3AFqiko+bgjlh78aJ88/3nycMax52VIVjIm3ObXnDL2H00e/xzoipw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.52.5.tgz", + "integrity": "sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==", "cpu": [ "x64" ], @@ -610,9 +627,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.44.1.tgz", - "integrity": "sha512-wnFQmJ/zPThM5zEGcnDcCJeYJgtSLjh1d//WuHzhf6zT3Md1BvvhJnWoy+HECKu2bMxaIcfWiu3bJgx6z4g2XA==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.52.5.tgz", + "integrity": "sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==", "cpu": [ "arm64" ], @@ -624,9 +641,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.44.1.tgz", - "integrity": "sha512-uBmIxoJ4493YATvU2c0upGz87f99e3wop7TJgOA/bXMFd2SvKCI7xkxY/5k50bv7J6dw1SXT4MQBQSLn8Bb/Uw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.52.5.tgz", + "integrity": "sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==", "cpu": [ "x64" ], @@ -638,9 +655,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.44.1.tgz", - "integrity": "sha512-n0edDmSHlXFhrlmTK7XBuwKlG5MbS7yleS1cQ9nn4kIeW+dJH+ExqNgQ0RrFRew8Y+0V/x6C5IjsHrJmiHtkxQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.52.5.tgz", + "integrity": "sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==", "cpu": [ "arm" ], @@ -652,9 +669,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.44.1.tgz", - "integrity": "sha512-8WVUPy3FtAsKSpyk21kV52HCxB+me6YkbkFHATzC2Yd3yuqHwy2lbFL4alJOLXKljoRw08Zk8/xEj89cLQ/4Nw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.52.5.tgz", + "integrity": "sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==", "cpu": [ "arm" ], @@ -666,9 +683,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.44.1.tgz", - "integrity": "sha512-yuktAOaeOgorWDeFJggjuCkMGeITfqvPgkIXhDqsfKX8J3jGyxdDZgBV/2kj/2DyPaLiX6bPdjJDTu9RB8lUPQ==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.52.5.tgz", + "integrity": "sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==", "cpu": [ "arm64" ], @@ -680,9 +697,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.44.1.tgz", - "integrity": "sha512-W+GBM4ifET1Plw8pdVaecwUgxmiH23CfAUj32u8knq0JPFyK4weRy6H7ooxYFD19YxBulL0Ktsflg5XS7+7u9g==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.52.5.tgz", + "integrity": "sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==", "cpu": [ "arm64" ], @@ -693,10 +710,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.44.1.tgz", - "integrity": "sha512-1zqnUEMWp9WrGVuVak6jWTl4fEtrVKfZY7CvcBmUUpxAJ7WcSowPSAWIKa/0o5mBL/Ij50SIf9tuirGx63Ovew==", + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.52.5.tgz", + "integrity": "sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==", "cpu": [ "loong64" ], @@ -707,10 +724,10 @@ "linux" ] }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.44.1.tgz", - "integrity": "sha512-Rl3JKaRu0LHIx7ExBAAnf0JcOQetQffaw34T8vLlg9b1IhzcBgaIdnvEbbsZq9uZp3uAH+JkHd20Nwn0h9zPjA==", + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.52.5.tgz", + "integrity": "sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==", "cpu": [ "ppc64" ], @@ -722,9 +739,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.44.1.tgz", - "integrity": "sha512-j5akelU3snyL6K3N/iX7otLBIl347fGwmd95U5gS/7z6T4ftK288jKq3A5lcFKcx7wwzb5rgNvAg3ZbV4BqUSw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.52.5.tgz", + "integrity": "sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==", "cpu": [ "riscv64" ], @@ -736,9 +753,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.44.1.tgz", - "integrity": "sha512-ppn5llVGgrZw7yxbIm8TTvtj1EoPgYUAbfw0uDjIOzzoqlZlZrLJ/KuiE7uf5EpTpCTrNt1EdtzF0naMm0wGYg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.52.5.tgz", + "integrity": "sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==", "cpu": [ "riscv64" ], @@ -750,9 +767,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.44.1.tgz", - "integrity": "sha512-Hu6hEdix0oxtUma99jSP7xbvjkUM/ycke/AQQ4EC5g7jNRLLIwjcNwaUy95ZKBJJwg1ZowsclNnjYqzN4zwkAw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.52.5.tgz", + "integrity": "sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==", "cpu": [ "s390x" ], @@ -764,9 +781,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.44.1.tgz", - "integrity": "sha512-EtnsrmZGomz9WxK1bR5079zee3+7a+AdFlghyd6VbAjgRJDbTANJ9dcPIPAi76uG05micpEL+gPGmAKYTschQw==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.52.5.tgz", + "integrity": "sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==", "cpu": [ "x64" ], @@ -778,9 +795,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.44.1.tgz", - "integrity": "sha512-iAS4p+J1az6Usn0f8xhgL4PaU878KEtutP4hqw52I4IO6AGoyOkHCxcc4bqufv1tQLdDWFx8lR9YlwxKuv3/3g==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.52.5.tgz", + "integrity": "sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==", "cpu": [ "x64" ], @@ -791,10 +808,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.52.5.tgz", + "integrity": "sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.44.1.tgz", - "integrity": "sha512-NtSJVKcXwcqozOl+FwI41OH3OApDyLk3kqTJgx8+gp6On9ZEt5mYhIsKNPGuaZr3p9T6NWPKGU/03Vw4CNU9qg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.52.5.tgz", + "integrity": "sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==", "cpu": [ "arm64" ], @@ -806,9 +837,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.44.1.tgz", - "integrity": "sha512-JYA3qvCOLXSsnTR3oiyGws1Dm0YTuxAAeaYGVlGpUsHqloPcFjPg+X0Fj2qODGLNwQOAcCiQmHub/V007kiH5A==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.52.5.tgz", + "integrity": "sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==", "cpu": [ "ia32" ], @@ -819,10 +850,24 @@ "win32" ] }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.52.5.tgz", + "integrity": "sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.44.1.tgz", - "integrity": "sha512-J8o22LuF0kTe7m+8PvW9wk3/bRq5+mRo5Dqo6+vXb7otCm3TPhYOJqOaQtGU9YMWQSL3krMnoOxMr0+9E6F3Ug==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.52.5.tgz", + "integrity": "sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==", "cpu": [ "x64" ], @@ -844,15 +889,15 @@ } }, "node_modules/@swc/core": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.12.9.tgz", - "integrity": "sha512-O+LfT2JlVMsIMWG9x+rdxg8GzpzeGtCZQfXV7cKc1PjIKUkLFf1QJ7okuseA4f/9vncu37dQ2ZcRrPKy0Ndd5g==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.14.0.tgz", + "integrity": "sha512-oExhY90bes5pDTVrei0xlMVosTxwd/NMafIpqsC4dMbRYZ5KB981l/CX8tMnGsagTplj/RcG9BeRYmV6/J5m3w==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", "dependencies": { "@swc/counter": "^0.1.3", - "@swc/types": "^0.1.23" + "@swc/types": "^0.1.25" }, "engines": { "node": ">=10" @@ -862,16 +907,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.12.9", - "@swc/core-darwin-x64": "1.12.9", - "@swc/core-linux-arm-gnueabihf": "1.12.9", - "@swc/core-linux-arm64-gnu": "1.12.9", - "@swc/core-linux-arm64-musl": "1.12.9", - "@swc/core-linux-x64-gnu": "1.12.9", - "@swc/core-linux-x64-musl": "1.12.9", - "@swc/core-win32-arm64-msvc": "1.12.9", - "@swc/core-win32-ia32-msvc": "1.12.9", - "@swc/core-win32-x64-msvc": "1.12.9" + "@swc/core-darwin-arm64": "1.14.0", + "@swc/core-darwin-x64": "1.14.0", + "@swc/core-linux-arm-gnueabihf": "1.14.0", + "@swc/core-linux-arm64-gnu": "1.14.0", + "@swc/core-linux-arm64-musl": "1.14.0", + "@swc/core-linux-x64-gnu": "1.14.0", + "@swc/core-linux-x64-musl": "1.14.0", + "@swc/core-win32-arm64-msvc": "1.14.0", + "@swc/core-win32-ia32-msvc": "1.14.0", + "@swc/core-win32-x64-msvc": "1.14.0" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -883,9 +928,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.12.9.tgz", - "integrity": "sha512-GACFEp4nD6V+TZNR2JwbMZRHB+Yyvp14FrcmB6UCUYmhuNWjkxi+CLnEvdbuiKyQYv0zA+TRpCHZ+whEs6gwfA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.14.0.tgz", + "integrity": "sha512-uHPC8rlCt04nvYNczWzKVdgnRhxCa3ndKTBBbBpResOZsRmiwRAvByIGh599j+Oo6Z5eyTPrgY+XfJzVmXnN7Q==", "cpu": [ "arm64" ], @@ -900,9 +945,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.12.9.tgz", - "integrity": "sha512-hv2kls7Ilkm2EpeJz+I9MCil7pGS3z55ZAgZfxklEuYsxpICycxeH+RNRv4EraggN44ms+FWCjtZFu0LGg2V3g==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.14.0.tgz", + "integrity": "sha512-2SHrlpl68vtePRknv9shvM9YKKg7B9T13tcTg9aFCwR318QTYo+FzsKGmQSv9ox/Ua0Q2/5y2BNjieffJoo4nA==", "cpu": [ "x64" ], @@ -917,9 +962,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.12.9.tgz", - "integrity": "sha512-od9tDPiG+wMU9wKtd6y3nYJdNqgDOyLdgRRcrj1/hrbHoUPOM8wZQZdwQYGarw63iLXGgsw7t5HAF9Yc51ilFA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.14.0.tgz", + "integrity": "sha512-SMH8zn01dxt809svetnxpeg/jWdpi6dqHKO3Eb11u4OzU2PK7I5uKS6gf2hx5LlTbcJMFKULZiVwjlQLe8eqtg==", "cpu": [ "arm" ], @@ -934,9 +979,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.12.9.tgz", - "integrity": "sha512-6qx1ka9LHcLzxIgn2Mros+CZLkHK2TawlXzi/h7DJeNnzi8F1Hw0Yzjp8WimxNCg6s2n+o3jnmin1oXB7gg8rw==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.14.0.tgz", + "integrity": "sha512-q2JRu2D8LVqGeHkmpVCljVNltG0tB4o4eYg+dElFwCS8l2Mnt9qurMCxIeo9mgoqz0ax+k7jWtIRHktnVCbjvQ==", "cpu": [ "arm64" ], @@ -951,9 +996,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.12.9.tgz", - "integrity": "sha512-yghFZWKPVVGbUdqiD7ft23G0JX6YFGDJPz9YbLLAwGuKZ9th3/jlWoQDAw1Naci31LQhVC+oIji6ozihSuwB2A==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.14.0.tgz", + "integrity": "sha512-uofpVoPCEUjYIv454ZEZ3sLgMD17nIwlz2z7bsn7rl301Kt/01umFA7MscUovFfAK2IRGck6XB+uulMu6aFhKQ==", "cpu": [ "arm64" ], @@ -968,9 +1013,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.12.9.tgz", - "integrity": "sha512-SFUxyhWLZRNL8QmgGNqdi2Q43PNyFVkRZ2zIif30SOGFSxnxcf2JNeSeBgKIGVgaLSuk6xFVVCtJ3KIeaStgRg==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.14.0.tgz", + "integrity": "sha512-quTTx1Olm05fBfv66DEBuOsOgqdypnZ/1Bh3yGXWY7ANLFeeRpCDZpljD9BSjdsNdPOlwJmEUZXMHtGm3v1TZQ==", "cpu": [ "x64" ], @@ -985,9 +1030,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.12.9.tgz", - "integrity": "sha512-9FB0wM+6idCGTI20YsBNBg9xSWtkDBymnpaTCsZM3qDc0l4uOpJMqbfWhQvp17x7r/ulZfb2QY8RDvQmCL6AcQ==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.14.0.tgz", + "integrity": "sha512-caaNAu+aIqT8seLtCf08i8C3/UC5ttQujUjejhMcuS1/LoCKtNiUs4VekJd2UGt+pyuuSrQ6dKl8CbCfWvWeXw==", "cpu": [ "x64" ], @@ -1002,9 +1047,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.12.9.tgz", - "integrity": "sha512-zHOusMVbOH9ik5RtRrMiGzLpKwxrPXgXkBm3SbUCa65HAdjV33NZ0/R9Rv1uPESALtEl2tzMYLUxYA5ECFDFhA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.14.0.tgz", + "integrity": "sha512-EeW3jFlT3YNckJ6V/JnTfGcX7UHGyh6/AiCPopZ1HNaGiXVCKHPpVQZicmtyr/UpqxCXLrTgjHOvyMke7YN26A==", "cpu": [ "arm64" ], @@ -1019,9 +1064,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.12.9.tgz", - "integrity": "sha512-aWZf0PqE0ot7tCuhAjRkDFf41AzzSQO0x2xRfTbnhpROp57BRJ/N5eee1VULO/UA2PIJRG7GKQky5bSGBYlFug==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.14.0.tgz", + "integrity": "sha512-dPai3KUIcihV5hfoO4QNQF5HAaw8+2bT7dvi8E5zLtecW2SfL3mUZipzampXq5FHll0RSCLzlrXnSx+dBRZIIQ==", "cpu": [ "ia32" ], @@ -1036,9 +1081,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.12.9", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.12.9.tgz", - "integrity": "sha512-C25fYftXOras3P3anSUeXXIpxmEkdAcsIL9yrr0j1xepTZ/yKwpnQ6g3coj8UXdeJy4GTVlR6+Ow/QiBgZQNOg==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.14.0.tgz", + "integrity": "sha512-nm+JajGrTqUA6sEHdghDlHMNfH1WKSiuvljhdmBACW4ta4LC3gKurX2qZuiBARvPkephW9V/i5S8QPY1PzFEqg==", "cpu": [ "x64" ], @@ -1060,9 +1105,9 @@ "license": "Apache-2.0" }, "node_modules/@swc/types": { - "version": "0.1.23", - "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.23.tgz", - "integrity": "sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==", + "version": "0.1.25", + "resolved": "https://registry.npmjs.org/@swc/types/-/types-0.1.25.tgz", + "integrity": "sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1124,13 +1169,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "24.0.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.8.tgz", - "integrity": "sha512-WytNrFSgWO/esSH9NbpWUfTMGQwCGIKfCmNlmFDNiI5gGhgMmEA+V1AEvKLeBNvvtBnailJtkrEa2OIISwrVAA==", + "version": "24.9.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.9.2.tgz", + "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~7.8.0" + "undici-types": "~7.16.0" } }, "node_modules/@types/resolve": { @@ -1232,9 +1277,9 @@ } }, "node_modules/debug": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", - "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { @@ -1284,9 +1329,9 @@ } }, "node_modules/detect-libc": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.4.tgz", - "integrity": "sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1321,9 +1366,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", - "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "version": "0.25.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.11.tgz", + "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -1334,31 +1379,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.5", - "@esbuild/android-arm": "0.25.5", - "@esbuild/android-arm64": "0.25.5", - "@esbuild/android-x64": "0.25.5", - "@esbuild/darwin-arm64": "0.25.5", - "@esbuild/darwin-x64": "0.25.5", - "@esbuild/freebsd-arm64": "0.25.5", - "@esbuild/freebsd-x64": "0.25.5", - "@esbuild/linux-arm": "0.25.5", - "@esbuild/linux-arm64": "0.25.5", - "@esbuild/linux-ia32": "0.25.5", - "@esbuild/linux-loong64": "0.25.5", - "@esbuild/linux-mips64el": "0.25.5", - "@esbuild/linux-ppc64": "0.25.5", - "@esbuild/linux-riscv64": "0.25.5", - "@esbuild/linux-s390x": "0.25.5", - "@esbuild/linux-x64": "0.25.5", - "@esbuild/netbsd-arm64": "0.25.5", - "@esbuild/netbsd-x64": "0.25.5", - "@esbuild/openbsd-arm64": "0.25.5", - "@esbuild/openbsd-x64": "0.25.5", - "@esbuild/sunos-x64": "0.25.5", - "@esbuild/win32-arm64": "0.25.5", - "@esbuild/win32-ia32": "0.25.5", - "@esbuild/win32-x64": "0.25.5" + "@esbuild/aix-ppc64": "0.25.11", + "@esbuild/android-arm": "0.25.11", + "@esbuild/android-arm64": "0.25.11", + "@esbuild/android-x64": "0.25.11", + "@esbuild/darwin-arm64": "0.25.11", + "@esbuild/darwin-x64": "0.25.11", + "@esbuild/freebsd-arm64": "0.25.11", + "@esbuild/freebsd-x64": "0.25.11", + "@esbuild/linux-arm": "0.25.11", + "@esbuild/linux-arm64": "0.25.11", + "@esbuild/linux-ia32": "0.25.11", + "@esbuild/linux-loong64": "0.25.11", + "@esbuild/linux-mips64el": "0.25.11", + "@esbuild/linux-ppc64": "0.25.11", + "@esbuild/linux-riscv64": "0.25.11", + "@esbuild/linux-s390x": "0.25.11", + "@esbuild/linux-x64": "0.25.11", + "@esbuild/netbsd-arm64": "0.25.11", + "@esbuild/netbsd-x64": "0.25.11", + "@esbuild/openbsd-arm64": "0.25.11", + "@esbuild/openbsd-x64": "0.25.11", + "@esbuild/openharmony-arm64": "0.25.11", + "@esbuild/sunos-x64": "0.25.11", + "@esbuild/win32-arm64": "0.25.11", + "@esbuild/win32-ia32": "0.25.11", + "@esbuild/win32-x64": "0.25.11" } }, "node_modules/estree-util-is-identifier-name": { @@ -1412,9 +1458,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.13.0.tgz", + "integrity": "sha512-1VKTZJCwBrvbd+Wn3AOgQP/2Av+TfTCOlE4AcRJE72W1ksZXbAx8PPBR9RzgTeSPzlPMHrbANMH3LbltH73wxQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1725,9 +1771,9 @@ } }, "node_modules/lightningcss": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", - "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.2.tgz", + "integrity": "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ==", "dev": true, "license": "MPL-2.0", "dependencies": { @@ -1741,22 +1787,44 @@ "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "lightningcss-darwin-arm64": "1.30.1", - "lightningcss-darwin-x64": "1.30.1", - "lightningcss-freebsd-x64": "1.30.1", - "lightningcss-linux-arm-gnueabihf": "1.30.1", - "lightningcss-linux-arm64-gnu": "1.30.1", - "lightningcss-linux-arm64-musl": "1.30.1", - "lightningcss-linux-x64-gnu": "1.30.1", - "lightningcss-linux-x64-musl": "1.30.1", - "lightningcss-win32-arm64-msvc": "1.30.1", - "lightningcss-win32-x64-msvc": "1.30.1" + "lightningcss-android-arm64": "1.30.2", + "lightningcss-darwin-arm64": "1.30.2", + "lightningcss-darwin-x64": "1.30.2", + "lightningcss-freebsd-x64": "1.30.2", + "lightningcss-linux-arm-gnueabihf": "1.30.2", + "lightningcss-linux-arm64-gnu": "1.30.2", + "lightningcss-linux-arm64-musl": "1.30.2", + "lightningcss-linux-x64-gnu": "1.30.2", + "lightningcss-linux-x64-musl": "1.30.2", + "lightningcss-win32-arm64-msvc": "1.30.2", + "lightningcss-win32-x64-msvc": "1.30.2" + } + }, + "node_modules/lightningcss-android-arm64": { + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz", + "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, "node_modules/lightningcss-darwin-arm64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", - "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.2.tgz", + "integrity": "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA==", "cpu": [ "arm64" ], @@ -1775,9 +1843,9 @@ } }, "node_modules/lightningcss-darwin-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", - "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz", + "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==", "cpu": [ "x64" ], @@ -1796,9 +1864,9 @@ } }, "node_modules/lightningcss-freebsd-x64": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", - "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz", + "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==", "cpu": [ "x64" ], @@ -1817,9 +1885,9 @@ } }, "node_modules/lightningcss-linux-arm-gnueabihf": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", - "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz", + "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==", "cpu": [ "arm" ], @@ -1838,9 +1906,9 @@ } }, "node_modules/lightningcss-linux-arm64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", - "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz", + "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==", "cpu": [ "arm64" ], @@ -1859,9 +1927,9 @@ } }, "node_modules/lightningcss-linux-arm64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", - "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz", + "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==", "cpu": [ "arm64" ], @@ -1880,9 +1948,9 @@ } }, "node_modules/lightningcss-linux-x64-gnu": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", - "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz", + "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==", "cpu": [ "x64" ], @@ -1901,9 +1969,9 @@ } }, "node_modules/lightningcss-linux-x64-musl": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", - "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz", + "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==", "cpu": [ "x64" ], @@ -1922,9 +1990,9 @@ } }, "node_modules/lightningcss-win32-arm64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", - "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz", + "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==", "cpu": [ "arm64" ], @@ -1943,9 +2011,9 @@ } }, "node_modules/lightningcss-win32-x64-msvc": { - "version": "1.30.1", - "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", - "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "version": "1.30.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz", + "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==", "cpu": [ "x64" ], @@ -2698,9 +2766,9 @@ "license": "MIT" }, "node_modules/picomatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", - "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { @@ -2711,23 +2779,24 @@ } }, "node_modules/preact": { - "version": "10.26.9", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.26.9.tgz", - "integrity": "sha512-SSjF9vcnF27mJK1XyFMNJzFd5u3pQiATFqoaDy03XuN00u4ziveVVEGt5RKJrDR8MHE/wJo9Nnad56RLzS2RMA==", + "version": "10.27.2", + "resolved": "https://registry.npmjs.org/preact/-/preact-10.27.2.tgz", + "integrity": "sha512-5SYSgFKSyhCbk6SrXyMpqjb5+MQBgfvEKE/OC+PujcY34sOpqtr+0AZQtPYx5IA6VxynQ7rUPCtKzyovpj9Bpg==", "license": "MIT", + "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/preact" } }, "node_modules/preact-render-to-string": { - "version": "6.5.13", - "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.5.13.tgz", - "integrity": "sha512-iGPd+hKPMFKsfpR2vL4kJ6ZPcFIoWZEcBf0Dpm3zOpdVvj77aY8RlLiQji5OMrngEyaxGogeakTb54uS2FvA6w==", + "version": "6.6.3", + "resolved": "https://registry.npmjs.org/preact-render-to-string/-/preact-render-to-string-6.6.3.tgz", + "integrity": "sha512-7oHG7jzjriqsFPkSPiPnzrQ0GcxFm6wOkYWNdStK5Ks9YlWSQQXKGBRAX4nKDdqX7HAQuRvI4pZNZMycK4WwDw==", "dev": true, "license": "MIT", "peerDependencies": { - "preact": ">=10" + "preact": ">=10 || >= 11.0.0-0" } }, "node_modules/property-information": { @@ -2825,13 +2894,13 @@ } }, "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "version": "1.22.11", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", + "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.16.0", + "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -2856,11 +2925,12 @@ } }, "node_modules/rollup": { - "version": "4.44.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.44.1.tgz", - "integrity": "sha512-x8H8aPvD+xbl0Do8oez5f5o8eMS3trfCghc4HhLAnCkj7Vl0d1JWGs0UF/D886zLW2rOj2QymV/JcSSsw+XDNg==", + "version": "4.52.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.52.5.tgz", + "integrity": "sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -2872,26 +2942,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.44.1", - "@rollup/rollup-android-arm64": "4.44.1", - "@rollup/rollup-darwin-arm64": "4.44.1", - "@rollup/rollup-darwin-x64": "4.44.1", - "@rollup/rollup-freebsd-arm64": "4.44.1", - "@rollup/rollup-freebsd-x64": "4.44.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.44.1", - "@rollup/rollup-linux-arm-musleabihf": "4.44.1", - "@rollup/rollup-linux-arm64-gnu": "4.44.1", - "@rollup/rollup-linux-arm64-musl": "4.44.1", - "@rollup/rollup-linux-loongarch64-gnu": "4.44.1", - "@rollup/rollup-linux-powerpc64le-gnu": "4.44.1", - "@rollup/rollup-linux-riscv64-gnu": "4.44.1", - "@rollup/rollup-linux-riscv64-musl": "4.44.1", - "@rollup/rollup-linux-s390x-gnu": "4.44.1", - "@rollup/rollup-linux-x64-gnu": "4.44.1", - "@rollup/rollup-linux-x64-musl": "4.44.1", - "@rollup/rollup-win32-arm64-msvc": "4.44.1", - "@rollup/rollup-win32-ia32-msvc": "4.44.1", - "@rollup/rollup-win32-x64-msvc": "4.44.1", + "@rollup/rollup-android-arm-eabi": "4.52.5", + "@rollup/rollup-android-arm64": "4.52.5", + "@rollup/rollup-darwin-arm64": "4.52.5", + "@rollup/rollup-darwin-x64": "4.52.5", + "@rollup/rollup-freebsd-arm64": "4.52.5", + "@rollup/rollup-freebsd-x64": "4.52.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.52.5", + "@rollup/rollup-linux-arm-musleabihf": "4.52.5", + "@rollup/rollup-linux-arm64-gnu": "4.52.5", + "@rollup/rollup-linux-arm64-musl": "4.52.5", + "@rollup/rollup-linux-loong64-gnu": "4.52.5", + "@rollup/rollup-linux-ppc64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-gnu": "4.52.5", + "@rollup/rollup-linux-riscv64-musl": "4.52.5", + "@rollup/rollup-linux-s390x-gnu": "4.52.5", + "@rollup/rollup-linux-x64-gnu": "4.52.5", + "@rollup/rollup-linux-x64-musl": "4.52.5", + "@rollup/rollup-openharmony-arm64": "4.52.5", + "@rollup/rollup-win32-arm64-msvc": "4.52.5", + "@rollup/rollup-win32-ia32-msvc": "4.52.5", + "@rollup/rollup-win32-x64-gnu": "4.52.5", + "@rollup/rollup-win32-x64-msvc": "4.52.5", "fsevents": "~2.3.2" } }, @@ -2938,19 +3010,19 @@ } }, "node_modules/style-to-js": { - "version": "1.1.17", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.17.tgz", - "integrity": "sha512-xQcBGDxJb6jjFCTzvQtfiPn6YvvP2O8U1MDIPNfJQlWMYfktPy+iGsHE7cssjs7y84d9fQaK4UF3RIJaAHSoYA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.18.tgz", + "integrity": "sha512-JFPn62D4kJaPTnhFUI244MThx+FEGbi+9dw1b9yBBQ+1CZpV7QAT8kUtJ7b7EUNdHajjF/0x8fT+16oLJoojLg==", "dev": true, "license": "MIT", "dependencies": { - "style-to-object": "1.0.9" + "style-to-object": "1.0.11" } }, "node_modules/style-to-object": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.9.tgz", - "integrity": "sha512-G4qppLgKu/k6FwRpHiGiKPaPTFcG3g4wNVX/Qsfu+RqQM30E7Tyu/TEgxcL9PNLF5pdRLwQdE3YKKf+KF2Dzlw==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.11.tgz", + "integrity": "sha512-5A560JmXr7wDyGLK12Nq/EYS38VkGlglVzkis1JEdbGWSnbQIEhZzTJhzURXN5/8WwwFCs/f/VVcmkTppbXLow==", "dev": true, "license": "MIT", "dependencies": { @@ -2996,12 +3068,13 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsx": { - "version": "4.20.3", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.3.tgz", - "integrity": "sha512-qjbnuR9Tr+FJOMBqJCW5ehvIo/buZq7vH7qD7JziU98h6l3qGy0a/yPFjwO+y0/T7GFpNgNAvEcPPVfyT8rrPQ==", + "version": "4.20.6", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", + "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", "dev": true, "license": "MIT", "dependencies": { @@ -3019,11 +3092,12 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3033,9 +3107,9 @@ } }, "node_modules/undici-types": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz", - "integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", "dev": true, "license": "MIT" }, @@ -3075,9 +3149,9 @@ } }, "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "dev": true, "license": "MIT", "dependencies": { @@ -3133,9 +3207,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -3178,9 +3252,9 @@ } }, "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "dev": true, "license": "MIT", "dependencies": { diff --git a/projects/common-api/build.gradle.kts b/projects/common-api/build.gradle.kts index c63e105f7..b5649f8c1 100644 --- a/projects/common-api/build.gradle.kts +++ b/projects/common-api/build.gradle.kts @@ -63,16 +63,25 @@ tasks.javadoc { """.trimIndent(), ) - taglets("cc.tweaked.javadoc.SnippetTaglet") - tagletPath(configurations.detachedConfiguration(dependencies.project(":lints")).toList()) - val snippetSources = listOf(":common", ":fabric", ":forge").flatMap { project(it).sourceSets["examples"].allSource.sourceDirectories } inputs.files(snippetSources) - jFlags("-Dcc.snippet-path=" + snippetSources.joinToString(File.pathSeparator) { it.absolutePath }) + addPathOption("-snippet-path").value = snippetSources } // Include the core-api in our javadoc export. This is wrong, but it means we can export a single javadoc dump. source(project(":core-api").sourceSets.main.map { it.allJava }) + + options { + this as StandardJavadocDocletOptions + addBooleanOption("-allow-script-in-comments", true) + bottom( + """ + + + + """.trimIndent(), + ) + } } diff --git a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java index 6e6ffaf26..7272e66e9 100644 --- a/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java +++ b/projects/common-api/src/main/java/dan200/computercraft/api/turtle/ITurtleUpgrade.java @@ -27,7 +27,7 @@ import java.util.function.BiFunction; *

Registering the upgrade serialiser

* First, let's create a new class that implements {@link ITurtleUpgrade}. It is recommended to subclass * {@link AbstractTurtleUpgrade}, as that provides a default implementation of most methods. - *

+ * * {@snippet class=com.example.examplemod.ExampleTurtleUpgrade region=body} *

* Now we must construct a new upgrade serialiser. In most cases, you can use one of the helper methods diff --git a/projects/common/build.gradle.kts b/projects/common/build.gradle.kts index 0c1a2c7ae..d895d12aa 100644 --- a/projects/common/build.gradle.kts +++ b/projects/common/build.gradle.kts @@ -81,7 +81,7 @@ val luaJavadoc by tasks.registering(Javadoc::class) { options.addStringOption("project-root", rootProject.file(".").absolutePath) options.noTimestamp(false) - javadocTool = javaToolchains.javadocToolFor { languageVersion = CCTweakedPlugin.JAVA_VERSION } + javadocTool = javaToolchains.javadocToolFor { languageVersion = CCTweakedPlugin.JDK_VERSION } } val lintLua by tasks.registering(IlluaminateExec::class) { diff --git a/projects/common/src/main/java/dan200/computercraft/impl/network/wired/InvariantChecker.java b/projects/common/src/main/java/dan200/computercraft/impl/network/wired/InvariantChecker.java index 16172d9cf..52aa921a6 100644 --- a/projects/common/src/main/java/dan200/computercraft/impl/network/wired/InvariantChecker.java +++ b/projects/common/src/main/java/dan200/computercraft/impl/network/wired/InvariantChecker.java @@ -4,7 +4,6 @@ package dan200.computercraft.impl.network.wired; -import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,7 +60,6 @@ final class InvariantChecker { return okay; } - @Contract("") private static @Nullable T makeNullable(T object) { return object; } diff --git a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java index da84a855a..8a05efbd3 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/ModRegistry.java @@ -123,7 +123,7 @@ import java.util.function.Predicate; /** * Registers ComputerCraft's registry entries and additional objects, such as {@link CauldronInteraction}s and - * {@link DetailProvider}s + * {@link DetailProvider}s. *

* The functions in this class should be called from a loader-specific class. */ diff --git a/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerStopClientMessage.java b/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerStopClientMessage.java index ac90d59c3..c0765f166 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerStopClientMessage.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/network/client/SpeakerStopClientMessage.java @@ -13,7 +13,7 @@ import net.minecraft.network.FriendlyByteBuf; import java.util.UUID; /** - * Stops a sound on the client + * Stops a sound on the client. *

* Called when a speaker is broken. * diff --git a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemPeripheral.java b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemPeripheral.java index b47f4cbcc..49618fde2 100644 --- a/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemPeripheral.java +++ b/projects/common/src/main/java/dan200/computercraft/shared/peripheral/modem/wired/WiredModemPeripheral.java @@ -305,7 +305,7 @@ public abstract class WiredModemPeripheral extends ModemPeripheral implements Wi return wrappers == null ? null : wrappers.get(remoteName); } - private static class RemotePeripheralWrapper implements IComputerAccess, GuardedLuaContext.Guard { + private static final class RemotePeripheralWrapper implements IComputerAccess, GuardedLuaContext.Guard { private final WiredModemElement element; private final IPeripheral peripheral; private final IComputerAccess computer; @@ -331,13 +331,13 @@ public abstract class WiredModemPeripheral extends ModemPeripheral implements Wi methodMap = methods; } - public void attach() { + private void attach() { attached = true; peripheral.attach(this); computer.queueEvent("peripheral", getAttachmentName()); } - public void detach() { + private void detach() { peripheral.detach(this); computer.queueEvent("peripheral_detach", getAttachmentName()); attached = false; @@ -352,19 +352,19 @@ public abstract class WiredModemPeripheral extends ModemPeripheral implements Wi } } - public String getType() { + private String getType() { return type; } - public Set getAdditionalTypes() { + private Set getAdditionalTypes() { return additionalTypes; } - public Collection getMethodNames() { + private Collection getMethodNames() { return methodMap.keySet(); } - public MethodResult callMethod(ILuaContext context, String methodName, IArguments arguments) throws LuaException { + private MethodResult callMethod(ILuaContext context, String methodName, IArguments arguments) throws LuaException { var method = methodMap.get(methodName); if (method == null) throw new LuaException("No such method " + methodName); diff --git a/projects/common/src/test/java/dan200/computercraft/impl/network/wired/NetworkBenchmark.java b/projects/common/src/test/java/dan200/computercraft/impl/network/wired/NetworkBenchmark.java index ad3e02040..a7d1ab59e 100644 --- a/projects/common/src/test/java/dan200/computercraft/impl/network/wired/NetworkBenchmark.java +++ b/projects/common/src/test/java/dan200/computercraft/impl/network/wired/NetworkBenchmark.java @@ -142,7 +142,7 @@ public class NetworkBenchmark { return networks; } - private static class Grid { + private static final class Grid { private final int size; private final T[] box; @@ -152,7 +152,7 @@ public class NetworkBenchmark { this.box = (T[]) new Object[size * size * size]; } - public T get(BlockPos pos) { + private T get(BlockPos pos) { int x = pos.getX(), y = pos.getY(), z = pos.getZ(); return x >= 0 && x < size && y >= 0 && y < size && z >= 0 && z < size @@ -160,7 +160,7 @@ public class NetworkBenchmark { : null; } - public void forEach(BiConsumer transform) { + private void forEach(BiConsumer transform) { for (var x = 0; x < size; x++) { for (var y = 0; y < size; y++) { for (var z = 0; z < size; z++) { @@ -170,7 +170,7 @@ public class NetworkBenchmark { } } - public void map(BiFunction transform) { + private void map(BiFunction transform) { for (var x = 0; x < size; x++) { for (var y = 0; y < size; y++) { for (var z = 0; z < size; z++) { diff --git a/projects/core/build.gradle.kts b/projects/core/build.gradle.kts index bfea7628b..5c29a5a78 100644 --- a/projects/core/build.gradle.kts +++ b/projects/core/build.gradle.kts @@ -2,6 +2,7 @@ // // SPDX-License-Identifier: MPL-2.0 +import cc.tweaked.gradle.CCTweakedPlugin import cc.tweaked.gradle.getAbsolutePath plugins { @@ -39,6 +40,8 @@ dependencies { testRuntimeOnly(libs.slf4j.simple) } +kotlin.compilerOptions.jvmTarget = CCTweakedPlugin.KOTLIN_TARGET + tasks.processResources { inputs.property("gitHash", cct.gitHash) diff --git a/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java b/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java index dd065b00f..48ac044da 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java +++ b/projects/core/src/main/java/dan200/computercraft/core/apis/PeripheralAPI.java @@ -27,7 +27,7 @@ import java.util.*; * @hidden */ public class PeripheralAPI implements ILuaAPI, IAPIEnvironment.IPeripheralChangeListener { - private class PeripheralWrapper extends ComputerAccess implements GuardedLuaContext.Guard { + private final class PeripheralWrapper extends ComputerAccess implements GuardedLuaContext.Guard { private final String side; private final IPeripheral peripheral; @@ -49,32 +49,32 @@ public class PeripheralAPI implements ILuaAPI, IAPIEnvironment.IPeripheralChange methodMap = peripheralMethods.getSelfMethods(peripheral); } - public IPeripheral getPeripheral() { + private IPeripheral getPeripheral() { return peripheral; } - public String getType() { + private String getType() { return type; } - public Set getAdditionalTypes() { + private Set getAdditionalTypes() { return additionalTypes; } - public Collection getMethods() { + private Collection getMethods() { return methodMap.keySet(); } - public synchronized boolean isAttached() { + private synchronized boolean isAttached() { return attached; } - public synchronized void attach() { + private synchronized void attach() { attached = true; peripheral.attach(this); } - public void detach() { + private void detach() { // Call detach peripheral.detach(this); @@ -86,7 +86,7 @@ public class PeripheralAPI implements ILuaAPI, IAPIEnvironment.IPeripheralChange attached = false; } - public MethodResult call(ILuaContext context, String methodName, IArguments arguments) throws LuaException { + private MethodResult call(ILuaContext context, String methodName, IArguments arguments) throws LuaException { PeripheralMethod method; synchronized (this) { method = methodMap.get(methodName); diff --git a/projects/core/src/main/java/dan200/computercraft/core/apis/http/CheckUrl.java b/projects/core/src/main/java/dan200/computercraft/core/apis/http/CheckUrl.java index addd9eaa7..fbae91e08 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/apis/http/CheckUrl.java +++ b/projects/core/src/main/java/dan200/computercraft/core/apis/http/CheckUrl.java @@ -11,7 +11,7 @@ import java.net.URI; import java.util.concurrent.Future; /** - * Checks a URL using {@link NetworkUtils#getAddress(String, int, boolean)}} + * Checks a URL using {@link NetworkUtils#getAddress(String, int, boolean)}. *

* This requires a DNS lookup, and so needs to occur off-thread. */ diff --git a/projects/core/src/main/java/dan200/computercraft/core/apis/http/Resource.java b/projects/core/src/main/java/dan200/computercraft/core/apis/http/Resource.java index e344a9fc8..e09dac693 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/apis/http/Resource.java +++ b/projects/core/src/main/java/dan200/computercraft/core/apis/http/Resource.java @@ -61,7 +61,7 @@ public abstract class Resource> implements Closeable { } /** - * Clean up any pending resources + * Clean up any pending resources. *

* Note, this may be called multiple times, and so should be thread-safe and * avoid any major side effects. diff --git a/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java b/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java index 6e6acebff..5a94800fd 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java +++ b/projects/core/src/main/java/dan200/computercraft/core/asm/Generator.java @@ -47,7 +47,7 @@ final class Generator { private static final MethodHandle ARG_GET_OBJECT, ARG_GET_ENUM, ARG_OPT_ENUM, ARG_GET_STRING_COERCED, ARG_GET_BYTES_COERCED; private record ArgMethods(MethodHandle get, MethodHandle opt) { - public static ArgMethods of(Class type, String name) throws ReflectiveOperationException { + private static ArgMethods of(Class type, String name) throws ReflectiveOperationException { return new ArgMethods( LOOKUP.findVirtual(IArguments.class, "get" + name, MethodType.methodType(type, int.class)), LOOKUP.findVirtual(IArguments.class, "opt" + name, MethodType.methodType(Optional.class, int.class)) diff --git a/projects/core/src/main/java/dan200/computercraft/core/computer/computerthread/ComputerThread.java b/projects/core/src/main/java/dan200/computercraft/core/computer/computerthread/ComputerThread.java index cf8410731..bc2a735c2 100644 --- a/projects/core/src/main/java/dan200/computercraft/core/computer/computerthread/ComputerThread.java +++ b/projects/core/src/main/java/dan200/computercraft/core/computer/computerthread/ComputerThread.java @@ -740,7 +740,7 @@ public final class ComputerThread implements ComputerScheduler { } private final class ExecutorImpl implements Executor { - public static final AtomicReferenceFieldUpdater STATE = AtomicReferenceFieldUpdater.newUpdater( + private static final AtomicReferenceFieldUpdater STATE = AtomicReferenceFieldUpdater.newUpdater( ExecutorImpl.class, ExecutorState.class, "$state" ); diff --git a/projects/core/src/testFixtures/java/dan200/computercraft/test/core/ReplaceUnderscoresDisplayNameGenerator.java b/projects/core/src/testFixtures/java/dan200/computercraft/test/core/ReplaceUnderscoresDisplayNameGenerator.java index 17b24331c..2b1efe734 100644 --- a/projects/core/src/testFixtures/java/dan200/computercraft/test/core/ReplaceUnderscoresDisplayNameGenerator.java +++ b/projects/core/src/testFixtures/java/dan200/computercraft/test/core/ReplaceUnderscoresDisplayNameGenerator.java @@ -8,6 +8,7 @@ import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import java.lang.reflect.Method; +import java.util.List; /** * A {@link DisplayNameGenerator} which replaces underscores with spaces. This is equivalent to @@ -17,7 +18,7 @@ import java.lang.reflect.Method; */ public class ReplaceUnderscoresDisplayNameGenerator extends DisplayNameGenerator.ReplaceUnderscores { @Override - public String generateDisplayNameForMethod(Class testClass, Method testMethod) { + public String generateDisplayNameForMethod(List> enclosingInstanceTypes, Class testClass, Method testMethod) { return testMethod.getName().replace('_', ' '); } } diff --git a/projects/fabric/build.gradle.kts b/projects/fabric/build.gradle.kts index 5a2e41f42..5bf97d928 100644 --- a/projects/fabric/build.gradle.kts +++ b/projects/fabric/build.gradle.kts @@ -67,7 +67,6 @@ configurations { val localImplementation by registering { isCanBeResolved = false isCanBeConsumed = false - isVisible = false } compileClasspath { extendsFrom(localImplementation.get()) } runtimeClasspath { extendsFrom(localImplementation.get()) } @@ -118,7 +117,6 @@ dependencies { loom { accessWidenerPath = project(":common").file("src/main/resources/computercraft.accesswidener") - mixin.defaultRefmapName = "computercraft.refmap.json" mods { register("computercraft") { diff --git a/projects/fabric/src/datagen/java/dan200/computercraft/data/FabricDataProviders.java b/projects/fabric/src/datagen/java/dan200/computercraft/data/FabricDataProviders.java index 881b9eda3..8833e6987 100644 --- a/projects/fabric/src/datagen/java/dan200/computercraft/data/FabricDataProviders.java +++ b/projects/fabric/src/datagen/java/dan200/computercraft/data/FabricDataProviders.java @@ -35,11 +35,11 @@ public class FabricDataProviders implements DataGeneratorEntrypoint { } private record PlatformGeneratorsImpl(FabricDataGenerator.Pack generator) implements DataProviders.GeneratorSink { - public T addWithFabricOutput(FabricDataGenerator.Pack.Factory factory) { + private T addWithFabricOutput(FabricDataGenerator.Pack.Factory factory) { return generator.addProvider((FabricDataOutput p) -> new PrettyDataProvider<>(factory.create(p))).provider(); } - public T addWithRegistries(FabricDataGenerator.Pack.RegistryDependentFactory factory) { + private T addWithRegistries(FabricDataGenerator.Pack.RegistryDependentFactory factory) { return generator.addProvider((r, p) -> new PrettyDataProvider<>(factory.create(r, p))).provider(); } diff --git a/projects/forge/build.gradle.kts b/projects/forge/build.gradle.kts index 97cc0725d..1142fc52a 100644 --- a/projects/forge/build.gradle.kts +++ b/projects/forge/build.gradle.kts @@ -142,7 +142,6 @@ configurations { val localImplementation by registering { isCanBeResolved = false isCanBeConsumed = false - isVisible = false } compileClasspath { extendsFrom(localImplementation.get()) } runtimeClasspath { extendsFrom(localImplementation.get()) } diff --git a/projects/lints/build.gradle.kts b/projects/lints/build.gradle.kts index 61a9bfe80..82b495841 100644 --- a/projects/lints/build.gradle.kts +++ b/projects/lints/build.gradle.kts @@ -2,6 +2,8 @@ // // SPDX-License-Identifier: MPL-2.0 +import cc.tweaked.gradle.CCTweakedPlugin + plugins { kotlin("jvm") id("cc-tweaked.java-convention") @@ -28,6 +30,8 @@ dependencies { testRuntimeOnly(libs.bundles.testRuntime) } +kotlin.compilerOptions.jvmTarget = CCTweakedPlugin.KOTLIN_TARGET + tasks.test { jvmArgs( "--add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED", diff --git a/projects/lints/src/main/kotlin/cc/tweaked/javadoc/SnippetTaglet.kt b/projects/lints/src/main/kotlin/cc/tweaked/javadoc/SnippetTaglet.kt deleted file mode 100644 index ac6a2c362..000000000 --- a/projects/lints/src/main/kotlin/cc/tweaked/javadoc/SnippetTaglet.kt +++ /dev/null @@ -1,138 +0,0 @@ -// SPDX-FileCopyrightText: 2025 The CC: Tweaked Developers -// -// SPDX-License-Identifier: MPL-2.0 - -package cc.tweaked.javadoc - -import com.sun.source.doctree.DocTree -import com.sun.source.doctree.TextTree -import com.sun.source.doctree.UnknownInlineTagTree -import com.sun.source.util.DocTreePath -import jdk.javadoc.doclet.* -import java.io.File -import java.nio.file.Files -import java.nio.file.Path -import java.util.* -import java.util.regex.Pattern -import javax.lang.model.element.Element -import javax.tools.Diagnostic -import kotlin.io.path.extension - -/** - * A primitive reimplementation of Java 21's `@snippet` tag. This only supports including external snippets via `file` - * and `class`, and not the inline body. - */ -class SnippetTaglet : Taglet { - override fun getName(): String = "snippet" - override fun isInlineTag(): Boolean = true - override fun getAllowedLocations(): Set = locations - - private lateinit var env: DocletEnvironment - private lateinit var reporter: Reporter - private lateinit var snippetPath: List - - override fun init(env: DocletEnvironment, doclet: Doclet) { - super.init(env, doclet) - this.env = env - reporter = (doclet as StandardDoclet).reporter - - this.snippetPath = - System.getProperty("cc.snippet-path")?.split(File.pathSeparatorChar)?.map { File(it) } ?: emptyList() - } - - /** Parse our attributes into a key/value map */ - private fun parseAttributes(contents: String): Map { - val attributes = mutableMapOf() - val attributeMatcher = attribute.matcher(contents) - var lastIndex = 0 - while (attributeMatcher.find()) { - val key = attributeMatcher.group(1) - val value = attributeMatcher.group(2) - if (attributes.contains(key)) throw SnippetException("Duplicate attribute '$key'") - attributes[key] = value - lastIndex = attributeMatcher.end() - } - - while (lastIndex < contents.length) { - val c = contents[lastIndex] - if (c != ' ') throw SnippetException("Unexpected '$c'") - } - - return attributes - } - - /** Locate our snippet file within the [snippetPath] */ - private fun findSnippetFile(fileName: String): Path = snippetPath.firstNotNullOfOrNull { - val found = it.resolve(fileName) - if (found.exists()) found.toPath() else null - } ?: throw SnippetException("Cannot find file '$fileName'") - - private fun processInlineTag(tag: UnknownInlineTagTree): String { - val tagContent = tag.content - if (tagContent.size != 1 || tagContent[0].kind != DocTree.Kind.TEXT) throw SnippetException("Expected a single text node") - val attributes = parseAttributes((tagContent[0] as TextTree).body) - - val hasFile = attributes.contains("file") - val hasClass = attributes.contains("class") - if (hasFile && hasClass) throw SnippetException("Cannot specify file and class") - - val file = when { - hasFile -> findSnippetFile(attributes["file"]!!) - hasClass -> findSnippetFile(attributes["class"]!!.replace('.', '/') + ".java") - else -> throw SnippetException("Snippet has no contents (must have file or class)") - } - - // And generate our snippet - var snippetContents = Files.readString(file) - - val region = attributes["region"] - if (region != null) { - val matcher = - Pattern.compile("// @start region=" + Pattern.quote(region) + "\n(.*)\\s*// @end region=" + Pattern.quote(region), Pattern.DOTALL) - .matcher(snippetContents) - if (!matcher.find()) throw SnippetException("Cannot find region '$region'") - snippetContents = matcher.group(1).trimIndent() - } - - return makeSnippet(file.extension, snippetContents) - } - - override fun toString(tags: List, element: Element): String { - if (tags.size != 1) throw IllegalArgumentException("Tags should be length 1") - val tag = tags[0] as UnknownInlineTagTree - - try { - return processInlineTag(tag) - } catch (e: SnippetException) { - reporter.print( - Diagnostic.Kind.ERROR, - DocTreePath.getPath(env.docTrees.getPath(element), env.docTrees.getDocCommentTree(element), tag), - "Invalid @snippet. ${e.message}", - ) - return "@snippet" - } - } - - companion object { - private val locations = EnumSet.allOf(Taglet.Location::class.java) - private val attribute = Pattern.compile(" *([a-z]+) *= *([^ ]+)") - - /** Escape our snippet HTML and wrap it into a code block */ - private fun makeSnippet(extension: String, contents: String): String { - val out = StringBuilder(contents.length + 60) - out.append("

")
-            for (element in contents) {
-                when (element) {
-                    '<' -> out.append("<")
-                    '>' -> out.append(">")
-                    '&' -> out.append("&")
-                    else -> out.append(element)
-                }
-            }
-            out.append("
") - return out.toString() - } - } -} - -private class SnippetException(message: String) : Exception(message) diff --git a/projects/standalone/src/main/java/cc/tweaked/standalone/Main.java b/projects/standalone/src/main/java/cc/tweaked/standalone/Main.java index ad96dce4d..a49640730 100644 --- a/projects/standalone/src/main/java/cc/tweaked/standalone/Main.java +++ b/projects/standalone/src/main/java/cc/tweaked/standalone/Main.java @@ -19,6 +19,7 @@ import dan200.computercraft.core.terminal.Terminal; import dan200.computercraft.core.terminal.TextBuffer; import dan200.computercraft.core.util.Colour; import org.apache.commons.cli.*; +import org.apache.commons.cli.help.HelpFormatter; import org.jetbrains.annotations.Contract; import org.jspecify.annotations.Nullable; import org.lwjgl.glfw.GLFW; @@ -31,9 +32,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.IOException; -import java.io.PrintWriter; +import java.io.UncheckedIOException; import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; import java.nio.file.InvalidPathException; import java.nio.file.Path; import java.util.ArrayList; @@ -70,10 +70,10 @@ public class Main { } private record TermSize(int width, int height) { - public static final TermSize DEFAULT = new TermSize(51, 19); - public static final Pattern PATTERN = Pattern.compile("^(\\d+)x(\\d+)$"); + private static final TermSize DEFAULT = new TermSize(51, 19); + private static final Pattern PATTERN = Pattern.compile("^(\\d+)x(\\d+)$"); - public static TermSize parse(String value) throws ParseException { + private static TermSize parse(String value) throws ParseException { var matcher = TermSize.PATTERN.matcher(value); if (!matcher.matches()) throw new ParseException("'" + value + "' is not a valid terminal size."); @@ -82,9 +82,9 @@ public class Main { } private record MountPaths(Path src, String dest) { - public static final Pattern PATTERN = Pattern.compile("^([^:]+):([^:]+)$"); + private static final Pattern PATTERN = Pattern.compile("^([^:]+):([^:]+)$"); - public static MountPaths parse(String value) throws ParseException { + private static MountPaths parse(String value) throws ParseException { var matcher = MountPaths.PATTERN.matcher(value); if (!matcher.matches()) throw new ParseException("'" + value + "' is not a mount spec."); @@ -115,26 +115,26 @@ public class Main { Option resourceOpt, computerOpt, termSizeOpt, allowLocalDomainsOpt, helpOpt, mountOpt, mountRoOpt; options.addOption(resourceOpt = Option.builder("r").argName("PATH").longOpt("resources").hasArg() .desc("The path to the resources directory") - .build()); + .get()); options.addOption(computerOpt = Option.builder("c").argName("PATH").longOpt("computer").hasArg() .desc("The root directory of the computer. Defaults to a temporary directory.") - .build()); + .get()); options.addOption(termSizeOpt = Option.builder("t").argName("WIDTHxHEIGHT").longOpt("term-size").hasArg() .desc("The size of the terminal, defaults to 51x19.") - .build()); + .get()); options.addOption(allowLocalDomainsOpt = Option.builder("L").longOpt("allow-local-domains") .desc("Allow accessing local domains with the HTTP API.") - .build()); + .get()); options.addOption(mountOpt = Option.builder().longOpt("mount").hasArg().argName("SRC:DEST") .desc("Mount a folder SRC at directory DEST on the computer.") - .build()); + .get()); options.addOption(mountRoOpt = Option.builder().longOpt("mount-ro").hasArg().argName("SRC:DEST") .desc("Mount a read-only folder SRC at directory DEST on the computer.") - .build()); + .get()); options.addOption(helpOpt = Option.builder("h").longOpt("help") .desc("Print help message") - .build()); + .get()); Path resourcesDirectory; Path computerDirectory; @@ -144,7 +144,11 @@ public class Main { try { var cli = new DefaultParser().parse(options, args); if (cli.hasOption(helpOpt)) { - new HelpFormatter().printHelp("standalone.jar", options, true); + try { + HelpFormatter.builder().get().printHelp("standalone.jar", "", options, "", true); + } catch (IOException e) { + throw new UncheckedIOException(e); + } return; } if (!cli.hasOption(resourceOpt)) throw new ParseException("--resources directory is required"); @@ -157,10 +161,7 @@ public class Main { readOnlyMounts = getParsedOptionValues(cli, mountRoOpt, MountPaths::parse); } catch (ParseException e) { System.err.println(e.getLocalizedMessage()); - - var writer = new PrintWriter(System.err, false, StandardCharsets.UTF_8); - new HelpFormatter().printUsage(writer, HelpFormatter.DEFAULT_WIDTH, "standalone.jar", options); - writer.flush(); + System.err.println(HelpFormatter.builder().get().toSyntaxOptions(options)); System.exit(1); return; diff --git a/projects/web/src/builder/java/cc/tweaked/web/builder/TransformingClassLoader.java b/projects/web/src/builder/java/cc/tweaked/web/builder/TransformingClassLoader.java index d3796f5ea..29ca599d4 100644 --- a/projects/web/src/builder/java/cc/tweaked/web/builder/TransformingClassLoader.java +++ b/projects/web/src/builder/java/cc/tweaked/web/builder/TransformingClassLoader.java @@ -8,6 +8,7 @@ import org.jspecify.annotations.Nullable; import org.objectweb.asm.ClassReader; import org.objectweb.asm.ClassVisitor; import org.objectweb.asm.ClassWriter; +import org.objectweb.asm.Opcodes; import org.objectweb.asm.commons.ClassRemapper; import org.objectweb.asm.commons.Remapper; @@ -38,7 +39,7 @@ public class TransformingClassLoader extends ClassLoader { private final Map remappedResources = new HashMap<>(); private final List> transformers = new ArrayList<>(); - private final Remapper remapper = new Remapper() { + private final Remapper remapper = new Remapper(Opcodes.ASM9) { @Override public String map(String internalName) { return remappedClasses.getOrDefault(internalName, internalName); diff --git a/projects/web/src/main/java/cc/tweaked/web/EmulatedComputer.java b/projects/web/src/main/java/cc/tweaked/web/EmulatedComputer.java index 66e760443..846833bc1 100644 --- a/projects/web/src/main/java/cc/tweaked/web/EmulatedComputer.java +++ b/projects/web/src/main/java/cc/tweaked/web/EmulatedComputer.java @@ -187,9 +187,9 @@ class EmulatedComputer implements ComputerEnvironment, ComputerHandle { public void addFile(String path, JSObject contents) { byte[] bytes; if (JavascriptConv.isArrayBuffer(contents)) { - bytes = bytesOfBuffer(contents.cast()); + bytes = bytesOfBuffer((ArrayBuffer) contents); } else { - JSString string = contents.cast(); + var string = (JSString) contents; bytes = string.stringValue().getBytes(StandardCharsets.UTF_8); } diff --git a/projects/web/src/main/java/dan200/computercraft/core/apis/http/request/THttpRequest.java b/projects/web/src/main/java/dan200/computercraft/core/apis/http/request/THttpRequest.java index 08a2081da..38d5ef9ed 100644 --- a/projects/web/src/main/java/dan200/computercraft/core/apis/http/request/THttpRequest.java +++ b/projects/web/src/main/java/dan200/computercraft/core/apis/http/request/THttpRequest.java @@ -117,7 +117,7 @@ public class THttpRequest extends Resource { return; } - ArrayBuffer buffer = request.getResponse().cast(); + var buffer = (ArrayBuffer) request.getResponse(); SeekableByteChannel contents = new ArrayByteChannel(JavascriptConv.asByteArray(buffer)); var reader = new ReadHandle(contents, binary); diff --git a/settings.gradle.kts b/settings.gradle.kts index 6e91eff3f..11f400399 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -20,6 +20,7 @@ pluginManagement { content { includeGroup("fabric-loom") includeGroup("net.fabricmc") + includeGroup("net.fabricmc.unpick") } } From 0ec46fe38ea47bba0a8b89728b4cec06a10896ef Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Fri, 31 Oct 2025 22:27:38 +0000 Subject: [PATCH 10/11] Update CI to use Java 21 --- .github/workflows/main-ci.yml | 4 ++-- .github/workflows/make-doc.yml | 2 +- CONTRIBUTING.md | 4 ++-- .../src/main/kotlin/cc-tweaked.java-convention.gradle.kts | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/main-ci.yml b/.github/workflows/main-ci.yml index 6d3675c45..8a10d43ea 100644 --- a/.github/workflows/main-ci.yml +++ b/.github/workflows/main-ci.yml @@ -14,7 +14,7 @@ jobs: - name: 📥 Set up Java uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - name: 📥 Setup Gradle @@ -87,7 +87,7 @@ jobs: - name: 📥 Set up Java uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - name: 📥 Setup Gradle diff --git a/.github/workflows/make-doc.yml b/.github/workflows/make-doc.yml index 424cbceb7..c49919827 100644 --- a/.github/workflows/make-doc.yml +++ b/.github/workflows/make-doc.yml @@ -17,7 +17,7 @@ jobs: - name: 📥 Set up Java uses: actions/setup-java@v4 with: - java-version: 17 + java-version: 21 distribution: 'temurin' - name: 📥 Setup Gradle diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6b12a1b01..45e1a0f7e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -28,7 +28,7 @@ Translations are managed through [CrowdIn], an online interface for managing lan In order to develop CC: Tweaked, you'll need to download the source code and then run it. - Make sure you've got the following software installed: - - Java Development Kit 17 (JDK). This can be downloaded from [Adoptium]. + - Java Development Kit 21 (JDK). This can be downloaded from [Adoptium]. - [Git](https://git-scm.com/). - [NodeJS 20 or later][node]. @@ -101,7 +101,7 @@ about how you can build on that until you've covered everything! [new-issue]: https://github.com/cc-tweaked/CC-Tweaked/issues/new/choose "Create a new issue" [community]: README.md#community "Get in touch with the community." -[Adoptium]: https://adoptium.net/temurin/releases?version=17 "Download OpenJDK 17" +[Adoptium]: https://adoptium.net/temurin/releases?version=21 "Download OpenJDK 21" [illuaminate]: https://github.com/SquidDev/illuaminate/ "Illuaminate on GitHub" [docs]: https://tweaked.cc/ "CC: Tweaked documentation" [ldoc]: http://stevedonovan.github.io/ldoc/ "ldoc, a Lua documentation generator." diff --git a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts index 8265c8865..213aeabf2 100644 --- a/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts +++ b/buildSrc/src/main/kotlin/cc-tweaked.java-convention.gradle.kts @@ -161,7 +161,7 @@ tasks.javadoc { options { val stdOptions = this as StandardJavadocDocletOptions stdOptions.addBooleanOption("Xdoclint:all,-missing", true) - stdOptions.links("https://docs.oracle.com/en/java/javase/17/docs/api/") + stdOptions.links("https://docs.oracle.com/en/java/javase/21/docs/api/") } } From 18f3426f1d6d9382587db410268aecfede7fc53b Mon Sep 17 00:00:00 2001 From: Jonathan Coates Date: Sat, 1 Nov 2025 19:40:52 +0000 Subject: [PATCH 11/11] Bump CC:T to 1.116.2 --- gradle.properties | 2 +- gradle/libs.versions.toml | 2 +- .../data/computercraft/lua/rom/help/changelog.md | 9 +++++++++ .../data/computercraft/lua/rom/help/whatsnew.md | 12 +++++++----- 4 files changed, 18 insertions(+), 7 deletions(-) diff --git a/gradle.properties b/gradle.properties index 55acac281..9b897b71f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -10,7 +10,7 @@ kotlin.jvm.target.validation.mode=error # Mod properties isUnstable=false -modVersion=1.116.1 +modVersion=1.116.2 # Minecraft properties: We want to configure this here so we can read it in settings.gradle mcVersion=1.20.1 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d211d1244..d1c093168 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,7 @@ slf4j = "2.0.1" asm = "9.9" autoService = "1.1.1" checkerFramework = "3.51.1" -cobalt = { strictly = "0.9.6" } +cobalt = { strictly = "0.9.7" } commonsCli = "1.10.0" jetbrainsAnnotations = "26.0.2-1" jspecify = "1.0.0" diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md b/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md index 277d3d4e9..3286304ad 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/help/changelog.md @@ -1,3 +1,12 @@ +# New features in CC: Tweaked 1.116.2 + +Several bug fixes: +* Update Create compatibility to Create Fabric 6.0. +* Various documentation fixes (Zirunis). +* Fix crash with Inventorio. +* Various fixes to SNBT parsing. +* Fix Regex DDoS in string pattern matching. + # New features in CC: Tweaked 1.116.1 * Update translations. diff --git a/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md b/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md index 96522b80e..a7599344a 100644 --- a/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md +++ b/projects/core/src/main/resources/data/computercraft/lua/rom/help/whatsnew.md @@ -1,8 +1,10 @@ -New features in CC: Tweaked 1.116.1 +New features in CC: Tweaked 1.116.2 -* Update translations. - -One bug fix: -* Fix NPE when mcfunction files contain CC commands. +Several bug fixes: +* Update Create compatibility to Create Fabric 6.0. +* Various documentation fixes (Zirunis). +* Fix crash with Inventorio. +* Various fixes to SNBT parsing. +* Fix Regex DDoS in string pattern matching. Type "help changelog" to see the full version history.