From 1611b74b7232dda2102df4d1ee26fb39fb5c1f2c Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Wed, 17 Dec 2025 11:34:55 +0800 Subject: [PATCH 1/7] core on branch --- core | 2 +- .../models/CommaDelimitedArrayProperty.java | 15 ++++- .../models/NewlineDelimitedArrayProperty.java | 15 ++++- .../models/PipeDelimitedArrayProperty.java | 15 ++++- .../models/SpaceDelimitedArrayProperty.java | 15 ++++- .../ClientLocationClientTests.java | 62 ------------------- .../array/EncodeArraySerializationTests.java | 40 ++++++++++++ .../java/encode/array/EncodeArrayTests.java | 43 +++++++++++++ 8 files changed, 136 insertions(+), 71 deletions(-) delete mode 100644 typespec-tests/src/test/java/azure/clientgenerator/core/clientlocation/ClientLocationClientTests.java create mode 100644 typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java create mode 100644 typespec-tests/src/test/java/encode/array/EncodeArrayTests.java diff --git a/core b/core index d76254461e..805e28db28 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit d76254461e86e1690a02225649545b45b46924dd +Subproject commit 805e28db284c0936fceb5071d7b0128c07a402a3 diff --git a/typespec-tests/src/main/java/encode/array/models/CommaDelimitedArrayProperty.java b/typespec-tests/src/main/java/encode/array/models/CommaDelimitedArrayProperty.java index 1e3a6406b6..25747bc7fe 100644 --- a/typespec-tests/src/main/java/encode/array/models/CommaDelimitedArrayProperty.java +++ b/typespec-tests/src/main/java/encode/array/models/CommaDelimitedArrayProperty.java @@ -11,7 +11,10 @@ import com.azure.json.JsonToken; import com.azure.json.JsonWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; /** * The CommaDelimitedArrayProperty model. @@ -51,7 +54,10 @@ public List getValue() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeArrayField("value", this.value, (writer, element) -> writer.writeString(element)); + if (this.value != null) { + jsonWriter.writeStringField("value", + this.value.stream().map(element -> element == null ? "" : element).collect(Collectors.joining(","))); + } return jsonWriter.writeEndObject(); } @@ -73,7 +79,12 @@ public static CommaDelimitedArrayProperty fromJson(JsonReader jsonReader) throws reader.nextToken(); if ("value".equals(fieldName)) { - value = reader.readArray(reader1 -> reader1.getString()); + String valueEncodedAsString = reader.getString(); + value = valueEncodedAsString == null + ? null + : valueEncodedAsString.isEmpty() + ? new LinkedList<>() + : new LinkedList<>(Arrays.asList(valueEncodedAsString.split(",", -1))); } else { reader.skipChildren(); } diff --git a/typespec-tests/src/main/java/encode/array/models/NewlineDelimitedArrayProperty.java b/typespec-tests/src/main/java/encode/array/models/NewlineDelimitedArrayProperty.java index 605c2f10f0..03acae4ccd 100644 --- a/typespec-tests/src/main/java/encode/array/models/NewlineDelimitedArrayProperty.java +++ b/typespec-tests/src/main/java/encode/array/models/NewlineDelimitedArrayProperty.java @@ -11,7 +11,10 @@ import com.azure.json.JsonToken; import com.azure.json.JsonWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; /** * The NewlineDelimitedArrayProperty model. @@ -51,7 +54,10 @@ public List getValue() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeArrayField("value", this.value, (writer, element) -> writer.writeString(element)); + if (this.value != null) { + jsonWriter.writeStringField("value", + this.value.stream().map(element -> element == null ? "" : element).collect(Collectors.joining("\n"))); + } return jsonWriter.writeEndObject(); } @@ -73,7 +79,12 @@ public static NewlineDelimitedArrayProperty fromJson(JsonReader jsonReader) thro reader.nextToken(); if ("value".equals(fieldName)) { - value = reader.readArray(reader1 -> reader1.getString()); + String valueEncodedAsString = reader.getString(); + value = valueEncodedAsString == null + ? null + : valueEncodedAsString.isEmpty() + ? new LinkedList<>() + : new LinkedList<>(Arrays.asList(valueEncodedAsString.split("\n", -1))); } else { reader.skipChildren(); } diff --git a/typespec-tests/src/main/java/encode/array/models/PipeDelimitedArrayProperty.java b/typespec-tests/src/main/java/encode/array/models/PipeDelimitedArrayProperty.java index 6f9b85082c..37a143a701 100644 --- a/typespec-tests/src/main/java/encode/array/models/PipeDelimitedArrayProperty.java +++ b/typespec-tests/src/main/java/encode/array/models/PipeDelimitedArrayProperty.java @@ -11,7 +11,10 @@ import com.azure.json.JsonToken; import com.azure.json.JsonWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; /** * The PipeDelimitedArrayProperty model. @@ -51,7 +54,10 @@ public List getValue() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeArrayField("value", this.value, (writer, element) -> writer.writeString(element)); + if (this.value != null) { + jsonWriter.writeStringField("value", + this.value.stream().map(element -> element == null ? "" : element).collect(Collectors.joining("|"))); + } return jsonWriter.writeEndObject(); } @@ -73,7 +79,12 @@ public static PipeDelimitedArrayProperty fromJson(JsonReader jsonReader) throws reader.nextToken(); if ("value".equals(fieldName)) { - value = reader.readArray(reader1 -> reader1.getString()); + String valueEncodedAsString = reader.getString(); + value = valueEncodedAsString == null + ? null + : valueEncodedAsString.isEmpty() + ? new LinkedList<>() + : new LinkedList<>(Arrays.asList(valueEncodedAsString.split("\\|", -1))); } else { reader.skipChildren(); } diff --git a/typespec-tests/src/main/java/encode/array/models/SpaceDelimitedArrayProperty.java b/typespec-tests/src/main/java/encode/array/models/SpaceDelimitedArrayProperty.java index 8a0d3181c2..1c270faa5b 100644 --- a/typespec-tests/src/main/java/encode/array/models/SpaceDelimitedArrayProperty.java +++ b/typespec-tests/src/main/java/encode/array/models/SpaceDelimitedArrayProperty.java @@ -11,7 +11,10 @@ import com.azure.json.JsonToken; import com.azure.json.JsonWriter; import java.io.IOException; +import java.util.Arrays; +import java.util.LinkedList; import java.util.List; +import java.util.stream.Collectors; /** * The SpaceDelimitedArrayProperty model. @@ -51,7 +54,10 @@ public List getValue() { @Override public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStartObject(); - jsonWriter.writeArrayField("value", this.value, (writer, element) -> writer.writeString(element)); + if (this.value != null) { + jsonWriter.writeStringField("value", + this.value.stream().map(element -> element == null ? "" : element).collect(Collectors.joining(" "))); + } return jsonWriter.writeEndObject(); } @@ -73,7 +79,12 @@ public static SpaceDelimitedArrayProperty fromJson(JsonReader jsonReader) throws reader.nextToken(); if ("value".equals(fieldName)) { - value = reader.readArray(reader1 -> reader1.getString()); + String valueEncodedAsString = reader.getString(); + value = valueEncodedAsString == null + ? null + : valueEncodedAsString.isEmpty() + ? new LinkedList<>() + : new LinkedList<>(Arrays.asList(valueEncodedAsString.split(" ", -1))); } else { reader.skipChildren(); } diff --git a/typespec-tests/src/test/java/azure/clientgenerator/core/clientlocation/ClientLocationClientTests.java b/typespec-tests/src/test/java/azure/clientgenerator/core/clientlocation/ClientLocationClientTests.java deleted file mode 100644 index 0f7f299e59..0000000000 --- a/typespec-tests/src/test/java/azure/clientgenerator/core/clientlocation/ClientLocationClientTests.java +++ /dev/null @@ -1,62 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - -package azure.clientgenerator.core.clientlocation; - -import azure.clientgenerator.core.clientlocation.movemethodparametertoclient.models.Blob; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -public final class ClientLocationClientTests { - - private final ClientLocationClientBuilder builder = new ClientLocationClientBuilder().storageAccount("testaccount"); - - @Test - public void testMoveToExistingSubClient() { - MoveToExistingSubUserOperationsClient userClient = builder.buildMoveToExistingSubUserOperationsClient(); - userClient.getUser(); - - MoveToExistingSubAdminOperationsClient adminClient = builder.buildMoveToExistingSubAdminOperationsClient(); - // deleteUser moved to MoveToExistingSubAdminOperationsClient - adminClient.deleteUser(); - adminClient.getAdminInfo(); - } - - @Test - public void testMoveToNewSubClient() { - MoveToNewSubProductOperationsClient productClient = builder.buildMoveToNewSubProductOperationsClient(); - productClient.listProducts(); - - ArchiveOperationsClient archiveClient = builder.buildArchiveOperationsClient(); - // archiveProduct moved to ArchiveOperationsClient - archiveClient.archiveProduct(); - } - - @Test - public void testMoveToRootClient() { - MoveToRootResourceOperationsClient resourceClient = builder.buildMoveToRootResourceOperationsClient(); - resourceClient.getResource(); - - ClientLocationClient rootClient = builder.buildClient(); - // getHealthStatus moved to root client - rootClient.getHealthStatus(); - } - - @Test - public void testMoveMethodParameterToClient() { - MoveMethodParameterToBlobOperationsClient blobClient = builder.buildMoveMethodParameterToBlobOperationsClient(); - - // Test the scenario: GET /blob?storageAccount=testaccount&container=testcontainer&blob=testblob.txt - // Expected response: {"id": "blob-001", "name": "testblob.txt", "size": 1024, "path": - // "/testcontainer/testblob.txt"} - // "testaccount" moved to client - Blob blob = blobClient.getBlob("testcontainer", "testblob.txt"); - - // Verify the Blob model structure - Assertions.assertNotNull(blob); - Assertions.assertNotNull(blob.getId()); - Assertions.assertNotNull(blob.getName()); - Assertions.assertTrue(blob.getSize() > 0); - Assertions.assertNotNull(blob.getPath()); - } -} diff --git a/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java b/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java new file mode 100644 index 0000000000..1361b97a64 --- /dev/null +++ b/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package encode.array; + +import com.azure.core.util.BinaryData; +import encode.array.models.CommaDelimitedArrayProperty; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public final class EncodeArraySerializationTests { + + @Test + public void testNull() { + CommaDelimitedArrayProperty model = new CommaDelimitedArrayProperty(null); + Assertions.assertEquals("{}", BinaryData.fromObject(model).toString()); + + model = BinaryData.fromString("{}").toObject(CommaDelimitedArrayProperty.class); + Assertions.assertNull(model.getValue()); + } + + @Test + public void testEmptyStringOnWire() { + CommaDelimitedArrayProperty model = new CommaDelimitedArrayProperty(List.of()); + Assertions.assertEquals("{\"value\":\"\"}", BinaryData.fromObject(model).toString()); + + model = BinaryData.fromString("{\"value\":\"\"}").toObject(CommaDelimitedArrayProperty.class); + Assertions.assertEquals(0, model.getValue().size()); + } + + @Test + public void testEmptyElement() { + CommaDelimitedArrayProperty model = new CommaDelimitedArrayProperty(List.of("", "")); + Assertions.assertEquals("{\"value\":\",\"}", BinaryData.fromObject(model).toString()); + + model = BinaryData.fromString("{\"value\":\",\"}").toObject(CommaDelimitedArrayProperty.class); + Assertions.assertEquals(2, model.getValue().size()); + } +} diff --git a/typespec-tests/src/test/java/encode/array/EncodeArrayTests.java b/typespec-tests/src/test/java/encode/array/EncodeArrayTests.java new file mode 100644 index 0000000000..3e45e1c1f5 --- /dev/null +++ b/typespec-tests/src/test/java/encode/array/EncodeArrayTests.java @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package encode.array; + +import encode.array.models.CommaDelimitedArrayProperty; +import encode.array.models.NewlineDelimitedArrayProperty; +import encode.array.models.PipeDelimitedArrayProperty; +import encode.array.models.SpaceDelimitedArrayProperty; +import java.util.List; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public final class EncodeArrayTests { + + private static final List COLORS = List.of("blue", "red", "green"); + + private final ArrayClient client = new ArrayClientBuilder().buildClient(); + + @Test + public void commaDelimitedProperty() { + CommaDelimitedArrayProperty response = client.commaDelimited(new CommaDelimitedArrayProperty(COLORS)); + Assertions.assertEquals(COLORS, response.getValue()); + } + + @Test + public void spaceDelimitedProperty() { + SpaceDelimitedArrayProperty response = client.spaceDelimited(new SpaceDelimitedArrayProperty(COLORS)); + Assertions.assertEquals(COLORS, response.getValue()); + } + + @Test + public void pipeDelimitedProperty() { + PipeDelimitedArrayProperty response = client.pipeDelimited(new PipeDelimitedArrayProperty(COLORS)); + Assertions.assertEquals(COLORS, response.getValue()); + } + + @Test + public void newlineDelimitedProperty() { + NewlineDelimitedArrayProperty response = client.newlineDelimited(new NewlineDelimitedArrayProperty(COLORS)); + Assertions.assertEquals(COLORS, response.getValue()); + } +} From 60f9ca613b441f27228324517fe3c1cf9b3be6a5 Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Wed, 17 Dec 2025 11:45:06 +0800 Subject: [PATCH 2/7] version bump --- typespec-extension/changelog.md | 7 + typespec-extension/package-lock.json | 694 +++++++++++++-------------- typespec-extension/package.json | 28 +- typespec-tests/package.json | 4 +- 4 files changed, 370 insertions(+), 363 deletions(-) diff --git a/typespec-extension/changelog.md b/typespec-extension/changelog.md index e0c68365b6..888c81c075 100644 --- a/typespec-extension/changelog.md +++ b/typespec-extension/changelog.md @@ -1,5 +1,12 @@ # Release History +## 0.37.4 (2025-12-17) + +Compatible with compiler 1.7.1. + +- Updated TypeSpec dependencies (compiler 1.7.1) and refreshed dev dependencies. +- Added support for CSV-encoded array properties in the HTTP client emitter. + ## 0.37.3 (2025-12-12) Compatible with compiler 1.7.0. diff --git a/typespec-extension/package-lock.json b/typespec-extension/package-lock.json index 55e0d24f4b..8a309be0ce 100644 --- a/typespec-extension/package-lock.json +++ b/typespec-extension/package-lock.json @@ -1,12 +1,12 @@ { "name": "@azure-tools/typespec-java", - "version": "0.37.3", + "version": "0.37.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@azure-tools/typespec-java", - "version": "0.37.3", + "version": "0.37.4", "license": "MIT", "dependencies": { "@autorest/codemodel": "~4.20.1", @@ -23,10 +23,10 @@ "@microsoft/api-extractor": "^7.55.2", "@types/js-yaml": "~4.0.9", "@types/lodash": "~4.17.21", - "@types/node": "~25.0.1", - "@typescript-eslint/eslint-plugin": "~8.49.0", - "@typescript-eslint/parser": "~8.49.0", - "@typespec/compiler": "1.7.0", + "@types/node": "~25.0.3", + "@typescript-eslint/eslint-plugin": "~8.50.0", + "@typescript-eslint/parser": "~8.50.0", + "@typespec/compiler": "1.7.1", "@typespec/events": "0.77.0", "@typespec/http": "1.7.0", "@typespec/openapi": "1.7.0", @@ -36,18 +36,18 @@ "@typespec/tspd": "0.73.2", "@typespec/versioning": "0.77.0", "@typespec/xml": "0.77.0", - "@vitest/coverage-v8": "^4.0.15", - "@vitest/ui": "^4.0.15", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/ui": "^4.0.16", "c8": "~10.1.3", - "eslint": "~9.39.1", + "eslint": "~9.39.2", "eslint-plugin-deprecation": "~3.0.0", "eslint-plugin-import": "^2.32.0", "eslint-plugin-unicorn": "^62.0.0", "prettier": "~3.7.4", "rimraf": "~6.1.2", "typescript": "~5.9.3", - "typescript-eslint": "^8.49.0", - "vitest": "^4.0.15" + "typescript-eslint": "^8.50.0", + "vitest": "^4.0.16" }, "engines": { "node": ">=20.0.0" @@ -59,7 +59,7 @@ "@azure-tools/typespec-azure-rulesets": ">=0.63.0 <1.0.0", "@azure-tools/typespec-client-generator-core": ">=0.63.0 <1.0.0", "@azure-tools/typespec-liftr-base": ">=0.11.0 <1.0.0", - "@typespec/compiler": "^1.7.0", + "@typespec/compiler": "^1.7.1", "@typespec/http": "^1.7.0", "@typespec/openapi": "^1.7.0", "@typespec/rest": ">=0.77.0 <1.0.0", @@ -352,9 +352,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -369,9 +369,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -386,9 +386,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -403,9 +403,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -420,9 +420,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -437,9 +437,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -454,9 +454,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -471,9 +471,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -488,9 +488,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -505,9 +505,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -522,9 +522,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -539,9 +539,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -556,9 +556,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -573,9 +573,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -590,9 +590,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -607,9 +607,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -624,9 +624,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -641,9 +641,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -658,9 +658,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -675,9 +675,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -692,9 +692,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -709,9 +709,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -726,9 +726,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -743,9 +743,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -760,9 +760,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -777,9 +777,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -888,9 +888,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -900,7 +900,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -960,9 +960,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -1820,9 +1820,9 @@ "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", - "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.5.tgz", + "integrity": "sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==", "cpu": [ "arm" ], @@ -1834,9 +1834,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", - "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.5.tgz", + "integrity": "sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==", "cpu": [ "arm64" ], @@ -1848,9 +1848,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", - "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.5.tgz", + "integrity": "sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==", "cpu": [ "arm64" ], @@ -1862,9 +1862,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", - "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.5.tgz", + "integrity": "sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==", "cpu": [ "x64" ], @@ -1876,9 +1876,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", - "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.5.tgz", + "integrity": "sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==", "cpu": [ "arm64" ], @@ -1890,9 +1890,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", - "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.5.tgz", + "integrity": "sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==", "cpu": [ "x64" ], @@ -1904,9 +1904,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", - "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.5.tgz", + "integrity": "sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==", "cpu": [ "arm" ], @@ -1918,9 +1918,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", - "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.5.tgz", + "integrity": "sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==", "cpu": [ "arm" ], @@ -1932,9 +1932,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", - "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.5.tgz", + "integrity": "sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==", "cpu": [ "arm64" ], @@ -1946,9 +1946,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", - "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.5.tgz", + "integrity": "sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==", "cpu": [ "arm64" ], @@ -1960,9 +1960,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", - "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.5.tgz", + "integrity": "sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==", "cpu": [ "loong64" ], @@ -1974,9 +1974,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", - "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.5.tgz", + "integrity": "sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==", "cpu": [ "ppc64" ], @@ -1988,9 +1988,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", - "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.5.tgz", + "integrity": "sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==", "cpu": [ "riscv64" ], @@ -2002,9 +2002,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", - "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.5.tgz", + "integrity": "sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==", "cpu": [ "riscv64" ], @@ -2016,9 +2016,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", - "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.5.tgz", + "integrity": "sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==", "cpu": [ "s390x" ], @@ -2030,9 +2030,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", - "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.5.tgz", + "integrity": "sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==", "cpu": [ "x64" ], @@ -2044,9 +2044,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", - "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.5.tgz", + "integrity": "sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==", "cpu": [ "x64" ], @@ -2058,9 +2058,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", - "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.5.tgz", + "integrity": "sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==", "cpu": [ "arm64" ], @@ -2072,9 +2072,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", - "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.5.tgz", + "integrity": "sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==", "cpu": [ "arm64" ], @@ -2086,9 +2086,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", - "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.5.tgz", + "integrity": "sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==", "cpu": [ "ia32" ], @@ -2100,9 +2100,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", - "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.5.tgz", + "integrity": "sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==", "cpu": [ "x64" ], @@ -2114,9 +2114,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", - "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.5.tgz", + "integrity": "sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==", "cpu": [ "x64" ], @@ -2340,9 +2340,9 @@ } }, "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", - "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", "dev": true, "license": "MIT" }, @@ -2420,9 +2420,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.1.tgz", - "integrity": "sha512-czWPzKIAXucn9PtsttxmumiQ9N0ok9FrBwgRWrwmVLlp86BrMExzvXRLFYRJ+Ex3g6yqj+KuaxfX1JTgV2lpfg==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "dev": true, "license": "MIT", "dependencies": { @@ -2437,17 +2437,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.49.0.tgz", - "integrity": "sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz", + "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/type-utils": "8.49.0", - "@typescript-eslint/utils": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/type-utils": "8.50.0", + "@typescript-eslint/utils": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" @@ -2460,7 +2460,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.49.0", + "@typescript-eslint/parser": "^8.50.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -2489,16 +2489,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.49.0.tgz", - "integrity": "sha512-N9lBGA9o9aqb1hVMc9hzySbhKibHmB+N3IpoShyV6HyQYRGIhlrO5rQgttypi+yEeKsKI4idxC8Jw6gXKD4THA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz", + "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4" }, "engines": { @@ -2514,14 +2514,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.49.0.tgz", - "integrity": "sha512-/wJN0/DKkmRUMXjZUXYZpD1NEQzQAAn9QWfGwo+Ai8gnzqH7tvqS7oNVdTjKqOcPyVIdZdyCMoqN66Ia789e7g==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz", + "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.49.0", - "@typescript-eslint/types": "^8.49.0", + "@typescript-eslint/tsconfig-utils": "^8.50.0", + "@typescript-eslint/types": "^8.50.0", "debug": "^4.3.4" }, "engines": { @@ -2536,14 +2536,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.49.0.tgz", - "integrity": "sha512-npgS3zi+/30KSOkXNs0LQXtsg9ekZ8OISAOLGWA/ZOEn0ZH74Ginfl7foziV8DT+D98WfQ5Kopwqb/PZOaIJGg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2554,9 +2554,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.49.0.tgz", - "integrity": "sha512-8prixNi1/6nawsRYxet4YOhnbW+W9FK/bQPxsGB1D3ZrDzbJ5FXw5XmzxZv82X3B+ZccuSxo/X8q9nQ+mFecWA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz", + "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==", "dev": true, "license": "MIT", "engines": { @@ -2571,15 +2571,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.49.0.tgz", - "integrity": "sha512-KTExJfQ+svY8I10P4HdxKzWsvtVnsuCifU5MvXrRwoP2KOlNZ9ADNEWWsQTJgMxLzS5VLQKDjkCT/YzgsnqmZg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz", + "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/utils": "8.49.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/utils": "8.50.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -2609,9 +2609,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.49.0.tgz", - "integrity": "sha512-e9k/fneezorUo6WShlQpMxXh8/8wfyc+biu6tnAqA81oWrEic0k21RHzP9uqqpyBBeBKu4T+Bsjy9/b8u7obXQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -2623,16 +2623,16 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.49.0.tgz", - "integrity": "sha512-jrLdRuAbPfPIdYNppHJ/D0wN+wwNfJ32YTAm10eJVsFmrVpXQnDWBn8niCSMlWjvml8jsce5E/O+86IQtTbJWA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.49.0", - "@typescript-eslint/tsconfig-utils": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/visitor-keys": "8.49.0", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", "minimatch": "^9.0.4", "semver": "^7.6.0", @@ -2664,16 +2664,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.49.0.tgz", - "integrity": "sha512-N3W7rJw7Rw+z1tRsHZbK395TWSYvufBXumYtEGzypgMUthlg0/hmCImeA8hgO2d2G4pd7ftpxxul2J8OdtdaFA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.49.0", - "@typescript-eslint/types": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2688,13 +2688,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.49.0.tgz", - "integrity": "sha512-LlKaciDe3GmZFphXIc79THF/YYBugZ7FS1pO581E/edlVVNbZKDy93evqmrfQ9/Y4uN0vVhX4iuchq26mK/iiA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.49.0", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -2719,9 +2719,9 @@ } }, "node_modules/@typespec/compiler": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.7.0.tgz", - "integrity": "sha512-KE2t5I7u/33M/nsIxdng06FUPrqaGSbMsSEsv51eMwYnj3v1+Z3qTTX/dxHAXRXHcfadNlX/NtyAKju+pkMTFQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.7.1.tgz", + "integrity": "sha512-sb3MEsKjFlAx8ZG484exs5Ec+JwmYf2anJqLjMusrV3rRMUhv3fbEulk9MD+l4eOkBS46VMNGqRu0wTn8suVVA==", "dev": true, "license": "MIT", "dependencies": { @@ -3228,14 +3228,14 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.15.tgz", - "integrity": "sha512-FUJ+1RkpTFW7rQITdgTi93qOCWJobWhBirEPCeXh2SW2wsTlFxy51apDz5gzG+ZEYt/THvWeNmhdAoS9DTwpCw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-4.0.16.tgz", + "integrity": "sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==", "dev": true, "license": "MIT", "dependencies": { "@bcoe/v8-coverage": "^1.0.2", - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "ast-v8-to-istanbul": "^0.3.8", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", @@ -3250,8 +3250,8 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@vitest/browser": "4.0.15", - "vitest": "4.0.15" + "@vitest/browser": "4.0.16", + "vitest": "4.0.16" }, "peerDependenciesMeta": { "@vitest/browser": { @@ -3260,16 +3260,16 @@ } }, "node_modules/@vitest/expect": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.15.tgz", - "integrity": "sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.16.tgz", + "integrity": "sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==", "dev": true, "license": "MIT", "dependencies": { "@standard-schema/spec": "^1.0.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.15", - "@vitest/utils": "4.0.15", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "chai": "^6.2.1", "tinyrainbow": "^3.0.3" }, @@ -3278,13 +3278,13 @@ } }, "node_modules/@vitest/mocker": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.15.tgz", - "integrity": "sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.16.tgz", + "integrity": "sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "4.0.15", + "@vitest/spy": "4.0.16", "estree-walker": "^3.0.3", "magic-string": "^0.30.21" }, @@ -3305,9 +3305,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.15.tgz", - "integrity": "sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.16.tgz", + "integrity": "sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3318,13 +3318,13 @@ } }, "node_modules/@vitest/runner": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.15.tgz", - "integrity": "sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.16.tgz", + "integrity": "sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "pathe": "^2.0.3" }, "funding": { @@ -3332,13 +3332,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.15.tgz", - "integrity": "sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.16.tgz", + "integrity": "sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.15", + "@vitest/pretty-format": "4.0.16", "magic-string": "^0.30.21", "pathe": "^2.0.3" }, @@ -3347,9 +3347,9 @@ } }, "node_modules/@vitest/spy": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.15.tgz", - "integrity": "sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.16.tgz", + "integrity": "sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==", "dev": true, "license": "MIT", "funding": { @@ -3357,13 +3357,13 @@ } }, "node_modules/@vitest/ui": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.15.tgz", - "integrity": "sha512-sxSyJMaKp45zI0u+lHrPuZM1ZJQ8FaVD35k+UxVrha1yyvQ+TZuUYllUixwvQXlB7ixoDc7skf3lQPopZIvaQw==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-4.0.16.tgz", + "integrity": "sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "4.0.15", + "@vitest/utils": "4.0.16", "fflate": "^0.8.2", "flatted": "^3.3.3", "pathe": "^2.0.3", @@ -3375,17 +3375,17 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "4.0.15" + "vitest": "4.0.16" } }, "node_modules/@vitest/utils": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.15.tgz", - "integrity": "sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.16.tgz", + "integrity": "sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.15", + "@vitest/pretty-format": "4.0.16", "tinyrainbow": "^3.0.3" }, "funding": { @@ -4437,9 +4437,9 @@ } }, "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4450,32 +4450,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, "node_modules/escalade": { @@ -4499,9 +4499,9 @@ } }, "node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", "dependencies": { @@ -4511,7 +4511,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", + "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -7220,9 +7220,9 @@ } }, "node_modules/rollup": { - "version": "4.53.3", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", - "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", + "version": "4.53.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.5.tgz", + "integrity": "sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==", "dev": true, "license": "MIT", "dependencies": { @@ -7236,28 +7236,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.3", - "@rollup/rollup-android-arm64": "4.53.3", - "@rollup/rollup-darwin-arm64": "4.53.3", - "@rollup/rollup-darwin-x64": "4.53.3", - "@rollup/rollup-freebsd-arm64": "4.53.3", - "@rollup/rollup-freebsd-x64": "4.53.3", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", - "@rollup/rollup-linux-arm-musleabihf": "4.53.3", - "@rollup/rollup-linux-arm64-gnu": "4.53.3", - "@rollup/rollup-linux-arm64-musl": "4.53.3", - "@rollup/rollup-linux-loong64-gnu": "4.53.3", - "@rollup/rollup-linux-ppc64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-gnu": "4.53.3", - "@rollup/rollup-linux-riscv64-musl": "4.53.3", - "@rollup/rollup-linux-s390x-gnu": "4.53.3", - "@rollup/rollup-linux-x64-gnu": "4.53.3", - "@rollup/rollup-linux-x64-musl": "4.53.3", - "@rollup/rollup-openharmony-arm64": "4.53.3", - "@rollup/rollup-win32-arm64-msvc": "4.53.3", - "@rollup/rollup-win32-ia32-msvc": "4.53.3", - "@rollup/rollup-win32-x64-gnu": "4.53.3", - "@rollup/rollup-win32-x64-msvc": "4.53.3", + "@rollup/rollup-android-arm-eabi": "4.53.5", + "@rollup/rollup-android-arm64": "4.53.5", + "@rollup/rollup-darwin-arm64": "4.53.5", + "@rollup/rollup-darwin-x64": "4.53.5", + "@rollup/rollup-freebsd-arm64": "4.53.5", + "@rollup/rollup-freebsd-x64": "4.53.5", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.5", + "@rollup/rollup-linux-arm-musleabihf": "4.53.5", + "@rollup/rollup-linux-arm64-gnu": "4.53.5", + "@rollup/rollup-linux-arm64-musl": "4.53.5", + "@rollup/rollup-linux-loong64-gnu": "4.53.5", + "@rollup/rollup-linux-ppc64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-gnu": "4.53.5", + "@rollup/rollup-linux-riscv64-musl": "4.53.5", + "@rollup/rollup-linux-s390x-gnu": "4.53.5", + "@rollup/rollup-linux-x64-gnu": "4.53.5", + "@rollup/rollup-linux-x64-musl": "4.53.5", + "@rollup/rollup-openharmony-arm64": "4.53.5", + "@rollup/rollup-win32-arm64-msvc": "4.53.5", + "@rollup/rollup-win32-ia32-msvc": "4.53.5", + "@rollup/rollup-win32-x64-gnu": "4.53.5", + "@rollup/rollup-win32-x64-msvc": "4.53.5", "fsevents": "~2.3.2" } }, @@ -8099,16 +8099,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.49.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.49.0.tgz", - "integrity": "sha512-zRSVH1WXD0uXczCXw+nsdjGPUdx4dfrs5VQoHnUWmv1U3oNlAKv4FUNdLDhVUg+gYn+a5hUESqch//Rv5wVhrg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.0.tgz", + "integrity": "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.49.0", - "@typescript-eslint/parser": "8.49.0", - "@typescript-eslint/typescript-estree": "8.49.0", - "@typescript-eslint/utils": "8.49.0" + "@typescript-eslint/eslint-plugin": "8.50.0", + "@typescript-eslint/parser": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/utils": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -8233,13 +8233,13 @@ } }, "node_modules/vite": { - "version": "7.2.7", - "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.7.tgz", - "integrity": "sha512-ITcnkFeR3+fI8P1wMgItjGrR10170d8auB4EpMLPqmx6uxElH3a/hHGQabSHKdqd4FXWO1nFIp9rRn7JQ34ACQ==", + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.0.tgz", + "integrity": "sha512-dZwN5L1VlUBewiP6H9s2+B3e3Jg96D0vzN+Ry73sOefebhYr9f94wwkMNN/9ouoU8pV1BqA1d1zGk8928cx0rg==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.25.0", + "esbuild": "^0.27.0", "fdir": "^6.5.0", "picomatch": "^4.0.3", "postcss": "^8.5.6", @@ -8339,19 +8339,19 @@ } }, "node_modules/vitest": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.15.tgz", - "integrity": "sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==", + "version": "4.0.16", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.16.tgz", + "integrity": "sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "4.0.15", - "@vitest/mocker": "4.0.15", - "@vitest/pretty-format": "4.0.15", - "@vitest/runner": "4.0.15", - "@vitest/snapshot": "4.0.15", - "@vitest/spy": "4.0.15", - "@vitest/utils": "4.0.15", + "@vitest/expect": "4.0.16", + "@vitest/mocker": "4.0.16", + "@vitest/pretty-format": "4.0.16", + "@vitest/runner": "4.0.16", + "@vitest/snapshot": "4.0.16", + "@vitest/spy": "4.0.16", + "@vitest/utils": "4.0.16", "es-module-lexer": "^1.7.0", "expect-type": "^1.2.2", "magic-string": "^0.30.21", @@ -8379,10 +8379,10 @@ "@edge-runtime/vm": "*", "@opentelemetry/api": "^1.9.0", "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.0.15", - "@vitest/browser-preview": "4.0.15", - "@vitest/browser-webdriverio": "4.0.15", - "@vitest/ui": "4.0.15", + "@vitest/browser-playwright": "4.0.16", + "@vitest/browser-preview": "4.0.16", + "@vitest/browser-webdriverio": "4.0.16", + "@vitest/ui": "4.0.16", "happy-dom": "*", "jsdom": "*" }, diff --git a/typespec-extension/package.json b/typespec-extension/package.json index 569a5a125c..9f11f8ae0a 100644 --- a/typespec-extension/package.json +++ b/typespec-extension/package.json @@ -1,6 +1,6 @@ { "name": "@azure-tools/typespec-java", - "version": "0.37.3", + "version": "0.37.4", "description": "TypeSpec library for emitting Java client from the TypeSpec REST protocol binding", "keywords": [ "TypeSpec" @@ -53,7 +53,7 @@ "@azure-tools/typespec-azure-rulesets": ">=0.63.0 <1.0.0", "@azure-tools/typespec-client-generator-core": ">=0.63.0 <1.0.0", "@azure-tools/typespec-liftr-base": ">=0.11.0 <1.0.0", - "@typespec/compiler": "^1.7.0", + "@typespec/compiler": "^1.7.1", "@typespec/http": "^1.7.0", "@typespec/openapi": "^1.7.0", "@typespec/rest": ">=0.77.0 <1.0.0", @@ -75,10 +75,10 @@ "@microsoft/api-extractor": "^7.55.2", "@types/js-yaml": "~4.0.9", "@types/lodash": "~4.17.21", - "@types/node": "~25.0.1", - "@typescript-eslint/eslint-plugin": "~8.49.0", - "@typescript-eslint/parser": "~8.49.0", - "@typespec/compiler": "1.7.0", + "@types/node": "~25.0.3", + "@typescript-eslint/eslint-plugin": "~8.50.0", + "@typescript-eslint/parser": "~8.50.0", + "@typespec/compiler": "1.7.1", "@typespec/events": "0.77.0", "@typespec/http": "1.7.0", "@typespec/openapi": "1.7.0", @@ -88,22 +88,22 @@ "@typespec/tspd": "0.73.2", "@typespec/versioning": "0.77.0", "@typespec/xml": "0.77.0", - "@vitest/coverage-v8": "^4.0.15", - "@vitest/ui": "^4.0.15", + "@vitest/coverage-v8": "^4.0.16", + "@vitest/ui": "^4.0.16", "c8": "~10.1.3", - "eslint": "~9.39.1", + "eslint": "~9.39.2", "eslint-plugin-deprecation": "~3.0.0", "eslint-plugin-import": "^2.32.0", "eslint-plugin-unicorn": "^62.0.0", "prettier": "~3.7.4", "rimraf": "~6.1.2", "typescript": "~5.9.3", - "typescript-eslint": "^8.49.0", - "vitest": "^4.0.15" + "typescript-eslint": "^8.50.0", + "vitest": "^4.0.16" }, "overrides": { - "eslint": "~9.39.1", - "@typescript-eslint/eslint-plugin": "~8.49.0", - "@typescript-eslint/parser": "~8.49.0" + "eslint": "~9.39.2", + "@typescript-eslint/eslint-plugin": "~8.50.0", + "@typescript-eslint/parser": "~8.50.0" } } diff --git a/typespec-tests/package.json b/typespec-tests/package.json index a0e0510256..3c1f3f0313 100644 --- a/typespec-tests/package.json +++ b/typespec-tests/package.json @@ -13,7 +13,7 @@ "@typespec/spector": "0.1.0-alpha.21", "@typespec/http-specs": "0.1.0-alpha.29", "@azure-tools/azure-http-specs": "0.1.0-alpha.33", - "@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.37.3.tgz" + "@azure-tools/typespec-java": "file:/../typespec-extension/azure-tools-typespec-java-0.37.4.tgz" }, "devDependencies": { "@typespec/prettier-plugin-typespec": "^1.7.0", @@ -21,7 +21,7 @@ "prettier": "^3.7.4" }, "overrides": { - "@typespec/compiler": "1.7.0", + "@typespec/compiler": "1.7.1", "@typespec/http": "1.7.0", "@typespec/rest": "0.77.0", "@typespec/versioning": "0.77.0", From 149378f0565b81d58790c9e4c3b96e858622a5f1 Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Wed, 17 Dec 2025 11:45:23 +0800 Subject: [PATCH 3/7] add spec of client-side-validations to options.ts --- typespec-extension/src/options.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/typespec-extension/src/options.ts b/typespec-extension/src/options.ts index 78f55ff0e5..292754ec85 100644 --- a/typespec-extension/src/options.ts +++ b/typespec-extension/src/options.ts @@ -85,6 +85,13 @@ export const EmitterOptionsSchema: JSONSchemaType = { nullable: true, default: false, }, + "client-side-validations": { + type: "boolean", + description: + "When set to `true`, the model classes would be generated with a `validate()` API for validating required properties, during REST API invocation. Default value is `false`. This option is for backward-compatibility.", + nullable: true, + default: false, + }, "float32-as-double": { type: "boolean", description: From 4738494a75e1f6faf3767eea8e96a3dcebdb3a9a Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Wed, 17 Dec 2025 11:47:29 +0800 Subject: [PATCH 4/7] fix changelog --- typespec-extension/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typespec-extension/changelog.md b/typespec-extension/changelog.md index 888c81c075..0f6176aeaa 100644 --- a/typespec-extension/changelog.md +++ b/typespec-extension/changelog.md @@ -5,7 +5,7 @@ Compatible with compiler 1.7.1. - Updated TypeSpec dependencies (compiler 1.7.1) and refreshed dev dependencies. -- Added support for CSV-encoded array properties in the HTTP client emitter. +- Supported ArrayEncoding on array properties in the HTTP client emitter. ## 0.37.3 (2025-12-12) From d218800af51d6efb94c87e0a1ccb37e40b096d7e Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Wed, 17 Dec 2025 12:53:37 +0800 Subject: [PATCH 5/7] update core --- core | 2 +- .../encode/array/EncodeArraySerializationTests.java | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/core b/core index 805e28db28..883929b9c3 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 805e28db284c0936fceb5071d7b0128c07a402a3 +Subproject commit 883929b9c3010d43be078fb43292969fba63db73 diff --git a/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java b/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java index 1361b97a64..c6a58209e5 100644 --- a/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java +++ b/typespec-tests/src/test/java/encode/array/EncodeArraySerializationTests.java @@ -5,6 +5,7 @@ import com.azure.core.util.BinaryData; import encode.array.models.CommaDelimitedArrayProperty; +import java.util.LinkedList; import java.util.List; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -37,4 +38,15 @@ public void testEmptyElement() { model = BinaryData.fromString("{\"value\":\",\"}").toObject(CommaDelimitedArrayProperty.class); Assertions.assertEquals(2, model.getValue().size()); } + + @Test + public void testNullElement() { + List list = new LinkedList<>(); + list.add("data1"); + list.add(null); + list.add("data2"); + + CommaDelimitedArrayProperty model = new CommaDelimitedArrayProperty(list); + Assertions.assertEquals("{\"value\":\"data1,,data2\"}", BinaryData.fromObject(model).toString()); + } } From c28db79bdf9ce0fa60802284f9b7549939884ce4 Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Thu, 18 Dec 2025 15:23:35 +0800 Subject: [PATCH 6/7] core on main --- core | 2 +- .../tsptest/builtin/BuiltinAsyncClient.java | 26 ++++++++++ .../java/tsptest/builtin/BuiltinClient.java | 25 +++++++++ .../implementation/BuiltinOpsImpl.java | 12 +++++ .../java/tsptest/builtin/models/Encoded.java | 46 +++++++++++++++++ .../builtin/generated/BuiltinOpWrite.java | 51 +++++++++++++++++++ .../builtin/generated/BuiltinOpReadTests.java | 1 + .../generated/BuiltinOpWriteTests.java | 50 ++++++++++++++++++ typespec-tests/tsp/builtin.tsp | 5 +- .../tsp/examples/BuiltinOp_Read.json | 7 +-- .../tsp/examples/BuiltinOp_Write.json | 48 +++++++++++++++++ 11 files changed, 268 insertions(+), 5 deletions(-) create mode 100644 typespec-tests/src/samples/java/tsptest/builtin/generated/BuiltinOpWrite.java create mode 100644 typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpWriteTests.java create mode 100644 typespec-tests/tsp/examples/BuiltinOp_Write.json diff --git a/core b/core index 883929b9c3..9f01672ff7 160000 --- a/core +++ b/core @@ -1 +1 @@ -Subproject commit 883929b9c3010d43be078fb43292969fba63db73 +Subproject commit 9f01672ff76130414b77af07c6cd53e339e6d85a diff --git a/typespec-tests/src/main/java/tsptest/builtin/BuiltinAsyncClient.java b/typespec-tests/src/main/java/tsptest/builtin/BuiltinAsyncClient.java index 9443a55241..d5741af7c3 100644 --- a/typespec-tests/src/main/java/tsptest/builtin/BuiltinAsyncClient.java +++ b/typespec-tests/src/main/java/tsptest/builtin/BuiltinAsyncClient.java @@ -97,6 +97,9 @@ public final class BuiltinAsyncClient { * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -159,6 +162,9 @@ public Mono> readWithResponse(String queryParam, String que * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -239,4 +245,24 @@ public Mono read(String queryParam, String queryParamEncoded) { return readWithResponse(queryParam, queryParamEncoded, requestOptions).flatMap(FluxUtil::toMono) .map(protocolMethodData -> protocolMethodData.toObject(Builtin.class)); } + + /** + * The write operation. + * + * @param body The body parameter. + * @throws IllegalArgumentException thrown if parameters fail the validation. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + * @return A {@link Mono} that completes when a successful response is received. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public Mono write(Builtin body) { + // Generated convenience method for writeWithResponse + RequestOptions requestOptions = new RequestOptions(); + return writeWithResponse(BinaryData.fromObject(body), requestOptions).flatMap(FluxUtil::toMono); + } } diff --git a/typespec-tests/src/main/java/tsptest/builtin/BuiltinClient.java b/typespec-tests/src/main/java/tsptest/builtin/BuiltinClient.java index 4b13ab1ebe..bd2fb3d0c9 100644 --- a/typespec-tests/src/main/java/tsptest/builtin/BuiltinClient.java +++ b/typespec-tests/src/main/java/tsptest/builtin/BuiltinClient.java @@ -95,6 +95,9 @@ public final class BuiltinClient { * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -157,6 +160,9 @@ public Response readWithResponse(String queryParam, String queryPara * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -235,4 +241,23 @@ public Builtin read(String queryParam, String queryParamEncoded) { RequestOptions requestOptions = new RequestOptions(); return readWithResponse(queryParam, queryParamEncoded, requestOptions).getValue().toObject(Builtin.class); } + + /** + * The write operation. + * + * @param body The body parameter. + * @throws IllegalArgumentException thrown if parameters fail the validation. + * @throws HttpResponseException thrown if the request is rejected by server. + * @throws ClientAuthenticationException thrown if the request is rejected by server on status code 401. + * @throws ResourceNotFoundException thrown if the request is rejected by server on status code 404. + * @throws ResourceModifiedException thrown if the request is rejected by server on status code 409. + * @throws RuntimeException all other wrapped checked exceptions if the request fails to be sent. + */ + @Generated + @ServiceMethod(returns = ReturnType.SINGLE) + public void write(Builtin body) { + // Generated convenience method for writeWithResponse + RequestOptions requestOptions = new RequestOptions(); + writeWithResponse(BinaryData.fromObject(body), requestOptions).getValue(); + } } diff --git a/typespec-tests/src/main/java/tsptest/builtin/implementation/BuiltinOpsImpl.java b/typespec-tests/src/main/java/tsptest/builtin/implementation/BuiltinOpsImpl.java index a7db120b99..009b00691a 100644 --- a/typespec-tests/src/main/java/tsptest/builtin/implementation/BuiltinOpsImpl.java +++ b/typespec-tests/src/main/java/tsptest/builtin/implementation/BuiltinOpsImpl.java @@ -157,6 +157,9 @@ Response writeSync(@HostParam("endpoint") String endpoint, * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -236,6 +239,9 @@ public Mono> readWithResponseAsync(String queryParam, Strin * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -299,6 +305,9 @@ public Response readWithResponse(String queryParam, String queryPara * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } @@ -360,6 +369,9 @@ public Mono> writeWithResponseAsync(BinaryData body, RequestOptio * unknownDurationFormat: String (Optional) * unknownDateTimeFormat: String (Optional) * unknownBytes: String (Optional) + * commaDeliminatedArray (Optional): [ + * String (Optional) + * ] * } * uuid: String (Required) * } diff --git a/typespec-tests/src/main/java/tsptest/builtin/models/Encoded.java b/typespec-tests/src/main/java/tsptest/builtin/models/Encoded.java index 314dec46ae..47297757ea 100644 --- a/typespec-tests/src/main/java/tsptest/builtin/models/Encoded.java +++ b/typespec-tests/src/main/java/tsptest/builtin/models/Encoded.java @@ -19,7 +19,11 @@ import java.time.OffsetDateTime; import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * The Encoded model. @@ -86,6 +90,12 @@ public final class Encoded implements JsonSerializable { @Generated private String unknownBytes; + /* + * The commaDeliminatedArray property. + */ + @Generated + private List commaDeliminatedArray; + /** * Creates an instance of Encoded class. */ @@ -348,6 +358,28 @@ public Encoded setUnknownBytes(String unknownBytes) { return this; } + /** + * Get the commaDeliminatedArray property: The commaDeliminatedArray property. + * + * @return the commaDeliminatedArray value. + */ + @Generated + public List getCommaDeliminatedArray() { + return this.commaDeliminatedArray; + } + + /** + * Set the commaDeliminatedArray property: The commaDeliminatedArray property. + * + * @param commaDeliminatedArray the commaDeliminatedArray value to set. + * @return the Encoded object itself. + */ + @Generated + public Encoded setCommaDeliminatedArray(List commaDeliminatedArray) { + this.commaDeliminatedArray = commaDeliminatedArray; + return this; + } + /** * {@inheritDoc} */ @@ -366,6 +398,12 @@ public JsonWriter toJson(JsonWriter jsonWriter) throws IOException { jsonWriter.writeStringField("unknownDurationFormat", this.unknownDurationFormat); jsonWriter.writeStringField("unknownDateTimeFormat", this.unknownDateTimeFormat); jsonWriter.writeStringField("unknownBytes", this.unknownBytes); + if (this.commaDeliminatedArray != null) { + jsonWriter.writeStringField("commaDeliminatedArray", + this.commaDeliminatedArray.stream() + .map(element -> element == null ? "" : element) + .collect(Collectors.joining(","))); + } return jsonWriter.writeEndObject(); } @@ -408,6 +446,14 @@ public static Encoded fromJson(JsonReader jsonReader) throws IOException { deserializedEncoded.unknownDateTimeFormat = reader.getString(); } else if ("unknownBytes".equals(fieldName)) { deserializedEncoded.unknownBytes = reader.getString(); + } else if ("commaDeliminatedArray".equals(fieldName)) { + String commaDeliminatedArrayEncodedAsString = reader.getString(); + List commaDeliminatedArray = commaDeliminatedArrayEncodedAsString == null + ? null + : commaDeliminatedArrayEncodedAsString.isEmpty() + ? new LinkedList<>() + : new LinkedList<>(Arrays.asList(commaDeliminatedArrayEncodedAsString.split(",", -1))); + deserializedEncoded.commaDeliminatedArray = commaDeliminatedArray; } else { reader.skipChildren(); } diff --git a/typespec-tests/src/samples/java/tsptest/builtin/generated/BuiltinOpWrite.java b/typespec-tests/src/samples/java/tsptest/builtin/generated/BuiltinOpWrite.java new file mode 100644 index 0000000000..daabacae80 --- /dev/null +++ b/typespec-tests/src/samples/java/tsptest/builtin/generated/BuiltinOpWrite.java @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package tsptest.builtin.generated; + +import com.azure.core.util.Configuration; +import java.time.Duration; +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import tsptest.builtin.BuiltinClient; +import tsptest.builtin.BuiltinClientBuilder; +import tsptest.builtin.models.Builtin; +import tsptest.builtin.models.Encoded; + +public class BuiltinOpWrite { + public static void main(String[] args) { + BuiltinClient builtinClient + = new BuiltinClientBuilder().endpoint(Configuration.getGlobalConfiguration().get("ENDPOINT")).buildClient(); + // BEGIN:tsptest.builtin.generated.builtin-op-write.builtin-op-write + builtinClient.write(new Builtin(true, "myString", null, 0, 32L, null, 64L, 32.0, 64.0, Duration.parse("PT15M"), + LocalDate.parse("2023-08-29"), OffsetDateTime.parse("2019-10-12T07:20:50.520Z"), + Arrays.asList("a", "b", "c"), null, "https://www.github.com", + mapOf("max", 15.0D, "min", 14.0D, "average", 14.3D), + new Encoded().setTimeInSeconds(Duration.parse("PT15M")) + .setTimeInSecondsFraction(Duration.parse("PT20M0.345S")) + .setDateTime(OffsetDateTime.parse("1966-03-03T00:06:56.52Z")) + .setDateTimeRfc7231(OffsetDateTime.parse("1994-11-06T08:49:37Z")) + .setUnixTimestamp(OffsetDateTime.parse("2023-08-30T02:35:03Z")) + .setBase64("aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==".getBytes()) + .setBase64url("aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==".getBytes()) + .setCommaDeliminatedArray(Arrays.asList("a", "b", "c")), + null)); + // END:tsptest.builtin.generated.builtin-op-write.builtin-op-write + } + + // Use "Map.of" if available + @SuppressWarnings("unchecked") + private static Map mapOf(Object... inputs) { + Map map = new HashMap<>(); + for (int i = 0; i < inputs.length; i += 2) { + String key = (String) inputs[i]; + T value = (T) inputs[i + 1]; + map.put(key, value); + } + return map; + } +} diff --git a/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpReadTests.java b/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpReadTests.java index 46155f8c61..8fa08f909c 100644 --- a/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpReadTests.java +++ b/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpReadTests.java @@ -56,5 +56,6 @@ public void testBuiltinOpReadTests() { Assertions.assertNotNull(responseEncoded.getUnixTimestamp()); Assertions.assertNotNull(responseEncoded.getBase64()); Assertions.assertNotNull(responseEncoded.getBase64url()); + Assertions.assertNotNull(responseEncoded.getCommaDeliminatedArray()); } } diff --git a/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpWriteTests.java b/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpWriteTests.java new file mode 100644 index 0000000000..1f8e4e16d7 --- /dev/null +++ b/typespec-tests/src/test/java/tsptest/builtin/generated/BuiltinOpWriteTests.java @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// Code generated by Microsoft (R) TypeSpec Code Generator. + +package tsptest.builtin.generated; + +import java.time.Duration; +import java.time.LocalDate; +import java.time.OffsetDateTime; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; +import tsptest.builtin.models.Builtin; +import tsptest.builtin.models.Encoded; + +@Disabled +public final class BuiltinOpWriteTests extends BuiltinClientTestBase { + @Test + @Disabled + public void testBuiltinOpWriteTests() { + // method invocation + builtinClient.write(new Builtin(true, "myString", null, 0, 32L, null, 64L, 32.0, 64.0, Duration.parse("PT15M"), + LocalDate.parse("2023-08-29"), OffsetDateTime.parse("2019-10-12T07:20:50.520Z"), + Arrays.asList("a", "b", "c"), null, "https://www.github.com", + mapOf("max", 15.0D, "min", 14.0D, "average", 14.3D), + new Encoded().setTimeInSeconds(Duration.parse("PT15M")) + .setTimeInSecondsFraction(Duration.parse("PT20M0.345S")) + .setDateTime(OffsetDateTime.parse("1966-03-03T00:06:56.52Z")) + .setDateTimeRfc7231(OffsetDateTime.parse("1994-11-06T08:49:37Z")) + .setUnixTimestamp(OffsetDateTime.parse("2023-08-30T02:35:03Z")) + .setBase64("aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==".getBytes()) + .setBase64url("aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==".getBytes()) + .setCommaDeliminatedArray(Arrays.asList("a", "b", "c")), + null)); + } + + // Use "Map.of" if available + @SuppressWarnings("unchecked") + private static Map mapOf(Object... inputs) { + Map map = new HashMap<>(); + for (int i = 0; i < inputs.length; i += 2) { + String key = (String) inputs[i]; + T value = (T) inputs[i + 1]; + map.put(key, value); + } + return map; + } +} diff --git a/typespec-tests/tsp/builtin.tsp b/typespec-tests/tsp/builtin.tsp index b386874aa6..a7e2ae798b 100644 --- a/typespec-tests/tsp/builtin.tsp +++ b/typespec-tests/tsp/builtin.tsp @@ -61,6 +61,9 @@ model Encoded { @encode("unknown-bytes") unknownBytes?: bytes; + + @encode(ArrayEncoding.commaDelimited) + commaDeliminatedArray?: string[]; } model Request { @@ -89,6 +92,6 @@ interface BuiltinOp { @body body: Builtin; }; - @convenientAPI(false) + @post write(@body body: Builtin): OkResponse; } diff --git a/typespec-tests/tsp/examples/BuiltinOp_Read.json b/typespec-tests/tsp/examples/BuiltinOp_Read.json index fcee79fbb9..3d2808c0b4 100644 --- a/typespec-tests/tsp/examples/BuiltinOp_Read.json +++ b/typespec-tests/tsp/examples/BuiltinOp_Read.json @@ -24,13 +24,14 @@ "url": "https://www.github.com", "stringList": ["a", "b", "c"], "encoded": { - "timeInSeconds": "PT15M", - "timeInSecondsFraction": "PT20.345S", + "timeInSeconds": "900", + "timeInSecondsFraction": "1200.345", "dateTime": "1966-03-03T00:06:56.52Z", "dateTimeRfc7231": "Sun, 06 Nov 1994 08:49:37 GMT", "unixTimestamp": "1693362903", "base64": "aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==", - "base64url": "aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==" + "base64url": "aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==", + "commaDeliminatedArray": "a,b,c" } } }, diff --git a/typespec-tests/tsp/examples/BuiltinOp_Write.json b/typespec-tests/tsp/examples/BuiltinOp_Write.json new file mode 100644 index 0000000000..11dbdce71e --- /dev/null +++ b/typespec-tests/tsp/examples/BuiltinOp_Write.json @@ -0,0 +1,48 @@ +{ + "operationId": "BuiltinOp_Write", + "title": "BuiltinOp Write", + "parameters": { + "body": { + "boolean": true, + "string": "myString", + "safeint": 32, + "long": 64, + "float": 32.0, + "double": 64.0, + "duration": "PT15M", + "date": "2023-08-29", + "dateTime": "2019-10-12T07:20:50.520Z", + "nullableFloatDict": { + "max": 15.0, + "min": 14.0, + "average": 14.3 + }, + "url": "https://www.github.com", + "stringList": ["a", "b", "c"], + "encoded": { + "timeInSeconds": "900", + "timeInSecondsFraction": "1200.345", + "dateTime": "1966-03-03T00:06:56.52Z", + "dateTimeRfc7231": "Sun, 06 Nov 1994 08:49:37 GMT", + "unixTimestamp": "1693362903", + "base64": "aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==", + "base64url": "aHR0cHM6Ly93d3cuZ2l0aHViLmNvbQ==", + "commaDeliminatedArray": "a,b,c" + } + } + }, + "responses": { + "200": { + }, + "default": { + "headers": { + "Content-Type": "application/json", + "x-ms-error-code": "Error Code" + }, + "body": { + "code": "Error Code", + "message": "Error Message" + } + } + } +} From 8d11357048cc04422b25e9f7f1e106d54eef5764 Mon Sep 17 00:00:00 2001 From: Weidong Xu Date: Thu, 18 Dec 2025 15:24:00 +0800 Subject: [PATCH 7/7] changelog --- typespec-extension/changelog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/typespec-extension/changelog.md b/typespec-extension/changelog.md index 0f6176aeaa..97f9274fac 100644 --- a/typespec-extension/changelog.md +++ b/typespec-extension/changelog.md @@ -1,6 +1,6 @@ # Release History -## 0.37.4 (2025-12-17) +## 0.37.4 (2025-12-18) Compatible with compiler 1.7.1.