@typespec/http-specs 0.1.0-alpha.9 → 0.1.0-dev.1

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 (224) hide show
  1. package/CHANGELOG.md +260 -3
  2. package/README.md +11 -3
  3. package/dist/specs/authentication/noauth/union/mockapi.d.ts +3 -0
  4. package/dist/specs/authentication/noauth/union/mockapi.d.ts.map +1 -0
  5. package/dist/specs/authentication/noauth/union/mockapi.js +25 -0
  6. package/dist/specs/authentication/noauth/union/mockapi.js.map +1 -0
  7. package/dist/specs/documentation/mockapi.d.ts +3 -0
  8. package/dist/specs/documentation/mockapi.d.ts.map +1 -0
  9. package/dist/specs/documentation/mockapi.js +40 -0
  10. package/dist/specs/documentation/mockapi.js.map +1 -0
  11. package/dist/specs/encode/array/mockapi.d.ts +3 -0
  12. package/dist/specs/encode/array/mockapi.d.ts.map +1 -0
  13. package/dist/specs/encode/array/mockapi.js +33 -0
  14. package/dist/specs/encode/array/mockapi.js.map +1 -0
  15. package/dist/specs/encode/bytes/mockapi.js +16 -24
  16. package/dist/specs/encode/bytes/mockapi.js.map +1 -1
  17. package/dist/specs/encode/datetime/mockapi.js +2 -2
  18. package/dist/specs/encode/datetime/mockapi.js.map +1 -1
  19. package/dist/specs/encode/duration/mockapi.d.ts.map +1 -1
  20. package/dist/specs/encode/duration/mockapi.js +115 -3
  21. package/dist/specs/encode/duration/mockapi.js.map +1 -1
  22. package/dist/specs/encode/numeric/mockapi.js +2 -2
  23. package/dist/specs/encode/numeric/mockapi.js.map +1 -1
  24. package/dist/specs/helper.d.ts +2 -2
  25. package/dist/specs/helper.d.ts.map +1 -1
  26. package/dist/specs/parameters/basic/mockapi.d.ts.map +1 -1
  27. package/dist/specs/parameters/basic/mockapi.js +3 -3
  28. package/dist/specs/parameters/basic/mockapi.js.map +1 -1
  29. package/dist/specs/parameters/body-optionality/mockapi.d.ts.map +1 -1
  30. package/dist/specs/parameters/body-optionality/mockapi.js +14 -4
  31. package/dist/specs/parameters/body-optionality/mockapi.js.map +1 -1
  32. package/dist/specs/parameters/collection-format/mockapi.js +4 -15
  33. package/dist/specs/parameters/collection-format/mockapi.js.map +1 -1
  34. package/dist/specs/parameters/path/mockapi.d.ts +3 -0
  35. package/dist/specs/parameters/path/mockapi.d.ts.map +1 -0
  36. package/dist/specs/parameters/path/mockapi.js +29 -0
  37. package/dist/specs/parameters/path/mockapi.js.map +1 -0
  38. package/dist/specs/parameters/query/mockapi.d.ts +3 -0
  39. package/dist/specs/parameters/query/mockapi.d.ts.map +1 -0
  40. package/dist/specs/parameters/query/mockapi.js +14 -0
  41. package/dist/specs/parameters/query/mockapi.js.map +1 -0
  42. package/dist/specs/parameters/spread/mockapi.d.ts.map +1 -1
  43. package/dist/specs/parameters/spread/mockapi.js +19 -19
  44. package/dist/specs/parameters/spread/mockapi.js.map +1 -1
  45. package/dist/specs/payload/json-merge-patch/mockapi.js +4 -4
  46. package/dist/specs/payload/json-merge-patch/mockapi.js.map +1 -1
  47. package/dist/specs/payload/media-type/mockapi.js +2 -2
  48. package/dist/specs/payload/media-type/mockapi.js.map +1 -1
  49. package/dist/specs/payload/multipart/mockapi.d.ts.map +1 -1
  50. package/dist/specs/payload/multipart/mockapi.js +196 -60
  51. package/dist/specs/payload/multipart/mockapi.js.map +1 -1
  52. package/dist/specs/payload/pageable/mockapi.d.ts.map +1 -1
  53. package/dist/specs/payload/pageable/mockapi.js +626 -14
  54. package/dist/specs/payload/pageable/mockapi.js.map +1 -1
  55. package/dist/specs/payload/xml/mockapi.d.ts +19 -5
  56. package/dist/specs/payload/xml/mockapi.d.ts.map +1 -1
  57. package/dist/specs/payload/xml/mockapi.js +311 -55
  58. package/dist/specs/payload/xml/mockapi.js.map +1 -1
  59. package/dist/specs/response/status-code-range/mockapi.d.ts.map +1 -1
  60. package/dist/specs/response/status-code-range/mockapi.js +5 -9
  61. package/dist/specs/response/status-code-range/mockapi.js.map +1 -1
  62. package/dist/specs/routes/mockapi.js +16 -16
  63. package/dist/specs/routes/mockapi.js.map +1 -1
  64. package/dist/specs/serialization/encoded-name/json/mockapi.js +1 -1
  65. package/dist/specs/serialization/encoded-name/json/mockapi.js.map +1 -1
  66. package/dist/specs/server/versions/not-versioned/mockapi.js +1 -1
  67. package/dist/specs/server/versions/not-versioned/mockapi.js.map +1 -1
  68. package/dist/specs/server/versions/versioned/mockapi.js +8 -12
  69. package/dist/specs/server/versions/versioned/mockapi.js.map +1 -1
  70. package/dist/specs/special-words/mockapi.d.ts.map +1 -1
  71. package/dist/specs/special-words/mockapi.js +59 -6
  72. package/dist/specs/special-words/mockapi.js.map +1 -1
  73. package/dist/specs/streaming/jsonl/mockapi.d.ts +3 -0
  74. package/dist/specs/streaming/jsonl/mockapi.d.ts.map +1 -0
  75. package/dist/specs/streaming/jsonl/mockapi.js +30 -0
  76. package/dist/specs/streaming/jsonl/mockapi.js.map +1 -0
  77. package/dist/specs/type/array/mockapi.js +1 -1
  78. package/dist/specs/type/array/mockapi.js.map +1 -1
  79. package/dist/specs/type/dictionary/mockapi.js +1 -1
  80. package/dist/specs/type/dictionary/mockapi.js.map +1 -1
  81. package/dist/specs/type/enum/extensible/mockapi.js +1 -1
  82. package/dist/specs/type/enum/extensible/mockapi.js.map +1 -1
  83. package/dist/specs/type/enum/fixed/mockapi.js +2 -2
  84. package/dist/specs/type/enum/fixed/mockapi.js.map +1 -1
  85. package/dist/specs/type/file/mockapi.d.ts +3 -0
  86. package/dist/specs/type/file/mockapi.d.ts.map +1 -0
  87. package/dist/specs/type/file/mockapi.js +187 -0
  88. package/dist/specs/type/file/mockapi.js.map +1 -0
  89. package/dist/specs/type/model/empty/mockapi.js +2 -2
  90. package/dist/specs/type/model/empty/mockapi.js.map +1 -1
  91. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js +1 -1
  92. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js.map +1 -1
  93. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js +2 -2
  94. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js.map +1 -1
  95. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js +2 -2
  96. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js.map +1 -1
  97. package/dist/specs/type/model/inheritance/recursive/mockapi.js +1 -1
  98. package/dist/specs/type/model/inheritance/recursive/mockapi.js.map +1 -1
  99. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js +2 -2
  100. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js.map +1 -1
  101. package/dist/specs/type/model/usage/mockapi.js +4 -4
  102. package/dist/specs/type/model/usage/mockapi.js.map +1 -1
  103. package/dist/specs/type/model/visibility/mockapi.js +9 -10
  104. package/dist/specs/type/model/visibility/mockapi.js.map +1 -1
  105. package/dist/specs/type/property/additional-properties/mockapi.js +9 -6
  106. package/dist/specs/type/property/additional-properties/mockapi.js.map +1 -1
  107. package/dist/specs/type/property/nullable/mockapi.js +2 -6
  108. package/dist/specs/type/property/nullable/mockapi.js.map +1 -1
  109. package/dist/specs/type/property/optionality/mockapi.js +1 -1
  110. package/dist/specs/type/property/optionality/mockapi.js.map +1 -1
  111. package/dist/specs/type/property/value-types/mockapi.js +3 -3
  112. package/dist/specs/type/property/value-types/mockapi.js.map +1 -1
  113. package/dist/specs/type/scalar/mockapi.js +9 -9
  114. package/dist/specs/type/scalar/mockapi.js.map +1 -1
  115. package/dist/specs/type/union/discriminated/mockapi.d.ts +3 -0
  116. package/dist/specs/type/union/discriminated/mockapi.d.ts.map +1 -0
  117. package/dist/specs/type/union/discriminated/mockapi.js +212 -0
  118. package/dist/specs/type/union/discriminated/mockapi.js.map +1 -0
  119. package/dist/specs/type/union/mockapi.js +2 -2
  120. package/dist/specs/type/union/mockapi.js.map +1 -1
  121. package/dist/specs/versioning/added/mockapi.js +6 -6
  122. package/dist/specs/versioning/added/mockapi.js.map +1 -1
  123. package/dist/specs/versioning/madeOptional/mockapi.js +2 -2
  124. package/dist/specs/versioning/madeOptional/mockapi.js.map +1 -1
  125. package/dist/specs/versioning/removed/mockapi.js +11 -11
  126. package/dist/specs/versioning/removed/mockapi.js.map +1 -1
  127. package/dist/specs/versioning/renamedFrom/mockapi.js +5 -5
  128. package/dist/specs/versioning/renamedFrom/mockapi.js.map +1 -1
  129. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js +1 -1
  130. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js.map +1 -1
  131. package/dist/specs/versioning/typeChangedFrom/mockapi.js +3 -3
  132. package/dist/specs/versioning/typeChangedFrom/mockapi.js.map +1 -1
  133. package/manifest.json +11545 -0
  134. package/package.json +31 -20
  135. package/smoke/petstore/main.tsp +96 -0
  136. package/smoke/todoapp/main.tsp +293 -0
  137. package/spec-summary.md +2137 -121
  138. package/specs/authentication/noauth/union/main.tsp +30 -0
  139. package/specs/authentication/noauth/union/mockapi.ts +27 -0
  140. package/specs/documentation/main.tsp +158 -0
  141. package/specs/documentation/mockapi.ts +59 -0
  142. package/specs/encode/array/main.tsp +339 -0
  143. package/specs/encode/array/mockapi.ts +83 -0
  144. package/specs/encode/bytes/main.tsp +29 -20
  145. package/specs/encode/bytes/mockapi.ts +13 -31
  146. package/specs/encode/datetime/main.tsp +2 -7
  147. package/specs/encode/datetime/mockapi.ts +2 -2
  148. package/specs/encode/duration/main.tsp +420 -7
  149. package/specs/encode/duration/mockapi.ts +221 -2
  150. package/specs/encode/numeric/mockapi.ts +2 -2
  151. package/specs/parameters/basic/mockapi.ts +3 -3
  152. package/specs/parameters/body-optionality/main.tsp +2 -0
  153. package/specs/parameters/body-optionality/mockapi.ts +24 -4
  154. package/specs/parameters/collection-format/main.tsp +5 -25
  155. package/specs/parameters/collection-format/mockapi.ts +4 -16
  156. package/specs/parameters/path/main.tsp +48 -0
  157. package/specs/parameters/path/mockapi.ts +34 -0
  158. package/specs/parameters/query/main.tsp +22 -0
  159. package/specs/parameters/query/mockapi.ts +15 -0
  160. package/specs/parameters/spread/mockapi.ts +19 -19
  161. package/specs/payload/json-merge-patch/main.tsp +2 -2
  162. package/specs/payload/json-merge-patch/mockapi.ts +4 -4
  163. package/specs/payload/media-type/mockapi.ts +2 -2
  164. package/specs/payload/multipart/main.tsp +230 -32
  165. package/specs/payload/multipart/mockapi.ts +207 -59
  166. package/specs/payload/pageable/main.tsp +648 -0
  167. package/specs/payload/pageable/mockapi.ts +691 -14
  168. package/specs/payload/xml/main.tsp +532 -132
  169. package/specs/payload/xml/mockapi.ts +402 -67
  170. package/specs/response/status-code-range/main.tsp +2 -2
  171. package/specs/response/status-code-range/mockapi.ts +5 -9
  172. package/specs/routes/main.tsp +29 -29
  173. package/specs/routes/mockapi.ts +16 -16
  174. package/specs/serialization/encoded-name/json/main.tsp +1 -1
  175. package/specs/serialization/encoded-name/json/mockapi.ts +1 -1
  176. package/specs/server/endpoint/not-defined/main.tsp +1 -3
  177. package/specs/server/path/multiple/main.tsp +3 -5
  178. package/specs/server/versions/not-versioned/mockapi.ts +1 -1
  179. package/specs/server/versions/versioned/main.tsp +1 -1
  180. package/specs/server/versions/versioned/mockapi.ts +6 -12
  181. package/specs/special-headers/conditional-request/main.tsp +1 -1
  182. package/specs/special-headers/repeatability/main.tsp +2 -2
  183. package/specs/special-words/main.tsp +124 -6
  184. package/specs/special-words/mockapi.ts +62 -6
  185. package/specs/streaming/jsonl/main.tsp +33 -0
  186. package/specs/streaming/jsonl/mockapi.ts +32 -0
  187. package/specs/type/array/mockapi.ts +1 -1
  188. package/specs/type/dictionary/mockapi.ts +1 -1
  189. package/specs/type/enum/extensible/main.tsp +18 -2
  190. package/specs/type/enum/extensible/mockapi.ts +1 -1
  191. package/specs/type/enum/fixed/main.tsp +15 -3
  192. package/specs/type/enum/fixed/mockapi.ts +2 -2
  193. package/specs/type/file/main.tsp +109 -0
  194. package/specs/type/file/mockapi.ts +200 -0
  195. package/specs/type/model/empty/mockapi.ts +2 -2
  196. package/specs/type/model/inheritance/enum-discriminator/mockapi.ts +1 -1
  197. package/specs/type/model/inheritance/nested-discriminator/mockapi.ts +2 -2
  198. package/specs/type/model/inheritance/not-discriminated/mockapi.ts +2 -2
  199. package/specs/type/model/inheritance/recursive/mockapi.ts +1 -1
  200. package/specs/type/model/inheritance/single-discriminator/mockapi.ts +2 -2
  201. package/specs/type/model/usage/mockapi.ts +4 -4
  202. package/specs/type/model/visibility/main.tsp +9 -17
  203. package/specs/type/model/visibility/mockapi.ts +9 -10
  204. package/specs/type/property/additional-properties/main.tsp +17 -17
  205. package/specs/type/property/additional-properties/mockapi.ts +10 -10
  206. package/specs/type/property/nullable/mockapi.ts +7 -8
  207. package/specs/type/property/optionality/mockapi.ts +1 -1
  208. package/specs/type/property/value-types/mockapi.ts +3 -3
  209. package/specs/type/scalar/main.tsp +58 -9
  210. package/specs/type/scalar/mockapi.ts +9 -9
  211. package/specs/type/union/discriminated/main.tsp +251 -0
  212. package/specs/type/union/discriminated/mockapi.ts +230 -0
  213. package/specs/type/union/mockapi.ts +2 -2
  214. package/specs/versioning/added/mockapi.ts +6 -6
  215. package/specs/versioning/madeOptional/mockapi.ts +2 -2
  216. package/specs/versioning/removed/main.tsp +5 -5
  217. package/specs/versioning/removed/mockapi.ts +11 -11
  218. package/specs/versioning/renamedFrom/mockapi.ts +5 -5
  219. package/specs/versioning/returnTypeChangedFrom/main.tsp +17 -2
  220. package/specs/versioning/returnTypeChangedFrom/mockapi.ts +1 -1
  221. package/specs/versioning/typeChangedFrom/mockapi.ts +3 -3
  222. package/temp/.tsbuildinfo +1 -1
  223. package/tsconfig.build.json +0 -4
  224. package/tspconfig.yaml +0 -2
