@typespec/http-client-python 0.35.1 → 0.37.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.
Files changed (115) hide show
  1. package/README.md +6 -0
  2. package/dist/emitter/code-model.d.ts +1 -1
  3. package/dist/emitter/code-model.d.ts.map +1 -1
  4. package/dist/emitter/code-model.js.map +1 -1
  5. package/dist/emitter/emitter.d.ts +2 -2
  6. package/dist/emitter/emitter.d.ts.map +1 -1
  7. package/dist/emitter/emitter.js +24 -3
  8. package/dist/emitter/emitter.js.map +1 -1
  9. package/dist/emitter/external-process.d.ts +1 -15
  10. package/dist/emitter/external-process.d.ts.map +1 -1
  11. package/dist/emitter/external-process.js +1 -17
  12. package/dist/emitter/external-process.js.map +1 -1
  13. package/dist/emitter/http.d.ts +45 -2
  14. package/dist/emitter/http.d.ts.map +1 -1
  15. package/dist/emitter/http.js +97 -1
  16. package/dist/emitter/http.js.map +1 -1
  17. package/dist/emitter/index.d.ts +2 -1
  18. package/dist/emitter/index.d.ts.map +1 -1
  19. package/dist/emitter/index.js.map +1 -1
  20. package/dist/emitter/lib.d.ts +3 -2
  21. package/dist/emitter/lib.d.ts.map +1 -1
  22. package/dist/emitter/lib.js +6 -1
  23. package/dist/emitter/lib.js.map +1 -1
  24. package/dist/emitter/node-runner.browser.d.ts +1 -1
  25. package/dist/emitter/node-runner.browser.d.ts.map +1 -1
  26. package/dist/emitter/node-runner.browser.js.map +1 -1
  27. package/dist/emitter/node-runner.d.ts +3 -3
  28. package/dist/emitter/node-runner.d.ts.map +1 -1
  29. package/dist/emitter/node-runner.js.map +1 -1
  30. package/dist/emitter/system-requirements.d.ts.map +1 -1
  31. package/dist/emitter/system-requirements.js.map +1 -1
  32. package/dist/emitter/types.d.ts +4 -4
  33. package/dist/emitter/types.d.ts.map +1 -1
  34. package/dist/emitter/types.js +15 -3
  35. package/dist/emitter/types.js.map +1 -1
  36. package/dist/emitter/utils.d.ts +2 -2
  37. package/dist/emitter/utils.d.ts.map +1 -1
  38. package/dist/emitter/utils.js +1 -1
  39. package/dist/emitter/utils.js.map +1 -1
  40. package/dist/emitter/yaml-utils.d.ts +19 -0
  41. package/dist/emitter/yaml-utils.d.ts.map +1 -0
  42. package/dist/emitter/yaml-utils.js +22 -0
  43. package/dist/emitter/yaml-utils.js.map +1 -0
  44. package/emitter/src/code-model.ts +4 -2
  45. package/emitter/src/emitter.ts +31 -7
  46. package/emitter/src/external-process.ts +3 -19
  47. package/emitter/src/http.ts +159 -5
  48. package/emitter/src/index.ts +2 -1
  49. package/emitter/src/lib.ts +11 -6
  50. package/emitter/src/node-runner.browser.ts +2 -1
  51. package/emitter/src/node-runner.ts +6 -3
  52. package/emitter/src/system-requirements.ts +2 -1
  53. package/emitter/src/types.ts +23 -8
  54. package/emitter/src/utils.ts +5 -4
  55. package/emitter/src/yaml-utils.ts +22 -0
  56. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  57. package/emitter/test/browser-pyodide.test.ts +25 -0
  58. package/emitter/test/streaming.test.ts +155 -0
  59. package/emitter/test/types.test.ts +72 -0
  60. package/emitter/test/{external-process.test.ts → yaml-utils.test.ts} +2 -2
  61. package/eng/scripts/ci/dev_requirements.txt +1 -1
  62. package/eng/scripts/ci/regenerate-common.ts +1 -1
  63. package/eng/scripts/ci/regenerate.ts +1 -2
  64. package/eng/scripts/ci/run-tests.ts +2 -1
  65. package/eng/scripts/ci/run_pylint.py +1 -0
  66. package/eng/scripts/setup/__pycache__/package_manager.cpython-311.pyc +0 -0
  67. package/eng/scripts/setup/__pycache__/venvtools.cpython-311.pyc +0 -0
  68. package/eng/scripts/setup/system-requirements.ts +2 -1
  69. package/generator/build/lib/pygen/__init__.py +24 -5
  70. package/generator/build/lib/pygen/codegen/models/__init__.py +3 -1
  71. package/generator/build/lib/pygen/codegen/models/code_model.py +29 -9
  72. package/generator/build/lib/pygen/codegen/models/enum_type.py +21 -9
  73. package/generator/build/lib/pygen/codegen/models/list_type.py +1 -0
  74. package/generator/build/lib/pygen/codegen/models/model_type.py +1 -3
  75. package/generator/build/lib/pygen/codegen/models/operation.py +13 -3
  76. package/generator/build/lib/pygen/codegen/models/parameter.py +3 -1
  77. package/generator/build/lib/pygen/codegen/models/response.py +152 -8
  78. package/generator/build/lib/pygen/codegen/models/utils.py +14 -0
  79. package/generator/build/lib/pygen/codegen/serializers/__init__.py +13 -6
  80. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +219 -69
  81. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +13 -6
  82. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +4 -0
  83. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +27 -0
  84. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +4 -1
  85. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +44 -12
  86. package/generator/build/lib/pygen/codegen/templates/streaming_base.py.jinja2 +767 -0
  87. package/generator/build/lib/pygen/preprocess/__init__.py +70 -17
  88. package/generator/build/lib/pygen/utils.py +15 -0
  89. package/generator/component-detection-pip-report.json +9 -9
  90. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  91. package/generator/pygen/__init__.py +24 -5
  92. package/generator/pygen/codegen/models/__init__.py +3 -1
  93. package/generator/pygen/codegen/models/code_model.py +29 -9
  94. package/generator/pygen/codegen/models/enum_type.py +21 -9
  95. package/generator/pygen/codegen/models/list_type.py +1 -0
  96. package/generator/pygen/codegen/models/model_type.py +1 -3
  97. package/generator/pygen/codegen/models/operation.py +13 -3
  98. package/generator/pygen/codegen/models/parameter.py +3 -1
  99. package/generator/pygen/codegen/models/response.py +152 -8
  100. package/generator/pygen/codegen/models/utils.py +14 -0
  101. package/generator/pygen/codegen/serializers/__init__.py +13 -6
  102. package/generator/pygen/codegen/serializers/builder_serializer.py +219 -69
  103. package/generator/pygen/codegen/serializers/client_serializer.py +13 -6
  104. package/generator/pygen/codegen/serializers/general_serializer.py +4 -0
  105. package/generator/pygen/codegen/serializers/import_serializer.py +27 -0
  106. package/generator/pygen/codegen/serializers/model_serializer.py +4 -1
  107. package/generator/pygen/codegen/serializers/types_serializer.py +44 -12
  108. package/generator/pygen/codegen/templates/streaming_base.py.jinja2 +767 -0
  109. package/generator/pygen/preprocess/__init__.py +70 -17
  110. package/generator/pygen/utils.py +15 -0
  111. package/generator/pygen.egg-info/PKG-INFO +1 -1
  112. package/generator/pygen.egg-info/SOURCES.txt +1 -0
  113. package/generator/pygen.egg-info/requires.txt +1 -1
  114. package/generator/setup.py +1 -1
  115. package/package.json +33 -33
