@makebelieve21213-packages/nest-common 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (391) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +1905 -0
  3. package/dist/__tests__/index.spec.d.ts +2 -0
  4. package/dist/__tests__/index.spec.d.ts.map +1 -0
  5. package/dist/__tests__/index.spec.js +36 -0
  6. package/dist/__tests__/index.spec.js.map +1 -0
  7. package/dist/__tests__/mocks/logger-service.mock.d.ts +7 -0
  8. package/dist/__tests__/mocks/logger-service.mock.d.ts.map +1 -0
  9. package/dist/__tests__/mocks/logger-service.mock.js +16 -0
  10. package/dist/__tests__/mocks/logger-service.mock.js.map +1 -0
  11. package/dist/__tests__/setup.d.ts +2 -0
  12. package/dist/__tests__/setup.d.ts.map +1 -0
  13. package/dist/__tests__/setup.js +3 -0
  14. package/dist/__tests__/setup.js.map +1 -0
  15. package/dist/base/__tests__/base.controller.spec.d.ts +2 -0
  16. package/dist/base/__tests__/base.controller.spec.d.ts.map +1 -0
  17. package/dist/base/__tests__/base.controller.spec.js +50 -0
  18. package/dist/base/__tests__/base.controller.spec.js.map +1 -0
  19. package/dist/base/base.controller.d.ts +8 -0
  20. package/dist/base/base.controller.d.ts.map +1 -0
  21. package/dist/base/base.controller.js +15 -0
  22. package/dist/base/base.controller.js.map +1 -0
  23. package/dist/decorators/__tests__/api-key.decorator.spec.d.ts +2 -0
  24. package/dist/decorators/__tests__/api-key.decorator.spec.d.ts.map +1 -0
  25. package/dist/decorators/__tests__/api-key.decorator.spec.js +25 -0
  26. package/dist/decorators/__tests__/api-key.decorator.spec.js.map +1 -0
  27. package/dist/decorators/__tests__/permissions.decorator.spec.d.ts +2 -0
  28. package/dist/decorators/__tests__/permissions.decorator.spec.d.ts.map +1 -0
  29. package/dist/decorators/__tests__/permissions.decorator.spec.js +29 -0
  30. package/dist/decorators/__tests__/permissions.decorator.spec.js.map +1 -0
  31. package/dist/decorators/__tests__/public.decorator.spec.d.ts +2 -0
  32. package/dist/decorators/__tests__/public.decorator.spec.d.ts.map +1 -0
  33. package/dist/decorators/__tests__/public.decorator.spec.js +25 -0
  34. package/dist/decorators/__tests__/public.decorator.spec.js.map +1 -0
  35. package/dist/decorators/__tests__/roles.decorator.spec.d.ts +2 -0
  36. package/dist/decorators/__tests__/roles.decorator.spec.d.ts.map +1 -0
  37. package/dist/decorators/__tests__/roles.decorator.spec.js +29 -0
  38. package/dist/decorators/__tests__/roles.decorator.spec.js.map +1 -0
  39. package/dist/decorators/__tests__/serialize.decorator.spec.d.ts +2 -0
  40. package/dist/decorators/__tests__/serialize.decorator.spec.d.ts.map +1 -0
  41. package/dist/decorators/__tests__/serialize.decorator.spec.js +28 -0
  42. package/dist/decorators/__tests__/serialize.decorator.spec.js.map +1 -0
  43. package/dist/decorators/api-key.decorator.d.ts +3 -0
  44. package/dist/decorators/api-key.decorator.d.ts.map +1 -0
  45. package/dist/decorators/api-key.decorator.js +6 -0
  46. package/dist/decorators/api-key.decorator.js.map +1 -0
  47. package/dist/decorators/permissions.decorator.d.ts +3 -0
  48. package/dist/decorators/permissions.decorator.d.ts.map +1 -0
  49. package/dist/decorators/permissions.decorator.js +6 -0
  50. package/dist/decorators/permissions.decorator.js.map +1 -0
  51. package/dist/decorators/public.decorator.d.ts +3 -0
  52. package/dist/decorators/public.decorator.d.ts.map +1 -0
  53. package/dist/decorators/public.decorator.js +6 -0
  54. package/dist/decorators/public.decorator.js.map +1 -0
  55. package/dist/decorators/roles.decorator.d.ts +3 -0
  56. package/dist/decorators/roles.decorator.d.ts.map +1 -0
  57. package/dist/decorators/roles.decorator.js +6 -0
  58. package/dist/decorators/roles.decorator.js.map +1 -0
  59. package/dist/decorators/serialize.decorator.d.ts +3 -0
  60. package/dist/decorators/serialize.decorator.d.ts.map +1 -0
  61. package/dist/decorators/serialize.decorator.js +6 -0
  62. package/dist/decorators/serialize.decorator.js.map +1 -0
  63. package/dist/errors/__tests__/http.error.spec.d.ts +2 -0
  64. package/dist/errors/__tests__/http.error.spec.d.ts.map +1 -0
  65. package/dist/errors/__tests__/http.error.spec.js +667 -0
  66. package/dist/errors/__tests__/http.error.spec.js.map +1 -0
  67. package/dist/errors/__tests__/rpc.error.spec.d.ts +2 -0
  68. package/dist/errors/__tests__/rpc.error.spec.d.ts.map +1 -0
  69. package/dist/errors/__tests__/rpc.error.spec.js +336 -0
  70. package/dist/errors/__tests__/rpc.error.spec.js.map +1 -0
  71. package/dist/errors/__tests__/socket.error.spec.d.ts +2 -0
  72. package/dist/errors/__tests__/socket.error.spec.d.ts.map +1 -0
  73. package/dist/errors/__tests__/socket.error.spec.js +105 -0
  74. package/dist/errors/__tests__/socket.error.spec.js.map +1 -0
  75. package/dist/errors/http.error.d.ts +17 -0
  76. package/dist/errors/http.error.d.ts.map +1 -0
  77. package/dist/errors/http.error.js +170 -0
  78. package/dist/errors/http.error.js.map +1 -0
  79. package/dist/errors/nest-common.error.d.ts +7 -0
  80. package/dist/errors/nest-common.error.d.ts.map +1 -0
  81. package/dist/errors/nest-common.error.js +18 -0
  82. package/dist/errors/nest-common.error.js.map +1 -0
  83. package/dist/errors/rpc.error.d.ts +27 -0
  84. package/dist/errors/rpc.error.d.ts.map +1 -0
  85. package/dist/errors/rpc.error.js +170 -0
  86. package/dist/errors/rpc.error.js.map +1 -0
  87. package/dist/errors/socket.error.d.ts +20 -0
  88. package/dist/errors/socket.error.d.ts.map +1 -0
  89. package/dist/errors/socket.error.js +47 -0
  90. package/dist/errors/socket.error.js.map +1 -0
  91. package/dist/filters/__tests__/http-exception-handler.spec.d.ts +2 -0
  92. package/dist/filters/__tests__/http-exception-handler.spec.d.ts.map +1 -0
  93. package/dist/filters/__tests__/http-exception-handler.spec.js +86 -0
  94. package/dist/filters/__tests__/http-exception-handler.spec.js.map +1 -0
  95. package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts +2 -0
  96. package/dist/filters/__tests__/rpc-exception-handler.spec.d.ts.map +1 -0
  97. package/dist/filters/__tests__/rpc-exception-handler.spec.js +220 -0
  98. package/dist/filters/__tests__/rpc-exception-handler.spec.js.map +1 -0
  99. package/dist/filters/__tests__/unified-exception.filter.spec.d.ts +2 -0
  100. package/dist/filters/__tests__/unified-exception.filter.spec.d.ts.map +1 -0
  101. package/dist/filters/__tests__/unified-exception.filter.spec.js +233 -0
  102. package/dist/filters/__tests__/unified-exception.filter.spec.js.map +1 -0
  103. package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts +2 -0
  104. package/dist/filters/__tests__/websocket-exception-handler.spec.d.ts.map +1 -0
  105. package/dist/filters/__tests__/websocket-exception-handler.spec.js +78 -0
  106. package/dist/filters/__tests__/websocket-exception-handler.spec.js.map +1 -0
  107. package/dist/filters/http-exception-handler.d.ts +8 -0
  108. package/dist/filters/http-exception-handler.d.ts.map +1 -0
  109. package/dist/filters/http-exception-handler.js +37 -0
  110. package/dist/filters/http-exception-handler.js.map +1 -0
  111. package/dist/filters/rpc-exception-handler.d.ts +11 -0
  112. package/dist/filters/rpc-exception-handler.d.ts.map +1 -0
  113. package/dist/filters/rpc-exception-handler.js +87 -0
  114. package/dist/filters/rpc-exception-handler.js.map +1 -0
  115. package/dist/filters/unified-exception.filter.d.ts +12 -0
  116. package/dist/filters/unified-exception.filter.d.ts.map +1 -0
  117. package/dist/filters/unified-exception.filter.js +63 -0
  118. package/dist/filters/unified-exception.filter.js.map +1 -0
  119. package/dist/filters/websocket-exception-handler.d.ts +8 -0
  120. package/dist/filters/websocket-exception-handler.d.ts.map +1 -0
  121. package/dist/filters/websocket-exception-handler.js +47 -0
  122. package/dist/filters/websocket-exception-handler.js.map +1 -0
  123. package/dist/guards/__tests__/api-key.guard.spec.d.ts +2 -0
  124. package/dist/guards/__tests__/api-key.guard.spec.d.ts.map +1 -0
  125. package/dist/guards/__tests__/api-key.guard.spec.js +123 -0
  126. package/dist/guards/__tests__/api-key.guard.spec.js.map +1 -0
  127. package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts +2 -0
  128. package/dist/guards/__tests__/jwt-auth.guard.spec.d.ts.map +1 -0
  129. package/dist/guards/__tests__/jwt-auth.guard.spec.js +61 -0
  130. package/dist/guards/__tests__/jwt-auth.guard.spec.js.map +1 -0
  131. package/dist/guards/__tests__/permissions.guard.spec.d.ts +2 -0
  132. package/dist/guards/__tests__/permissions.guard.spec.d.ts.map +1 -0
  133. package/dist/guards/__tests__/permissions.guard.spec.js +77 -0
  134. package/dist/guards/__tests__/permissions.guard.spec.js.map +1 -0
  135. package/dist/guards/__tests__/rate-limit.guard.spec.d.ts +2 -0
  136. package/dist/guards/__tests__/rate-limit.guard.spec.d.ts.map +1 -0
  137. package/dist/guards/__tests__/rate-limit.guard.spec.js +117 -0
  138. package/dist/guards/__tests__/rate-limit.guard.spec.js.map +1 -0
  139. package/dist/guards/__tests__/roles.guard.spec.d.ts +2 -0
  140. package/dist/guards/__tests__/roles.guard.spec.d.ts.map +1 -0
  141. package/dist/guards/__tests__/roles.guard.spec.js +83 -0
  142. package/dist/guards/__tests__/roles.guard.spec.js.map +1 -0
  143. package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts +2 -0
  144. package/dist/guards/__tests__/websocket-auth.guard.spec.d.ts.map +1 -0
  145. package/dist/guards/__tests__/websocket-auth.guard.spec.js +72 -0
  146. package/dist/guards/__tests__/websocket-auth.guard.spec.js.map +1 -0
  147. package/dist/guards/api-key.guard.d.ts +10 -0
  148. package/dist/guards/api-key.guard.d.ts.map +1 -0
  149. package/dist/guards/api-key.guard.js +58 -0
  150. package/dist/guards/api-key.guard.js.map +1 -0
  151. package/dist/guards/jwt-auth.guard.d.ts +8 -0
  152. package/dist/guards/jwt-auth.guard.d.ts.map +1 -0
  153. package/dist/guards/jwt-auth.guard.js +41 -0
  154. package/dist/guards/jwt-auth.guard.js.map +1 -0
  155. package/dist/guards/permissions.guard.d.ts +8 -0
  156. package/dist/guards/permissions.guard.d.ts.map +1 -0
  157. package/dist/guards/permissions.guard.js +48 -0
  158. package/dist/guards/permissions.guard.js.map +1 -0
  159. package/dist/guards/rate-limit.guard.d.ts +16 -0
  160. package/dist/guards/rate-limit.guard.d.ts.map +1 -0
  161. package/dist/guards/rate-limit.guard.js +89 -0
  162. package/dist/guards/rate-limit.guard.js.map +1 -0
  163. package/dist/guards/roles.guard.d.ts +8 -0
  164. package/dist/guards/roles.guard.d.ts.map +1 -0
  165. package/dist/guards/roles.guard.js +48 -0
  166. package/dist/guards/roles.guard.js.map +1 -0
  167. package/dist/guards/websocket-auth.guard.d.ts +8 -0
  168. package/dist/guards/websocket-auth.guard.d.ts.map +1 -0
  169. package/dist/guards/websocket-auth.guard.js +41 -0
  170. package/dist/guards/websocket-auth.guard.js.map +1 -0
  171. package/dist/index.d.ts +46 -0
  172. package/dist/index.d.ts.map +1 -0
  173. package/dist/index.js +38 -0
  174. package/dist/index.js.map +1 -0
  175. package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts +2 -0
  176. package/dist/interceptors/__tests__/compression.interceptor.spec.d.ts.map +1 -0
  177. package/dist/interceptors/__tests__/compression.interceptor.spec.js +93 -0
  178. package/dist/interceptors/__tests__/compression.interceptor.spec.js.map +1 -0
  179. package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts +2 -0
  180. package/dist/interceptors/__tests__/http-logging.interceptor.spec.d.ts.map +1 -0
  181. package/dist/interceptors/__tests__/http-logging.interceptor.spec.js +135 -0
  182. package/dist/interceptors/__tests__/http-logging.interceptor.spec.js.map +1 -0
  183. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts +2 -0
  184. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.d.ts.map +1 -0
  185. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js +39 -0
  186. package/dist/interceptors/__tests__/request-id-response.interceptor.spec.js.map +1 -0
  187. package/dist/interceptors/__tests__/response.interceptor.spec.d.ts +2 -0
  188. package/dist/interceptors/__tests__/response.interceptor.spec.d.ts.map +1 -0
  189. package/dist/interceptors/__tests__/response.interceptor.spec.js +95 -0
  190. package/dist/interceptors/__tests__/response.interceptor.spec.js.map +1 -0
  191. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts +2 -0
  192. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.d.ts.map +1 -0
  193. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js +113 -0
  194. package/dist/interceptors/__tests__/rpc-logging.interceptor.spec.js.map +1 -0
  195. package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts +2 -0
  196. package/dist/interceptors/__tests__/serialize.interceptor.spec.d.ts.map +1 -0
  197. package/dist/interceptors/__tests__/serialize.interceptor.spec.js +114 -0
  198. package/dist/interceptors/__tests__/serialize.interceptor.spec.js.map +1 -0
  199. package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts +2 -0
  200. package/dist/interceptors/__tests__/unified.interceptor.spec.d.ts.map +1 -0
  201. package/dist/interceptors/__tests__/unified.interceptor.spec.js +256 -0
  202. package/dist/interceptors/__tests__/unified.interceptor.spec.js.map +1 -0
  203. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts +2 -0
  204. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.d.ts.map +1 -0
  205. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js +119 -0
  206. package/dist/interceptors/__tests__/websocket-logging.interceptor.spec.js.map +1 -0
  207. package/dist/interceptors/compression.interceptor.d.ts +10 -0
  208. package/dist/interceptors/compression.interceptor.d.ts.map +1 -0
  209. package/dist/interceptors/compression.interceptor.js +53 -0
  210. package/dist/interceptors/compression.interceptor.js.map +1 -0
  211. package/dist/interceptors/http-logging.interceptor.d.ts +9 -0
  212. package/dist/interceptors/http-logging.interceptor.d.ts.map +1 -0
  213. package/dist/interceptors/http-logging.interceptor.js +41 -0
  214. package/dist/interceptors/http-logging.interceptor.js.map +1 -0
  215. package/dist/interceptors/request-id-response.interceptor.d.ts +6 -0
  216. package/dist/interceptors/request-id-response.interceptor.d.ts.map +1 -0
  217. package/dist/interceptors/request-id-response.interceptor.js +27 -0
  218. package/dist/interceptors/request-id-response.interceptor.js.map +1 -0
  219. package/dist/interceptors/response.interceptor.d.ts +8 -0
  220. package/dist/interceptors/response.interceptor.d.ts.map +1 -0
  221. package/dist/interceptors/response.interceptor.js +42 -0
  222. package/dist/interceptors/response.interceptor.js.map +1 -0
  223. package/dist/interceptors/rpc-logging.interceptor.d.ts +9 -0
  224. package/dist/interceptors/rpc-logging.interceptor.d.ts.map +1 -0
  225. package/dist/interceptors/rpc-logging.interceptor.js +31 -0
  226. package/dist/interceptors/rpc-logging.interceptor.js.map +1 -0
  227. package/dist/interceptors/serialize.interceptor.d.ts +9 -0
  228. package/dist/interceptors/serialize.interceptor.d.ts.map +1 -0
  229. package/dist/interceptors/serialize.interceptor.js +48 -0
  230. package/dist/interceptors/serialize.interceptor.js.map +1 -0
  231. package/dist/interceptors/unified.interceptor.d.ts +12 -0
  232. package/dist/interceptors/unified.interceptor.d.ts.map +1 -0
  233. package/dist/interceptors/unified.interceptor.js +54 -0
  234. package/dist/interceptors/unified.interceptor.js.map +1 -0
  235. package/dist/interceptors/websocket-logging.interceptor.d.ts +9 -0
  236. package/dist/interceptors/websocket-logging.interceptor.d.ts.map +1 -0
  237. package/dist/interceptors/websocket-logging.interceptor.js +36 -0
  238. package/dist/interceptors/websocket-logging.interceptor.js.map +1 -0
  239. package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts +2 -0
  240. package/dist/pipes/__tests__/file-validation.pipe.spec.d.ts.map +1 -0
  241. package/dist/pipes/__tests__/file-validation.pipe.spec.js +60 -0
  242. package/dist/pipes/__tests__/file-validation.pipe.spec.js.map +1 -0
  243. package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts +2 -0
  244. package/dist/pipes/__tests__/header-validation.pipe.spec.d.ts.map +1 -0
  245. package/dist/pipes/__tests__/header-validation.pipe.spec.js +111 -0
  246. package/dist/pipes/__tests__/header-validation.pipe.spec.js.map +1 -0
  247. package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts +2 -0
  248. package/dist/pipes/__tests__/http-validation.pipe.spec.d.ts.map +1 -0
  249. package/dist/pipes/__tests__/http-validation.pipe.spec.js +114 -0
  250. package/dist/pipes/__tests__/http-validation.pipe.spec.js.map +1 -0
  251. package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts +2 -0
  252. package/dist/pipes/__tests__/query-validation.pipe.spec.d.ts.map +1 -0
  253. package/dist/pipes/__tests__/query-validation.pipe.spec.js +103 -0
  254. package/dist/pipes/__tests__/query-validation.pipe.spec.js.map +1 -0
  255. package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts +2 -0
  256. package/dist/pipes/__tests__/rpc-validation.pipe.spec.d.ts.map +1 -0
  257. package/dist/pipes/__tests__/rpc-validation.pipe.spec.js +126 -0
  258. package/dist/pipes/__tests__/rpc-validation.pipe.spec.js.map +1 -0
  259. package/dist/pipes/file-validation.pipe.d.ts +10 -0
  260. package/dist/pipes/file-validation.pipe.d.ts.map +1 -0
  261. package/dist/pipes/file-validation.pipe.js +41 -0
  262. package/dist/pipes/file-validation.pipe.js.map +1 -0
  263. package/dist/pipes/header-validation.pipe.d.ts +8 -0
  264. package/dist/pipes/header-validation.pipe.d.ts.map +1 -0
  265. package/dist/pipes/header-validation.pipe.js +58 -0
  266. package/dist/pipes/header-validation.pipe.js.map +1 -0
  267. package/dist/pipes/http-validation.pipe.d.ts +8 -0
  268. package/dist/pipes/http-validation.pipe.d.ts.map +1 -0
  269. package/dist/pipes/http-validation.pipe.js +41 -0
  270. package/dist/pipes/http-validation.pipe.js.map +1 -0
  271. package/dist/pipes/query-validation.pipe.d.ts +8 -0
  272. package/dist/pipes/query-validation.pipe.d.ts.map +1 -0
  273. package/dist/pipes/query-validation.pipe.js +58 -0
  274. package/dist/pipes/query-validation.pipe.js.map +1 -0
  275. package/dist/pipes/rpc-validation.pipe.d.ts +8 -0
  276. package/dist/pipes/rpc-validation.pipe.d.ts.map +1 -0
  277. package/dist/pipes/rpc-validation.pipe.js +49 -0
  278. package/dist/pipes/rpc-validation.pipe.js.map +1 -0
  279. package/dist/types/circuit-breaker-types.d.ts +19 -0
  280. package/dist/types/circuit-breaker-types.d.ts.map +1 -0
  281. package/dist/types/circuit-breaker-types.js +8 -0
  282. package/dist/types/circuit-breaker-types.js.map +1 -0
  283. package/dist/types/compression-types.d.ts +22 -0
  284. package/dist/types/compression-types.d.ts.map +1 -0
  285. package/dist/types/compression-types.js +2 -0
  286. package/dist/types/compression-types.js.map +1 -0
  287. package/dist/types/context-types.d.ts +18 -0
  288. package/dist/types/context-types.d.ts.map +1 -0
  289. package/dist/types/context-types.js +8 -0
  290. package/dist/types/context-types.js.map +1 -0
  291. package/dist/types/cors-types.d.ts +11 -0
  292. package/dist/types/cors-types.d.ts.map +1 -0
  293. package/dist/types/cors-types.js +2 -0
  294. package/dist/types/cors-types.js.map +1 -0
  295. package/dist/types/error-types.d.ts +13 -0
  296. package/dist/types/error-types.d.ts.map +1 -0
  297. package/dist/types/error-types.js +15 -0
  298. package/dist/types/error-types.js.map +1 -0
  299. package/dist/types/file-types.d.ts +13 -0
  300. package/dist/types/file-types.d.ts.map +1 -0
  301. package/dist/types/file-types.js +2 -0
  302. package/dist/types/file-types.js.map +1 -0
  303. package/dist/types/file-validation-types.d.ts +10 -0
  304. package/dist/types/file-validation-types.d.ts.map +1 -0
  305. package/dist/types/file-validation-types.js +2 -0
  306. package/dist/types/file-validation-types.js.map +1 -0
  307. package/dist/types/get-service-path-types.d.ts +16 -0
  308. package/dist/types/get-service-path-types.d.ts.map +1 -0
  309. package/dist/types/get-service-path-types.js +2 -0
  310. package/dist/types/get-service-path-types.js.map +1 -0
  311. package/dist/types/guard-types.d.ts +5 -0
  312. package/dist/types/guard-types.d.ts.map +1 -0
  313. package/dist/types/guard-types.js +2 -0
  314. package/dist/types/guard-types.js.map +1 -0
  315. package/dist/types/http-response.d.ts +19 -0
  316. package/dist/types/http-response.d.ts.map +1 -0
  317. package/dist/types/http-response.js +2 -0
  318. package/dist/types/http-response.js.map +1 -0
  319. package/dist/types/rpc-types.d.ts +21 -0
  320. package/dist/types/rpc-types.d.ts.map +1 -0
  321. package/dist/types/rpc-types.js +17 -0
  322. package/dist/types/rpc-types.js.map +1 -0
  323. package/dist/types/versioning-types.d.ts +8 -0
  324. package/dist/types/versioning-types.d.ts.map +1 -0
  325. package/dist/types/versioning-types.js +2 -0
  326. package/dist/types/versioning-types.js.map +1 -0
  327. package/dist/utils/__tests__/circuit-breaker.spec.d.ts +2 -0
  328. package/dist/utils/__tests__/circuit-breaker.spec.d.ts.map +1 -0
  329. package/dist/utils/__tests__/circuit-breaker.spec.js +206 -0
  330. package/dist/utils/__tests__/circuit-breaker.spec.js.map +1 -0
  331. package/dist/utils/__tests__/compression.utils.spec.d.ts +2 -0
  332. package/dist/utils/__tests__/compression.utils.spec.d.ts.map +1 -0
  333. package/dist/utils/__tests__/compression.utils.spec.js +106 -0
  334. package/dist/utils/__tests__/compression.utils.spec.js.map +1 -0
  335. package/dist/utils/__tests__/context.utils.spec.d.ts +2 -0
  336. package/dist/utils/__tests__/context.utils.spec.d.ts.map +1 -0
  337. package/dist/utils/__tests__/context.utils.spec.js +112 -0
  338. package/dist/utils/__tests__/context.utils.spec.js.map +1 -0
  339. package/dist/utils/__tests__/cors.utils.spec.d.ts +2 -0
  340. package/dist/utils/__tests__/cors.utils.spec.d.ts.map +1 -0
  341. package/dist/utils/__tests__/cors.utils.spec.js +54 -0
  342. package/dist/utils/__tests__/cors.utils.spec.js.map +1 -0
  343. package/dist/utils/__tests__/env-validator.spec.d.ts +2 -0
  344. package/dist/utils/__tests__/env-validator.spec.d.ts.map +1 -0
  345. package/dist/utils/__tests__/env-validator.spec.js +88 -0
  346. package/dist/utils/__tests__/env-validator.spec.js.map +1 -0
  347. package/dist/utils/__tests__/file.utils.spec.d.ts +2 -0
  348. package/dist/utils/__tests__/file.utils.spec.d.ts.map +1 -0
  349. package/dist/utils/__tests__/file.utils.spec.js +95 -0
  350. package/dist/utils/__tests__/file.utils.spec.js.map +1 -0
  351. package/dist/utils/__tests__/get-service-path.spec.d.ts +2 -0
  352. package/dist/utils/__tests__/get-service-path.spec.d.ts.map +1 -0
  353. package/dist/utils/__tests__/get-service-path.spec.js +385 -0
  354. package/dist/utils/__tests__/get-service-path.spec.js.map +1 -0
  355. package/dist/utils/__tests__/versioning.utils.spec.d.ts +2 -0
  356. package/dist/utils/__tests__/versioning.utils.spec.d.ts.map +1 -0
  357. package/dist/utils/__tests__/versioning.utils.spec.js +66 -0
  358. package/dist/utils/__tests__/versioning.utils.spec.js.map +1 -0
  359. package/dist/utils/circuit-breaker.d.ts +15 -0
  360. package/dist/utils/circuit-breaker.d.ts.map +1 -0
  361. package/dist/utils/circuit-breaker.js +96 -0
  362. package/dist/utils/circuit-breaker.js.map +1 -0
  363. package/dist/utils/compression.utils.d.ts +3 -0
  364. package/dist/utils/compression.utils.d.ts.map +1 -0
  365. package/dist/utils/compression.utils.js +25 -0
  366. package/dist/utils/compression.utils.js.map +1 -0
  367. package/dist/utils/context.utils.d.ts +7 -0
  368. package/dist/utils/context.utils.d.ts.map +1 -0
  369. package/dist/utils/context.utils.js +24 -0
  370. package/dist/utils/context.utils.js.map +1 -0
  371. package/dist/utils/cors.utils.d.ts +4 -0
  372. package/dist/utils/cors.utils.d.ts.map +1 -0
  373. package/dist/utils/cors.utils.js +23 -0
  374. package/dist/utils/cors.utils.js.map +1 -0
  375. package/dist/utils/env-validator.d.ts +2 -0
  376. package/dist/utils/env-validator.d.ts.map +1 -0
  377. package/dist/utils/env-validator.js +22 -0
  378. package/dist/utils/env-validator.js.map +1 -0
  379. package/dist/utils/file.utils.d.ts +6 -0
  380. package/dist/utils/file.utils.d.ts.map +1 -0
  381. package/dist/utils/file.utils.js +42 -0
  382. package/dist/utils/file.utils.js.map +1 -0
  383. package/dist/utils/get-service-path.d.ts +9 -0
  384. package/dist/utils/get-service-path.d.ts.map +1 -0
  385. package/dist/utils/get-service-path.js +65 -0
  386. package/dist/utils/get-service-path.js.map +1 -0
  387. package/dist/utils/versioning.utils.d.ts +4 -0
  388. package/dist/utils/versioning.utils.d.ts.map +1 -0
  389. package/dist/utils/versioning.utils.js +30 -0
  390. package/dist/utils/versioning.utils.js.map +1 -0
  391. package/package.json +95 -0
