@tsed/schema 8.0.0 → 8.0.2

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 (291) hide show
  1. package/package.json +11 -10
  2. package/src/components/async-api/channelsMapper.ts +81 -0
  3. package/src/components/async-api/generate.ts +24 -0
  4. package/src/components/async-api/messageMapper.ts +62 -0
  5. package/src/components/async-api/payloadMapper.ts +61 -0
  6. package/src/components/async-api/responseMapper.ts +70 -0
  7. package/src/components/default/anyMapper.spec.ts +7 -0
  8. package/src/components/default/anyMapper.ts +33 -0
  9. package/src/components/default/classMapper.ts +55 -0
  10. package/src/components/default/discriminatorMappingMapper.ts +36 -0
  11. package/src/components/default/enumsMapper.spec.ts +64 -0
  12. package/src/components/default/enumsMapper.ts +17 -0
  13. package/src/components/default/genericsMapper.ts +70 -0
  14. package/src/components/default/inheritedClassMapper.ts +24 -0
  15. package/src/components/default/itemMapper.ts +8 -0
  16. package/src/components/default/lazyRefMapper.ts +21 -0
  17. package/src/components/default/mapMapper.ts +25 -0
  18. package/src/components/default/nullableMapper.ts +55 -0
  19. package/src/components/default/objectMapper.ts +36 -0
  20. package/src/components/default/ofMapper.ts +16 -0
  21. package/src/components/default/propertiesMapper.ts +25 -0
  22. package/src/components/default/requiredMapper.ts +69 -0
  23. package/src/components/default/schemaMapper.ts +151 -0
  24. package/src/components/index.ts +36 -0
  25. package/src/components/open-spec/discriminatorMappingMapper.ts +7 -0
  26. package/src/components/open-spec/enumsMapper.ts +20 -0
  27. package/src/components/open-spec/generate.ts +29 -0
  28. package/src/components/open-spec/nullableMapper.ts +51 -0
  29. package/src/components/open-spec/operationInFilesMapper.ts +32 -0
  30. package/src/components/open-spec/operationInParameterMapper.ts +56 -0
  31. package/src/components/open-spec/operationInParametersMapper.ts +9 -0
  32. package/src/components/open-spec/operationInQueryMapper.ts +74 -0
  33. package/src/components/open-spec/operationMapper.ts +65 -0
  34. package/src/components/open-spec/operationMediaMapper.ts +11 -0
  35. package/src/components/open-spec/operationRequestBodyMapper.ts +82 -0
  36. package/src/components/open-spec/operationResponseMapper.ts +26 -0
  37. package/src/components/open-spec/pathsMapper.ts +132 -0
  38. package/src/constants/OperationVerbs.ts +29 -0
  39. package/src/constants/httpStatusMessages.ts +21 -0
  40. package/src/constants/jsonSchemaProperties.ts +17 -0
  41. package/src/decorators/class/children.ts +22 -0
  42. package/src/decorators/class/discriminatorValue.ts +53 -0
  43. package/src/decorators/collections/collectionContains.ts +25 -0
  44. package/src/decorators/collections/collectionOf.spec.ts +327 -0
  45. package/src/decorators/collections/collectionOf.ts +182 -0
  46. package/src/decorators/collections/maxItems.spec.ts +40 -0
  47. package/src/decorators/collections/maxItems.ts +59 -0
  48. package/src/decorators/collections/maxProperties.spec.ts +109 -0
  49. package/src/decorators/collections/maxProperties.ts +82 -0
  50. package/src/decorators/collections/minItems.spec.ts +40 -0
  51. package/src/decorators/collections/minItems.ts +63 -0
  52. package/src/decorators/collections/minProperties.spec.ts +109 -0
  53. package/src/decorators/collections/minProperties.ts +81 -0
  54. package/src/decorators/collections/uniqueItems.spec.ts +28 -0
  55. package/src/decorators/collections/uniqueItems.ts +59 -0
  56. package/src/decorators/common/__snapshots__/groups.spec.ts.snap +321 -0
  57. package/src/decorators/common/additionalProperties.spec.ts +133 -0
  58. package/src/decorators/common/additionalProperties.ts +17 -0
  59. package/src/decorators/common/allOf.spec.ts +276 -0
  60. package/src/decorators/common/allOf.ts +19 -0
  61. package/src/decorators/common/allow.spec.ts +130 -0
  62. package/src/decorators/common/allow.ts +50 -0
  63. package/src/decorators/common/any.spec.ts +109 -0
  64. package/src/decorators/common/any.ts +45 -0
  65. package/src/decorators/common/anyOf.spec.ts +270 -0
  66. package/src/decorators/common/anyOf.ts +23 -0
  67. package/src/decorators/common/const.spec.ts +98 -0
  68. package/src/decorators/common/const.ts +68 -0
  69. package/src/decorators/common/customKey.spec.ts +105 -0
  70. package/src/decorators/common/customKey.ts +39 -0
  71. package/src/decorators/common/default.spec.ts +25 -0
  72. package/src/decorators/common/default.ts +47 -0
  73. package/src/decorators/common/defaultMsg.spec.ts +22 -0
  74. package/src/decorators/common/defaultMsg.ts +38 -0
  75. package/src/decorators/common/description.spec.ts +166 -0
  76. package/src/decorators/common/description.ts +77 -0
  77. package/src/decorators/common/discriminatorKey.ts +14 -0
  78. package/src/decorators/common/enum.spec.ts +305 -0
  79. package/src/decorators/common/enum.ts +111 -0
  80. package/src/decorators/common/errorMsg.spec.ts +57 -0
  81. package/src/decorators/common/errorMsg.ts +14 -0
  82. package/src/decorators/common/example.spec.ts +93 -0
  83. package/src/decorators/common/example.ts +18 -0
  84. package/src/decorators/common/examples.spec.ts +101 -0
  85. package/src/decorators/common/examples.ts +20 -0
  86. package/src/decorators/common/exclusiveMaximum.spec.ts +47 -0
  87. package/src/decorators/common/exclusiveMaximum.ts +75 -0
  88. package/src/decorators/common/exclusiveMinimum.spec.ts +47 -0
  89. package/src/decorators/common/exclusiveMinimum.ts +75 -0
  90. package/src/decorators/common/format.spec.ts +149 -0
  91. package/src/decorators/common/format.ts +486 -0
  92. package/src/decorators/common/forwardGroups.spec.ts +270 -0
  93. package/src/decorators/common/forwardGroups.ts +16 -0
  94. package/src/decorators/common/groups.spec.ts +968 -0
  95. package/src/decorators/common/groups.ts +66 -0
  96. package/src/decorators/common/hidden.spec.ts +52 -0
  97. package/src/decorators/common/hidden.ts +36 -0
  98. package/src/decorators/common/ignore.spec.ts +88 -0
  99. package/src/decorators/common/ignore.ts +66 -0
  100. package/src/decorators/common/integer.spec.ts +110 -0
  101. package/src/decorators/common/integer.ts +69 -0
  102. package/src/decorators/common/jsonEntityFn.spec.ts +16 -0
  103. package/src/decorators/common/jsonEntityFn.ts +33 -0
  104. package/src/decorators/common/maxLength.spec.ts +61 -0
  105. package/src/decorators/common/maxLength.ts +88 -0
  106. package/src/decorators/common/maximum.spec.ts +73 -0
  107. package/src/decorators/common/maximum.ts +146 -0
  108. package/src/decorators/common/minLength.spec.ts +186 -0
  109. package/src/decorators/common/minLength.ts +89 -0
  110. package/src/decorators/common/minimum.spec.ts +74 -0
  111. package/src/decorators/common/minimum.ts +145 -0
  112. package/src/decorators/common/multipleOf.spec.ts +33 -0
  113. package/src/decorators/common/multipleOf.ts +80 -0
  114. package/src/decorators/common/name.spec.ts +56 -0
  115. package/src/decorators/common/name.ts +50 -0
  116. package/src/decorators/common/nullable.spec.ts +818 -0
  117. package/src/decorators/common/nullable.ts +32 -0
  118. package/src/decorators/common/oneOf.spec.ts +301 -0
  119. package/src/decorators/common/oneOf.ts +24 -0
  120. package/src/decorators/common/optional.spec.ts +43 -0
  121. package/src/decorators/common/optional.ts +26 -0
  122. package/src/decorators/common/pattern.spec.ts +27 -0
  123. package/src/decorators/common/pattern.ts +102 -0
  124. package/src/decorators/common/property.ts +24 -0
  125. package/src/decorators/common/readOnly.spec.ts +135 -0
  126. package/src/decorators/common/readOnly.ts +17 -0
  127. package/src/decorators/common/recordOf.spec.ts +41 -0
  128. package/src/decorators/common/recordOf.ts +59 -0
  129. package/src/decorators/common/required.spec.ts +188 -0
  130. package/src/decorators/common/required.ts +50 -0
  131. package/src/decorators/common/requiredGroups.spec.ts +127 -0
  132. package/src/decorators/common/requiredGroups.ts +23 -0
  133. package/src/decorators/common/schema.spec.ts +23 -0
  134. package/src/decorators/common/schema.ts +64 -0
  135. package/src/decorators/common/title.spec.ts +20 -0
  136. package/src/decorators/common/title.ts +45 -0
  137. package/src/decorators/common/typeError.spec.ts +22 -0
  138. package/src/decorators/common/typeError.ts +15 -0
  139. package/src/decorators/common/writeOnly.spec.ts +105 -0
  140. package/src/decorators/common/writeOnly.ts +17 -0
  141. package/src/decorators/config/jsonEntityComponent.ts +16 -0
  142. package/src/decorators/generics/genericOf.spec.ts +246 -0
  143. package/src/decorators/generics/genericOf.ts +112 -0
  144. package/src/decorators/generics/generics.ts +22 -0
  145. package/src/decorators/operations/acceptMime.spec.ts +39 -0
  146. package/src/decorators/operations/acceptMime.ts +25 -0
  147. package/src/decorators/operations/consumes.spec.ts +89 -0
  148. package/src/decorators/operations/consumes.ts +37 -0
  149. package/src/decorators/operations/contentType.spec.ts +40 -0
  150. package/src/decorators/operations/contentType.ts +24 -0
  151. package/src/decorators/operations/deprecated.spec.ts +223 -0
  152. package/src/decorators/operations/deprecated.ts +49 -0
  153. package/src/decorators/operations/header.spec.ts +214 -0
  154. package/src/decorators/operations/header.ts +62 -0
  155. package/src/decorators/operations/in.spec.ts +321 -0
  156. package/src/decorators/operations/in.ts +141 -0
  157. package/src/decorators/operations/inFile.spec.ts +209 -0
  158. package/src/decorators/operations/inFile.ts +55 -0
  159. package/src/decorators/operations/location.spec.ts +51 -0
  160. package/src/decorators/operations/location.ts +26 -0
  161. package/src/decorators/operations/operation.ts +119 -0
  162. package/src/decorators/operations/operationId.spec.ts +43 -0
  163. package/src/decorators/operations/operationId.ts +22 -0
  164. package/src/decorators/operations/operationPath.spec.ts +42 -0
  165. package/src/decorators/operations/operationPath.ts +33 -0
  166. package/src/decorators/operations/partial.spec.ts +249 -0
  167. package/src/decorators/operations/partial.ts +14 -0
  168. package/src/decorators/operations/path.spec.ts +47 -0
  169. package/src/decorators/operations/path.ts +27 -0
  170. package/src/decorators/operations/produces.spec.ts +89 -0
  171. package/src/decorators/operations/produces.ts +44 -0
  172. package/src/decorators/operations/publish.spec.ts +26 -0
  173. package/src/decorators/operations/publish.ts +6 -0
  174. package/src/decorators/operations/redirect.spec.ts +146 -0
  175. package/src/decorators/operations/redirect.ts +82 -0
  176. package/src/decorators/operations/returns.spec.ts +1393 -0
  177. package/src/decorators/operations/returns.ts +662 -0
  178. package/src/decorators/operations/route.spec.ts +211 -0
  179. package/src/decorators/operations/route.ts +154 -0
  180. package/src/decorators/operations/security.spec.ts +162 -0
  181. package/src/decorators/operations/security.ts +83 -0
  182. package/src/decorators/operations/status.spec.ts +582 -0
  183. package/src/decorators/operations/status.ts +130 -0
  184. package/src/decorators/operations/subscribe.spec.ts +32 -0
  185. package/src/decorators/operations/subscribe.ts +6 -0
  186. package/src/decorators/operations/summary.spec.ts +45 -0
  187. package/src/decorators/operations/summary.ts +32 -0
  188. package/src/decorators/operations/tags.spec.ts +113 -0
  189. package/src/decorators/operations/tags.ts +53 -0
  190. package/src/decorators/operations/view.spec.ts +16 -0
  191. package/src/decorators/operations/view.ts +27 -0
  192. package/src/domain/DecoratorContext.ts +116 -0
  193. package/src/domain/JsonAliasMap.ts +19 -0
  194. package/src/domain/JsonClassStore.ts +35 -0
  195. package/src/domain/JsonDiscriminator.spec.ts +65 -0
  196. package/src/domain/JsonDiscriminator.ts +52 -0
  197. package/src/domain/JsonEntityStore.spec.ts +277 -0
  198. package/src/domain/JsonEntityStore.ts +284 -0
  199. package/src/domain/JsonFormatTypes.ts +17 -0
  200. package/src/domain/JsonLazyRef.ts +21 -0
  201. package/src/domain/JsonMap.spec.ts +15 -0
  202. package/src/domain/JsonMap.ts +33 -0
  203. package/src/domain/JsonMedia.ts +24 -0
  204. package/src/domain/JsonMethodStore.spec.ts +301 -0
  205. package/src/domain/JsonMethodStore.ts +212 -0
  206. package/src/domain/JsonOperation.spec.ts +126 -0
  207. package/src/domain/JsonOperation.ts +219 -0
  208. package/src/domain/JsonOperationPathsMap.ts +16 -0
  209. package/src/domain/JsonOperationRoute.spec.ts +109 -0
  210. package/src/domain/JsonOperationRoute.ts +75 -0
  211. package/src/domain/JsonParameter.ts +70 -0
  212. package/src/domain/JsonParameterStore.spec.ts +212 -0
  213. package/src/domain/JsonParameterStore.ts +138 -0
  214. package/src/domain/JsonParameterTypes.spec.ts +12 -0
  215. package/src/domain/JsonParameterTypes.ts +20 -0
  216. package/src/domain/JsonPropertyStore.spec.ts +177 -0
  217. package/src/domain/JsonPropertyStore.ts +92 -0
  218. package/src/domain/JsonRequestBody.ts +47 -0
  219. package/src/domain/JsonResponse.spec.ts +33 -0
  220. package/src/domain/JsonResponse.ts +64 -0
  221. package/src/domain/JsonSchema.spec.ts +1470 -0
  222. package/src/domain/JsonSchema.ts +1049 -0
  223. package/src/domain/SpecTypes.ts +6 -0
  224. package/src/hooks/alterIgnore.ts +25 -0
  225. package/src/hooks/alterOneOf.ts +67 -0
  226. package/src/hooks/alterRequiredGroups.ts +12 -0
  227. package/src/index.ts +185 -0
  228. package/src/interfaces/IgnoreCallback.ts +5 -0
  229. package/src/interfaces/JsonHookContext.ts +18 -0
  230. package/src/interfaces/JsonOpenSpec.ts +7 -0
  231. package/src/interfaces/JsonSchemaOptions.ts +35 -0
  232. package/src/registries/JsonSchemaMapperContainer.ts +52 -0
  233. package/src/registries/enumRegistries.ts +3 -0
  234. package/src/utils/__snapshots__/generateSpec.spec.ts.snap +109 -0
  235. package/src/utils/buildPath.ts +8 -0
  236. package/src/utils/concatParameters.ts +12 -0
  237. package/src/utils/concatPath.spec.ts +23 -0
  238. package/src/utils/concatPath.ts +24 -0
  239. package/src/utils/defineStatusModel.ts +11 -0
  240. package/src/utils/from.spec.ts +243 -0
  241. package/src/utils/from.ts +281 -0
  242. package/src/utils/generateSpec.spec.ts +1262 -0
  243. package/src/utils/generateSpec.ts +54 -0
  244. package/src/utils/generics.ts +83 -0
  245. package/src/utils/getComputedType.spec.ts +45 -0
  246. package/src/utils/getComputedType.ts +39 -0
  247. package/src/utils/getInheritedStores.spec.ts +47 -0
  248. package/src/utils/getInheritedStores.ts +23 -0
  249. package/src/utils/getJsonEntityStore.ts +36 -0
  250. package/src/utils/getJsonPathParameters.spec.ts +126 -0
  251. package/src/utils/getJsonPathParameters.ts +97 -0
  252. package/src/utils/getJsonSchema.spec.ts +695 -0
  253. package/src/utils/getJsonSchema.ts +69 -0
  254. package/src/utils/getJsonType.spec.ts +28 -0
  255. package/src/utils/getJsonType.ts +46 -0
  256. package/src/utils/getOperationsRoutes.spec.ts +284 -0
  257. package/src/utils/getOperationsRoutes.ts +56 -0
  258. package/src/utils/getOperationsStore.spec.ts +47 -0
  259. package/src/utils/getOperationsStores.ts +37 -0
  260. package/src/utils/getPropertiesStores.spec.ts +138 -0
  261. package/src/utils/getPropertiesStores.ts +66 -0
  262. package/src/utils/getSpec.spec.ts +610 -0
  263. package/src/utils/getSpec.ts +117 -0
  264. package/src/utils/getSpecType.spec.ts +16 -0
  265. package/src/utils/getSpecType.ts +19 -0
  266. package/src/utils/isSuccessStatus.spec.ts +22 -0
  267. package/src/utils/isSuccessStatus.ts +2 -0
  268. package/src/utils/mapHeaders.spec.ts +57 -0
  269. package/src/utils/mapHeaders.ts +33 -0
  270. package/src/utils/mapOpenSpec.ts +44 -0
  271. package/src/utils/mapOpenSpec2.ts +50 -0
  272. package/src/utils/mapOpenSpec3.ts +25 -0
  273. package/src/utils/mapOpenSpecInfo.ts +19 -0
  274. package/src/utils/mapOperationOptions.ts +34 -0
  275. package/src/utils/matchGroups.spec.ts +85 -0
  276. package/src/utils/matchGroups.ts +64 -0
  277. package/src/utils/mergeSpec.spec.ts +533 -0
  278. package/src/utils/mergeSpec.ts +54 -0
  279. package/src/utils/operationIdFormatter.spec.ts +11 -0
  280. package/src/utils/operationIdFormatter.ts +49 -0
  281. package/src/utils/ref.ts +65 -0
  282. package/src/utils/removeHiddenOperation.ts +5 -0
  283. package/src/utils/serializeEnumValues.ts +27 -0
  284. package/src/utils/somethingOf.ts +11 -0
  285. package/src/utils/toJsonMapCollection.spec.ts +18 -0
  286. package/src/utils/toJsonMapCollection.ts +12 -0
  287. package/src/utils/toJsonRegex.ts +7 -0
  288. package/src/utils/transformToOS2.spec.ts +177 -0
  289. package/src/utils/transformToOS2.ts +607 -0
  290. package/src/utils/withErrorMsg.spec.ts +16 -0
  291. package/src/utils/withErrorMsg.ts +56 -0
