From 551368a5c833a54f4b5ca1d4ac91e950ecca8af3 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 25 Jun 2025 13:58:34 -0700 Subject: [PATCH 01/40] add pyproject.toml template to packaging files --- cspell.yaml | 1 + .../pygen/codegen/serializers/__init__.py | 3 +- .../packaging_templates/pyproject.toml.jinja2 | 88 +++++++ packages/http-client-python/package-lock.json | 234 +++++------------- packages/http-client-python/package.json | 21 +- 5 files changed, 158 insertions(+), 189 deletions(-) create mode 100644 packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 diff --git a/cspell.yaml b/cspell.yaml index 010570daa59..5aef9618a5e 100644 --- a/cspell.yaml +++ b/cspell.yaml @@ -198,6 +198,7 @@ words: - pyright - pyrightconfig - pytest + - pytyped - pyyaml - rcfile - reactivex 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 eb35487d670..09665c1b0ff 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -54,9 +54,10 @@ "MANIFEST.in.jinja2", "README.md.jinja2", "setup.py.jinja2", + "pyproject.py.jinja2", ] -_REGENERATE_FILES = {"setup.py", "MANIFEST.in"} +_REGENERATE_FILES = {"setup.py", "MANIFEST.in", "pyproject.toml"} AsyncInfo = namedtuple("AsyncInfo", ["async_mode", "async_path"]) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 new file mode 100644 index 00000000000..a18f1326cd7 --- /dev/null +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -0,0 +1,88 @@ +{% set min_version = MIN_PYTHON_VERSION.split('.')[1] | int %} +{% set max_version = MAX_PYTHON_VERSION.split('.')[1] | int %} +{% if code_model.license_header %} +{{ code_model.license_header }} +{% endif %} + +[build-system] +requires = ["setuptools>=61.0.0", "wheel"] # Requires 61.0.0 for dynamic version +build-backend = "setuptools.build_meta" + +[project] +name = "{{ package_name|lower }}" +{% if package_mode %} +authors = [ + { name = "{{ code_model.company_name }}"{% if code_model.is_azure_flavor %}, email = "azpysdkhelp@microsoft.com"{% endif %} }, +] +description = "{{ code_model.company_name }} {{ package_pprint_name }} Client Library for Python" +license = {text = "MIT License"} +classifiers = [ + "Development Status :: {{ dev_status }}", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3", + {% for version in range(min_version, max_version + 1) %} + "Programming Language :: Python :: 3.{{ version }}", + {% endfor %} + "License :: OSI Approved :: MIT License", +] +requires-python = ">={{ MIN_PYTHON_VERSION }}" +{% else %} +description = "{{ package_name }}" +{% endif %} +{% if code_model.is_azure_flavor %} +keywords = ["azure", "azure sdk"] +{% endif %} +## TODO: grab existing one and read in as JSON and parse and keep non-default dependencies. +## Set dependency to max version. +## Always override or never override keys. +dependencies = [ + {% if code_model.is_legacy %} + "msrest>={{ VERSION_MAP['msrest'] }}", + {% else %} + "isodate>={{ VERSION_MAP['isodate'] }}", + {% endif %} + {% if azure_arm %} + "azure-mgmt-core>={{ VERSION_MAP['azure-mgmt-core'] }}", + {% elif code_model.is_azure_flavor %} + "azure-core>={{ VERSION_MAP['azure-core'] }}", + {% else %} + "corehttp[requests]>={{ VERSION_MAP['corehttp'] }}", + {% endif %} + "typing-extensions>={{ VERSION_MAP['typing-extensions'] }}", +] +dynamic = [ + {% if package_mode %}"version", {% endif %}"readme" +] +{% if code_model.is_azure_flavor %} +[project.urls] +repository = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" +{% endif %} + +[tool.setuptools.dynamic] +{% if package_mode %} + {% if code_model.is_tsp %} +version = {attr = "{{ code_model.namespace|lower|replace('.', '/') }}/_version.VERSION"} + {% else %} +version = {attr = "{{ package_name|lower|replace('-', '/') }}/_version.VERSION"} + {% endif %} +{% else %} +version = "{{ package_version }}" +{% endif %}readme = {file = ["README.md"], content-type = "text/markdown"} + +{% if package_mode %} +[tool.setuptools.packages.find] +exclude = [ + "tests*", + {% for pkgutil_name in pkgutil_names %} + "{{ pkgutil_name }}", + {% endfor %} +] + +[tool.setuptools.package-data] +pytyped = ["py.typed"] +{% endif %} + +## TODO: grab existing one and read in as JSON and parse and keep stuff. +[tool.azure-sdk-build] +pyright = false diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 35e2fa35dc7..3f0618555e6 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -10,6 +10,7 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { + "@typespec/http-client-python": "^0.13.0-dev.1", "js-yaml": "~4.1.0", "marked": "^15.0.6", "pyodide": "0.26.2", @@ -91,7 +92,6 @@ "version": "0.57.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.57.0.tgz", "integrity": "sha512-zhDn+hixEfwtmr95RUfnjz9IwITkrxciYrPvE5sYCYfDydlVKWB0Az5xkJS/TTi29PB2gHAsIVceikiYNkfsLQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -111,7 +111,6 @@ "version": "0.57.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.57.0.tgz", "integrity": "sha512-O+F3axrJOJHjYGrQLRWoydHtWjWiXeAlaaILncS0I0xe6kinyFkpn7VIVKxH9ZZ+hPmkDAZybO53656R3PRfUA==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -126,7 +125,6 @@ "version": "0.57.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.57.0.tgz", "integrity": "sha512-KWDEzPTt6ifRjiUiugLyLUiGSSyQLoXxLmz/wpfmxIfvFK5oM0UL+l7K8eC5dob993r2LQvp/2c8EJugeAZ4Ug==", - "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -148,7 +146,6 @@ "version": "0.57.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.57.0.tgz", "integrity": "sha512-O3Qw/RFIkNoJCWfwbg57hmj/GtnfNg3ZpBG6qCrSJSJLt6XG6EZ3yWujCqjx17nOsvAwB/J1+f/t/pFizQhWaw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -164,7 +161,6 @@ "version": "0.57.1", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.57.1.tgz", "integrity": "sha512-R91xwSVDQrAf7wk/u2aJDz/zthGjp+RpziVbFeg4+u4BdPP1+fY4WwXCb3wG4fF8GdlkvYZAE0q+HVPsu15gYg==", - "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -443,7 +439,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -458,7 +453,6 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1077,7 +1071,6 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz", "integrity": "sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1101,7 +1094,6 @@ "version": "5.1.8", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.8.tgz", "integrity": "sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1122,7 +1114,6 @@ "version": "10.1.9", "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.9.tgz", "integrity": "sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==", - "dev": true, "dependencies": { "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.5", @@ -1149,7 +1140,6 @@ "version": "4.2.9", "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.9.tgz", "integrity": "sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1171,7 +1161,6 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.11.tgz", "integrity": "sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1193,7 +1182,6 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", - "dev": true, "engines": { "node": ">=18" } @@ -1202,7 +1190,6 @@ "version": "4.1.8", "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.8.tgz", "integrity": "sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1223,7 +1210,6 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.11.tgz", "integrity": "sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1244,7 +1230,6 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.11.tgz", "integrity": "sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1266,7 +1251,6 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.0.tgz", "integrity": "sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==", - "dev": true, "dependencies": { "@inquirer/checkbox": "^4.1.4", "@inquirer/confirm": "^5.1.8", @@ -1295,7 +1279,6 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.11.tgz", "integrity": "sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1317,7 +1300,6 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.11.tgz", "integrity": "sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1340,7 +1322,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.0.tgz", "integrity": "sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==", - "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1364,7 +1345,6 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz", "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==", - "dev": true, "engines": { "node": ">=18" }, @@ -1381,7 +1361,6 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1398,7 +1377,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "engines": { "node": ">=12" }, @@ -1410,7 +1388,6 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1427,7 +1404,6 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dev": true, "dependencies": { "minipass": "^7.0.4" }, @@ -1473,7 +1449,6 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1486,7 +1461,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, "engines": { "node": ">= 8" } @@ -1495,7 +1469,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1508,7 +1481,6 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, "optional": true, "engines": { "node": ">=14" @@ -1765,7 +1737,6 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "dev": true, "engines": { "node": ">=18" }, @@ -1802,7 +1773,7 @@ "version": "22.13.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", - "dev": true, + "devOptional": true, "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -2014,7 +1985,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.1.0.tgz", "integrity": "sha512-dtwosIqd2UUEEIVBR+oDiUtN4n1lP8/9GxQVno+wbkijQgKDj4Hg0Vaq6HG4BduF7RptDdtzkdGQCS9CgOIdRA==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "~7.27.1", @@ -2047,7 +2017,6 @@ "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", - "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2060,7 +2029,6 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.3.0.tgz", "integrity": "sha512-qNsTkX9K8hi+FHDfHmf22e/OGuXmfBm9RqNismxBrnSmZVJKegQ+HYYXT+R7Ha8F/YSm2Y34vmzD4cxMu2u95g==", - "dev": true, "license": "MIT", "dependencies": { "temporal-spec": "0.3.0" @@ -2070,14 +2038,12 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.3.0.tgz", "integrity": "sha512-n+noVpIqz4hYgFSMOSiINNOUOMFtV5cZQNCmmszA6GiVFVRt3G7AqVyhXjhCSmowvQn+NsGn+jMDMKJYHd3bSQ==", - "dev": true, "license": "ISC" }, "node_modules/@typespec/events": { "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.71.0.tgz", "integrity": "sha512-dJeyqBGqTTSlFDVWpdqeMjDpEyRmenH3yDABK3T/30MrO94sdXigxmeBnPCcOaaqst6pV3anFuKwfAqEN3GnbA==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2090,7 +2056,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.1.0.tgz", "integrity": "sha512-1doVGmkv3N8l57fVuci4jGMZ61EZBlDzuNZO2b9o0+mexCOs/P96CIpFkaNVvTQgjpyFsW1DlXiUKAvUC9zQfg==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2105,6 +2070,39 @@ } } }, + "node_modules/@typespec/http-client-python": { + "version": "0.13.0-dev.1", + "resolved": "https://registry.npmjs.org/@typespec/http-client-python/-/http-client-python-0.13.0-dev.1.tgz", + "integrity": "sha512-b0xZQ6/1rlSspbPIPJ//GAAfeENb196+FNg8Pum+mZch+hffZsChY0WPou1Wow6nXy6rATXeoRwfAqAuMM4jdQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "js-yaml": "~4.1.0", + "marked": "^15.0.6", + "pyodide": "0.26.2", + "semver": "~7.6.2", + "tsx": "~4.19.1" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "@azure-tools/typespec-autorest": ">=0.56.0 <1.0.0", + "@azure-tools/typespec-azure-core": ">=0.56.0 <1.0.0", + "@azure-tools/typespec-azure-resource-manager": ">=0.56.0 <1.0.0", + "@azure-tools/typespec-azure-rulesets": ">=0.56.0 <1.0.0", + "@azure-tools/typespec-client-generator-core": ">=0.56.1 <1.0.0", + "@typespec/compiler": "^1.0.0", + "@typespec/events": ">=0.70.0 <1.0.0", + "@typespec/http": "^1.0.0", + "@typespec/openapi": "^1.0.0", + "@typespec/rest": ">=0.70.0 <1.0.0", + "@typespec/sse": ">=0.70.0 <1.0.0", + "@typespec/streams": ">=0.70.0 <1.0.0", + "@typespec/versioning": ">=0.70.0 <1.0.0", + "@typespec/xml": ">=0.70.0 <1.0.0" + } + }, "node_modules/@typespec/http-specs": { "version": "0.1.0-alpha.23", "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.23.tgz", @@ -2131,7 +2129,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.1.0.tgz", "integrity": "sha512-HPvrpSS7eSVk3fEkWndcDTrAZssWRYv3FyDTqVqljildc7FAiXdo88+r5CCK8endmgIrES7uJdHLkcIGUZx1pg==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2145,7 +2142,6 @@ "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.71.0.tgz", "integrity": "sha512-5qX+nWO5Jx4P1iTTT2REgdCtHsTMjlv/gL90u8cO1ih3yHDtf18a41UL6jSYaVUIvIj6rlmrgopActf0FhhUcw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2225,7 +2221,6 @@ "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.71.0.tgz", "integrity": "sha512-4lAwDMj8h/50s6zp/8IX8CLW+H3P+od5O32Bb8+fyTabEo7+H3PbdBbIJGv9Sj7+l8+bZXsyfRXa+aJxR9o2ZA==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2241,7 +2236,6 @@ "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.71.0.tgz", "integrity": "sha512-ofyAcg8GnO6uTffGo00D6MMfRkqie4QtnUUSGNC1Bam2WG+wkeSG/huP0WNRT8GofzK1N0M6QqQwAW/vdq9ymQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2269,7 +2263,6 @@ "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.71.0.tgz", "integrity": "sha512-8qknFLOpZTVzQ+SveXg9G7WJV8P80yxLlj0nOc3ZLBKiPgM6FF7vGWHRNtnh7s3gSXvWyxopaJ9fZSLZSJmbww==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2282,7 +2275,6 @@ "version": "0.71.0", "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.71.0.tgz", "integrity": "sha512-IcBM4fd5li+hfaUoxeiFrUJx+gCGwIJ+LojdbAZPP3Kbdv12RS+8+CHH6d9qGV3qExgWGCny6WDUrUIaVCLonw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2448,7 +2440,6 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", - "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2464,7 +2455,6 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -2479,7 +2469,6 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", - "dev": true, "engines": { "node": ">=12" }, @@ -2491,7 +2480,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2506,7 +2494,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2517,8 +2504,7 @@ "node_modules/ansi-styles/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/append-field": { "version": "1.0.0", @@ -2575,8 +2561,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/basic-auth": { "version": "2.0.1", @@ -2647,7 +2632,6 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2837,14 +2821,12 @@ "node_modules/change-case": { "version": "5.4.4", "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", - "dev": true + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==" }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "node_modules/check-error": { "version": "2.1.1", @@ -2859,7 +2841,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", - "dev": true, "engines": { "node": ">=18" } @@ -2868,7 +2849,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", - "dev": true, "engines": { "node": ">= 12" } @@ -2877,7 +2857,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -2891,7 +2870,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2899,14 +2877,12 @@ "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2920,7 +2896,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2932,7 +2907,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3021,7 +2995,6 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3200,8 +3173,7 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -3222,8 +3194,7 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "dev": true + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" }, "node_modules/encodeurl": { "version": "2.0.0", @@ -3239,7 +3210,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", - "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -3346,7 +3316,6 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, "engines": { "node": ">=6" } @@ -3651,7 +3620,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -3664,14 +3632,12 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3688,7 +3654,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3714,7 +3679,6 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, "funding": [ { "type": "github", @@ -3749,7 +3713,6 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", - "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -3771,7 +3734,6 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -3853,7 +3815,6 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "dev": true, "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -3920,7 +3881,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -4050,7 +4010,6 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", - "dev": true, "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", @@ -4071,7 +4030,6 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", - "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -4222,7 +4180,6 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4410,7 +4367,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -4419,7 +4375,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -4428,7 +4383,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4471,7 +4425,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -4581,7 +4534,6 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", - "dev": true, "engines": { "node": ">=18" }, @@ -4642,8 +4594,7 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -4701,7 +4652,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -4725,8 +4675,7 @@ "node_modules/json-schema-traverse": { "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 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -4962,7 +4911,6 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, "engines": { "node": ">= 8" } @@ -4971,7 +4919,6 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5030,7 +4977,6 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -5039,7 +4985,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", - "dev": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -5052,7 +4997,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -5061,7 +5005,6 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", - "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -5081,7 +5024,6 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -5095,14 +5037,12 @@ "node_modules/minizlib/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "dev": true + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" }, "node_modules/minizlib/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5117,7 +5057,6 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -5133,7 +5072,6 @@ "version": "5.0.10", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", - "dev": true, "dependencies": { "glob": "^10.3.7" }, @@ -5281,7 +5219,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", - "dev": true, "bin": { "mustache": "bin/mustache" } @@ -5290,7 +5227,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "dev": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -5470,7 +5406,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5508,8 +5443,7 @@ "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "dev": true + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" }, "node_modules/parent-module": { "version": "1.0.1", @@ -5547,7 +5481,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, "engines": { "node": ">=8" } @@ -5582,7 +5515,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -5609,14 +5541,12 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -5628,7 +5558,6 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, "engines": { "node": ">=4" } @@ -5684,7 +5613,6 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", - "dev": true, "bin": { "prettier": "bin/prettier.cjs" }, @@ -5750,7 +5678,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, "funding": [ { "type": "github", @@ -5844,7 +5771,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -5853,7 +5779,6 @@ "version": "2.0.2", "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, "engines": { "node": ">=0.10.0" } @@ -5880,7 +5805,6 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", - "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -5977,7 +5901,6 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, "funding": [ { "type": "github", @@ -6036,8 +5959,7 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/sax": { "version": "1.4.1", @@ -6138,7 +6060,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6150,7 +6071,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, "engines": { "node": ">=8" } @@ -6237,7 +6157,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, "engines": { "node": ">=14" }, @@ -6249,7 +6168,6 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "dev": true, "engines": { "node": ">=14.16" }, @@ -6345,7 +6263,6 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -6363,7 +6280,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6377,7 +6293,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -6385,14 +6300,12 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6404,7 +6317,6 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", - "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6420,7 +6332,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6432,7 +6343,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -6479,7 +6389,6 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", - "dev": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -6496,7 +6405,6 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", - "dev": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -6645,7 +6553,6 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -6657,7 +6564,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6729,7 +6635,6 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, "engines": { "node": ">=10" }, @@ -6799,14 +6704,13 @@ "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "dev": true, + "devOptional": true, "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -7043,7 +6947,6 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "dev": true, "engines": { "node": ">=14.0.0" } @@ -7052,7 +6955,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "dev": true, "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, @@ -7064,7 +6966,6 @@ "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", - "dev": true, "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" @@ -7073,20 +6974,17 @@ "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "dev": true + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "dev": true + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7185,7 +7083,6 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7200,7 +7097,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7217,7 +7113,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7225,14 +7120,12 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7246,7 +7139,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7258,7 +7150,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7266,14 +7157,12 @@ "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7287,7 +7176,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7358,7 +7246,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -7367,7 +7254,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", - "dev": true, "engines": { "node": ">=18" } @@ -7376,7 +7262,6 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.0.tgz", "integrity": "sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==", - "dev": true, "bin": { "yaml": "bin.mjs" }, @@ -7388,7 +7273,6 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", - "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7406,7 +7290,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } @@ -7415,7 +7298,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -7423,14 +7305,12 @@ "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7444,7 +7324,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7468,7 +7347,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", - "dev": true, "engines": { "node": ">=18" }, diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 88d3471f076..38b1df9494f 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -60,16 +60,17 @@ "@azure-tools/typespec-azure-rulesets": ">=0.56.0 <1.0.0", "@azure-tools/typespec-client-generator-core": ">=0.56.1 <1.0.0", "@typespec/compiler": "^1.0.0", + "@typespec/events": ">=0.70.0 <1.0.0", "@typespec/http": "^1.0.0", "@typespec/openapi": "^1.0.0", "@typespec/rest": ">=0.70.0 <1.0.0", - "@typespec/versioning": ">=0.70.0 <1.0.0", - "@typespec/events": ">=0.70.0 <1.0.0", "@typespec/sse": ">=0.70.0 <1.0.0", "@typespec/streams": ">=0.70.0 <1.0.0", + "@typespec/versioning": ">=0.70.0 <1.0.0", "@typespec/xml": ">=0.70.0 <1.0.0" }, "dependencies": { + "@typespec/http-client-python": "^0.13.0-dev.1", "js-yaml": "~4.1.0", "marked": "^15.0.6", "pyodide": "0.26.2", @@ -77,27 +78,27 @@ "tsx": "~4.19.1" }, "devDependencies": { + "@azure-tools/azure-http-specs": "0.1.0-alpha.19", "@azure-tools/typespec-autorest": "~0.57.0", "@azure-tools/typespec-azure-core": "~0.57.0", "@azure-tools/typespec-azure-resource-manager": "~0.57.0", "@azure-tools/typespec-azure-rulesets": "~0.57.0", "@azure-tools/typespec-client-generator-core": "~0.57.1", - "@azure-tools/azure-http-specs": "0.1.0-alpha.19", + "@types/js-yaml": "~4.0.5", + "@types/node": "~22.13.14", + "@types/semver": "7.5.8", "@typespec/compiler": "^1.1.0", + "@typespec/events": "~0.71.0", "@typespec/http": "^1.1.0", + "@typespec/http-specs": "0.1.0-alpha.23", "@typespec/openapi": "^1.1.0", "@typespec/rest": "~0.71.0", - "@typespec/versioning": "~0.71.0", - "@typespec/events": "~0.71.0", - "@typespec/spector": "0.1.0-alpha.15", "@typespec/spec-api": "0.1.0-alpha.6", + "@typespec/spector": "0.1.0-alpha.15", "@typespec/sse": "~0.71.0", "@typespec/streams": "~0.71.0", + "@typespec/versioning": "~0.71.0", "@typespec/xml": "~0.71.0", - "@typespec/http-specs": "0.1.0-alpha.23", - "@types/js-yaml": "~4.0.5", - "@types/node": "~22.13.14", - "@types/semver": "7.5.8", "c8": "^10.1.3", "chalk": "5.3.0", "rimraf": "~6.0.1", From d01a78dec3a8689267709fd6c4655826cb64a549 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 2 Jul 2025 21:50:42 -0700 Subject: [PATCH 02/40] keep pyproject.toml fields --- .../pygen/codegen/serializers/__init__.py | 9 ++- .../codegen/serializers/general_serializer.py | 64 ++++++++++++++++++- .../packaging_templates/pyproject.toml.jinja2 | 26 ++++++-- packages/http-client-python/package-lock.json | 6 +- 4 files changed, 89 insertions(+), 16 deletions(-) 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 09665c1b0ff..d8b75e01747 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -53,14 +53,12 @@ "LICENSE.jinja2", "MANIFEST.in.jinja2", "README.md.jinja2", - "setup.py.jinja2", - "pyproject.py.jinja2", + "pyproject.toml.jinja2", ] -_REGENERATE_FILES = {"setup.py", "MANIFEST.in", "pyproject.toml"} +_REGENERATE_FILES = {"MANIFEST.in", "pyproject.toml"} AsyncInfo = namedtuple("AsyncInfo", ["async_mode", "async_path"]) - # extract sub folders. For example, source_file_path is like: # "xxx/resource-manager/Microsoft.XX/stable/2023-04-01/examples/Compute/createOrUpdate/AKSCompute.json", # and we want to extract the sub folders after "examples/", which is "compute/create_or_update" @@ -233,9 +231,10 @@ def _serialize_and_write_package_files(self, client_namespace: str) -> None: if self.keep_version_file and file == "setup.py": # don't regenerate setup.py file if the version file is more up to date continue + file_path = self.exec_path(self.code_model.namespace) / output_name self.write_file( output_name, - serializer.serialize_package_file(template_name, **params), + serializer.serialize_package_file(template_name, file_path, **params), ) def _keep_patch_file(self, path_file: Path, env: Environment): diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index bd0a9f71513..8efd13afa07 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -5,6 +5,12 @@ # -------------------------------------------------------------------------- import json from typing import Any, List +import re +try: + import tomllib +except ImportError: + import tomli as tomllib +from packaging.version import parse as parse_version from .import_serializer import FileImportSerializer, TypingSection from ..models.imports import MsrestImportType, FileImport from ..models import ( @@ -42,8 +48,60 @@ def serialize_setup_file(self) -> str: params.update(self.code_model.options) return template.render(code_model=self.code_model, **params) - def serialize_package_file(self, template_name: str, **kwargs: Any) -> str: + def _extract_version(self, s): + m = re.search(r"[><=]=?([\d.]+)", s) + return parse_version(m.group(1)) if m else parse_version("0") + + def _keep_pyproject_fields(self, file_path: str) -> dict: + result = {"KEEP_FIELDS": {}} + try: + with open(file_path, "rb") as f: + loaded_pyproject_toml = tomllib.load(f) + except: + return result + + # Keep azure-sdk-build configuration + if "tool" in loaded_pyproject_toml and "azure-sdk-build" in loaded_pyproject_toml["tool"]: + result["KEEP_FIELDS"]["tool.azure-sdk-build"] = loaded_pyproject_toml["tool"]["azure-sdk-build"] + + # Process dependencies + if "project" in loaded_pyproject_toml: + # Handle main dependencies + if "dependencies" in loaded_pyproject_toml["project"]: + kept_deps = [] + for dep in loaded_pyproject_toml["project"]["dependencies"]: + dep_name = re.split(r'[<>=\[]', dep)[0].strip() + + # Check if dependency is one we track in VERSION_MAP + if dep_name in VERSION_MAP: + # For tracked dependencies, check if the version is higher than our default + default_version = parse_version(VERSION_MAP[dep_name]) + dep_version = self._extract_version(dep) + # If the version is higher than the default, update VERSION_MAP with higher version + if dep_version > default_version: + VERSION_MAP[dep_name] = dep_version + else: + # Keep non-default dependencies + kept_deps.append(dep) + + if kept_deps: + result["KEEP_FIELDS"]["project.dependencies"] = kept_deps + + # Handle optional dependencies + if "optional-dependencies" in loaded_pyproject_toml["project"]: + result["KEEP_FIELDS"]["project.optional-dependencies"] = loaded_pyproject_toml["project"]["optional-dependencies"] + + return result + + def serialize_package_file(self, template_name: str, file_path: str, **kwargs: Any) -> str: template = self.env.get_template(template_name) + + # Add fields to keep from an existing pyproject.toml + if template_name == "pyproject.toml.jinja2": + params = self._keep_pyproject_fields(file_path) + else: + params = {} + package_parts = ( self.code_model.namespace.split(".")[:-1] if self.code_model.is_tsp @@ -57,7 +115,7 @@ def serialize_package_file(self, template_name: str, **kwargs: Any) -> str: dev_status = "4 - Beta" else: dev_status = "5 - Production/Stable" - params = { + params.update({ "code_model": self.code_model, "dev_status": dev_status, "token_credential": token_credential, @@ -67,7 +125,7 @@ def serialize_package_file(self, template_name: str, **kwargs: Any) -> str: "VERSION_MAP": VERSION_MAP, "MIN_PYTHON_VERSION": MIN_PYTHON_VERSION, "MAX_PYTHON_VERSION": MAX_PYTHON_VERSION, - } + }) params.update(self.code_model.options) params.update(kwargs) return template.render(file_import=FileImport(self.code_model), **params) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index a18f1326cd7..4cbcf3d74e8 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -33,9 +33,7 @@ description = "{{ package_name }}" {% if code_model.is_azure_flavor %} keywords = ["azure", "azure sdk"] {% endif %} -## TODO: grab existing one and read in as JSON and parse and keep non-default dependencies. -## Set dependency to max version. -## Always override or never override keys. + dependencies = [ {% if code_model.is_legacy %} "msrest>={{ VERSION_MAP['msrest'] }}", @@ -50,10 +48,25 @@ dependencies = [ "corehttp[requests]>={{ VERSION_MAP['corehttp'] }}", {% endif %} "typing-extensions>={{ VERSION_MAP['typing-extensions'] }}", + {% if KEEP_FIELDS and KEEP_FIELDS.get('project.dependencies') %} + {% for dep in KEEP_FIELDS['project.dependencies'] %} + "{{ dep }}", + {% endfor %} + {% endif %} ] dynamic = [ {% if package_mode %}"version", {% endif %}"readme" ] +{% if KEEP_FIELDS and KEEP_FIELDS.get('project.optional-dependencies') %} +[project.optional-dependencies] +{% for key, val in KEEP_FIELDS['project.optional-dependencies'].items() %} +{{ key }} = [ + {% for dep in val %} + "{{ dep }}", + {% endfor %} +] +{% endfor %} +{% endif %} {% if code_model.is_azure_flavor %} [project.urls] repository = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" @@ -83,6 +96,9 @@ exclude = [ pytyped = ["py.typed"] {% endif %} -## TODO: grab existing one and read in as JSON and parse and keep stuff. +{% if KEEP_FIELDS and KEEP_FIELDS.get('[tool.azure-sdk-build]') %} [tool.azure-sdk-build] -pyright = false +{% for key, val in KEEP_FIELDS['[tool.azure-sdk-build]'].items() %} +{{ key }} = {{ val | tojson }} +{% endfor %} +{% endif %} diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 3f0618555e6..072913f8e1b 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -2071,9 +2071,9 @@ } }, "node_modules/@typespec/http-client-python": { - "version": "0.13.0-dev.1", - "resolved": "https://registry.npmjs.org/@typespec/http-client-python/-/http-client-python-0.13.0-dev.1.tgz", - "integrity": "sha512-b0xZQ6/1rlSspbPIPJ//GAAfeENb196+FNg8Pum+mZch+hffZsChY0WPou1Wow6nXy6rATXeoRwfAqAuMM4jdQ==", + "version": "0.13.0-dev.3", + "resolved": "https://registry.npmjs.org/@typespec/http-client-python/-/http-client-python-0.13.0-dev.3.tgz", + "integrity": "sha512-WP1YCb1jqxf4VmY94jHZcYlpmKi5wgy0++fMR1uFsU4bRFZvd+5epJB7DvMHu7Fq2Ljw9w+VnB3Wr6swCB8wFQ==", "hasInstallScript": true, "license": "MIT", "dependencies": { From dab3057a42e1a5d8edc3f58b1e92d18910c328c1 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 14:17:15 -0700 Subject: [PATCH 03/40] update path to pyproject file to check keep fields --- .../generator/pygen/codegen/serializers/__init__.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) 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 d8b75e01747..22f77bffa5d 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -9,6 +9,7 @@ import re from typing import List, Any, Union from pathlib import Path +from packaging.version import parse as parse_version from jinja2 import PackageLoader, Environment, FileSystemLoader, StrictUndefined from ... import ReaderAndWriter @@ -106,7 +107,11 @@ def keep_version_file(self) -> bool: serialized_version = match.group(1) if match else "" except (FileNotFoundError, IndexError): serialized_version = "" - return serialized_version > self.code_model.options["package_version"] + try: + return parse_version(serialized_version) > parse_version(self.code_model.options["package_version"]) + except: + # Overwrite version file if parsing or version comparison fails. + return False def serialize(self) -> None: env = Environment( @@ -231,7 +236,7 @@ def _serialize_and_write_package_files(self, client_namespace: str) -> None: if self.keep_version_file and file == "setup.py": # don't regenerate setup.py file if the version file is more up to date continue - file_path = self.exec_path(self.code_model.namespace) / output_name + file_path = self.output_folder / Path(output_name) self.write_file( output_name, serializer.serialize_package_file(template_name, file_path, **params), From b45616ce88a820a3e35757b783e4bd8fd4b53a35 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 15:11:35 -0700 Subject: [PATCH 04/40] update pyproject template --- .../packaging_templates/pyproject.toml.jinja2 | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index 4cbcf3d74e8..dd9a51ce903 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -9,26 +9,26 @@ requires = ["setuptools>=61.0.0", "wheel"] # Requires 61.0.0 for dynamic versio build-backend = "setuptools.build_meta" [project] -name = "{{ package_name|lower }}" -{% if package_mode %} +name = "{{ options.get('package-name')|lower }}" +{% if options.get('package-mode') %} authors = [ { name = "{{ code_model.company_name }}"{% if code_model.is_azure_flavor %}, email = "azpysdkhelp@microsoft.com"{% endif %} }, ] -description = "{{ code_model.company_name }} {{ package_pprint_name }} Client Library for Python" +description = "{{ code_model.company_name }} {% if code_model.is_azure_flavor and not options.get('package-pprint-name').startswith('Azure ') %}Azure {% endif %}{{ options.get('package-pprint-name') }} Client Library for Python" license = {text = "MIT License"} classifiers = [ "Development Status :: {{ dev_status }}", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - {% for version in range(min_version, max_version + 1) %} + {% for version in range(min_version, max_version + 1) %} "Programming Language :: Python :: 3.{{ version }}", {% endfor %} "License :: OSI Approved :: MIT License", ] requires-python = ">={{ MIN_PYTHON_VERSION }}" {% else %} -description = "{{ package_name }}" +description = "{{ options.get('package-name') }}" {% endif %} {% if code_model.is_azure_flavor %} keywords = ["azure", "azure sdk"] @@ -40,7 +40,7 @@ dependencies = [ {% else %} "isodate>={{ VERSION_MAP['isodate'] }}", {% endif %} - {% if azure_arm %} + {% if options.get('azure_arm') %} "azure-mgmt-core>={{ VERSION_MAP['azure-mgmt-core'] }}", {% elif code_model.is_azure_flavor %} "azure-core>={{ VERSION_MAP['azure-core'] }}", @@ -49,41 +49,43 @@ dependencies = [ {% endif %} "typing-extensions>={{ VERSION_MAP['typing-extensions'] }}", {% if KEEP_FIELDS and KEEP_FIELDS.get('project.dependencies') %} - {% for dep in KEEP_FIELDS['project.dependencies'] %} - "{{ dep }}", - {% endfor %} + {% for dep in KEEP_FIELDS.get('project.dependencies') %} + "{{ dep }}", + {% endfor %} {% endif %} ] dynamic = [ - {% if package_mode %}"version", {% endif %}"readme" + {% if options.get('package-mode') %}"version", {% endif %}"readme" ] {% if KEEP_FIELDS and KEEP_FIELDS.get('project.optional-dependencies') %} + [project.optional-dependencies] -{% for key, val in KEEP_FIELDS['project.optional-dependencies'].items() %} +{% for key, val in KEEP_FIELDS.get('project.optional-dependencies').items() %} {{ key }} = [ - {% for dep in val %} - "{{ dep }}", - {% endfor %} + {% for dep in val %} + "{{ dep }}", + {% endfor %} ] {% endfor %} {% endif %} {% if code_model.is_azure_flavor %} + [project.urls] repository = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" {% endif %} [tool.setuptools.dynamic] -{% if package_mode %} +{% if options.get('package-mode') %} {% if code_model.is_tsp %} version = {attr = "{{ code_model.namespace|lower|replace('.', '/') }}/_version.VERSION"} {% else %} -version = {attr = "{{ package_name|lower|replace('-', '/') }}/_version.VERSION"} +version = {attr = "{{ options.get('package-name')|lower|replace('-', '/') }}/_version.VERSION"} {% endif %} {% else %} -version = "{{ package_version }}" +version = "{{ options.get('package-version') }}" {% endif %}readme = {file = ["README.md"], content-type = "text/markdown"} +{% if options.get('package-mode') %} -{% if package_mode %} [tool.setuptools.packages.find] exclude = [ "tests*", @@ -95,10 +97,10 @@ exclude = [ [tool.setuptools.package-data] pytyped = ["py.typed"] {% endif %} +{% if KEEP_FIELDS and KEEP_FIELDS.get('tool.azure-sdk-build') %} -{% if KEEP_FIELDS and KEEP_FIELDS.get('[tool.azure-sdk-build]') %} [tool.azure-sdk-build] -{% for key, val in KEEP_FIELDS['[tool.azure-sdk-build]'].items() %} -{{ key }} = {{ val | tojson }} +{% for key, val in KEEP_FIELDS.get('tool.azure-sdk-build').items() %} +{{ key }} = {{ val|tojson }} {% endfor %} {% endif %} From 1c70f499db76ce2026a7b8aa258264f9e25d94a8 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 15:25:42 -0700 Subject: [PATCH 05/40] fix extract version --- .../generator/pygen/codegen/serializers/general_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index 3f3909e42bb..961eb28c08d 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -49,7 +49,7 @@ def serialize_setup_file(self) -> str: return template.render(code_model=self.code_model, **params) def _extract_version(self, s): - m = re.search(r"[><=]=?([\d.]+)", s) + m = re.search(r"[><=]=?([\d.]+(?:[a-z]+\d+)?)", s) return parse_version(m.group(1)) if m else parse_version("0") def _keep_pyproject_fields(self, file_path: str) -> dict: From e7f4ec8cc0e765f4da34d827c9732537699eb17f Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 15:37:45 -0700 Subject: [PATCH 06/40] update version to min dependency check --- .../pygen/codegen/serializers/general_serializer.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index 961eb28c08d..d37f66c59ec 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -48,8 +48,8 @@ def serialize_setup_file(self) -> str: params.update({"options": self.code_model.options}) return template.render(code_model=self.code_model, **params) - def _extract_version(self, s): - m = re.search(r"[><=]=?([\d.]+(?:[a-z]+\d+)?)", s) + def _extract_min_dependency(self, s): + m = re.search(r"[>=]=?([\d.]+(?:[a-z]+\d+)?)", s) return parse_version(m.group(1)) if m else parse_version("0") def _keep_pyproject_fields(self, file_path: str) -> dict: @@ -76,8 +76,8 @@ def _keep_pyproject_fields(self, file_path: str) -> dict: if dep_name in VERSION_MAP: # For tracked dependencies, check if the version is higher than our default default_version = parse_version(VERSION_MAP[dep_name]) - dep_version = self._extract_version(dep) - # If the version is higher than the default, update VERSION_MAP with higher version + dep_version = self._extract_min_dependency(dep) + # If the version is higher than the default, update VERSION_MAP with higher min dependency version if dep_version > default_version: VERSION_MAP[dep_name] = dep_version else: From 5e087ae19fdd9b1e0591d3ea8c6152ba7a2e4cc8 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 15:50:21 -0700 Subject: [PATCH 07/40] Remove setup.py manually before generating packaging files --- packages/http-client-python/generator/pygen/__init__.py | 8 ++++++++ .../generator/pygen/codegen/serializers/__init__.py | 5 ++--- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/http-client-python/generator/pygen/__init__.py b/packages/http-client-python/generator/pygen/__init__.py index 8605553b2c4..77d36624587 100644 --- a/packages/http-client-python/generator/pygen/__init__.py +++ b/packages/http-client-python/generator/pygen/__init__.py @@ -227,6 +227,14 @@ def write_file(self, filename: Union[str, Path], file_content: str) -> None: with open(self.output_folder / Path(filename), "w", encoding="utf-8") as fd: fd.write(file_content) + def remove_file(self, filename: Union[str, Path]) -> None: + try: + file_path = self.output_folder / Path(filename) + if file_path.is_file(): + file_path.unlink() + except FileNotFoundError: + pass + def list_file(self) -> List[str]: return [str(f.relative_to(self.output_folder)) for f in self.output_folder.glob("**/*") if f.is_file()] 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 365c7e6f5cf..f31d2c14de0 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -126,9 +126,8 @@ def serialize(self) -> None: for client_namespace, client_namespace_type in self.code_model.client_namespace_types.items(): exec_path = self.exec_path(client_namespace) if client_namespace == "": - # Write the setup file - if self.code_model.options["basic-setup-py"]: - self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) + # remove setup.py file + self.remove_file(exec_path / Path("setup.py")) # add packaging files in root namespace (e.g. setup.py, README.md, etc.) if self.code_model.options.get("package-mode"): From 1bac4948cdf6ce51bc70aadba9d065f685121201 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 16:09:25 -0700 Subject: [PATCH 08/40] nits --- .../pygen/codegen/serializers/general_serializer.py | 11 ++++++++++- .../packaging_templates/pyproject.toml.jinja2 | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index d37f66c59ec..9b48ce9a813 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -49,10 +49,19 @@ def serialize_setup_file(self) -> str: return template.render(code_model=self.code_model, **params) def _extract_min_dependency(self, s): + # Extract the minimum version from a dependency string. + # + # Handles formats like: + # - >=1.2.3 + # - >=0.1.0b1 (beta versions) + # - >=1.2.3rc2 (release candidates) + # + # Returns the parsed version if found, otherwise version "0". m = re.search(r"[>=]=?([\d.]+(?:[a-z]+\d+)?)", s) return parse_version(m.group(1)) if m else parse_version("0") def _keep_pyproject_fields(self, file_path: str) -> dict: + # Load the pyproject.toml file if it exists and extract fields to keep. result = {"KEEP_FIELDS": {}} try: with open(file_path, "rb") as f: @@ -87,7 +96,7 @@ def _keep_pyproject_fields(self, file_path: str) -> dict: if kept_deps: result["KEEP_FIELDS"]["project.dependencies"] = kept_deps - # Handle optional dependencies + # Keep optional dependencies if "optional-dependencies" in loaded_pyproject_toml["project"]: result["KEEP_FIELDS"]["project.optional-dependencies"] = loaded_pyproject_toml["project"]["optional-dependencies"] diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index dd9a51ce903..fdb2e2b339f 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -14,7 +14,7 @@ name = "{{ options.get('package-name')|lower }}" authors = [ { name = "{{ code_model.company_name }}"{% if code_model.is_azure_flavor %}, email = "azpysdkhelp@microsoft.com"{% endif %} }, ] -description = "{{ code_model.company_name }} {% if code_model.is_azure_flavor and not options.get('package-pprint-name').startswith('Azure ') %}Azure {% endif %}{{ options.get('package-pprint-name') }} Client Library for Python" +description = "{{ code_model.company_name }}{% if code_model.is_azure_flavor and not options.get('package-pprint-name').startswith('Azure ') %} Azure {% endif %}{{ options.get('package-pprint-name') }} Client Library for Python" license = {text = "MIT License"} classifiers = [ "Development Status :: {{ dev_status }}", @@ -82,7 +82,7 @@ version = {attr = "{{ code_model.namespace|lower|replace('.', '/') }}/_version.V version = {attr = "{{ options.get('package-name')|lower|replace('-', '/') }}/_version.VERSION"} {% endif %} {% else %} -version = "{{ options.get('package-version') }}" +version = "{{ options.get("package-version", "unknown") }}" {% endif %}readme = {file = ["README.md"], content-type = "text/markdown"} {% if options.get('package-mode') %} From ef5de0e5c618e60735ddae706d689b1ee3ad05ce Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 16:18:31 -0700 Subject: [PATCH 09/40] copilot review --- .../generator/pygen/codegen/serializers/general_serializer.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index 9b48ce9a813..82b23f7fd3c 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -66,7 +66,7 @@ def _keep_pyproject_fields(self, file_path: str) -> dict: try: with open(file_path, "rb") as f: loaded_pyproject_toml = tomllib.load(f) - except: + except Exception: return result # Keep azure-sdk-build configuration From 4fff79fe30319153219dfc1544b6a62fedf689ae Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 16:44:49 -0700 Subject: [PATCH 10/40] lint --- .../pygen/codegen/serializers/__init__.py | 4 +- .../codegen/serializers/general_serializer.py | 66 ++++++++++--------- 2 files changed, 37 insertions(+), 33 deletions(-) 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 f31d2c14de0..2fc68daa445 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -108,8 +108,8 @@ def keep_version_file(self) -> bool: serialized_version = "" try: return parse_version(serialized_version) > parse_version(self.code_model.options.get("package-version", "")) - except: - # Overwrite version file if parsing or version comparison fails. + except Exception: # pylint: disable=broad-except + # If parsing the version fails, we assume the version file is not valid and overwrite. return False def serialize(self) -> None: diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index 82b23f7fd3c..4f83b9fe64f 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -4,12 +4,9 @@ # license information. # -------------------------------------------------------------------------- import json -from typing import Any, List +from typing import Any, List, TYPE_CHECKING import re -try: - import tomllib -except ImportError: - import tomli as tomllib +import tomli as tomllib from packaging.version import parse as parse_version from .import_serializer import FileImportSerializer, TypingSection from ..models.imports import MsrestImportType, FileImport @@ -22,6 +19,9 @@ from .client_serializer import ClientSerializer, ConfigSerializer from .base_serializer import BaseSerializer +if TYPE_CHECKING: + from pathlib import Path + VERSION_MAP = { "msrest": "0.7.1", "isodate": "0.6.1", @@ -60,49 +60,53 @@ def _extract_min_dependency(self, s): m = re.search(r"[>=]=?([\d.]+(?:[a-z]+\d+)?)", s) return parse_version(m.group(1)) if m else parse_version("0") - def _keep_pyproject_fields(self, file_path: str) -> dict: + def _keep_pyproject_fields(self, file_path: "Path") -> dict: # Load the pyproject.toml file if it exists and extract fields to keep. - result = {"KEEP_FIELDS": {}} + result: dict = {"KEEP_FIELDS": {}} try: with open(file_path, "rb") as f: loaded_pyproject_toml = tomllib.load(f) - except Exception: + except Exception: # pylint: disable=broad-except + # If parsing the pyproject.toml fails, we assume the it does not exist or is incorrectly formatted. return result # Keep azure-sdk-build configuration if "tool" in loaded_pyproject_toml and "azure-sdk-build" in loaded_pyproject_toml["tool"]: - result["KEEP_FIELDS"]["tool.azure-sdk-build"] = loaded_pyproject_toml["tool"]["azure-sdk-build"] + result["KEEP_FIELDS"]["tool.azure-sdk-build"] = loaded_pyproject_toml["tool"]["azure-sdk-build"] # Process dependencies if "project" in loaded_pyproject_toml: - # Handle main dependencies - if "dependencies" in loaded_pyproject_toml["project"]: - kept_deps = [] - for dep in loaded_pyproject_toml["project"]["dependencies"]: - dep_name = re.split(r'[<>=\[]', dep)[0].strip() + # Handle main dependencies + if "dependencies" in loaded_pyproject_toml["project"]: + kept_deps = [] + for dep in loaded_pyproject_toml["project"]["dependencies"]: + dep_name = re.split(r'[<>=\[]', dep)[0].strip() - # Check if dependency is one we track in VERSION_MAP - if dep_name in VERSION_MAP: - # For tracked dependencies, check if the version is higher than our default - default_version = parse_version(VERSION_MAP[dep_name]) - dep_version = self._extract_min_dependency(dep) - # If the version is higher than the default, update VERSION_MAP with higher min dependency version - if dep_version > default_version: - VERSION_MAP[dep_name] = dep_version - else: - # Keep non-default dependencies - kept_deps.append(dep) + # Check if dependency is one we track in VERSION_MAP + if dep_name in VERSION_MAP: + # For tracked dependencies, check if the version is higher than our default + default_version = parse_version(VERSION_MAP[dep_name]) + dep_version = self._extract_min_dependency(dep) + # If the version is higher than the default, update VERSION_MAP + # with higher min dependency version + if dep_version > default_version: + VERSION_MAP[dep_name] = str(dep_version) + else: + # Keep non-default dependencies + kept_deps.append(dep) - if kept_deps: - result["KEEP_FIELDS"]["project.dependencies"] = kept_deps + if kept_deps: + result["KEEP_FIELDS"]["project.dependencies"] = kept_deps - # Keep optional dependencies - if "optional-dependencies" in loaded_pyproject_toml["project"]: - result["KEEP_FIELDS"]["project.optional-dependencies"] = loaded_pyproject_toml["project"]["optional-dependencies"] + # Keep optional dependencies + if "optional-dependencies" in loaded_pyproject_toml["project"]: + result["KEEP_FIELDS"]["project.optional-dependencies"] = ( + loaded_pyproject_toml["project"]["optional-dependencies"] + ) return result - def serialize_package_file(self, template_name: str, file_path: str, **kwargs: Any) -> str: + def serialize_package_file(self, template_name: str, file_path: "Path", **kwargs: Any) -> str: template = self.env.get_template(template_name) # Add fields to keep from an existing pyproject.toml From 031a621baac2da4aac5e81e8907a4f618b8e4f87 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 3 Jul 2025 16:48:50 -0700 Subject: [PATCH 11/40] changelog --- packages/http-client-python/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/http-client-python/CHANGELOG.md b/packages/http-client-python/CHANGELOG.md index e2fa41caa0f..9f51636b5af 100644 --- a/packages/http-client-python/CHANGELOG.md +++ b/packages/http-client-python/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log - @typespec/http-client-python +## 0.14.0 + +### Features + +- [#7829](https://github.com/microsoft/typespec/pull/7829) [http-client-python] add pyproject toml + + ## 0.13.0 ### Features From a92bc9d0f52ba36829415bb0376c37caa46e5c60 Mon Sep 17 00:00:00 2001 From: swathipil Date: Tue, 15 Jul 2025 12:37:36 -0700 Subject: [PATCH 12/40] fix failing tests --- .../packaging_templates/pyproject.toml.jinja2 | 12 +++++++----- .../generator/test/azure/tox.ini | 4 ++-- packages/http-client-python/package-lock.json | 11 ++++++++--- packages/http-client-python/package.json | 18 +++--------------- 4 files changed, 20 insertions(+), 25 deletions(-) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index fdb2e2b339f..981e68144b3 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -57,6 +57,9 @@ dependencies = [ dynamic = [ {% if options.get('package-mode') %}"version", {% endif %}"readme" ] +{% if not options.get('package-mode') %} +version = "{{ options.get("package-version", "unknown") }}" +{% endif %} {% if KEEP_FIELDS and KEEP_FIELDS.get('project.optional-dependencies') %} [project.optional-dependencies] @@ -77,13 +80,12 @@ repository = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" [tool.setuptools.dynamic] {% if options.get('package-mode') %} {% if code_model.is_tsp %} -version = {attr = "{{ code_model.namespace|lower|replace('.', '/') }}/_version.VERSION"} +version = {attr = "{{ code_model.namespace|lower }}._version.VERSION"} {% else %} -version = {attr = "{{ options.get('package-name')|lower|replace('-', '/') }}/_version.VERSION"} +version = {attr = "{{ options.get('package-name')|lower|replace('-', '.') }}._version.VERSION"} {% endif %} -{% else %} -version = "{{ options.get("package-version", "unknown") }}" -{% endif %}readme = {file = ["README.md"], content-type = "text/markdown"} +{% endif %} +readme = {file = ["README.md"], content-type = "text/markdown"} {% if options.get('package-mode') %} [tool.setuptools.packages.find] diff --git a/packages/http-client-python/generator/test/azure/tox.ini b/packages/http-client-python/generator/test/azure/tox.ini index 980a7808a91..8d233633c9f 100644 --- a/packages/http-client-python/generator/test/azure/tox.ini +++ b/packages/http-client-python/generator/test/azure/tox.ini @@ -20,7 +20,7 @@ commands = python ../../../eng/scripts/ci/run_pyright.py -t azure -s "generated" {posargs} # apiview - pip install apiview-stub-generator==0.3.13 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" + pip install apiview-stub-generator==0.3.18 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" python ../../../eng/scripts/ci/run_apiview.py -t azure -s "generated" {posargs} [testenv:test] @@ -52,5 +52,5 @@ commands = deps= -r requirements.txt commands = - pip install apiview-stub-generator==0.3.13 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" + pip install apiview-stub-generator==0.3.18 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/" python ../../../eng/scripts/ci/run_apiview.py -t azure -s "generated" {posargs} diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 21cafef0c5a..7e04417a509 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -15,7 +15,8 @@ "marked": "^15.0.6", "pyodide": "0.26.2", "semver": "~7.6.2", - "tsx": "~4.19.1" + "tsx": "~4.19.1", + "versioning": "^1.1.2" }, "devDependencies": { "@azure-tools/azure-http-specs": "0.1.0-alpha.20", @@ -161,7 +162,6 @@ "version": "0.57.2", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.57.2.tgz", "integrity": "sha512-/HPdsWAO5aRolTf9pOa1ZFIDpKhi22oZmNj7ypHTjntSJh7bn3Q6tw9J/10n4eyvkUElLVqa691fODfeIZH/qA==", - "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -188,7 +188,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -6794,6 +6793,12 @@ "node": ">= 0.8" } }, + "node_modules/versioning": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/versioning/-/versioning-1.1.2.tgz", + "integrity": "sha512-LIvF/XKMprJ6ZYWBvxm1MuTZGuYqE4svbVGI1mZL7Ogyf4JLUKkuPInCi/FghPSpgqHzuBUdq/Es4ZBxkqr+vQ==", + "license": "MIT" + }, "node_modules/vite": { "version": "6.2.6", "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 664a91d81e4..55687aad97b 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -75,28 +75,16 @@ "marked": "^15.0.6", "pyodide": "0.26.2", "semver": "~7.6.2", - "tsx": "~4.19.1" + "tsx": "~4.19.1", + "versioning": "^1.1.2" }, "devDependencies": { - "@azure-tools/azure-http-specs": "0.1.0-alpha.19", + "@azure-tools/azure-http-specs": "0.1.0-alpha.20", "@azure-tools/typespec-autorest": "~0.57.0", "@azure-tools/typespec-azure-core": "~0.57.0", "@azure-tools/typespec-azure-resource-manager": "~0.57.0", "@azure-tools/typespec-azure-rulesets": "~0.57.0", "@azure-tools/typespec-client-generator-core": "~0.57.2", - "@azure-tools/azure-http-specs": "0.1.0-alpha.20", - "@typespec/compiler": "^1.1.0", - "@typespec/http": "^1.1.0", - "@typespec/openapi": "^1.1.0", - "@typespec/rest": "~0.71.0", - "@typespec/versioning": "~0.71.0", - "@typespec/events": "~0.71.0", - "@typespec/spector": "0.1.0-alpha.15", - "@typespec/spec-api": "0.1.0-alpha.6", - "@typespec/sse": "~0.71.0", - "@typespec/streams": "~0.71.0", - "@typespec/xml": "~0.71.0", - "@typespec/http-specs": "0.1.0-alpha.23", "@types/js-yaml": "~4.0.5", "@types/node": "~22.13.14", "@types/semver": "7.5.8", From d2b47bc6a167b0422473d3bbcb44f6ab268a03f5 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 10:40:08 -0700 Subject: [PATCH 13/40] bump apistubgen version + rename test package dirs as package names for apiview src dir pick up --- .../eng/scripts/ci/regenerate.ts | 102 +++++++++++++++++- .../generator/test/unbranded/tox.ini | 4 +- 2 files changed, 103 insertions(+), 3 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index eb5f7b3999f..d36ecda8794 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -37,6 +37,24 @@ interface TspCommand { } const AZURE_EMITTER_OPTIONS: Record | Record[]> = { + "azure:azure/special-headers/client-request-id": { + namespace: "azure.special.headers.client.request.id", + }, + "azure:azure/resource-manager/large-header": { + namespace: "azure.resource.manager.large.header", + }, + "azure:azure/resource-manager/resources": { + namespace: "azure.resource.manager.resources", + }, + "azure:azure/resource-manager/common-properties": { + namespace: "azure.resource.manager.common.properties", + }, + "azure:azure/resource-manager/operation-templates": { + namespace: "azure.resource.manager.operation.templates", + }, + "azure:azure/resource-manager/non-resource": { + namespace: "azure.resource.manager.non.resource", + }, "azure/client-generator-core/access": { namespace: "specs.azure.clientgenerator.core.access", }, @@ -133,6 +151,89 @@ const AZURE_EMITTER_OPTIONS: Record | Record | Record[]> = { + "azure:azure/client-generator-core/access": { + namespace: "azure.client.generator.core.access", + }, + "azure:azure/core/scalar": { + namespace: "azure.core.scalar", + }, + "azure:client/namespace": { + namespace: "client.namespace", + }, + "azure:azure/client-generator-core/flatten-property": { + namespace: "azure.client.generator.core.flatten.property", + }, + "parameters/body-optionality": { + namespace: "parameters.body.optionality", + }, + "azure:azure/core/model": { + namespace: "azure.core.model", + }, + "parameters/collection-format": { + namespace: "parameters.collection.format", + }, + "response/status-code-range": { + namespace: "response.status.code.range", + }, + "azure:client/structure/default": { + namespace: "client.structure.default", + }, + "azure:azure/core/traits": { + namespace: "azure.core.traits", + }, + "azure:azure/client-generator-core/client-initialization": { + namespace: "azure.client.generator.core.client.initialization", + }, + "azure:azure/core/lro/standard": { + namespace: "azure.core.lro.standard", + }, + "azure:azure/payload/pageable": { + namespace: "azure.payload.pageable", + }, + "azure:azure/client-generator-core/usage": { + namespace: "azure.client.generator.core.usage", + }, + "azure:azure/core/page": { + namespace: "azure.core.page", + }, + "azure:azure/core/lro/rpc": { + namespace: "azure.core.lro.rpc", + }, + "payload/json-merge-patch": { + namespace: "payload.json.merge.patch", + }, + "azure:azure/example/basic": { + namespace: "azure.example.basic", + }, + "special-headers/conditional-request": { + namespace: "special.headers.conditional.request", + }, + "azure:azure/encode/duration": { + namespace: "azure.encode.duration", + }, + "azure:azure/client-generator-core/client-location": { + namespace: "azure.client.generator.core.client.location", + }, + "special-headers/repeatability": { + namespace: "special.headers.repeatability", + }, + "server/versions/not-versioned": { + "package-name": "server-versions-not-versioned", + namespace: "server.versions.notversioned", + }, + "server/endpoint/not-defined": { + "package-name": "server-endpoint-not-defined", + namespace: "server.endpoint.notdefined", + }, + "authentication/api-key": { + namespace: "authentication.api.key", + }, + "payload/media-type": { + namespace: "payload.media.type", + }, + "azure:azure/client-generator-core/deserialize-empty-string-as-null": { + namespace: "azure.client.generator.core.deserialize.empty.string.as.null", + }, "resiliency/srv-driven/old.tsp": { "package-name": "resiliency-srv-driven1", namespace: "resiliency.srv.driven1", @@ -184,7 +285,6 @@ const EMITTER_OPTIONS: Record | Record Date: Wed, 16 Jul 2025 14:01:22 -0700 Subject: [PATCH 14/40] fix spec paths in regen --- .../eng/scripts/ci/regenerate.ts | 122 +++++++----------- .../generator/test/azure/requirements.txt | 94 +++++++------- 2 files changed, 94 insertions(+), 122 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index d36ecda8794..4f1f468db24 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -37,76 +37,97 @@ interface TspCommand { } const AZURE_EMITTER_OPTIONS: Record | Record[]> = { - "azure:azure/special-headers/client-request-id": { - namespace: "azure.special.headers.client.request.id", + "azure/special-headers/client-request-id": { + "package-name": "azure-specialheaders-clientrequestid", }, - "azure:azure/resource-manager/large-header": { - namespace: "azure.resource.manager.large.header", + "azure/resource-manager/large-header": { + "package-name": "azure-resourcemanager-largeheader", }, - "azure:azure/resource-manager/resources": { - namespace: "azure.resource.manager.resources", + "azure/resource-manager/resources": { + "package-name": "azure-resourcemanager-resources", }, - "azure:azure/resource-manager/common-properties": { - namespace: "azure.resource.manager.common.properties", + "azure/resource-manager/common-properties": { + "package-name": "azure-resourcemanager-commonproperties", }, - "azure:azure/resource-manager/operation-templates": { - namespace: "azure.resource.manager.operation.templates", + "azure/resource-manager/operation-templates": { + "package-name": "azure-resourcemanager-operationtemplates", }, - "azure:azure/resource-manager/non-resource": { - namespace: "azure.resource.manager.non.resource", + "azure/resource-manager/non-resource": { + "package-name": "azure-resourcemanager-nonresource", + }, + "client/namespace": { + "package-name": "client-namespace", }, "azure/client-generator-core/access": { + "package-name": "specs-azure-clientgenerator-core-access", namespace: "specs.azure.clientgenerator.core.access", }, "azure/client-generator-core/api-version": { + "package-name": "specs-azure-clientgenerator-core-apiversion", namespace: "specs.azure.clientgenerator.core.apiversion", }, "azure/client-generator-core/client-initialization": { + "package-name": "specs-azure-clientgenerator-core-clientinitialization", namespace: "specs.azure.clientgenerator.core.clientinitialization", }, "azure/client-generator-core/client-location": { + "package-name": "specs-azure-clientgenerator-core-clientlocation", namespace: "specs.azure.clientgenerator.core.clientlocation", }, "azure/client-generator-core/deserialize-empty-string-as-null": { + "package-name": "specs-azure-clientgenerator-core-emptystring", namespace: "specs.azure.clientgenerator.core.emptystring", }, "azure/client-generator-core/flatten-property": { + "package-name": "specs-azure-clientgenerator-core-flattenproperty", namespace: "specs.azure.clientgenerator.core.flattenproperty", }, "azure/client-generator-core/usage": { + "package-name": "specs-azure-clientgenerator-core-usage", namespace: "specs.azure.clientgenerator.core.usage", }, "azure/core/basic": { + "package-name": "specs-azure-core-basic", namespace: "specs.azure.core.basic", }, "azure/core/lro/rpc": { + "package-name": "specs-azure-core-lro-rpc", namespace: "specs.azure.core.lro.rpc", }, "azure/core/lro/standard": { + "package-name": "specs-azure-core-lro-standard", namespace: "specs.azure.core.lro.standard", }, "azure/core/model": { + "package-name": "specs-azure-core-model", namespace: "specs.azure.core.model", }, "azure/core/page": { + "package-name": "specs-azure-core-page", namespace: "specs.azure.core.page", }, "azure/core/scalar": { + "package-name": "specs-azure-core-scalar", namespace: "specs.azure.core.scalar", }, "azure/core/traits": { + "package-name": "specs-azure-core-traits", namespace: "specs.azure.core.traits", }, "azure/encode/duration": { + "package-name": "specs-azure-encode-duration", namespace: "specs.azure.encode.duration", }, "azure/example/basic": { + "package-name": "specs-azure-example-basic", namespace: "specs.azure.example.basic", }, "azure/payload/pageable": { + "package-name": "specs-azure-payload-pageable", namespace: "specs.azure.payload.pageable", }, "client/structure/default": { + "package-name": "client-structure-service", namespace: "client.structure.service", }, "client/structure/multi-client": { @@ -137,102 +158,52 @@ const AZURE_EMITTER_OPTIONS: Record | Record | Record[]> = { - "azure:azure/client-generator-core/access": { - namespace: "azure.client.generator.core.access", - }, - "azure:azure/core/scalar": { - namespace: "azure.core.scalar", - }, - "azure:client/namespace": { - namespace: "client.namespace", - }, - "azure:azure/client-generator-core/flatten-property": { - namespace: "azure.client.generator.core.flatten.property", - }, "parameters/body-optionality": { - namespace: "parameters.body.optionality", - }, - "azure:azure/core/model": { - namespace: "azure.core.model", + "package-name": "parameters-bodyoptionality", }, "parameters/collection-format": { - namespace: "parameters.collection.format", + "package-name": "parameters-collectionformat", }, "response/status-code-range": { - namespace: "response.status.code.range", - }, - "azure:client/structure/default": { - namespace: "client.structure.default", - }, - "azure:azure/core/traits": { - namespace: "azure.core.traits", - }, - "azure:azure/client-generator-core/client-initialization": { - namespace: "azure.client.generator.core.client.initialization", - }, - "azure:azure/core/lro/standard": { - namespace: "azure.core.lro.standard", - }, - "azure:azure/payload/pageable": { - namespace: "azure.payload.pageable", - }, - "azure:azure/client-generator-core/usage": { - namespace: "azure.client.generator.core.usage", - }, - "azure:azure/core/page": { - namespace: "azure.core.page", - }, - "azure:azure/core/lro/rpc": { - namespace: "azure.core.lro.rpc", + "package-name": "response-statuscoderange", }, "payload/json-merge-patch": { - namespace: "payload.json.merge.patch", - }, - "azure:azure/example/basic": { - namespace: "azure.example.basic", + "package-name": "payload-jsonmergepatch", }, "special-headers/conditional-request": { - namespace: "special.headers.conditional.request", - }, - "azure:azure/encode/duration": { - namespace: "azure.encode.duration", - }, - "azure:azure/client-generator-core/client-location": { - namespace: "azure.client.generator.core.client.location", + "package-name": "specialheaders-conditionalrequest", }, "special-headers/repeatability": { - namespace: "special.headers.repeatability", + "package-name": "specialheaders-repeatability", }, "server/versions/not-versioned": { - "package-name": "server-versions-not-versioned", - namespace: "server.versions.notversioned", + "package-name": "server-versions-notversioned", }, "server/endpoint/not-defined": { - "package-name": "server-endpoint-not-defined", - namespace: "server.endpoint.notdefined", + "package-name": "server-endpoint-notdefined", }, "authentication/api-key": { - namespace: "authentication.api.key", + "package-name": "authentication-apikey", }, "payload/media-type": { - namespace: "payload.media.type", - }, - "azure:azure/client-generator-core/deserialize-empty-string-as-null": { - namespace: "azure.client.generator.core.deserialize.empty.string.as.null", + "package-name": "payload-mediatype", }, "resiliency/srv-driven/old.tsp": { "package-name": "resiliency-srv-driven1", @@ -285,6 +256,7 @@ const EMITTER_OPTIONS: Record | Record Date: Wed, 16 Jul 2025 14:57:18 -0700 Subject: [PATCH 15/40] unbranded test reqs.txt --- .../generator/test/unbranded/requirements.txt | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/packages/http-client-python/generator/test/unbranded/requirements.txt b/packages/http-client-python/generator/test/unbranded/requirements.txt index 1a2783a4b07..020f6b6a2e5 100644 --- a/packages/http-client-python/generator/test/unbranded/requirements.txt +++ b/packages/http-client-python/generator/test/unbranded/requirements.txt @@ -2,57 +2,57 @@ -e ../../ # common test case --e ./generated/authentication-api-key +-e ./generated/authentication-apikey -e ./generated/authentication-http-custom -e ./generated/authentication-oauth2 -e ./generated/authentication-union +-e ./generated/encode-bytes +-e ./generated/encode-datetime -e ./generated/encode-duration -e ./generated/encode-numeric +-e ./generated/headasbooleanfalse +-e ./generated/headasbooleantrue -e ./generated/parameters-basic --e ./generated/parameters-collection-format +-e ./generated/parameters-bodyoptionality +-e ./generated/parameters-collectionformat -e ./generated/parameters-path -e ./generated/parameters-spread +-e ./generated/payload-content-negotiation +-e ./generated/payload-jsonmergepatch +-e ./generated/payload-mediatype +-e ./generated/payload-multipart +-e ./generated/payload-pageable +-e ./generated/payload-xml +-e ./generated/response-statuscoderange +-e ./generated/routes -e ./generated/serialization-encoded-name-json --e ./generated/server-endpoint-not-defined +-e ./generated/server-endpoint-notdefined -e ./generated/server-path-multiple -e ./generated/server-path-single +-e ./generated/server-versions-notversioned -e ./generated/server-versions-versioned --e ./generated/server-versions-not-versioned -e ./generated/special-words +-e ./generated/specialheaders-conditionalrequest +-e ./generated/specialheaders-repeatability -e ./generated/streaming-jsonl -e ./generated/typetest-array -e ./generated/typetest-dictionary -e ./generated/typetest-enum-extensible -e ./generated/typetest-enum-fixed +-e ./generated/typetest-model-empty -e ./generated/typetest-model-enumdiscriminator -e ./generated/typetest-model-nesteddiscriminator -e ./generated/typetest-model-notdiscriminated --e ./generated/typetest-model-singlediscriminator -e ./generated/typetest-model-recursive +-e ./generated/typetest-model-singlediscriminator -e ./generated/typetest-model-usage -e ./generated/typetest-model-visibility +-e ./generated/typetest-property-additionalproperties -e ./generated/typetest-property-nullable -e ./generated/typetest-property-optional -e ./generated/typetest-property-valuetypes --e ./generated/typetest-property-additionalproperties -e ./generated/typetest-scalar -e ./generated/typetest-union --e ./generated/typetest-model-empty --e ./generated/headasbooleantrue --e ./generated/headasbooleanfalse --e ./generated/parameters-body-optionality --e ./generated/special-headers-repeatability --e ./generated/special-headers-conditional-request --e ./generated/encode-datetime --e ./generated/encode-bytes --e ./generated/payload-content-negotiation --e ./generated/payload-json-merge-patch --e ./generated/payload-pageable --e ./generated/payload-multipart --e ./generated/payload-media-type --e ./generated/payload-xml --e ./generated/routes --e ./generated/response-status-code-range -e ./generated/versioning-added -e ./generated/versioning-madeoptional -e ./generated/versioning-removed From 11cf3587758c6028831c6773b1ebe61db0ed5f16 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 15:53:00 -0700 Subject: [PATCH 16/40] update failing unbranded packages --- .../eng/scripts/ci/regenerate.ts | 24 +++++++++---------- .../generator/test/unbranded/requirements.txt | 6 ++--- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 5d3ef1f457e..540fd1a3be5 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -160,21 +160,9 @@ const AZURE_EMITTER_OPTIONS: Record | Record | Record[]> = { @@ -229,6 +217,18 @@ const EMITTER_OPTIONS: Record | Record Date: Wed, 16 Jul 2025 16:35:54 -0700 Subject: [PATCH 17/40] add override package-name --- packages/http-client-python/eng/scripts/ci/regenerate.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 540fd1a3be5..43ba7a90a87 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -87,6 +87,7 @@ const AZURE_EMITTER_OPTIONS: Record | Record Date: Wed, 16 Jul 2025 16:43:31 -0700 Subject: [PATCH 18/40] package-lock.json --- packages/http-client-python/package-lock.json | 40 +++++++------------ 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index c55d8b35a18..08648e1d871 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -93,7 +93,6 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.58.0.tgz", "integrity": "sha512-zhQbbbp7SekE7uNeyAdAzpTKimsaRbpI5g4mBReCT2X2CS4BWuk+mRDTb617Wrkn8Axy2M9dtlopGT0AXdMNTw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -113,7 +112,6 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.58.0.tgz", "integrity": "sha512-Z4vX+ic85hCPr27t9DKCVTj2MjHDaXDvh10Z4wVokXIR2/GjAQrHQp4OFu/0R+cwqmuXb6nnuBZNikwKk7dNzw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -128,7 +126,6 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.58.0.tgz", "integrity": "sha512-OSDADgmvvTiQgAh/7cu2yiSdc4SM5JYk3W84F+1lRiM80JG8PiRXMSZcIHIQnnySUVSiT1oMuVK+Fx5prUWJuQ==", - "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -150,7 +147,6 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.58.0.tgz", "integrity": "sha512-AkbhFxbeD3mYHbdnQEd1iWhSuQ2KxoN5JOU6BFP7mo/RVjIgGjj2ekro1tCnq381LOXdFfEoJievSFI5fvyRxQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -166,7 +162,6 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.58.0.tgz", "integrity": "sha512-PK9WjPFXR14hrGyUwhstHuNVC4fkkQeNVHvvYhz3VaP6wh+iD7P3IOeIzzRJv/qSyv82t7BrVXdQAYir434ysw==", - "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -1991,7 +1986,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.2.1.tgz", "integrity": "sha512-lUdHCRBPtianNN6QKt0G9qyyuSu7azbqKcYNimNLYQwrEIDcgSfQAUnoja9s+gtzCQQRzfbUZ8WLBC2b9cC81Q==", - "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "~7.27.1", @@ -2024,7 +2018,6 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", - "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2037,7 +2030,6 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", - "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -2052,7 +2044,6 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", - "dev": true, "license": "MIT" }, "node_modules/@typespec/compiler/node_modules/semver": { @@ -2071,7 +2062,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -2104,7 +2094,6 @@ "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", - "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -2122,7 +2111,6 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", - "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -2140,7 +2128,6 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", - "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -2150,7 +2137,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.72.1.tgz", "integrity": "sha512-vUtA/mQD9csOCRLy9/EPS3oaUEmOiBXNhDkxtb7RYaZLA5975cprP+6o4ntSk6yCYQEo0/YtDcCbS4th2VGIqQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2163,7 +2149,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.2.1.tgz", "integrity": "sha512-HEPHgVFO2oQL6uZCtpqnRYVZizfSu9BO6vAgdRl1FYJWD2G0f/A4/hK6LEgpyZP44k39M1xMSqVrll2KZ5zpnw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2237,7 +2222,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.2.1.tgz", "integrity": "sha512-PSoM6c5M7epiFdFDPL4zIJKRPUgJepMtOtO1vVOSIFuz26DcFQpc8xzBy7LBsRneSfp8b6XbsiaNXNcBP/9A1w==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2251,7 +2235,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.72.1.tgz", "integrity": "sha512-w0C91JhrVos8mAdd3OVwrcS6aSjuKlw7LtoazHenAmou/zSACKZbH4g6ko1BY8fv5lgl+q7VZ3/52uEWHOTxpw==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2447,7 +2430,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.72.1.tgz", "integrity": "sha512-J5Qitfi7uGhgkWO9aPKqHsEojt3aZHv2QbWrFvO1AkWPXHPML+1l66dmHg3XIQTmGAiUnCAj/JzS4W0E0yp9Dg==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2463,7 +2445,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.72.1.tgz", "integrity": "sha512-TJdFxpW9lgazOluDdT9N8Ojnb7T/hXMZOL094D2idBf33aeqJvSHZtWgY4po8hTsQLk8Y4m4WJJ70nT9DUEOdg==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2491,7 +2472,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.72.1.tgz", "integrity": "sha512-v1tBN2TcJilYpmb67v96YIVCGy8Su/c9hmuU6WABudWnYr26O4O+6gK2zx69RFxXORw+iw/LiDCU3XtFHbb7IQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2504,7 +2484,6 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.72.1.tgz", "integrity": "sha512-CmHXpwOojFT7cRI6ooB682OBIUVP9jMMx5bSoF9nrXg047Quaj7J0qPIwrG7d3O5lkogwPxqtPJPYaVq0+9gfg==", - "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -3092,6 +3071,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3105,6 +3085,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3112,12 +3093,14 @@ "node_modules/cliui/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/cliui/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3131,6 +3114,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3142,6 +3126,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4137,7 +4122,6 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -6074,6 +6058,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -7602,7 +7587,6 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", - "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -7615,6 +7599,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -7632,6 +7617,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -7640,6 +7626,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7647,12 +7634,14 @@ "node_modules/yargs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/yargs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7666,6 +7655,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, From cc3c049b2dbee88e643b5e1ca66ad1f1ed751d15 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 16:59:08 -0700 Subject: [PATCH 19/40] package.json fix --- packages/http-client-python/package-lock.json | 257 +++++++++++++----- packages/http-client-python/package.json | 25 +- 2 files changed, 204 insertions(+), 78 deletions(-) diff --git a/packages/http-client-python/package-lock.json b/packages/http-client-python/package-lock.json index 08648e1d871..89770d28d39 100644 --- a/packages/http-client-python/package-lock.json +++ b/packages/http-client-python/package-lock.json @@ -10,13 +10,12 @@ "hasInstallScript": true, "license": "MIT", "dependencies": { - "@typespec/http-client-python": "^0.13.0-dev.1", "js-yaml": "~4.1.0", "marked": "^15.0.6", + "prettier": "^3.6.2", "pyodide": "0.26.2", "semver": "~7.6.2", - "tsx": "~4.19.1", - "versioning": "^1.1.2" + "tsx": "~4.19.1" }, "devDependencies": { "@azure-tools/azure-http-specs": "0.1.0-alpha.23", @@ -93,6 +92,7 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-autorest/-/typespec-autorest-0.58.0.tgz", "integrity": "sha512-zhQbbbp7SekE7uNeyAdAzpTKimsaRbpI5g4mBReCT2X2CS4BWuk+mRDTb617Wrkn8Axy2M9dtlopGT0AXdMNTw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -112,6 +112,7 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-core/-/typespec-azure-core-0.58.0.tgz", "integrity": "sha512-Z4vX+ic85hCPr27t9DKCVTj2MjHDaXDvh10Z4wVokXIR2/GjAQrHQp4OFu/0R+cwqmuXb6nnuBZNikwKk7dNzw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -126,6 +127,7 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-resource-manager/-/typespec-azure-resource-manager-0.58.0.tgz", "integrity": "sha512-OSDADgmvvTiQgAh/7cu2yiSdc4SM5JYk3W84F+1lRiM80JG8PiRXMSZcIHIQnnySUVSiT1oMuVK+Fx5prUWJuQ==", + "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -147,6 +149,7 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-azure-rulesets/-/typespec-azure-rulesets-0.58.0.tgz", "integrity": "sha512-AkbhFxbeD3mYHbdnQEd1iWhSuQ2KxoN5JOU6BFP7mo/RVjIgGjj2ekro1tCnq381LOXdFfEoJievSFI5fvyRxQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -162,6 +165,7 @@ "version": "0.58.0", "resolved": "https://registry.npmjs.org/@azure-tools/typespec-client-generator-core/-/typespec-client-generator-core-0.58.0.tgz", "integrity": "sha512-PK9WjPFXR14hrGyUwhstHuNVC4fkkQeNVHvvYhz3VaP6wh+iD7P3IOeIzzRJv/qSyv82t7BrVXdQAYir434ysw==", + "dev": true, "license": "MIT", "dependencies": { "change-case": "~5.4.4", @@ -440,6 +444,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, "license": "MIT", "dependencies": { "@babel/helper-validator-identifier": "^7.27.1", @@ -454,6 +459,7 @@ "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" @@ -1072,6 +1078,7 @@ "version": "4.1.4", "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz", "integrity": "sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1095,6 +1102,7 @@ "version": "5.1.8", "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.8.tgz", "integrity": "sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1115,6 +1123,7 @@ "version": "10.1.9", "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.9.tgz", "integrity": "sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==", + "dev": true, "dependencies": { "@inquirer/figures": "^1.0.11", "@inquirer/type": "^3.0.5", @@ -1141,6 +1150,7 @@ "version": "4.2.9", "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.9.tgz", "integrity": "sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1162,6 +1172,7 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.11.tgz", "integrity": "sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1183,6 +1194,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", + "dev": true, "engines": { "node": ">=18" } @@ -1191,6 +1203,7 @@ "version": "4.1.8", "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.8.tgz", "integrity": "sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1211,6 +1224,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.11.tgz", "integrity": "sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5" @@ -1231,6 +1245,7 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.11.tgz", "integrity": "sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1252,6 +1267,7 @@ "version": "7.4.0", "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.0.tgz", "integrity": "sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==", + "dev": true, "dependencies": { "@inquirer/checkbox": "^4.1.4", "@inquirer/confirm": "^5.1.8", @@ -1280,6 +1296,7 @@ "version": "4.0.11", "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.11.tgz", "integrity": "sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/type": "^3.0.5", @@ -1301,6 +1318,7 @@ "version": "3.0.11", "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.11.tgz", "integrity": "sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1323,6 +1341,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.0.tgz", "integrity": "sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==", + "dev": true, "dependencies": { "@inquirer/core": "^10.1.9", "@inquirer/figures": "^1.0.11", @@ -1346,6 +1365,7 @@ "version": "3.0.5", "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz", "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==", + "dev": true, "engines": { "node": ">=18" }, @@ -1362,6 +1382,7 @@ "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -1378,6 +1399,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "engines": { "node": ">=12" }, @@ -1389,6 +1411,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1405,6 +1428,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, "dependencies": { "minipass": "^7.0.4" }, @@ -1450,6 +1474,7 @@ "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -1462,6 +1487,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, "engines": { "node": ">= 8" } @@ -1470,6 +1496,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -1482,6 +1509,7 @@ "version": "0.11.0", "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, "optional": true, "engines": { "node": ">=14" @@ -1738,6 +1766,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, "engines": { "node": ">=18" }, @@ -1774,7 +1803,7 @@ "version": "22.13.14", "resolved": "https://registry.npmjs.org/@types/node/-/node-22.13.14.tgz", "integrity": "sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==", - "devOptional": true, + "dev": true, "license": "MIT", "dependencies": { "undici-types": "~6.20.0" @@ -1986,6 +2015,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/compiler/-/compiler-1.2.1.tgz", "integrity": "sha512-lUdHCRBPtianNN6QKt0G9qyyuSu7azbqKcYNimNLYQwrEIDcgSfQAUnoja9s+gtzCQQRzfbUZ8WLBC2b9cC81Q==", + "dev": true, "license": "MIT", "dependencies": { "@babel/code-frame": "~7.27.1", @@ -2018,6 +2048,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, "license": "MIT", "engines": { "node": ">=12" @@ -2030,6 +2061,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-9.0.1.tgz", "integrity": "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==", + "dev": true, "license": "ISC", "dependencies": { "string-width": "^7.2.0", @@ -2044,12 +2076,30 @@ "version": "10.4.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true, "license": "MIT" }, + "node_modules/@typespec/compiler/node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/@typespec/compiler/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" @@ -2062,6 +2112,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, "license": "MIT", "dependencies": { "emoji-regex": "^10.3.0", @@ -2079,6 +2130,7 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/temporal-polyfill/-/temporal-polyfill-0.3.0.tgz", "integrity": "sha512-qNsTkX9K8hi+FHDfHmf22e/OGuXmfBm9RqNismxBrnSmZVJKegQ+HYYXT+R7Ha8F/YSm2Y34vmzD4cxMu2u95g==", + "dev": true, "license": "MIT", "dependencies": { "temporal-spec": "0.3.0" @@ -2088,12 +2140,14 @@ "version": "0.3.0", "resolved": "https://registry.npmjs.org/temporal-spec/-/temporal-spec-0.3.0.tgz", "integrity": "sha512-n+noVpIqz4hYgFSMOSiINNOUOMFtV5cZQNCmmszA6GiVFVRt3G7AqVyhXjhCSmowvQn+NsGn+jMDMKJYHd3bSQ==", + "dev": true, "license": "ISC" }, "node_modules/@typespec/compiler/node_modules/wrap-ansi": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, "license": "MIT", "dependencies": { "ansi-styles": "^6.2.1", @@ -2111,6 +2165,7 @@ "version": "18.0.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-18.0.0.tgz", "integrity": "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==", + "dev": true, "license": "MIT", "dependencies": { "cliui": "^9.0.1", @@ -2128,6 +2183,7 @@ "version": "22.0.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-22.0.0.tgz", "integrity": "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==", + "dev": true, "license": "ISC", "engines": { "node": "^20.19.0 || ^22.12.0 || >=23" @@ -2137,6 +2193,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/events/-/events-0.72.1.tgz", "integrity": "sha512-vUtA/mQD9csOCRLy9/EPS3oaUEmOiBXNhDkxtb7RYaZLA5975cprP+6o4ntSk6yCYQEo0/YtDcCbS4th2VGIqQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2149,6 +2206,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/http/-/http-1.2.1.tgz", "integrity": "sha512-HEPHgVFO2oQL6uZCtpqnRYVZizfSu9BO6vAgdRl1FYJWD2G0f/A4/hK6LEgpyZP44k39M1xMSqVrll2KZ5zpnw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2163,39 +2221,6 @@ } } }, - "node_modules/@typespec/http-client-python": { - "version": "0.13.0-dev.3", - "resolved": "https://registry.npmjs.org/@typespec/http-client-python/-/http-client-python-0.13.0-dev.3.tgz", - "integrity": "sha512-WP1YCb1jqxf4VmY94jHZcYlpmKi5wgy0++fMR1uFsU4bRFZvd+5epJB7DvMHu7Fq2Ljw9w+VnB3Wr6swCB8wFQ==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "js-yaml": "~4.1.0", - "marked": "^15.0.6", - "pyodide": "0.26.2", - "semver": "~7.6.2", - "tsx": "~4.19.1" - }, - "engines": { - "node": ">=20.0.0" - }, - "peerDependencies": { - "@azure-tools/typespec-autorest": ">=0.56.0 <1.0.0", - "@azure-tools/typespec-azure-core": ">=0.56.0 <1.0.0", - "@azure-tools/typespec-azure-resource-manager": ">=0.56.0 <1.0.0", - "@azure-tools/typespec-azure-rulesets": ">=0.56.0 <1.0.0", - "@azure-tools/typespec-client-generator-core": ">=0.56.1 <1.0.0", - "@typespec/compiler": "^1.0.0", - "@typespec/events": ">=0.70.0 <1.0.0", - "@typespec/http": "^1.0.0", - "@typespec/openapi": "^1.0.0", - "@typespec/rest": ">=0.70.0 <1.0.0", - "@typespec/sse": ">=0.70.0 <1.0.0", - "@typespec/streams": ">=0.70.0 <1.0.0", - "@typespec/versioning": ">=0.70.0 <1.0.0", - "@typespec/xml": ">=0.70.0 <1.0.0" - } - }, "node_modules/@typespec/http-specs": { "version": "0.1.0-alpha.24", "resolved": "https://registry.npmjs.org/@typespec/http-specs/-/http-specs-0.1.0-alpha.24.tgz", @@ -2222,6 +2247,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@typespec/openapi/-/openapi-1.2.1.tgz", "integrity": "sha512-PSoM6c5M7epiFdFDPL4zIJKRPUgJepMtOtO1vVOSIFuz26DcFQpc8xzBy7LBsRneSfp8b6XbsiaNXNcBP/9A1w==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2235,6 +2261,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/rest/-/rest-0.72.1.tgz", "integrity": "sha512-w0C91JhrVos8mAdd3OVwrcS6aSjuKlw7LtoazHenAmou/zSACKZbH4g6ko1BY8fv5lgl+q7VZ3/52uEWHOTxpw==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2430,6 +2457,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/sse/-/sse-0.72.1.tgz", "integrity": "sha512-J5Qitfi7uGhgkWO9aPKqHsEojt3aZHv2QbWrFvO1AkWPXHPML+1l66dmHg3XIQTmGAiUnCAj/JzS4W0E0yp9Dg==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2445,6 +2473,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/streams/-/streams-0.72.1.tgz", "integrity": "sha512-TJdFxpW9lgazOluDdT9N8Ojnb7T/hXMZOL094D2idBf33aeqJvSHZtWgY4po8hTsQLk8Y4m4WJJ70nT9DUEOdg==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2472,6 +2501,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/versioning/-/versioning-0.72.1.tgz", "integrity": "sha512-v1tBN2TcJilYpmb67v96YIVCGy8Su/c9hmuU6WABudWnYr26O4O+6gK2zx69RFxXORw+iw/LiDCU3XtFHbb7IQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2484,6 +2514,7 @@ "version": "0.72.1", "resolved": "https://registry.npmjs.org/@typespec/xml/-/xml-0.72.1.tgz", "integrity": "sha512-CmHXpwOojFT7cRI6ooB682OBIUVP9jMMx5bSoF9nrXg047Quaj7J0qPIwrG7d3O5lkogwPxqtPJPYaVq0+9gfg==", + "dev": true, "license": "MIT", "engines": { "node": ">=20.0.0" @@ -2649,6 +2680,7 @@ "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -2664,6 +2696,7 @@ "version": "4.3.2", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, "dependencies": { "type-fest": "^0.21.3" }, @@ -2678,6 +2711,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true, "engines": { "node": ">=12" }, @@ -2689,6 +2723,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2703,6 +2738,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2713,7 +2749,8 @@ "node_modules/ansi-styles/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/append-field": { "version": "1.0.0", @@ -2772,7 +2809,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/basic-auth": { "version": "2.0.1", @@ -2843,6 +2881,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -3035,12 +3074,14 @@ "node_modules/change-case": { "version": "5.4.4", "resolved": "https://registry.npmjs.org/change-case/-/change-case-5.4.4.tgz", - "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==" + "integrity": "sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==", + "dev": true }, "node_modules/chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true }, "node_modules/check-error": { "version": "2.1.1", @@ -3055,6 +3096,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, "engines": { "node": ">=18" } @@ -3063,6 +3105,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "dev": true, "engines": { "node": ">= 12" } @@ -3215,6 +3258,7 @@ "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3398,7 +3442,8 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -3420,7 +3465,8 @@ "node_modules/emoji-regex": { "version": "9.2.2", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true }, "node_modules/encodeurl": { "version": "2.0.0", @@ -3436,6 +3482,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -3546,6 +3593,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "engines": { "node": ">=6" } @@ -3850,6 +3898,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -3862,12 +3911,14 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true }, "node_modules/fast-glob": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", @@ -3884,6 +3935,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -3909,6 +3961,7 @@ "version": "3.0.6", "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, "funding": [ { "type": "github", @@ -3943,6 +3996,7 @@ "version": "1.19.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -3964,6 +4018,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4046,6 +4101,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.6", "signal-exit": "^4.0.1" @@ -4114,6 +4170,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -4122,6 +4179,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -4257,6 +4315,7 @@ "version": "14.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-14.1.0.tgz", "integrity": "sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==", + "dev": true, "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^2.1.0", @@ -4277,6 +4336,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.3.tgz", "integrity": "sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==", + "dev": true, "license": "MIT", "engines": { "node": ">= 4" @@ -4443,6 +4503,7 @@ "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -4637,6 +4698,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -4645,6 +4707,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -4653,6 +4716,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -4696,6 +4760,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -4811,6 +4876,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "dev": true, "engines": { "node": ">=18" }, @@ -4874,7 +4940,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/istanbul-lib-coverage": { "version": "3.2.2", @@ -4932,6 +4999,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, "license": "MIT" }, "node_modules/js-yaml": { @@ -4955,7 +5023,8 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -5192,6 +5261,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, "engines": { "node": ">= 8" } @@ -5200,6 +5270,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -5258,6 +5329,7 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, "engines": { "node": ">=16 || 14 >=14.17" } @@ -5266,6 +5338,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.1.tgz", "integrity": "sha512-umcy022ILvb5/3Djuu8LWeqUa8D68JaBzlttKeMWen48SjabqS3iY5w/vzeMzMUNhLDifyhbOwKDSznB1vvrwg==", + "dev": true, "dependencies": { "minipass": "^7.0.4", "rimraf": "^5.0.5" @@ -5278,6 +5351,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0" } @@ -5286,6 +5360,7 @@ "version": "10.4.5", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -5305,6 +5380,7 @@ "version": "3.4.3", "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -5318,12 +5394,14 @@ "node_modules/minizlib/node_modules/lru-cache": { "version": "10.4.3", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true }, "node_modules/minizlib/node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5338,6 +5416,7 @@ "version": "1.11.1", "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -5353,6 +5432,7 @@ "version": "5.0.10", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "dev": true, "dependencies": { "glob": "^10.3.7" }, @@ -5500,6 +5580,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", + "dev": true, "bin": { "mustache": "bin/mustache" } @@ -5508,6 +5589,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", + "dev": true, "engines": { "node": "^18.17.0 || >=20.5.0" } @@ -5691,6 +5773,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5728,7 +5811,8 @@ "node_modules/package-json-from-dist": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -5766,6 +5850,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -5800,6 +5885,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-6.0.0.tgz", "integrity": "sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -5826,12 +5912,14 @@ "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -5843,6 +5931,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, "engines": { "node": ">=4" } @@ -5896,9 +5985,10 @@ } }, "node_modules/prettier": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", - "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -5964,6 +6054,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, "funding": [ { "type": "github", @@ -6067,6 +6158,7 @@ "version": "2.0.2", "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, "engines": { "node": ">=0.10.0" } @@ -6093,6 +6185,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -6189,6 +6282,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, "funding": [ { "type": "github", @@ -6249,7 +6343,8 @@ "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true }, "node_modules/sax": { "version": "1.4.1", @@ -6353,6 +6448,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -6364,6 +6460,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } @@ -6454,6 +6551,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -6465,6 +6563,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", + "dev": true, "engines": { "node": ">=14.16" }, @@ -6561,6 +6660,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -6578,6 +6678,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6591,6 +6692,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6598,12 +6700,14 @@ "node_modules/string-width-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/string-width-cjs/node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6615,6 +6719,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { "ansi-regex": "^6.0.1" }, @@ -6630,6 +6735,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6641,6 +6747,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6687,6 +6794,7 @@ "version": "7.4.3", "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, "dependencies": { "@isaacs/fs-minipass": "^4.0.0", "chownr": "^3.0.0", @@ -6703,6 +6811,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, "bin": { "mkdirp": "dist/cjs/src/bin.js" }, @@ -6851,6 +6960,7 @@ "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -6862,6 +6972,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -6933,6 +7044,7 @@ "version": "0.21.3", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, "engines": { "node": ">=10" }, @@ -7002,13 +7114,14 @@ "version": "6.20.0", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "devOptional": true, + "dev": true, "license": "MIT" }, "node_modules/unicorn-magic": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz", "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==", + "dev": true, "license": "MIT", "engines": { "node": ">=18" @@ -7078,12 +7191,6 @@ "node": ">= 0.8" } }, - "node_modules/versioning": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/versioning/-/versioning-1.1.2.tgz", - "integrity": "sha512-LIvF/XKMprJ6ZYWBvxm1MuTZGuYqE4svbVGI1mZL7Ogyf4JLUKkuPInCi/FghPSpgqHzuBUdq/Es4ZBxkqr+vQ==", - "license": "MIT" - }, "node_modules/vite": { "version": "6.2.6", "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.6.tgz", @@ -7251,6 +7358,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "dev": true, "engines": { "node": ">=14.0.0" } @@ -7259,6 +7367,7 @@ "version": "9.0.1", "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "dev": true, "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, @@ -7270,6 +7379,7 @@ "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dev": true, "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" @@ -7278,17 +7388,20 @@ "node_modules/vscode-languageserver-textdocument": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==" + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "dev": true }, "node_modules/vscode-languageserver-types": { "version": "3.17.5", "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "dev": true }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -7390,6 +7503,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7404,6 +7518,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7420,6 +7535,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7427,12 +7543,14 @@ "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi-cjs/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7446,6 +7564,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7457,6 +7576,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7464,12 +7584,14 @@ "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7483,6 +7605,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7571,6 +7694,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, "engines": { "node": ">=10" } @@ -7579,6 +7703,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, "engines": { "node": ">=18" } @@ -7587,6 +7712,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz", "integrity": "sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==", + "dev": true, "license": "ISC", "bin": { "yaml": "bin.mjs" @@ -7679,6 +7805,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz", "integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==", + "dev": true, "engines": { "node": ">=18" }, diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index 2cfb59a74a8..fe5d4c836c4 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -60,46 +60,45 @@ "@azure-tools/typespec-azure-rulesets": ">=0.58.0 <1.0.0", "@azure-tools/typespec-client-generator-core": ">=0.58.0 <1.0.0", "@typespec/compiler": "^1.2.1", + "@typespec/events": ">=0.72.1 <1.0.0", "@typespec/http": "^1.2.1", "@typespec/openapi": "^1.2.1", "@typespec/rest": ">=0.72.1 <1.0.0", - "@typespec/versioning": ">=0.72.1 <1.0.0", - "@typespec/events": ">=0.72.1 <1.0.0", "@typespec/sse": ">=0.72.1 <1.0.0", "@typespec/streams": ">=0.72.1 <1.0.0", + "@typespec/versioning": ">=0.72.1 <1.0.0", "@typespec/xml": ">=0.72.1 <1.0.0" }, "dependencies": { - "@typespec/http-client-python": "^0.13.0-dev.1", "js-yaml": "~4.1.0", "marked": "^15.0.6", + "prettier": "^3.6.2", "pyodide": "0.26.2", "semver": "~7.6.2", - "tsx": "~4.19.1", - "versioning": "^1.1.2" + "tsx": "~4.19.1" }, "devDependencies": { + "@azure-tools/azure-http-specs": "0.1.0-alpha.23", "@azure-tools/typespec-autorest": "~0.58.0", "@azure-tools/typespec-azure-core": "~0.58.0", "@azure-tools/typespec-azure-resource-manager": "~0.58.0", "@azure-tools/typespec-azure-rulesets": "~0.58.0", "@azure-tools/typespec-client-generator-core": "~0.58.0", - "@azure-tools/azure-http-specs": "0.1.0-alpha.23", + "@types/js-yaml": "~4.0.5", + "@types/node": "~22.13.14", + "@types/semver": "7.5.8", "@typespec/compiler": "^1.2.1", + "@typespec/events": "~0.72.1", "@typespec/http": "^1.2.1", + "@typespec/http-specs": "0.1.0-alpha.24", "@typespec/openapi": "^1.2.1", "@typespec/rest": "~0.72.1", - "@typespec/versioning": "~0.72.1", - "@typespec/events": "~0.72.1", - "@typespec/spector": "0.1.0-alpha.16", "@typespec/spec-api": "0.1.0-alpha.7", + "@typespec/spector": "0.1.0-alpha.16", "@typespec/sse": "~0.72.1", "@typespec/streams": "~0.72.1", + "@typespec/versioning": "~0.72.1", "@typespec/xml": "~0.72.1", - "@typespec/http-specs": "0.1.0-alpha.24", - "@types/js-yaml": "~4.0.5", - "@types/node": "~22.13.14", - "@types/semver": "7.5.8", "c8": "^10.1.3", "chalk": "5.3.0", "rimraf": "~6.0.1", From 0624bc91506e5a43b6de85700844d5388fdc0bc9 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 18:05:02 -0700 Subject: [PATCH 20/40] update unittest reqs --- .../generator/test/unittests/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/test/unittests/requirements.txt b/packages/http-client-python/generator/test/unittests/requirements.txt index 9ef7ef8ab35..f0dce61c488 100644 --- a/packages/http-client-python/generator/test/unittests/requirements.txt +++ b/packages/http-client-python/generator/test/unittests/requirements.txt @@ -1,3 +1,3 @@ -r ../dev_requirements.txt -e ../../../generator --e ../unbranded/generated/special-words +-e ../unbranded/generated/specialwords From 94396c5fbf8b8a0d816a4fc566ff272a2eb9bc97 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 18:10:32 -0700 Subject: [PATCH 21/40] chronus --- ...p-client-python-add-pyproject-toml-2025-6-16-18-9-43.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 .chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md diff --git a/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md b/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md new file mode 100644 index 00000000000..4d90ad71e4d --- /dev/null +++ b/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md @@ -0,0 +1,7 @@ +--- +changeKind: feature +packages: + - "@typespec/http-client-python" +--- + +Adding pyproject.toml generation and optional generate-setup-py flag \ No newline at end of file From bbc643ba4cbd414aa9f8d7ff6dcb3736cb1bbbfd Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 16 Jul 2025 19:07:53 -0700 Subject: [PATCH 22/40] add back flag for setup.py generation --- cspell.yaml | 1 + .../http-client-python/emitter/src/emitter.ts | 1 + .../http-client-python/emitter/src/lib.ts | 7 +++++++ .../eng/scripts/ci/regenerate.ts | 12 +++++++++--- .../generator/pygen/__init__.py | 1 + .../pygen/codegen/serializers/__init__.py | 19 ++++++++++++++++--- .../generator/test/azure/requirements.txt | 1 + .../generator/test/unbranded/requirements.txt | 1 + 8 files changed, 37 insertions(+), 6 deletions(-) diff --git a/cspell.yaml b/cspell.yaml index b00b53a2ec6..df8339252f4 100644 --- a/cspell.yaml +++ b/cspell.yaml @@ -219,6 +219,7 @@ words: - safeint - sdkcore - segmentof + - setuppy - serde - sfixed - shiki diff --git a/packages/http-client-python/emitter/src/emitter.ts b/packages/http-client-python/emitter/src/emitter.ts index 2608be74e09..4444d08a371 100644 --- a/packages/http-client-python/emitter/src/emitter.ts +++ b/packages/http-client-python/emitter/src/emitter.ts @@ -152,6 +152,7 @@ async function onEmitMain(context: EmitContext) { } if (resolvedOptions["generate-packaging-files"]) { commandArgs["package-mode"] = sdkContext.arm ? "azure-mgmt" : "azure-dataplane"; + commandArgs["generate-setup-py"] = resolvedOptions["generate-setup-py"] === true ? "true" : "false"; } if (sdkContext.arm === true) { commandArgs["azure-arm"] = "true"; diff --git a/packages/http-client-python/emitter/src/lib.ts b/packages/http-client-python/emitter/src/lib.ts index 834ab778cd4..17bed84f3fc 100644 --- a/packages/http-client-python/emitter/src/lib.ts +++ b/packages/http-client-python/emitter/src/lib.ts @@ -22,6 +22,7 @@ export interface PythonEmitterOptions { "package-pprint-name"?: string; "head-as-boolean"?: boolean; "use-pyodide"?: boolean; + "generate-setup-py"?: boolean; } export interface PythonSdkContext extends SdkContext { @@ -86,6 +87,12 @@ export const PythonEmitterOptionsSchema: JSONSchemaType = description: "Whether to validate the versioning of the package. Defaults to `true`. If set to `false`, we will not validate the versioning of the package.", }, + "generate-setup-py": { + type: "boolean", + nullable: true, + description: + "Whether to generate `setup.py` when generating packaging files. If set to `false` and by default, `pyproject.toml` will be generated instead.", + }, }, required: [], }; diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 43ba7a90a87..9080e422e57 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -167,9 +167,15 @@ const AZURE_EMITTER_OPTIONS: Record | Record | Record[]> = { - "parameters/body-optionality": { - "package-name": "parameters-bodyoptionality", - }, + "parameters/body-optionality": [ + { + "package-name": "parameters-bodyoptionality", + }, + { + "package-name": "setuppy-parameters-bodyoptionality", + "generate-setup-py": "true", + } + ], "parameters/collection-format": { "package-name": "parameters-collectionformat", }, diff --git a/packages/http-client-python/generator/pygen/__init__.py b/packages/http-client-python/generator/pygen/__init__.py index 77d36624587..0cf469328b6 100644 --- a/packages/http-client-python/generator/pygen/__init__.py +++ b/packages/http-client-python/generator/pygen/__init__.py @@ -29,6 +29,7 @@ class OptionsDict(MutableMapping): "flavor": "azure", # need to default to azure in shared code so we don't break swagger generation "from-typespec": False, "generate-sample": False, + "generate-setup-py": False, "generate-test": False, "head-as-boolean": True, "keep-version-file": False, 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 2fc68daa445..459212935c2 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -53,10 +53,9 @@ "LICENSE.jinja2", "MANIFEST.in.jinja2", "README.md.jinja2", - "pyproject.toml.jinja2", ] -_REGENERATE_FILES = {"MANIFEST.in", "pyproject.toml"} +_REGENERATE_FILES = {"MANIFEST.in"} AsyncInfo = namedtuple("AsyncInfo", ["async_mode", "async_path"]) # extract sub folders. For example, source_file_path is like: @@ -80,6 +79,15 @@ def __init__( ) -> None: super().__init__(output_folder=output_folder, **kwargs) self.code_model = code_model + self._regenerate_setup_py() + + def _regenerate_setup_py(self): + if self.code_model.options["generate-setup-py"]: + _PACKAGE_FILES.append("setup.py.jinja2") + _REGENERATE_FILES.add("setup.py") + else: + _PACKAGE_FILES.append("pyproject.toml.jinja2") + _REGENERATE_FILES.add("pyproject.toml") @property def has_aio_folder(self) -> bool: @@ -127,7 +135,12 @@ def serialize(self) -> None: exec_path = self.exec_path(client_namespace) if client_namespace == "": # remove setup.py file - self.remove_file(exec_path / Path("setup.py")) + if self.code_model.options.get("generate-setup-py"): + # Write the setup file + if self.code_model.options["basic-setup-py"]: + self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) + else: + self.remove_file(exec_path / Path("setup.py")) # add packaging files in root namespace (e.g. setup.py, README.md, etc.) if self.code_model.options.get("package-mode"): diff --git a/packages/http-client-python/generator/test/azure/requirements.txt b/packages/http-client-python/generator/test/azure/requirements.txt index 53a7eecc3e9..17c70fbe319 100644 --- a/packages/http-client-python/generator/test/azure/requirements.txt +++ b/packages/http-client-python/generator/test/azure/requirements.txt @@ -59,6 +59,7 @@ azure-mgmt-core==1.5.0 -e ./generated/payload-xml -e ./generated/response-statuscoderange -e ./generated/routes +-e ./generated/setuppy-parameters-bodyoptionality -e ./generated/serialization-encodedname-json -e ./generated/server-endpoint-notdefined -e ./generated/server-path-multiple diff --git a/packages/http-client-python/generator/test/unbranded/requirements.txt b/packages/http-client-python/generator/test/unbranded/requirements.txt index 3874feb380f..8f75fd20363 100644 --- a/packages/http-client-python/generator/test/unbranded/requirements.txt +++ b/packages/http-client-python/generator/test/unbranded/requirements.txt @@ -25,6 +25,7 @@ -e ./generated/payload-xml -e ./generated/response-statuscoderange -e ./generated/routes +-e ./generated/setuppy-parameters-bodyoptionality -e ./generated/serialization-encodedname-json -e ./generated/server-endpoint-notdefined -e ./generated/server-path-multiple From be5a131fed2dd149718572029469f213c8815202 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 17 Jul 2025 09:22:16 -0700 Subject: [PATCH 23/40] format --- .../http-client-python/emitter/src/emitter.ts | 3 +- .../eng/scripts/ci/regenerate.ts | 2 +- .../pygen/codegen/serializers/__init__.py | 13 ++++---- .../codegen/serializers/general_serializer.py | 32 ++++++++++--------- 4 files changed, 27 insertions(+), 23 deletions(-) diff --git a/packages/http-client-python/emitter/src/emitter.ts b/packages/http-client-python/emitter/src/emitter.ts index 4444d08a371..2f183128629 100644 --- a/packages/http-client-python/emitter/src/emitter.ts +++ b/packages/http-client-python/emitter/src/emitter.ts @@ -152,7 +152,8 @@ async function onEmitMain(context: EmitContext) { } if (resolvedOptions["generate-packaging-files"]) { commandArgs["package-mode"] = sdkContext.arm ? "azure-mgmt" : "azure-dataplane"; - commandArgs["generate-setup-py"] = resolvedOptions["generate-setup-py"] === true ? "true" : "false"; + commandArgs["generate-setup-py"] = + resolvedOptions["generate-setup-py"] === true ? "true" : "false"; } if (sdkContext.arm === true) { commandArgs["azure-arm"] = "true"; diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 9080e422e57..8a4e3968904 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -174,7 +174,7 @@ const EMITTER_OPTIONS: Record | Record bool: diff --git a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py index 4f83b9fe64f..ec6c1b5cc2a 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/general_serializer.py @@ -80,7 +80,7 @@ def _keep_pyproject_fields(self, file_path: "Path") -> dict: if "dependencies" in loaded_pyproject_toml["project"]: kept_deps = [] for dep in loaded_pyproject_toml["project"]["dependencies"]: - dep_name = re.split(r'[<>=\[]', dep)[0].strip() + dep_name = re.split(r"[<>=\[]", dep)[0].strip() # Check if dependency is one we track in VERSION_MAP if dep_name in VERSION_MAP: @@ -100,9 +100,9 @@ def _keep_pyproject_fields(self, file_path: "Path") -> dict: # Keep optional dependencies if "optional-dependencies" in loaded_pyproject_toml["project"]: - result["KEEP_FIELDS"]["project.optional-dependencies"] = ( - loaded_pyproject_toml["project"]["optional-dependencies"] - ) + result["KEEP_FIELDS"]["project.optional-dependencies"] = loaded_pyproject_toml["project"][ + "optional-dependencies" + ] return result @@ -128,17 +128,19 @@ def serialize_package_file(self, template_name: str, file_path: "Path", **kwargs dev_status = "4 - Beta" else: dev_status = "5 - Production/Stable" - params.update({ - "code_model": self.code_model, - "dev_status": dev_status, - "token_credential": token_credential, - "pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))], - "init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))], - "client_name": self.code_model.clients[0].name if self.code_model.clients else "", - "VERSION_MAP": VERSION_MAP, - "MIN_PYTHON_VERSION": MIN_PYTHON_VERSION, - "MAX_PYTHON_VERSION": MAX_PYTHON_VERSION, - }) + params.update( + { + "code_model": self.code_model, + "dev_status": dev_status, + "token_credential": token_credential, + "pkgutil_names": [".".join(package_parts[: i + 1]) for i in range(len(package_parts))], + "init_names": ["/".join(package_parts[: i + 1]) + "/__init__.py" for i in range(len(package_parts))], + "client_name": self.code_model.clients[0].name if self.code_model.clients else "", + "VERSION_MAP": VERSION_MAP, + "MIN_PYTHON_VERSION": MIN_PYTHON_VERSION, + "MAX_PYTHON_VERSION": MAX_PYTHON_VERSION, + } + ) params.update({"options": self.code_model.options}) params.update(kwargs) return template.render(file_import=FileImport(self.code_model), **params) From b30fa37a392df79dae1db91614431dfb31c2c1c2 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 17 Jul 2025 12:20:40 -0700 Subject: [PATCH 24/40] fix errors --- .../eng/scripts/ci/regenerate.ts | 3 --- packages/http-client-python/package-lock.json | 25 +++---------------- packages/http-client-python/package.json | 21 ++++++++-------- 3 files changed, 14 insertions(+), 35 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 8a4e3968904..cdf7cc68835 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -226,15 +226,12 @@ const EMITTER_OPTIONS: Record | Record=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/@typespec/compiler/node_modules/semver": { "version": "7.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", @@ -5985,10 +5968,10 @@ } }, "node_modules/prettier": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", - "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", - "license": "MIT", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "dev": true, "bin": { "prettier": "bin/prettier.cjs" }, diff --git a/packages/http-client-python/package.json b/packages/http-client-python/package.json index fe5d4c836c4..43e613bcfac 100644 --- a/packages/http-client-python/package.json +++ b/packages/http-client-python/package.json @@ -60,45 +60,44 @@ "@azure-tools/typespec-azure-rulesets": ">=0.58.0 <1.0.0", "@azure-tools/typespec-client-generator-core": ">=0.58.0 <1.0.0", "@typespec/compiler": "^1.2.1", - "@typespec/events": ">=0.72.1 <1.0.0", "@typespec/http": "^1.2.1", "@typespec/openapi": "^1.2.1", "@typespec/rest": ">=0.72.1 <1.0.0", + "@typespec/versioning": ">=0.72.1 <1.0.0", + "@typespec/events": ">=0.72.1 <1.0.0", "@typespec/sse": ">=0.72.1 <1.0.0", "@typespec/streams": ">=0.72.1 <1.0.0", - "@typespec/versioning": ">=0.72.1 <1.0.0", "@typespec/xml": ">=0.72.1 <1.0.0" }, "dependencies": { "js-yaml": "~4.1.0", "marked": "^15.0.6", - "prettier": "^3.6.2", "pyodide": "0.26.2", "semver": "~7.6.2", "tsx": "~4.19.1" }, "devDependencies": { - "@azure-tools/azure-http-specs": "0.1.0-alpha.23", "@azure-tools/typespec-autorest": "~0.58.0", "@azure-tools/typespec-azure-core": "~0.58.0", "@azure-tools/typespec-azure-resource-manager": "~0.58.0", "@azure-tools/typespec-azure-rulesets": "~0.58.0", "@azure-tools/typespec-client-generator-core": "~0.58.0", - "@types/js-yaml": "~4.0.5", - "@types/node": "~22.13.14", - "@types/semver": "7.5.8", + "@azure-tools/azure-http-specs": "0.1.0-alpha.23", "@typespec/compiler": "^1.2.1", - "@typespec/events": "~0.72.1", "@typespec/http": "^1.2.1", - "@typespec/http-specs": "0.1.0-alpha.24", "@typespec/openapi": "^1.2.1", "@typespec/rest": "~0.72.1", - "@typespec/spec-api": "0.1.0-alpha.7", + "@typespec/versioning": "~0.72.1", + "@typespec/events": "~0.72.1", "@typespec/spector": "0.1.0-alpha.16", + "@typespec/spec-api": "0.1.0-alpha.7", "@typespec/sse": "~0.72.1", "@typespec/streams": "~0.72.1", - "@typespec/versioning": "~0.72.1", "@typespec/xml": "~0.72.1", + "@typespec/http-specs": "0.1.0-alpha.24", + "@types/js-yaml": "~4.0.5", + "@types/node": "~22.13.14", + "@types/semver": "7.5.8", "c8": "^10.1.3", "chalk": "5.3.0", "rimraf": "~6.0.1", From f4a4bea2e98ff9597991cea2caf6c6ae742bd6eb Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 17 Jul 2025 15:53:13 -0700 Subject: [PATCH 25/40] revert package directory name changes and fix issue in apistubgen new version --- .../eng/scripts/ci/regenerate.ts | 109 ++++-------------- .../generator/test/azure/requirements.txt | 98 ++++++++-------- .../generator/test/azure/tox.ini | 4 +- .../test_authentication.py | 11 +- .../generator/test/unbranded/requirements.txt | 50 ++++---- .../generator/test/unbranded/tox.ini | 4 +- .../generator/test/unittests/requirements.txt | 2 +- 7 files changed, 106 insertions(+), 172 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index cdf7cc68835..b051220082c 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -37,101 +37,61 @@ interface TspCommand { } const AZURE_EMITTER_OPTIONS: Record | Record[]> = { - "azure/special-headers/client-request-id": { - "package-name": "azure-specialheaders-clientrequestid", - }, - "azure/resource-manager/large-header": { - "package-name": "azure-resourcemanager-largeheader", - }, - "azure/resource-manager/resources": { - "package-name": "azure-resourcemanager-resources", - }, - "azure/resource-manager/common-properties": { - "package-name": "azure-resourcemanager-commonproperties", - }, - "azure/resource-manager/operation-templates": { - "package-name": "azure-resourcemanager-operationtemplates", - }, - "azure/resource-manager/non-resource": { - "package-name": "azure-resourcemanager-nonresource", - }, - "client/namespace": { - "package-name": "client-namespace", - }, "azure/client-generator-core/access": { - "package-name": "specs-azure-clientgenerator-core-access", namespace: "specs.azure.clientgenerator.core.access", }, "azure/client-generator-core/api-version": { - "package-name": "specs-azure-clientgenerator-core-apiversion", namespace: "specs.azure.clientgenerator.core.apiversion", }, "azure/client-generator-core/client-initialization": { - "package-name": "specs-azure-clientgenerator-core-clientinitialization", namespace: "specs.azure.clientgenerator.core.clientinitialization", }, "azure/client-generator-core/client-location": { - "package-name": "specs-azure-clientgenerator-core-clientlocation", namespace: "specs.azure.clientgenerator.core.clientlocation", }, "azure/client-generator-core/deserialize-empty-string-as-null": { - "package-name": "specs-azure-clientgenerator-core-emptystring", namespace: "specs.azure.clientgenerator.core.emptystring", }, "azure/client-generator-core/flatten-property": { - "package-name": "specs-azure-clientgenerator-core-flattenproperty", namespace: "specs.azure.clientgenerator.core.flattenproperty", }, "azure/client-generator-core/usage": { - "package-name": "specs-azure-clientgenerator-core-usage", namespace: "specs.azure.clientgenerator.core.usage", }, "azure/client-generator-core/override": { - "package-name": "specs-azure-clientgenerator-core-override", namespace: "specs.azure.clientgenerator.core.override", }, "azure/core/basic": { - "package-name": "specs-azure-core-basic", namespace: "specs.azure.core.basic", }, "azure/core/lro/rpc": { - "package-name": "specs-azure-core-lro-rpc", namespace: "specs.azure.core.lro.rpc", }, "azure/core/lro/standard": { - "package-name": "specs-azure-core-lro-standard", namespace: "specs.azure.core.lro.standard", }, "azure/core/model": { - "package-name": "specs-azure-core-model", namespace: "specs.azure.core.model", }, "azure/core/page": { - "package-name": "specs-azure-core-page", namespace: "specs.azure.core.page", }, "azure/core/scalar": { - "package-name": "specs-azure-core-scalar", namespace: "specs.azure.core.scalar", }, "azure/core/traits": { - "package-name": "specs-azure-core-traits", namespace: "specs.azure.core.traits", }, "azure/encode/duration": { - "package-name": "specs-azure-encode-duration", namespace: "specs.azure.encode.duration", }, "azure/example/basic": { - "package-name": "specs-azure-example-basic", namespace: "specs.azure.example.basic", }, "azure/payload/pageable": { - "package-name": "specs-azure-payload-pageable", namespace: "specs.azure.payload.pageable", }, "client/structure/default": { - "package-name": "client-structure-service", namespace: "client.structure.service", }, "client/structure/multi-client": { @@ -161,48 +121,21 @@ const AZURE_EMITTER_OPTIONS: Record | Record | Record[]> = { - "parameters/body-optionality": [ - { - "package-name": "parameters-bodyoptionality", - }, - { - "package-name": "setuppy-parameters-bodyoptionality", - "generate-setup-py": "true", - }, - ], - "parameters/collection-format": { - "package-name": "parameters-collectionformat", - }, - "response/status-code-range": { - "package-name": "response-statuscoderange", - }, - "payload/json-merge-patch": { - "package-name": "payload-jsonmergepatch", - }, - "special-headers/conditional-request": { - "package-name": "specialheaders-conditionalrequest", - }, - "special-headers/repeatability": { - "package-name": "specialheaders-repeatability", - }, - "server/versions/not-versioned": { - "package-name": "server-versions-notversioned", - }, - "server/endpoint/not-defined": { - "package-name": "server-endpoint-notdefined", - }, - "authentication/api-key": { - "package-name": "authentication-apikey", - }, - "payload/media-type": { - "package-name": "payload-mediatype", - }, "resiliency/srv-driven/old.tsp": { "package-name": "resiliency-srv-driven1", namespace: "resiliency.srv.driven1", @@ -220,19 +153,17 @@ const EMITTER_OPTIONS: Record | Record Date: Thu, 17 Jul 2025 16:56:23 -0700 Subject: [PATCH 26/40] wording --- packages/http-client-python/emitter/src/lib.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/emitter/src/lib.ts b/packages/http-client-python/emitter/src/lib.ts index 17bed84f3fc..e53eeed8dc7 100644 --- a/packages/http-client-python/emitter/src/lib.ts +++ b/packages/http-client-python/emitter/src/lib.ts @@ -91,7 +91,7 @@ export const PythonEmitterOptionsSchema: JSONSchemaType = type: "boolean", nullable: true, description: - "Whether to generate `setup.py` when generating packaging files. If set to `false` and by default, `pyproject.toml` will be generated instead.", + "Whether to generate `setup.py` when `generate-packaging-files` is `true`. If set to `false` and by default, `pyproject.toml` will be generated instead.", }, }, required: [], From 44994d88930cf08d97f98fea332e0cbdd67f515f Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 17 Jul 2025 18:06:54 -0700 Subject: [PATCH 27/40] fix test --- .../generator/test/unbranded/mock_api_tests/test_unbranded.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py index 1f52da5d0f7..bbcd693184f 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py @@ -54,4 +54,4 @@ def test_sensitive_word(): check_folder = (Path(os.path.dirname(__file__)) / "../generated").resolve() assert [] == check_sensitive_word(check_folder, "azure") # after update spector, it shall also equal to [] - assert ["authentication-oauth2", "authentication-union"] == check_sensitive_word(check_folder, "microsoft") + assert ["authentication-oauth2", "authentication-union", "setuppy-authentication-union"] == check_sensitive_word(check_folder, "microsoft") From 418dc2437fda0373f38d42617f2ca5e71160557b Mon Sep 17 00:00:00 2001 From: swathipil Date: Mon, 21 Jul 2025 11:14:21 -0700 Subject: [PATCH 28/40] generate setup.py if basic-setup-py is set --- packages/http-client-python/eng/scripts/ci/regenerate.ts | 5 +++++ .../generator/pygen/codegen/serializers/__init__.py | 4 ++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index b051220082c..5c776489d4c 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -163,6 +163,11 @@ const EMITTER_OPTIONS: Record | Record None: exec_path = self.exec_path(client_namespace) if client_namespace == "": # remove setup.py file - if self.code_model.options.get("generate-setup-py"): + if self.code_model.options.get("generate-setup-py") or self.code_model.options.get("basic-setup-py"): # Write the setup file if self.code_model.options["basic-setup-py"]: self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) From ad00bf3049ec3cb901303ab2887c9bb121f1e360 Mon Sep 17 00:00:00 2001 From: swathipil Date: Mon, 21 Jul 2025 11:15:29 -0700 Subject: [PATCH 29/40] remove basic-setup-py test in tsp since it's in swagger tests --- packages/http-client-python/eng/scripts/ci/regenerate.ts | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index 5c776489d4c..b051220082c 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -163,11 +163,6 @@ const EMITTER_OPTIONS: Record | Record Date: Tue, 22 Jul 2025 11:10:52 -0700 Subject: [PATCH 30/40] exclude samples --- .../codegen/templates/packaging_templates/pyproject.toml.jinja2 | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index 981e68144b3..2522d1fec50 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -91,6 +91,7 @@ readme = {file = ["README.md"], content-type = "text/markdown"} [tool.setuptools.packages.find] exclude = [ "tests*", + "samples*", {% for pkgutil_name in pkgutil_names %} "{{ pkgutil_name }}", {% endfor %} From 41ff4930516b75639a595c8c58791845fde6916f Mon Sep 17 00:00:00 2001 From: swathipil Date: Mon, 28 Jul 2025 12:03:22 -0700 Subject: [PATCH 31/40] update keep setup py logic --- .../generator/pygen/codegen/serializers/__init__.py | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) 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 eaeefcf2214..17257da8f47 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -135,12 +135,11 @@ def serialize(self) -> None: for client_namespace, client_namespace_type in self.code_model.client_namespace_types.items(): exec_path = self.exec_path(client_namespace) if client_namespace == "": - # remove setup.py file - if self.code_model.options.get("generate-setup-py") or self.code_model.options.get("basic-setup-py"): + if self.code_model.options["basic-setup-py"]: # Write the setup file - if self.code_model.options["basic-setup-py"]: - self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) - else: + self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) + elif not self.code_model.options["generate-setup-py"]: + # remove setup.py file self.remove_file(exec_path / Path("setup.py")) # add packaging files in root namespace (e.g. setup.py, README.md, etc.) From e0b8bf66ef51fc2c14999f76f3f8b7157eff6781 Mon Sep 17 00:00:00 2001 From: swathipil Date: Mon, 28 Jul 2025 12:09:53 -0700 Subject: [PATCH 32/40] rename to keep-setup-py --- ...tp-client-python-add-pyproject-toml-2025-6-16-18-9-43.md | 2 +- packages/http-client-python/emitter/src/emitter.ts | 3 +-- packages/http-client-python/emitter/src/lib.ts | 6 +++--- packages/http-client-python/generator/pygen/__init__.py | 2 +- .../generator/pygen/codegen/serializers/__init__.py | 4 ++-- 5 files changed, 8 insertions(+), 9 deletions(-) diff --git a/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md b/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md index 4d90ad71e4d..19df2a64d99 100644 --- a/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md +++ b/.chronus/changes/http-client-python-add-pyproject-toml-2025-6-16-18-9-43.md @@ -4,4 +4,4 @@ packages: - "@typespec/http-client-python" --- -Adding pyproject.toml generation and optional generate-setup-py flag \ No newline at end of file +Adding pyproject.toml generation and optional keep-setup-py flag diff --git a/packages/http-client-python/emitter/src/emitter.ts b/packages/http-client-python/emitter/src/emitter.ts index 2f183128629..7de55c3ae5e 100644 --- a/packages/http-client-python/emitter/src/emitter.ts +++ b/packages/http-client-python/emitter/src/emitter.ts @@ -152,8 +152,7 @@ async function onEmitMain(context: EmitContext) { } if (resolvedOptions["generate-packaging-files"]) { commandArgs["package-mode"] = sdkContext.arm ? "azure-mgmt" : "azure-dataplane"; - commandArgs["generate-setup-py"] = - resolvedOptions["generate-setup-py"] === true ? "true" : "false"; + commandArgs["keep-setup-py"] = resolvedOptions["keep-setup-py"] === true ? "true" : "false"; } if (sdkContext.arm === true) { commandArgs["azure-arm"] = "true"; diff --git a/packages/http-client-python/emitter/src/lib.ts b/packages/http-client-python/emitter/src/lib.ts index e53eeed8dc7..f946f445df5 100644 --- a/packages/http-client-python/emitter/src/lib.ts +++ b/packages/http-client-python/emitter/src/lib.ts @@ -22,7 +22,7 @@ export interface PythonEmitterOptions { "package-pprint-name"?: string; "head-as-boolean"?: boolean; "use-pyodide"?: boolean; - "generate-setup-py"?: boolean; + "keep-setup-py"?: boolean; } export interface PythonSdkContext extends SdkContext { @@ -87,11 +87,11 @@ export const PythonEmitterOptionsSchema: JSONSchemaType = description: "Whether to validate the versioning of the package. Defaults to `true`. If set to `false`, we will not validate the versioning of the package.", }, - "generate-setup-py": { + "keep-setup-py": { type: "boolean", nullable: true, description: - "Whether to generate `setup.py` when `generate-packaging-files` is `true`. If set to `false` and by default, `pyproject.toml` will be generated instead.", + "Whether to keep the existing `setup.py` when `generate-packaging-files` is `true`. If set to `false` and by default, `pyproject.toml` will be generated instead. To generate `setup.py`, use `basic-setup-py`.", }, }, required: [], diff --git a/packages/http-client-python/generator/pygen/__init__.py b/packages/http-client-python/generator/pygen/__init__.py index 0cf469328b6..a84af7167d7 100644 --- a/packages/http-client-python/generator/pygen/__init__.py +++ b/packages/http-client-python/generator/pygen/__init__.py @@ -29,7 +29,7 @@ class OptionsDict(MutableMapping): "flavor": "azure", # need to default to azure in shared code so we don't break swagger generation "from-typespec": False, "generate-sample": False, - "generate-setup-py": False, + "keep-setup-py": False, "generate-test": False, "head-as-boolean": True, "keep-version-file": False, 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 17257da8f47..9ec4d3fca90 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -83,7 +83,7 @@ def __init__( self._regenerate_setup_py() def _regenerate_setup_py(self): - if self.code_model.options["generate-setup-py"] or self.code_model.options["basic-setup-py"]: + if self.code_model.options["keep-setup-py"] or self.code_model.options["basic-setup-py"]: _PACKAGE_FILES.append("setup.py.jinja2") _REGENERATE_FILES.add("setup.py") else: @@ -138,7 +138,7 @@ def serialize(self) -> None: if self.code_model.options["basic-setup-py"]: # Write the setup file self.write_file(exec_path / Path("setup.py"), general_serializer.serialize_setup_file()) - elif not self.code_model.options["generate-setup-py"]: + elif not self.code_model.options["keep-setup-py"]: # remove setup.py file self.remove_file(exec_path / Path("setup.py")) From f34c9b9dc63d850c493e73223f4af9b7511824b5 Mon Sep 17 00:00:00 2001 From: swathipil Date: Mon, 28 Jul 2025 14:57:52 -0700 Subject: [PATCH 33/40] keep setup py if multiapi --- packages/http-client-python/generator/pygen/__init__.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/http-client-python/generator/pygen/__init__.py b/packages/http-client-python/generator/pygen/__init__.py index a84af7167d7..7f363636d82 100644 --- a/packages/http-client-python/generator/pygen/__init__.py +++ b/packages/http-client-python/generator/pygen/__init__.py @@ -135,6 +135,10 @@ def _validate_combinations(self) -> None: "We are working on creating a new multiapi SDK for version tolerant and it is not available yet." ) + # If multiapi, do not generate default pyproject.toml + if self.get("multiapi"): + self["keep-setup-py"] = True + if self.get("client-side-validation") and self.get("version-tolerant"): raise ValueError("Can not generate version tolerant with --client-side-validation. ") From 5ff70f7b1d5a073287525715ca3ba6ec2ca1bbaf Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 30 Jul 2025 13:31:59 -0700 Subject: [PATCH 34/40] add get_output_folder to resolve path correctly for tsp vs autorest --- packages/http-client-python/eng/scripts/ci/regenerate.ts | 2 +- packages/http-client-python/generator/pygen/__init__.py | 3 +++ .../generator/pygen/codegen/serializers/__init__.py | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/packages/http-client-python/eng/scripts/ci/regenerate.ts b/packages/http-client-python/eng/scripts/ci/regenerate.ts index b051220082c..de69805cd2e 100644 --- a/packages/http-client-python/eng/scripts/ci/regenerate.ts +++ b/packages/http-client-python/eng/scripts/ci/regenerate.ts @@ -161,7 +161,7 @@ const EMITTER_OPTIONS: Record | Record None: _LOGGER.warning("Loading python.json file. This behavior will be depreacted") self.options.update(python_json) + def get_output_folder(self) -> str: + return self.output_folder + def read_file(self, path: Union[str, Path]) -> str: """Directly reading from disk""" # make path relative to output folder 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 9ec4d3fca90..8015936e59c 100644 --- a/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py +++ b/packages/http-client-python/generator/pygen/codegen/serializers/__init__.py @@ -247,7 +247,7 @@ def _serialize_and_write_package_files(self, client_namespace: str) -> None: if self.keep_version_file and file == "setup.py": # don't regenerate setup.py file if the version file is more up to date continue - file_path = self.output_folder / Path(output_name) + file_path = self.get_output_folder() / Path(output_name) self.write_file( output_name, serializer.serialize_package_file(template_name, file_path, **params), From e553edde99c787071af89c9fb57f7ddb7177b790 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 30 Jul 2025 13:48:20 -0700 Subject: [PATCH 35/40] format --- packages/http-client-python/CONTRIBUTING.md | 3 +++ .../generator/test/unbranded/mock_api_tests/test_unbranded.py | 4 +++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/packages/http-client-python/CONTRIBUTING.md b/packages/http-client-python/CONTRIBUTING.md index 4ccf6b01766..9ec92304304 100644 --- a/packages/http-client-python/CONTRIBUTING.md +++ b/packages/http-client-python/CONTRIBUTING.md @@ -112,16 +112,19 @@ Due to the integration with `@azure-tools/typespec-python`, we require downstrea After your PR is created and CI passes: 1. **Get the build artifact URL**: + - In your PR's CI results, click on "5 published; 1 consumed" (or similar) - Navigate to: `Published artifacts` → `build_artifacts_python` → `packages` → `typespec-http-client-python-x.x.x.tgz` - Click the three dots and select "Copy download url" 2. **Trigger downstream testing**: + - Run [this pipeline](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=4278466&view=results) with: - `PULL-REQUEST-URL`: Your PR URL from step 1 - `ARTIFACTS-URL`: The artifact URL from step 1 3. **Review downstream changes**: + - The pipeline will create a PR in [autorest.python](https://github.com/Azure/autorest.python) - Follow the [autorest.python CONTRIBUTING.md](https://github.com/Azure/autorest.python/blob/main/CONTRIBUTING.md) for any additional changes needed diff --git a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py index bbcd693184f..60ce44be022 100644 --- a/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py +++ b/packages/http-client-python/generator/test/unbranded/mock_api_tests/test_unbranded.py @@ -54,4 +54,6 @@ def test_sensitive_word(): check_folder = (Path(os.path.dirname(__file__)) / "../generated").resolve() assert [] == check_sensitive_word(check_folder, "azure") # after update spector, it shall also equal to [] - assert ["authentication-oauth2", "authentication-union", "setuppy-authentication-union"] == check_sensitive_word(check_folder, "microsoft") + assert ["authentication-oauth2", "authentication-union", "setuppy-authentication-union"] == check_sensitive_word( + check_folder, "microsoft" + ) From 15bdf66c59f14075769e370ec63af0e0f07441aa Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 30 Jul 2025 13:50:38 -0700 Subject: [PATCH 36/40] lint --- packages/http-client-python/generator/pygen/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/__init__.py b/packages/http-client-python/generator/pygen/__init__.py index 2e304b11987..b83a2c51626 100644 --- a/packages/http-client-python/generator/pygen/__init__.py +++ b/packages/http-client-python/generator/pygen/__init__.py @@ -215,7 +215,7 @@ def __init__(self, *, output_folder: Union[str, Path], **kwargs: Any) -> None: _LOGGER.warning("Loading python.json file. This behavior will be depreacted") self.options.update(python_json) - def get_output_folder(self) -> str: + def get_output_folder(self) -> Path: return self.output_folder def read_file(self, path: Union[str, Path]) -> str: From 2ffd9ac3e58cb88ceed8782584a5fa425b0f43a1 Mon Sep 17 00:00:00 2001 From: swathipil Date: Wed, 30 Jul 2025 14:09:25 -0700 Subject: [PATCH 37/40] undo contributing format --- packages/http-client-python/CONTRIBUTING.md | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/http-client-python/CONTRIBUTING.md b/packages/http-client-python/CONTRIBUTING.md index 9ec92304304..4ccf6b01766 100644 --- a/packages/http-client-python/CONTRIBUTING.md +++ b/packages/http-client-python/CONTRIBUTING.md @@ -112,19 +112,16 @@ Due to the integration with `@azure-tools/typespec-python`, we require downstrea After your PR is created and CI passes: 1. **Get the build artifact URL**: - - In your PR's CI results, click on "5 published; 1 consumed" (or similar) - Navigate to: `Published artifacts` → `build_artifacts_python` → `packages` → `typespec-http-client-python-x.x.x.tgz` - Click the three dots and select "Copy download url" 2. **Trigger downstream testing**: - - Run [this pipeline](https://dev.azure.com/azure-sdk/internal/_build/results?buildId=4278466&view=results) with: - `PULL-REQUEST-URL`: Your PR URL from step 1 - `ARTIFACTS-URL`: The artifact URL from step 1 3. **Review downstream changes**: - - The pipeline will create a PR in [autorest.python](https://github.com/Azure/autorest.python) - Follow the [autorest.python CONTRIBUTING.md](https://github.com/Azure/autorest.python/blob/main/CONTRIBUTING.md) for any additional changes needed From 4e2f8d363e99c96e224c4b1d0d40b595e96bfa3f Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 31 Jul 2025 09:57:28 -0700 Subject: [PATCH 38/40] add keep setup py aio test --- .../asynctests/test_authentication_async.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/http-client-python/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py b/packages/http-client-python/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py index bb92d42bc4a..357eed73603 100644 --- a/packages/http-client-python/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py +++ b/packages/http-client-python/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py @@ -8,6 +8,7 @@ from authentication.http.custom.aio import CustomClient from authentication.oauth2.aio import OAuth2Client from authentication.union.aio import UnionClient +from setuppy.authentication.union.aio import UnionClient as SetuppyUnionClient # Utilities functions @@ -99,14 +100,16 @@ async def test_oauth2_invalid(oauth2_client, core_library): @pytest.mark.asyncio -async def test_union_keyvalid(api_key_client): - client = api_key_client(UnionClient) +@pytest.mark.parametrize("union_client_type", [UnionClient, SetuppyUnionClient]) +async def test_union_keyvalid(api_key_client, union_client_type): + client = api_key_client(union_client_type) await client.valid_key() @pytest.mark.asyncio -async def test_union_tokenvalid(oauth2_client): - client = oauth2_client(UnionClient) +@pytest.mark.parametrize("union_client_type", [UnionClient, SetuppyUnionClient]) +async def test_union_tokenvalid(oauth2_client, union_client_type): + client = oauth2_client(union_client_type) await client.valid_token(enforce_https=False) From 52747c123dabce8776fec85c1f38a1a2654617d8 Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 31 Jul 2025 10:35:51 -0700 Subject: [PATCH 39/40] fix pyproject description spacing --- .../codegen/templates/packaging_templates/pyproject.toml.jinja2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 index 2522d1fec50..cbbed8f211e 100644 --- a/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +++ b/packages/http-client-python/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 @@ -14,7 +14,7 @@ name = "{{ options.get('package-name')|lower }}" authors = [ { name = "{{ code_model.company_name }}"{% if code_model.is_azure_flavor %}, email = "azpysdkhelp@microsoft.com"{% endif %} }, ] -description = "{{ code_model.company_name }}{% if code_model.is_azure_flavor and not options.get('package-pprint-name').startswith('Azure ') %} Azure {% endif %}{{ options.get('package-pprint-name') }} Client Library for Python" +description = "{{ code_model.company_name }} {% if code_model.is_azure_flavor and not options.get('package-pprint-name').startswith('Azure ') %}Azure {% endif %}{{ options.get('package-pprint-name') }} Client Library for Python" license = {text = "MIT License"} classifiers = [ "Development Status :: {{ dev_status }}", From 1356fde4dfb5f874ff2578577556457328e84f2c Mon Sep 17 00:00:00 2001 From: swathipil Date: Thu, 31 Jul 2025 12:38:48 -0700 Subject: [PATCH 40/40] remove changelog entry --- packages/http-client-python/CHANGELOG.md | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/http-client-python/CHANGELOG.md b/packages/http-client-python/CHANGELOG.md index 79e522352eb..4e51290c116 100644 --- a/packages/http-client-python/CHANGELOG.md +++ b/packages/http-client-python/CHANGELOG.md @@ -18,7 +18,6 @@ ### Features - [#7924](https://github.com/microsoft/typespec/pull/7924) Support @override to reorder operation parameters -- [#7829](https://github.com/microsoft/typespec/pull/7829) [http-client-python] add pyproject toml ### Bump dependencies