@@ -0,0 +1,667 @@
1
+ import { describe, it, expect } from "@jest/globals";
2
+ import { HttpException, HttpStatus } from "@nestjs/common";
3
+ import { RpcException } from "@nestjs/microservices";
4
+ import HttpError from "../../errors/http.error.js";
5
+ import RpcError from "../../errors/rpc.error.js";
6
+ import SocketError from "../../errors/socket.error.js";
7
+ import { ErrorType } from "../../types/error-types.js";
8
+ import { RpcErrorType } from "../../types/rpc-types.js";
9
+ describe("HttpError", () => {
10
+ describe("конструктор", () => {
11
+ it("должен создать ошибку с сообщением", () => {
12
+ const error = new HttpError("Test error message");
13
+ expect(error).toBeInstanceOf(HttpError);
14
+ expect(error).toBeInstanceOf(HttpException);
15
+ expect(error.message).toBe("Test error message");
16
+ expect(error.name).toBe("HttpError");
17
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
18
+ });
19
+ it("должен создать ошибку со статус-кодом", () => {
20
+ const error = new HttpError("Test error", HttpStatus.BAD_REQUEST);
21
+ expect(error.message).toBe("Test error");
22
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
23
+ });
24
+ it("должен создать ошибку со всеми параметрами", () => {
25
+ const originalError = new Error("Original error");
26
+ const error = new HttpError("Test error", HttpStatus.NOT_FOUND, originalError);
27
+ expect(error.message).toBe("Test error");
28
+ expect(error.getStatus()).toBe(HttpStatus.NOT_FOUND);
29
+ });
30
+ });
31
+ describe("fromUnknown", () => {
32
+ it("должен создать HttpError из Error", () => {
33
+ const originalError = new Error("Original error message");
34
+ const error = HttpError.fromUnknown(originalError);
35
+ expect(error).toBeInstanceOf(HttpError);
36
+ expect(error).toBeInstanceOf(HttpException);
37
+ expect(error.message).toBe("Original error message");
38
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
39
+ });
40
+ it("должен создать HttpError из строки", () => {
41
+ const error = HttpError.fromUnknown("String error");
42
+ expect(error).toBeInstanceOf(HttpError);
43
+ expect(error.message).toBe("String error");
44
+ });
45
+ it("должен создать HttpError из числа", () => {
46
+ const error = HttpError.fromUnknown(123);
47
+ expect(error).toBeInstanceOf(HttpError);
48
+ expect(error.message).toBe("123");
49
+ });
50
+ it("должен вернуть тот же HttpError если передан HttpError", () => {
51
+ const originalError = new HttpError("Original HttpError");
52
+ const error = HttpError.fromUnknown(originalError);
53
+ expect(error).toBe(originalError);
54
+ });
55
+ it("должен создать HttpError из объекта с message", () => {
56
+ const errorObject = { message: "Server error" };
57
+ const error = HttpError.fromUnknown(errorObject);
58
+ expect(error).toBeInstanceOf(HttpError);
59
+ expect(error.message).toBe("Server error");
60
+ });
61
+ it("должен создать HttpError из null", () => {
62
+ const error = HttpError.fromUnknown(null);
63
+ expect(error).toBeInstanceOf(HttpError);
64
+ expect(error.message).toBe("null");
65
+ });
66
+ it("должен создать HttpError из undefined", () => {
67
+ const error = HttpError.fromUnknown(undefined);
68
+ expect(error).toBeInstanceOf(HttpError);
69
+ expect(error.message).toBe("undefined");
70
+ });
71
+ it("должен преобразовать SocketError в HttpError", () => {
72
+ const socketError = new SocketError("Socket error");
73
+ const error = HttpError.fromUnknown(socketError);
74
+ expect(error).toBeInstanceOf(HttpError);
75
+ expect(error.message).toBe("Socket error");
76
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
77
+ });
78
+ it("должен преобразовать SocketError с объектным response", () => {
79
+ const socketError = new SocketError("Socket error message");
80
+ const error = HttpError.fromUnknown(socketError);
81
+ expect(error).toBeInstanceOf(HttpError);
82
+ expect(error.message).toBe("Socket error message");
83
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
84
+ });
85
+ it("должен преобразовать SocketError со строковым response (fallback)", () => {
86
+ // Создаем SocketError и мокаем getMessage чтобы вернуть строку
87
+ const socketError = new SocketError("Socket error");
88
+ const originalGetMessage = socketError.getMessage.bind(socketError);
89
+ jest.spyOn(socketError, "getMessage").mockReturnValue("String response");
90
+ const error = HttpError.fromUnknown(socketError);
91
+ expect(error).toBeInstanceOf(HttpError);
92
+ expect(error.message).toBe("String response");
93
+ socketError.getMessage = originalGetMessage;
94
+ });
95
+ it("должен преобразовать SocketError с response без message (fallback на String(res))", () => {
96
+ // Создаем SocketError и мокаем getMessage чтобы вернуть строку
97
+ const socketError = new SocketError("Socket error message");
98
+ const originalGetMessage = socketError.getMessage.bind(socketError);
99
+ jest.spyOn(socketError, "getMessage").mockReturnValue("[object Object]");
100
+ const error = HttpError.fromUnknown(socketError);
101
+ expect(error).toBeInstanceOf(HttpError);
102
+ expect(error.message).toBe("[object Object]");
103
+ socketError.getMessage = originalGetMessage;
104
+ });
105
+ it("должен преобразовать SocketError с response null (fallback на String(res))", () => {
106
+ // Создаем SocketError - код использует getMessage(), который вернет message
107
+ const socketError = new SocketError("Socket error message");
108
+ const error = HttpError.fromUnknown(socketError);
109
+ expect(error).toBeInstanceOf(HttpError);
110
+ expect(error.message).toBe("Socket error message");
111
+ });
112
+ it("должен преобразовать RpcError в HttpError с правильным статусом", () => {
113
+ const rpcError = new RpcError("Bad request", RpcErrorType.BAD_REQUEST, HttpStatus.BAD_REQUEST);
114
+ const error = HttpError.fromUnknown(rpcError);
115
+ expect(error).toBeInstanceOf(HttpError);
116
+ expect(error.message).toBe("Bad request");
117
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
118
+ });
119
+ it("должен преобразовать RpcException в HttpError", () => {
120
+ const rpcException = new RpcException("RPC error");
121
+ const error = HttpError.fromUnknown(rpcException);
122
+ expect(error).toBeInstanceOf(HttpError);
123
+ expect(error.message).toBe("RPC error");
124
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
125
+ });
126
+ it("должен преобразовать RpcException который является также RpcError (покрытие ветки instanceof RpcError)", () => {
127
+ // Создаем RpcException и делаем его также RpcError через прототип
128
+ const rpcException = new RpcException("RPC error message");
129
+ // Устанавливаем прототип чтобы объект был одновременно RpcError и RpcException
130
+ Object.setPrototypeOf(rpcException, RpcError.prototype);
131
+ // Добавляем свойство statusCode
132
+ rpcException.statusCode = HttpStatus.BAD_REQUEST;
133
+ const error = HttpError.fromUnknown(rpcException);
134
+ expect(error).toBeInstanceOf(HttpError);
135
+ expect(error.message).toBe("RPC error message");
136
+ // Проверяем что используется statusCode из RpcError если error instanceof RpcError
137
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
138
+ });
139
+ it("должен покрыть строку 141 - RpcException который также является RpcError в блоке RPC_EXCEPTION", () => {
140
+ // Создаем реальный RpcError, который будет определен как RPC_EXCEPTION
141
+ // через мок getErrorType, но затем в блоке RPC_EXCEPTION
142
+ // пройдет проверку instanceof RpcError
143
+ const rpcError = new RpcError("RPC error message", RpcErrorType.BAD_REQUEST, HttpStatus.BAD_REQUEST);
144
+ // Мокаем getErrorType чтобы вернуть RPC_EXCEPTION вместо RPC_ERROR
145
+ const getErrorTypeSpy = jest.spyOn(HttpError, "getErrorType");
146
+ getErrorTypeSpy.mockImplementation((error) => {
147
+ // Если это наш специальный случай, возвращаем RPC_EXCEPTION
148
+ if (error === rpcError) {
149
+ return ErrorType.RPC_EXCEPTION;
150
+ }
151
+ // Иначе используем оригинальную логику через рефлексию
152
+ const originalMethod = HttpError.getErrorType;
153
+ return originalMethod.call(HttpError, error);
154
+ });
155
+ const error = HttpError.fromUnknown(rpcError);
156
+ expect(error).toBeInstanceOf(HttpError);
157
+ // RpcError.getError() возвращает объект с message, errorType и statusCode
158
+ // String() на объекте вернет строковое представление объекта
159
+ expect(error.message).toContain("RPC error message");
160
+ // Проверяем что используется statusCode из RpcError если error instanceof RpcError
161
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
162
+ // Восстанавливаем оригинальный метод
163
+ getErrorTypeSpy.mockRestore();
164
+ });
165
+ it("должен преобразовать HttpException в HttpError с сохранением статуса", () => {
166
+ const httpException = new HttpException("Not found", HttpStatus.NOT_FOUND);
167
+ const error = HttpError.fromUnknown(httpException);
168
+ expect(error).toBeInstanceOf(HttpError);
169
+ expect(error.getStatus()).toBe(HttpStatus.NOT_FOUND);
170
+ });
171
+ it("должен преобразовать HttpException с массивом message", () => {
172
+ const httpException = new HttpException({ error: "BadRequest", message: ["Error 1", "Error 2"] }, HttpStatus.BAD_REQUEST);
173
+ const error = HttpError.fromUnknown(httpException);
174
+ expect(error).toBeInstanceOf(HttpError);
175
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
176
+ expect(error.message).toBe("Error 1; Error 2");
177
+ });
178
+ it("должен преобразовать HttpException с message не строкой и не массивом", () => {
179
+ const httpException = new HttpException({ error: "BadRequest", message: 123 }, HttpStatus.BAD_REQUEST);
180
+ const error = HttpError.fromUnknown(httpException);
181
+ expect(error).toBeInstanceOf(HttpError);
182
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
183
+ expect(error.message).toBe("123");
184
+ });
185
+ it("должен преобразовать SocketError с объектным response", () => {
186
+ const socketError = new SocketError("Socket error message");
187
+ const error = HttpError.fromUnknown(socketError);
188
+ expect(error).toBeInstanceOf(HttpError);
189
+ expect(error.message).toBe("Socket error message");
190
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
191
+ });
192
+ it("должен преобразовать RpcException с объектным errorData", () => {
193
+ const rpcException = new RpcException({
194
+ message: "RPC error message",
195
+ });
196
+ const error = HttpError.fromUnknown(rpcException);
197
+ expect(error).toBeInstanceOf(HttpError);
198
+ expect(error.message).toBe("RPC error message");
199
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
200
+ });
201
+ it("должен преобразовать RpcException с Error в errorData", () => {
202
+ const innerError = new Error("Inner error");
203
+ const rpcException = new RpcException(innerError);
204
+ const error = HttpError.fromUnknown(rpcException);
205
+ expect(error).toBeInstanceOf(HttpError);
206
+ expect(error.message).toBe("Inner error");
207
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
208
+ });
209
+ it("должен преобразовать RpcException с объектным errorData содержащим message и Error", () => {
210
+ const innerError = new Error("Inner error message");
211
+ const rpcException = new RpcException({
212
+ message: "Object message",
213
+ error: innerError,
214
+ });
215
+ const error = HttpError.fromUnknown(rpcException);
216
+ expect(error).toBeInstanceOf(HttpError);
217
+ expect(error.message).toBe("Object message");
218
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
219
+ });
220
+ it("должен преобразовать HttpException с нестандартным response (не строка и не объект с message)", () => {
221
+ const httpException = new HttpException(123, HttpStatus.BAD_REQUEST);
222
+ const error = HttpError.fromUnknown(httpException);
223
+ expect(error).toBeInstanceOf(HttpError);
224
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
225
+ expect(error.message).toBe("123");
226
+ });
227
+ it("должен преобразовать RpcException с объектным errorData без message (fallback на String(errorData))", () => {
228
+ const rpcException = new RpcException({ code: 123 });
229
+ // Мокаем getError чтобы вернуть объект без message
230
+ const originalGetError = rpcException.getError.bind(rpcException);
231
+ jest.spyOn(rpcException, "getError").mockReturnValue({
232
+ code: 123,
233
+ });
234
+ const error = HttpError.fromUnknown(rpcException);
235
+ expect(error).toBeInstanceOf(HttpError);
236
+ expect(error.message).toBe("[object Object]");
237
+ rpcException.getError = originalGetError;
238
+ });
239
+ it("должен преобразовать SocketError с response не строкой и не объектом с message (fallback на String(res))", () => {
240
+ const socketError = {
241
+ getStatus: jest.fn().mockReturnValue(HttpStatus.INTERNAL_SERVER_ERROR),
242
+ getMessage: jest.fn().mockReturnValue("123"),
243
+ message: "",
244
+ };
245
+ Object.setPrototypeOf(socketError, SocketError.prototype);
246
+ const error = HttpError.fromUnknown(socketError);
247
+ expect(error).toBeInstanceOf(HttpError);
248
+ expect(error.message).toBe("123");
249
+ });
250
+ it("должен преобразовать RpcException с errorData не строкой, не Error и не объектом с message (fallback на String(errorData))", () => {
251
+ const rpcException = {
252
+ getError: jest.fn().mockReturnValue(123),
253
+ message: "",
254
+ };
255
+ Object.setPrototypeOf(rpcException, RpcException.prototype);
256
+ const error = HttpError.fromUnknown(rpcException);
257
+ expect(error).toBeInstanceOf(HttpError);
258
+ expect(error.message).toBe("123");
259
+ });
260
+ it("должен преобразовать HttpException с response объектом без message (fallback на String)", () => {
261
+ const httpException = {
262
+ getStatus: jest.fn().mockReturnValue(HttpStatus.BAD_REQUEST),
263
+ getResponse: jest.fn().mockReturnValue({ code: 123 }),
264
+ name: "HttpException",
265
+ };
266
+ Object.setPrototypeOf(httpException, HttpException.prototype);
267
+ const error = HttpError.fromUnknown(httpException);
268
+ expect(error).toBeInstanceOf(HttpError);
269
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
270
+ expect(error.message).toBe("[object Object]");
271
+ });
272
+ it("должен преобразовать HttpException с response не строкой и не объектом (fallback на JSON.stringify)", () => {
273
+ const httpException = {
274
+ getStatus: jest.fn().mockReturnValue(HttpStatus.BAD_REQUEST),
275
+ getResponse: jest.fn().mockReturnValue(123),
276
+ name: "HttpException",
277
+ };
278
+ Object.setPrototypeOf(httpException, HttpException.prototype);
279
+ const error = HttpError.fromUnknown(httpException);
280
+ expect(error).toBeInstanceOf(HttpError);
281
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
282
+ expect(error.message).toBe("123");
283
+ });
284
+ it("должен преобразовать HttpException с response строкой в else ветке", () => {
285
+ const httpException = {
286
+ getStatus: jest.fn().mockReturnValue(HttpStatus.BAD_REQUEST),
287
+ getResponse: jest.fn().mockReturnValue("String response"),
288
+ name: "HttpException",
289
+ };
290
+ Object.setPrototypeOf(httpException, HttpException.prototype);
291
+ const error = HttpError.fromUnknown(httpException);
292
+ expect(error).toBeInstanceOf(HttpError);
293
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
294
+ expect(error.message).toBe("String response");
295
+ });
296
+ it("должен добавить descriptionPrefix к сообщению ошибки", () => {
297
+ const originalError = new Error("Original error message");
298
+ const error = HttpError.fromUnknown(originalError, "Custom prefix");
299
+ expect(error).toBeInstanceOf(HttpError);
300
+ expect(error.message).toBe("Custom prefix: Original error message");
301
+ });
302
+ it("должен добавить descriptionPrefix к HttpException", () => {
303
+ const httpException = new HttpException("Not found", HttpStatus.NOT_FOUND);
304
+ const error = HttpError.fromUnknown(httpException, "API Error");
305
+ expect(error).toBeInstanceOf(HttpError);
306
+ expect(error.message).toBe("API Error: Not found");
307
+ expect(error.getStatus()).toBe(HttpStatus.NOT_FOUND);
308
+ });
309
+ it("должен добавить descriptionPrefix к RpcException", () => {
310
+ const rpcException = new RpcException("RPC error");
311
+ const error = HttpError.fromUnknown(rpcException, "RPC Handler");
312
+ expect(error).toBeInstanceOf(HttpError);
313
+ expect(error.message).toBe("RPC Handler: RPC error");
314
+ });
315
+ it("должен добавить descriptionPrefix к SocketError", () => {
316
+ const socketError = new SocketError("Socket error");
317
+ const error = HttpError.fromUnknown(socketError, "Socket Handler");
318
+ expect(error).toBeInstanceOf(HttpError);
319
+ expect(error.message).toBe("Socket Handler: Socket error");
320
+ });
321
+ it("должен добавить descriptionPrefix к объекту", () => {
322
+ const errorObject = { message: "Server error" };
323
+ const error = HttpError.fromUnknown(errorObject, "Object Handler");
324
+ expect(error).toBeInstanceOf(HttpError);
325
+ expect(error.message).toBe("Object Handler: Server error");
326
+ });
327
+ it("должен добавить descriptionPrefix к строке", () => {
328
+ const error = HttpError.fromUnknown("String error", "String Handler");
329
+ expect(error).toBeInstanceOf(HttpError);
330
+ expect(error.message).toBe("String Handler: String error");
331
+ });
332
+ it("должен сохранить originalError в конструкторе", () => {
333
+ const originalError = new Error("Original error");
334
+ const error = new HttpError("Test error", HttpStatus.BAD_REQUEST, originalError);
335
+ expect(error).toBeInstanceOf(HttpError);
336
+ expect(error.message).toBe("Test error");
337
+ });
338
+ it("должен сохранить originalError при создании через fromUnknown", () => {
339
+ const originalError = new Error("Original error");
340
+ const error = HttpError.fromUnknown(originalError);
341
+ expect(error).toBeInstanceOf(HttpError);
342
+ expect(error.message).toBe("Original error");
343
+ });
344
+ it("должен обработать объект с вложенным error объектом и statusCode", () => {
345
+ const errorObject = {
346
+ error: {
347
+ message: "Nested error message",
348
+ statusCode: HttpStatus.BAD_REQUEST,
349
+ },
350
+ };
351
+ const error = HttpError.fromUnknown(errorObject);
352
+ expect(error).toBeInstanceOf(HttpError);
353
+ expect(error.message).toBe("Nested error message");
354
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
355
+ });
356
+ it("должен обработать объект с error строкой", () => {
357
+ const errorObject = {
358
+ error: "Error string",
359
+ };
360
+ const error = HttpError.fromUnknown(errorObject);
361
+ expect(error).toBeInstanceOf(HttpError);
362
+ expect(error.message).toBe("Error string");
363
+ });
364
+ it("должен обработать объект с message и statusCode на верхнем уровне", () => {
365
+ const errorObject = {
366
+ message: "Top level message",
367
+ statusCode: HttpStatus.NOT_FOUND,
368
+ };
369
+ const error = HttpError.fromUnknown(errorObject);
370
+ expect(error).toBeInstanceOf(HttpError);
371
+ expect(error.message).toBe("Top level message");
372
+ expect(error.getStatus()).toBe(HttpStatus.NOT_FOUND);
373
+ });
374
+ it("должен игнорировать statusCode меньше BAD_REQUEST", () => {
375
+ const errorObject = {
376
+ message: "Error message",
377
+ statusCode: HttpStatus.OK,
378
+ };
379
+ const error = HttpError.fromUnknown(errorObject);
380
+ expect(error).toBeInstanceOf(HttpError);
381
+ expect(error.message).toBe("Error message");
382
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
383
+ });
384
+ it("должен вернуть undefined statusCode когда statusCode отсутствует в объекте", () => {
385
+ const errorObject = {
386
+ message: "Error message",
387
+ };
388
+ const error = HttpError.fromUnknown(errorObject);
389
+ expect(error).toBeInstanceOf(HttpError);
390
+ expect(error.message).toBe("Error message");
391
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
392
+ });
393
+ it("должен вернуть undefined statusCode когда statusCode не является числом", () => {
394
+ const errorObject = {
395
+ message: "Error message",
396
+ statusCode: "400",
397
+ };
398
+ const error = HttpError.fromUnknown(errorObject);
399
+ expect(error).toBeInstanceOf(HttpError);
400
+ expect(error.message).toBe("Error message");
401
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
402
+ });
403
+ it("должен вернуть undefined statusCode когда statusCode равен null", () => {
404
+ const errorObject = {
405
+ message: "Error message",
406
+ statusCode: null,
407
+ };
408
+ const error = HttpError.fromUnknown(errorObject);
409
+ expect(error).toBeInstanceOf(HttpError);
410
+ expect(error.message).toBe("Error message");
411
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
412
+ });
413
+ it("должен вернуть undefined statusCode когда statusCode равен undefined", () => {
414
+ const errorObject = {
415
+ message: "Error message",
416
+ statusCode: undefined,
417
+ };
418
+ const error = HttpError.fromUnknown(errorObject);
419
+ expect(error).toBeInstanceOf(HttpError);
420
+ expect(error.message).toBe("Error message");
421
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
422
+ });
423
+ it("должен вернуть undefined statusCode когда вложенный error объект без statusCode", () => {
424
+ const errorObject = {
425
+ error: {
426
+ message: "Nested error message",
427
+ },
428
+ };
429
+ const error = HttpError.fromUnknown(errorObject);
430
+ expect(error).toBeInstanceOf(HttpError);
431
+ expect(error.message).toBe("Nested error message");
432
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
433
+ });
434
+ it("должен вернуть undefined statusCode когда вложенный error объект со statusCode не числом", () => {
435
+ const errorObject = {
436
+ error: {
437
+ message: "Nested error message",
438
+ statusCode: "bad",
439
+ },
440
+ };
441
+ const error = HttpError.fromUnknown(errorObject);
442
+ expect(error).toBeInstanceOf(HttpError);
443
+ expect(error.message).toBe("Nested error message");
444
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
445
+ });
446
+ it("должен вернуть undefined statusCode когда вложенный error объект со statusCode меньше BAD_REQUEST", () => {
447
+ const errorObject = {
448
+ error: {
449
+ message: "Nested error message",
450
+ statusCode: HttpStatus.OK,
451
+ },
452
+ };
453
+ const error = HttpError.fromUnknown(errorObject);
454
+ expect(error).toBeInstanceOf(HttpError);
455
+ expect(error.message).toBe("Nested error message");
456
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
457
+ });
458
+ it("должен обработать массив как объект через extractFromSerializedError", () => {
459
+ const errorArray = ["error1", "error2"];
460
+ const error = HttpError.fromUnknown(errorArray);
461
+ expect(error).toBeInstanceOf(HttpError);
462
+ expect(error.message).toBeDefined();
463
+ });
464
+ it("должен обработать объект с null через extractFromSerializedError", () => {
465
+ const errorObject = { error: null, message: "Test message" };
466
+ const error = HttpError.fromUnknown(errorObject);
467
+ expect(error).toBeInstanceOf(HttpError);
468
+ expect(error.message).toBe("Test message");
469
+ });
470
+ it("должен обработать DeserializedRpcError объект", () => {
471
+ const deserializedRpcError = {
472
+ errorType: "BAD_REQUEST",
473
+ statusCode: HttpStatus.BAD_REQUEST,
474
+ message: "Deserialized RPC error message",
475
+ };
476
+ const error = HttpError.fromUnknown(deserializedRpcError);
477
+ expect(error).toBeInstanceOf(HttpError);
478
+ expect(error.message).toBe("Deserialized RPC error message");
479
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
480
+ });
481
+ it("должен обработать DeserializedRpcError с некорректным statusCode", () => {
482
+ const deserializedRpcError = {
483
+ errorType: "BAD_REQUEST",
484
+ statusCode: HttpStatus.OK,
485
+ message: "Deserialized RPC error message",
486
+ };
487
+ const error = HttpError.fromUnknown(deserializedRpcError);
488
+ expect(error).toBeInstanceOf(HttpError);
489
+ expect(error.message).toBe("Deserialized RPC error message");
490
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
491
+ });
492
+ it("должен обработать DeserializedRpcError без поля message (попадает в Object)", () => {
493
+ const deserializedRpcError = {
494
+ errorType: "BAD_REQUEST",
495
+ statusCode: HttpStatus.BAD_REQUEST,
496
+ };
497
+ const error = HttpError.fromUnknown(deserializedRpcError);
498
+ expect(error).toBeInstanceOf(HttpError);
499
+ expect(error.message).toBeDefined();
500
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
501
+ });
502
+ it("должен обработать DeserializedRpcError с message равным undefined", () => {
503
+ const deserializedRpcError = {
504
+ errorType: "BAD_REQUEST",
505
+ statusCode: HttpStatus.BAD_REQUEST,
506
+ message: undefined,
507
+ };
508
+ const error = HttpError.fromUnknown(deserializedRpcError);
509
+ expect(error).toBeInstanceOf(HttpError);
510
+ expect(error.message).toBe("RPC error occurred");
511
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
512
+ });
513
+ it("должен обработать NestRpcException объект", () => {
514
+ const nestRpcException = {
515
+ status: "error",
516
+ message: "Nest RPC error message",
517
+ data: {
518
+ statusCode: HttpStatus.BAD_REQUEST,
519
+ },
520
+ };
521
+ const error = HttpError.fromUnknown(nestRpcException);
522
+ expect(error).toBeInstanceOf(HttpError);
523
+ expect(error.message).toBe("Nest RPC error message");
524
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
525
+ });
526
+ it("должен обработать NestRpcException с message в data", () => {
527
+ const nestRpcException = {
528
+ status: "error",
529
+ message: "Top level message",
530
+ data: {
531
+ message: "Data level message",
532
+ statusCode: HttpStatus.NOT_FOUND,
533
+ },
534
+ };
535
+ const error = HttpError.fromUnknown(nestRpcException);
536
+ expect(error).toBeInstanceOf(HttpError);
537
+ expect(error.message).toBe("Data level message");
538
+ expect(error.getStatus()).toBe(HttpStatus.NOT_FOUND);
539
+ });
540
+ it("должен обработать NestRpcException без data", () => {
541
+ const nestRpcException = {
542
+ status: "error",
543
+ message: "Nest RPC error message",
544
+ };
545
+ const error = HttpError.fromUnknown(nestRpcException);
546
+ expect(error).toBeInstanceOf(HttpError);
547
+ expect(error.message).toBe("Nest RPC error message");
548
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
549
+ });
550
+ it("должен обработать NestRpcException с некорректным statusCode в data", () => {
551
+ const nestRpcException = {
552
+ status: "error",
553
+ message: "Nest RPC error message",
554
+ data: {
555
+ statusCode: HttpStatus.OK,
556
+ },
557
+ };
558
+ const error = HttpError.fromUnknown(nestRpcException);
559
+ expect(error).toBeInstanceOf(HttpError);
560
+ expect(error.message).toBe("Nest RPC error message");
561
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
562
+ });
563
+ it("должен обработать NestRpcException без поля message (попадает в Object)", () => {
564
+ const nestRpcException = {
565
+ status: "error",
566
+ data: {
567
+ statusCode: HttpStatus.BAD_REQUEST,
568
+ },
569
+ };
570
+ const error = HttpError.fromUnknown(nestRpcException);
571
+ expect(error).toBeInstanceOf(HttpError);
572
+ expect(error.message).toBeDefined();
573
+ expect(error.getStatus()).toBe(HttpStatus.INTERNAL_SERVER_ERROR);
574
+ });
575
+ it("должен обработать NestRpcException с message равным undefined", () => {
576
+ const nestRpcException = {
577
+ status: "error",
578
+ message: undefined,
579
+ data: {
580
+ statusCode: HttpStatus.BAD_REQUEST,
581
+ },
582
+ };
583
+ const error = HttpError.fromUnknown(nestRpcException);
584
+ expect(error).toBeInstanceOf(HttpError);
585
+ expect(error.message).toBe("RPC error occurred");
586
+ expect(error.getStatus()).toBe(HttpStatus.BAD_REQUEST);
587
+ });
588
+ it("должен обработать extractFromSerializedError с примитивным типом (не объект)", () => {
589
+ const errorString = "Simple string error";
590
+ const error = HttpError.fromUnknown(errorString);
591
+ expect(error).toBeInstanceOf(HttpError);
592
+ expect(error.message).toBe("Simple string error");
593
+ });
594
+ it("должен обработать extractFromSerializedError с объектом error содержащим message", () => {
595
+ const errorObject = {
596
+ error: {
597
+ message: "Nested error message",
598
+ },
599
+ };
600
+ const error = HttpError.fromUnknown(errorObject);
601
+ expect(error).toBeInstanceOf(HttpError);
602
+ expect(error.message).toBe("Nested error message");
603
+ });
604
+ it("должен обработать extractFromSerializedError с объектом error без message", () => {
605
+ const errorObject = {
606
+ error: {
607
+ code: 123,
608
+ },
609
+ };
610
+ const error = HttpError.fromUnknown(errorObject);
611
+ expect(error).toBeInstanceOf(HttpError);
612
+ expect(error.message).toBeDefined();
613
+ });
614
+ it("должен обработать extractFromSerializedError с объектом error null", () => {
615
+ const errorObject = {
616
+ error: null,
617
+ message: "Fallback message",
618
+ };
619
+ const error = HttpError.fromUnknown(errorObject);
620
+ expect(error).toBeInstanceOf(HttpError);
621
+ expect(error.message).toBe("Fallback message");
622
+ });
623
+ it("должен обработать extractFromSerializedError с объектом без error и без message", () => {
624
+ const errorObject = {
625
+ code: 123,
626
+ };
627
+ const error = HttpError.fromUnknown(errorObject);
628
+ expect(error).toBeInstanceOf(HttpError);
629
+ expect(error.message).toBeDefined();
630
+ });
631
+ describe("extractFromSerializedError (приватный метод через рефлексию)", () => {
632
+ it("должен обработать примитивный тип (не объект) через прямой вызов", () => {
633
+ // Используем рефлексию для прямого вызова приватного метода
634
+ // extractFromSerializedError
635
+ const result = HttpError.extractFromSerializedError("primitive string");
636
+ expect(result.message).toBe("primitive string");
637
+ expect(result.statusCode).toBeUndefined();
638
+ });
639
+ it("должен обработать null через прямой вызов", () => {
640
+ const result = HttpError.extractFromSerializedError(null);
641
+ expect(result.message).toBe("null");
642
+ expect(result.statusCode).toBeUndefined();
643
+ });
644
+ it("должен обработать число через прямой вызов", () => {
645
+ const result = HttpError.extractFromSerializedError(123);
646
+ expect(result.message).toBe("123");
647
+ expect(result.statusCode).toBeUndefined();
648
+ });
649
+ });
650
+ describe("instanceof", () => {
651
+ it("должен правильно работать с instanceof HttpException", () => {
652
+ const error = new HttpError("Test");
653
+ expect(error instanceof HttpException).toBe(true);
654
+ });
655
+ it("должен правильно работать с instanceof HttpError", () => {
656
+ const error = new HttpError("Test");
657
+ expect(error instanceof HttpError).toBe(true);
658
+ });
659
+ it("должен правильно работать с instanceof для ошибок созданных через fromUnknown", () => {
660
+ const error = HttpError.fromUnknown(new Error("Test"));
661
+ expect(error instanceof HttpException).toBe(true);
662
+ expect(error instanceof HttpError).toBe(true);
663
+ });
664
+ });
665
+ });
666
+ });
667
+ //# sourceMappingURL=http.error.spec.js.map