@@ -0,0 +1,27 @@
1
+ import {DecoratorTypes, UnsupportedDecoratorType} from "@tsed/core";
2
+
3
+ import {JsonEntityFn} from "../common/jsonEntityFn.js";
4
+
5
+ /**
6
+ * Set class path to expose all endpoints
7
+ *
8
+ * ::: warning
9
+ * Don't use this decorator to change the path if you develop your application with Ts.ED.
10
+ * :::
11
+ *
12
+ * @param path
13
+ * @decorator
14
+ * @swagger
15
+ * @schema
16
+ * @classDecorator
17
+ * @operation
18
+ */
19
+ export function Path(path: string) {
20
+ return JsonEntityFn((store, args) => {
21
+ if (store.decoratorType !== DecoratorTypes.CLASS) {
22
+ throw new UnsupportedDecoratorType(Path, args);
23
+ }
24
+
25
+ store.path = path;
26
+ });
27
+ }
@@ -0,0 +1,89 @@
1
+ import {getSpec, OperationPath, Produces, SpecTypes} from "../../index.js";
2
+
3
+ describe("Produces", () => {
4
+ it("should store metadata", () => {
5
+ class MyController {
6
+ @OperationPath("POST", "/")
7
+ @Produces("text/json")
8
+ get() {}
9
+ }
10
+
11
+ expect(getSpec(MyController, {specType: SpecTypes.OPENAPI})).toEqual({
12
+ tags: [
13
+ {
14
+ name: "MyController"
15
+ }
16
+ ],
17
+ paths: {
18
+ "/": {
19
+ post: {
20
+ operationId: "myControllerGet",
21
+ parameters: [],
22
+ responses: {
23
+ "200": {
24
+ description: "Success"
25
+ }
26
+ },
27
+ tags: ["MyController"]
28
+ }
29
+ }
30
+ }
31
+ });
32
+ });
33
+ it("should store metadata (class)", () => {
34
+ @Produces("text/json")
35
+ class MyController {
36
+ @OperationPath("GET", "/")
37
+ get() {}
38
+
39
+ @OperationPath("POST", "/")
40
+ post() {}
41
+ }
42
+
43
+ expect(getSpec(MyController, {specType: SpecTypes.OPENAPI})).toEqual({
44
+ paths: {
45
+ "/": {
46
+ get: {
47
+ operationId: "myControllerGet",
48
+ parameters: [],
49
+ responses: {
50
+ "200": {
51
+ description: "Success"
52
+ }
53
+ },
54
+ tags: ["MyController"]
55
+ },
56
+ post: {
57
+ operationId: "myControllerPost",
58
+ parameters: [],
59
+ responses: {
60
+ "200": {
61
+ description: "Success"
62
+ }
63
+ },
64
+ tags: ["MyController"]
65
+ }
66
+ }
67
+ },
68
+ tags: [
69
+ {
70
+ name: "MyController"
71
+ }
72
+ ]
73
+ });
74
+ });
75
+ it("should throw error for unsupported usage", () => {
76
+ class Test {
77
+ test() {}
78
+ }
79
+
80
+ let actualError: any;
81
+ try {
82
+ Produces("text/json")(Test.prototype, "test", 0);
83
+ } catch (er) {
84
+ actualError = er;
85
+ }
86
+
87
+ expect(actualError.message).toEqual("Produces cannot be used as parameter decorator on Test.test.[0]");
88
+ });
89
+ });
@@ -0,0 +1,44 @@
1
+ import {decorateMethodsOf, DecoratorTypes, UnsupportedDecoratorType} from "@tsed/core";
2
+
3
+ import {JsonEntityFn} from "../common/jsonEntityFn.js";
4
+
5
+ /**
6
+ * Add produces metadata on the decorated element.
7
+ *
8
+ * ## Examples
9
+ * ### On method
10
+ *
11
+ * ```typescript
12
+ * class Model {
13
+ * @Produces("text/html")
14
+ * id: string;
15
+ * }
16
+ * ```
17
+ *
18
+ * ::: warning
19
+ * For openspec v3 prefer `@Returns().ContentType()` usage (see @@Returns@@).
20
+ * :::
21
+ *
22
+ * @param produces
23
+ * @decorator
24
+ * @swagger
25
+ * @methodDecorator
26
+ * @classDecorator
27
+ * @operation
28
+ * @response
29
+ */
30
+ export function Produces(...produces: string[]) {
31
+ return JsonEntityFn((store, args) => {
32
+ switch (store.decoratorType) {
33
+ case DecoratorTypes.METHOD:
34
+ store.operation!.produces(produces);
35
+ break;
36
+ case DecoratorTypes.CLASS:
37
+ decorateMethodsOf(args[0], Produces(...produces));
38
+ break;
39
+
40
+ default:
41
+ throw new UnsupportedDecoratorType(Produces, args);
42
+ }
43
+ });
44
+ }
@@ -0,0 +1,26 @@
1
+ import "../../index.js";
2
+
3
+ import {OperationVerbs} from "../../constants/OperationVerbs.js";
4
+ import {JsonEntityStore} from "../../domain/JsonEntityStore.js";
5
+ import {Publish} from "./publish.js";
6
+
7
+ describe("Publish", () => {
8
+ it("should register operation with Publish verb", () => {
9
+ // WHEN
10
+ class Test {
11
+ @Publish("event")
12
+ test() {}
13
+ }
14
+
15
+ const endpoint = JsonEntityStore.fromMethod(Test, "test");
16
+
17
+ // THEN
18
+ expect([...endpoint.operation!.operationPaths.values()]).toEqual([
19
+ {
20
+ method: OperationVerbs.PUBLISH,
21
+ path: "event"
22
+ }
23
+ ]);
24
+ expect(endpoint.propertyKey).toBe("test");
25
+ });
26
+ });
@@ -0,0 +1,6 @@
1
+ import {OperationVerbs} from "../../constants/OperationVerbs.js";
2
+ import {Operation} from "./operation.js";
3
+
4
+ export function Publish(event: string) {
5
+ return Operation(OperationVerbs.PUBLISH, event);
6
+ }
@@ -0,0 +1,146 @@
1
+ import {getSpec, OperationPath, SpecTypes} from "../../index.js";
2
+ import {Redirect} from "./redirect.js";
3
+
4
+ describe("Redirect", () => {
5
+ it("should set header with path only", () => {
6
+ class MyController {
7
+ @Redirect("/path/to")
8
+ @OperationPath("GET", "/")
9
+ test() {}
10
+ }
11
+
12
+ const spec = getSpec(MyController, {specType: SpecTypes.OPENAPI});
13
+
14
+ expect(spec).toEqual({
15
+ paths: {
16
+ "/": {
17
+ get: {
18
+ operationId: "myControllerTest",
19
+ parameters: [],
20
+ responses: {
21
+ "302": {
22
+ content: {
23
+ "*/*": {
24
+ schema: {
25
+ type: "object"
26
+ }
27
+ }
28
+ },
29
+ description: "Found",
30
+ headers: {
31
+ Location: {
32
+ example: "/path/to",
33
+ schema: {
34
+ type: "string"
35
+ }
36
+ }
37
+ }
38
+ }
39
+ },
40
+ tags: ["MyController"]
41
+ }
42
+ }
43
+ },
44
+ tags: [
45
+ {
46
+ name: "MyController"
47
+ }
48
+ ]
49
+ });
50
+ });
51
+ it("should set header with path and status", () => {
52
+ class MyController {
53
+ @Redirect(301, "/path/to")
54
+ @OperationPath("GET", "/")
55
+ test() {}
56
+ }
57
+
58
+ const spec = getSpec(MyController, {specType: SpecTypes.OPENAPI});
59
+
60
+ expect(spec).toEqual({
61
+ paths: {
62
+ "/": {
63
+ get: {
64
+ operationId: "myControllerTest",
65
+ parameters: [],
66
+ responses: {
67
+ "301": {
68
+ content: {
69
+ "*/*": {
70
+ schema: {
71
+ type: "object"
72
+ }
73
+ }
74
+ },
75
+ description: "Moved Permanently",
76
+ headers: {
77
+ Location: {
78
+ example: "/path/to",
79
+ schema: {
80
+ type: "string"
81
+ }
82
+ }
83
+ }
84
+ }
85
+ },
86
+ tags: ["MyController"]
87
+ }
88
+ }
89
+ },
90
+ tags: [
91
+ {
92
+ name: "MyController"
93
+ }
94
+ ]
95
+ });
96
+ });
97
+ it("should set header with path and status and meta", () => {
98
+ class MyController {
99
+ @Redirect(301, "/path/to", {
100
+ description: "Test description"
101
+ })
102
+ @OperationPath("GET", "/")
103
+ test() {}
104
+ }
105
+
106
+ const spec = getSpec(MyController, {specType: SpecTypes.OPENAPI});
107
+
108
+ expect(spec).toEqual({
109
+ paths: {
110
+ "/": {
111
+ get: {
112
+ operationId: "myControllerTest",
113
+ parameters: [],
114
+ responses: {
115
+ "301": {
116
+ content: {
117
+ "*/*": {
118
+ schema: {
119
+ type: "object"
120
+ }
121
+ }
122
+ },
123
+ description: "Moved Permanently",
124
+ headers: {
125
+ Location: {
126
+ description: "Test description",
127
+ example: "/path/to",
128
+ schema: {
129
+ type: "string"
130
+ }
131
+ }
132
+ }
133
+ }
134
+ },
135
+ tags: ["MyController"]
136
+ }
137
+ }
138
+ },
139
+ tags: [
140
+ {
141
+ name: "MyController"
142
+ }
143
+ ]
144
+ });
145
+ });
146
+ });
@@ -0,0 +1,82 @@
1
+ import {isNumber, isString, useDecorators} from "@tsed/core";
2
+
3
+ import {JsonHeader} from "../../interfaces/JsonOpenSpec.js";
4
+ import {JsonEntityFn} from "../common/jsonEntityFn.js";
5
+ import {Returns} from "./returns.js";
6
+
7
+ /**
8
+ * Redirects to the URL derived from the specified path, with specified status, a positive integer that corresponds to an HTTP status code . If not specified, status defaults to “302 “Found”.
9
+ *
10
+ * ```typescript
11
+ * @Redirect('/foo/bar')
12
+ * @Redirect(301, 'http://example.com').Type(Model)
13
+ * private myMethod() {}
14
+ * ```
15
+ * Redirects can be a fully-qualified URL for redirecting to a different site:
16
+ *
17
+ * ```typescript
18
+ * @Redirect('http://google.com');
19
+ * private myMethod() {}
20
+ * ```
21
+ *
22
+ * Redirects can be relative to the root of the host name. For example, if the application is on http://example.com/admin/post/new, the following would redirect to the URL http://example.com/admin:
23
+ *
24
+ * ```typescript
25
+ * @Redirect('/admin');
26
+ * ```
27
+ * Redirects can be relative to the current URL. For example, from http://example.com/blog/admin/ (notice the trailing slash), the following would redirect to the URL http://example.com/blog/admin/post/new.
28
+ *
29
+ * ```typescript
30
+ * @Redirect('post/new');
31
+ * ```
32
+ *
33
+ * Redirecting to post/new from http://example.com/blog/admin (no trailing slash), will redirect to http://example.com/blog/post/new.
34
+ *
35
+ * If you found the above behavior confusing, think of path segments as directories (with trailing slashes) and files, it will start to make sense.
36
+ *
37
+ * Path-relative redirects are also possible. If you were on http://example.com/admin/post/new, the following would redirect to http//example.com/admin/post:
38
+ *
39
+ * ```typescript
40
+ * @Redirect('..');
41
+ * ``
42
+ *
43
+ * A back redirection redirects the request back to the referer, defaulting to / when the referer is missing.
44
+ *
45
+ * ```typescript
46
+ * @Redirect('back');
47
+ * ```
48
+ *
49
+ * @param url
50
+ * @param meta
51
+ * @decorator
52
+ * @operation
53
+ * @response
54
+ * @headers
55
+ */
56
+ export function Redirect(url: string, meta?: JsonHeader): Function;
57
+ export function Redirect(status: number, url: string, meta?: JsonHeader): Function;
58
+ export function Redirect(...args: any[]): Function {
59
+ const {status, url, meta} = args.reduce(
60
+ (options: any, value: any) => {
61
+ if (isNumber(value)) {
62
+ options.status = value;
63
+ return options;
64
+ }
65
+
66
+ if (isString(value)) {
67
+ options.url = value;
68
+ return options;
69
+ }
70
+
71
+ options.meta = value;
72
+ return options;
73
+ },
74
+ {status: 302, url: "", meta: {}}
75
+ );
76
+ return useDecorators(
77
+ Returns(status).Location(url, meta),
78
+ JsonEntityFn((entity) => {
79
+ entity.operation?.setRedirection(status);
80
+ })
81
+ );
82
+ }