@carno.js/core 0.2.11 → 1.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 (314) hide show
  1. package/LICENSE +673 -673
  2. package/README.md +188 -0
  3. package/dist/Carno.js +272 -333
  4. package/dist/Carno.mjs +268 -0
  5. package/dist/DefaultRoutes.js +51 -0
  6. package/dist/DefaultRoutes.mjs +34 -0
  7. package/dist/bun/index.js +183 -0
  8. package/dist/bun/index.js.map +86 -0
  9. package/dist/cache/CacheDriver.js +13 -0
  10. package/dist/cache/CacheDriver.mjs +0 -0
  11. package/dist/cache/CacheService.js +113 -0
  12. package/dist/cache/CacheService.mjs +93 -0
  13. package/dist/cache/MemoryDriver.js +66 -0
  14. package/dist/cache/MemoryDriver.mjs +46 -0
  15. package/dist/cache/RedisDriver.js +81 -0
  16. package/dist/cache/RedisDriver.mjs +61 -0
  17. package/dist/compiler/JITCompiler.js +111 -0
  18. package/dist/compiler/JITCompiler.mjs +89 -0
  19. package/dist/container/Container.js +99 -0
  20. package/dist/container/Container.mjs +78 -0
  21. package/dist/context/Context.js +97 -0
  22. package/dist/context/Context.mjs +77 -0
  23. package/dist/cors/CorsHandler.js +90 -0
  24. package/dist/cors/CorsHandler.mjs +68 -0
  25. package/dist/decorators/Controller.js +42 -0
  26. package/dist/decorators/Controller.mjs +22 -0
  27. package/dist/decorators/Inject.js +30 -0
  28. package/dist/decorators/Inject.mjs +10 -0
  29. package/dist/decorators/Middleware.js +35 -0
  30. package/dist/decorators/Middleware.mjs +15 -0
  31. package/dist/decorators/Service.js +31 -0
  32. package/dist/decorators/Service.mjs +12 -0
  33. package/dist/decorators/methods.js +60 -0
  34. package/dist/decorators/methods.mjs +34 -0
  35. package/dist/decorators/params.js +63 -0
  36. package/dist/decorators/params.mjs +37 -0
  37. package/dist/events/Lifecycle.js +69 -0
  38. package/dist/events/Lifecycle.mjs +41 -0
  39. package/dist/exceptions/HttpException.js +112 -26
  40. package/dist/exceptions/HttpException.mjs +82 -0
  41. package/dist/index.js +129 -31
  42. package/dist/index.mjs +94 -0
  43. package/dist/metadata.js +34 -0
  44. package/dist/metadata.mjs +9 -0
  45. package/dist/middleware/CarnoMiddleware.js +13 -0
  46. package/dist/middleware/CarnoMiddleware.mjs +0 -0
  47. package/dist/router/RadixRouter.js +121 -0
  48. package/dist/router/RadixRouter.mjs +101 -0
  49. package/dist/testing/TestHarness.js +81 -0
  50. package/dist/testing/TestHarness.mjs +60 -0
  51. package/dist/utils/Metadata.js +53 -0
  52. package/dist/utils/Metadata.mjs +31 -0
  53. package/dist/validation/ValibotAdapter.js +67 -0
  54. package/dist/validation/ValibotAdapter.mjs +48 -0
  55. package/dist/validation/ValidatorAdapter.js +35 -19
  56. package/dist/validation/ValidatorAdapter.mjs +14 -0
  57. package/dist/validation/ZodAdapter.js +80 -0
  58. package/dist/validation/ZodAdapter.mjs +59 -0
  59. package/package.json +21 -63
  60. package/src/Carno.ts +605 -0
  61. package/src/DefaultRoutes.ts +34 -0
  62. package/src/cache/CacheDriver.ts +50 -0
  63. package/src/cache/CacheService.ts +139 -0
  64. package/src/cache/MemoryDriver.ts +104 -0
  65. package/src/cache/RedisDriver.ts +116 -0
  66. package/src/compiler/JITCompiler.ts +167 -0
  67. package/src/container/Container.ts +168 -0
  68. package/src/context/Context.ts +128 -0
  69. package/src/cors/CorsHandler.ts +145 -0
  70. package/src/decorators/Controller.ts +63 -0
  71. package/src/decorators/Inject.ts +16 -0
  72. package/src/decorators/Middleware.ts +22 -0
  73. package/src/decorators/Service.ts +18 -0
  74. package/src/decorators/methods.ts +58 -0
  75. package/src/decorators/params.ts +47 -0
  76. package/src/events/Lifecycle.ts +97 -0
  77. package/src/exceptions/HttpException.ts +99 -0
  78. package/src/index.ts +92 -0
  79. package/src/metadata.ts +46 -0
  80. package/src/middleware/CarnoMiddleware.ts +14 -0
  81. package/src/router/RadixRouter.ts +225 -0
  82. package/src/testing/TestHarness.ts +177 -0
  83. package/src/utils/Metadata.ts +43 -0
  84. package/src/validation/ValibotAdapter.ts +95 -0
  85. package/src/validation/ValidatorAdapter.ts +69 -0
  86. package/src/validation/ZodAdapter.ts +102 -0
  87. package/dist/Carno.d.ts +0 -75
  88. package/dist/cache/bento-cache.driver.d.ts +0 -13
  89. package/dist/cache/bento-cache.driver.js +0 -55
  90. package/dist/cache/cache.service.d.ts +0 -8
  91. package/dist/cache/cache.service.js +0 -6
  92. package/dist/commons/decorators/Injectable.decorator.d.ts +0 -20
  93. package/dist/commons/decorators/Injectable.decorator.js +0 -33
  94. package/dist/commons/decorators/controller.decorator.d.ts +0 -8
  95. package/dist/commons/decorators/controller.decorator.js +0 -22
  96. package/dist/commons/decorators/http.decorators.d.ts +0 -13
  97. package/dist/commons/decorators/http.decorators.js +0 -63
  98. package/dist/commons/decorators/index.d.ts +0 -6
  99. package/dist/commons/decorators/index.js +0 -22
  100. package/dist/commons/decorators/inject.decorator.d.ts +0 -1
  101. package/dist/commons/decorators/inject.decorator.js +0 -5
  102. package/dist/commons/decorators/middleware.decorator.d.ts +0 -2
  103. package/dist/commons/decorators/middleware.decorator.js +0 -30
  104. package/dist/commons/decorators/service.decorator.d.ts +0 -2
  105. package/dist/commons/decorators/service.decorator.js +0 -7
  106. package/dist/commons/decorators/validation.decorator.d.ts +0 -32
  107. package/dist/commons/decorators/validation.decorator.js +0 -40
  108. package/dist/commons/http-code.enum.d.ts +0 -50
  109. package/dist/commons/http-code.enum.js +0 -54
  110. package/dist/commons/index.d.ts +0 -3
  111. package/dist/commons/index.js +0 -19
  112. package/dist/commons/registries/ProviderControl.d.ts +0 -77
  113. package/dist/commons/registries/ProviderControl.js +0 -112
  114. package/dist/commons/registries/ProviderRegistry.d.ts +0 -7
  115. package/dist/commons/registries/ProviderRegistry.js +0 -20
  116. package/dist/constants.d.ts +0 -8
  117. package/dist/constants.js +0 -11
  118. package/dist/container/ContainerConfiguration.d.ts +0 -45
  119. package/dist/container/ContainerConfiguration.js +0 -121
  120. package/dist/container/DependencyResolver.d.ts +0 -20
  121. package/dist/container/DependencyResolver.js +0 -85
  122. package/dist/container/InjectorService.d.ts +0 -58
  123. package/dist/container/InjectorService.js +0 -286
  124. package/dist/container/MethodInvoker.d.ts +0 -21
  125. package/dist/container/MethodInvoker.js +0 -83
  126. package/dist/container/RouteResolver.d.ts +0 -27
  127. package/dist/container/RouteResolver.js +0 -173
  128. package/dist/container/container.d.ts +0 -41
  129. package/dist/container/container.js +0 -71
  130. package/dist/container/createContainer.d.ts +0 -3
  131. package/dist/container/createContainer.js +0 -12
  132. package/dist/container/createInjector.d.ts +0 -2
  133. package/dist/container/createInjector.js +0 -7
  134. package/dist/container/index.d.ts +0 -6
  135. package/dist/container/index.js +0 -22
  136. package/dist/container/middleware.resolver.d.ts +0 -9
  137. package/dist/container/middleware.resolver.js +0 -35
  138. package/dist/default-routes-carno.d.ts +0 -3
  139. package/dist/default-routes-carno.js +0 -29
  140. package/dist/domain/BaseContext.d.ts +0 -15
  141. package/dist/domain/BaseContext.js +0 -2
  142. package/dist/domain/CarnoClosure.d.ts +0 -1
  143. package/dist/domain/CarnoClosure.js +0 -2
  144. package/dist/domain/CarnoMiddleware.d.ts +0 -5
  145. package/dist/domain/CarnoMiddleware.js +0 -2
  146. package/dist/domain/Context.d.ts +0 -58
  147. package/dist/domain/Context.js +0 -188
  148. package/dist/domain/FastContext.d.ts +0 -34
  149. package/dist/domain/FastContext.js +0 -59
  150. package/dist/domain/LocalsContainer.d.ts +0 -4
  151. package/dist/domain/LocalsContainer.js +0 -10
  152. package/dist/domain/Metadata.d.ts +0 -449
  153. package/dist/domain/Metadata.js +0 -511
  154. package/dist/domain/cors-config.d.ts +0 -12
  155. package/dist/domain/cors-config.js +0 -18
  156. package/dist/domain/cors-headers-cache.d.ts +0 -17
  157. package/dist/domain/cors-headers-cache.js +0 -101
  158. package/dist/domain/http-method.d.ts +0 -7
  159. package/dist/domain/http-method.js +0 -11
  160. package/dist/domain/index.d.ts +0 -10
  161. package/dist/domain/index.js +0 -26
  162. package/dist/domain/provider-scope.d.ts +0 -5
  163. package/dist/domain/provider-scope.js +0 -9
  164. package/dist/domain/provider-type.d.ts +0 -6
  165. package/dist/domain/provider-type.js +0 -10
  166. package/dist/domain/provider.d.ts +0 -37
  167. package/dist/domain/provider.js +0 -70
  168. package/dist/events/hooks.decorator.d.ts +0 -3
  169. package/dist/events/hooks.decorator.js +0 -29
  170. package/dist/events/index.d.ts +0 -2
  171. package/dist/events/index.js +0 -18
  172. package/dist/events/on-event.d.ts +0 -13
  173. package/dist/events/on-event.js +0 -11
  174. package/dist/exceptions/HttpException.d.ts +0 -9
  175. package/dist/exceptions/index.d.ts +0 -1
  176. package/dist/exceptions/index.js +0 -17
  177. package/dist/index.d.ts +0 -16
  178. package/dist/route/CompiledRoute.d.ts +0 -23
  179. package/dist/route/CompiledRoute.js +0 -9
  180. package/dist/route/FastPathExecutor.d.ts +0 -12
  181. package/dist/route/FastPathExecutor.js +0 -50
  182. package/dist/route/JITCompiler.d.ts +0 -28
  183. package/dist/route/JITCompiler.js +0 -245
  184. package/dist/route/Matcher.d.ts +0 -11
  185. package/dist/route/Matcher.js +0 -48
  186. package/dist/route/ParamResolverFactory.d.ts +0 -14
  187. package/dist/route/ParamResolverFactory.js +0 -49
  188. package/dist/route/RouteCompiler.d.ts +0 -28
  189. package/dist/route/RouteCompiler.js +0 -157
  190. package/dist/route/RouteExecutor.d.ts +0 -12
  191. package/dist/route/RouteExecutor.js +0 -84
  192. package/dist/route/memoirist.d.ts +0 -31
  193. package/dist/route/memoirist.js +0 -373
  194. package/dist/services/logger.service.d.ts +0 -23
  195. package/dist/services/logger.service.js +0 -47
  196. package/dist/testing/core-testing.d.ts +0 -24
  197. package/dist/testing/core-testing.js +0 -102
  198. package/dist/testing/index.d.ts +0 -1
  199. package/dist/testing/index.js +0 -17
  200. package/dist/utils/ValidationCache.d.ts +0 -5
  201. package/dist/utils/ValidationCache.js +0 -35
  202. package/dist/utils/ancestorOf.d.ts +0 -2
  203. package/dist/utils/ancestorOf.js +0 -10
  204. package/dist/utils/ancestorsOf.d.ts +0 -6
  205. package/dist/utils/ancestorsOf.js +0 -20
  206. package/dist/utils/classOf.d.ts +0 -13
  207. package/dist/utils/classOf.js +0 -21
  208. package/dist/utils/cleanObject.d.ts +0 -6
  209. package/dist/utils/cleanObject.js +0 -22
  210. package/dist/utils/constructorOf.d.ts +0 -11
  211. package/dist/utils/constructorOf.js +0 -18
  212. package/dist/utils/createInstance.d.ts +0 -1
  213. package/dist/utils/createInstance.js +0 -7
  214. package/dist/utils/decoratorTypeOf.d.ts +0 -11
  215. package/dist/utils/decoratorTypeOf.js +0 -32
  216. package/dist/utils/deepClone.d.ts +0 -6
  217. package/dist/utils/deepClone.js +0 -63
  218. package/dist/utils/deepMerge.d.ts +0 -9
  219. package/dist/utils/deepMerge.js +0 -62
  220. package/dist/utils/descriptorOf.d.ts +0 -8
  221. package/dist/utils/descriptorOf.js +0 -16
  222. package/dist/utils/formatValidationErrors.d.ts +0 -5
  223. package/dist/utils/formatValidationErrors.js +0 -80
  224. package/dist/utils/getClassOrSymbol.d.ts +0 -1
  225. package/dist/utils/getClassOrSymbol.js +0 -8
  226. package/dist/utils/getConstructorArgNames.d.ts +0 -1
  227. package/dist/utils/getConstructorArgNames.js +0 -12
  228. package/dist/utils/getMethodArgTypes.d.ts +0 -1
  229. package/dist/utils/getMethodArgTypes.js +0 -9
  230. package/dist/utils/getValue.d.ts +0 -32
  231. package/dist/utils/getValue.js +0 -47
  232. package/dist/utils/hasJsonMethod.d.ts +0 -1
  233. package/dist/utils/hasJsonMethod.js +0 -6
  234. package/dist/utils/index.d.ts +0 -15
  235. package/dist/utils/index.js +0 -31
  236. package/dist/utils/isArray.d.ts +0 -13
  237. package/dist/utils/isArray.js +0 -21
  238. package/dist/utils/isArrowFn.d.ts +0 -1
  239. package/dist/utils/isArrowFn.js +0 -7
  240. package/dist/utils/isBoolean.d.ts +0 -7
  241. package/dist/utils/isBoolean.js +0 -15
  242. package/dist/utils/isBuffer.d.ts +0 -7
  243. package/dist/utils/isBuffer.js +0 -19
  244. package/dist/utils/isClass.d.ts +0 -1
  245. package/dist/utils/isClass.js +0 -26
  246. package/dist/utils/isCollection.d.ts +0 -6
  247. package/dist/utils/isCollection.js +0 -20
  248. package/dist/utils/isDate.d.ts +0 -6
  249. package/dist/utils/isDate.js +0 -11
  250. package/dist/utils/isEmpty.d.ts +0 -6
  251. package/dist/utils/isEmpty.js +0 -12
  252. package/dist/utils/isFunction.d.ts +0 -1
  253. package/dist/utils/isFunction.js +0 -6
  254. package/dist/utils/isInheritedFrom.d.ts +0 -1
  255. package/dist/utils/isInheritedFrom.js +0 -24
  256. package/dist/utils/isMomentObject.d.ts +0 -1
  257. package/dist/utils/isMomentObject.js +0 -6
  258. package/dist/utils/isMongooseObject.d.ts +0 -2
  259. package/dist/utils/isMongooseObject.js +0 -11
  260. package/dist/utils/isNil.d.ts +0 -1
  261. package/dist/utils/isNil.js +0 -6
  262. package/dist/utils/isNumber.d.ts +0 -7
  263. package/dist/utils/isNumber.js +0 -15
  264. package/dist/utils/isObject.d.ts +0 -1
  265. package/dist/utils/isObject.js +0 -6
  266. package/dist/utils/isObservable.d.ts +0 -1
  267. package/dist/utils/isObservable.js +0 -6
  268. package/dist/utils/isPlainObject.d.ts +0 -7
  269. package/dist/utils/isPlainObject.js +0 -16
  270. package/dist/utils/isPrimitive.d.ts +0 -14
  271. package/dist/utils/isPrimitive.js +0 -28
  272. package/dist/utils/isPrimitiveType.d.ts +0 -1
  273. package/dist/utils/isPrimitiveType.js +0 -11
  274. package/dist/utils/isPromise.d.ts +0 -7
  275. package/dist/utils/isPromise.js +0 -14
  276. package/dist/utils/isProtectedKey.d.ts +0 -5
  277. package/dist/utils/isProtectedKey.js +0 -10
  278. package/dist/utils/isRegExp.d.ts +0 -1
  279. package/dist/utils/isRegExp.js +0 -6
  280. package/dist/utils/isRequestScope.d.ts +0 -11
  281. package/dist/utils/isRequestScope.js +0 -23
  282. package/dist/utils/isSerializable.d.ts +0 -1
  283. package/dist/utils/isSerializable.js +0 -11
  284. package/dist/utils/isStream.d.ts +0 -1
  285. package/dist/utils/isStream.js +0 -6
  286. package/dist/utils/isString.d.ts +0 -6
  287. package/dist/utils/isString.js +0 -14
  288. package/dist/utils/isSymbol.d.ts +0 -6
  289. package/dist/utils/isSymbol.js +0 -14
  290. package/dist/utils/methodsOf.d.ts +0 -9
  291. package/dist/utils/methodsOf.js +0 -24
  292. package/dist/utils/nameOf.d.ts +0 -14
  293. package/dist/utils/nameOf.js +0 -31
  294. package/dist/utils/objectKeys.d.ts +0 -1
  295. package/dist/utils/objectKeys.js +0 -7
  296. package/dist/utils/primitiveOf.d.ts +0 -1
  297. package/dist/utils/primitiveOf.js +0 -18
  298. package/dist/utils/prototypeOf.d.ts +0 -6
  299. package/dist/utils/prototypeOf.js +0 -12
  300. package/dist/utils/setValue.d.ts +0 -1
  301. package/dist/utils/setValue.js +0 -32
  302. package/dist/utils/toMap.d.ts +0 -3
  303. package/dist/utils/toMap.js +0 -34
  304. package/dist/utils/toStringConstructor.d.ts +0 -1
  305. package/dist/utils/toStringConstructor.js +0 -10
  306. package/dist/validation/ValidatorAdapter.d.ts +0 -66
  307. package/dist/validation/adapters/ClassValidatorAdapter.d.ts +0 -23
  308. package/dist/validation/adapters/ClassValidatorAdapter.js +0 -47
  309. package/dist/validation/adapters/ZodAdapter.d.ts +0 -14
  310. package/dist/validation/adapters/ZodAdapter.js +0 -56
  311. package/dist/validation/adapters/index.d.ts +0 -4
  312. package/dist/validation/adapters/index.js +0 -7
  313. package/dist/validation/index.d.ts +0 -3
  314. package/dist/validation/index.js +0 -20
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.prototypeOf = prototypeOf;
4
- const classOf_1 = require("./classOf");
5
- /**
6
- * Return the prototype of the given class.
7
- * @param target
8
- * @returns {any}
9
- */
10
- function prototypeOf(target) {
11
- return (0, classOf_1.classOf)(target) === target ? target.prototype : target;
12
- }
@@ -1 +0,0 @@
1
- export declare function setValue(scope: any, expression: string, value: any, separator?: string): void;
@@ -1,32 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setValue = setValue;
4
- const isProtectedKey_1 = require("./isProtectedKey");
5
- function setValue(scope, expression, value, separator = ".") {
6
- const keys = expression.split(separator);
7
- const setValue = (key, add) => {
8
- if ((0, isProtectedKey_1.isProtectedKey)(key)) {
9
- return false;
10
- }
11
- if (add) {
12
- if (typeof scope.set === "function") {
13
- scope.set(key, value);
14
- }
15
- else {
16
- scope[key] = value;
17
- }
18
- return false;
19
- }
20
- if (typeof scope.set === "function") {
21
- if (!scope.has(key)) {
22
- scope.set(key, {});
23
- }
24
- scope = scope.get(key);
25
- }
26
- else {
27
- scope = scope[key] = scope[key] || {};
28
- }
29
- return true;
30
- };
31
- while (setValue(keys.shift(), !keys.length)) { }
32
- }
@@ -1,3 +0,0 @@
1
- export type ToMapIdentityCB<V> = (item: V, index: string | number) => string | string[];
2
- export type ToMapIdentity<V> = string | ToMapIdentityCB<V>;
3
- export declare function toMap<K extends keyof any = any, V = any>(input: Record<K, V> | V[], keyOrFn?: ToMapIdentity<V>): Map<K, V>;
@@ -1,34 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toMap = toMap;
4
- const isArray_1 = require("./isArray");
5
- const isString_1 = require("./isString");
6
- function createIdentityFn(keyOrFn) {
7
- if (!keyOrFn) {
8
- return (v, k) => String(k);
9
- }
10
- if ((0, isString_1.isString)(keyOrFn)) {
11
- return (item) => {
12
- return item[keyOrFn];
13
- };
14
- }
15
- return keyOrFn;
16
- }
17
- function toMap(input, keyOrFn) {
18
- if ((0, isArray_1.isArray)(input)) {
19
- const identity = createIdentityFn(keyOrFn || "id");
20
- return input.reduce((map, value, index) => {
21
- const ids = [].concat(identity(value, index));
22
- ids.forEach((id) => {
23
- const item = map.get(id);
24
- value = item?.merge?.(value) || value;
25
- map.set(id, value);
26
- });
27
- return map;
28
- }, new Map());
29
- }
30
- const identity = createIdentityFn(keyOrFn);
31
- return Object.entries(input).reduce((map, [key, value]) => {
32
- return map.set(identity(value, key), value);
33
- }, new Map());
34
- }
@@ -1 +0,0 @@
1
- export declare function toStringConstructor(target: any): string;
@@ -1,10 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.toStringConstructor = toStringConstructor;
4
- const constructorOf_1 = require("./constructorOf");
5
- function toStringConstructor(target) {
6
- const ctr = (0, constructorOf_1.constructorOf)(target);
7
- const strings = ctr.toString().split("\n");
8
- const ctrString = strings.find((s) => s.indexOf("constructor(") > -1) || "constructor()";
9
- return `${ctrString.replace("{", "").trim()}`;
10
- }
@@ -1,66 +0,0 @@
1
- /**
2
- * Base interface for validation adapters
3
- * Adapters provide validation capabilities for different libraries (Zod, class-validator, etc.)
4
- */
5
- export interface ValidatorAdapter<TOptions = any> {
6
- /**
7
- * Checks if a class/function has validation metadata
8
- * Used by ValidationCache for detection and optimization
9
- *
10
- * @param target - The class/function to check
11
- * @returns true if validation metadata exists
12
- */
13
- hasValidation(target: Function): boolean;
14
- /**
15
- * Validates and transforms a value to the target type
16
- *
17
- * @param target - The DTO class to validate against
18
- * @param value - The raw value to validate (usually from request body/query/params)
19
- * @returns Transformed and validated instance
20
- * @throws HttpException with formatted errors on validation failure
21
- */
22
- validateAndTransform(target: Function, value: any): any;
23
- /**
24
- * Get the name of the validator (for debugging/logging)
25
- *
26
- * @returns The validator name (e.g., "ZodAdapter", "ClassValidatorAdapter")
27
- */
28
- getName(): string;
29
- /**
30
- * Get the adapter options (for internal use)
31
- */
32
- getOptions(): TOptions;
33
- }
34
- /**
35
- * Constructor type for validator adapters
36
- */
37
- export type ValidatorAdapterConstructor<TOptions = any> = new (options?: TOptions) => ValidatorAdapter<TOptions>;
38
- /**
39
- * Type to extract options type from a ValidatorAdapter constructor
40
- */
41
- export type ValidatorAdapterOptions<TAdapter> = TAdapter extends new (options?: infer TOptions) => any ? TOptions : never;
42
- /**
43
- * Validation configuration with adapter and options
44
- */
45
- export interface ValidationConfig<TAdapter extends ValidatorAdapterConstructor = ValidatorAdapterConstructor> {
46
- adapter?: TAdapter;
47
- options?: ValidatorAdapterOptions<TAdapter>;
48
- }
49
- /**
50
- * Helper function to create a strongly-typed validation config.
51
- * Use this to get proper autocomplete for adapter options.
52
- *
53
- * @example
54
- * ```typescript
55
- * const app = new Carno({
56
- * validation: defineValidation({
57
- * adapter: ClassValidatorAdapter,
58
- * options: { whitelist: true } // ✓ Autocomplete works!
59
- * })
60
- * });
61
- * ```
62
- */
63
- export declare function defineValidation<TAdapter extends ValidatorAdapterConstructor>(config: {
64
- adapter: TAdapter;
65
- options?: ValidatorAdapterOptions<TAdapter>;
66
- }): ValidationConfig<TAdapter>;
@@ -1,23 +0,0 @@
1
- import type { ValidatorAdapter } from "../ValidatorAdapter";
2
- export interface ClassValidatorAdapterOptions {
3
- skipMissingProperties?: boolean;
4
- whitelist?: boolean;
5
- forbidNonWhitelisted?: boolean;
6
- forbidUnknownValues?: boolean;
7
- disableErrorMessages?: boolean;
8
- errorHttpStatusCode?: number;
9
- dismissDefaultMessages?: boolean;
10
- validationError?: {
11
- target?: boolean;
12
- value?: boolean;
13
- };
14
- stopAtFirstError?: boolean;
15
- }
16
- export declare class ClassValidatorAdapter implements ValidatorAdapter<ClassValidatorAdapterOptions> {
17
- private options;
18
- constructor(options?: ClassValidatorAdapterOptions);
19
- getName(): string;
20
- getOptions(): ClassValidatorAdapterOptions;
21
- hasValidation(target: Function): boolean;
22
- validateAndTransform(target: Function, value: any): any;
23
- }
@@ -1,47 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClassValidatorAdapter = void 0;
4
- const HttpException_1 = require("../../exceptions/HttpException");
5
- const formatValidationErrors_1 = require("../../utils/formatValidationErrors");
6
- let classValidator;
7
- let classTransformer;
8
- try {
9
- classValidator = require("class-validator");
10
- classTransformer = require("class-transformer");
11
- }
12
- catch (error) {
13
- // Will be checked in constructor
14
- }
15
- class ClassValidatorAdapter {
16
- constructor(options = {}) {
17
- this.options = options;
18
- if (!classValidator || !classTransformer) {
19
- throw new Error("ClassValidatorAdapter requires class-validator and class-transformer. " +
20
- "Install with: npm install class-validator class-transformer");
21
- }
22
- }
23
- getName() {
24
- return "ClassValidatorAdapter";
25
- }
26
- getOptions() {
27
- return this.options;
28
- }
29
- hasValidation(target) {
30
- const { getMetadataStorage } = classValidator;
31
- const metadataStorage = getMetadataStorage();
32
- const validationMetadata = metadataStorage.getTargetValidationMetadatas(target, "", false, false, []);
33
- return validationMetadata.length > 0;
34
- }
35
- validateAndTransform(target, value) {
36
- const { validateSync } = classValidator;
37
- const { plainToInstance } = classTransformer;
38
- const instance = plainToInstance(target, value);
39
- const errors = validateSync(instance, this.options);
40
- if (errors.length > 0) {
41
- const formatted = (0, formatValidationErrors_1.formatValidationErrors)(errors);
42
- throw new HttpException_1.HttpException(formatted, 400);
43
- }
44
- return instance;
45
- }
46
- }
47
- exports.ClassValidatorAdapter = ClassValidatorAdapter;
@@ -1,14 +0,0 @@
1
- import type { ValidatorAdapter } from "../ValidatorAdapter";
2
- export interface ZodAdapterOptions {
3
- }
4
- export declare class ZodAdapter implements ValidatorAdapter<ZodAdapterOptions> {
5
- private options;
6
- constructor(options?: ZodAdapterOptions);
7
- getName(): string;
8
- getOptions(): ZodAdapterOptions;
9
- hasValidation(target: Function): boolean;
10
- validateAndTransform(target: Function, value: any): any;
11
- private getSchema;
12
- private formatZodErrors;
13
- private buildFieldPath;
14
- }
@@ -1,56 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ZodAdapter = void 0;
4
- const Metadata_1 = require("../../domain/Metadata");
5
- const HttpException_1 = require("../../exceptions/HttpException");
6
- const constants_1 = require("../../constants");
7
- class ZodAdapter {
8
- constructor(options = {}) {
9
- this.options = options;
10
- }
11
- getName() {
12
- return "ZodAdapter";
13
- }
14
- getOptions() {
15
- return this.options;
16
- }
17
- hasValidation(target) {
18
- return Metadata_1.Metadata.has(constants_1.VALIDATION_ZOD_SCHEMA, target);
19
- }
20
- validateAndTransform(target, value) {
21
- const schema = this.getSchema(target);
22
- if (!schema) {
23
- return value;
24
- }
25
- const result = schema.safeParse(value);
26
- if (!result.success) {
27
- const formattedErrors = this.formatZodErrors(result.error);
28
- throw new HttpException_1.HttpException(formattedErrors, 400);
29
- }
30
- return result.data;
31
- }
32
- getSchema(target) {
33
- return Metadata_1.Metadata.get(constants_1.VALIDATION_ZOD_SCHEMA, target);
34
- }
35
- formatZodErrors(error) {
36
- const issuesMap = new Map();
37
- for (const issue of error.issues) {
38
- const field = this.buildFieldPath(issue.path);
39
- if (!issuesMap.has(field)) {
40
- issuesMap.set(field, []);
41
- }
42
- issuesMap.get(field).push(issue.message);
43
- }
44
- return Array.from(issuesMap.entries()).map(([field, messages]) => ({
45
- field,
46
- messages,
47
- }));
48
- }
49
- buildFieldPath(path) {
50
- if (path.length === 0) {
51
- return "body";
52
- }
53
- return path.map(p => String(p)).join(".");
54
- }
55
- }
56
- exports.ZodAdapter = ZodAdapter;
@@ -1,4 +0,0 @@
1
- export { ZodAdapter } from "./ZodAdapter";
2
- export type { ZodAdapterOptions } from "./ZodAdapter";
3
- export { ClassValidatorAdapter } from "./ClassValidatorAdapter";
4
- export type { ClassValidatorAdapterOptions } from "./ClassValidatorAdapter";
@@ -1,7 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ClassValidatorAdapter = exports.ZodAdapter = void 0;
4
- var ZodAdapter_1 = require("./ZodAdapter");
5
- Object.defineProperty(exports, "ZodAdapter", { enumerable: true, get: function () { return ZodAdapter_1.ZodAdapter; } });
6
- var ClassValidatorAdapter_1 = require("./ClassValidatorAdapter");
7
- Object.defineProperty(exports, "ClassValidatorAdapter", { enumerable: true, get: function () { return ClassValidatorAdapter_1.ClassValidatorAdapter; } });
@@ -1,3 +0,0 @@
1
- export type { ValidatorAdapter, ValidatorAdapterConstructor, ValidationConfig, ValidatorAdapterOptions, } from "./ValidatorAdapter";
2
- export { defineValidation } from "./ValidatorAdapter";
3
- export * from "./adapters";
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.defineValidation = void 0;
18
- var ValidatorAdapter_1 = require("./ValidatorAdapter");
19
- Object.defineProperty(exports, "defineValidation", { enumerable: true, get: function () { return ValidatorAdapter_1.defineValidation; } });
20
- __exportStar(require("./adapters"), exports);