@@ -1,7 +1,11 @@
1
- import { MockRequest, passOnSuccess, ScenarioMockApi, xml } from "@typespec/spec-api";
1
+ import { MockRequest, passOnCode, passOnSuccess, ScenarioMockApi, xml } from "@typespec/spec-api";
2
2
 
3
3
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
4
 
5
+ // ────────────────────────────────────────────────────────────────────────────
6
+ // §1 — Primitive properties
7
+ // ────────────────────────────────────────────────────────────────────────────
8
+
5
9
  export const simpleModel = `
6
10
  <SimpleModel>
7
11
  <name>foo</name>
@@ -9,6 +13,51 @@ export const simpleModel = `
9
13
  </SimpleModel>
10
14
  `;
11
15
 
16
+ export const modelWithRenamedProperty = `
17
+ <ModelWithRenamedProperty>
18
+ <renamedTitle>foo</renamedTitle>
19
+ <author>bar</author>
20
+ </ModelWithRenamedProperty>
21
+ `;
22
+
23
+ export const modelWithRenamedFields = `
24
+ <ModelWithRenamedFieldsSrc>
25
+ <InputData>
26
+ <name>foo</name>
27
+ <age>123</age>
28
+ </InputData>
29
+ <OutputData>
30
+ <name>bar</name>
31
+ <age>456</age>
32
+ </OutputData>
33
+ </ModelWithRenamedFieldsSrc>
34
+ `;
35
+
36
+ // ────────────────────────────────────────────────────────────────────────────
37
+ // §2 — Nested models
38
+ // ────────────────────────────────────────────────────────────────────────────
39
+
40
+ export const modelWithNestedModel = `
41
+ <ModelWithNestedModel>
42
+ <nested>
43
+ <name>foo</name>
44
+ <age>123</age>
45
+ </nested>
46
+ </ModelWithNestedModel>
47
+ `;
48
+
49
+ export const modelWithRenamedNestedModel = `
50
+ <ModelWithRenamedNestedModel>
51
+ <author>
52
+ <name>foo</name>
53
+ </author>
54
+ </ModelWithRenamedNestedModel>
55
+ `;
56
+
57
+ // ────────────────────────────────────────────────────────────────────────────
58
+ // §3 — Array of primitive types
59
+ // ────────────────────────────────────────────────────────────────────────────
60
+
12
61
  export const modelWithSimpleArrays = `
