@cinnabun/core 0.0.1 → 0.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 (260) hide show
  1. package/dist/__tests__/autowired.test.d.ts +1 -0
  2. package/dist/__tests__/autowired.test.js +109 -0
  3. package/dist/__tests__/autowired.test.js.map +1 -0
  4. package/dist/__tests__/cinnabun-application.test.d.ts +1 -0
  5. package/dist/__tests__/cinnabun-application.test.js +96 -0
  6. package/dist/__tests__/cinnabun-application.test.js.map +1 -0
  7. package/dist/__tests__/cinnabun-factory.test.d.ts +1 -0
  8. package/dist/__tests__/cinnabun-factory.test.js +269 -0
  9. package/dist/__tests__/cinnabun-factory.test.js.map +1 -0
  10. package/dist/__tests__/circular-dependency.test.d.ts +1 -0
  11. package/dist/__tests__/circular-dependency.test.js +318 -0
  12. package/dist/__tests__/circular-dependency.test.js.map +1 -0
  13. package/dist/__tests__/compression.test.d.ts +1 -0
  14. package/dist/__tests__/compression.test.js +459 -0
  15. package/dist/__tests__/compression.test.js.map +1 -0
  16. package/dist/__tests__/config.test.d.ts +1 -0
  17. package/dist/__tests__/config.test.js +86 -0
  18. package/dist/__tests__/config.test.js.map +1 -0
  19. package/dist/__tests__/cors.test.d.ts +1 -0
  20. package/dist/__tests__/cors.test.js +575 -0
  21. package/dist/__tests__/cors.test.js.map +1 -0
  22. package/dist/__tests__/env-config.test.d.ts +1 -0
  23. package/dist/__tests__/env-config.test.js +367 -0
  24. package/dist/__tests__/env-config.test.js.map +1 -0
  25. package/dist/__tests__/exception.test.d.ts +1 -0
  26. package/dist/__tests__/exception.test.js +207 -0
  27. package/dist/__tests__/exception.test.js.map +1 -0
  28. package/dist/__tests__/guards-interceptors.test.d.ts +1 -0
  29. package/dist/__tests__/guards-interceptors.test.js +660 -0
  30. package/dist/__tests__/guards-interceptors.test.js.map +1 -0
  31. package/dist/__tests__/health-check.test.d.ts +1 -0
  32. package/dist/__tests__/health-check.test.js +240 -0
  33. package/dist/__tests__/health-check.test.js.map +1 -0
  34. package/dist/__tests__/http.test.d.ts +1 -0
  35. package/dist/__tests__/http.test.js +629 -0
  36. package/dist/__tests__/http.test.js.map +1 -0
  37. package/dist/__tests__/integration/e2e.test.d.ts +1 -0
  38. package/dist/__tests__/integration/e2e.test.js +192 -0
  39. package/dist/__tests__/integration/e2e.test.js.map +1 -0
  40. package/dist/__tests__/integration/performance.bench.d.ts +1 -0
  41. package/dist/__tests__/integration/performance.bench.js +129 -0
  42. package/dist/__tests__/integration/performance.bench.js.map +1 -0
  43. package/dist/__tests__/integration/validation.test.d.ts +1 -0
  44. package/dist/__tests__/integration/validation.test.js +133 -0
  45. package/dist/__tests__/integration/validation.test.js.map +1 -0
  46. package/dist/__tests__/lifecycle-management.test.d.ts +1 -0
  47. package/dist/__tests__/lifecycle-management.test.js +688 -0
  48. package/dist/__tests__/lifecycle-management.test.js.map +1 -0
  49. package/dist/__tests__/lifecycle.test.d.ts +1 -0
  50. package/dist/__tests__/lifecycle.test.js +196 -0
  51. package/dist/__tests__/lifecycle.test.js.map +1 -0
  52. package/dist/__tests__/logger.test.d.ts +1 -0
  53. package/dist/__tests__/logger.test.js +109 -0
  54. package/dist/__tests__/logger.test.js.map +1 -0
  55. package/dist/__tests__/middleware.test.d.ts +1 -0
  56. package/dist/__tests__/middleware.test.js +329 -0
  57. package/dist/__tests__/middleware.test.js.map +1 -0
  58. package/dist/__tests__/module.test.d.ts +1 -0
  59. package/dist/__tests__/module.test.js +280 -0
  60. package/dist/__tests__/module.test.js.map +1 -0
  61. package/dist/__tests__/plugin.test.d.ts +1 -0
  62. package/dist/__tests__/plugin.test.js +283 -0
  63. package/dist/__tests__/plugin.test.js.map +1 -0
  64. package/dist/__tests__/request-logger.test.d.ts +1 -0
  65. package/dist/__tests__/request-logger.test.js +342 -0
  66. package/dist/__tests__/request-logger.test.js.map +1 -0
  67. package/dist/__tests__/request-mapping.test.d.ts +1 -0
  68. package/dist/__tests__/request-mapping.test.js +201 -0
  69. package/dist/__tests__/request-mapping.test.js.map +1 -0
  70. package/dist/__tests__/routes.test.d.ts +1 -0
  71. package/dist/__tests__/routes.test.js +119 -0
  72. package/dist/__tests__/routes.test.js.map +1 -0
  73. package/dist/__tests__/scan-fixtures/controllers/hello.controller.d.ts +4 -0
  74. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js +28 -0
  75. package/dist/__tests__/scan-fixtures/controllers/hello.controller.js.map +1 -0
  76. package/dist/__tests__/scan-fixtures/modules/feature.module.d.ts +6 -0
  77. package/dist/__tests__/scan-fixtures/modules/feature.module.js +28 -0
  78. package/dist/__tests__/scan-fixtures/modules/feature.module.js.map +1 -0
  79. package/dist/__tests__/scan-fixtures/services/greeting.service.d.ts +4 -0
  80. package/dist/__tests__/scan-fixtures/services/greeting.service.js +18 -0
  81. package/dist/__tests__/scan-fixtures/services/greeting.service.js.map +1 -0
  82. package/dist/__tests__/scanner.test.d.ts +1 -0
  83. package/dist/__tests__/scanner.test.js +49 -0
  84. package/dist/__tests__/scanner.test.js.map +1 -0
  85. package/dist/__tests__/validation.test.d.ts +1 -0
  86. package/dist/__tests__/validation.test.js +561 -0
  87. package/dist/__tests__/validation.test.js.map +1 -0
  88. package/dist/__tests__/websocket-auth.test.d.ts +1 -0
  89. package/dist/__tests__/websocket-auth.test.js +431 -0
  90. package/dist/__tests__/websocket-auth.test.js.map +1 -0
  91. package/dist/__tests__/websocket-decorators.test.d.ts +1 -0
  92. package/dist/__tests__/websocket-decorators.test.js +173 -0
  93. package/dist/__tests__/websocket-decorators.test.js.map +1 -0
  94. package/dist/__tests__/websocket-validation.test.d.ts +1 -0
  95. package/dist/__tests__/websocket-validation.test.js +827 -0
  96. package/dist/__tests__/websocket-validation.test.js.map +1 -0
  97. package/dist/__tests__/websocket.test.d.ts +1 -0
  98. package/dist/__tests__/websocket.test.js +415 -0
  99. package/dist/__tests__/websocket.test.js.map +1 -0
  100. package/dist/config/config.module.d.ts +2 -0
  101. package/dist/config/config.module.js +18 -0
  102. package/dist/config/config.module.js.map +1 -0
  103. package/dist/config/config.service.d.ts +15 -0
  104. package/dist/config/config.service.js +58 -0
  105. package/dist/config/config.service.js.map +1 -0
  106. package/dist/config/schemas.d.ts +107 -0
  107. package/dist/config/schemas.js +87 -0
  108. package/dist/config/schemas.js.map +1 -0
  109. package/dist/core/app.d.ts +44 -0
  110. package/dist/core/app.js +178 -0
  111. package/dist/core/app.js.map +1 -0
  112. package/dist/core/cinnabun-factory.d.ts +5 -0
  113. package/dist/core/cinnabun-factory.js +130 -0
  114. package/dist/core/cinnabun-factory.js.map +1 -0
  115. package/dist/core/config-loader.d.ts +2 -0
  116. package/dist/core/config-loader.js +76 -0
  117. package/dist/core/config-loader.js.map +1 -0
  118. package/dist/core/config.d.ts +12 -0
  119. package/dist/core/config.js +27 -0
  120. package/dist/core/config.js.map +1 -0
  121. package/dist/core/container.d.ts +10 -0
  122. package/dist/core/container.js +82 -0
  123. package/dist/core/container.js.map +1 -0
  124. package/dist/core/dependency-validator.d.ts +12 -0
  125. package/dist/core/dependency-validator.js +76 -0
  126. package/dist/core/dependency-validator.js.map +1 -0
  127. package/dist/core/guard.d.ts +3 -0
  128. package/dist/core/guard.js +2 -0
  129. package/dist/core/guard.js.map +1 -0
  130. package/dist/core/interceptor.d.ts +4 -0
  131. package/dist/core/interceptor.js +2 -0
  132. package/dist/core/interceptor.js.map +1 -0
  133. package/dist/core/logger.d.ts +15 -0
  134. package/dist/core/logger.js +71 -0
  135. package/dist/core/logger.js.map +1 -0
  136. package/dist/core/module-resolver.d.ts +6 -0
  137. package/dist/core/module-resolver.js +67 -0
  138. package/dist/core/module-resolver.js.map +1 -0
  139. package/dist/core/plugin.d.ts +12 -0
  140. package/dist/core/plugin.js +2 -0
  141. package/dist/core/plugin.js.map +1 -0
  142. package/dist/core/router.d.ts +38 -0
  143. package/dist/core/router.js +406 -0
  144. package/dist/core/router.js.map +1 -0
  145. package/dist/core/scanner.d.ts +7 -0
  146. package/dist/core/scanner.js +83 -0
  147. package/dist/core/scanner.js.map +1 -0
  148. package/dist/core/shutdown-manager.d.ts +15 -0
  149. package/dist/core/shutdown-manager.js +68 -0
  150. package/dist/core/shutdown-manager.js.map +1 -0
  151. package/dist/core/websocket-handler.d.ts +41 -0
  152. package/dist/core/websocket-handler.js +242 -0
  153. package/dist/core/websocket-handler.js.map +1 -0
  154. package/dist/decorators/autowired.d.ts +3 -0
  155. package/dist/decorators/autowired.js +11 -0
  156. package/dist/decorators/autowired.js.map +1 -0
  157. package/dist/decorators/cinnabun-application.d.ts +14 -0
  158. package/dist/decorators/cinnabun-application.js +17 -0
  159. package/dist/decorators/cinnabun-application.js.map +1 -0
  160. package/dist/decorators/lifecycle.d.ts +2 -0
  161. package/dist/decorators/lifecycle.js +12 -0
  162. package/dist/decorators/lifecycle.js.map +1 -0
  163. package/dist/decorators/middleware.d.ts +2 -0
  164. package/dist/decorators/middleware.js +12 -0
  165. package/dist/decorators/middleware.js.map +1 -0
  166. package/dist/decorators/module.d.ts +10 -0
  167. package/dist/decorators/module.js +13 -0
  168. package/dist/decorators/module.js.map +1 -0
  169. package/dist/decorators/on-shutdown.d.ts +1 -0
  170. package/dist/decorators/on-shutdown.js +10 -0
  171. package/dist/decorators/on-shutdown.js.map +1 -0
  172. package/dist/decorators/params.d.ts +6 -0
  173. package/dist/decorators/params.js +31 -0
  174. package/dist/decorators/params.js.map +1 -0
  175. package/dist/decorators/request-mapping.d.ts +7 -0
  176. package/dist/decorators/request-mapping.js +34 -0
  177. package/dist/decorators/request-mapping.js.map +1 -0
  178. package/dist/decorators/response.d.ts +2 -0
  179. package/dist/decorators/response.js +17 -0
  180. package/dist/decorators/response.js.map +1 -0
  181. package/dist/decorators/rest-controller.d.ts +1 -0
  182. package/dist/decorators/rest-controller.js +19 -0
  183. package/dist/decorators/rest-controller.js.map +1 -0
  184. package/dist/decorators/routes.d.ts +5 -0
  185. package/dist/decorators/routes.js +19 -0
  186. package/dist/decorators/routes.js.map +1 -0
  187. package/dist/decorators/service.d.ts +1 -0
  188. package/dist/decorators/service.js +7 -0
  189. package/dist/decorators/service.js.map +1 -0
  190. package/dist/decorators/use-guard.d.ts +2 -0
  191. package/dist/decorators/use-guard.js +12 -0
  192. package/dist/decorators/use-guard.js.map +1 -0
  193. package/dist/decorators/use-interceptor.d.ts +2 -0
  194. package/dist/decorators/use-interceptor.js +12 -0
  195. package/dist/decorators/use-interceptor.js.map +1 -0
  196. package/dist/decorators/validate.d.ts +12 -0
  197. package/dist/decorators/validate.js +7 -0
  198. package/dist/decorators/validate.js.map +1 -0
  199. package/dist/decorators/websocket.d.ts +9 -0
  200. package/dist/decorators/websocket.js +38 -0
  201. package/dist/decorators/websocket.js.map +1 -0
  202. package/dist/decorators/ws-event.d.ts +28 -0
  203. package/dist/decorators/ws-event.js +37 -0
  204. package/dist/decorators/ws-event.js.map +1 -0
  205. package/dist/decorators/ws-gateway.d.ts +18 -0
  206. package/dist/decorators/ws-gateway.js +24 -0
  207. package/dist/decorators/ws-gateway.js.map +1 -0
  208. package/dist/dev/index.d.ts +6 -0
  209. package/dist/dev/index.js +28 -0
  210. package/dist/dev/index.js.map +1 -0
  211. package/dist/exceptions/circular-dependency-error.d.ts +5 -0
  212. package/dist/exceptions/circular-dependency-error.js +16 -0
  213. package/dist/exceptions/circular-dependency-error.js.map +1 -0
  214. package/dist/exceptions/http-exception.d.ts +41 -0
  215. package/dist/exceptions/http-exception.js +96 -0
  216. package/dist/exceptions/http-exception.js.map +1 -0
  217. package/dist/guards/jwt-websocket.guard.d.ts +11 -0
  218. package/dist/guards/jwt-websocket.guard.js +37 -0
  219. package/dist/guards/jwt-websocket.guard.js.map +1 -0
  220. package/dist/guards/websocket-auth.guard.d.ts +16 -0
  221. package/dist/guards/websocket-auth.guard.js +43 -0
  222. package/dist/guards/websocket-auth.guard.js.map +1 -0
  223. package/dist/health/health-check.service.d.ts +45 -0
  224. package/dist/health/health-check.service.js +95 -0
  225. package/dist/health/health-check.service.js.map +1 -0
  226. package/dist/health/health.controller.d.ts +15 -0
  227. package/dist/health/health.controller.js +63 -0
  228. package/dist/health/health.controller.js.map +1 -0
  229. package/dist/health/health.module.d.ts +2 -0
  230. package/dist/health/health.module.js +20 -0
  231. package/dist/health/health.module.js.map +1 -0
  232. package/dist/index.d.ts +74 -11
  233. package/dist/index.js +54 -0
  234. package/dist/index.js.map +1 -0
  235. package/dist/metadata/storage.d.ts +171 -0
  236. package/dist/metadata/storage.js +257 -0
  237. package/dist/metadata/storage.js.map +1 -0
  238. package/dist/middleware/compression.middleware.d.ts +32 -0
  239. package/dist/middleware/compression.middleware.js +113 -0
  240. package/dist/middleware/compression.middleware.js.map +1 -0
  241. package/dist/middleware/cors.middleware.d.ts +18 -0
  242. package/dist/middleware/cors.middleware.js +79 -0
  243. package/dist/middleware/cors.middleware.js.map +1 -0
  244. package/dist/middleware/performance-tracker.middleware.d.ts +35 -0
  245. package/dist/middleware/performance-tracker.middleware.js +79 -0
  246. package/dist/middleware/performance-tracker.middleware.js.map +1 -0
  247. package/dist/middleware/request-logger.middleware.d.ts +32 -0
  248. package/dist/middleware/request-logger.middleware.js +125 -0
  249. package/dist/middleware/request-logger.middleware.js.map +1 -0
  250. package/dist/types/index.d.ts +14 -0
  251. package/dist/types/index.js +5 -0
  252. package/dist/types/index.js.map +1 -0
  253. package/dist/validation/helpers.d.ts +36 -0
  254. package/dist/validation/helpers.js +27 -0
  255. package/dist/validation/helpers.js.map +1 -0
  256. package/dist/websocket/error.d.ts +27 -0
  257. package/dist/websocket/error.js +38 -0
  258. package/dist/websocket/error.js.map +1 -0
  259. package/package.json +38 -5
  260. package/LICENSE +0 -9
