@typespec/http-client-python 0.13.0-dev.3 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/emitter/http.d.ts.map +1 -1
- package/dist/emitter/http.js +13 -3
- package/dist/emitter/http.js.map +1 -1
- package/emitter/src/http.ts +20 -2
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/ci/regenerate.ts +7 -5
- package/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
- package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
- package/eng/scripts/setup/build_pygen_wheel.py +1 -0
- package/eng/scripts/setup/install.py +4 -2
- package/eng/scripts/setup/package_manager.py +24 -22
- package/eng/scripts/setup/prepare.py +1 -1
- package/eng/scripts/setup/venvtools.py +1 -3
- package/generator/build/lib/pygen/codegen/models/client.py +3 -1
- package/generator/build/lib/pygen/codegen/models/operation_group.py +8 -2
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +2 -1
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -1
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -0
- package/generator/component-detection-pip-report.json +2 -2
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/codegen/models/client.py +3 -1
- package/generator/pygen/codegen/models/operation_group.py +8 -2
- package/generator/pygen/codegen/serializers/client_serializer.py +2 -1
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -1
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -0
- package/generator/pygen.egg-info/PKG-INFO +1 -1
- package/generator/pygen.egg-info/requires.txt +1 -1
- package/generator/setup.py +1 -1
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_operationtemplates_async.py +5 -1
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_location_async.py +48 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_override_async.py +23 -0
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +5 -5
- package/generator/test/azure/mock_api_tests/asynctests/test_client_namespace_async.py +23 -20
- package/generator/test/azure/mock_api_tests/test_azure_arm_operationtemplates.py +5 -2
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_location.py +41 -0
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_override.py +21 -0
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +2 -2
- package/generator/test/azure/mock_api_tests/test_client_namespace.py +21 -18
- package/generator/test/azure/requirements.txt +4 -1
- package/generator/test/generic_mock_api_tests/asynctests/test_payload_xml_async.py +16 -0
- package/generator/test/generic_mock_api_tests/asynctests/test_response_status_code_range_async.py +38 -0
- package/generator/test/generic_mock_api_tests/asynctests/test_versioning_removed_async.py +7 -0
- package/generator/test/generic_mock_api_tests/test_payload_xml.py +14 -0
- package/generator/test/generic_mock_api_tests/test_response_status_code_range.py +36 -0
- package/generator/test/generic_mock_api_tests/test_versioning_removed.py +6 -0
- package/generator/test/unbranded/requirements.txt +1 -0
- package/package.json +33 -33
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
|
+
# license information.
|
|
5
|
+
# --------------------------------------------------------------------------
|
|
6
|
+
import pytest
|
|
7
|
+
from specs.azure.clientgenerator.core.override import OverrideClient
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture
|
|
11
|
+
def client():
|
|
12
|
+
with OverrideClient() as client:
|
|
13
|
+
yield client
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def test_reorder_parameters(client: OverrideClient):
|
|
17
|
+
client.reorder_parameters.reorder("param1", "param2")
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def test_group_parameters(client: OverrideClient):
|
|
21
|
+
client.group_parameters.group(param1="param1", param2="param2")
|
|
@@ -28,5 +28,5 @@ def test_model_usage(client: UsageClient):
|
|
|
28
28
|
) == client.model_in_operation.model_in_read_only_property(body=models.RoundTripModel())
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
def test_orphan_model_serializable(client: UsageClient):
|
|
32
|
+
client.model_in_operation.orphan_model_serializable(body=models.OrphanModel(model_name="name", description="desc"))
|
|
@@ -3,27 +3,30 @@
|
|
|
3
3
|
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
4
|
# license information.
|
|
5
5
|
# --------------------------------------------------------------------------
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import pytest
|
|
7
|
+
from client.clientnamespace import ClientNamespaceFirstClient
|
|
8
|
+
from client.clientnamespace.first.models import FirstClientResult
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
from client.clientnamespace.second import ClientNamespaceSecondClient
|
|
11
|
+
from client.clientnamespace.second.models import SecondClientResult
|
|
12
|
+
from client.clientnamespace.second.sub.models import SecondClientEnumType
|
|
13
13
|
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
@pytest.fixture
|
|
16
|
+
def first_client():
|
|
17
|
+
with ClientNamespaceFirstClient() as client:
|
|
18
|
+
yield client
|
|
19
19
|
|
|
20
|
-
# @pytest.fixture
|
|
21
|
-
# def second_client():
|
|
22
|
-
# with ClientNamespaceSecondClient() as client:
|
|
23
|
-
# yield client
|
|
24
20
|
|
|
25
|
-
|
|
26
|
-
|
|
21
|
+
@pytest.fixture
|
|
22
|
+
def second_client():
|
|
23
|
+
with ClientNamespaceSecondClient() as client:
|
|
24
|
+
yield client
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
|
|
26
|
+
|
|
27
|
+
def test_get_first(first_client: ClientNamespaceFirstClient):
|
|
28
|
+
assert first_client.get_first() == FirstClientResult(name="first")
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_get_second(second_client: ClientNamespaceSecondClient):
|
|
32
|
+
assert second_client.get_second() == SecondClientResult(type=SecondClientEnumType.SECOND)
|
|
@@ -8,6 +8,8 @@ azure-mgmt-core==1.5.0
|
|
|
8
8
|
-e ./generated/azure-client-generator-core-deserialize-empty-string-as-null
|
|
9
9
|
-e ./generated/azure-client-generator-core-flatten-property
|
|
10
10
|
-e ./generated/azure-client-generator-core-usage
|
|
11
|
+
-e ./generated/azure-client-generator-core-override
|
|
12
|
+
-e ./generated/azure-client-generator-core-client-location
|
|
11
13
|
-e ./generated/azure-core-basic
|
|
12
14
|
-e ./generated/azure-core-scalar
|
|
13
15
|
-e ./generated/azure-core-lro-rpc
|
|
@@ -23,7 +25,7 @@ azure-mgmt-core==1.5.0
|
|
|
23
25
|
-e ./generated/azure-resource-manager-non-resource
|
|
24
26
|
-e ./generated/azure-resource-manager-operation-templates
|
|
25
27
|
-e ./generated/azure-resource-manager-resources
|
|
26
|
-
|
|
28
|
+
-e ./generated/client-namespace
|
|
27
29
|
-e ./generated/azure-payload-pageable
|
|
28
30
|
-e ./generated/client-naming
|
|
29
31
|
-e ./generated/client-structure-default
|
|
@@ -84,6 +86,7 @@ azure-mgmt-core==1.5.0
|
|
|
84
86
|
-e ./generated/payload-media-type
|
|
85
87
|
-e ./generated/payload-xml
|
|
86
88
|
-e ./generated/routes
|
|
89
|
+
-e ./generated/response-status-code-range
|
|
87
90
|
-e ./generated/versioning-added
|
|
88
91
|
-e ./generated/versioning-madeoptional
|
|
89
92
|
-e ./generated/versioning-removed
|
|
@@ -11,6 +11,8 @@ from payload.xml.models import (
|
|
|
11
11
|
ModelWithArrayOfModel,
|
|
12
12
|
ModelWithAttributes,
|
|
13
13
|
ModelWithUnwrappedArray,
|
|
14
|
+
ModelWithRenamedArrays,
|
|
15
|
+
ModelWithOptionalField,
|
|
14
16
|
ModelWithRenamedFields,
|
|
15
17
|
ModelWithEmptyArray,
|
|
16
18
|
ModelWithText,
|
|
@@ -65,6 +67,20 @@ async def test_model_with_unwrapped_array(client: XmlClient):
|
|
|
65
67
|
await client.model_with_unwrapped_array_value.put(model)
|
|
66
68
|
|
|
67
69
|
|
|
70
|
+
@pytest.mark.asyncio
|
|
71
|
+
async def test_model_with_renamed_arrays(client: XmlClient):
|
|
72
|
+
model = ModelWithRenamedArrays(colors=["red", "green", "blue"], counts=[1, 2])
|
|
73
|
+
assert await client.model_with_renamed_arrays_value.get() == model
|
|
74
|
+
await client.model_with_renamed_arrays_value.put(model)
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
@pytest.mark.asyncio
|
|
78
|
+
async def test_model_with_optional_field(client: XmlClient):
|
|
79
|
+
model = ModelWithOptionalField(item="widget")
|
|
80
|
+
assert await client.model_with_optional_field_value.get() == model
|
|
81
|
+
await client.model_with_optional_field_value.put(model)
|
|
82
|
+
|
|
83
|
+
|
|
68
84
|
@pytest.mark.asyncio
|
|
69
85
|
async def test_model_with_renamed_fields(client: XmlClient):
|
|
70
86
|
model = ModelWithRenamedFields(
|
package/generator/test/generic_mock_api_tests/asynctests/test_response_status_code_range_async.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
|
+
# license information.
|
|
5
|
+
# --------------------------------------------------------------------------
|
|
6
|
+
import pytest
|
|
7
|
+
from response.statuscoderange.aio import StatusCodeRangeClient
|
|
8
|
+
from response.statuscoderange.models import ErrorInRange, NotFoundError
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.fixture
|
|
12
|
+
async def client():
|
|
13
|
+
async with StatusCodeRangeClient(endpoint="http://localhost:3000") as client:
|
|
14
|
+
yield client
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@pytest.mark.asyncio
|
|
18
|
+
async def test_error_response_status_code_in_range(client: StatusCodeRangeClient):
|
|
19
|
+
with pytest.raises(Exception) as exc_info:
|
|
20
|
+
await client.error_response_status_code_in_range()
|
|
21
|
+
|
|
22
|
+
error = exc_info.value.model
|
|
23
|
+
assert isinstance(error, ErrorInRange)
|
|
24
|
+
assert error.code == "request-header-too-large"
|
|
25
|
+
assert error.message == "Request header too large"
|
|
26
|
+
assert exc_info.value.response.status_code == 494
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
@pytest.mark.asyncio
|
|
30
|
+
async def test_error_response_status_code_404(client: StatusCodeRangeClient):
|
|
31
|
+
with pytest.raises(Exception) as exc_info:
|
|
32
|
+
await client.error_response_status_code404()
|
|
33
|
+
|
|
34
|
+
error = exc_info.value.model
|
|
35
|
+
assert isinstance(error, NotFoundError)
|
|
36
|
+
assert error.code == "not-found"
|
|
37
|
+
assert error.resource_id == "resource1"
|
|
38
|
+
assert exc_info.value.response.status_code == 404
|
|
@@ -19,3 +19,10 @@ async def test_v2(client: RemovedClient):
|
|
|
19
19
|
assert await client.v2(ModelV2(prop="foo", enum_prop=EnumV2.ENUM_MEMBER_V2, union_prop="bar")) == ModelV2(
|
|
20
20
|
prop="foo", enum_prop=EnumV2.ENUM_MEMBER_V2, union_prop="bar"
|
|
21
21
|
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
@pytest.mark.asyncio
|
|
25
|
+
async def test_model_v3(client: RemovedClient):
|
|
26
|
+
result = await client.model_v3({"id": "123", "enumProp": "enumMemberV1"})
|
|
27
|
+
assert result.id == "123"
|
|
28
|
+
assert result.enum_prop == "enumMemberV1"
|
|
@@ -11,6 +11,8 @@ from payload.xml.models import (
|
|
|
11
11
|
ModelWithArrayOfModel,
|
|
12
12
|
ModelWithAttributes,
|
|
13
13
|
ModelWithUnwrappedArray,
|
|
14
|
+
ModelWithRenamedArrays,
|
|
15
|
+
ModelWithOptionalField,
|
|
14
16
|
ModelWithRenamedFields,
|
|
15
17
|
ModelWithEmptyArray,
|
|
16
18
|
ModelWithText,
|
|
@@ -60,6 +62,18 @@ def test_model_with_unwrapped_array(client: XmlClient):
|
|
|
60
62
|
client.model_with_unwrapped_array_value.put(model)
|
|
61
63
|
|
|
62
64
|
|
|
65
|
+
def test_model_with_renamed_arrays(client: XmlClient):
|
|
66
|
+
model = ModelWithRenamedArrays(colors=["red", "green", "blue"], counts=[1, 2])
|
|
67
|
+
assert client.model_with_renamed_arrays_value.get() == model
|
|
68
|
+
client.model_with_renamed_arrays_value.put(model)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def test_model_with_optional_field(client: XmlClient):
|
|
72
|
+
model = ModelWithOptionalField(item="widget")
|
|
73
|
+
assert client.model_with_optional_field_value.get() == model
|
|
74
|
+
client.model_with_optional_field_value.put(model)
|
|
75
|
+
|
|
76
|
+
|
|
63
77
|
def test_model_with_renamed_fields(client: XmlClient):
|
|
64
78
|
model = ModelWithRenamedFields(
|
|
65
79
|
input_data=SimpleModel(name="foo", age=123),
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# -------------------------------------------------------------------------
|
|
2
|
+
# Copyright (c) Microsoft Corporation. All rights reserved.
|
|
3
|
+
# Licensed under the MIT License. See License.txt in the project root for
|
|
4
|
+
# license information.
|
|
5
|
+
# --------------------------------------------------------------------------
|
|
6
|
+
import pytest
|
|
7
|
+
from response.statuscoderange import StatusCodeRangeClient
|
|
8
|
+
from response.statuscoderange.models import ErrorInRange, NotFoundError
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@pytest.fixture
|
|
12
|
+
def client():
|
|
13
|
+
with StatusCodeRangeClient(endpoint="http://localhost:3000") as client:
|
|
14
|
+
yield client
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_error_response_status_code_in_range(client: StatusCodeRangeClient):
|
|
18
|
+
with pytest.raises(Exception) as exc_info:
|
|
19
|
+
client.error_response_status_code_in_range()
|
|
20
|
+
|
|
21
|
+
error = exc_info.value.model
|
|
22
|
+
assert isinstance(error, ErrorInRange)
|
|
23
|
+
assert error.code == "request-header-too-large"
|
|
24
|
+
assert error.message == "Request header too large"
|
|
25
|
+
assert exc_info.value.response.status_code == 494
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def test_error_response_status_code_404(client: StatusCodeRangeClient):
|
|
29
|
+
with pytest.raises(Exception) as exc_info:
|
|
30
|
+
client.error_response_status_code404()
|
|
31
|
+
|
|
32
|
+
error = exc_info.value.model
|
|
33
|
+
assert isinstance(error, NotFoundError)
|
|
34
|
+
assert error.code == "not-found"
|
|
35
|
+
assert error.resource_id == "resource1"
|
|
36
|
+
assert exc_info.value.response.status_code == 404
|
|
@@ -18,3 +18,9 @@ def test_v2(client: RemovedClient):
|
|
|
18
18
|
assert client.v2(ModelV2(prop="foo", enum_prop=EnumV2.ENUM_MEMBER_V2, union_prop="bar")) == ModelV2(
|
|
19
19
|
prop="foo", enum_prop=EnumV2.ENUM_MEMBER_V2, union_prop="bar"
|
|
20
20
|
)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def test_model_v3(client: RemovedClient):
|
|
24
|
+
result = client.model_v3({"id": "123", "enumProp": "enumMemberV1"})
|
|
25
|
+
assert result.id == "123"
|
|
26
|
+
assert result.enum_prop == "enumMemberV1"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@typespec/http-client-python",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.0",
|
|
4
4
|
"author": "Microsoft Corporation",
|
|
5
5
|
"description": "TypeSpec emitter for Python SDKs",
|
|
6
6
|
"homepage": "https://typespec.io",
|
|
@@ -54,20 +54,20 @@
|
|
|
54
54
|
"emitter"
|
|
55
55
|
],
|
|
56
56
|
"peerDependencies": {
|
|
57
|
-
"@azure-tools/typespec-autorest": ">=0.
|
|
58
|
-
"@azure-tools/typespec-azure-core": ">=0.
|
|
59
|
-
"@azure-tools/typespec-azure-resource-manager": ">=0.
|
|
60
|
-
"@azure-tools/typespec-azure-rulesets": ">=0.
|
|
61
|
-
"@azure-tools/typespec-client-generator-core": ">=0.
|
|
62
|
-
"@typespec/compiler": "^1.
|
|
63
|
-
"@typespec/http": "^1.
|
|
64
|
-
"@typespec/openapi": "^1.
|
|
65
|
-
"@typespec/rest": ">=0.
|
|
66
|
-
"@typespec/versioning": ">=0.
|
|
67
|
-
"@typespec/events": ">=0.
|
|
68
|
-
"@typespec/sse": ">=0.
|
|
69
|
-
"@typespec/streams": ">=0.
|
|
70
|
-
"@typespec/xml": ">=0.
|
|
57
|
+
"@azure-tools/typespec-autorest": ">=0.58.0 <1.0.0",
|
|
58
|
+
"@azure-tools/typespec-azure-core": ">=0.58.0 <1.0.0",
|
|
59
|
+
"@azure-tools/typespec-azure-resource-manager": ">=0.58.0 <1.0.0",
|
|
60
|
+
"@azure-tools/typespec-azure-rulesets": ">=0.58.0 <1.0.0",
|
|
61
|
+
"@azure-tools/typespec-client-generator-core": ">=0.58.0 <1.0.0",
|
|
62
|
+
"@typespec/compiler": "^1.2.1",
|
|
63
|
+
"@typespec/http": "^1.2.1",
|
|
64
|
+
"@typespec/openapi": "^1.2.1",
|
|
65
|
+
"@typespec/rest": ">=0.72.1 <1.0.0",
|
|
66
|
+
"@typespec/versioning": ">=0.72.1 <1.0.0",
|
|
67
|
+
"@typespec/events": ">=0.72.1 <1.0.0",
|
|
68
|
+
"@typespec/sse": ">=0.72.1 <1.0.0",
|
|
69
|
+
"@typespec/streams": ">=0.72.1 <1.0.0",
|
|
70
|
+
"@typespec/xml": ">=0.72.1 <1.0.0"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"js-yaml": "~4.1.0",
|
|
@@ -77,24 +77,24 @@
|
|
|
77
77
|
"tsx": "~4.19.1"
|
|
78
78
|
},
|
|
79
79
|
"devDependencies": {
|
|
80
|
-
"@azure-tools/typespec-autorest": "~0.
|
|
81
|
-
"@azure-tools/typespec-azure-core": "~0.
|
|
82
|
-
"@azure-tools/typespec-azure-resource-manager": "~0.
|
|
83
|
-
"@azure-tools/typespec-azure-rulesets": "~0.
|
|
84
|
-
"@azure-tools/typespec-client-generator-core": "~0.
|
|
85
|
-
"@azure-tools/azure-http-specs": "0.1.0-alpha.
|
|
86
|
-
"@typespec/compiler": "^1.1
|
|
87
|
-
"@typespec/http": "^1.1
|
|
88
|
-
"@typespec/openapi": "^1.1
|
|
89
|
-
"@typespec/rest": "~0.
|
|
90
|
-
"@typespec/versioning": "~0.
|
|
91
|
-
"@typespec/events": "~0.
|
|
92
|
-
"@typespec/spector": "0.1.0-alpha.
|
|
93
|
-
"@typespec/spec-api": "0.1.0-alpha.
|
|
94
|
-
"@typespec/sse": "~0.
|
|
95
|
-
"@typespec/streams": "~0.
|
|
96
|
-
"@typespec/xml": "~0.
|
|
97
|
-
"@typespec/http-specs": "0.1.0-alpha.
|
|
80
|
+
"@azure-tools/typespec-autorest": "~0.58.0",
|
|
81
|
+
"@azure-tools/typespec-azure-core": "~0.58.0",
|
|
82
|
+
"@azure-tools/typespec-azure-resource-manager": "~0.58.0",
|
|
83
|
+
"@azure-tools/typespec-azure-rulesets": "~0.58.0",
|
|
84
|
+
"@azure-tools/typespec-client-generator-core": "~0.58.0",
|
|
85
|
+
"@azure-tools/azure-http-specs": "0.1.0-alpha.23",
|
|
86
|
+
"@typespec/compiler": "^1.2.1",
|
|
87
|
+
"@typespec/http": "^1.2.1",
|
|
88
|
+
"@typespec/openapi": "^1.2.1",
|
|
89
|
+
"@typespec/rest": "~0.72.1",
|
|
90
|
+
"@typespec/versioning": "~0.72.1",
|
|
91
|
+
"@typespec/events": "~0.72.1",
|
|
92
|
+
"@typespec/spector": "0.1.0-alpha.16",
|
|
93
|
+
"@typespec/spec-api": "0.1.0-alpha.7",
|
|
94
|
+
"@typespec/sse": "~0.72.1",
|
|
95
|
+
"@typespec/streams": "~0.72.1",
|
|
96
|
+
"@typespec/xml": "~0.72.1",
|
|
97
|
+
"@typespec/http-specs": "0.1.0-alpha.24",
|
|
98
98
|
"@types/js-yaml": "~4.0.5",
|
|
99
99
|
"@types/node": "~22.13.14",
|
|
100
100
|
"@types/semver": "7.5.8",
|