@typespec/http-specs 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1 -0
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/assets/image.jpg +0 -0
- package/assets/image.png +0 -0
- package/dist/specs/authentication/api-key/mockapi.d.ts +3 -0
- package/dist/specs/authentication/api-key/mockapi.d.ts.map +1 -0
- package/dist/specs/authentication/api-key/mockapi.js +33 -0
- package/dist/specs/authentication/api-key/mockapi.js.map +1 -0
- package/dist/specs/authentication/http/custom/mockapi.d.ts +3 -0
- package/dist/specs/authentication/http/custom/mockapi.d.ts.map +1 -0
- package/dist/specs/authentication/http/custom/mockapi.js +33 -0
- package/dist/specs/authentication/http/custom/mockapi.js.map +1 -0
- package/dist/specs/authentication/oauth2/mockapi.d.ts +3 -0
- package/dist/specs/authentication/oauth2/mockapi.d.ts.map +1 -0
- package/dist/specs/authentication/oauth2/mockapi.js +30 -0
- package/dist/specs/authentication/oauth2/mockapi.js.map +1 -0
- package/dist/specs/authentication/union/mockapi.d.ts +3 -0
- package/dist/specs/authentication/union/mockapi.d.ts.map +1 -0
- package/dist/specs/authentication/union/mockapi.js +29 -0
- package/dist/specs/authentication/union/mockapi.js.map +1 -0
- package/dist/specs/encode/bytes/mockapi.d.ts +3 -0
- package/dist/specs/encode/bytes/mockapi.d.ts.map +1 -0
- package/dist/specs/encode/bytes/mockapi.js +167 -0
- package/dist/specs/encode/bytes/mockapi.js.map +1 -0
- package/dist/specs/encode/datetime/mockapi.d.ts +3 -0
- package/dist/specs/encode/datetime/mockapi.d.ts.map +1 -0
- package/dist/specs/encode/datetime/mockapi.js +160 -0
- package/dist/specs/encode/datetime/mockapi.js.map +1 -0
- package/dist/specs/encode/duration/mockapi.d.ts +3 -0
- package/dist/specs/encode/duration/mockapi.d.ts.map +1 -0
- package/dist/specs/encode/duration/mockapi.js +103 -0
- package/dist/specs/encode/duration/mockapi.js.map +1 -0
- package/dist/specs/encode/numeric/mockapi.d.ts +3 -0
- package/dist/specs/encode/numeric/mockapi.d.ts.map +1 -0
- package/dist/specs/encode/numeric/mockapi.js +22 -0
- package/dist/specs/encode/numeric/mockapi.js.map +1 -0
- package/dist/specs/helper.d.ts +3 -0
- package/dist/specs/helper.d.ts.map +1 -0
- package/dist/specs/helper.js +7 -0
- package/dist/specs/helper.js.map +1 -0
- package/dist/specs/parameters/basic/mockapi.d.ts +3 -0
- package/dist/specs/parameters/basic/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/basic/mockapi.js +20 -0
- package/dist/specs/parameters/basic/mockapi.js.map +1 -0
- package/dist/specs/parameters/body-optionality/mockapi.d.ts +3 -0
- package/dist/specs/parameters/body-optionality/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/body-optionality/mockapi.js +50 -0
- package/dist/specs/parameters/body-optionality/mockapi.js.map +1 -0
- package/dist/specs/parameters/collection-format/mockapi.d.ts +3 -0
- package/dist/specs/parameters/collection-format/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/collection-format/mockapi.js +76 -0
- package/dist/specs/parameters/collection-format/mockapi.js.map +1 -0
- package/dist/specs/parameters/spread/mockapi.d.ts +3 -0
- package/dist/specs/parameters/spread/mockapi.d.ts.map +1 -0
- package/dist/specs/parameters/spread/mockapi.js +155 -0
- package/dist/specs/parameters/spread/mockapi.js.map +1 -0
- package/dist/specs/payload/content-negotiation/mockapi.d.ts +3 -0
- package/dist/specs/payload/content-negotiation/mockapi.d.ts.map +1 -0
- package/dist/specs/payload/content-negotiation/mockapi.js +169 -0
- package/dist/specs/payload/content-negotiation/mockapi.js.map +1 -0
- package/dist/specs/payload/json-merge-patch/mockapi.d.ts +38 -0
- package/dist/specs/payload/json-merge-patch/mockapi.d.ts.map +1 -0
- package/dist/specs/payload/json-merge-patch/mockapi.js +90 -0
- package/dist/specs/payload/json-merge-patch/mockapi.js.map +1 -0
- package/dist/specs/payload/media-type/mockapi.d.ts +3 -0
- package/dist/specs/payload/media-type/mockapi.d.ts.map +1 -0
- package/dist/specs/payload/media-type/mockapi.js +59 -0
- package/dist/specs/payload/media-type/mockapi.js.map +1 -0
- package/dist/specs/payload/multipart/mockapi.d.ts +3 -0
- package/dist/specs/payload/multipart/mockapi.d.ts.map +1 -0
- package/dist/specs/payload/multipart/mockapi.js +323 -0
- package/dist/specs/payload/multipart/mockapi.js.map +1 -0
- package/dist/specs/payload/xml/mockapi.d.ts +15 -0
- package/dist/specs/payload/xml/mockapi.d.ts.map +1 -0
- package/dist/specs/payload/xml/mockapi.js +183 -0
- package/dist/specs/payload/xml/mockapi.js.map +1 -0
- package/dist/specs/routes/mockapi.d.ts +3 -0
- package/dist/specs/routes/mockapi.d.ts.map +1 -0
- package/dist/specs/routes/mockapi.js +94 -0
- package/dist/specs/routes/mockapi.js.map +1 -0
- package/dist/specs/serialization/encoded-name/json/mockapi.d.ts +3 -0
- package/dist/specs/serialization/encoded-name/json/mockapi.d.ts.map +1 -0
- package/dist/specs/serialization/encoded-name/json/mockapi.js +20 -0
- package/dist/specs/serialization/encoded-name/json/mockapi.js.map +1 -0
- package/dist/specs/server/endpoint/not-defined/mockapi.d.ts +3 -0
- package/dist/specs/server/endpoint/not-defined/mockapi.d.ts.map +1 -0
- package/dist/specs/server/endpoint/not-defined/mockapi.js +12 -0
- package/dist/specs/server/endpoint/not-defined/mockapi.js.map +1 -0
- package/dist/specs/server/path/multiple/mockapi.d.ts +3 -0
- package/dist/specs/server/path/multiple/mockapi.d.ts.map +1 -0
- package/dist/specs/server/path/multiple/mockapi.js +21 -0
- package/dist/specs/server/path/multiple/mockapi.js.map +1 -0
- package/dist/specs/server/path/single/mockapi.d.ts +3 -0
- package/dist/specs/server/path/single/mockapi.d.ts.map +1 -0
- package/dist/specs/server/path/single/mockapi.js +12 -0
- package/dist/specs/server/path/single/mockapi.js.map +1 -0
- package/dist/specs/server/versions/not-versioned/mockapi.d.ts +3 -0
- package/dist/specs/server/versions/not-versioned/mockapi.d.ts.map +1 -0
- package/dist/specs/server/versions/not-versioned/mockapi.js +42 -0
- package/dist/specs/server/versions/not-versioned/mockapi.js.map +1 -0
- package/dist/specs/server/versions/versioned/mockapi.d.ts +3 -0
- package/dist/specs/server/versions/versioned/mockapi.d.ts.map +1 -0
- package/dist/specs/server/versions/versioned/mockapi.js +43 -0
- package/dist/specs/server/versions/versioned/mockapi.js.map +1 -0
- package/dist/specs/special-headers/conditional-request/mockapi.d.ts +3 -0
- package/dist/specs/special-headers/conditional-request/mockapi.d.ts.map +1 -0
- package/dist/specs/special-headers/conditional-request/mockapi.js +55 -0
- package/dist/specs/special-headers/conditional-request/mockapi.js.map +1 -0
- package/dist/specs/special-headers/repeatability/mockapi.d.ts +3 -0
- package/dist/specs/special-headers/repeatability/mockapi.d.ts.map +1 -0
- package/dist/specs/special-headers/repeatability/mockapi.js +36 -0
- package/dist/specs/special-headers/repeatability/mockapi.js.map +1 -0
- package/dist/specs/special-words/dec.d.ts +22 -0
- package/dist/specs/special-words/dec.d.ts.map +1 -0
- package/dist/specs/special-words/dec.js +37 -0
- package/dist/specs/special-words/dec.js.map +1 -0
- package/dist/specs/special-words/mockapi.d.ts +3 -0
- package/dist/specs/special-words/mockapi.d.ts.map +1 -0
- package/dist/specs/special-words/mockapi.js +223 -0
- package/dist/specs/special-words/mockapi.js.map +1 -0
- package/dist/specs/type/array/mockapi.d.ts +3 -0
- package/dist/specs/type/array/mockapi.d.ts.map +1 -0
- package/dist/specs/type/array/mockapi.js +92 -0
- package/dist/specs/type/array/mockapi.js.map +1 -0
- package/dist/specs/type/dictionary/mockapi.d.ts +3 -0
- package/dist/specs/type/dictionary/mockapi.d.ts.map +1 -0
- package/dist/specs/type/dictionary/mockapi.js +91 -0
- package/dist/specs/type/dictionary/mockapi.js.map +1 -0
- package/dist/specs/type/enum/extensible/mockapi.d.ts +3 -0
- package/dist/specs/type/enum/extensible/mockapi.d.ts.map +1 -0
- package/dist/specs/type/enum/extensible/mockapi.js +39 -0
- package/dist/specs/type/enum/extensible/mockapi.js.map +1 -0
- package/dist/specs/type/enum/fixed/mockapi.d.ts +3 -0
- package/dist/specs/type/enum/fixed/mockapi.d.ts.map +1 -0
- package/dist/specs/type/enum/fixed/mockapi.js +42 -0
- package/dist/specs/type/enum/fixed/mockapi.js.map +1 -0
- package/dist/specs/type/model/empty/mockapi.d.ts +3 -0
- package/dist/specs/type/model/empty/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/empty/mockapi.js +37 -0
- package/dist/specs/type/model/empty/mockapi.js.map +1 -0
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.d.ts +3 -0
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js +69 -0
- package/dist/specs/type/model/inheritance/enum-discriminator/mockapi.js.map +1 -0
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.d.ts +3 -0
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js +127 -0
- package/dist/specs/type/model/inheritance/nested-discriminator/mockapi.js.map +1 -0
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.d.ts +3 -0
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js +37 -0
- package/dist/specs/type/model/inheritance/not-discriminated/mockapi.js.map +1 -0
- package/dist/specs/type/model/inheritance/recursive/mockapi.d.ts +3 -0
- package/dist/specs/type/model/inheritance/recursive/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/inheritance/recursive/mockapi.js +40 -0
- package/dist/specs/type/model/inheritance/recursive/mockapi.js.map +1 -0
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.d.ts +3 -0
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js +99 -0
- package/dist/specs/type/model/inheritance/single-discriminator/mockapi.js.map +1 -0
- package/dist/specs/type/model/templated/mockapi.d.ts +3 -0
- package/dist/specs/type/model/templated/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/templated/mockapi.js +63 -0
- package/dist/specs/type/model/templated/mockapi.js.map +1 -0
- package/dist/specs/type/model/usage/mockapi.d.ts +3 -0
- package/dist/specs/type/model/usage/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/usage/mockapi.js +41 -0
- package/dist/specs/type/model/usage/mockapi.js.map +1 -0
- package/dist/specs/type/model/visibility/mockapi.d.ts +3 -0
- package/dist/specs/type/model/visibility/mockapi.d.ts.map +1 -0
- package/dist/specs/type/model/visibility/mockapi.js +107 -0
- package/dist/specs/type/model/visibility/mockapi.js.map +1 -0
- package/dist/specs/type/property/additional-properties/mockapi.d.ts +3 -0
- package/dist/specs/type/property/additional-properties/mockapi.d.ts.map +1 -0
- package/dist/specs/type/property/additional-properties/mockapi.js +333 -0
- package/dist/specs/type/property/additional-properties/mockapi.js.map +1 -0
- package/dist/specs/type/property/nullable/mockapi.d.ts +3 -0
- package/dist/specs/type/property/nullable/mockapi.d.ts.map +1 -0
- package/dist/specs/type/property/nullable/mockapi.js +132 -0
- package/dist/specs/type/property/nullable/mockapi.js.map +1 -0
- package/dist/specs/type/property/optionality/mockapi.d.ts +3 -0
- package/dist/specs/type/property/optionality/mockapi.d.ts.map +1 -0
- package/dist/specs/type/property/optionality/mockapi.js +185 -0
- package/dist/specs/type/property/optionality/mockapi.js.map +1 -0
- package/dist/specs/type/property/value-types/mockapi.d.ts +3 -0
- package/dist/specs/type/property/value-types/mockapi.d.ts.map +1 -0
- package/dist/specs/type/property/value-types/mockapi.js +214 -0
- package/dist/specs/type/property/value-types/mockapi.js.map +1 -0
- package/dist/specs/type/scalar/mockapi.d.ts +3 -0
- package/dist/specs/type/scalar/mockapi.d.ts.map +1 -0
- package/dist/specs/type/scalar/mockapi.js +193 -0
- package/dist/specs/type/scalar/mockapi.js.map +1 -0
- package/dist/specs/type/union/mockapi.d.ts +3 -0
- package/dist/specs/type/union/mockapi.d.ts.map +1 -0
- package/dist/specs/type/union/mockapi.js +106 -0
- package/dist/specs/type/union/mockapi.js.map +1 -0
- package/dist/specs/versioning/added/mockapi.d.ts +3 -0
- package/dist/specs/versioning/added/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/added/mockapi.js +54 -0
- package/dist/specs/versioning/added/mockapi.js.map +1 -0
- package/dist/specs/versioning/madeOptional/mockapi.d.ts +3 -0
- package/dist/specs/versioning/madeOptional/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/madeOptional/mockapi.js +17 -0
- package/dist/specs/versioning/madeOptional/mockapi.js.map +1 -0
- package/dist/specs/versioning/removed/mockapi.d.ts +3 -0
- package/dist/specs/versioning/removed/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/removed/mockapi.js +19 -0
- package/dist/specs/versioning/removed/mockapi.js.map +1 -0
- package/dist/specs/versioning/renamedFrom/mockapi.d.ts +3 -0
- package/dist/specs/versioning/renamedFrom/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/renamedFrom/mockapi.js +38 -0
- package/dist/specs/versioning/renamedFrom/mockapi.js.map +1 -0
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.d.ts +3 -0
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js +18 -0
- package/dist/specs/versioning/returnTypeChangedFrom/mockapi.js.map +1 -0
- package/dist/specs/versioning/typeChangedFrom/mockapi.d.ts +3 -0
- package/dist/specs/versioning/typeChangedFrom/mockapi.d.ts.map +1 -0
- package/dist/specs/versioning/typeChangedFrom/mockapi.js +21 -0
- package/dist/specs/versioning/typeChangedFrom/mockapi.js.map +1 -0
- package/package.json +55 -0
- package/spec-summary.md +7463 -0
- package/specs/README.md +3 -0
- package/specs/authentication/api-key/main.tsp +40 -0
- package/specs/authentication/api-key/mockapi.ts +35 -0
- package/specs/authentication/http/custom/main.tsp +40 -0
- package/specs/authentication/http/custom/mockapi.ts +35 -0
- package/specs/authentication/oauth2/main.tsp +45 -0
- package/specs/authentication/oauth2/mockapi.ts +32 -0
- package/specs/authentication/union/main.tsp +30 -0
- package/specs/authentication/union/mockapi.ts +31 -0
- package/specs/encode/bytes/main.tsp +363 -0
- package/specs/encode/bytes/mockapi.ts +297 -0
- package/specs/encode/datetime/main.tsp +339 -0
- package/specs/encode/datetime/mockapi.ts +274 -0
- package/specs/encode/duration/main.tsp +318 -0
- package/specs/encode/duration/mockapi.ts +191 -0
- package/specs/encode/numeric/main.tsp +69 -0
- package/specs/encode/numeric/mockapi.ts +32 -0
- package/specs/helper.ts +8 -0
- package/specs/parameters/basic/main.tsp +58 -0
- package/specs/parameters/basic/mockapi.ts +25 -0
- package/specs/parameters/body-optionality/main.tsp +61 -0
- package/specs/parameters/body-optionality/mockapi.ts +59 -0
- package/specs/parameters/collection-format/main.tsp +92 -0
- package/specs/parameters/collection-format/mockapi.ts +83 -0
- package/specs/parameters/spread/main.tsp +337 -0
- package/specs/parameters/spread/mockapi.ts +165 -0
- package/specs/payload/content-negotiation/main.tsp +61 -0
- package/specs/payload/content-negotiation/mockapi.ts +188 -0
- package/specs/payload/json-merge-patch/main.tsp +184 -0
- package/specs/payload/json-merge-patch/mockapi.ts +95 -0
- package/specs/payload/media-type/main.tsp +52 -0
- package/specs/payload/media-type/mockapi.ts +63 -0
- package/specs/payload/multipart/main.tsp +500 -0
- package/specs/payload/multipart/mockapi.ts +364 -0
- package/specs/payload/xml/main.tsp +302 -0
- package/specs/payload/xml/mockapi.ts +238 -0
- package/specs/routes/main.tsp +477 -0
- package/specs/routes/mockapi.ts +175 -0
- package/specs/scratch/.gitignore +3 -0
- package/specs/serialization/encoded-name/json/main.tsp +45 -0
- package/specs/serialization/encoded-name/json/mockapi.ts +22 -0
- package/specs/server/endpoint/not-defined/main.tsp +20 -0
- package/specs/server/endpoint/not-defined/mockapi.ts +13 -0
- package/specs/server/path/multiple/main.tsp +47 -0
- package/specs/server/path/multiple/mockapi.ts +23 -0
- package/specs/server/path/single/main.tsp +24 -0
- package/specs/server/path/single/mockapi.ts +13 -0
- package/specs/server/versions/not-versioned/main.tsp +40 -0
- package/specs/server/versions/not-versioned/mockapi.ts +51 -0
- package/specs/server/versions/versioned/main.tsp +64 -0
- package/specs/server/versions/versioned/mockapi.ts +64 -0
- package/specs/special-headers/conditional-request/main.tsp +89 -0
- package/specs/special-headers/conditional-request/mockapi.ts +59 -0
- package/specs/special-headers/repeatability/main.tsp +39 -0
- package/specs/special-headers/repeatability/mockapi.ts +47 -0
- package/specs/special-words/dec.js +52 -0
- package/specs/special-words/main.tsp +234 -0
- package/specs/special-words/mockapi.ts +384 -0
- package/specs/type/array/main.tsp +108 -0
- package/specs/type/array/mockapi.ts +107 -0
- package/specs/type/dictionary/main.tsp +101 -0
- package/specs/type/dictionary/mockapi.ts +103 -0
- package/specs/type/enum/extensible/main.tsp +65 -0
- package/specs/type/enum/extensible/mockapi.ts +48 -0
- package/specs/type/enum/fixed/main.tsp +60 -0
- package/specs/type/enum/fixed/mockapi.ts +44 -0
- package/specs/type/model/empty/main.tsp +40 -0
- package/specs/type/model/empty/mockapi.ts +40 -0
- package/specs/type/model/inheritance/enum-discriminator/main.tsp +169 -0
- package/specs/type/model/inheritance/enum-discriminator/mockapi.ts +89 -0
- package/specs/type/model/inheritance/nested-discriminator/main.tsp +224 -0
- package/specs/type/model/inheritance/nested-discriminator/mockapi.ts +130 -0
- package/specs/type/model/inheritance/not-discriminated/main.tsp +54 -0
- package/specs/type/model/inheritance/not-discriminated/mockapi.ts +39 -0
- package/specs/type/model/inheritance/recursive/main.tsp +71 -0
- package/specs/type/model/inheritance/recursive/mockapi.ts +41 -0
- package/specs/type/model/inheritance/single-discriminator/main.tsp +172 -0
- package/specs/type/model/inheritance/single-discriminator/mockapi.ts +103 -0
- package/specs/type/model/templated/main.tsp +130 -0
- package/specs/type/model/templated/mockapi.ts +66 -0
- package/specs/type/model/usage/main.tsp +49 -0
- package/specs/type/model/usage/mockapi.ts +45 -0
- package/specs/type/model/visibility/main.tsp +153 -0
- package/specs/type/model/visibility/mockapi.ts +108 -0
- package/specs/type/property/additional-properties/main.tsp +549 -0
- package/specs/type/property/additional-properties/mockapi.ts +464 -0
- package/specs/type/property/nullable/main.tsp +139 -0
- package/specs/type/property/nullable/mockapi.ts +187 -0
- package/specs/type/property/optionality/main.tsp +226 -0
- package/specs/type/property/optionality/mockapi.ts +296 -0
- package/specs/type/property/value-types/main.tsp +244 -0
- package/specs/type/property/value-types/mockapi.ts +300 -0
- package/specs/type/scalar/main.tsp +136 -0
- package/specs/type/scalar/mockapi.ts +199 -0
- package/specs/type/union/main.tsp +249 -0
- package/specs/type/union/mockapi.ts +130 -0
- package/specs/versioning/added/main.tsp +136 -0
- package/specs/versioning/added/mockapi.ts +57 -0
- package/specs/versioning/madeOptional/main.tsp +65 -0
- package/specs/versioning/madeOptional/mockapi.ts +18 -0
- package/specs/versioning/removed/main.tsp +126 -0
- package/specs/versioning/removed/mockapi.ts +20 -0
- package/specs/versioning/renamedFrom/main.tsp +112 -0
- package/specs/versioning/renamedFrom/mockapi.ts +40 -0
- package/specs/versioning/returnTypeChangedFrom/main.tsp +57 -0
- package/specs/versioning/returnTypeChangedFrom/mockapi.ts +19 -0
- package/specs/versioning/typeChangedFrom/main.tsp +71 -0
- package/specs/versioning/typeChangedFrom/mockapi.ts +22 -0
- package/temp/.tsbuildinfo +1 -0
- package/tsconfig.build.json +8 -0
- package/tsconfig.json +11 -0
- package/tspconfig.yaml +2 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
|
|
4
|
+
using Http;
|
|
5
|
+
using Spector;
|
|
6
|
+
|
|
7
|
+
@doc("Projection")
|
|
8
|
+
@scenarioService("/serialization/encoded-name/json")
|
|
9
|
+
namespace Serialization.EncodedName.Json;
|
|
10
|
+
|
|
11
|
+
@route("/property")
|
|
12
|
+
namespace Property {
|
|
13
|
+
model JsonEncodedNameModel {
|
|
14
|
+
/** Pass in true */
|
|
15
|
+
@encodedName("application/json", "wireName")
|
|
16
|
+
defaultName: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@scenario
|
|
20
|
+
@scenarioDoc("""
|
|
21
|
+
Testing that you send the right JSON name on the wire.
|
|
22
|
+
Your generated SDK should generate JsonEncodedNameModel with one property `defaultName` with wire name `wireName`.
|
|
23
|
+
|
|
24
|
+
Expected request body:
|
|
25
|
+
```json
|
|
26
|
+
{"wireName": true}
|
|
27
|
+
```
|
|
28
|
+
""")
|
|
29
|
+
@post
|
|
30
|
+
op send(@bodyRoot body: JsonEncodedNameModel): NoContentResponse;
|
|
31
|
+
|
|
32
|
+
@scenario
|
|
33
|
+
@scenarioDoc("""
|
|
34
|
+
Testing that you deserialize the right json name over the wire.
|
|
35
|
+
|
|
36
|
+
Your generated SDK should generate JsonEncodedNameModel with one property `defaultName` with wire name `wireName`.
|
|
37
|
+
|
|
38
|
+
Expected response body:
|
|
39
|
+
```json
|
|
40
|
+
{"wireName": true}
|
|
41
|
+
```
|
|
42
|
+
""")
|
|
43
|
+
@get
|
|
44
|
+
op get(): JsonEncodedNameModel;
|
|
45
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { json, passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.Serialization_EncodedName_Json_Property_send = passOnSuccess({
|
|
6
|
+
uri: "/serialization/encoded-name/json/property",
|
|
7
|
+
method: "post",
|
|
8
|
+
request: { body: { wireName: true } },
|
|
9
|
+
response: { status: 204 },
|
|
10
|
+
kind: "MockApiDefinition",
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
Scenarios.Serialization_EncodedName_Json_Property_get = passOnSuccess({
|
|
14
|
+
uri: "/serialization/encoded-name/json/property",
|
|
15
|
+
method: "get",
|
|
16
|
+
request: {},
|
|
17
|
+
response: {
|
|
18
|
+
status: 200,
|
|
19
|
+
body: json({ wireName: true }),
|
|
20
|
+
},
|
|
21
|
+
kind: "MockApiDefinition",
|
|
22
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
|
|
4
|
+
using Http;
|
|
5
|
+
using Spector;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Illustrates server doesn't define endpoint. Client should automatically add an endpoint to let user pass in.
|
|
9
|
+
*/
|
|
10
|
+
@route("/server/endpoint/not-defined")
|
|
11
|
+
@service({
|
|
12
|
+
title: "Testserver without any endpoint",
|
|
13
|
+
})
|
|
14
|
+
namespace Server.Endpoint.NotDefined;
|
|
15
|
+
|
|
16
|
+
@scenario
|
|
17
|
+
@scenarioDoc("A simple operation in a server without defining a endpoint. Expected uri: '<endpoint you start cadl-ranch>/valid'")
|
|
18
|
+
@route("/valid")
|
|
19
|
+
@head
|
|
20
|
+
op valid(): OkResponse;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.Server_Endpoint_NotDefined_valid = passOnSuccess({
|
|
6
|
+
uri: "/server/endpoint/not-defined/valid",
|
|
7
|
+
method: "head",
|
|
8
|
+
request: {},
|
|
9
|
+
response: {
|
|
10
|
+
status: 200,
|
|
11
|
+
},
|
|
12
|
+
kind: "MockApiDefinition",
|
|
13
|
+
});
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import "@typespec/rest";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
import "@typespec/versioning";
|
|
4
|
+
|
|
5
|
+
using Http;
|
|
6
|
+
using Spector;
|
|
7
|
+
using TypeSpec.Versioning;
|
|
8
|
+
using TypeSpec.Rest;
|
|
9
|
+
|
|
10
|
+
@versioned(Versions)
|
|
11
|
+
@service({
|
|
12
|
+
title: "ServerPathMultiple",
|
|
13
|
+
})
|
|
14
|
+
@server(
|
|
15
|
+
"{endpoint}/server/path/multiple/{apiVersion}",
|
|
16
|
+
"Test server with path parameters.",
|
|
17
|
+
{
|
|
18
|
+
@doc("Pass in http://localhost:3000 for endpoint.")
|
|
19
|
+
endpoint: url,
|
|
20
|
+
|
|
21
|
+
@doc("Pass in v1.0 for API version.")
|
|
22
|
+
apiVersion: Versions,
|
|
23
|
+
}
|
|
24
|
+
)
|
|
25
|
+
namespace Server.Path.Multiple;
|
|
26
|
+
|
|
27
|
+
@doc("Service versions")
|
|
28
|
+
enum Versions {
|
|
29
|
+
@doc("Version 1.0")
|
|
30
|
+
v1_0: "v1.0",
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@scenario
|
|
34
|
+
@scenarioDoc("""
|
|
35
|
+
Operation with client path parameters.
|
|
36
|
+
|
|
37
|
+
Expected path parameter: apiVersion=v1.0
|
|
38
|
+
""")
|
|
39
|
+
op noOperationParams(): NoContentResponse;
|
|
40
|
+
|
|
41
|
+
@scenario
|
|
42
|
+
@scenarioDoc("""
|
|
43
|
+
Operation with client and method path parameters.
|
|
44
|
+
|
|
45
|
+
Expected path parameter: apiVersion=v1.0, keyword=test
|
|
46
|
+
""")
|
|
47
|
+
op withOperationPathParam(@path keyword: string): NoContentResponse;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.Server_Path_Multiple_noOperationParams = passOnSuccess({
|
|
6
|
+
uri: "/server/path/multiple/v1.0",
|
|
7
|
+
method: "get",
|
|
8
|
+
request: {},
|
|
9
|
+
response: {
|
|
10
|
+
status: 204,
|
|
11
|
+
},
|
|
12
|
+
kind: "MockApiDefinition",
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
Scenarios.Server_Path_Multiple_withOperationPathParam = passOnSuccess({
|
|
16
|
+
uri: "/server/path/multiple/v1.0/test",
|
|
17
|
+
method: "get",
|
|
18
|
+
request: {},
|
|
19
|
+
response: {
|
|
20
|
+
status: 204,
|
|
21
|
+
},
|
|
22
|
+
kind: "MockApiDefinition",
|
|
23
|
+
});
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
|
|
4
|
+
using Http;
|
|
5
|
+
using Spector;
|
|
6
|
+
|
|
7
|
+
@doc("Illustrates server with a single path parameter @server")
|
|
8
|
+
@service
|
|
9
|
+
@server(
|
|
10
|
+
"{endpoint}",
|
|
11
|
+
"Testserver endpoint",
|
|
12
|
+
{
|
|
13
|
+
@doc("Need to be set as 'http://localhost:3000' in client.")
|
|
14
|
+
endpoint: url,
|
|
15
|
+
}
|
|
16
|
+
)
|
|
17
|
+
@route("/server/path/single")
|
|
18
|
+
namespace Server.Path.Single;
|
|
19
|
+
|
|
20
|
+
@scenario
|
|
21
|
+
@scenarioDoc("An simple operation in a parameterized server.")
|
|
22
|
+
@route("/myOp")
|
|
23
|
+
@head
|
|
24
|
+
op myOp(): OkResponse;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.Server_Path_Single_myOp = passOnSuccess({
|
|
6
|
+
uri: "/server/path/single/myOp",
|
|
7
|
+
method: "head",
|
|
8
|
+
request: {},
|
|
9
|
+
response: {
|
|
10
|
+
status: 200,
|
|
11
|
+
},
|
|
12
|
+
kind: "MockApiDefinition",
|
|
13
|
+
});
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
|
|
4
|
+
using Http;
|
|
5
|
+
using Spector;
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Illustrates not-versioned server.
|
|
9
|
+
*/
|
|
10
|
+
@service
|
|
11
|
+
@server(
|
|
12
|
+
"{endpoint}",
|
|
13
|
+
"Testserver endpoint",
|
|
14
|
+
{
|
|
15
|
+
/**
|
|
16
|
+
* Need to be set as 'http://localhost:3000' in client.
|
|
17
|
+
*/
|
|
18
|
+
endpoint: url,
|
|
19
|
+
}
|
|
20
|
+
)
|
|
21
|
+
@route("/server/versions/not-versioned")
|
|
22
|
+
namespace Server.Versions.NotVersioned;
|
|
23
|
+
|
|
24
|
+
@scenario
|
|
25
|
+
@scenarioDoc("A simple operation without api-version. Expected url: '/without-api-version', it should not contain any api-version.")
|
|
26
|
+
@route("/without-api-version")
|
|
27
|
+
@head
|
|
28
|
+
op withoutApiVersion(): OkResponse;
|
|
29
|
+
|
|
30
|
+
@scenario
|
|
31
|
+
@scenarioDoc("A simple operation with query api-version, which doesn't have any default value. Expected url: '/with-query-api-version?api-version=v1.0'.")
|
|
32
|
+
@route("/with-query-api-version")
|
|
33
|
+
@head
|
|
34
|
+
op withQueryApiVersion(@query("api-version") apiVersion: string): OkResponse;
|
|
35
|
+
|
|
36
|
+
@scenario
|
|
37
|
+
@scenarioDoc("A simple operation with path api-version, which doesn't have any default value. Expected url: '/with-path-api-version/v1.0'.")
|
|
38
|
+
@route("/with-path-api-version")
|
|
39
|
+
@head
|
|
40
|
+
op withPathApiVersion(@path apiVersion: string): OkResponse;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { MockRequest, passOnSuccess, ScenarioMockApi, ValidationError } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
function createServerTests(uri: string, requestData?: any) {
|
|
6
|
+
let requestObject: any;
|
|
7
|
+
if (requestData) {
|
|
8
|
+
requestObject = requestData;
|
|
9
|
+
} else {
|
|
10
|
+
requestObject = {};
|
|
11
|
+
}
|
|
12
|
+
return passOnSuccess({
|
|
13
|
+
uri,
|
|
14
|
+
method: "head",
|
|
15
|
+
request: requestObject,
|
|
16
|
+
response: {
|
|
17
|
+
status: 200,
|
|
18
|
+
},
|
|
19
|
+
handler: (req: MockRequest) => {
|
|
20
|
+
if (Object.keys(req.query).length > 0) {
|
|
21
|
+
throw new ValidationError(
|
|
22
|
+
"Expected no query parameters including api-version",
|
|
23
|
+
"No query parameters",
|
|
24
|
+
req.query,
|
|
25
|
+
);
|
|
26
|
+
}
|
|
27
|
+
return { status: 200 };
|
|
28
|
+
},
|
|
29
|
+
kind: "MockApiDefinition",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
Scenarios.Server_Versions_NotVersioned_withoutApiVersion = createServerTests(
|
|
34
|
+
"/server/versions/not-versioned/without-api-version",
|
|
35
|
+
);
|
|
36
|
+
Scenarios.Server_Versions_NotVersioned_withPathApiVersion = createServerTests(
|
|
37
|
+
"/server/versions/not-versioned/with-path-api-version/v1.0",
|
|
38
|
+
);
|
|
39
|
+
Scenarios.Server_Versions_NotVersioned_withQueryApiVersion = passOnSuccess({
|
|
40
|
+
uri: "/server/versions/not-versioned/with-query-api-version",
|
|
41
|
+
method: "head",
|
|
42
|
+
request: {
|
|
43
|
+
params: {
|
|
44
|
+
"api-version": "v1.0",
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
response: {
|
|
48
|
+
status: 200,
|
|
49
|
+
},
|
|
50
|
+
kind: "MockApiDefinition",
|
|
51
|
+
});
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/spector";
|
|
3
|
+
import "@typespec/versioning";
|
|
4
|
+
|
|
5
|
+
using Http;
|
|
6
|
+
using Spector;
|
|
7
|
+
using TypeSpec.Versioning;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Illustrates versioned server.
|
|
11
|
+
*/
|
|
12
|
+
@service
|
|
13
|
+
@versioned(Versions)
|
|
14
|
+
@server(
|
|
15
|
+
"{endpoint}",
|
|
16
|
+
"Testserver endpoint",
|
|
17
|
+
{
|
|
18
|
+
/**
|
|
19
|
+
* Need to be set as 'http://localhost:3000' in client.
|
|
20
|
+
*/
|
|
21
|
+
endpoint: url,
|
|
22
|
+
}
|
|
23
|
+
)
|
|
24
|
+
@route("/server/versions/versioned")
|
|
25
|
+
namespace Server.Versions.Versioned;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* The version of the API.
|
|
29
|
+
*/
|
|
30
|
+
enum Versions {
|
|
31
|
+
/**
|
|
32
|
+
* The version 2022-12-01-preview.
|
|
33
|
+
*/
|
|
34
|
+
v2021_01_01_preview: "2021-01-01-preview",
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* The version 2022-12-01-preview.
|
|
38
|
+
*/
|
|
39
|
+
v2022_12_01_preview: "2022-12-01-preview",
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@scenario
|
|
43
|
+
@scenarioDoc("A simple operation without api-version. Expected url: '/without-api-version', it should not contain any api-version.")
|
|
44
|
+
@route("/without-api-version")
|
|
45
|
+
@head
|
|
46
|
+
op withoutApiVersion(): OkResponse;
|
|
47
|
+
|
|
48
|
+
@scenario
|
|
49
|
+
@scenarioDoc("A simple operation with query api-version, whose default value is defined as '2022-12-01-preview'. Expected url: '/with-query-api-version?api-version=2022-12-01-preview'.")
|
|
50
|
+
@route("/with-query-api-version")
|
|
51
|
+
@head
|
|
52
|
+
op withQueryApiVersion(@query("api-version") apiVersion: string): OkResponse;
|
|
53
|
+
|
|
54
|
+
@scenario
|
|
55
|
+
@scenarioDoc("A simple operation with path api-version, whose default value is defined as '2022-12-01-preview'. Expected url: '/with-path-api-version/2022-12-01-preview'.")
|
|
56
|
+
@route("/with-path-api-version")
|
|
57
|
+
@head
|
|
58
|
+
op withPathApiVersion(@path apiVersion: string): OkResponse;
|
|
59
|
+
|
|
60
|
+
@scenario
|
|
61
|
+
@scenarioDoc("A simple operation with query api-version, that do NOT use the default but '2021-01-01-preview'. It's expected to be set at the client level. Expected url: '/with-old-query-api-version?api-version=2021-01-01-preview'.")
|
|
62
|
+
@route("/with-query-old-api-version")
|
|
63
|
+
@head
|
|
64
|
+
op withQueryOldApiVersion(@query("api-version") apiVersion: string): OkResponse;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { MockRequest, passOnSuccess, ScenarioMockApi, ValidationError } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
function createServerTests(uri: string) {
|
|
6
|
+
return passOnSuccess({
|
|
7
|
+
uri,
|
|
8
|
+
method: "head",
|
|
9
|
+
request: {},
|
|
10
|
+
response: {
|
|
11
|
+
status: 200,
|
|
12
|
+
},
|
|
13
|
+
handler: (req: MockRequest) => {
|
|
14
|
+
if (Object.keys(req.query).length > 0) {
|
|
15
|
+
throw new ValidationError(
|
|
16
|
+
"Expected no query parameters including api-version",
|
|
17
|
+
"No query parameters",
|
|
18
|
+
req.query,
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
return { status: 200 };
|
|
22
|
+
},
|
|
23
|
+
kind: "MockApiDefinition",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
Scenarios.Server_Versions_Versioned_withoutApiVersion = createServerTests(
|
|
28
|
+
"/server/versions/versioned/without-api-version",
|
|
29
|
+
);
|
|
30
|
+
Scenarios.Server_Versions_Versioned_withPathApiVersion = createServerTests(
|
|
31
|
+
"/server/versions/versioned/with-path-api-version/2022-12-01-preview",
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
function createAPIVersionTests(uri: string, requestData: any, serverData: string) {
|
|
35
|
+
return passOnSuccess({
|
|
36
|
+
uri,
|
|
37
|
+
method: "head",
|
|
38
|
+
request: requestData,
|
|
39
|
+
response: {
|
|
40
|
+
status: 200,
|
|
41
|
+
},
|
|
42
|
+
kind: "MockApiDefinition",
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
Scenarios.Server_Versions_Versioned_withQueryOldApiVersion = createAPIVersionTests(
|
|
47
|
+
"/server/versions/versioned/with-query-old-api-version",
|
|
48
|
+
{
|
|
49
|
+
params: {
|
|
50
|
+
"api-version": "2021-01-01-preview",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
"2021-01-01-preview",
|
|
54
|
+
);
|
|
55
|
+
|
|
56
|
+
Scenarios.Server_Versions_Versioned_withQueryApiVersion = createAPIVersionTests(
|
|
57
|
+
"/server/versions/versioned/with-query-api-version",
|
|
58
|
+
{
|
|
59
|
+
params: {
|
|
60
|
+
"api-version": "2022-12-01-preview",
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
"2022-12-01-preview",
|
|
64
|
+
);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/versioning";
|
|
3
|
+
import "@typespec/spector";
|
|
4
|
+
|
|
5
|
+
using Http;
|
|
6
|
+
using Spector;
|
|
7
|
+
using TypeSpec.Versioning;
|
|
8
|
+
|
|
9
|
+
@doc("Illustrates conditional request headers")
|
|
10
|
+
@scenarioService("/special-headers/conditional-request")
|
|
11
|
+
namespace SpecialHeaders.ConditionalRequest;
|
|
12
|
+
|
|
13
|
+
@scenario
|
|
14
|
+
@doc("""
|
|
15
|
+
Check when only If-Match in header is defined.
|
|
16
|
+
""")
|
|
17
|
+
@scenarioDoc("""
|
|
18
|
+
Check when only If-Match in header is defined.
|
|
19
|
+
Expected header parameters:
|
|
20
|
+
- if-match="valid"
|
|
21
|
+
""")
|
|
22
|
+
@post
|
|
23
|
+
@route("/if-match")
|
|
24
|
+
op postIfMatch(
|
|
25
|
+
@header("If-Match")
|
|
26
|
+
@doc("The request should only proceed if an entity matches this string.")
|
|
27
|
+
ifMatch?: string,
|
|
28
|
+
): NoContentResponse;
|
|
29
|
+
|
|
30
|
+
@scenario
|
|
31
|
+
@doc("""
|
|
32
|
+
Check when only If-None-Match in header is defined.
|
|
33
|
+
""")
|
|
34
|
+
@scenarioDoc("""
|
|
35
|
+
Check when only If-None-Match in header is defined.
|
|
36
|
+
Expected header parameters:
|
|
37
|
+
- if-nonematch="invalid"
|
|
38
|
+
""")
|
|
39
|
+
@post
|
|
40
|
+
@route("/if-none-match")
|
|
41
|
+
op postIfNoneMatch(
|
|
42
|
+
@header("If-None-Match")
|
|
43
|
+
@doc("The request should only proceed if no entity matches this string.")
|
|
44
|
+
ifNoneMatch?: string,
|
|
45
|
+
): NoContentResponse;
|
|
46
|
+
|
|
47
|
+
@scenario
|
|
48
|
+
@doc("""
|
|
49
|
+
Check when only If-Modified-Since in header is defined.
|
|
50
|
+
""")
|
|
51
|
+
@scenarioDoc("""
|
|
52
|
+
Check when only If-Modified-Since in header is defined.
|
|
53
|
+
Expected header parameters:
|
|
54
|
+
- if-modified-since=Fri, 26 Aug 2022 14:38:00 GMT
|
|
55
|
+
""")
|
|
56
|
+
@head
|
|
57
|
+
@route("/if-modified-since")
|
|
58
|
+
op headIfModifiedSince(
|
|
59
|
+
@doc("""
|
|
60
|
+
A timestamp indicating the last modified time of the resource known to the
|
|
61
|
+
client. The operation will be performed only if the resource on the service has
|
|
62
|
+
been modified since the specified time.
|
|
63
|
+
""")
|
|
64
|
+
@header("If-Modified-Since")
|
|
65
|
+
@encode(DateTimeKnownEncoding.rfc7231)
|
|
66
|
+
ifModifiedSince?: utcDateTime,
|
|
67
|
+
): NoContentResponse;
|
|
68
|
+
|
|
69
|
+
@scenario
|
|
70
|
+
@doc("""
|
|
71
|
+
Check when only If-Unmodified-Since in header is defined.
|
|
72
|
+
""")
|
|
73
|
+
@scenarioDoc("""
|
|
74
|
+
Check when only If-Unmodified-Since in header is defined.
|
|
75
|
+
Expected header parameters:
|
|
76
|
+
- if-unmodified-since=Fri, 26 Aug 2022 14:38:00 GMT
|
|
77
|
+
""")
|
|
78
|
+
@post
|
|
79
|
+
@route("/if-unmodified-since")
|
|
80
|
+
op postIfUnmodifiedSince(
|
|
81
|
+
@doc("""
|
|
82
|
+
A timestamp indicating the last modified time of the resource known to the
|
|
83
|
+
client. The operation will be performed only if the resource on the service has
|
|
84
|
+
not been modified since the specified time.
|
|
85
|
+
""")
|
|
86
|
+
@header("If-Unmodified-Since")
|
|
87
|
+
@encode(DateTimeKnownEncoding.rfc7231)
|
|
88
|
+
ifUnmodifiedSince?: utcDateTime,
|
|
89
|
+
): NoContentResponse;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { passOnSuccess, ScenarioMockApi } from "@typespec/spec-api";
|
|
2
|
+
|
|
3
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
4
|
+
|
|
5
|
+
Scenarios.SpecialHeaders_ConditionalRequest_postIfUnmodifiedSince = passOnSuccess({
|
|
6
|
+
uri: "/special-headers/conditional-request/if-unmodified-since",
|
|
7
|
+
method: "post",
|
|
8
|
+
request: {
|
|
9
|
+
headers: {
|
|
10
|
+
"if-unmodified-since": "Fri, 26 Aug 2022 14:38:00 GMT",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
response: {
|
|
14
|
+
status: 204,
|
|
15
|
+
},
|
|
16
|
+
kind: "MockApiDefinition",
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
Scenarios.SpecialHeaders_ConditionalRequest_headIfModifiedSince = passOnSuccess({
|
|
20
|
+
uri: "/special-headers/conditional-request/if-modified-since",
|
|
21
|
+
method: "head",
|
|
22
|
+
request: {
|
|
23
|
+
headers: {
|
|
24
|
+
"if-modified-since": "Fri, 26 Aug 2022 14:38:00 GMT",
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
response: {
|
|
28
|
+
status: 204,
|
|
29
|
+
},
|
|
30
|
+
kind: "MockApiDefinition",
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
Scenarios.SpecialHeaders_ConditionalRequest_postIfMatch = passOnSuccess({
|
|
34
|
+
uri: "/special-headers/conditional-request/if-match",
|
|
35
|
+
method: "post",
|
|
36
|
+
request: {
|
|
37
|
+
headers: {
|
|
38
|
+
"if-match": '"valid"',
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
response: {
|
|
42
|
+
status: 204,
|
|
43
|
+
},
|
|
44
|
+
kind: "MockApiDefinition",
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
Scenarios.SpecialHeaders_ConditionalRequest_postIfNoneMatch = passOnSuccess({
|
|
48
|
+
uri: "/special-headers/conditional-request/if-none-match",
|
|
49
|
+
method: "post",
|
|
50
|
+
request: {
|
|
51
|
+
headers: {
|
|
52
|
+
"if-none-match": '"invalid"',
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
response: {
|
|
56
|
+
status: 204,
|
|
57
|
+
},
|
|
58
|
+
kind: "MockApiDefinition",
|
|
59
|
+
});
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import "@typespec/http";
|
|
2
|
+
import "@typespec/versioning";
|
|
3
|
+
import "@typespec/spector";
|
|
4
|
+
|
|
5
|
+
using Http;
|
|
6
|
+
using Spector;
|
|
7
|
+
using TypeSpec.Versioning;
|
|
8
|
+
|
|
9
|
+
@doc("Illustrates OASIS repeatability headers")
|
|
10
|
+
@scenarioService("/special-headers/repeatability")
|
|
11
|
+
namespace SpecialHeaders.Repeatability;
|
|
12
|
+
|
|
13
|
+
model RepeatableResponse {
|
|
14
|
+
@doc("The status code.")
|
|
15
|
+
@statusCode
|
|
16
|
+
statusCode: 204;
|
|
17
|
+
|
|
18
|
+
@visibility("read")
|
|
19
|
+
@header("Repeatability-Result")
|
|
20
|
+
@doc("Indicates whether the repeatable request was accepted or rejected.")
|
|
21
|
+
repeatabilityResult?: "accepted" | "rejected";
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@scenario
|
|
25
|
+
@scenarioDoc("""
|
|
26
|
+
Check we recognize Repeatability-Request-ID and Repeatability-First-Sent.
|
|
27
|
+
""")
|
|
28
|
+
@doc("""
|
|
29
|
+
Check we recognize Repeatability-Request-ID and Repeatability-First-Sent.
|
|
30
|
+
""")
|
|
31
|
+
@post
|
|
32
|
+
@route("/immediateSuccess")
|
|
33
|
+
op immediateSuccess(
|
|
34
|
+
@header("Repeatability-Request-ID")
|
|
35
|
+
repeatabilityRequestID: string,
|
|
36
|
+
|
|
37
|
+
@header("Repeatability-First-Sent")
|
|
38
|
+
repeatabilityFirstSent: utcDateTime,
|
|
39
|
+
): RepeatableResponse;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import {
|
|
2
|
+
MockRequest,
|
|
3
|
+
passOnSuccess,
|
|
4
|
+
ScenarioMockApi,
|
|
5
|
+
validateValueFormat,
|
|
6
|
+
ValidationError,
|
|
7
|
+
} from "@typespec/spec-api";
|
|
8
|
+
|
|
9
|
+
export const Scenarios: Record<string, ScenarioMockApi> = {};
|
|
10
|
+
|
|
11
|
+
Scenarios.SpecialHeaders_Repeatability_immediateSuccess = passOnSuccess({
|
|
12
|
+
uri: "/special-headers/repeatability/immediateSuccess",
|
|
13
|
+
method: "post",
|
|
14
|
+
request: {
|
|
15
|
+
headers: {
|
|
16
|
+
"Repeatability-First-Sent": "Tue, 15 Nov 2022 12:45:26 GMT",
|
|
17
|
+
"Repeatability-Request-ID": "2378d9bc-1726-11ee-be56-0242ac120002", // fake uuid
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
response: {
|
|
21
|
+
status: 204,
|
|
22
|
+
headers: {
|
|
23
|
+
"repeatability-result": "accepted",
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
handler: (req: MockRequest) => {
|
|
27
|
+
if (!("repeatability-request-id" in req.headers)) {
|
|
28
|
+
throw new ValidationError("Repeatability-Request-ID is missing", "A UUID string", undefined);
|
|
29
|
+
}
|
|
30
|
+
if (!("repeatability-first-sent" in req.headers)) {
|
|
31
|
+
throw new ValidationError(
|
|
32
|
+
"Repeatability-First-Sent is missing",
|
|
33
|
+
"A date-time in headers format",
|
|
34
|
+
undefined,
|
|
35
|
+
);
|
|
36
|
+
}
|
|
37
|
+
validateValueFormat(req.headers["repeatability-request-id"], "uuid");
|
|
38
|
+
validateValueFormat(req.headers["repeatability-first-sent"], "rfc7231");
|
|
39
|
+
return {
|
|
40
|
+
status: 204,
|
|
41
|
+
headers: {
|
|
42
|
+
"repeatability-result": "accepted",
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
kind: "MockApiDefinition",
|
|
47
|
+
});
|