13
62
  <ModelWithSimpleArrays>
14
63
  <colors>
@@ -23,33 +72,6 @@ export const modelWithSimpleArrays = `
23
72
  </ModelWithSimpleArrays>
24
73
  `;
25
74
 
26
- export const modelWithArrayOfModel = `
27
- <ModelWithArrayOfModel>
28
- <items>
29
- <SimpleModel>
30
- <name>foo</name>
31
- <age>123</age>
32
- </SimpleModel>
33
- <SimpleModel>
34
- <name>bar</name>
35
- <age>456</age>
36
- </SimpleModel>
37
- </items>
38
- </ModelWithArrayOfModel>
39
- `;
40
-
41
- export const modelWithOptionalField = `
42
- <ModelWithOptionalField>
43
- <item>widget</item>
44
- </ModelWithOptionalField>
45
- `;
46
-
47
- export const modelWithAttributes = `
48
- <ModelWithAttributes id1="123" id2="foo">
49
- <enabled>true</enabled>
50
- </ModelWithAttributes>
51
- `;
52
-
53
75
  export const modelWithUnwrappedArray = `
54
76
  <ModelWithUnwrappedArray>
55
77
  <colors>red</colors>
@@ -74,31 +96,150 @@ export const modelWithRenamedArrays = `
74
96
  </ModelWithRenamedArrays>