@@ -0,0 +1,561 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
11
+ return function (target, key) { decorator(target, key, paramIndex); }
12
+ };
13
+ import "reflect-metadata";
14
+ import { describe, it, expect, afterEach } from "bun:test";
15
+ import { z } from "zod";
16
+ import { CinnabunApplication } from "../core/app.js";
17
+ import { RestController } from "../decorators/rest-controller.js";
18
+ import { GetMapping, PostMapping } from "../decorators/routes.js";
19
+ import { Body, Query, Param } from "../decorators/params.js";
20
+ import { Validate } from "../decorators/validate.js";
21
+ import { ValidationException } from "../exceptions/http-exception.js";
22
+ import { ValidationSchemas, PaginationSchema, IdSchema } from "../validation/helpers.js";
23
+ let app = null;
24
+ afterEach(async () => {
25
+ if (app) {
26
+ await app.close();
27
+ app = null;
28
+ }
29
+ });
30
+ function url(path) {
31
+ return `http://localhost:${app.getPort()}${path}`;
32
+ }
33
+ describe("Validation layer", () => {
34
+ it("validates body with Zod schema — valid request passes", async () => {
35
+ const CreateUserSchema = z.object({
36
+ name: z.string(),
37
+ email: z.string().email(),
38
+ });
39
+ let UserController = class UserController {
40
+ create(body) {
41
+ return { created: body.name };
42
+ }
43
+ };
44
+ __decorate([
45
+ PostMapping("/"),
46
+ Validate({ body: CreateUserSchema }),
47
+ __param(0, Body()),
48
+ __metadata("design:type", Function),
49
+ __metadata("design:paramtypes", [Object]),
50
+ __metadata("design:returntype", void 0)
51
+ ], UserController.prototype, "create", null);
52
+ UserController = __decorate([
53
+ RestController("/users")
54
+ ], UserController);
55
+ app = await CinnabunApplication.create({ controllers: [UserController] });
56
+ await app.listen(0);
57
+ const res = await fetch(url("/users/"), {
58
+ method: "POST",
59
+ headers: { "Content-Type": "application/json" },
60
+ body: JSON.stringify({ name: "Alice", email: "alice@example.com" }),
61
+ });
62
+ expect(res.status).toBe(200);
63
+ const data = await res.json();
64
+ expect(data).toEqual({ created: "Alice" });
65
+ });
66
+ it("returns 400 with errors when body validation fails", async () => {
67
+ const CreateUserSchema = z.object({
68
+ name: z.string().min(1),
69
+ email: z.string().email(),
70
+ });
71
+ let UserController2 = class UserController2 {
72
+ create(body) {
73
+ return body;
74
+ }
75
+ };
76
+ __decorate([
77
+ PostMapping("/"),
78
+ Validate({ body: CreateUserSchema }),
79
+ __param(0, Body()),
80
+ __metadata("design:type", Function),
81
+ __metadata("design:paramtypes", [Object]),
82
+ __metadata("design:returntype", void 0)
83
+ ], UserController2.prototype, "create", null);
84
+ UserController2 = __decorate([
85
+ RestController("/users")
86
+ ], UserController2);
87
+ app = await CinnabunApplication.create({ controllers: [UserController2] });
88
+ await app.listen(0);
89
+ const res = await fetch(url("/users/"), {
90
+ method: "POST",
91
+ headers: { "Content-Type": "application/json" },
92
+ body: JSON.stringify({ name: "", email: "not-an-email" }),
93
+ });
94
+ expect(res.status).toBe(400);
95
+ const data = await res.json();
96
+ expect(data.message).toBe("Validation failed");
97
+ expect(data.errors).toBeArray();
98
+ expect(data.errors.length).toBeGreaterThanOrEqual(2);
99
+ expect(data.errors[0]).toHaveProperty("field");
100
+ expect(data.errors[0]).toHaveProperty("message");
101
+ });
102
+ it("returns 400 when required body fields are missing", async () => {
103
+ const Schema = z.object({
104
+ title: z.string(),
105
+ content: z.string(),
106
+ });
107
+ let PostController = class PostController {
108
+ create(body) {
109
+ return body;
110
+ }
111
+ };
112
+ __decorate([
113
+ PostMapping("/"),
114
+ Validate({ body: Schema }),
115
+ __param(0, Body()),
116
+ __metadata("design:type", Function),
117
+ __metadata("design:paramtypes", [Object]),
118
+ __metadata("design:returntype", void 0)
119
+ ], PostController.prototype, "create", null);
120
+ PostController = __decorate([
121
+ RestController("/posts")
122
+ ], PostController);
123
+ app = await CinnabunApplication.create({ controllers: [PostController] });
124
+ await app.listen(0);
125
+ const res = await fetch(url("/posts/"), {
126
+ method: "POST",
127
+ headers: { "Content-Type": "application/json" },
128
+ body: JSON.stringify({}),
129
+ });
130
+ expect(res.status).toBe(400);
131
+ const data = await res.json();
132
+ expect(data.errors.some((e) => e.field === "title")).toBe(true);
133
+ expect(data.errors.some((e) => e.field === "content")).toBe(true);
134
+ });
135
+ it("validates query params with Zod schema", async () => {
136
+ const SearchSchema = z.object({
137
+ q: z.string().min(1),
138
+ limit: z.string().regex(/^\d+$/),
139
+ });
140
+ let SearchController = class SearchController {
141
+ search(q, limit) {
142
+ return { q, limit };
143
+ }
144
+ };
145
+ __decorate([
146
+ GetMapping("/"),
147
+ Validate({ query: SearchSchema }),
148
+ __param(0, Query("q")),
149
+ __param(1, Query("limit")),
150
+ __metadata("design:type", Function),
151
+ __metadata("design:paramtypes", [String, String]),
152
+ __metadata("design:returntype", void 0)
153
+ ], SearchController.prototype, "search", null);
154
+ SearchController = __decorate([
155
+ RestController("/search")
156
+ ], SearchController);
157
+ app = await CinnabunApplication.create({ controllers: [SearchController] });
158
+ await app.listen(0);
159
+ // Valid request
160
+ const res = await fetch(url("/search/?q=hello&limit=10"));
161
+ expect(res.status).toBe(200);
162
+ const data = await res.json();
163
+ expect(data).toEqual({ q: "hello", limit: "10" });
164
+ });
165
+ it("returns 400 for invalid query params", async () => {
166
+ const SearchSchema = z.object({
167
+ q: z.string().min(1),
168
+ });
169
+ let SearchController2 = class SearchController2 {
170
+ search(q) {
171
+ return { q };
172
+ }
173
+ };
174
+ __decorate([
175
+ GetMapping("/"),
176
+ Validate({ query: SearchSchema }),
177
+ __param(0, Query("q")),
178
+ __metadata("design:type", Function),
179
+ __metadata("design:paramtypes", [String]),
180
+ __metadata("design:returntype", void 0)
181
+ ], SearchController2.prototype, "search", null);
182
+ SearchController2 = __decorate([
183
+ RestController("/search")
184
+ ], SearchController2);
185
+ app = await CinnabunApplication.create({ controllers: [SearchController2] });
186
+ await app.listen(0);
187
+ const res = await fetch(url("/search/?q="));
188
+ expect(res.status).toBe(400);
189
+ const data = await res.json();
190
+ expect(data.errors.some((e) => e.field === "q")).toBe(true);
191
+ });
192
+ it("validates path params with Zod schema", async () => {
193
+ const ParamSchema = z.object({
194
+ id: z.string().regex(/^\d+$/),
195
+ });
196
+ let ItemController = class ItemController {
197
+ findById(id) {
198
+ return { id };
199
+ }
200
+ };
201
+ __decorate([
202
+ GetMapping("/:id"),
203
+ Validate({ params: ParamSchema }),
204
+ __param(0, Param("id")),
205
+ __metadata("design:type", Function),
206
+ __metadata("design:paramtypes", [String]),
207
+ __metadata("design:returntype", void 0)
208
+ ], ItemController.prototype, "findById", null);
209
+ ItemController = __decorate([
210
+ RestController("/items")
211
+ ], ItemController);
212
+ app = await CinnabunApplication.create({ controllers: [ItemController] });
213
+ await app.listen(0);
214
+ // Valid path param
215
+ const res = await fetch(url("/items/42"));
216
+ expect(res.status).toBe(200);
217
+ expect(await res.json()).toEqual({ id: "42" });
218
+ // Invalid path param
219
+ const res2 = await fetch(url("/items/abc"));
220
+ expect(res2.status).toBe(400);
221
+ const data = await res2.json();
222
+ expect(data.errors.length).toBeGreaterThan(0);
223
+ });
224
+ it("validates body, query, and params together", async () => {
225
+ const BodySchema = z.object({ name: z.string() });
226
+ const QuerySchema = z.object({ format: z.enum(["json", "xml"]) });
227
+ const ParamSchema = z.object({ id: z.string().min(1) });
228
+ let ResourceController = class ResourceController {
229
+ update(id, format, body) {
230
+ return { id, format, body };
231
+ }
232
+ };
233
+ __decorate([
234
+ PostMapping("/:id"),
235
+ Validate({ body: BodySchema, query: QuerySchema, params: ParamSchema }),
236
+ __param(0, Param("id")),
237
+ __param(1, Query("format")),
238
+ __param(2, Body()),
239
+ __metadata("design:type", Function),
240
+ __metadata("design:paramtypes", [String, String, Object]),
241
+ __metadata("design:returntype", void 0)
242
+ ], ResourceController.prototype, "update", null);
243
+ ResourceController = __decorate([
244
+ RestController("/resources")
245
+ ], ResourceController);
246
+ app = await CinnabunApplication.create({ controllers: [ResourceController] });
247
+ await app.listen(0);
248
+ const res = await fetch(url("/resources/1?format=json"), {
249
+ method: "POST",
250
+ headers: { "Content-Type": "application/json" },
251
+ body: JSON.stringify({ name: "test" }),
252
+ });
253
+ expect(res.status).toBe(200);
254
+ });
255
+ it("collects errors from all sources when multiple fail", async () => {
256
+ const BodySchema = z.object({ name: z.string().min(3) });
257
+ const QuerySchema = z.object({ page: z.string().regex(/^\d+$/) });
258
+ let MultiController = class MultiController {
259
+ handle(body, page) {
260
+ return { body, page };
261
+ }
262
+ };
263
+ __decorate([
264
+ PostMapping("/"),
265
+ Validate({ body: BodySchema, query: QuerySchema }),
266
+ __param(0, Body()),
267
+ __param(1, Query("page")),
268
+ __metadata("design:type", Function),
269
+ __metadata("design:paramtypes", [Object, String]),
270
+ __metadata("design:returntype", void 0)
271
+ ], MultiController.prototype, "handle", null);
272
+ MultiController = __decorate([
273
+ RestController("/multi")
274
+ ], MultiController);
275
+ app = await CinnabunApplication.create({ controllers: [MultiController] });
276
+ await app.listen(0);
277
+ const res = await fetch(url("/multi/?page=abc"), {
278
+ method: "POST",
279
+ headers: { "Content-Type": "application/json" },
280
+ body: JSON.stringify({ name: "ab" }),
281
+ });
282
+ expect(res.status).toBe(400);
283
+ const data = await res.json();
284
+ // Should have errors from both body and query
285
+ expect(data.errors.length).toBeGreaterThanOrEqual(2);
286
+ });
287
+ it("passes through parsed/coerced values from Zod", async () => {
288
+ const Schema = z.object({
289
+ count: z.number(),
290
+ active: z.boolean(),
291
+ });
292
+ let CoerceController = class CoerceController {
293
+ handle(body) {
294
+ return { count: body.count, active: body.active, types: { count: typeof body.count, active: typeof body.active } };
295
+ }
296
+ };
297
+ __decorate([
298
+ PostMapping("/"),
299
+ Validate({ body: Schema }),
300
+ __param(0, Body()),
301
+ __metadata("design:type", Function),
302
+ __metadata("design:paramtypes", [Object]),
303
+ __metadata("design:returntype", void 0)
304
+ ], CoerceController.prototype, "handle", null);
305
+ CoerceController = __decorate([
306
+ RestController("/coerce")
307
+ ], CoerceController);
308
+ app = await CinnabunApplication.create({ controllers: [CoerceController] });
309
+ await app.listen(0);
310
+ const res = await fetch(url("/coerce/"), {
311
+ method: "POST",
312
+ headers: { "Content-Type": "application/json" },
313
+ body: JSON.stringify({ count: 5, active: true }),
314
+ });
315
+ expect(res.status).toBe(200);
316
+ const data = await res.json();
317
+ expect(data.types.count).toBe("number");
318
+ expect(data.types.active).toBe("boolean");
319
+ });
320
+ it("works normally without @Validate decorator", async () => {
321
+ let NoValidateController = class NoValidateController {
322
+ handle(body) {
323
+ return body;
324
+ }
325
+ };
326
+ __decorate([
327
+ PostMapping("/"),
328
+ __param(0, Body()),
329
+ __metadata("design:type", Function),
330
+ __metadata("design:paramtypes", [Object]),
331
+ __metadata("design:returntype", void 0)
332
+ ], NoValidateController.prototype, "handle", null);
333
+ NoValidateController = __decorate([
334
+ RestController("/no-validate")
335
+ ], NoValidateController);
336
+ app = await CinnabunApplication.create({ controllers: [NoValidateController] });
337
+ await app.listen(0);
338
+ const res = await fetch(url("/no-validate/"), {
339
+ method: "POST",
340
+ headers: { "Content-Type": "application/json" },
341
+ body: JSON.stringify({ anything: "goes" }),
342
+ });
343
+ expect(res.status).toBe(200);
344
+ expect(await res.json()).toEqual({ anything: "goes" });
345
+ });
346
+ });
347
+ describe("ValidationException.fromZodError", () => {
348
+ it("should convert Zod error to ValidationException", () => {
349
+ const schema = z.object({
350
+ email: z.string().email(),
351
+ age: z.number().min(18),
352
+ });
353
+ const result = schema.safeParse({
354
+ email: "invalid-email",
355
+ age: 15,
356
+ });
357
+ expect(result.success).toBe(false);
358
+ if (!result.success) {
359
+ const exception = ValidationException.fromZodError(result.error);
360
+ expect(exception).toBeInstanceOf(ValidationException);
361
+ expect(exception.statusCode).toBe(400);
362
+ expect(exception.message).toBe("Validation failed");
363
+ expect(exception.errors).toHaveLength(2);
364
+ // Check email error
365
+ const emailError = exception.errors.find(e => e.field === "email");
366
+ expect(emailError).toBeDefined();
367
+ expect(emailError?.message).toContain("Invalid");
368
+ // Check age error
369
+ const ageError = exception.errors.find(e => e.field === "age");
370
+ expect(ageError).toBeDefined();
371
+ }
372
+ });
373
+ it("should handle nested paths", () => {
374
+ const schema = z.object({
375
+ user: z.object({
376
+ profile: z.object({
377
+ email: z.string().email(),
378
+ }),
379
+ }),
380
+ });
381
+ const result = schema.safeParse({
382
+ user: {
383
+ profile: {
384
+ email: "not-an-email",
385
+ },
386
+ },
387
+ });
388
+ if (!result.success) {
389
+ const exception = ValidationException.fromZodError(result.error);
390
+ expect(exception.errors[0].field).toBe("user.profile.email");
391
+ }
392
+ });
393
+ it("should use 'body' for empty path", () => {
394
+ const schema = z.string().email();
395
+ const result = schema.safeParse("invalid");
396
+ if (!result.success) {
397
+ const exception = ValidationException.fromZodError(result.error);
398
+ expect(exception.errors[0].field).toBe("body");
399
+ }
400
+ });
401
+ });
402
+ describe("ValidationSchemas", () => {
403
+ it("email - accepts valid email", () => {
404
+ const result = ValidationSchemas.email.safeParse("user@example.com");
405
+ expect(result.success).toBe(true);
406
+ });
407
+ it("email - rejects invalid email", () => {
408
+ const result = ValidationSchemas.email.safeParse("not-an-email");
409
+ expect(result.success).toBe(false);
410
+ });
411
+ it("password - accepts 8+ characters", () => {
412
+ const result = ValidationSchemas.password.safeParse("password123");
413
+ expect(result.success).toBe(true);
414
+ });
415
+ it("password - rejects less than 8 characters", () => {
416
+ const result = ValidationSchemas.password.safeParse("pass");
417
+ expect(result.success).toBe(false);
418
+ if (!result.success) {
419
+ expect(result.error.issues[0].message).toContain("8 characters");
420
+ }
421
+ });
422
+ it("uuid - accepts valid UUID", () => {
423
+ const result = ValidationSchemas.uuid.safeParse("550e8400-e29b-41d4-a716-446655440000");
424
+ expect(result.success).toBe(true);
425
+ });
426
+ it("uuid - rejects invalid UUID", () => {
427
+ const result = ValidationSchemas.uuid.safeParse("not-a-uuid");
428
+ expect(result.success).toBe(false);
429
+ });
430
+ it("url - accepts valid URL", () => {
431
+ const result = ValidationSchemas.url.safeParse("https://example.com");
432
+ expect(result.success).toBe(true);
433
+ });
434
+ it("url - rejects invalid URL", () => {
435
+ const result = ValidationSchemas.url.safeParse("not a url");
436
+ expect(result.success).toBe(false);
437
+ });
438
+ it("positiveInt - accepts positive integer", () => {
439
+ const result = ValidationSchemas.positiveInt.safeParse(42);
440
+ expect(result.success).toBe(true);
441
+ });
442
+ it("positiveInt - rejects negative, zero, and floats", () => {
443
+ expect(ValidationSchemas.positiveInt.safeParse(-5).success).toBe(false);
444
+ expect(ValidationSchemas.positiveInt.safeParse(0).success).toBe(false);
445
+ expect(ValidationSchemas.positiveInt.safeParse(3.14).success).toBe(false);
446
+ });
447
+ it("dateString - accepts ISO 8601 date", () => {
448
+ const result = ValidationSchemas.dateString.safeParse("2024-01-15T10:30:00Z");
449
+ expect(result.success).toBe(true);
450
+ });
451
+ it("dateString - rejects invalid date", () => {
452
+ const result = ValidationSchemas.dateString.safeParse("not-a-date");
453
+ expect(result.success).toBe(false);
454
+ });
455
+ it("nonEmptyString - accepts non-empty", () => {
456
+ const result = ValidationSchemas.nonEmptyString.safeParse("hello");
457
+ expect(result.success).toBe(true);
458
+ });
459
+ it("nonEmptyString - rejects empty string", () => {
460
+ const result = ValidationSchemas.nonEmptyString.safeParse("");
461
+ expect(result.success).toBe(false);
462
+ });
463
+ });
464
+ describe("PaginationSchema", () => {
465
+ it("accepts valid pagination params", () => {
466
+ const result = PaginationSchema.safeParse({ page: 2, limit: 20 });
467
+ expect(result.success).toBe(true);
468
+ if (result.success) {
469
+ expect(result.data).toEqual({ page: 2, limit: 20 });
470
+ }
471
+ });
472
+ it("applies default values", () => {
473
+ const result = PaginationSchema.safeParse({});
474
+ expect(result.success).toBe(true);
475
+ if (result.success) {
476
+ expect(result.data).toEqual({ page: 1, limit: 10 });
477
+ }
478
+ });
479
+ it("rejects negative page", () => {
480
+ const result = PaginationSchema.safeParse({ page: -1, limit: 10 });
481
+ expect(result.success).toBe(false);
482
+ });
483
+ it("rejects limit over 100", () => {
484
+ const result = PaginationSchema.safeParse({ page: 1, limit: 101 });
485
+ expect(result.success).toBe(false);
486
+ });
487
+ });
488
+ describe("IdSchema", () => {
489
+ it("accepts valid UUID id", () => {
490
+ const result = IdSchema.safeParse({ id: "550e8400-e29b-41d4-a716-446655440000" });
491
+ expect(result.success).toBe(true);
492
+ });
493
+ it("rejects invalid UUID id", () => {
494
+ const result = IdSchema.safeParse({ id: "123" });
495
+ expect(result.success).toBe(false);
496
+ if (!result.success) {
497
+ expect(result.error.issues[0].message).toContain("Invalid ID format");
498
+ }
499
+ });
500
+ it("rejects missing id", () => {
501
+ const result = IdSchema.safeParse({});
502
+ expect(result.success).toBe(false);
503
+ });
504
+ });
505
+ describe("ValidationSchemas - Complex usage", () => {
506
+ it("combines helpers in nested schemas", () => {
507
+ const CreateOrderSchema = z.object({
508
+ items: z.array(z.object({
509
+ productId: ValidationSchemas.uuid,
510
+ quantity: ValidationSchemas.positiveInt,
511
+ })).min(1, "Order must have at least one item"),
512
+ shippingAddress: z.object({
513
+ street: ValidationSchemas.nonEmptyString,
514
+ city: ValidationSchemas.nonEmptyString,
515
+ zipCode: z.string().regex(/^\d{5}$/, "Invalid ZIP code"),
516
+ }),
517
+ });
518
+ const validData = {
519
+ items: [
520
+ { productId: "550e8400-e29b-41d4-a716-446655440000", quantity: 2 },
521
+ ],
522
+ shippingAddress: {
523
+ street: "123 Main St",
524
+ city: "New York",
525
+ zipCode: "10001",
526
+ },
527
+ };
528
+ const result = CreateOrderSchema.safeParse(validData);
529
+ expect(result.success).toBe(true);
530
+ });
531
+ it("collects errors from multiple helper schemas", () => {
532
+ const schema = z.object({
533
+ email: ValidationSchemas.email,
534
+ password: ValidationSchemas.password,
535
+ age: ValidationSchemas.positiveInt,
536
+ website: ValidationSchemas.url,
537
+ });
538
+ const result = schema.safeParse({
539
+ email: "invalid",
540
+ password: "short",
541
+ age: -1,
542
+ website: "not a url",
543
+ });
544
+ expect(result.success).toBe(false);
545
+ if (!result.success) {
546
+ expect(result.error.issues.length).toBe(4);
547
+ const exception = ValidationException.fromZodError(result.error);
548
+ expect(exception.errors).toHaveLength(4);
549
+ }
550
+ });
551
+ it("works with optional helper fields", () => {
552
+ const schema = z.object({
553
+ email: ValidationSchemas.email,
554
+ website: ValidationSchemas.url.optional(),
555
+ });
556
+ expect(schema.safeParse({ email: "user@example.com" }).success).toBe(true);
557
+ expect(schema.safeParse({ email: "user@example.com", website: "https://example.com" }).success).toBe(true);
558
+ expect(schema.safeParse({ email: "user@example.com", website: "not a url" }).success).toBe(false);
559
+ });
560
+ });
561
+ //# sourceMappingURL=validation.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.test.js","sourceRoot":"","sources":["../../src/__tests__/validation.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import "reflect-metadata";