From 9bcb7a6d94046a32340c40f4be33150605cdf40c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 08:36:04 +0000 Subject: [PATCH 01/14] Initial plan From 9168ddc95ea5765b5f34a5e3c06abfdc035e6704 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 09:29:51 +0000 Subject: [PATCH 02/14] feat(python): add mock API tests for extensible enum with special word member names Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com> --- ...ords-extensible-strings-2026-3-6-9-28-8.md | 7 +++++ .../asynctests/test_special_words_async.py | 6 ++++ .../mock_api_tests/test_special_words.py | 5 ++++ .../asynctests/test_special_words_async.py | 6 ++++ .../mock_api_tests/test_special_words.py | 5 ++++ packages/http-client-python/package-lock.json | 28 +++++++++---------- packages/http-client-python/package.json | 2 +- 7 files changed, 44 insertions(+), 15 deletions(-) create mode 100644 .chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md diff --git a/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md b/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md new file mode 100644 index 00000000000..094e09a7d14 --- /dev/null +++ b/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md @@ -0,0 +1,7 @@ +--- +changeKind: internal +packages: + - "@typespec/http-client-python" +--- + +Add mock API test coverage for extensible enum with special word member names in special-words spec. diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py index 9f22c8c5d15..407cac8ff65 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py @@ -63,3 +63,9 @@ async def test_model_properties_dict_methods(client: SpecialWordsClient): @pytest.mark.asyncio async def test_model_properties_with_list(client: SpecialWordsClient): await client.model_properties.with_list(models.ModelWithList(list="ok")) + + +@pytest.mark.asyncio +async def test_extensible_strings(client: SpecialWordsClient): + result = await client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASSEnum) + assert result == '"class"' diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py index cc083c94c0e..b2804b4859a 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py @@ -56,3 +56,8 @@ def test_model_properties_dict_methods(client: SpecialWordsClient): def test_model_properties_with_list(client: SpecialWordsClient): client.model_properties.with_list(models.ModelWithList(list="ok")) + + +def test_extensible_strings(client: SpecialWordsClient): + result = client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASSEnum) + assert result == '"class"' diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py index eb11843ab32..dde2aad6404 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py @@ -64,3 +64,9 @@ async def test_model_properties_dict_methods(client: SpecialWordsClient): @pytest.mark.asyncio async def test_model_properties_with_list(client: SpecialWordsClient): await client.model_properties.with_list(model_properties_models.ModelWithList(list="ok")) + + +@pytest.mark.asyncio +async def test_extensible_strings(client: SpecialWordsClient): + result = await client.extensible_strings.put_extensible_string_value(body="class") + assert result == '"class"' diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py index 89679bfd788..e5e720e9767 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py @@ -58,3 +58,8 @@ def test_model_properties_dict_methods(client: SpecialWordsClient): def test_model_properties_with_list(client: SpecialWordsClient): client.model_properties.with_list(model_properties_models.ModelWithList(list="ok")) + + +def test_extensible_strings(client: SpecialWordsClient): + result = client.extensible_strings.put_extensible_string_value(body="class") + assert result == '"class"' diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 8035b620851..9b1f2e19684 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -29,7 +29,7 @@ "@typespec/compiler": "^1.9.0", "@typespec/events": "~0.79.0", "@typespec/http": "^1.9.0", - "@typespec/http-specs": "0.1.0-alpha.33-dev.2", + "@typespec/http-specs": "0.1.0-alpha.33-dev.5", "@typespec/openapi": "^1.9.0", "@typespec/rest": "~0.79.0", "@typespec/spec-api": "0.1.0-alpha.12", @@ -2473,9 +2473,9 @@ } }, "node_modules/@typespec/http": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.9.0.tgz", - "integrity": "sha512-JzlZZsgCo71f2KhWbf4BLOz5e+dVLj7gJJ4kvXvrmuG9QHoT41VaGPpCQamYgpZLMz2LQbsOtw34AmpovhuJSw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.9.1.tgz", + "integrity": "sha512-agcwmbB/hK/o9KmM38UB8OGZwLgB17lJ7b4EjqYGpyshqcRMTESMRxnJIH7rRzUq4HJDTqal0tsb8z0K0zXuDg==", "dev": true, "license": "MIT", "engines": { @@ -2492,25 +2492,25 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.33-dev.2", - "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33-dev.2.tgz", - "integrity": "sha512-Ex7PVBJgJAmNLKMbp9jA6+fXalcau3Rf+J7N8XMwCICvz6yFcRJKF07/NsM3Doc87e43VovnrJb2I2tb7LSuDw==", + "version": "0.1.0-alpha.33-dev.5", + "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33-dev.5.tgz", + "integrity": "sha512-C5lg4ZF2BC5b4mebR32iID+zaETSJQyDEu+vVjSGOp7BjlpviFhgLYw3zMwI8u8Q0FVUAW1WvVVjRZ5X/X74GA==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.12 || >=0.1.0-alpha.13-dev <0.1.0-alpha.13", - "@typespec/spector": "^0.1.0-alpha.23 || >=0.1.0-alpha.24-dev <0.1.0-alpha.24", + "@typespec/spec-api": "^0.1.0-alpha.12 || >= 0.1.0-alpha.13-dev.1", + "@typespec/spector": "^0.1.0-alpha.23 || >= 0.1.0-alpha.24-dev.4", "deep-equal": "^2.2.0" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/rest": "^0.79.0 || >=0.80.0-dev <0.80.0", - "@typespec/versioning": "^0.79.0 || >=0.80.0-dev <0.80.0", - "@typespec/xml": "^0.79.0 || >=0.80.0-dev <0.80.0" + "@typespec/compiler": "^1.9.0 || >= 1.10.0-dev.15", + "@typespec/http": "^1.9.1 || >= 1.10.0-dev.5", + "@typespec/rest": "^0.79.0 || >= 0.80.0-dev.2", + "@typespec/versioning": "^0.79.0 || >= 0.80.0-dev.3", + "@typespec/xml": "^0.79.0 || >= 0.80.0-dev.2" } }, "node_modules/@typespec/openapi": { diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 39b23f709d7..98317bb4d05 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -94,7 +94,7 @@ "@typespec/sse": "~0.79.0", "@typespec/streams": "~0.79.0", "@typespec/xml": "~0.79.0", - "@typespec/http-specs": "0.1.0-alpha.33-dev.2", + "@typespec/http-specs": "0.1.0-alpha.33-dev.5", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", From 67e797da83a98822fb98796956400ec3d2697874 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 12:09:41 +0000 Subject: [PATCH 03/14] fix(python): remove incorrect Enum suffix from extensible enum member names Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com> --- .../http-client-python/generator/pygen/preprocess/__init__.py | 3 ++- .../mock_api_tests/asynctests/test_special_words_async.py | 2 +- .../generator/test/azure/mock_api_tests/test_special_words.py | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/http-client-python/generator/pygen/preprocess/__init__.py b/packages/http-client-python/generator/pygen/preprocess/__init__.py index e2f8cf842b3..5a784c2a783 100644 --- a/packages/http-client-python/generator/pygen/preprocess/__init__.py +++ b/packages/http-client-python/generator/pygen/preprocess/__init__.py @@ -4,6 +4,7 @@ # license information. # -------------------------------------------------------------------------- """The preprocessing autorest plugin.""" + import copy from typing import Callable, Any, Optional @@ -264,7 +265,7 @@ def update_types(self, yaml_data: list[dict[str, Any]]) -> None: property["clientName"].lower(), PadType.PROPERTY, property ) add_redefined_builtin_info(property["clientName"], property) - if type.get("name"): + if type.get("name") and type["type"] != "enumvalue": pad_type = PadType.MODEL if type["type"] == "model" else PadType.ENUM_CLASS name = self.pad_reserved_words(type["name"], pad_type, type) type["name"] = name[0].upper() + name[1:] diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py index 407cac8ff65..fa2727d3310 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py @@ -67,5 +67,5 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): - result = await client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASSEnum) + result = await client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASS) assert result == '"class"' diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py index b2804b4859a..053aaa87c2d 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py @@ -59,5 +59,5 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): - result = client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASSEnum) + result = client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASS) assert result == '"class"' From 504047b318bbf7fb140b7b398a8d50eb6b5a8b64 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 12:13:19 +0000 Subject: [PATCH 04/14] chore: add changelog entry for enum member reserved-word suffix fix Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com> --- ...enum-member-reserved-word-suffix-2026-03-06-12-00-00.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md diff --git a/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md b/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md new file mode 100644 index 00000000000..c3ed9c2c4e2 --- /dev/null +++ b/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/http-client-python" +--- + +Fix extensible enum member names incorrectly getting an `Enum` suffix when the member name matched a Python reserved word (e.g. `ANDEnum` → `AND`, `CLASSEnum` → `CLASS`). From 9b100c888cd11e46e26c3df465f48d17a8978a6d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Mar 2026 13:44:25 +0000 Subject: [PATCH 05/14] fix(python): fix models __init__.py overwrite when operation group shares models folder path Co-authored-by: msyyc <70930885+msyyc@users.noreply.github.com> --- ...space-models-init-overwrite-2026-03-06-13-00-00.md | 7 +++++++ .../generator/pygen/codegen/serializers/__init__.py | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 .chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md diff --git a/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md b/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md new file mode 100644 index 00000000000..ae78fd05062 --- /dev/null +++ b/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md @@ -0,0 +1,7 @@ +--- +changeKind: fix +packages: + - "@typespec/http-client-python" +--- + +Fix generated `models/__init__.py` being overwritten with a pkgutil namespace init when an operation group shares the same directory path as the models folder (e.g. a `Models` operation group conflicting with `specialwords/models/`). This caused `ImportError` when importing the generated client. diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py index 6a16ed93e48..fa0fdc4a90f 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -143,7 +143,16 @@ def serialize(self) -> None: ) general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=False) - for client_namespace, client_namespace_type in self.code_model.client_namespace_types.items(): + # Process namespaces deepest-first so that shallower namespaces (which write the models + # folder __init__.py) always overwrite the pkgutil namespace init written by deeper + # sub-namespaces that share the same directory path (e.g. an operation group named + # "models" that lives under the same "specialwords/models/" folder as the data models). + # The empty root namespace ("") is treated as depth 0 and processed last. + for client_namespace, client_namespace_type in sorted( + self.code_model.client_namespace_types.items(), + key=lambda x: len(x[0].split(".")) if x[0] else 0, + reverse=True, + ): generation_path = self.code_model.get_generation_dir(client_namespace) if client_namespace == "": if self.code_model.options["basic-setup-py"]: From e808d1acd7f221b780cf161fc9c4bb65cb9e4cdf Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Mon, 9 Mar 2026 13:59:34 +0800 Subject: [PATCH 06/14] Revert "fix(python): fix models __init__.py overwrite when operation group shares models folder path" This reverts commit 9b100c888cd11e46e26c3df465f48d17a8978a6d. --- ...space-models-init-overwrite-2026-03-06-13-00-00.md | 7 ------- .../generator/pygen/codegen/serializers/__init__.py | 11 +---------- 2 files changed, 1 insertion(+), 17 deletions(-) delete mode 100644 .chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md diff --git a/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md b/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md deleted file mode 100644 index ae78fd05062..00000000000 --- a/.chronus/changes/python-fix-namespace-models-init-overwrite-2026-03-06-13-00-00.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Fix generated `models/__init__.py` being overwritten with a pkgutil namespace init when an operation group shares the same directory path as the models folder (e.g. a `Models` operation group conflicting with `specialwords/models/`). This caused `ImportError` when importing the generated client. diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py index fa0fdc4a90f..6a16ed93e48 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -143,16 +143,7 @@ def serialize(self) -> None: ) general_serializer = GeneralSerializer(code_model=self.code_model, env=env, async_mode=False) - # Process namespaces deepest-first so that shallower namespaces (which write the models - # folder __init__.py) always overwrite the pkgutil namespace init written by deeper - # sub-namespaces that share the same directory path (e.g. an operation group named - # "models" that lives under the same "specialwords/models/" folder as the data models). - # The empty root namespace ("") is treated as depth 0 and processed last. - for client_namespace, client_namespace_type in sorted( - self.code_model.client_namespace_types.items(), - key=lambda x: len(x[0].split(".")) if x[0] else 0, - reverse=True, - ): + for client_namespace, client_namespace_type in self.code_model.client_namespace_types.items(): generation_path = self.code_model.get_generation_dir(client_namespace) if client_namespace == "": if self.code_model.options["basic-setup-py"]: From 60736bbe2c02bdb974609d7c5f46733ca0463dce Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Mon, 9 Mar 2026 07:34:34 +0000 Subject: [PATCH 07/14] update test case --- .../asynctests/test_special_words_async.py | 5 +-- .../mock_api_tests/test_special_words.py | 5 +-- .../asynctests/test_special_words_async.py | 5 +-- .../mock_api_tests/test_special_words.py | 5 +-- .../generator/test/unittests/test_enums.py | 36 +++++++++++++++++++ 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py index fa2727d3310..6250a2e7dbf 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py @@ -6,6 +6,7 @@ import pytest from specialwords.aio import SpecialWordsClient from specialwords import models +from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -67,5 +68,5 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): - result = await client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASS) - assert result == '"class"' + for enum_value in extensible_strings_models.ExtensibleString: + assert await client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py index 053aaa87c2d..b7d0d886598 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py @@ -5,6 +5,7 @@ # -------------------------------------------------------------------------- import pytest from specialwords import SpecialWordsClient, models +from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -59,5 +60,5 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): - result = client.extensible_strings.put_extensible_string_value(body=models.ExtensibleString.CLASS) - assert result == '"class"' + for enum_value in extensible_strings_models.ExtensibleString: + assert client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py index dde2aad6404..016ad818c89 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py @@ -7,6 +7,7 @@ from specialwords.aio import SpecialWordsClient from specialwords.models import models from specialwords.modelproperties import models as model_properties_models +from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -68,5 +69,5 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): - result = await client.extensible_strings.put_extensible_string_value(body="class") - assert result == '"class"' + for enum_value in extensible_strings_models.ExtensibleString: + assert await client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py index e5e720e9767..865e53a29fc 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py @@ -7,6 +7,7 @@ from specialwords import SpecialWordsClient from specialwords.models import models from specialwords.modelproperties import models as model_properties_models +from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -61,5 +62,5 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): - result = client.extensible_strings.put_extensible_string_value(body="class") - assert result == '"class"' + for enum_value in extensible_strings_models.ExtensibleString: + assert client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unittests/test_enums.py b/packages/http-client-python/generator/test/unittests/test_enums.py index 02134609523..47572b9cefb 100644 --- a/packages/http-client-python/generator/test/unittests/test_enums.py +++ b/packages/http-client-python/generator/test/unittests/test_enums.py @@ -4,6 +4,7 @@ # license information. # -------------------------------------------------------------------------- from enum import Enum, EnumMeta +from specialwords.extensiblestrings import models as extensible_strings_models class _CaseInsensitiveEnumMeta(EnumMeta): @@ -50,3 +51,38 @@ def test_find(): def test_join(): assert EnumsWithCallableNames.JOIN == "join" assert callable(EnumsWithCallableNames.join) + +def test_extensible_strings_enum_with_special_words(): + assert extensible_strings_models.ExtensibleString.AND == "and" + assert extensible_strings_models.ExtensibleString.AS == "as" + assert extensible_strings_models.ExtensibleString.ASSERT == "assert" + assert extensible_strings_models.ExtensibleString.ASYNC == "async" + assert extensible_strings_models.ExtensibleString.AWAIT == "await" + assert extensible_strings_models.ExtensibleString.BREAK == "break" + assert extensible_strings_models.ExtensibleString.CLASS == "class" + assert extensible_strings_models.ExtensibleString.CONSTRUCTOR == "constructor" + assert extensible_strings_models.ExtensibleString.CONTINUE == "continue" + assert extensible_strings_models.ExtensibleString.DEF == "def" + assert extensible_strings_models.ExtensibleString.DEL == "del" + assert extensible_strings_models.ExtensibleString.ELIF == "elif" + assert extensible_strings_models.ExtensibleString.ELSE == "else" + assert extensible_strings_models.ExtensibleString.EXCEPT == "except" + assert extensible_strings_models.ExtensibleString.EXEC == "exec" + assert extensible_strings_models.ExtensibleString.FINALLY == "finally" + assert extensible_strings_models.ExtensibleString.FOR == "for" + assert extensible_strings_models.ExtensibleString.FROM == "from" + assert extensible_strings_models.ExtensibleString.GLOBAL == "global" + assert extensible_strings_models.ExtensibleString.IF == "if" + assert extensible_strings_models.ExtensibleString.IMPORT == "import" + assert extensible_strings_models.ExtensibleString.IN == "in" + assert extensible_strings_models.ExtensibleString.IS == "is" + assert extensible_strings_models.ExtensibleString.LAMBDA == "lambda" + assert extensible_strings_models.ExtensibleString.NOT == "not" + assert extensible_strings_models.ExtensibleString.OR == "or" + assert extensible_strings_models.ExtensibleString.PASS == "pass" + assert extensible_strings_models.ExtensibleString.RAISE == "raise" + assert extensible_strings_models.ExtensibleString.RETURN == "return" + assert extensible_strings_models.ExtensibleString.TRY == "try" + assert extensible_strings_models.ExtensibleString.WHILE == "while" + assert extensible_strings_models.ExtensibleString.WITH == "with" + assert extensible_strings_models.ExtensibleString.YIELD == "yield" \ No newline at end of file From 1bcf463444be06b7f773b6e074cfce63be477038 Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Mon, 9 Mar 2026 07:36:29 +0000 Subject: [PATCH 08/14] Update special words assertions across tests --- .../mock_api_tests/asynctests/test_special_words_async.py | 2 +- .../generator/test/azure/mock_api_tests/test_special_words.py | 2 +- .../mock_api_tests/asynctests/test_special_words_async.py | 2 +- .../test/unbranded/mock_api_tests/test_special_words.py | 2 +- .../http-client-python/generator/test/unittests/test_enums.py | 3 ++- 5 files changed, 6 insertions(+), 5 deletions(-) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py index 6250a2e7dbf..39a150e4db9 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py @@ -69,4 +69,4 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): for enum_value in extensible_strings_models.ExtensibleString: - assert await client.extensible_strings.put_extensible_string_value(body=enum_value) + assert enum_value == await client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py index b7d0d886598..2f591680bb2 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py @@ -61,4 +61,4 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): for enum_value in extensible_strings_models.ExtensibleString: - assert client.extensible_strings.put_extensible_string_value(body=enum_value) + assert enum_value == client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py index 016ad818c89..112533fa2db 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/asynctests/test_special_words_async.py @@ -70,4 +70,4 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): for enum_value in extensible_strings_models.ExtensibleString: - assert await client.extensible_strings.put_extensible_string_value(body=enum_value) + assert enum_value == await client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py index 865e53a29fc..83269cc1e47 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_special_words.py @@ -63,4 +63,4 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): for enum_value in extensible_strings_models.ExtensibleString: - assert client.extensible_strings.put_extensible_string_value(body=enum_value) + assert enum_value == client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/unittests/test_enums.py b/packages/http-client-python/generator/test/unittests/test_enums.py index 47572b9cefb..2b671c90996 100644 --- a/packages/http-client-python/generator/test/unittests/test_enums.py +++ b/packages/http-client-python/generator/test/unittests/test_enums.py @@ -52,6 +52,7 @@ def test_join(): assert EnumsWithCallableNames.JOIN == "join" assert callable(EnumsWithCallableNames.join) + def test_extensible_strings_enum_with_special_words(): assert extensible_strings_models.ExtensibleString.AND == "and" assert extensible_strings_models.ExtensibleString.AS == "as" @@ -85,4 +86,4 @@ def test_extensible_strings_enum_with_special_words(): assert extensible_strings_models.ExtensibleString.TRY == "try" assert extensible_strings_models.ExtensibleString.WHILE == "while" assert extensible_strings_models.ExtensibleString.WITH == "with" - assert extensible_strings_models.ExtensibleString.YIELD == "yield" \ No newline at end of file + assert extensible_strings_models.ExtensibleString.YIELD == "yield" From 4073ea3cbda092661611c87bff0ddbda23fe78fa Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Wed, 11 Mar 2026 02:19:38 +0000 Subject: [PATCH 09/14] bump version --- ...n-read-only-model-tests-2026-3-6-8-0-10.md | 7 - ...-union-python-tests-2026-03-06-02-30-00.md | 7 - ...eserialization-test-2026-03-04-05-46-13.md | 6 - ...meration-results-test-2026-2-23-22-33-2.md | 7 - ...diff-upstream-skill-2026-02-26-14-34-52.md | 7 - ...eserved-word-suffix-2026-03-06-12-00-00.md | 7 - ...emove-includeRootSlash-2026-3-9-2-53-15.md | 7 - ...on-removeEnumPadding-2026-1-27-12-23-22.md | 7 - ...ords-extensible-strings-2026-3-6-9-28-8.md | 7 - ...upgrade-deps-feb-2026-2026-2-2-19-28-39.md | 1 - packages/http-client-python/CHANGELOG.md | 13 + packages/http-client-python/package-lock.json | 583 ++++++++++-------- packages/http-client-python/package.json | 66 +- 13 files changed, 360 insertions(+), 365 deletions(-) delete mode 100644 .chronus/changes/add-flatten-read-only-model-tests-2026-3-6-8-0-10.md delete mode 100644 .chronus/changes/add-noauth-union-python-tests-2026-03-06-02-30-00.md delete mode 100644 .chronus/changes/copilot-add-xml-deserialization-test-2026-03-04-05-46-13.md delete mode 100644 .chronus/changes/http-client-python-xml-enumeration-results-test-2026-2-23-22-33-2.md delete mode 100644 .chronus/changes/python-diff-upstream-skill-2026-02-26-14-34-52.md delete mode 100644 .chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md delete mode 100644 .chronus/changes/python-remove-includeRootSlash-2026-3-9-2-53-15.md delete mode 100644 .chronus/changes/python-removeEnumPadding-2026-1-27-12-23-22.md delete mode 100644 .chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md diff --git a/.chronus/changes/add-flatten-read-only-model-tests-2026-3-6-8-0-10.md b/.chronus/changes/add-flatten-read-only-model-tests-2026-3-6-8-0-10.md deleted file mode 100644 index e4bbcfb6773..00000000000 --- a/.chronus/changes/add-flatten-read-only-model-tests-2026-3-6-8-0-10.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@typespec/http-client-python" ---- - -Add test cases for flatten property with read-only properties (putFlattenReadOnlyModel and putFlattenUnknownModel scenarios). diff --git a/.chronus/changes/add-noauth-union-python-tests-2026-03-06-02-30-00.md b/.chronus/changes/add-noauth-union-python-tests-2026-03-06-02-30-00.md deleted file mode 100644 index 265e8f78c14..00000000000 --- a/.chronus/changes/add-noauth-union-python-tests-2026-03-06-02-30-00.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@typespec/http-client-python" ---- - -Add mock API tests for authentication/noauth/union Spector case (sync + async). diff --git a/.chronus/changes/copilot-add-xml-deserialization-test-2026-03-04-05-46-13.md b/.chronus/changes/copilot-add-xml-deserialization-test-2026-03-04-05-46-13.md deleted file mode 100644 index e006e732936..00000000000 --- a/.chronus/changes/copilot-add-xml-deserialization-test-2026-03-04-05-46-13.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- -Return empty list instead of None for non-optional unwrapped XML list fields during deserialization diff --git a/.chronus/changes/http-client-python-xml-enumeration-results-test-2026-2-23-22-33-2.md b/.chronus/changes/http-client-python-xml-enumeration-results-test-2026-2-23-22-33-2.md deleted file mode 100644 index c4a7ac65651..00000000000 --- a/.chronus/changes/http-client-python-xml-enumeration-results-test-2026-2-23-22-33-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@typespec/http-client-python" ---- - -Add unit test for deserializing Azure Blob Storage EnumerationResults XML payload with attributes, empty list element, and empty string element. diff --git a/.chronus/changes/python-diff-upstream-skill-2026-02-26-14-34-52.md b/.chronus/changes/python-diff-upstream-skill-2026-02-26-14-34-52.md deleted file mode 100644 index 985fc71b66d..00000000000 --- a/.chronus/changes/python-diff-upstream-skill-2026-02-26-14-34-52.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@typespec/http-client-python" ---- - -Add diff-upstream skill for comparing generated code against autorest.python baseline diff --git a/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md b/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md deleted file mode 100644 index c3ed9c2c4e2..00000000000 --- a/.chronus/changes/python-fix-enum-member-reserved-word-suffix-2026-03-06-12-00-00.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Fix extensible enum member names incorrectly getting an `Enum` suffix when the member name matched a Python reserved word (e.g. `ANDEnum` → `AND`, `CLASSEnum` → `CLASS`). diff --git a/.chronus/changes/python-remove-includeRootSlash-2026-3-9-2-53-15.md b/.chronus/changes/python-remove-includeRootSlash-2026-3-9-2-53-15.md deleted file mode 100644 index 2e03aae584f..00000000000 --- a/.chronus/changes/python-remove-includeRootSlash-2026-3-9-2-53-15.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: fix -packages: - - "@typespec/http-client-python" ---- - -Remove includeRootSlash client option logic, which should be handled at the TypeSpec core level diff --git a/.chronus/changes/python-removeEnumPadding-2026-1-27-12-23-22.md b/.chronus/changes/python-removeEnumPadding-2026-1-27-12-23-22.md deleted file mode 100644 index c0e8e0fa7ab..00000000000 --- a/.chronus/changes/python-removeEnumPadding-2026-1-27-12-23-22.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: feature -packages: - - "@typespec/http-client-python" ---- - -Remove enum value padding because we generate our enum value names with upper case so there is no need diff --git a/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md b/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md deleted file mode 100644 index 094e09a7d14..00000000000 --- a/.chronus/changes/python-special-words-extensible-strings-2026-3-6-9-28-8.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -changeKind: internal -packages: - - "@typespec/http-client-python" ---- - -Add mock API test coverage for extensible enum with special word member names in special-words spec. diff --git a/.chronus/changes/upgrade-deps-feb-2026-2026-2-2-19-28-39.md b/.chronus/changes/upgrade-deps-feb-2026-2026-2-2-19-28-39.md index 71863e96cbc..051de73c605 100644 --- a/.chronus/changes/upgrade-deps-feb-2026-2026-2-2-19-28-39.md +++ b/.chronus/changes/upgrade-deps-feb-2026-2026-2-2-19-28-39.md @@ -2,7 +2,6 @@ changeKind: internal packages: - "@typespec/http-client-java" - - "@typespec/http-client-python" --- Upgrade to eslint 10 \ No newline at end of file diff --git a/packages/http-client-python/CHANGELOG.md b/packages/http-client-python/CHANGELOG.md index fe524017046..5f102ed8a51 100644 --- a/packages/http-client-python/CHANGELOG.md +++ b/packages/http-client-python/CHANGELOG.md @@ -1,5 +1,18 @@ # Change Log - @typespec/http-client-python +## 0.28.0 + +### Features + +- [#9898](https://github.com/microsoft/typespec/pull/9898) Remove enum value padding because we generate our enum value names with upper case so there is no need + +### Bug Fixes + +- [#9778](https://github.com/microsoft/typespec/pull/9778) Return empty list instead of None for non-optional unwrapped XML list fields during deserialization +- [#9952](https://github.com/microsoft/typespec/pull/9952) Fix extensible enum member names incorrectly getting an `Enum` suffix when the member name matched a Python reserved word (e.g. `ANDEnum` → `AND`, `CLASSEnum` → `CLASS`). +- [#9964](https://github.com/microsoft/typespec/pull/9964) Remove includeRootSlash client option logic, which should be handled at the TypeSpec core level + + ## 0.27.2 ### Bump dependencies diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index c8713c0b887..0a6490eb63c 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -1,12 +1,12 @@ { "name": "@typespec/http-client-python", - "version": "0.27.2", + "version": "0.28.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@typespec/http-client-python", - "version": "0.27.2", + "version": "0.28.0", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -17,27 +17,27 @@ "tsx": "^4.21.0" }, "devDependencies": { - "@azure-tools/azure-http-specs": "0.1.0-alpha.38-dev.6", - "@azure-tools/typespec-autorest": "~0.65.0", - "@azure-tools/typespec-azure-core": "~0.65.0", - "@azure-tools/typespec-azure-resource-manager": "~0.65.0", - "@azure-tools/typespec-azure-rulesets": "~0.65.0", - "@azure-tools/typespec-client-generator-core": "~0.65.3", + "@azure-tools/azure-http-specs": "0.1.0-alpha.38", + "@azure-tools/typespec-autorest": "~0.66.0", + "@azure-tools/typespec-azure-core": "~0.66.0", + "@azure-tools/typespec-azure-resource-manager": "~0.66.0", + "@azure-tools/typespec-azure-rulesets": "~0.65.1", + "@azure-tools/typespec-client-generator-core": "~0.66.0", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", - "@typespec/compiler": "^1.9.0", - "@typespec/events": "~0.79.0", - "@typespec/http": "^1.9.0", - "@typespec/http-specs": "0.1.0-alpha.33-dev.5", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": "~0.79.0", - "@typespec/spec-api": "0.1.0-alpha.12", - "@typespec/spector": "0.1.0-alpha.23", - "@typespec/sse": "~0.79.0", - "@typespec/streams": "~0.79.0", - "@typespec/versioning": "~0.79.0", - "@typespec/xml": "~0.79.0", + "@typespec/compiler": "^1.10.0", + "@typespec/events": "~0.80.0", + "@typespec/http": "^1.10.0", + "@typespec/http-specs": "0.1.0-alpha.33", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": "~0.80.0", + "@typespec/spec-api": "0.1.0-alpha.13", + "@typespec/spector": "0.1.0-alpha.24", + "@typespec/sse": "~0.80.0", + "@typespec/streams": "~0.80.0", + "@typespec/versioning": "~0.80.0", + "@typespec/xml": "~0.80.0", "c8": "^10.1.3", "chalk": "5.3.0", "rimraf": "~6.1.2", @@ -49,63 +49,63 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-autorest": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-core": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-resource-manager": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-rulesets": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-client-generator-core": ">=0.65.3 <1.0.0", - "@typespec/compiler": "^1.9.0", - "@typespec/events": ">=0.79.0 <1.0.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": ">=0.79.0 <1.0.0", - "@typespec/sse": ">=0.79.0 <1.0.0", - "@typespec/streams": ">=0.79.0 <1.0.0", - "@typespec/versioning": ">=0.79.0 <1.0.0", - "@typespec/xml": ">=0.79.0 <1.0.0" + "@azure-tools/typespec-autorest": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-core": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-resource-manager": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-rulesets": ">=0.65.1 <1.0.0", + "@azure-tools/typespec-client-generator-core": ">=0.66.0 <1.0.0", + "@typespec/compiler": "^1.10.0", + "@typespec/events": ">=0.80.0 <1.0.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": ">=0.80.0 <1.0.0", + "@typespec/sse": ">=0.80.0 <1.0.0", + "@typespec/streams": ">=0.80.0 <1.0.0", + "@typespec/versioning": ">=0.80.0 <1.0.0", + "@typespec/xml": ">=0.80.0 <1.0.0" } }, "node_modules/@azure-tools/azure-http-specs": { - "version": "0.1.0-alpha.38-dev.6", - "resolved": "https://registry.npmjs.org/@azure-tools/azure-http-specs/-/azure-http-specs-0.1.0-alpha.38-dev.6.tgz", - "integrity": "sha512-MXjnMSArEM1+ADCmSrYDsOlTzL9bQWaVMtrTtOK8+2eAL87dZdfxiFuiPr9jWHYC8m8nIwLZ+h4dE7TSQR0KwQ==", + "version": "0.1.0-alpha.38", + "resolved": "https://registry.npmjs.org/@azure-tools/azure-http-specs/-/azure-http-specs-0.1.0-alpha.38.tgz", + "integrity": "sha512-OkwmMhmSNOV4PO4UA4Tm4ufyA0UPcOrWgZuhybQjWzUq0bbryW9y5ODyknvUV0Z0IOAInW1dUJQ2wRX9pLqNCA==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.12 || >=0.1.0-alpha.13-dev <0.1.0-alpha.13", - "@typespec/spector": "^0.1.0-alpha.23 || >=0.1.0-alpha.24-dev <0.1.0-alpha.24" + "@typespec/spec-api": "^0.1.0-alpha.13", + "@typespec/spector": "^0.1.0-alpha.24" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.65.0 || >=0.66.0-dev <0.66.0", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.1", - "@typespec/rest": "^0.79.0 || >=0.80.0-dev <0.80.0", - "@typespec/versioning": "^0.79.0 || >=0.80.0-dev <0.80.0", - "@typespec/xml": "^0.79.0 || >=0.80.0-dev <0.80.0" + "@azure-tools/typespec-azure-core": "^0.66.0", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/versioning": "^0.80.0", + "@typespec/xml": "^0.80.0" } }, "node_modules/@azure-tools/typespec-autorest": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.65.0.tgz", - "integrity": "sha512-R8pZt7rYdA2Hr3nck93OGapkQZe3MSzoYq4PgRtsGDHcvA5Qp7RBQMF/tP5DEcFWDDm+unoQeDpbD02POb/LTA==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.66.0.tgz", + "integrity": "sha512-sznnlQ2Cyxny7bXSl+PzGu+qQf/rrSIvf2qR7G/bqWbK6MNykXwiDk9uR5q93Y8spA9vv4jk38Il4rSXqmAzLQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.65.0", - "@azure-tools/typespec-azure-resource-manager": "^0.65.0", - "@azure-tools/typespec-client-generator-core": "^0.65.0", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": "^0.79.0", - "@typespec/versioning": "^0.79.0", - "@typespec/xml": "^0.79.0" + "@azure-tools/typespec-azure-core": "^0.66.0", + "@azure-tools/typespec-azure-resource-manager": "^0.66.0", + "@azure-tools/typespec-client-generator-core": "^0.66.0", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/versioning": "^0.80.0", + "@typespec/xml": "^0.80.0" }, "peerDependenciesMeta": { "@typespec/xml": { @@ -114,24 +114,24 @@ } }, "node_modules/@azure-tools/typespec-azure-core": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.65.0.tgz", - "integrity": "sha512-dYgHtt0CY0Q9AimdIsMV41jHKLmAT4r++TLwyxAHRbxdiRG+Sll1UKJzOIIoq45Bq64wCfEltu5OOnyPA01/sQ==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.66.0.tgz", + "integrity": "sha512-OBKxRN7AucK3snh+GtLKSDdcZTz08IgcSZlIO3c4KSlmcR5twT1NMyqf1+V8SAhyOdZimndb+ikzrkkgab+GpA==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/rest": "^0.79.0" + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/rest": "^0.80.0" } }, "node_modules/@azure-tools/typespec-azure-resource-manager": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.65.0.tgz", - "integrity": "sha512-3rvyGDIYSqraZ7jHfq5Bfet8u3ZeERWJWhwWMNvbShnrS/vVR3iuu/1z2M0p5mTRFuwUaSMlL/dbtBp1YqgGAg==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.66.0.tgz", + "integrity": "sha512-UbgYUaYTt7prsv+RYxd2kiOWjeEeoH56QOqgXnSOFhYzq/h9fyDaQAm6+CY7cklziED+MYy3uMQd1BG9mNwlfQ==", "dev": true, "license": "MIT", "dependencies": { @@ -142,34 +142,34 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.65.0", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": "^0.79.0", - "@typespec/versioning": "^0.79.0" + "@azure-tools/typespec-azure-core": "^0.66.0", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/versioning": "^0.80.0" } }, "node_modules/@azure-tools/typespec-azure-rulesets": { - "version": "0.65.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.65.0.tgz", - "integrity": "sha512-oGuCw61uU9fUASog/1iD1rGeGhcKgnAuyBWA63wRcMMrcW1ZqUK2xvjV1XJuoYRlMxU8HpQShFcvsj715pNVLQ==", + "version": "0.65.1", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.65.1.tgz", + "integrity": "sha512-iF9prvhrKX2ZTzUinyLdelfqmKsxla7hwEj/6l4hvgpXEnTckxlCwKqfBTOGwvJ4ofQ5L2DIJWWR2+X8yLWRBg==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.65.0", - "@azure-tools/typespec-azure-resource-manager": "^0.65.0", - "@azure-tools/typespec-client-generator-core": "^0.65.0", - "@typespec/compiler": "^1.9.0" + "@azure-tools/typespec-azure-core": "^0.66.0", + "@azure-tools/typespec-azure-resource-manager": "^0.66.0", + "@azure-tools/typespec-client-generator-core": "^0.66.0", + "@typespec/compiler": "^1.10.0" } }, "node_modules/@azure-tools/typespec-client-generator-core": { - "version": "0.65.3", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.65.3.tgz", - "integrity": "sha512-sJ9J7cIhJE9aISIeJW7uuEdLXkulF6GY64VyHdkgziQADUVRKDwgyoA7uGCfAz84dKU5JtWTJuCsIvfiQDzfSA==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.66.0.tgz", + "integrity": "sha512-ITg9Ls1p0vr1nTM6BaeO+u3p5+jkJ6JtzomrUAhgBNQUZGsC5MIOt4leOJf8XMBCwW3WFLIRRVF86xMgamMfDA==", "dev": true, "license": "MIT", "dependencies": { @@ -181,16 +181,16 @@ "node": ">=20.0.0" }, "peerDependencies": { - "@azure-tools/typespec-azure-core": "^0.65.0", - "@typespec/compiler": "^1.9.0", - "@typespec/events": "^0.79.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": "^0.79.0", - "@typespec/sse": "^0.79.0", - "@typespec/streams": "^0.79.0", - "@typespec/versioning": "^0.79.0", - "@typespec/xml": "^0.79.0" + "@azure-tools/typespec-azure-core": "^0.66.0", + "@typespec/compiler": "^1.10.0", + "@typespec/events": "^0.80.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/sse": "^0.80.0", + "@typespec/streams": "^0.80.0", + "@typespec/versioning": "^0.80.0", + "@typespec/xml": "^0.80.0" } }, "node_modules/@azure/abort-controller": { @@ -287,9 +287,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.22.2.tgz", - "integrity": "sha512-MzHym+wOi8CLUlKCQu12de0nwcq9k9Kuv43j4Wa++CsCpJwps2eeBQwD2Bu8snkxTtDKDx4GwjuR9E8yC8LNrg==", + "version": "1.23.0", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.23.0.tgz", + "integrity": "sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ==", "dev": true, "license": "MIT", "dependencies": { @@ -298,7 +298,7 @@ "@azure/core-tracing": "^1.3.0", "@azure/core-util": "^1.13.0", "@azure/logger": "^1.3.0", - "@typespec/ts-http-runtime": "^0.3.0", + "@typespec/ts-http-runtime": "^0.3.4", "tslib": "^2.6.2" }, "engines": { @@ -385,22 +385,22 @@ } }, "node_modules/@azure/msal-browser": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.28.2.tgz", - "integrity": "sha512-6vYUMvs6kJxJgxaCmHn/F8VxjLHNh7i9wzfwPGf8kyBJ8Gg2yvBXx175Uev8LdrD1F5C4o7qHa2CC4IrhGE1XQ==", + "version": "4.29.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-4.29.0.tgz", + "integrity": "sha512-/f3eHkSNUTl6DLQHm+bKecjBKcRQxbd/XLx8lvSYp8Nl/HRyPuIPOijt9Dt0sH50/SxOwQ62RnFCmFlGK+bR/w==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.14.2" + "@azure/msal-common": "15.15.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "15.14.2", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.14.2.tgz", - "integrity": "sha512-n8RBJEUmd5QotoqbZfd+eGBkzuFI1KX6jw2b3WcpSyGjwmzoeI/Jb99opIBPHpb8y312NB+B6+FGi2ZVSR8yfA==", + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-15.15.0.tgz", + "integrity": "sha512-/n+bN0AKlVa+AOcETkJSKj38+bvFs78BaP4rNtv3MJCmPH0YrHiskMRe74OhyZ5DZjGISlFyxqvf9/4QVEi2tw==", "dev": true, "license": "MIT", "engines": { @@ -408,13 +408,13 @@ } }, "node_modules/@azure/msal-node": { - "version": "3.8.7", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.7.tgz", - "integrity": "sha512-a+Xnrae+uwLnlw68bplS1X4kuJ9F/7K6afuMFyRkNIskhjgDezl5Fhrx+1pmAlDmC0VaaAxjRQMp1OmcqVwkIg==", + "version": "3.8.8", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-3.8.8.tgz", + "integrity": "sha512-+f1VrJH1iI517t4zgmuhqORja0bL6LDQXfBqkjuMmfTYXTQQnh1EvwwxO3UbKLT05N0obF72SRHFrC1RBDv5Gg==", "dev": true, "license": "MIT", "dependencies": { - "@azure/msal-common": "15.14.2", + "@azure/msal-common": "15.15.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, @@ -423,9 +423,9 @@ } }, "node_modules/@azure/storage-blob": { - "version": "12.30.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.30.0.tgz", - "integrity": "sha512-peDCR8blSqhsAKDbpSP/o55S4sheNwSrblvCaHUZ5xUI73XA7ieUGGwrONgD/Fng0EoDe1VOa3fAQ7+WGB3Ocg==", + "version": "12.31.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.31.0.tgz", + "integrity": "sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg==", "dev": true, "license": "MIT", "dependencies": { @@ -440,7 +440,7 @@ "@azure/core-util": "^1.11.0", "@azure/core-xml": "^1.4.5", "@azure/logger": "^1.1.4", - "@azure/storage-common": "^12.2.0", + "@azure/storage-common": "^12.3.0", "events": "^3.0.0", "tslib": "^2.8.1" }, @@ -470,9 +470,9 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.28.6.tgz", - "integrity": "sha512-JYgintcMjRiCvS8mMECzaEn+m3PfoQiyqukOMCCVQtoJGYJw8j/8LBJEiqkHLkfwCcs74E3pbAUFNg7d9VNJ+Q==", + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", "dev": true, "license": "MIT", "dependencies": { @@ -2329,17 +2329,17 @@ } }, "node_modules/@typespec/compiler": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.9.0.tgz", - "integrity": "sha512-Rz9fFWQSTJSnhBfZvtA/bDIuO82fknYdtyMsL9lZNJE82rquC6JByHPFsnbGH1VXA0HhMj9L7Oqyp3f0m/BTOA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.10.0.tgz", + "integrity": "sha512-R6BATDkughntPpaxeESJF+wxma5PEjgmnnKvH0/ByqUH8VyhIckQWE9kkP0Uc/EJ0o0VYhe8qCwWQvV70k5lTw==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "~7.28.6", + "@babel/code-frame": "~7.29.0", "@inquirer/prompts": "^8.0.1", - "ajv": "~8.17.1", + "ajv": "~8.18.0", "change-case": "~5.4.4", - "env-paths": "^3.0.0", + "env-paths": "^4.0.0", "globby": "~16.1.0", "is-unicode-supported": "^2.1.0", "mustache": "~4.2.0", @@ -2460,30 +2460,30 @@ } }, "node_modules/@typespec/events": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.79.0.tgz", - "integrity": "sha512-41R2jA7k21uMArjyUdvnqYzVnPPaSEcGi40dLMiRVP79m6XgnD3INuTdlMblaS1i+5jJ1BtS1o4QhBBuS/5/qg==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.80.0.tgz", + "integrity": "sha512-FrWEUwxhDNbE2YN4fyqV5Qrz9qFJbvPoiKrJM7dexkb7eyhepq3dbc5zZgAm/qFBQ+XxGQQVJ4swXxKT+338fw==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0" + "@typespec/compiler": "^1.10.0" } }, "node_modules/@typespec/http": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.9.1.tgz", - "integrity": "sha512-agcwmbB/hK/o9KmM38UB8OGZwLgB17lJ7b4EjqYGpyshqcRMTESMRxnJIH7rRzUq4HJDTqal0tsb8z0K0zXuDg==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.10.0.tgz", + "integrity": "sha512-/fj55fmUj4m/FmNdfH0V52menVrmS2r5Xj9d1H+pnjQbxvvaxS906RSRcoF8kbg3PvlibP/Py5u82TAk53AyqA==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/streams": "^0.79.0" + "@typespec/compiler": "^1.10.0", + "@typespec/streams": "^0.80.0" }, "peerDependenciesMeta": { "@typespec/streams": { @@ -2492,59 +2492,59 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.33-dev.5", - "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33-dev.5.tgz", - "integrity": "sha512-C5lg4ZF2BC5b4mebR32iID+zaETSJQyDEu+vVjSGOp7BjlpviFhgLYw3zMwI8u8Q0FVUAW1WvVVjRZ5X/X74GA==", + "version": "0.1.0-alpha.33", + "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33.tgz", + "integrity": "sha512-O3kYubDHi8wo1ZjTWKPBiz0OrBPHsWexN03zFHE91JnHv4SnfXXN+O2oxeTjqQh/ycKbVTb1k8LBImDiFW5Wnw==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.12 || >= 0.1.0-alpha.13-dev.1", - "@typespec/spector": "^0.1.0-alpha.23 || >= 0.1.0-alpha.24-dev.4", + "@typespec/spec-api": "^0.1.0-alpha.13", + "@typespec/spector": "^0.1.0-alpha.24", "deep-equal": "^2.2.0" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0 || >= 1.10.0-dev.15", - "@typespec/http": "^1.9.1 || >= 1.10.0-dev.5", - "@typespec/rest": "^0.79.0 || >= 0.80.0-dev.2", - "@typespec/versioning": "^0.79.0 || >= 0.80.0-dev.3", - "@typespec/xml": "^0.79.0 || >= 0.80.0-dev.2" + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/versioning": "^0.80.0", + "@typespec/xml": "^0.80.0" } }, "node_modules/@typespec/openapi": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.9.0.tgz", - "integrity": "sha512-5ieXCWRLcyFLv3IFk26ena/RW/NxvT5KiHaoNVFRd79J0XZjFcE0Od6Lxxqj4dWmCo3C8oKtOwFoQuie18G3lQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.10.0.tgz", + "integrity": "sha512-tukmyp+c9CFlA2FdF61XfT9eTe5WXWz6J8pOrJ9+IYg0BcBwhJkvDj6BYpDD6SjxbRr1wO5ZL2Whe6MequsyVw==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0" + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0" } }, "node_modules/@typespec/rest": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.79.0.tgz", - "integrity": "sha512-6QIX7oaUGy/z4rseUrC86LjHxZn8rAAY4fXvGnlPRce6GhEdTb9S9OQPmlPeWngXwCx/07P2+FCR915APqmZxg==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.80.0.tgz", + "integrity": "sha512-xczXLoB2akSIDner41gQYTS9CG6TdCN0QHYvXBT6ZrYEnBh+pMvdymW//5CSOTamZLOGo9AOJVJaFfwbFA4vQQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0" + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0" } }, "node_modules/@typespec/spec-api": { - "version": "0.1.0-alpha.12", - "resolved": "https://registry.npmjs.org/@typespec/spec-api/-/spec-api-0.1.0-alpha.12.tgz", - "integrity": "sha512-cAJ1vj6qk2Vw5g1uesohBItA6fl8KqrTRIwj0DdpPaBtQeaUS7yRJZgGQQz/JLeqDj2B+8z2pooLuvEBtnS+jA==", + "version": "0.1.0-alpha.13", + "resolved": "https://registry.npmjs.org/@typespec/spec-api/-/spec-api-0.1.0-alpha.13.tgz", + "integrity": "sha512-ed0qqGM92vKuangmENUYMeDQZpSlsEMYdeH7+wMl+bIgXzfZ7yv07fNwcmROzSEJd0CzdCTgz+Hp+ifmR4USNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2557,35 +2557,67 @@ } }, "node_modules/@typespec/spec-coverage-sdk": { - "version": "0.1.0-alpha.15", - "resolved": "https://registry.npmjs.org/@typespec/spec-coverage-sdk/-/spec-coverage-sdk-0.1.0-alpha.15.tgz", - "integrity": "sha512-Y7SxNBEouGBlMIw5nD+skCYX8FkM2v1CxW79VjqX+iigJQsh2ML0F/G1Zh551l2Dr7zuMv+0qiPrmOC5v3yEgQ==", + "version": "0.1.0-alpha.16", + "resolved": "https://registry.npmjs.org/@typespec/spec-coverage-sdk/-/spec-coverage-sdk-0.1.0-alpha.16.tgz", + "integrity": "sha512-qwSnuE+CXjv4mn2uhioTVlaO4GjypR4ZtbkSoLmWA677ggYmoAjIDpyNgT1tjsc1lDKVtSiPvGhM9XFKExVmbQ==", "dev": true, "license": "MIT", "dependencies": { "@azure/identity": "~4.13.0", - "@azure/storage-blob": "~12.30.0", - "@types/node": "~25.0.2" + "@azure/storage-blob": "~12.31.0", + "@types/node": "~25.3.0", + "@types/semver": "^7.5.8", + "semver": "^7.7.1" }, "engines": { "node": ">=16.0.0" } }, + "node_modules/@typespec/spec-coverage-sdk/node_modules/@types/node": { + "version": "25.3.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.3.5.tgz", + "integrity": "sha512-oX8xrhvpiyRCQkG1MFchB09f+cXftgIXb3a7UUa4Y3wpmZPw5tyZGTLWhlESOLq1Rq6oDlc8npVU2/9xiCuXMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@typespec/spec-coverage-sdk/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typespec/spec-coverage-sdk/node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "dev": true, + "license": "MIT" + }, "node_modules/@typespec/spector": { - "version": "0.1.0-alpha.23", - "resolved": "https://registry.npmjs.org/@typespec/spector/-/spector-0.1.0-alpha.23.tgz", - "integrity": "sha512-z5ORR/HnaLKYcTL2a73sUfC4LmuOqlCRmSPF8h5NtUNDpER3s4aLlFu4DgcaVYTgHruiBLMkLyHpfNPxKDzY7g==", + "version": "0.1.0-alpha.24", + "resolved": "https://registry.npmjs.org/@typespec/spector/-/spector-0.1.0-alpha.24.tgz", + "integrity": "sha512-POUSFunRZ4UbPEs+YLz0vE9tDoc6chQ/61moyiWO/k4hD2R1KTH0qlRHhuKW8/Y2wa8Jbuex39Ft/O3reHZSTQ==", "dev": true, "license": "MIT", "dependencies": { "@azure/identity": "~4.13.0", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/rest": "^0.79.0", - "@typespec/spec-api": "^0.1.0-alpha.12", - "@typespec/spec-coverage-sdk": "^0.1.0-alpha.15", - "@typespec/versioning": "^0.79.0", - "ajv": "~8.17.1", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/spec-api": "^0.1.0-alpha.13", + "@typespec/spec-coverage-sdk": "^0.1.0-alpha.16", + "@typespec/versioning": "^0.80.0", + "ajv": "~8.18.0", "body-parser": "^2.2.0", "deep-equal": "^2.2.0", "express": "^5.2.1", @@ -2675,38 +2707,38 @@ } }, "node_modules/@typespec/sse": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.79.0.tgz", - "integrity": "sha512-YQYlDWCNBza75S360jc51emwntWXMZfkvqXKng+etKP4iCuogJfTX1J8h1yd8tZwkuUNBcklEPCuz3O/+psopg==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.80.0.tgz", + "integrity": "sha512-/lxYgMaxgEcjBVhep9tf/VnFD2wnkZlkmjUHLeZL8Cuf+qip61Ren6Ml91YtNnnIFYsuuymDzRclrA073ZBR6Q==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0", - "@typespec/events": "^0.79.0", - "@typespec/http": "^1.9.0", - "@typespec/streams": "^0.79.0" + "@typespec/compiler": "^1.10.0", + "@typespec/events": "^0.80.0", + "@typespec/http": "^1.10.0", + "@typespec/streams": "^0.80.0" } }, "node_modules/@typespec/streams": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.79.0.tgz", - "integrity": "sha512-nOXpLcEYNdWvLY/6WJ16rD6hGs7bKSmkH+WwgyVwdRON5KJ559quw56pns2DSANw+NaV0lJxJq/8ek5xKCGD6g==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.80.0.tgz", + "integrity": "sha512-lNvzrvX/ZRIxRpxIBZu90XNsT+uWsMbLtxHd9edspHAiID3c9WKZbl2fnLcPqdR/60odqKve4yGzB9gF58GUDQ==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0" + "@typespec/compiler": "^1.10.0" } }, "node_modules/@typespec/ts-http-runtime": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.3.tgz", - "integrity": "sha512-91fp6CAAJSRtH5ja95T1FHSKa8aPW9/Zw6cta81jlZTUw/+Vq8jM/AfF/14h2b71wwR84JUTW/3Y8QPhDAawFA==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.4.tgz", + "integrity": "sha512-CI0NhTrz4EBaa0U+HaaUZrJhPoso8sG7ZFya8uQoBA57fjzrjRSv87ekCjLZOFExN+gXE/z0xuN2QfH4H2HrLQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2719,29 +2751,29 @@ } }, "node_modules/@typespec/versioning": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.79.0.tgz", - "integrity": "sha512-mk65zpKNm+ARyHASnre/lp3o3FKzb0P8Nj96ji182JUy7ShrVCCF0u+bC+ZXQ8ZTRza1d0xBjRC/Xr4iM+Uwag==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.80.0.tgz", + "integrity": "sha512-WQCT0jN2lSRfwOy+Cd1KUYzenpKR5TdoX0uW6zQdvxQ9nQZIXoaSaReh9/ldhmSV4xv3p2dqF9oq1cdbVGfJTg==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0" + "@typespec/compiler": "^1.10.0" } }, "node_modules/@typespec/xml": { - "version": "0.79.0", - "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.79.0.tgz", - "integrity": "sha512-BqbbtkL9xuiAhehHKKUCMtRg0a1vjSvoiAOanvTIuoFq3N8PbKVV3dKTcyI/oS3iCCkJErdu11HQcAoD/VsIsA==", + "version": "0.80.0", + "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.80.0.tgz", + "integrity": "sha512-Qfy5eyCcOF3xYOU/dejhpmmeY75U1Q9C8XBE+GvSZ3lakRfKBIpT+X6Q07qmKSAbGYJZKYLWCIAy/dgCuu/OAA==", "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.9.0" + "@typespec/compiler": "^1.10.0" } }, "node_modules/@vitest/expect": { @@ -2903,10 +2935,11 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -3653,12 +3686,16 @@ } }, "node_modules/env-paths": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", - "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-4.0.0.tgz", + "integrity": "sha512-pxP8eL2SwwaTRi/KHYwLYXinDs7gL3jxFcBYmEdYfZmZXbaVDvdppd0XBU8qVz03rDfKZMXg1omHCbsJjZrMsw==", "dev": true, + "license": "MIT", + "dependencies": { + "is-safe-filename": "^0.1.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -4125,9 +4162,9 @@ "peer": true }, "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", "dev": true, "funding": [ { @@ -4138,12 +4175,29 @@ "type": "opencollective", "url": "https://opencollective.com/fastify" } - ] + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-builder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-xml-builder/-/fast-xml-builder-1.1.0.tgz", + "integrity": "sha512-7mtITW/we2/wTUZqMyBOR2F8xP4CRxMiSEcQxPIqdRWdO2L/HZSOlzoNyghmyDwNB8BDxePooV1ZTJpkOUhdRg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.1.2" + } }, "node_modules/fast-xml-parser": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.3.5.tgz", - "integrity": "sha512-JeaA2Vm9ffQKp9VjvfzObuMCjUYAp5WDYhRYL5LrBPY/jUDlUtOvDfot0vKSkB9tuX885BDHjtw4fZadD95wnA==", + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.5.1.tgz", + "integrity": "sha512-JTpMz8P5mDoNYzXTmTT/xzWjFiCWi0U+UQTJtrFH9muXsr2RqtXZPbnCW5h2mKsOd4u3XcPWCvDSrnaBPlUcMQ==", "dev": true, "funding": [ { @@ -4153,6 +4207,8 @@ ], "license": "MIT", "dependencies": { + "fast-xml-builder": "^1.1.0", + "path-expression-matcher": "^1.1.2", "strnum": "^2.1.2" }, "bin": { @@ -4999,6 +5055,19 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-safe-filename": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-safe-filename/-/is-safe-filename-0.1.1.tgz", + "integrity": "sha512-4SrR7AdnY11LHfDKTZY1u6Ga3RuxZdl3YKWWShO5iyuG5h8QS4GD2tOb04peBJ5I7pXbR+CGBNEhTcwK+FzN3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-set": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", @@ -5106,9 +5175,9 @@ } }, "node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "dev": true, "license": "MIT", "dependencies": { @@ -5226,7 +5295,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -5517,16 +5587,6 @@ "node": "*" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -5549,19 +5609,6 @@ "node": ">= 18" } }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/morgan": { "version": "1.10.1", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.1.tgz", @@ -5617,22 +5664,23 @@ "license": "MIT" }, "node_modules/multer": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/multer/-/multer-2.0.2.tgz", - "integrity": "sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-2.1.1.tgz", + "integrity": "sha512-mo+QTzKlx8R7E5ylSXxWzGoXoZbOsRMpyitcht8By2KHvMbf3tjwosZ/Mu/XYU6UuJ3VZnODIrak5ZrPiPyB6A==", "dev": true, "license": "MIT", "dependencies": { "append-field": "^1.0.0", "busboy": "^1.6.0", "concat-stream": "^2.0.0", - "mkdirp": "^0.5.6", - "object-assign": "^4.1.1", - "type-is": "^1.6.18", - "xtend": "^4.0.2" + "type-is": "^1.6.18" }, "engines": { "node": ">= 10.16.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/multer/node_modules/media-typer": { @@ -5736,16 +5784,6 @@ "node": ">= 0.6" } }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/object-inspect": { "version": "1.13.4", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", @@ -5956,6 +5994,22 @@ "node": ">=8" } }, + "node_modules/path-expression-matcher": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/path-expression-matcher/-/path-expression-matcher-1.1.2.tgz", + "integrity": "sha512-LXWqJmcpp2BKOEmgt4CyuESFmBfPuhJlAHKJsFzuJU6CxErWk75BrO+Ni77M9OxHN6dCYKM4vj+21Z6cOL96YQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -6128,9 +6182,9 @@ } }, "node_modules/qs": { - "version": "6.14.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.14.1.tgz", - "integrity": "sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.0.tgz", + "integrity": "sha512-mAZTtNCeetKMH+pSjrb76NAM8V9a05I9aBZOHztWy/UqcJdQYNsf59vrRKWnojAT9Y+GbIvoTBC++CPHqpDBhQ==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6239,6 +6293,7 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6436,9 +6491,9 @@ "license": "MIT" }, "node_modules/sax": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.4.tgz", - "integrity": "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.5.0.tgz", + "integrity": "sha512-21IYA3Q5cQf089Z6tgaUTr7lDAyzoTPx5HRtbhsME8Udispad8dC/+sziTNugOEx54ilvatQ9YCzl4KQLPcRHA==", "dev": true, "license": "BlueOak-1.0.0", "engines": { @@ -6869,9 +6924,9 @@ } }, "node_modules/strnum": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", - "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.0.tgz", + "integrity": "sha512-Y7Bj8XyJxnPAORMZj/xltsfo55uOiyHcU2tnAVzHUnSJR/KsEX+9RoDeXEnsXtl/CX4fAcrt64gZ13aGaWPeBg==", "dev": true, "funding": [ { @@ -7590,9 +7645,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", "dev": true, "license": "MIT", "dependencies": { @@ -7819,16 +7874,6 @@ "node": ">=4.0" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index ba7646b2abc..32872409918 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -1,6 +1,6 @@ { "name": "@typespec/http-client-python", - "version": "0.27.2", + "version": "0.28.0", "author": "Microsoft Corporation", "description": "TypeSpec emitter for Python SDKs", "homepage": "https://typespec.io", @@ -54,20 +54,20 @@ "emitter" ], "peerDependencies": { - "@azure-tools/typespec-autorest": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-core": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-resource-manager": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-azure-rulesets": ">=0.65.0 <1.0.0", - "@azure-tools/typespec-client-generator-core": ">=0.65.3 <1.0.0", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": ">=0.79.0 <1.0.0", - "@typespec/versioning": ">=0.79.0 <1.0.0", - "@typespec/events": ">=0.79.0 <1.0.0", - "@typespec/sse": ">=0.79.0 <1.0.0", - "@typespec/streams": ">=0.79.0 <1.0.0", - "@typespec/xml": ">=0.79.0 <1.0.0" + "@azure-tools/typespec-autorest": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-core": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-resource-manager": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-azure-rulesets": ">=0.65.1 <1.0.0", + "@azure-tools/typespec-client-generator-core": ">=0.66.0 <1.0.0", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": ">=0.80.0 <1.0.0", + "@typespec/versioning": ">=0.80.0 <1.0.0", + "@typespec/events": ">=0.80.0 <1.0.0", + "@typespec/sse": ">=0.80.0 <1.0.0", + "@typespec/streams": ">=0.80.0 <1.0.0", + "@typespec/xml": ">=0.80.0 <1.0.0" }, "dependencies": { "js-yaml": "~4.1.0", @@ -77,24 +77,24 @@ "tsx": "^4.21.0" }, "devDependencies": { - "@azure-tools/typespec-autorest": "~0.65.0", - "@azure-tools/typespec-azure-core": "~0.65.0", - "@azure-tools/typespec-azure-resource-manager": "~0.65.0", - "@azure-tools/typespec-azure-rulesets": "~0.65.0", - "@azure-tools/typespec-client-generator-core": "~0.65.3", - "@azure-tools/azure-http-specs": "0.1.0-alpha.38-dev.6", - "@typespec/compiler": "^1.9.0", - "@typespec/http": "^1.9.0", - "@typespec/openapi": "^1.9.0", - "@typespec/rest": "~0.79.0", - "@typespec/versioning": "~0.79.0", - "@typespec/events": "~0.79.0", - "@typespec/spector": "0.1.0-alpha.23", - "@typespec/spec-api": "0.1.0-alpha.12", - "@typespec/sse": "~0.79.0", - "@typespec/streams": "~0.79.0", - "@typespec/xml": "~0.79.0", - "@typespec/http-specs": "0.1.0-alpha.33-dev.5", + "@azure-tools/typespec-autorest": "~0.66.0", + "@azure-tools/typespec-azure-core": "~0.66.0", + "@azure-tools/typespec-azure-resource-manager": "~0.66.0", + "@azure-tools/typespec-azure-rulesets": "~0.65.1", + "@azure-tools/typespec-client-generator-core": "~0.66.0", + "@azure-tools/azure-http-specs": "0.1.0-alpha.38", + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/openapi": "^1.10.0", + "@typespec/rest": "~0.80.0", + "@typespec/versioning": "~0.80.0", + "@typespec/events": "~0.80.0", + "@typespec/spector": "0.1.0-alpha.24", + "@typespec/spec-api": "0.1.0-alpha.13", + "@typespec/sse": "~0.80.0", + "@typespec/streams": "~0.80.0", + "@typespec/xml": "~0.80.0", + "@typespec/http-specs": "0.1.0-alpha.33", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", From 83da113cf29a767ca6a8d2004bc4ab632b8e6212 Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Wed, 11 Mar 2026 02:25:34 +0000 Subject: [PATCH 10/14] prepare new specs version --- packages/http-client-python/package-lock.json | 22 +++++++++---------- packages/http-client-python/package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 0a6490eb63c..9e7fdb5c707 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -29,7 +29,7 @@ "@typespec/compiler": "^1.10.0", "@typespec/events": "~0.80.0", "@typespec/http": "^1.10.0", - "@typespec/http-specs": "0.1.0-alpha.33", + "@typespec/http-specs": "https://pkg.pr.new/@typespec/http-specs@9987", "@typespec/openapi": "^1.10.0", "@typespec/rest": "~0.80.0", "@typespec/spec-api": "0.1.0-alpha.13", @@ -2492,25 +2492,25 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33.tgz", - "integrity": "sha512-O3kYubDHi8wo1ZjTWKPBiz0OrBPHsWexN03zFHE91JnHv4SnfXXN+O2oxeTjqQh/ycKbVTb1k8LBImDiFW5Wnw==", + "version": "0.1.0-pr.9987.3983", + "resolved": "https://pkg.pr.new/@typespec/http-specs@9987", + "integrity": "sha512-7tKQ0wvALaH4r//LN2zLkOz+kqx7z5TU4oFF2PFpYvDDyjYBV/DH2jFsp3p7So969Z4SLyeu+ddYBKIsjP+g9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.13", - "@typespec/spector": "^0.1.0-alpha.24", + "@typespec/spec-api": "^0.1.0-alpha.13 || >= 0.1.0-pr.9987.3983", + "@typespec/spector": "^0.1.0-alpha.24 || >= 0.1.0-pr.9987.3983", "deep-equal": "^2.2.0" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.10.0", - "@typespec/http": "^1.10.0", - "@typespec/rest": "^0.80.0", - "@typespec/versioning": "^0.80.0", - "@typespec/xml": "^0.80.0" + "@typespec/compiler": "^1.10.0 || >= 1.11.0-pr.9987.3983", + "@typespec/http": "^1.10.0 || >= 1.11.0-pr.9987.3983", + "@typespec/rest": "^0.80.0 || >= 0.81.0-pr.9987.3983", + "@typespec/versioning": "^0.80.0 || >= 0.81.0-pr.9987.3983", + "@typespec/xml": "^0.80.0 || >= 0.81.0-pr.9987.3983" } }, "node_modules/@typespec/openapi": { diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 32872409918..308195d0eb2 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -94,7 +94,7 @@ "@typespec/sse": "~0.80.0", "@typespec/streams": "~0.80.0", "@typespec/xml": "~0.80.0", - "@typespec/http-specs": "0.1.0-alpha.33", + "@typespec/http-specs": "https://pkg.pr.new/@typespec/http-specs@9987", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", From 85d760fe5c7756cdbb5caec63c14cea944f6348c Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Wed, 11 Mar 2026 04:51:14 +0000 Subject: [PATCH 11/14] update test case --- .../mock_api_tests/asynctests/test_special_words_async.py | 3 +-- .../generator/test/azure/mock_api_tests/test_special_words.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py index 39a150e4db9..6c01e8f0737 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/asynctests/test_special_words_async.py @@ -6,7 +6,6 @@ import pytest from specialwords.aio import SpecialWordsClient from specialwords import models -from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -68,5 +67,5 @@ async def test_model_properties_with_list(client: SpecialWordsClient): @pytest.mark.asyncio async def test_extensible_strings(client: SpecialWordsClient): - for enum_value in extensible_strings_models.ExtensibleString: + for enum_value in models.ExtensibleString: assert enum_value == await client.extensible_strings.put_extensible_string_value(body=enum_value) diff --git a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py index 2f591680bb2..ab23b59409f 100644 --- a/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py +++ b/packages/http-client-python/generator/test/azure/mock_api_tests/test_special_words.py @@ -5,7 +5,6 @@ # -------------------------------------------------------------------------- import pytest from specialwords import SpecialWordsClient, models -from specialwords.extensiblestrings import models as extensible_strings_models @pytest.fixture @@ -60,5 +59,5 @@ def test_model_properties_with_list(client: SpecialWordsClient): def test_extensible_strings(client: SpecialWordsClient): - for enum_value in extensible_strings_models.ExtensibleString: + for enum_value in models.ExtensibleString: assert enum_value == client.extensible_strings.put_extensible_string_value(body=enum_value) From 1f0b36580e84a1e57d63de22a2371efa66ccae9b Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Wed, 11 Mar 2026 15:31:54 +0800 Subject: [PATCH 12/14] update --- packages/http-client-python/package-lock.json | 32 +++++++++---------- packages/http-client-python/package.json | 6 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 9e7fdb5c707..933c0179633 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -22,14 +22,14 @@ "@azure-tools/typespec-azure-core": "~0.66.0", "@azure-tools/typespec-azure-resource-manager": "~0.66.0", "@azure-tools/typespec-azure-rulesets": "~0.65.1", - "@azure-tools/typespec-client-generator-core": "~0.66.0", + "@azure-tools/typespec-client-generator-core": "~0.66.1", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", "@typespec/compiler": "^1.10.0", "@typespec/events": "~0.80.0", "@typespec/http": "^1.10.0", - "@typespec/http-specs": "https://pkg.pr.new/@typespec/http-specs@9987", + "@typespec/http-specs": "0.1.0-alpha.33", "@typespec/openapi": "^1.10.0", "@typespec/rest": "~0.80.0", "@typespec/spec-api": "0.1.0-alpha.13", @@ -53,7 +53,7 @@ "@azure-tools/typespec-azure-core": ">=0.66.0 <1.0.0", "@azure-tools/typespec-azure-resource-manager": ">=0.66.0 <1.0.0", "@azure-tools/typespec-azure-rulesets": ">=0.65.1 <1.0.0", - "@azure-tools/typespec-client-generator-core": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-client-generator-core": ">=0.66.1 <1.0.0", "@typespec/compiler": "^1.10.0", "@typespec/events": ">=0.80.0 <1.0.0", "@typespec/http": "^1.10.0", @@ -167,9 +167,9 @@ } }, "node_modules/@azure-tools/typespec-client-generator-core": { - "version": "0.66.0", - "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.66.0.tgz", - "integrity": "sha512-ITg9Ls1p0vr1nTM6BaeO+u3p5+jkJ6JtzomrUAhgBNQUZGsC5MIOt4leOJf8XMBCwW3WFLIRRVF86xMgamMfDA==", + "version": "0.66.1", + "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.66.1.tgz", + "integrity": "sha512-aGxEeuk5fqeb9YfalNWTQtAVLIzPkbxObcmCH02XtHvd4Vd2u1hy4l714OB3rz0V+xR30IOSRGLfFnbEv3c1oA==", "dev": true, "license": "MIT", "dependencies": { @@ -2492,25 +2492,25 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-pr.9987.3983", - "resolved": "https://pkg.pr.new/@typespec/http-specs@9987", - "integrity": "sha512-7tKQ0wvALaH4r//LN2zLkOz+kqx7z5TU4oFF2PFpYvDDyjYBV/DH2jFsp3p7So969Z4SLyeu+ddYBKIsjP+g9Q==", + "version": "0.1.0-alpha.33", + "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33.tgz", + "integrity": "sha512-O3kYubDHi8wo1ZjTWKPBiz0OrBPHsWexN03zFHE91JnHv4SnfXXN+O2oxeTjqQh/ycKbVTb1k8LBImDiFW5Wnw==", "dev": true, "license": "MIT", "dependencies": { - "@typespec/spec-api": "^0.1.0-alpha.13 || >= 0.1.0-pr.9987.3983", - "@typespec/spector": "^0.1.0-alpha.24 || >= 0.1.0-pr.9987.3983", + "@typespec/spec-api": "^0.1.0-alpha.13", + "@typespec/spector": "^0.1.0-alpha.24", "deep-equal": "^2.2.0" }, "engines": { "node": ">=16.0.0" }, "peerDependencies": { - "@typespec/compiler": "^1.10.0 || >= 1.11.0-pr.9987.3983", - "@typespec/http": "^1.10.0 || >= 1.11.0-pr.9987.3983", - "@typespec/rest": "^0.80.0 || >= 0.81.0-pr.9987.3983", - "@typespec/versioning": "^0.80.0 || >= 0.81.0-pr.9987.3983", - "@typespec/xml": "^0.80.0 || >= 0.81.0-pr.9987.3983" + "@typespec/compiler": "^1.10.0", + "@typespec/http": "^1.10.0", + "@typespec/rest": "^0.80.0", + "@typespec/versioning": "^0.80.0", + "@typespec/xml": "^0.80.0" } }, "node_modules/@typespec/openapi": { diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 308195d0eb2..32093c5984d 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -58,7 +58,7 @@ "@azure-tools/typespec-azure-core": ">=0.66.0 <1.0.0", "@azure-tools/typespec-azure-resource-manager": ">=0.66.0 <1.0.0", "@azure-tools/typespec-azure-rulesets": ">=0.65.1 <1.0.0", - "@azure-tools/typespec-client-generator-core": ">=0.66.0 <1.0.0", + "@azure-tools/typespec-client-generator-core": ">=0.66.1 <1.0.0", "@typespec/compiler": "^1.10.0", "@typespec/http": "^1.10.0", "@typespec/openapi": "^1.10.0", @@ -81,7 +81,7 @@ "@azure-tools/typespec-azure-core": "~0.66.0", "@azure-tools/typespec-azure-resource-manager": "~0.66.0", "@azure-tools/typespec-azure-rulesets": "~0.65.1", - "@azure-tools/typespec-client-generator-core": "~0.66.0", + "@azure-tools/typespec-client-generator-core": "~0.66.1", "@azure-tools/azure-http-specs": "0.1.0-alpha.38", "@typespec/compiler": "^1.10.0", "@typespec/http": "^1.10.0", @@ -94,7 +94,7 @@ "@typespec/sse": "~0.80.0", "@typespec/streams": "~0.80.0", "@typespec/xml": "~0.80.0", - "@typespec/http-specs": "https://pkg.pr.new/@typespec/http-specs@9987", + "@typespec/http-specs": "0.1.0-alpha.33", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", From d311795138afbdc0b590778fbc2e0e87bc4f125c Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 12 Mar 2026 08:37:45 +0800 Subject: [PATCH 13/14] update --- packages/http-client-python/package-lock.json | 8 ++++---- packages/http-client-python/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 933c0179633..3fa3f6f20e8 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -29,7 +29,7 @@ "@typespec/compiler": "^1.10.0", "@typespec/events": "~0.80.0", "@typespec/http": "^1.10.0", - "@typespec/http-specs": "0.1.0-alpha.33", + "@typespec/http-specs": "0.1.0-alpha.34", "@typespec/openapi": "^1.10.0", "@typespec/rest": "~0.80.0", "@typespec/spec-api": "0.1.0-alpha.13", @@ -2492,9 +2492,9 @@ } }, "node_modules/@typespec/http-specs": { - "version": "0.1.0-alpha.33", - "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.33.tgz", - "integrity": "sha512-O3kYubDHi8wo1ZjTWKPBiz0OrBPHsWexN03zFHE91JnHv4SnfXXN+O2oxeTjqQh/ycKbVTb1k8LBImDiFW5Wnw==", + "version": "0.1.0-alpha.34", + "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.34.tgz", + "integrity": "sha512-xyOOFVUjBgZLYeDaoaZ6Mj6DoLjvDhhUvSRZIpWroAUHL+P30XR2wZ6dKLtOgF9uPn7S2MvpSvAAs4Z+mYh9YQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 32093c5984d..68081dda5c8 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -94,7 +94,7 @@ "@typespec/sse": "~0.80.0", "@typespec/streams": "~0.80.0", "@typespec/xml": "~0.80.0", - "@typespec/http-specs": "0.1.0-alpha.33", + "@typespec/http-specs": "0.1.0-alpha.34", "@types/js-yaml": "~4.0.5", "@types/node": "~25.0.2", "@types/semver": "7.5.8", From beb28fcba46e6495659f6b01986096b42892ea9f Mon Sep 17 00:00:00 2001 From: Yuchao Yan Date: Thu, 12 Mar 2026 10:19:45 +0800 Subject: [PATCH 14/14] fix enum value --- .../generator/pygen/preprocess/__init__.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/http-client-python/generator/pygen/preprocess/__init__.py b/packages/http-client-python/generator/pygen/preprocess/__init__.py index 5a784c2a783..843418bc529 100644 --- a/packages/http-client-python/generator/pygen/preprocess/__init__.py +++ b/packages/http-client-python/generator/pygen/preprocess/__init__.py @@ -265,10 +265,11 @@ def update_types(self, yaml_data: list[dict[str, Any]]) -> None: property["clientName"].lower(), PadType.PROPERTY, property ) add_redefined_builtin_info(property["clientName"], property) - if type.get("name") and type["type"] != "enumvalue": + if type.get("name"): pad_type = PadType.MODEL if type["type"] == "model" else PadType.ENUM_CLASS - name = self.pad_reserved_words(type["name"], pad_type, type) - type["name"] = name[0].upper() + name[1:] + if type["type"] != "enumvalue": + name = self.pad_reserved_words(type["name"], pad_type, type) + type["name"] = name[0].upper() + name[1:] type["description"] = update_description(type.get("description", ""), type["name"]) type["snakeCaseName"] = to_snake_case(type["name"]) if type.get("values"):