@typespec/http-specs 0.1.0-alpha.2 → 0.1.0-alpha.20

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 (186) hide show
  1. package/CHANGELOG.md +146 -0
  2. package/README.md +11 -3
  3. package/dist/specs/encode/bytes/mockapi.js +16 -24
  4. package/dist/specs/encode/bytes/mockapi.js.map +1 -1
  5. package/dist/specs/encode/datetime/mockapi.js +2 -2
  6. package/dist/specs/encode/datetime/mockapi.js.map +1 -1
  7. package/dist/specs/encode/duration/mockapi.js +2 -2
  8. package/dist/specs/encode/duration/mockapi.js.map +1 -1
  9. package/dist/specs/encode/numeric/mockapi.js +2 -2
  10. package/dist/specs/encode/numeric/mockapi.js.map +1 -1
  11. package/dist/specs/helper.d.ts +2 -2
  12. package/dist/specs/helper.d.ts.map +1 -1
  13. package/dist/specs/parameters/basic/mockapi.d.ts.map +1 -1
  14. package/dist/specs/parameters/basic/mockapi.js +3 -3
  15. package/dist/specs/parameters/basic/mockapi.js.map +1 -1
  16. package/dist/specs/parameters/body-optionality/mockapi.d.ts.map +1 -1
  17. package/dist/specs/parameters/body-optionality/mockapi.js +4 -4
  18. package/dist/specs/parameters/body-optionality/mockapi.js.map +1 -1
  19. package/dist/specs/parameters/collection-format/mockapi.js +4 -15
  20. package/dist/specs/parameters/collection-format/mockapi.js.map +1 -1
  21. package/dist/specs/parameters/path/mockapi.d.ts.map +1 -0
  22. package/dist/specs/parameters/path/mockapi.js +29 -0
  23. package/dist/specs/parameters/path/mockapi.js.map +1 -0
  24. package/dist/specs/parameters/spread/mockapi.d.ts.map +1 -1
  25. package/dist/specs/parameters/spread/mockapi.js +19 -19
  26. package/dist/specs/parameters/spread/mockapi.js.map +1 -1
  27. package/dist/specs/payload/json-merge-patch/mockapi.js +4 -4
  28. package/dist/specs/payload/json-merge-patch/mockapi.js.map +1 -1
  29. package/dist/specs/payload/media-type/mockapi.js +2 -2
  30. package/dist/specs/payload/media-type/mockapi.js.map +1 -1
  31. package/dist/specs/payload/multipart/mockapi.d.ts.map +1 -1
  32. package/dist/specs/payload/multipart/mockapi.js +42 -60
  33. package/dist/specs/payload/multipart/mockapi.js.map +1 -1
  34. package/dist/specs/payload/pageable/mockapi.d.ts +3 -0
  35. package/dist/specs/payload/pageable/mockapi.d.ts.map +1 -0
  36. package/dist/specs/payload/pageable/mockapi.js +115 -0
  37. package/dist/specs/payload/pageable/mockapi.js.map +1 -0
  38. package/dist/specs/payload/xml/mockapi.js +1 -4
  39. package/dist/specs/payload/xml/mockapi.js.map +1 -1
  40. package/dist/specs/response/status-code-range/mockapi.d.ts +3 -0
  41. package/dist/specs/response/status-code-range/mockapi.d.ts.map +1 -0
  42. package/dist/specs/response/status-code-range/mockapi.js +29 -0
  43. package/dist/specs/response/status-code-range/mockapi.js.map +1 -0
  44. package/dist/specs/routes/mockapi.js +25 -25
  45. package/dist/specs/routes/mockapi.js.map +1 -1
  46. package/dist/specs/serialization/encoded-name/json/mockapi.js +1 -1
  47. package/dist/specs/serialization/encoded-name/json/mockapi.js.map +1 -1
  48. package/dist/specs/server/versions/not-versioned/mockapi.js +1 -1
  49. package/dist/specs/server/versions/not-versioned/mockapi.js.map +1 -1
  50. package/dist/specs/server/versions/versioned/mockapi.js +8 -12
  51. package/dist/specs/server/versions/versioned/mockapi.js.map +1 -1
  52. package/dist/specs/special-words/mockapi.d.ts.map +1 -1
  53. package/dist/specs/special-words/mockapi.js +6 -6
  54. package/dist/specs/special-words/mockapi.js.map +1 -1
  55. package/dist/specs/streaming/jsonl/mockapi.d.ts +3 -0
  56. package/dist/specs/streaming/jsonl/mockapi.d.ts.map +1 -0
  57. package/dist/specs/streaming/jsonl/mockapi.js +30 -0
  58. package/dist/specs/streaming/jsonl/mockapi.js.map +1 -0
  59. package/dist/specs/type/array/mockapi.js +1 -1
  60. package/dist/specs/type/array/mockapi.js.map +1 -1
  61. package/dist/specs/type/dictionary/mockapi.js +1 -1
  62. package/dist/specs/type/dictionary/mockapi.js.map +1 -1
  63. package/dist/specs/type/enum/extensible/mockapi.js +1 -1
  64. package/dist/specs/type/enum/extensible/mockapi.js.map +1 -1
  65. package/dist/specs/type/enum/fixed/mockapi.js +2 -2
  66. package/dist/specs/type/enum/fixed/mockapi.js.map +1 -1
  67. package/dist/specs/type/model/empty/mockapi.js +2 -2
  68. package/dist/specs/type/model/empty/mockapi.js.map +1 -1
  69. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js +1 -1
  70. package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js.map +1 -1
  71. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js +2 -2
  72. package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js.map +1 -1
  73. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js +2 -2
  74. package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js.map +1 -1
  75. package/dist/specs/type/model/inheritance/recursive/mockapi.js +1 -1
  76. package/dist/specs/type/model/inheritance/recursive/mockapi.js.map +1 -1
  77. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js +2 -2
  78. package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js.map +1 -1
  79. package/dist/specs/type/model/usage/mockapi.js +4 -4
  80. package/dist/specs/type/model/usage/mockapi.js.map +1 -1
  81. package/dist/specs/type/model/visibility/mockapi.js +9 -10
  82. package/dist/specs/type/model/visibility/mockapi.js.map +1 -1
  83. package/dist/specs/type/property/additional-properties/mockapi.js +9 -6
  84. package/dist/specs/type/property/additional-properties/mockapi.js.map +1 -1
  85. package/dist/specs/type/property/nullable/mockapi.js +2 -6
  86. package/dist/specs/type/property/nullable/mockapi.js.map +1 -1
  87. package/dist/specs/type/property/optionality/mockapi.js +1 -1
  88. package/dist/specs/type/property/optionality/mockapi.js.map +1 -1
  89. package/dist/specs/type/property/value-types/mockapi.js +3 -3
  90. package/dist/specs/type/property/value-types/mockapi.js.map +1 -1
  91. package/dist/specs/type/scalar/mockapi.js +9 -9
  92. package/dist/specs/type/scalar/mockapi.js.map +1 -1
  93. package/dist/specs/type/union/mockapi.js +2 -2
  94. package/dist/specs/type/union/mockapi.js.map +1 -1
  95. package/dist/specs/versioning/added/mockapi.js +6 -6
  96. package/dist/specs/versioning/added/mockapi.js.map +1 -1
  97. package/dist/specs/versioning/madeOptional/mockapi.js +2 -2
  98. package/dist/specs/versioning/madeOptional/mockapi.js.map +1 -1
  99. package/dist/specs/versioning/removed/mockapi.js +46 -2
  100. package/dist/specs/versioning/removed/mockapi.js.map +1 -1
  101. package/dist/specs/versioning/renamedFrom/mockapi.js +5 -5
  102. package/dist/specs/versioning/renamedFrom/mockapi.js.map +1 -1
  103. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js +1 -1
  104. package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js.map +1 -1
  105. package/dist/specs/versioning/typeChangedFrom/mockapi.js +3 -3
  106. package/dist/specs/versioning/typeChangedFrom/mockapi.js.map +1 -1
  107. package/package.json +23 -17
  108. package/spec-summary.md +393 -175
  109. package/specs/encode/bytes/main.tsp +28 -20
  110. package/specs/encode/bytes/mockapi.ts +13 -31
  111. package/specs/encode/datetime/main.tsp +2 -7
  112. package/specs/encode/datetime/mockapi.ts +2 -2
  113. package/specs/encode/duration/main.tsp +2 -7
  114. package/specs/encode/duration/mockapi.ts +2 -2
  115. package/specs/encode/numeric/mockapi.ts +2 -2
  116. package/specs/parameters/basic/mockapi.ts +3 -3
  117. package/specs/parameters/body-optionality/mockapi.ts +4 -4
  118. package/specs/parameters/collection-format/main.tsp +5 -25
  119. package/specs/parameters/collection-format/mockapi.ts +4 -16
  120. package/specs/parameters/path/main.tsp +48 -0
  121. package/specs/parameters/path/mockapi.ts +34 -0
  122. package/specs/parameters/spread/mockapi.ts +19 -19
  123. package/specs/payload/json-merge-patch/main.tsp +2 -2
  124. package/specs/payload/json-merge-patch/mockapi.ts +4 -4
  125. package/specs/payload/media-type/mockapi.ts +2 -2
  126. package/specs/payload/multipart/main.tsp +34 -32
  127. package/specs/payload/multipart/mockapi.ts +42 -59
  128. package/specs/payload/pageable/main.tsp +252 -0
  129. package/specs/payload/pageable/mockapi.ts +138 -0
  130. package/specs/payload/xml/mockapi.ts +1 -4
  131. package/specs/response/status-code-range/main.tsp +82 -0
  132. package/specs/response/status-code-range/mockapi.ts +31 -0
  133. package/specs/routes/main.tsp +48 -48
  134. package/specs/routes/mockapi.ts +25 -25
  135. package/specs/serialization/encoded-name/json/main.tsp +1 -1
  136. package/specs/serialization/encoded-name/json/mockapi.ts +1 -1
  137. package/specs/server/endpoint/not-defined/main.tsp +1 -3
  138. package/specs/server/path/multiple/main.tsp +3 -5
  139. package/specs/server/versions/not-versioned/mockapi.ts +1 -1
  140. package/specs/server/versions/versioned/main.tsp +1 -1
  141. package/specs/server/versions/versioned/mockapi.ts +6 -12
  142. package/specs/special-headers/conditional-request/main.tsp +1 -1
  143. package/specs/special-headers/repeatability/main.tsp +2 -2
  144. package/specs/special-words/main.tsp +6 -6
  145. package/specs/special-words/mockapi.ts +6 -6
  146. package/specs/streaming/jsonl/main.tsp +33 -0
  147. package/specs/streaming/jsonl/mockapi.ts +32 -0
  148. package/specs/type/array/mockapi.ts +1 -1
  149. package/specs/type/dictionary/mockapi.ts +1 -1
  150. package/specs/type/enum/extensible/main.tsp +18 -2
  151. package/specs/type/enum/extensible/mockapi.ts +1 -1
  152. package/specs/type/enum/fixed/main.tsp +15 -3
  153. package/specs/type/enum/fixed/mockapi.ts +2 -2
  154. package/specs/type/model/empty/mockapi.ts +2 -2
  155. package/specs/type/model/inheritance/enum-discriminator/mockapi.ts +1 -1
  156. package/specs/type/model/inheritance/nested-discriminator/mockapi.ts +2 -2
  157. package/specs/type/model/inheritance/not-discriminated/mockapi.ts +2 -2
  158. package/specs/type/model/inheritance/recursive/mockapi.ts +1 -1
  159. package/specs/type/model/inheritance/single-discriminator/mockapi.ts +2 -2
  160. package/specs/type/model/usage/mockapi.ts +4 -4
  161. package/specs/type/model/visibility/main.tsp +17 -21
  162. package/specs/type/model/visibility/mockapi.ts +9 -10
  163. package/specs/type/property/additional-properties/main.tsp +17 -17
  164. package/specs/type/property/additional-properties/mockapi.ts +10 -10
  165. package/specs/type/property/nullable/mockapi.ts +7 -8
  166. package/specs/type/property/optionality/mockapi.ts +1 -1
  167. package/specs/type/property/value-types/mockapi.ts +3 -3
  168. package/specs/type/scalar/main.tsp +58 -9
  169. package/specs/type/scalar/mockapi.ts +9 -9
  170. package/specs/type/union/mockapi.ts +2 -2
  171. package/specs/versioning/added/mockapi.ts +6 -6
  172. package/specs/versioning/madeOptional/mockapi.ts +2 -2
  173. package/specs/versioning/removed/main.tsp +65 -3
  174. package/specs/versioning/removed/mockapi.ts +49 -2
  175. package/specs/versioning/renamedFrom/mockapi.ts +5 -5
  176. package/specs/versioning/returnTypeChangedFrom/main.tsp +17 -2
  177. package/specs/versioning/returnTypeChangedFrom/mockapi.ts +1 -1
  178. package/specs/versioning/typeChangedFrom/mockapi.ts +3 -3
  179. package/temp/.tsbuildinfo +1 -1
  180. package/tspconfig.yaml +0 -2
  181. package/dist/specs/type/model/templated/mockapi.d.ts.map +0 -1
  182. package/dist/specs/type/model/templated/mockapi.js +0 -63
  183. package/dist/specs/type/model/templated/mockapi.js.map +0 -1
  184. package/specs/type/model/templated/main.tsp +0 -130
  185. package/specs/type/model/templated/mockapi.ts +0 -66
  186. /package/dist/specs/{type/model/templated → parameters/path}/mockapi.d.ts +0 -0