75
97
  `;
76
98
 
77
- export const modelWithRenamedFields = `
78
- <ModelWithRenamedFieldsSrc>
79
- <InputData>
99
+ export const modelWithWrappedPrimitiveCustomItemNames = `
100
+ <ModelWithWrappedPrimitiveCustomItemNames>
101
+ <ItemsTags>
102
+ <ItemName>fiction</ItemName>
103
+ <ItemName>classic</ItemName>
104
+ </ItemsTags>
105
+ </ModelWithWrappedPrimitiveCustomItemNames>
106
+ `;
107
+
108
+ // ────────────────────────────────────────────────────────────────────────────
109
+ // §4 — Array of complex types
110
+ // ────────────────────────────────────────────────────────────────────────────
111
+
112
+ export const modelWithArrayOfModel = `
113
+ <ModelWithArrayOfModel>
114
+ <items>
115
+ <SimpleModel>
116
+ <name>foo</name>
117
+ <age>123</age>
118
+ </SimpleModel>
119
+ <SimpleModel>
120
+ <name>bar</name>
121
+ <age>456</age>
122
+ </SimpleModel>
123
+ </items>
124
+ </ModelWithArrayOfModel>
125
+ `;
126
+
127
+ export const modelWithUnwrappedModelArray = `
128
+ <ModelWithUnwrappedModelArray>
129
+ <items>
80
130
  <name>foo</name>
81
131
  <age>123</age>
82
- </InputData>
83
- <OutputData>
132
+ </items>
133
+ <items>
84
134
  <name>bar</name>
85
135
  <age>456</age>
86
- </OutputData>
87
- </ModelWithRenamedFieldsSrc>
136
+ </items>
137
+ </ModelWithUnwrappedModelArray>
88
138
  `;
89
139
 
90
- export const modelWithEmptyArray = `
91
- <ModelWithEmptyArray>
92
- <items />
93
- </ModelWithEmptyArray>
140
+ export const modelWithRenamedWrappedModelArray = `
141
+ <ModelWithRenamedWrappedModelArray>
142
+ <AllItems>
143
+ <SimpleModel>
144
+ <name>foo</name>
145
+ <age>123</age>
146
+ </SimpleModel>
147
+ <SimpleModel>
148
+ <name>bar</name>
149
+ <age>456</age>
150
+ </SimpleModel>
151
+ </AllItems>
152
+ </ModelWithRenamedWrappedModelArray>
94
153
  `;
95
154
 
155
+ export const modelWithRenamedUnwrappedModelArray = `
156
+ <ModelWithRenamedUnwrappedModelArray>
157
+ <ModelItem>
158
+ <name>foo</name>
159
+ <age>123</age>
160
+ </ModelItem>
161
+ <ModelItem>
162
+ <name>bar</name>
163
+ <age>456</age>
164
+ </ModelItem>
165
+ </ModelWithRenamedUnwrappedModelArray>
166
+ `;
167
+
168
+ export const modelWithRenamedWrappedAndItemModelArray = `
169
+ <ModelWithRenamedWrappedAndItemModelArray>
170
+ <AllBooks>
171
+ <XmlBook>
172
+ <title>The Great Gatsby</title>
173
+ </XmlBook>
174
+ <XmlBook>
175
+ <title>Les Miserables</title>
176
+ </XmlBook>
177
+ </AllBooks>
178
+ </ModelWithRenamedWrappedAndItemModelArray>
179
+ `;
180
+
181
+ // ────────────────────────────────────────────────────────────────────────────
182
+ // §5 — Attributes
183
+ // ────────────────────────────────────────────────────────────────────────────
184
+
185
+ export const modelWithAttributes = `
186
+ <ModelWithAttributes id1="123" id2="foo">
187
+ <enabled>true</enabled>
188
+ </ModelWithAttributes>
189
+ `;
190
+
191
+ export const modelWithRenamedAttribute = `
192
+ <ModelWithRenamedAttribute xml-id="123">
193
+ <title>The Great Gatsby</title>
194
+ <author>F. Scott Fitzgerald</author>
195
+ </ModelWithRenamedAttribute>
196
+ `;
197
+
198
+ // ────────────────────────────────────────────────────────────────────────────
199
+ // §6/§7 — Namespace and prefix
200
+ // ────────────────────────────────────────────────────────────────────────────
201
+
202
+ export const modelWithNamespace = `
203
+ <smp:ModelWithNamespace xmlns:smp="http://example.com/schema">
204
+ <id>123</id>
205
+ <title>The Great Gatsby</title>
206
+ </smp:ModelWithNamespace>
207
+ `;
208
+
209
+ export const modelWithNamespaceOnProperties = `
210
+ <smp:ModelWithNamespaceOnProperties xmlns:smp="http://example.com/schema" xmlns:ns2="http://example.com/ns2">
211
+ <id>123</id>
212
+ <smp:title>The Great Gatsby</smp:title>
213
+ <ns2:author>F. Scott Fitzgerald</ns2:author>
214
+ </smp:ModelWithNamespaceOnProperties>
215
+ `;
216
+
217
+ // ────────────────────────────────────────────────────────────────────────────
218
+ // §8 — Text content
219
+ // ────────────────────────────────────────────────────────────────────────────
220
+
96
221
  export const modelWithText = `