@@ -35,6 +35,8 @@ def update_overload_section(
35
35
  for overload_s, original_s in zip(overload[section], yaml_data[section]):
36
36
  if overload_s.get("type"):
37
37
  overload_s["type"] = original_s["type"]
38
+ if overload_s.get("streaming"):
39
+ overload_s["streaming"] = original_s["streaming"]
38
40
  if overload_s.get("headers"):
39
41
  for overload_h, original_h in zip(overload_s["headers"], original_s["headers"]):
40
42
  if overload_h.get("type"):
@@ -81,8 +83,17 @@ def add_overload(yaml_data: dict[str, Any], body_type: dict[str, Any], for_flatt
81
83
  return overload
82
84
 
83
85
 
84
- def add_overloads_for_body_param(yaml_data: dict[str, Any]) -> None:
85
- """If we added a body parameter type, add overloads for that type"""
86
+ def add_overloads_for_body_param(yaml_data: dict[str, Any], skip_single_body_json: bool = False) -> None:
87
+ """If we added a body parameter type, add overloads for that type.
88
+
89
+ ``skip_single_body_json`` is the authoritative signal, computed by
90
+ ``add_body_param_type``, for whether a TypedDict-style overload was inserted
91
+ to replace the single-body raw-JSON overload on the spread (``base: json``)
92
+ path. It is True for both models-mode: dpg (generate-typeddict on) and
93
+ the TypedDict-only mode (models-mode: none with generate-typeddict on), and
94
+ False when TypedDict generation is disabled (in which case the single-body
95
+ raw-JSON overload is kept, matching pre-TypedDict behavior).
96
+ """
86
97
  body_parameter = yaml_data["bodyParameter"]
87
98
  if not (
88
99
  body_parameter["type"]["type"] == "combined"
@@ -94,8 +105,8 @@ def add_overloads_for_body_param(yaml_data: dict[str, Any]) -> None:
94
105
  continue
95
106
  if body_type.get("type") == "model" and body_type.get("base") == "json":
96
107
  yaml_data["overloads"].append(add_overload(yaml_data, body_type, for_flatten_params=True))
97
- # Skip single-body JSON overload; the TypedDict overload replaces it
98
- continue
108
+ if skip_single_body_json:
109
+ continue
99
110
  yaml_data["overloads"].append(add_overload(yaml_data, body_type))
100
111
  content_type_param = next(p for p in yaml_data["parameters"] if p["wireName"].lower() == "content-type")
101
112
  content_type_param["inOverload"] = False
@@ -306,6 +317,10 @@ class PreProcessPlugin(YamlUpdatePlugin):
306
317
  def is_tsp(self) -> bool:
307
318
  return self.options.get("tsp_file", False)
308
319
 
320
+ @property
321
+ def generate_typeddict(self) -> bool:
322
+ return self.options.get("generate-typeddict", True)
323
+
309
324
  @staticmethod
310
325
  def _find_existing_typeddict(
311
326
  code_model: dict[str, Any],
@@ -394,11 +409,39 @@ class PreProcessPlugin(YamlUpdatePlugin):
394
409
  if not existing_td:
395
410
  code_model["types"].append(td_elem)
396
411
 
412
+ @staticmethod
413
+ def _insert_json_overload(
414
+ body_parameter: dict[str, Any],
415
+ origin_type: str,
416
+ ) -> None:
417
+ """Insert a raw-JSON (any-object) type into the body parameter's combined types.
418
+
419
+ This restores the pre-TypedDict dict-body overload used when TypedDict
420
+ generation is disabled.
421
+ """
422
+ if origin_type == "model":
423
+ body_parameter["type"]["types"].insert(1, KNOWN_TYPES["any-object"])
424
+ else:
425
+ # dict or list: copy the original container type and swap its element
426
+ # type for the raw-JSON any-object.
427
+ any_obj_list_or_dict = copy.deepcopy(body_parameter["type"]["types"][0])
428
+ any_obj_list_or_dict["elementType"] = KNOWN_TYPES["any-object"]
429
+ body_parameter["type"]["types"].insert(1, any_obj_list_or_dict)
430
+
397
431
  def add_body_param_type(
398
432
  self,
399
433
  code_model: dict[str, Any],
400
434
  body_parameter: dict[str, Any],
401
- ):
435
+ ) -> bool:
436
+ """Build the combined body-parameter type and its overload variants.
437
+
438
+ Returns whether a TypedDict-style overload was inserted in place of the
439
+ single-body raw-JSON overload on the spread (``base: json``) path. The
440
+ caller passes this to ``add_overloads_for_body_param`` as
441
+ ``skip_single_body_json``. It is False when TypedDict generation is
442
+ disabled, so the pre-TypedDict single-body raw-JSON overload is kept.
443
+ """
444
+ skip_single_body_json = False
402
445
  # For a binary `bytes` body (e.g. content type application/octet-stream or a custom
403
446
  # binary media type), add an IO overload alongside the `bytes` one. This keeps backward
404
447
  # compatibility for services migrating from swagger, whose binary bodies were typed as IO.
@@ -408,7 +451,7 @@ class PreProcessPlugin(YamlUpdatePlugin):
408
451
  body_parameter
409
452
  and body_parameter["type"]["type"] == "bytes"
410
453
  and is_binary_body
411
- and self.options["models-mode"] != "typeddict"
454
+ and not self.options.generate_typeddict_only
412
455
  and not any(t for t in ["flattened", "groupedBy"] if body_parameter.get(t))
413
456
  ):
414
457
  body_parameter["type"] = {
@@ -416,7 +459,7 @@ class PreProcessPlugin(YamlUpdatePlugin):
416
459
  "types": [body_parameter["type"], KNOWN_TYPES["binary"]],
417
460
  }
418
461
  code_model["types"].append(body_parameter["type"])
419
- return
462
+ return skip_single_body_json
420
463
 
421
464
  # only add overload for special content type
422
465
  if ( # pylint: disable=too-many-boolean-expressions
@@ -432,7 +475,7 @@ class PreProcessPlugin(YamlUpdatePlugin):
432
475
  )
433
476
  is_dpg_model = model_type.get("base") == "dpg"
434
477
  is_json_model = model_type.get("base") == "json"
435
- is_typeddict_only = self.options["models-mode"] == "typeddict"
478
+ is_typeddict_only = self.options.generate_typeddict_only
436
479
 
437
480
  body_parameter["type"] = {
438
481
  "type": "combined",
@@ -442,11 +485,16 @@ class PreProcessPlugin(YamlUpdatePlugin):
442
485
  if not (self.is_tsp and has_multi_part_content_type(body_parameter)) and not is_typeddict_only:
443
486
  body_parameter["type"]["types"].append(KNOWN_TYPES["binary"])
444
487
 
445
- # Add typeddict overload for non-spread dpg models
488
+ # Add the dict-body overload for non-spread dpg models: a TypedDict when
489
+ # enabled, otherwise the raw-JSON overload (pre-TypedDict behavior).
446
490
  if self.options["models-mode"] == "dpg" and is_dpg_model:
447
- cross_lang_id = model_type.get("crossLanguageDefinitionId")
448
- existing_td = self._find_existing_typeddict(code_model, cross_lang_id, model_type.get("name"))
449
- self._insert_typeddict_overload(code_model, body_parameter, model_type, origin_type, existing_td)
491
+ if self.generate_typeddict:
492
+ cross_lang_id = model_type.get("crossLanguageDefinitionId")
493
+ existing_td = self._find_existing_typeddict(code_model, cross_lang_id, model_type.get("name"))
494
+ self._insert_typeddict_overload(code_model, body_parameter, model_type, origin_type, existing_td)
495
+ skip_single_body_json = True
496
+ else:
497
+ self._insert_json_overload(body_parameter, origin_type)
450
498
 
451
499
  # For spread bodies (json base), add a typeddict overload that references
452
500
  # the original model. This replaces the JSON single-body overload.
@@ -456,17 +504,20 @@ class PreProcessPlugin(YamlUpdatePlugin):
456
504
 
457
505
  if is_typeddict_only and original:
458
506
  # In typeddict-only mode, the original dpg model already renders
459
- # as a TypedDict — reference it directly, no copy needed.
507
+ # as a TypedDict — reference it directly, no copy needed. It also
508
+ # replaces the single-body JSON overload.
509
+ skip_single_body_json = True
460
510
  if origin_type == "model":
461
511
  body_parameter["type"]["types"].insert(1, original)
462
512
  else:
463
513
  td_list_or_dict = copy.deepcopy(body_parameter["type"]["types"][0])
464
514
  td_list_or_dict["elementType"] = original
465
515
  body_parameter["type"]["types"].insert(1, td_list_or_dict)
466
- else:
516
+ elif self.generate_typeddict:
467
517
  source = original or model_type
468
518
  existing_td = self._find_existing_typeddict(code_model, cross_lang_id, source.get("name"))
469
519
  self._insert_typeddict_overload(code_model, body_parameter, source, origin_type, existing_td)
520
+ skip_single_body_json = True
470
521
 
471
522
  if len(body_parameter["type"]["types"]) == 1:
472
523
  # Only one body variant remains (e.g. typeddict-only mode where the
@@ -474,10 +525,12 @@ class PreProcessPlugin(YamlUpdatePlugin):
474
525
  # wrapper back to the single type so we don't emit a lone
475
526
  # ``@overload`` (mypy rejects a single overload definition).
476
527
  body_parameter["type"] = body_parameter["type"]["types"][0]
477
- return
528
+ return skip_single_body_json
478
529
 
479
530
  code_model["types"].append(body_parameter["type"])
480
531
 
532
+ return skip_single_body_json
533
+
481
534
  def pad_reserved_words(self, name: str, pad_type: PadType, yaml_type: dict[str, Any]) -> str:
482
535
  # we want to pad hidden variables as well
483
536
  if not name:
@@ -649,8 +702,8 @@ class PreProcessPlugin(YamlUpdatePlugin):
649
702
  response["discriminator"] = "operation"
650
703
  if body_parameter and not is_overload:
651
704
  # if we have a JSON body, we add a binary overload
652
- self.add_body_param_type(code_model, body_parameter)
653
- add_overloads_for_body_param(yaml_data)
705
+ skip_single_body_json = self.add_body_param_type(code_model, body_parameter)
706
+ add_overloads_for_body_param(yaml_data, skip_single_body_json=skip_single_body_json)
654
707
 
655
708
  def _update_lro_operation_helper(self, yaml_data: dict[str, Any]) -> None:
656
709
  for response in yaml_data.get("responses", []):
@@ -28,6 +28,21 @@ def description_ends_with_code_block(description: str) -> bool:
28
28
  return all(not line.strip() or line.startswith((" ", "\t")) for line in lines[directives[-1] + 1 :])
29
29
 
30
30
 
31
+ def is_typeddict_only(options: Any) -> bool:
32
+ """Whether generation is TypedDict-only.
33
+
34
+ True for TypeSpec input where no concrete models mode is selected (``models-mode: none``,
35
+ normalized to a falsy value by :class:`OptionsDict`) and ``generate-typeddict`` is enabled.
36
+ Swagger ``models-mode: none`` is left as a plain no-models mode because it never sets
37
+ ``tsp_file``.
38
+ """
39
+ return (
40
+ bool(options.get("tsp_file"))
41
+ and not options.get("models-mode")
42
+ and bool(options.get("generate-typeddict", True))
43
+ )
44
+
45
+
31
46
  def update_enum_value(name: str, value: Any, description: str, enum_type: dict[str, Any]) -> dict[str, Any]:
32
47
  return {
33
48
  "name": name,
@@ -16,7 +16,7 @@ Classifier: Programming Language :: Python :: 3.14
16
16
  Classifier: License :: OSI Approved :: MIT License
17
17
  Description-Content-Type: text/markdown
18
18
  License-File: LICENSE
19
- Requires-Dist: black==24.4.0
19
+ Requires-Dist: black==26.3.1
20
20
  Requires-Dist: docutils>=0.20.1
21
21
  Requires-Dist: Jinja2==3.1.6
22
22
  Requires-Dist: PyYAML==6.0.1
@@ -88,6 +88,7 @@ pygen/codegen/templates/request_builders.py.jinja2
88
88
  pygen/codegen/templates/rest_init.py.jinja2
89
89
  pygen/codegen/templates/sample.py.jinja2
90
90
  pygen/codegen/templates/serialization.py.jinja2
91
+ pygen/codegen/templates/streaming_base.py.jinja2
91
92
  pygen/codegen/templates/test.py.jinja2
92
93
  pygen/codegen/templates/testpreparer.py.jinja2
93
94
  pygen/codegen/templates/types.py.jinja2
@@ -1,4 +1,4 @@
1
- black==24.4.0
1
+ black==26.3.1
2
2
  docutils>=0.20.1
3
3
  Jinja2==3.1.6
4
4
  PyYAML==6.0.1
@@ -47,7 +47,7 @@ setup(
47
47
  ]
48
48
  ),
49
49
  install_requires=[
50
- "black==24.4.0",
50
+ "black==26.3.1",
51
51
  "docutils>=0.20.1",
52
52
  "Jinja2==3.1.6",
53
53
  "PyYAML==6.0.1",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.35.1",
3
+ "version": "0.37.0",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",
@@ -66,20 +66,20 @@
66
66
  "emitter"
67
67
  ],
68
68
  "peerDependencies": {
69
- "@azure-tools/typespec-autorest": ">=0.70.0 <1.0.0",
70
- "@azure-tools/typespec-azure-core": ">=0.70.0 <1.0.0",
71
- "@azure-tools/typespec-azure-resource-manager": ">=0.70.0 <1.0.0",
72
- "@azure-tools/typespec-azure-rulesets": ">=0.70.0 <1.0.0",
73
- "@azure-tools/typespec-client-generator-core": ">=0.70.0 <1.0.0",
74
- "@typespec/compiler": "^1.14.0",
75
- "@typespec/http": "^1.14.0",
76
- "@typespec/openapi": "^1.14.0",
77
- "@typespec/rest": ">=0.84.0 <1.0.0",
78
- "@typespec/versioning": ">=0.84.0 <1.0.0",
79
- "@typespec/events": ">=0.84.0 <1.0.0",
80
- "@typespec/sse": ">=0.84.0 <1.0.0",
81
- "@typespec/streams": ">=0.84.0 <1.0.0",
82
- "@typespec/xml": ">=0.84.0 <1.0.0"
69
+ "@azure-tools/typespec-autorest": ">=0.71.0 <1.0.0",
70
+ "@azure-tools/typespec-azure-core": ">=0.71.0 <1.0.0",
71
+ "@azure-tools/typespec-azure-resource-manager": ">=0.71.0 <1.0.0",
72
+ "@azure-tools/typespec-azure-rulesets": ">=0.71.0 <1.0.0",
73
+ "@azure-tools/typespec-client-generator-core": ">=0.71.0 <1.0.0",
74
+ "@typespec/compiler": "^1.15.0",
75
+ "@typespec/http": "^1.15.0",
76
+ "@typespec/openapi": "^1.15.0",
77
+ "@typespec/rest": ">=0.85.0 <1.0.0",
78
+ "@typespec/versioning": ">=0.85.0 <1.0.0",
79
+ "@typespec/events": ">=0.85.0 <1.0.0",
80
+ "@typespec/sse": ">=0.85.0 <1.0.0",
81
+ "@typespec/streams": ">=0.85.0 <1.0.0",
82
+ "@typespec/xml": ">=0.85.0 <1.0.0"
83
83
  },
84
84
  "playgroundConfig": {
85
85
  "assets": [
@@ -104,24 +104,24 @@
104
104
  "tsx": "^4.21.0"
105
105
  },
106
106
  "devDependencies": {
107
- "@azure-tools/typespec-autorest": "~0.70.0",
108
- "@azure-tools/typespec-azure-core": "~0.70.0",
109
- "@azure-tools/typespec-azure-resource-manager": "~0.70.0",
110
- "@azure-tools/typespec-azure-rulesets": "~0.70.0",
111
- "@azure-tools/typespec-client-generator-core": "~0.70.0",
112
- "@azure-tools/azure-http-specs": "0.1.0-alpha.43",
113
- "@typespec/compiler": "^1.14.0",
114
- "@typespec/http": "^1.14.0",
115
- "@typespec/openapi": "^1.14.0",
116
- "@typespec/rest": "~0.84.0",
117
- "@typespec/versioning": "~0.84.0",
118
- "@typespec/events": "~0.84.0",
119
- "@typespec/spector": "0.1.0-alpha.26",
120
- "@typespec/spec-api": "0.1.0-alpha.15",
121
- "@typespec/sse": "~0.84.0",
122
- "@typespec/streams": "~0.84.0",
123
- "@typespec/xml": "~0.84.0",
124
- "@typespec/http-specs": "0.1.0-alpha.39",
107
+ "@azure-tools/typespec-autorest": "~0.71.0",
108
+ "@azure-tools/typespec-azure-core": "~0.71.0",
109
+ "@azure-tools/typespec-azure-resource-manager": "~0.71.0",
110
+ "@azure-tools/typespec-azure-rulesets": "~0.71.0",
111
+ "@azure-tools/typespec-client-generator-core": "~0.71.0",
112
+ "@azure-tools/azure-http-specs": "0.1.0-alpha.44",
113
+ "@typespec/compiler": "^1.15.0",
114
+ "@typespec/http": "^1.15.0",
115
+ "@typespec/openapi": "^1.15.0",
116
+ "@typespec/rest": "~0.85.0",
117
+ "@typespec/versioning": "~0.85.0",
118
+ "@typespec/events": "~0.85.0",
119
+ "@typespec/spector": "0.1.0-alpha.29-dev.0",
120
+ "@typespec/spec-api": "0.1.0-alpha.16",
121
+ "@typespec/sse": "~0.85.0",
122
+ "@typespec/streams": "~0.85.0",
123
+ "@typespec/xml": "~0.85.0",
124
+ "@typespec/http-specs": "0.1.0-alpha.42-dev.2",
125
125
  "@types/js-yaml": "~4.0.5",
126
126
  "@types/node": "~25.0.2",
127
127
  "@types/semver": "7.5.8",