@@ -59,10 +59,7 @@ namespace Query {
59
59
  value=dGVzdA, dGVzdA
60
60
  """)
61
61
  op base64urlArray(
62
- #suppress "deprecated" "Deprecated in next release"
63
- @query({
64
- format: "csv",
65
- })
62
+ @query
66
63
  value: base64urlBytes[],
67
64
  ): NoContentResponse;
68
65
  }
@@ -216,9 +213,7 @@ namespace Header {
216
213
  value=dGVzdA,dGVzdA
217
214
  """)
218
215
  op base64urlArray(
219
- @header({
220
- format: "csv",
221
- })
216
+ @header
222
217
  value: base64urlBytes[],
223
218
  ): NoContentResponse;
224
219
  }
@@ -228,9 +223,8 @@ namespace RequestBody {
228
223
  @route("/default")
229
224
  @scenario
230
225
  @scenarioDoc("""
231
- Test default encode (base64) for bytes in a json body.
232
- Expected body:
233
- "dGVzdA==" (base64 encode of test, in JSON string)
226
+ When content type is not defined and body is `bytes` the payload is a binary stream.
227
+ Stream should match packages/http-specs/assets/image.png file.
234
228
  """)
235
229
  @post
236
230
  op default(
@@ -241,8 +235,8 @@ namespace RequestBody {
241
235
  @route("/octet-stream")
242
236
  @scenario
243
237
  @scenarioDoc("""
244
- When content type is application/octet-stream and body is `bytes` the payload is a binary file.
245
- File should match packages/cadl-ranch-specs/assets/image.png
238
+ When content type is application/octet-stream and body is `bytes` the payload is a binary stream.
239
+ Stream should match packages/http-specs/assets/image.png file.
246
240
  """)
247
241
  @post
248
242
  op octetStream(
@@ -257,7 +251,7 @@ namespace RequestBody {
257
251
  @scenario
258
252
  @scenarioDoc("""
259
253
  When content type is a custom type(image/png here) and body is `bytes` the payload is a binary file.
260
- File should match packages/cadl-ranch-specs/assets/image.png
254
+ File should match packages/http-specs/assets/image.png.
261
255
  """)
262
256
  @post
263
257
  op customContentType(
@@ -277,6 +271,9 @@ namespace RequestBody {
277
271
  """)
278
272
  @post
279
273
  op base64(
274
+ @header
275
+ contentType: "application/json",
276
+
280
277
  @body
281
278
  @encode(BytesKnownEncoding.base64)
282
279
  value: bytes,
@@ -291,6 +288,9 @@ namespace RequestBody {
291
288
  """)
292
289
  @post
293
290
  op base64url(
291
+ @header
292
+ contentType: "application/json",
293
+
294
294
  @body
295
295
  @encode(BytesKnownEncoding.base64url)
296
296
  value: bytes,
@@ -302,9 +302,8 @@ namespace ResponseBody {
302
302
  @route("/default")
303
303
  @scenario
304
304
  @scenarioDoc("""
305
- Test default encode (base64) for bytes in a json body.
306
- Expected body:
307
- "dGVzdA==" (base64 encode of test, in JSON string)
305
+ When content type is not defined and body is `bytes` the payload is a binary stream.
306
+ Stream should match packages/http-specs/assets/image.png file.
308
307
  """)
309
308
  op default(): {
310
309
  @body
@@ -314,8 +313,8 @@ namespace ResponseBody {
314
313
  @route("/octet-stream")
315
314
  @scenario
316
315
  @scenarioDoc("""
317
- When content type is application/octet-stream and body is `bytes` the payload is a binary file.
318
- File should match packages/cadl-ranch-specs/assets/image.png
316
+ When content type is application/octet-stream and body is `bytes` the payload is a binary stream.
317
+ Stream should match packages/http-specs/assets/image.png file.
319
318
  """)
320
319
  op octetStream(): {
321
320
  @header
@@ -329,7 +328,7 @@ namespace ResponseBody {
329
328
  @scenario
330
329
  @scenarioDoc("""
331
330
  When content type is a custom type(image/png here) and body is `bytes` the payload is a binary file.
332
- File should match packages/cadl-ranch-specs/assets/image.png
331
+ File should match packages/http-specs/assets/image.png
333
332
  """)
334
333
  op customContentType(): {
335
334
  @header
@@ -347,6 +346,9 @@ namespace ResponseBody {
347
346
  "dGVzdA==" (base64 encode of test, in JSON string)
348
347
  """)
349
348
  op base64(): {
349
+ @header
350
+ contentType: "application/json";
351
+
350
352
  @body
351
353
  @encode(BytesKnownEncoding.base64)
352
354
  value: bytes;
@@ -359,5 +361,11 @@ namespace ResponseBody {
359
361
  Expected body:
360
362
  "dGVzdA" (base64url encode of test, in JSON string)
361
363
  """)
362
- op base64url(): base64urlBytes;
364
+ op base64url(): {
365
+ @header
366
+ contentType: "application/json";
367
+
368
+ @body
369
+ body: base64urlBytes;
370
+ };
363
371
  }
@@ -25,7 +25,7 @@ function createQueryServerTests(
25
25
  uri,
26
26
  method: "get",
27
27
  request: {
28
- params: data,
28
+ query: data,
29
29
  },
30
30
  response: {
31
31
  status: 204,
@@ -73,7 +73,7 @@ function createPropertyServerTests(uri: string, data: any, value: any) {
73
73
  uri,
74
74
  method: "post",
75
75
  request: {
76
- body: data,
76
+ body: json(data),
77
77
  },
78
78
  response: {
79
79
  status: 200,
@@ -154,23 +154,23 @@ Scenarios.Encode_Bytes_Header_base64urlArray = createHeaderServerTests(
154
154
  function createRequestBodyServerTests(
155
155
  uri: string,
156
156
  data: any,
157
- headersData: any,
158
- value: any,
159
157
  contentType: string = "application/json",
160
158
  ) {
161
159
  return passOnSuccess({
162
160
  uri,
163
161
  method: "post",
164
162
  request: {
165
- body: data,
166
- headers: headersData,
163
+ body: {
164
+ contentType: contentType,
165
+ rawContent: data,
166
+ },
167
167
  },
168
168
  response: {
169
169
  status: 204,
170
170
  },
171
171
  handler(req: MockRequest) {
172
172
  req.expect.containsHeader("content-type", contentType);
173
- req.expect.rawBodyEquals(value);
173
+ req.expect.rawBodyEquals(data);
174
174
  return {
175
175
  status: 204,
176
176
  };
@@ -180,45 +180,26 @@ function createRequestBodyServerTests(
180
180
  }
181
181
  Scenarios.Encode_Bytes_RequestBody_default = createRequestBodyServerTests(
182
182
  "/encode/bytes/body/request/default",
183
- '"dGVzdA=="',
184
- {
185
- "Content-Type": "application/json",
186
- },
187
- '"dGVzdA=="',
183
+ pngFile,
184
+ "application/octet-stream",
188
185
  );
189
186
  Scenarios.Encode_Bytes_RequestBody_base64 = createRequestBodyServerTests(
190
187
  "/encode/bytes/body/request/base64",
191
188
  '"dGVzdA=="',
192
- {
193
- "Content-Type": "application/json",
194
- },
195
- '"dGVzdA=="',
196
189
  );
197
190
  Scenarios.Encode_Bytes_RequestBody_base64url = createRequestBodyServerTests(
198
191
  "/encode/bytes/body/request/base64url",
199
192
  '"dGVzdA"',
200
- {
201
- "Content-Type": "application/json",
202
- },
203
- '"dGVzdA"',
204
193
  );
205
194
 
206
195
  Scenarios.Encode_Bytes_RequestBody_customContentType = createRequestBodyServerTests(
207
196
  "/encode/bytes/body/request/custom-content-type",
208
197
  pngFile,
209
- {
210
- "Content-Type": "image/png",
211
- },
212
- pngFile,
213
198
  "image/png",
214
199
  );
215
200
  Scenarios.Encode_Bytes_RequestBody_octetStream = createRequestBodyServerTests(
216
201
  "/encode/bytes/body/request/octet-stream",
217
202
  pngFile,
218
- {
219
- "Content-Type": "application/octet-stream",
220
- },
221
- pngFile,
222
203
  "application/octet-stream",
223
204
  );
224
205
  function createResponseBodyServerTests(
@@ -255,11 +236,12 @@ function createResponseBodyServerTests(
255
236
  }
256
237
  Scenarios.Encode_Bytes_ResponseBody_default = createResponseBodyServerTests(
257
238
  "/encode/bytes/body/response/default",
258
- JSON.stringify("dGVzdA=="),
239
+ pngFile,
259
240
  {
260
- "Content-Type": "application/json",
241
+ "Content-Type": "application/octet-stream",
261
242
  },
262
- JSON.stringify("dGVzdA=="),
243
+ pngFile,
244
+ "application/octet-stream",
263
245
  );
264
246
  Scenarios.Encode_Bytes_ResponseBody_base64 = createResponseBodyServerTests(
265
247
  "/encode/bytes/body/response/base64",
@@ -72,10 +72,7 @@ namespace Query {
72
72
  value=1686566864, 1686734256
73
73
  """)
74
74
  op unixTimestampArray(
75
- #suppress "deprecated" "Deprecated in next release"
76
- @query({
77
- format: "csv",
78
- })
75
+ @query
79
76
  value: unixTimestampDatetime[],
80
77
  ): NoContentResponse;
81
78
  }
@@ -269,9 +266,7 @@ namespace Header {
269
266
  value=1686566864,1686734256
270
267
  """)
271
268
  op unixTimestampArray(
272
- @header({
273
- format: "csv",
274
- })
269
+ @header
275
270
  value: unixTimestampDatetime[],
276
271
  ): NoContentResponse;
277
272
  }
@@ -21,7 +21,7 @@ function createQueryServerTests(
21
21
  uri,
22
22
  method: "get",
23
23
  request: {
24
- params: paramData,
24
+ query: paramData,
25
25
  },
26
26
  response: {
27
27
  status: 204,
@@ -93,7 +93,7 @@ function createPropertyServerTests(
93
93
  uri,
94
94
  method: "post",
95
95
  request: {
96
- body: data,
96
+ body: json(data),
97
97
  },
98
98
  response: {
99
99
  status: 200,
@@ -79,10 +79,7 @@ namespace Query {
79
79
  Expected query parameter `input=36,47`
80
80
  """)
81
81
  op int32SecondsArray(
82
- #suppress "deprecated" "Deprecated in next release"
83
- @query({
84
- format: "csv",
85
- })
82
+ @query
86
83
  input: Int32Duration[],
87
84
  ): NoContentResponse;
88
85
  }
@@ -274,9 +271,7 @@ namespace Header {
274
271
  Expected header `duration: [P40D,P50D]`
275
272
  """)
276
273
  op iso8601Array(
277
- @header({
278
- format: "csv",
279
- })
274
+ @header
280
275
  duration: Iso8601Duration[],
281
276
  ): NoContentResponse;
282
277
 
@@ -13,7 +13,7 @@ function createBodyServerTests(uri: string, data: any, value: any) {
13
13
  uri,
14
14
  method: "post",
15
15
  request: {
16
- body: data,
16
+ body: json(data),
17
17
  },
18
18
  response: {
19
19
  status: 200,
@@ -75,7 +75,7 @@ function createQueryServerTests(
75
75
  uri,
76
76
  method: "get",
77
77
  request: {
78
- params: paramData,
78
+ query: paramData,
79
79
  },
80
80
  response: {
81
81
  status: 204,
@@ -7,9 +7,9 @@ function createTests(uri: string, value: any) {
7
7
  uri,
8
8
  method: "post",
9
9
  request: {
10
- body: {
10
+ body: json({
11
11
  value,
12
- },
12
+ }),
13
13
  },
14
14
  response: {
15
15
  status: 200,
@@ -1,4 +1,4 @@
1
- import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
1
+ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
2
2
 
3
3
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
4
  function createServerTests(uri: string) {
@@ -6,9 +6,9 @@ function createServerTests(uri: string) {
6
6
  uri,
7
7
  method: "put",
8
8
  request: {
9
- body: {
9
+ body: json({
10
10
  name: "foo",
11
- },
11
+ }),
12
12
  },
13
13
  response: {
14
14
  status: 204,
@@ -1,4 +1,4 @@
1
- import { MockRequest, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
1
+ import { json, MockRequest, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
2
2
 
3
3
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
4
  function createServerTests(uri: string, data: any) {
@@ -6,7 +6,7 @@ function createServerTests(uri: string, data: any) {
6
6
  uri,
7
7
  method: "post",
8
8
  request: {
9
- body: data,
9
+ body: json(data),
10
10
  },
11
11
  response: {
12
12
  status: 204,
@@ -27,9 +27,9 @@ Scenarios.Parameters_BodyOptionality_OptionalExplicit = passOnSuccess([
27
27
  uri: "/parameters/body-optionality/optional-explicit/set",
28
28
  method: "post",
29
29
  request: {
30
- body: {
30
+ body: json({
31
31
  name: "foo",
32
- },
32
+ }),
33
33
  },
34
34
  response: {
35
35
  status: 204,
@@ -27,25 +27,9 @@ namespace Query {
27
27
  """)
28
28
  @route("/ssv")
29
29
  op ssv(
30
- #suppress "deprecated" "Deprecated in next release"
31
30
  @doc("Possible values for colors are [blue,red,green]")
32
- @query({
33
- format: "ssv",
34
- })
35
- colors: string[],
36
- ): NoContentResponse;
37
-
38
- @scenario
39
- @scenarioDoc("""
40
- This test is testing sending a tsv collection format array query parameters
41
- """)
42
- @route("/tsv")
43
- op tsv(
44
- #suppress "deprecated" "Deprecated in next release"
45
- @doc("Possible values for colors are [blue,red,green]")
46
- @query({
47
- format: "tsv",
48
- })
31
+ @query
32
+ @encode(ArrayEncoding.spaceDelimited)
49
33
  colors: string[],
50
34
  ): NoContentResponse;
51
35
 
@@ -55,11 +39,9 @@ namespace Query {
55
39
  """)
56
40
  @route("/pipes")
57
41
  op pipes(
58
- #suppress "deprecated" "Deprecated in next release"
59
42
  @doc("Possible values for colors are [blue,red,green]")
60
- @query({
61
- format: "pipes",
62
- })
43
+ @query
44
+ @encode(ArrayEncoding.pipeDelimited)
63
45
  colors: string[],
64
46
  ): NoContentResponse;
65
47
 
@@ -84,9 +66,7 @@ namespace Header {
84
66
  @route("/csv")
85
67
  op csv(
86
68
  @doc("Possible values for colors are [blue,red,green]")
87
- @header({
88
- format: "csv",
89
- })
69
+ @header
90
70
  colors: string[],
91
71
  ): NoContentResponse;
92
72
  }
@@ -8,7 +8,7 @@ Scenarios.Parameters_CollectionFormat_Query_multi = passOnSuccess({
8
8
  uri: `/parameters/collection-format/query/multi`,
9
9
  method: "get",
10
10
  request: {
11
- params: { colors: ["blue", "red", "green"] },
11
+ query: { colors: ["blue", "red", "green"] },
12
12
  },
13
13
  response: {
14
14
  status: 204,
@@ -26,7 +26,7 @@ Scenarios.Parameters_CollectionFormat_Query_csv = passOnSuccess({
26
26
  uri: `/parameters/collection-format/query/csv`,
27
27
  method: "get",
28
28
  request: {
29
- params: { colors: colors.join(",") },
29
+ query: { colors: colors.join(",") },
30
30
  },
31
31
  response: {
32
32
  status: 204,
@@ -38,19 +38,7 @@ Scenarios.Parameters_CollectionFormat_Query_ssv = passOnSuccess({
38
38
  uri: `/parameters/collection-format/query/ssv`,
39
39
  method: "get",
40
40
  request: {
41
- params: { colors: colors.join(" ") },
42
- },
43
- response: {
44
- status: 204,
45
- },
46
- kind: "MockApiDefinition",
47
- });
48
-
49
- Scenarios.Parameters_CollectionFormat_Query_tsv = passOnSuccess({
50
- uri: `/parameters/collection-format/query/tsv`,
51
- method: "get",
52
- request: {
53
- params: { colors: colors.join("\t") },
41
+ query: { colors: colors.join(" ") },
54
42
  },
55
43
  response: {
56
44
  status: 204,
@@ -62,7 +50,7 @@ Scenarios.Parameters_CollectionFormat_Query_pipes = passOnSuccess({
62
50
  uri: `/parameters/collection-format/query/pipes`,
63
51
  method: "get",
64
52
  request: {
65
- params: { colors: colors.join("|") },
53
+ query: { colors: colors.join("|") },
66
54
  },
67
55
  response: {
68
56
  status: 204,
@@ -0,0 +1,48 @@
1
+ import "@typespec/http";
2
+ import "@typespec/spector";
3
+
4
+ using Http;
5
+ using Spector;
6
+
7
+ @doc("Test for path parameters cases.")
8
+ @scenarioService("/parameters/path")
9
+ namespace Parameters.Path;
10
+
11
+ @scenario
12
+ @scenarioDoc("""
13
+ Test case for normal path parameter.
14
+
15
+ Should generate an operation like below:
16
+ ```
17
+ normal(name: string)
18
+ ```
19
+
20
+ Expected request path:
21
+ ```
22
+ /normal/foo
23
+ ```
24
+ """)
25
+ @route("/normal/{name}")
26
+ op normal(@path name: string): NoContentResponse;
27
+
28
+ @scenario
29
+ @scenarioDoc("""
30
+ Test case for optional path parameter.
31
+
32
+ Should generate an operation like below:
33
+ ```
34
+ optional(name?: string)
35
+ ```
36
+
37
+ Expected two request:
38
+ First request path:
39
+ ```
40
+ /optional
41
+ ```
42
+ Second request path:
43
+ ```
44
+ /optional/foo
45
+ ```
46
+ """)
47
+ @route("/optional{/name}")
48
+ op optional(@path name?: string): NoContentResponse;
@@ -0,0 +1,34 @@
1
+ import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
2
+
3
+ export const Scenarios: Record<string, ScenarioMockApi> = {};
4
+
5
+ Scenarios.Parameters_Path_normal = passOnSuccess({
6
+ uri: "/parameters/path/normal/foo",
7
+ method: "get",
8
+
9
+ response: {
10
+ status: 204,
11
+ },
12
+ kind: "MockApiDefinition",
13
+ });
14
+
15
+ Scenarios.Parameters_Path_optional = passOnSuccess([
16
+ {
17
+ uri: "/parameters/path/optional",
18
+ method: "get",
19
+
20
+ response: {
21
+ status: 204,
22
+ },
23
+ kind: "MockApiDefinition",
24
+ },
25
+ {
26
+ uri: "/parameters/path/optional/foo",
27
+ method: "get",
28
+
29
+ response: {
30
+ status: 204,
31
+ },
32
+ kind: "MockApiDefinition",
33
+ },
34
+ ]);
@@ -1,4 +1,4 @@
1
- import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
1
+ import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
2
2
 
3
3
  export const Scenarios: Record<string, ScenarioMockApi> = {};
4
4
 
@@ -6,9 +6,9 @@ Scenarios.Parameters_Spread_Model_spreadAsRequestBody = passOnSuccess({
6
6
  uri: `/parameters/spread/model/request-body`,
7
7
  method: "put",
8
8
  request: {
9
- body: {
9
+ body: json({
10
10
  name: "foo",
11
- },
11
+ }),
12
12
  },
13
13
  response: {
14
14
  status: 204,
@@ -20,9 +20,9 @@ Scenarios.Parameters_Spread_Model_spreadCompositeRequestOnlyWithBody = passOnSuc
20
20
  uri: `/parameters/spread/model/composite-request-only-with-body`,
21
21
  method: "put",
22
22
  request: {
23
- body: {
23
+ body: json({
24
24
  name: "foo",
25
- },
25
+ }),
26
26
  },
27
27
  response: {
28
28
  status: 204,
@@ -48,9 +48,9 @@ Scenarios.Parameters_Spread_Model_spreadCompositeRequest = passOnSuccess({
48
48
  uri: `/parameters/spread/model/composite-request/foo`,
49
49
  method: "put",
50
50
  request: {
51
- body: {
51
+ body: json({
52
52
  name: "foo",
53
- },
53
+ }),
54
54
  headers: {
55
55
  "test-header": "bar",
56
56
  },
@@ -65,9 +65,9 @@ Scenarios.Parameters_Spread_Model_spreadCompositeRequestMix = passOnSuccess({
65
65
  uri: `/parameters/spread/model/composite-request-mix/foo`,
66
66
  method: "put",
67
67
  request: {
68
- body: {
68
+ body: json({
69
69
  prop: "foo",
70
- },
70
+ }),
71
71
  headers: {
72
72
  "test-header": "bar",
73
73
  },
@@ -82,9 +82,9 @@ Scenarios.Parameters_Spread_Alias_spreadAsRequestBody = passOnSuccess({
82
82
  uri: `/parameters/spread/alias/request-body`,
83
83
  method: "put",
84
84
  request: {
85
- body: {
85
+ body: json({
86
86
  name: "foo",
87
- },
87
+ }),
88
88
  },
89
89
  response: {
90
90
  status: 204,
@@ -96,9 +96,9 @@ Scenarios.Parameters_Spread_Alias_spreadAsRequestParameter = passOnSuccess({
96
96
  uri: `/parameters/spread/alias/request-parameter/1`,
97
97
  method: "put",
98
98
  request: {
99
- body: {
99
+ body: json({
100
100
  name: "foo",
101
- },
101
+ }),
102
102
  headers: {
103
103
  "x-ms-test-header": "bar",
104
104
  },
@@ -113,12 +113,12 @@ Scenarios.Parameters_Spread_Alias_spreadWithMultipleParameters = passOnSuccess({
113
113
  uri: `/parameters/spread/alias/multiple-parameters/1`,
114
114
  method: "put",
115
115
  request: {
116
- body: {
116
+ body: json({
117
117
  requiredString: "foo",
118
118
  optionalInt: 1,
119
119
  requiredIntList: [1, 2],
120
120
  optionalStringList: ["foo", "bar"],
121
- },
121
+ }),
122
122
  headers: {
123
123
  "x-ms-test-header": "bar",
124
124
  },
@@ -133,9 +133,9 @@ Scenarios.Parameters_Spread_Alias_spreadParameterWithInnerModel = passOnSuccess(
133
133
  uri: `/parameters/spread/alias/inner-model-parameter/1`,
134
134
  method: "post",
135
135
  request: {
136
- body: {
136
+ body: json({
137
137
  name: "foo",
138
- },
138
+ }),
139
139
  headers: {
140
140
  "x-ms-test-header": "bar",
141
141
  },
@@ -150,10 +150,10 @@ Scenarios.Parameters_Spread_Alias_spreadParameterWithInnerAlias = passOnSuccess(
150
150
  uri: `/parameters/spread/alias/inner-alias-parameter/1`,
151
151
  method: "post",
152
152
  request: {
153
- body: {
153
+ body: json({
154
154
  name: "foo",
155
155
  age: 1,
156
- },
156
+ }),
157
157
  headers: {
158
158
  "x-ms-test-header": "bar",
159
159
  },