97
222
  <ModelWithText language="foo">
98
223
  This is some text.
99
224
  </ModelWithText>
100
225
  `;
101
226
 
227
+ // ────────────────────────────────────────────────────────────────────────────
228
+ // Additional scenarios (not in the guide)
229
+ // ────────────────────────────────────────────────────────────────────────────
230
+
231
+ export const modelWithOptionalField = `
232
+ <ModelWithOptionalField>
233
+ <item>widget</item>
234
+ </ModelWithOptionalField>
235
+ `;
236
+
237
+ export const modelWithEmptyArray = `
238
+ <ModelWithEmptyArray>
239
+ <items />
240
+ </ModelWithEmptyArray>
241
+ `;
242
+
102
243
  export const modelWithDictionary = `
103
244
  <ModelWithDictionary>
104
245
  <metadata>
@@ -123,6 +264,40 @@ export const modelWithEncodedNames = `
123
264
  </ModelWithEncodedNamesSrc>
124
265
  `;
125
266
 
267
+ export const modelWithEnum = `
268
+ <ModelWithEnum>
269
+ <status>success</status>
270
+ </ModelWithEnum>
271
+ `;
272
+
273
+ export const modelWithDatetime = `
274
+ <ModelWithDatetime>
275
+ <rfc3339>2022-08-26T18:38:00.000Z</rfc3339>
276
+ <rfc7231>Fri, 26 Aug 2022 14:38:00 GMT</rfc7231>
277
+ </ModelWithDatetime>
278
+ `;
279
+
280
+ // Some clients serialize UTC datetimes without trailing zero milliseconds. Both
281
+ // "2022-08-26T18:38:00.000Z" and "2022-08-26T18:38:00Z" are valid RFC3339 representations
282
+ // of the same instant; accept either form.
283
+ const modelWithDatetimeNoMs = `
284
+ <ModelWithDatetime>
285
+ <rfc3339>2022-08-26T18:38:00Z</rfc3339>
286
+ <rfc7231>Fri, 26 Aug 2022 14:38:00 GMT</rfc7231>
287
+ </ModelWithDatetime>
288
+ `;
289
+
290
+ export const xmlError = `
291
+ <XmlErrorBody>
292
+ <message>Something went wrong</message>
293
+ <code>400</code>
294
+ </XmlErrorBody>
295
+ `;
296
+
297
+ // ────────────────────────────────────────────────────────────────────────────
298
+ // Scenario registrations
299
+ // ────────────────────────────────────────────────────────────────────────────
300
+
126
301
  function createServerTests(uri: string, data?: any) {
127
302
  return {
128
303
  get: passOnSuccess({
@@ -139,10 +314,7 @@ function createServerTests(uri: string, data?: any) {
139
314
  uri,
140
315
  method: "put",
141
316
  request: {
142
- body: data,
143
- headers: {
144
- "content-type": "application/xml",
145
- },
317
+ body: xml(data),
146
318
  },
147
319
  handler: (req: MockRequest) => {
148
320
  req.expect.containsHeader("content-type", "application/xml");
@@ -159,10 +331,46 @@ function createServerTests(uri: string, data?: any) {
159
331
  };
160
332
  }
161
333
 
334
+ // §1 — Primitive properties
335
+
162
336
  const Payload_Xml_SimpleModel = createServerTests("/payload/xml/simpleModel", simpleModel);
163
337
  Scenarios.Payload_Xml_SimpleModelValue_get = Payload_Xml_SimpleModel.get;
164
338
  Scenarios.Payload_Xml_SimpleModelValue_put = Payload_Xml_SimpleModel.put;
165
339
 
340
+ const Payload_Xml_ModelWithRenamedProperty = createServerTests(
341
+ "/payload/xml/modelWithRenamedProperty",
342
+ modelWithRenamedProperty,
343
+ );
344
+ Scenarios.Payload_Xml_ModelWithRenamedPropertyValue_get = Payload_Xml_ModelWithRenamedProperty.get;
345
+ Scenarios.Payload_Xml_ModelWithRenamedPropertyValue_put = Payload_Xml_ModelWithRenamedProperty.put;
346
+
347
+ const Payload_Xml_ModelWithRenamedFields = createServerTests(
348
+ "/payload/xml/modelWithRenamedFields",
349
+ modelWithRenamedFields,
350
+ );
351
+ Scenarios.Payload_Xml_ModelWithRenamedFieldsValue_get = Payload_Xml_ModelWithRenamedFields.get;
352
+ Scenarios.Payload_Xml_ModelWithRenamedFieldsValue_put = Payload_Xml_ModelWithRenamedFields.put;
353
+
354
+ // §2 — Nested models
355
+
356
+ const Payload_Xml_ModelWithNestedModel = createServerTests(
357
+ "/payload/xml/modelWithNestedModel",
358
+ modelWithNestedModel,
359
+ );
360
+ Scenarios.Payload_Xml_ModelWithNestedModelValue_get = Payload_Xml_ModelWithNestedModel.get;
361
+ Scenarios.Payload_Xml_ModelWithNestedModelValue_put = Payload_Xml_ModelWithNestedModel.put;
362
+
363
+ const Payload_Xml_ModelWithRenamedNestedModel = createServerTests(
364
+ "/payload/xml/modelWithRenamedNestedModel",
365
+ modelWithRenamedNestedModel,
366
+ );
367
+ Scenarios.Payload_Xml_ModelWithRenamedNestedModelValue_get =
368
+ Payload_Xml_ModelWithRenamedNestedModel.get;
369
+ Scenarios.Payload_Xml_ModelWithRenamedNestedModelValue_put =
370
+ Payload_Xml_ModelWithRenamedNestedModel.put;
371
+
372
+ // §3 — Array of primitive types
373
+
166
374
  const Payload_Xml_ModelWithSimpleArrays = createServerTests(
167
375
  "/payload/xml/modelWithSimpleArrays",
168
376
  modelWithSimpleArrays,
@@ -170,6 +378,31 @@ const Payload_Xml_ModelWithSimpleArrays = createServerTests(
170
378
  Scenarios.Payload_Xml_ModelWithSimpleArraysValue_get = Payload_Xml_ModelWithSimpleArrays.get;
171
379
  Scenarios.Payload_Xml_ModelWithSimpleArraysValue_put = Payload_Xml_ModelWithSimpleArrays.put;
172
380
 
381
+ const Payload_Xml_ModelWithUnwrappedArray = createServerTests(
382
+ "/payload/xml/modelWithUnwrappedArray",
383
+ modelWithUnwrappedArray,
384
+ );
385
+ Scenarios.Payload_Xml_ModelWithUnwrappedArrayValue_get = Payload_Xml_ModelWithUnwrappedArray.get;
386
+ Scenarios.Payload_Xml_ModelWithUnwrappedArrayValue_put = Payload_Xml_ModelWithUnwrappedArray.put;
387
+
388
+ const Payload_Xml_ModelWithRenamedArrays = createServerTests(
389
+ "/payload/xml/modelWithRenamedArrays",
390
+ modelWithRenamedArrays,
391
+ );
392
+ Scenarios.Payload_Xml_ModelWithRenamedArraysValue_get = Payload_Xml_ModelWithRenamedArrays.get;
393
+ Scenarios.Payload_Xml_ModelWithRenamedArraysValue_put = Payload_Xml_ModelWithRenamedArrays.put;
394
+
395
+ const Payload_Xml_ModelWithWrappedPrimitiveCustomItemNames = createServerTests(
396
+ "/payload/xml/modelWithWrappedPrimitiveCustomItemNames",
397
+ modelWithWrappedPrimitiveCustomItemNames,
398
+ );
399
+ Scenarios.Payload_Xml_ModelWithWrappedPrimitiveCustomItemNamesValue_get =
400
+ Payload_Xml_ModelWithWrappedPrimitiveCustomItemNames.get;
401
+ Scenarios.Payload_Xml_ModelWithWrappedPrimitiveCustomItemNamesValue_put =
402
+ Payload_Xml_ModelWithWrappedPrimitiveCustomItemNames.put;
403
+
404
+ // §4 — Array of complex types
405
+
173
406
  const Payload_Xml_ModelWithArrayOfModel = createServerTests(
174
407
  "/payload/xml/modelWithArrayOfModel",
175
408
  modelWithArrayOfModel,
@@ -177,12 +410,43 @@ const Payload_Xml_ModelWithArrayOfModel = createServerTests(
177
410
  Scenarios.Payload_Xml_ModelWithArrayOfModelValue_get = Payload_Xml_ModelWithArrayOfModel.get;
178
411
  Scenarios.Payload_Xml_ModelWithArrayOfModelValue_put = Payload_Xml_ModelWithArrayOfModel.put;
179
412
 
180
- const Payload_Xml_ModelWithOptionalField = createServerTests(
181
- "/payload/xml/modelWithOptionalField",
182
- modelWithOptionalField,
413
+ const Payload_Xml_ModelWithUnwrappedModelArray = createServerTests(
414
+ "/payload/xml/modelWithUnwrappedModelArray",
415
+ modelWithUnwrappedModelArray,
183
416
  );
184
- Scenarios.Payload_Xml_ModelWithOptionalFieldValue_get = Payload_Xml_ModelWithOptionalField.get;
185
- Scenarios.Payload_Xml_ModelWithOptionalFieldValue_put = Payload_Xml_ModelWithOptionalField.put;
417
+ Scenarios.Payload_Xml_ModelWithUnwrappedModelArrayValue_get =
418
+ Payload_Xml_ModelWithUnwrappedModelArray.get;
419
+ Scenarios.Payload_Xml_ModelWithUnwrappedModelArrayValue_put =
420
+ Payload_Xml_ModelWithUnwrappedModelArray.put;
421
+
422
+ const Payload_Xml_ModelWithRenamedWrappedModelArray = createServerTests(
423
+ "/payload/xml/modelWithRenamedWrappedModelArray",
424
+ modelWithRenamedWrappedModelArray,
425
+ );
426
+ Scenarios.Payload_Xml_ModelWithRenamedWrappedModelArrayValue_get =
427
+ Payload_Xml_ModelWithRenamedWrappedModelArray.get;
428
+ Scenarios.Payload_Xml_ModelWithRenamedWrappedModelArrayValue_put =
429
+ Payload_Xml_ModelWithRenamedWrappedModelArray.put;
430
+
431
+ const Payload_Xml_ModelWithRenamedUnwrappedModelArray = createServerTests(
432
+ "/payload/xml/modelWithRenamedUnwrappedModelArray",
433
+ modelWithRenamedUnwrappedModelArray,
434
+ );
435
+ Scenarios.Payload_Xml_ModelWithRenamedUnwrappedModelArrayValue_get =
436
+ Payload_Xml_ModelWithRenamedUnwrappedModelArray.get;
437
+ Scenarios.Payload_Xml_ModelWithRenamedUnwrappedModelArrayValue_put =
438
+ Payload_Xml_ModelWithRenamedUnwrappedModelArray.put;
439
+
440
+ const Payload_Xml_ModelWithRenamedWrappedAndItemModelArray = createServerTests(
441
+ "/payload/xml/modelWithRenamedWrappedAndItemModelArray",
442
+ modelWithRenamedWrappedAndItemModelArray,
443
+ );
444
+ Scenarios.Payload_Xml_ModelWithRenamedWrappedAndItemModelArrayValue_get =
445
+ Payload_Xml_ModelWithRenamedWrappedAndItemModelArray.get;
446
+ Scenarios.Payload_Xml_ModelWithRenamedWrappedAndItemModelArrayValue_put =
447
+ Payload_Xml_ModelWithRenamedWrappedAndItemModelArray.put;
448
+
449
+ // §5 — Attributes
186
450
 
187
451
  const Payload_Xml_ModelWithAttributes = createServerTests(
188
452
  "/payload/xml/modelWithAttributes",
@@ -191,26 +455,47 @@ const Payload_Xml_ModelWithAttributes = createServerTests(
191
455
  Scenarios.Payload_Xml_ModelWithAttributesValue_get = Payload_Xml_ModelWithAttributes.get;
192
456
  Scenarios.Payload_Xml_ModelWithAttributesValue_put = Payload_Xml_ModelWithAttributes.put;
193
457
 
194
- const Payload_Xml_ModelWithUnwrappedArray = createServerTests(
195
- "/payload/xml/modelWithUnwrappedArray",
196
- modelWithUnwrappedArray,
458
+ const Payload_Xml_ModelWithRenamedAttribute = createServerTests(
459
+ "/payload/xml/modelWithRenamedAttribute",
460
+ modelWithRenamedAttribute,
197
461
  );
198
- Scenarios.Payload_Xml_ModelWithUnwrappedArrayValue_get = Payload_Xml_ModelWithUnwrappedArray.get;
199
- Scenarios.Payload_Xml_ModelWithUnwrappedArrayValue_put = Payload_Xml_ModelWithUnwrappedArray.put;
462
+ Scenarios.Payload_Xml_ModelWithRenamedAttributeValue_get =
463
+ Payload_Xml_ModelWithRenamedAttribute.get;
464
+ Scenarios.Payload_Xml_ModelWithRenamedAttributeValue_put =
465
+ Payload_Xml_ModelWithRenamedAttribute.put;
200
466
 
201
- const Payload_Xml_ModelWithRenamedArrays = createServerTests(
202
- "/payload/xml/modelWithRenamedArrays",
203
- modelWithRenamedArrays,
467
+ // §6/§7 Namespace and prefix
468
+
469
+ const Payload_Xml_ModelWithNamespace = createServerTests(
470
+ "/payload/xml/modelWithNamespace",
471
+ modelWithNamespace,
204
472
  );
205
- Scenarios.Payload_Xml_ModelWithRenamedArraysValue_get = Payload_Xml_ModelWithRenamedArrays.get;
206
- Scenarios.Payload_Xml_ModelWithRenamedArraysValue_put = Payload_Xml_ModelWithRenamedArrays.put;
473
+ Scenarios.Payload_Xml_ModelWithNamespaceValue_get = Payload_Xml_ModelWithNamespace.get;
474
+ Scenarios.Payload_Xml_ModelWithNamespaceValue_put = Payload_Xml_ModelWithNamespace.put;
207
475
 
208
- const Payload_Xml_ModelWithRenamedFields = createServerTests(
209
- "/payload/xml/modelWithRenamedFields",
210
- modelWithRenamedFields,
476
+ const Payload_Xml_ModelWithNamespaceOnProperties = createServerTests(
477
+ "/payload/xml/modelWithNamespaceOnProperties",
478
+ modelWithNamespaceOnProperties,
211
479
  );
212
- Scenarios.Payload_Xml_ModelWithRenamedFieldsValue_get = Payload_Xml_ModelWithRenamedFields.get;
213
- Scenarios.Payload_Xml_ModelWithRenamedFieldsValue_put = Payload_Xml_ModelWithRenamedFields.put;
480
+ Scenarios.Payload_Xml_ModelWithNamespaceOnPropertiesValue_get =
481
+ Payload_Xml_ModelWithNamespaceOnProperties.get;
482
+ Scenarios.Payload_Xml_ModelWithNamespaceOnPropertiesValue_put =
483
+ Payload_Xml_ModelWithNamespaceOnProperties.put;
484
+
485
+ // §8 — Text content
486
+
487
+ const Payload_Xml_ModelWithText = createServerTests("/payload/xml/modelWithText", modelWithText);
488
+ Scenarios.Payload_Xml_ModelWithTextValue_get = Payload_Xml_ModelWithText.get;
489
+ Scenarios.Payload_Xml_ModelWithTextValue_put = Payload_Xml_ModelWithText.put;
490
+
491
+ // Additional scenarios
492
+
493
+ const Payload_Xml_ModelWithOptionalField = createServerTests(
494
+ "/payload/xml/modelWithOptionalField",
495
+ modelWithOptionalField,
496
+ );
497
+ Scenarios.Payload_Xml_ModelWithOptionalFieldValue_get = Payload_Xml_ModelWithOptionalField.get;
498
+ Scenarios.Payload_Xml_ModelWithOptionalFieldValue_put = Payload_Xml_ModelWithOptionalField.put;
214
499
 
215
500
  const Payload_Xml_ModelWithEmptyArray = createServerTests(
216
501
  "/payload/xml/modelWithEmptyArray",
@@ -219,10 +504,6 @@ const Payload_Xml_ModelWithEmptyArray = createServerTests(
219
504
  Scenarios.Payload_Xml_ModelWithEmptyArrayValue_get = Payload_Xml_ModelWithEmptyArray.get;
220
505
  Scenarios.Payload_Xml_ModelWithEmptyArrayValue_put = Payload_Xml_ModelWithEmptyArray.put;
221
506
 
222
- const Payload_Xml_ModelWithText = createServerTests("/payload/xml/modelWithText", modelWithText);
223
- Scenarios.Payload_Xml_ModelWithTextValue_get = Payload_Xml_ModelWithText.get;
224
- Scenarios.Payload_Xml_ModelWithTextValue_put = Payload_Xml_ModelWithText.put;
225
-
226
507
  const Payload_Xml_ModelWithDictionary = createServerTests(
227
508
  "/payload/xml/modelWithDictionary",
228
509
  modelWithDictionary,
@@ -236,3 +517,57 @@ const Payload_Xml_ModelWithEncodedNames = createServerTests(
236
517
  );
237
518
  Scenarios.Payload_Xml_ModelWithEncodedNamesValue_get = Payload_Xml_ModelWithEncodedNames.get;
238
519
  Scenarios.Payload_Xml_ModelWithEncodedNamesValue_put = Payload_Xml_ModelWithEncodedNames.put;
520
+
521
+ const Payload_Xml_ModelWithEnum = createServerTests("/payload/xml/modelWithEnum", modelWithEnum);
522
+ Scenarios.Payload_Xml_ModelWithEnumValue_get = Payload_Xml_ModelWithEnum.get;
523
+ Scenarios.Payload_Xml_ModelWithEnumValue_put = Payload_Xml_ModelWithEnum.put;
524
+
525
+ Scenarios.Payload_Xml_ModelWithDatetimeValue_get = passOnSuccess({
526
+ uri: "/payload/xml/modelWithDatetime",
527
+ method: "get",
528
+ request: {},
529
+ response: {
530
+ status: 200,
531
+ body: xml(modelWithDatetime),
532
+ },
533
+ kind: "MockApiDefinition",
534
+ });
535
+
536
+ Scenarios.Payload_Xml_ModelWithDatetimeValue_put = passOnSuccess({
537
+ uri: "/payload/xml/modelWithDatetime",
538
+ method: "put",
539
+ request: {
540
+ body: xml(modelWithDatetime),
541
+ },
542
+ handler: (req: MockRequest) => {
543
+ req.expect.containsHeader("content-type", "application/xml");
544
+ // Accept both "2022-08-26T18:38:00.000Z" and "2022-08-26T18:38:00Z" as equivalent UTC datetimes.
545
+ let firstError: unknown;
546
+ try {
547
+ req.expect.xmlBodyEquals(modelWithDatetime);
548
+ } catch (e) {
549
+ firstError = e;
550
+ }
551
+ if (firstError !== undefined) {
552
+ req.expect.xmlBodyEquals(modelWithDatetimeNoMs);
553
+ }
554
+ return {
555
+ status: 204,
556
+ };
557
+ },
558
+ response: {
559
+ status: 204,
560
+ },
561
+ kind: "MockApiDefinition",
562
+ });
563
+
564
+ Scenarios.Payload_Xml_XmlErrorValue_get = passOnCode(400, {
565
+ uri: "/payload/xml/error",
566
+ method: "get",
567
+ request: {},
568
+ response: {
569
+ status: 400,
570
+ body: xml(xmlError),
571
+ },
572
+ kind: "MockApiDefinition",
573
+ });
@@ -26,7 +26,7 @@ namespace Response.StatusCodeRange;
26
26
  """)
27
27
  @route("/error-response-status-code-in-range")
28
28
  @get
29
- op errorResponseStatusCodeInRange(): 204 | ErrorInRange | DefaultError;
29
+ op errorResponseStatusCodeInRange(): NoContentResponse | ErrorInRange | DefaultError;
30
30
 
31
31
  @scenario
32
32
  @scenarioDoc("""
@@ -44,7 +44,7 @@ op errorResponseStatusCodeInRange(): 204 | ErrorInRange | DefaultError;
44
44
  """)
45
45
  @route("/error-response-status-code-404")
46
46
  @get
47
- op errorResponseStatusCode404(): 204 | NotFoundError | Standard4XXError;
47
+ op errorResponseStatusCode404(): NoContentResponse | NotFoundError | Standard4XXError;
48
48
 
49
49
  @error
50
50
  model NotFoundError {
@@ -1,13 +1,11 @@
1
- import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
1
+ import { json, passOnCode, ScenarioMockApi } from "@typespec/spec-api";
2
2
 
3
3
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
4
 
5
- Scenarios.Response_StatusCodeRange_errorResponseStatusCodeInRange = passOnSuccess({
5
+ Scenarios.Response_StatusCodeRange_errorResponseStatusCodeInRange = passOnCode(494, {
6
6
  uri: "/response/status-code-range/error-response-status-code-in-range",
7
7
  method: "get",
8
- request: {
9
- status: 494,
10
- },
8
+ request: {},
11
9
  response: {
12
10
  status: 494,
13
11
  body: json({
@@ -18,12 +16,10 @@ Scenarios.Response_StatusCodeRange_errorResponseStatusCodeInRange = passOnSucces
18
16
  kind: "MockApiDefinition",
19
17
  });
20
18
 
21
- Scenarios.Response_StatusCodeRange_errorResponseStatusCode404 = passOnSuccess({
19
+ Scenarios.Response_StatusCodeRange_errorResponseStatusCode404 = passOnCode(404, {
22
20
  uri: "/response/status-code-range/error-response-status-code-404",
23
21
  method: "get",
24
- request: {
25
- status: 404,
26
- },
22
+ request: {},
27
23
  response: {
28
24
  status: 404,
29
25
  body: json({