@fecommunity/reactpress-server 4.0.0 → 4.0.1

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 (340) hide show
  1. package/README.md +325 -56
  2. package/bin/reactpress-server.js +6 -50
  3. package/dist/app.module.js +30 -18
  4. package/dist/app.module.js.map +1 -1
  5. package/dist/filters/http-exception.filter.js +1 -1
  6. package/dist/filters/http-exception.filter.js.map +1 -1
  7. package/dist/generate-swagger.d.ts +1 -1
  8. package/dist/generate-swagger.js +11 -12
  9. package/dist/generate-swagger.js.map +1 -1
  10. package/dist/interceptors/transform.interceptor.d.ts +6 -2
  11. package/dist/interceptors/transform.interceptor.js +5 -10
  12. package/dist/interceptors/transform.interceptor.js.map +1 -1
  13. package/dist/logger/index.js +4 -5
  14. package/dist/logger/index.js.map +1 -1
  15. package/dist/main.d.ts +1 -3
  16. package/dist/main.js +23 -47
  17. package/dist/main.js.map +1 -1
  18. package/dist/modules/article/article.controller.d.ts +2 -7
  19. package/dist/modules/article/article.controller.js +48 -103
  20. package/dist/modules/article/article.controller.js.map +1 -1
  21. package/dist/modules/article/article.entity.d.ts +0 -4
  22. package/dist/modules/article/article.entity.js +41 -61
  23. package/dist/modules/article/article.entity.js.map +1 -1
  24. package/dist/modules/article/article.module.js +3 -18
  25. package/dist/modules/article/article.module.js.map +1 -1
  26. package/dist/modules/article/article.service.d.ts +2 -16
  27. package/dist/modules/article/article.service.js +29 -151
  28. package/dist/modules/article/article.service.js.map +1 -1
  29. package/dist/modules/auth/auth.controller.js +11 -11
  30. package/dist/modules/auth/auth.controller.js.map +1 -1
  31. package/dist/modules/auth/auth.module.js +4 -4
  32. package/dist/modules/auth/auth.module.js.map +1 -1
  33. package/dist/modules/auth/auth.service.js +7 -8
  34. package/dist/modules/auth/auth.service.js.map +1 -1
  35. package/dist/modules/auth/jwt-auth.guard.js +3 -4
  36. package/dist/modules/auth/jwt-auth.guard.js.map +1 -1
  37. package/dist/modules/auth/jwt.strategy.js +3 -4
  38. package/dist/modules/auth/jwt.strategy.js.map +1 -1
  39. package/dist/modules/auth/roles.guard.js +2 -2
  40. package/dist/modules/auth/roles.guard.js.map +1 -1
  41. package/dist/modules/category/category.controller.js +20 -21
  42. package/dist/modules/category/category.controller.js.map +1 -1
  43. package/dist/modules/category/category.entity.js +13 -13
  44. package/dist/modules/category/category.entity.js.map +1 -1
  45. package/dist/modules/category/category.module.js +1 -1
  46. package/dist/modules/category/category.module.js.map +1 -1
  47. package/dist/modules/category/category.service.js +4 -5
  48. package/dist/modules/category/category.service.js.map +1 -1
  49. package/dist/modules/comment/comment.controller.js +20 -24
  50. package/dist/modules/comment/comment.controller.js.map +1 -1
  51. package/dist/modules/comment/comment.entity.js +31 -31
  52. package/dist/modules/comment/comment.entity.js.map +1 -1
  53. package/dist/modules/comment/comment.module.js +2 -11
  54. package/dist/modules/comment/comment.module.js.map +1 -1
  55. package/dist/modules/comment/comment.service.d.ts +1 -5
  56. package/dist/modules/comment/comment.service.js +16 -43
  57. package/dist/modules/comment/comment.service.js.map +1 -1
  58. package/dist/modules/comment/html.d.ts +1 -1
  59. package/dist/modules/comment/html.js +3 -3
  60. package/dist/modules/comment/html.js.map +1 -1
  61. package/dist/modules/file/file.controller.d.ts +1 -1
  62. package/dist/modules/file/file.controller.js +20 -22
  63. package/dist/modules/file/file.controller.js.map +1 -1
  64. package/dist/modules/file/file.entity.d.ts +0 -7
  65. package/dist/modules/file/file.entity.js +15 -20
  66. package/dist/modules/file/file.entity.js.map +1 -1
  67. package/dist/modules/file/file.module.js +4 -16
  68. package/dist/modules/file/file.module.js.map +1 -1
  69. package/dist/modules/file/file.service.d.ts +1 -6
  70. package/dist/modules/file/file.service.js +38 -88
  71. package/dist/modules/file/file.service.js.map +1 -1
  72. package/dist/modules/install/install.controller.js +5 -5
  73. package/dist/modules/install/install.controller.js.map +1 -1
  74. package/dist/modules/install/install.module.js +1 -1
  75. package/dist/modules/install/install.module.js.map +1 -1
  76. package/dist/modules/install/install.service.js +2 -2
  77. package/dist/modules/install/install.service.js.map +1 -1
  78. package/dist/modules/knowledge/knowledge.controller.js +33 -35
  79. package/dist/modules/knowledge/knowledge.controller.js.map +1 -1
  80. package/dist/modules/knowledge/knowledge.entity.js +33 -33
  81. package/dist/modules/knowledge/knowledge.entity.js.map +1 -1
  82. package/dist/modules/knowledge/knowledge.module.js +1 -1
  83. package/dist/modules/knowledge/knowledge.module.js.map +1 -1
  84. package/dist/modules/knowledge/knowledge.service.js +11 -12
  85. package/dist/modules/knowledge/knowledge.service.js.map +1 -1
  86. package/dist/modules/page/page.controller.js +23 -24
  87. package/dist/modules/page/page.controller.js.map +1 -1
  88. package/dist/modules/page/page.entity.js +27 -27
  89. package/dist/modules/page/page.entity.js.map +1 -1
  90. package/dist/modules/page/page.module.js +1 -1
  91. package/dist/modules/page/page.module.js.map +1 -1
  92. package/dist/modules/page/page.service.js +12 -12
  93. package/dist/modules/page/page.service.js.map +1 -1
  94. package/dist/modules/search/search.controller.js +12 -12
  95. package/dist/modules/search/search.controller.js.map +1 -1
  96. package/dist/modules/search/search.entity.js +13 -13
  97. package/dist/modules/search/search.entity.js.map +1 -1
  98. package/dist/modules/search/search.module.js +1 -1
  99. package/dist/modules/search/search.module.js.map +1 -1
  100. package/dist/modules/search/search.service.js +2 -2
  101. package/dist/modules/search/search.service.js.map +1 -1
  102. package/dist/modules/setting/setting.constant.d.ts +4 -5
  103. package/dist/modules/setting/setting.constant.js +20 -5
  104. package/dist/modules/setting/setting.constant.js.map +1 -1
  105. package/dist/modules/setting/setting.controller.js +11 -11
  106. package/dist/modules/setting/setting.controller.js.map +1 -1
  107. package/dist/modules/setting/setting.entity.d.ts +0 -3
  108. package/dist/modules/setting/setting.entity.js +49 -64
  109. package/dist/modules/setting/setting.entity.js.map +1 -1
  110. package/dist/modules/setting/setting.module.js +2 -2
  111. package/dist/modules/setting/setting.module.js.map +1 -1
  112. package/dist/modules/setting/setting.service.d.ts +2 -13
  113. package/dist/modules/setting/setting.service.js +24 -169
  114. package/dist/modules/setting/setting.service.js.map +1 -1
  115. package/dist/modules/smtp/mail.util.d.ts +6 -7
  116. package/dist/modules/smtp/mail.util.js +9 -5
  117. package/dist/modules/smtp/mail.util.js.map +1 -1
  118. package/dist/modules/smtp/smtp.controller.d.ts +0 -3
  119. package/dist/modules/smtp/smtp.controller.js +14 -27
  120. package/dist/modules/smtp/smtp.controller.js.map +1 -1
  121. package/dist/modules/smtp/smtp.entity.js +15 -15
  122. package/dist/modules/smtp/smtp.entity.js.map +1 -1
  123. package/dist/modules/smtp/smtp.module.js +2 -2
  124. package/dist/modules/smtp/smtp.module.js.map +1 -1
  125. package/dist/modules/smtp/smtp.service.d.ts +0 -14
  126. package/dist/modules/smtp/smtp.service.js +12 -40
  127. package/dist/modules/smtp/smtp.service.js.map +1 -1
  128. package/dist/modules/tag/tag.controller.js +22 -24
  129. package/dist/modules/tag/tag.controller.js.map +1 -1
  130. package/dist/modules/tag/tag.entity.js +12 -12
  131. package/dist/modules/tag/tag.entity.js.map +1 -1
  132. package/dist/modules/tag/tag.module.js +1 -1
  133. package/dist/modules/tag/tag.module.js.map +1 -1
  134. package/dist/modules/tag/tag.service.js +4 -5
  135. package/dist/modules/tag/tag.service.js.map +1 -1
  136. package/dist/modules/user/user.controller.js +28 -39
  137. package/dist/modules/user/user.controller.js.map +1 -1
  138. package/dist/modules/user/user.entity.js +22 -22
  139. package/dist/modules/user/user.entity.js.map +1 -1
  140. package/dist/modules/user/user.module.js +2 -2
  141. package/dist/modules/user/user.module.js.map +1 -1
  142. package/dist/modules/user/user.service.js +14 -18
  143. package/dist/modules/user/user.service.js.map +1 -1
  144. package/dist/modules/view/view.controller.js +19 -20
  145. package/dist/modules/view/view.controller.js.map +1 -1
  146. package/dist/modules/view/view.entity.js +24 -24
  147. package/dist/modules/view/view.entity.js.map +1 -1
  148. package/dist/modules/view/view.module.js +1 -1
  149. package/dist/modules/view/view.module.js.map +1 -1
  150. package/dist/modules/view/view.service.js +4 -4
  151. package/dist/modules/view/view.service.js.map +1 -1
  152. package/dist/public/favicon.png +0 -0
  153. package/dist/starter.d.ts +1 -3
  154. package/dist/starter.js +14 -202
  155. package/dist/starter.js.map +1 -1
  156. package/dist/tsconfig.build.tsbuildinfo +15957 -1
  157. package/dist/utils/date.util.js +1 -1
  158. package/dist/utils/date.util.js.map +1 -1
  159. package/dist/utils/markdown.util.js +1 -1
  160. package/dist/utils/markdown.util.js.map +1 -1
  161. package/dist/utils/oss/aliyun-oss-client.d.ts +1 -3
  162. package/dist/utils/oss/aliyun-oss-client.js +0 -5
  163. package/dist/utils/oss/aliyun-oss-client.js.map +1 -1
  164. package/dist/utils/oss/oss-client.d.ts +1 -3
  165. package/dist/utils/oss/oss-client.js.map +1 -1
  166. package/dist/utils/oss.util.d.ts +1 -3
  167. package/dist/utils/oss.util.js +1 -6
  168. package/dist/utils/oss.util.js.map +1 -1
  169. package/dist/utils/uniqueid.util.js +1 -1
  170. package/dist/utils/uniqueid.util.js.map +1 -1
  171. package/dist/utils/upload.util.d.ts +2 -6
  172. package/dist/utils/upload.util.js +8 -23
  173. package/dist/utils/upload.util.js.map +1 -1
  174. package/dist/utils/user.util.d.ts +0 -1
  175. package/dist/utils/user.util.js +2 -6
  176. package/dist/utils/user.util.js.map +1 -1
  177. package/package.json +32 -36
  178. package/public/favicon.png +0 -0
  179. package/dist/common/api-messages.d.ts +0 -41
  180. package/dist/common/api-messages.js +0 -45
  181. package/dist/common/api-messages.js.map +0 -1
  182. package/dist/database/typeorm-options.d.ts +0 -3
  183. package/dist/database/typeorm-options.js +0 -71
  184. package/dist/database/typeorm-options.js.map +0 -1
  185. package/dist/modules/api-key/api-key.controller.d.ts +0 -14
  186. package/dist/modules/api-key/api-key.controller.js +0 -63
  187. package/dist/modules/api-key/api-key.controller.js.map +0 -1
  188. package/dist/modules/api-key/api-key.entity.d.ts +0 -11
  189. package/dist/modules/api-key/api-key.entity.js +0 -63
  190. package/dist/modules/api-key/api-key.entity.js.map +0 -1
  191. package/dist/modules/api-key/api-key.guard.d.ts +0 -7
  192. package/dist/modules/api-key/api-key.guard.js +0 -39
  193. package/dist/modules/api-key/api-key.guard.js.map +0 -1
  194. package/dist/modules/api-key/api-key.module.d.ts +0 -2
  195. package/dist/modules/api-key/api-key.module.js +0 -28
  196. package/dist/modules/api-key/api-key.module.js.map +0 -1
  197. package/dist/modules/api-key/api-key.service.d.ts +0 -15
  198. package/dist/modules/api-key/api-key.service.js +0 -81
  199. package/dist/modules/api-key/api-key.service.js.map +0 -1
  200. package/dist/modules/article/article-revision.entity.d.ts +0 -11
  201. package/dist/modules/article/article-revision.entity.js +0 -53
  202. package/dist/modules/article/article-revision.entity.js.map +0 -1
  203. package/dist/modules/article/article-slug.util.d.ts +0 -2
  204. package/dist/modules/article/article-slug.util.js +0 -19
  205. package/dist/modules/article/article-slug.util.js.map +0 -1
  206. package/dist/modules/article/scheduled-publish.service.d.ts +0 -13
  207. package/dist/modules/article/scheduled-publish.service.js +0 -65
  208. package/dist/modules/article/scheduled-publish.service.js.map +0 -1
  209. package/dist/modules/bootstrap/bootstrap.constants.d.ts +0 -20
  210. package/dist/modules/bootstrap/bootstrap.constants.js +0 -171
  211. package/dist/modules/bootstrap/bootstrap.constants.js.map +0 -1
  212. package/dist/modules/bootstrap/bootstrap.service.d.ts +0 -22
  213. package/dist/modules/bootstrap/bootstrap.service.js +0 -183
  214. package/dist/modules/bootstrap/bootstrap.service.js.map +0 -1
  215. package/dist/modules/bootstrap/install-locale.d.ts +0 -2
  216. package/dist/modules/bootstrap/install-locale.js +0 -11
  217. package/dist/modules/bootstrap/install-locale.js.map +0 -1
  218. package/dist/modules/extension/extension.module.d.ts +0 -9
  219. package/dist/modules/extension/extension.module.js +0 -52
  220. package/dist/modules/extension/extension.module.js.map +0 -1
  221. package/dist/modules/extension/plugin-loader.service.d.ts +0 -12
  222. package/dist/modules/extension/plugin-loader.service.js +0 -96
  223. package/dist/modules/extension/plugin-loader.service.js.map +0 -1
  224. package/dist/modules/extension/plugin-registry.bridge.d.ts +0 -3
  225. package/dist/modules/extension/plugin-registry.bridge.js +0 -44
  226. package/dist/modules/extension/plugin-registry.bridge.js.map +0 -1
  227. package/dist/modules/extension/plugin.controller.d.ts +0 -22
  228. package/dist/modules/extension/plugin.controller.js +0 -155
  229. package/dist/modules/extension/plugin.controller.js.map +0 -1
  230. package/dist/modules/extension/plugin.service.d.ts +0 -54
  231. package/dist/modules/extension/plugin.service.js +0 -414
  232. package/dist/modules/extension/plugin.service.js.map +0 -1
  233. package/dist/modules/extension/preview-draft.store.d.ts +0 -13
  234. package/dist/modules/extension/preview-draft.store.js +0 -41
  235. package/dist/modules/extension/preview-draft.store.js.map +0 -1
  236. package/dist/modules/extension/theme-registry.bridge.d.ts +0 -56
  237. package/dist/modules/extension/theme-registry.bridge.js +0 -68
  238. package/dist/modules/extension/theme-registry.bridge.js.map +0 -1
  239. package/dist/modules/extension/theme.controller.d.ts +0 -66
  240. package/dist/modules/extension/theme.controller.js +0 -301
  241. package/dist/modules/extension/theme.controller.js.map +0 -1
  242. package/dist/modules/extension/theme.service.d.ts +0 -140
  243. package/dist/modules/extension/theme.service.js +0 -1039
  244. package/dist/modules/extension/theme.service.js.map +0 -1
  245. package/dist/modules/file/content-image-scan.util.d.ts +0 -52
  246. package/dist/modules/file/content-image-scan.util.js +0 -222
  247. package/dist/modules/file/content-image-scan.util.js.map +0 -1
  248. package/dist/modules/file/file-optimization.controller.d.ts +0 -12
  249. package/dist/modules/file/file-optimization.controller.js +0 -79
  250. package/dist/modules/file/file-optimization.controller.js.map +0 -1
  251. package/dist/modules/file/file-optimization.service.d.ts +0 -36
  252. package/dist/modules/file/file-optimization.service.js +0 -387
  253. package/dist/modules/file/file-optimization.service.js.map +0 -1
  254. package/dist/modules/file/file-optimization.types.d.ts +0 -66
  255. package/dist/modules/file/file-optimization.types.js +0 -5
  256. package/dist/modules/file/file-optimization.types.js.map +0 -1
  257. package/dist/modules/file/image-optimizer-plugin.guard.d.ts +0 -7
  258. package/dist/modules/file/image-optimizer-plugin.guard.js +0 -33
  259. package/dist/modules/file/image-optimizer-plugin.guard.js.map +0 -1
  260. package/dist/modules/health/health.controller.d.ts +0 -11
  261. package/dist/modules/health/health.controller.js +0 -55
  262. package/dist/modules/health/health.controller.js.map +0 -1
  263. package/dist/modules/health/health.module.d.ts +0 -2
  264. package/dist/modules/health/health.module.js +0 -20
  265. package/dist/modules/health/health.module.js.map +0 -1
  266. package/dist/modules/hook/hook.module.d.ts +0 -2
  267. package/dist/modules/hook/hook.module.js +0 -22
  268. package/dist/modules/hook/hook.module.js.map +0 -1
  269. package/dist/modules/hook/hook.service.d.ts +0 -26
  270. package/dist/modules/hook/hook.service.js +0 -105
  271. package/dist/modules/hook/hook.service.js.map +0 -1
  272. package/dist/modules/webhook/webhook.controller.d.ts +0 -12
  273. package/dist/modules/webhook/webhook.controller.js +0 -63
  274. package/dist/modules/webhook/webhook.controller.js.map +0 -1
  275. package/dist/modules/webhook/webhook.entity.d.ts +0 -9
  276. package/dist/modules/webhook/webhook.entity.js +0 -54
  277. package/dist/modules/webhook/webhook.entity.js.map +0 -1
  278. package/dist/modules/webhook/webhook.module.d.ts +0 -2
  279. package/dist/modules/webhook/webhook.module.js +0 -27
  280. package/dist/modules/webhook/webhook.module.js.map +0 -1
  281. package/dist/modules/webhook/webhook.service.d.ts +0 -16
  282. package/dist/modules/webhook/webhook.service.js +0 -100
  283. package/dist/modules/webhook/webhook.service.js.map +0 -1
  284. package/dist/node-polyfills.d.ts +0 -18
  285. package/dist/node-polyfills.js +0 -24
  286. package/dist/node-polyfills.js.map +0 -1
  287. package/dist/public/apple-touch-icon.png +0 -0
  288. package/dist/public/favicon-16.png +0 -0
  289. package/dist/public/favicon-32.png +0 -0
  290. package/dist/public/favicon-48.png +0 -0
  291. package/dist/public/favicon.ico +0 -0
  292. package/dist/public/icon-192.png +0 -0
  293. package/dist/public/icon-512.png +0 -0
  294. package/dist/public/logo-200.png +0 -0
  295. package/dist/public/logo-400.png +0 -0
  296. package/dist/public/logo.png +0 -0
  297. package/dist/public/logo.svg +0 -7
  298. package/dist/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  299. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  300. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  301. package/dist/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  302. package/dist/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
  303. package/dist/tsconfig.tsbuildinfo +0 -1
  304. package/dist/utils/html-sanitize.util.d.ts +0 -1
  305. package/dist/utils/html-sanitize.util.js +0 -33
  306. package/dist/utils/html-sanitize.util.js.map +0 -1
  307. package/dist/utils/image-processor.util.d.ts +0 -23
  308. package/dist/utils/image-processor.util.js +0 -88
  309. package/dist/utils/image-processor.util.js.map +0 -1
  310. package/dist/utils/local-api-quiet.util.d.ts +0 -1
  311. package/dist/utils/local-api-quiet.util.js +0 -8
  312. package/dist/utils/local-api-quiet.util.js.map +0 -1
  313. package/dist/utils/project-root.util.d.ts +0 -2
  314. package/dist/utils/project-root.util.js +0 -42
  315. package/dist/utils/project-root.util.js.map +0 -1
  316. package/dist/utils/query-whitelist.util.d.ts +0 -1
  317. package/dist/utils/query-whitelist.util.js +0 -100
  318. package/dist/utils/query-whitelist.util.js.map +0 -1
  319. package/dist/utils/theme-placeholder-cover.d.ts +0 -7
  320. package/dist/utils/theme-placeholder-cover.js +0 -94
  321. package/dist/utils/theme-placeholder-cover.js.map +0 -1
  322. package/dist/utils/upload-url.util.d.ts +0 -4
  323. package/dist/utils/upload-url.util.js +0 -34
  324. package/dist/utils/upload-url.util.js.map +0 -1
  325. package/public/apple-touch-icon.png +0 -0
  326. package/public/favicon-16.png +0 -0
  327. package/public/favicon-32.png +0 -0
  328. package/public/favicon-48.png +0 -0
  329. package/public/favicon.ico +0 -0
  330. package/public/icon-192.png +0 -0
  331. package/public/icon-512.png +0 -0
  332. package/public/logo-200.png +0 -0
  333. package/public/logo-400.png +0 -0
  334. package/public/logo.png +0 -0
  335. package/public/logo.svg +0 -7
  336. package/public/uploads/2026-05-30/QR3X4UZQ93ZTUPGXCFA9II..png +0 -0
  337. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8.webp +0 -0
  338. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_medium.webp +0 -0
  339. package/public/uploads/2026-05-31/BXQV3NX9ZVWHGNOSX9AXD8_thumb.webp +0 -0
  340. package/public/uploads/2026-05-31/I2SZC0ONA7CF31UM46MN56..jpg +0 -0
@@ -1,387 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- var FileOptimizationService_1;
15
- Object.defineProperty(exports, "__esModule", { value: true });
16
- exports.FileOptimizationService = void 0;
17
- const common_1 = require("@nestjs/common");
18
- const config_1 = require("@nestjs/config");
19
- const typeorm_1 = require("@nestjs/typeorm");
20
- const path = require("path");
21
- const typeorm_2 = require("typeorm");
22
- const uniqueid_util_1 = require("../../utils/uniqueid.util");
23
- const date_util_1 = require("../../utils/date.util");
24
- const image_processor_util_1 = require("../../utils/image-processor.util");
25
- const oss_util_1 = require("../../utils/oss.util");
26
- const upload_util_1 = require("../../utils/upload.util");
27
- const upload_url_util_1 = require("../../utils/upload-url.util");
28
- const article_revision_entity_1 = require("../article/article-revision.entity");
29
- const article_entity_1 = require("../article/article.entity");
30
- const page_entity_1 = require("../page/page.entity");
31
- const setting_service_1 = require("../setting/setting.service");
32
- const file_entity_1 = require("./file.entity");
33
- const ESTIMATED_RATIO = 0.4;
34
- function hasVariants(file) {
35
- return Boolean(file.variants && Object.keys(file.variants).length > 0);
36
- }
37
- function isGifType(type) {
38
- return String(type || '').toLowerCase() === 'image/gif';
39
- }
40
- function isSvgType(type) {
41
- return String(type || '').toLowerCase() === 'image/svg+xml';
42
- }
43
- let FileOptimizationService = FileOptimizationService_1 = class FileOptimizationService {
44
- constructor(fileRepository, articleRepository, revisionRepository, pageRepository, settingService, configService) {
45
- this.fileRepository = fileRepository;
46
- this.articleRepository = articleRepository;
47
- this.revisionRepository = revisionRepository;
48
- this.pageRepository = pageRepository;
49
- this.settingService = settingService;
50
- this.configService = configService;
51
- this.logger = new common_1.Logger(FileOptimizationService_1.name);
52
- this.jobs = new Map();
53
- this.oss = new oss_util_1.Oss(this.settingService);
54
- this.localUpload = new upload_util_1.LocalUpload();
55
- }
56
- getUploadBaseUrl() {
57
- return (0, upload_url_util_1.resolveUploadBaseUrl)(this.configService);
58
- }
59
- async persistBuffer(filename, buffer, hasOssConfig) {
60
- if (hasOssConfig) {
61
- return this.oss.putFile(filename, buffer);
62
- }
63
- await this.localUpload.putFile(filename, buffer);
64
- return `${this.getUploadBaseUrl()}/${filename}`;
65
- }
66
- async readStoredFile(filename, hasOssConfig) {
67
- if (hasOssConfig) {
68
- return this.oss.getFile(filename);
69
- }
70
- return this.localUpload.getFile(filename);
71
- }
72
- async removeStoredFile(filename, hasOssConfig) {
73
- if (hasOssConfig) {
74
- await this.oss.deleteFile(filename);
75
- return;
76
- }
77
- await this.localUpload.deleteFile(filename);
78
- }
79
- async fileExists(filename, hasOssConfig) {
80
- try {
81
- await this.readStoredFile(filename, hasOssConfig);
82
- return true;
83
- }
84
- catch (_a) {
85
- return false;
86
- }
87
- }
88
- getJob(jobId) {
89
- const job = this.jobs.get(jobId);
90
- if (!job) {
91
- throw new common_1.NotFoundException('Optimization job not found');
92
- }
93
- return job;
94
- }
95
- async analyze() {
96
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
97
- const files = await this.fileRepository.find({ order: { createAt: 'ASC' } });
98
- const hasOssConfig = await this.oss.hasOssConfig();
99
- let alreadyOptimized = 0;
100
- let needsOptimization = 0;
101
- let nonImage = 0;
102
- let svg = 0;
103
- let gif = 0;
104
- let missing = 0;
105
- let currentBytes = 0;
106
- let estimatedAfterBytes = 0;
107
- for (const file of files) {
108
- if (hasVariants(file)) {
109
- alreadyOptimized += 1;
110
- currentBytes += (_a = file.size) !== null && _a !== void 0 ? _a : 0;
111
- estimatedAfterBytes += (_b = file.size) !== null && _b !== void 0 ? _b : 0;
112
- continue;
113
- }
114
- if (isSvgType(file.type)) {
115
- svg += 1;
116
- currentBytes += (_c = file.size) !== null && _c !== void 0 ? _c : 0;
117
- estimatedAfterBytes += (_d = file.size) !== null && _d !== void 0 ? _d : 0;
118
- continue;
119
- }
120
- if (!(0, image_processor_util_1.isProcessableImage)(file.type)) {
121
- nonImage += 1;
122
- currentBytes += (_e = file.size) !== null && _e !== void 0 ? _e : 0;
123
- estimatedAfterBytes += (_f = file.size) !== null && _f !== void 0 ? _f : 0;
124
- continue;
125
- }
126
- if (isGifType(file.type)) {
127
- gif += 1;
128
- currentBytes += (_g = file.size) !== null && _g !== void 0 ? _g : 0;
129
- estimatedAfterBytes += (_h = file.size) !== null && _h !== void 0 ? _h : 0;
130
- continue;
131
- }
132
- const exists = await this.fileExists(file.filename, hasOssConfig);
133
- if (!exists) {
134
- missing += 1;
135
- continue;
136
- }
137
- needsOptimization += 1;
138
- currentBytes += (_j = file.size) !== null && _j !== void 0 ? _j : 0;
139
- estimatedAfterBytes += Math.round(((_k = file.size) !== null && _k !== void 0 ? _k : 0) * ESTIMATED_RATIO);
140
- }
141
- const [articles, pages] = await Promise.all([
142
- this.countLegacyContentRefs(this.articleRepository, 'article'),
143
- this.countLegacyContentRefs(this.pageRepository, 'page'),
144
- ]);
145
- return {
146
- total: files.length,
147
- alreadyOptimized,
148
- needsOptimization,
149
- skipped: { nonImage, svg, gif, missing },
150
- storageBytes: {
151
- current: currentBytes,
152
- estimatedAfter: estimatedAfterBytes,
153
- estimatedSaved: Math.max(0, currentBytes - estimatedAfterBytes),
154
- },
155
- contentRefs: { articles, pages },
156
- };
157
- }
158
- async countLegacyContentRefs(repo, alias) {
159
- return repo
160
- .createQueryBuilder(alias)
161
- .where(`((${alias}.cover LIKE :upload AND ${alias}.cover NOT LIKE :webp)
162
- OR (${alias}.html LIKE :upload AND ${alias}.html NOT LIKE :webp))`, { upload: '%uploads/%', webp: '%.webp%' })
163
- .getCount();
164
- }
165
- async startJob(options = {}) {
166
- var _a;
167
- const batchSize = Math.min(Math.max((_a = options.batchSize) !== null && _a !== void 0 ? _a : 50, 1), 200);
168
- const skipGif = options.skipGif !== false;
169
- const limit = options.limit && options.limit > 0 ? options.limit : batchSize;
170
- const candidates = await this.listCandidates(skipGif, limit);
171
- const job = {
172
- id: (0, uniqueid_util_1.uniqueid)(),
173
- status: 'pending',
174
- dryRun: Boolean(options.dryRun),
175
- total: candidates.length,
176
- processed: 0,
177
- succeeded: 0,
178
- failed: 0,
179
- skipped: 0,
180
- savedBytes: 0,
181
- urlMap: {},
182
- items: [],
183
- rewriteContent: Boolean(options.rewriteContent),
184
- startedAt: new Date().toISOString(),
185
- };
186
- this.jobs.set(job.id, job);
187
- if (candidates.length === 0) {
188
- job.status = 'completed';
189
- job.finishedAt = new Date().toISOString();
190
- return job;
191
- }
192
- void this.runJob(job.id, options, candidates);
193
- return job;
194
- }
195
- async runJob(jobId, options, candidates) {
196
- var _a;
197
- const job = this.jobs.get(jobId);
198
- if (!job)
199
- return;
200
- job.status = 'running';
201
- try {
202
- const hasOssConfig = await this.oss.hasOssConfig();
203
- for (const file of candidates) {
204
- const item = await this.reprocessOne(file, {
205
- dryRun: job.dryRun,
206
- hasOssConfig,
207
- cleanupOriginals: Boolean(options.cleanupOriginals) && !job.dryRun,
208
- });
209
- job.items.push(item);
210
- job.processed += 1;
211
- if (item.status === 'success') {
212
- job.succeeded += 1;
213
- if (item.oldUrl && item.newUrl) {
214
- job.urlMap[item.oldUrl] = item.newUrl;
215
- this.addUrlVariants(job.urlMap, item.oldUrl, item.newUrl);
216
- }
217
- job.savedBytes += (_a = item.savedBytes) !== null && _a !== void 0 ? _a : 0;
218
- }
219
- else if (item.status === 'skipped') {
220
- job.skipped += 1;
221
- }
222
- else {
223
- job.failed += 1;
224
- }
225
- }
226
- if (job.rewriteContent && !job.dryRun && Object.keys(job.urlMap).length > 0) {
227
- job.contentRewrite = await this.rewriteContentUrls(job.urlMap);
228
- }
229
- job.status = 'completed';
230
- job.finishedAt = new Date().toISOString();
231
- }
232
- catch (err) {
233
- job.status = 'failed';
234
- job.error = err instanceof Error ? err.message : String(err);
235
- job.finishedAt = new Date().toISOString();
236
- this.logger.error(`Optimization job ${jobId} failed: ${job.error}`);
237
- }
238
- }
239
- addUrlVariants(urlMap, oldUrl, newUrl) {
240
- try {
241
- const oldParsed = new URL(oldUrl, 'http://local');
242
- const newParsed = new URL(newUrl, 'http://local');
243
- urlMap[oldParsed.pathname] = newParsed.pathname;
244
- urlMap[oldParsed.pathname.replace(/^\//, '')] = newParsed.pathname.replace(/^\//, '');
245
- }
246
- catch (_a) {
247
- }
248
- }
249
- async listCandidates(skipGif, limit) {
250
- const files = await this.fileRepository.find({ order: { createAt: 'ASC' } });
251
- const hasOssConfig = await this.oss.hasOssConfig();
252
- const result = [];
253
- for (const file of files) {
254
- if (result.length >= limit)
255
- break;
256
- if (hasVariants(file))
257
- continue;
258
- if (!(0, image_processor_util_1.isProcessableImage)(file.type))
259
- continue;
260
- if (skipGif && isGifType(file.type))
261
- continue;
262
- const exists = await this.fileExists(file.filename, hasOssConfig);
263
- if (!exists)
264
- continue;
265
- result.push(file);
266
- }
267
- return result;
268
- }
269
- async reprocessOne(file, opts) {
270
- var _a, _b;
271
- const uploadBase = this.getUploadBaseUrl();
272
- const storedUrl = file.url;
273
- const base = {
274
- fileId: file.id,
275
- originalname: file.originalname,
276
- status: 'failed',
277
- oldUrl: storedUrl,
278
- };
279
- try {
280
- const buffer = await this.readStoredFile(file.filename, opts.hasOssConfig);
281
- const variantList = (0, image_processor_util_1.variantsForScene)('default');
282
- const processedVariants = await (0, image_processor_util_1.processImageVariants)(buffer, variantList);
283
- if (opts.dryRun) {
284
- const primary = (0, image_processor_util_1.primaryVariantForScene)('default');
285
- const processed = processedVariants.get(primary);
286
- return Object.assign(Object.assign({}, base), { status: 'success', savedBytes: Math.max(0, ((_a = file.size) !== null && _a !== void 0 ? _a : 0) - processed.size) });
287
- }
288
- const folder = path.dirname(file.filename);
289
- const baseFilename = `${folder || (0, date_util_1.dateFormat)(new Date(), 'yyyy-MM-dd')}/${(0, uniqueid_util_1.uniqueid)()}.webp`;
290
- const variantsMeta = {};
291
- for (const [variant, processed] of processedVariants.entries()) {
292
- const variantFilename = (0, image_processor_util_1.buildVariantFilename)(baseFilename, variant);
293
- const variantUrl = await this.persistBuffer(variantFilename, processed.buffer, opts.hasOssConfig);
294
- variantsMeta[variant] = {
295
- url: variantUrl,
296
- filename: variantFilename,
297
- width: processed.width,
298
- height: processed.height,
299
- size: processed.size,
300
- };
301
- }
302
- const primaryVariant = (0, image_processor_util_1.primaryVariantForScene)('default');
303
- const primary = variantsMeta[primaryVariant];
304
- const oldFilename = file.filename;
305
- const oldSize = (_b = file.size) !== null && _b !== void 0 ? _b : 0;
306
- const normalizedOldUrl = (0, upload_url_util_1.rewriteBrokenUploadUrl)(storedUrl, uploadBase);
307
- file.originalname = `${path.basename(file.originalname, path.extname(file.originalname))}.webp`;
308
- file.filename = primary.filename;
309
- file.url = primary.url;
310
- file.type = 'image/webp';
311
- file.size = primary.size;
312
- file.variants = variantsMeta;
313
- await this.fileRepository.save(file);
314
- if (opts.cleanupOriginals && oldFilename !== primary.filename) {
315
- await this.removeStoredFile(oldFilename, opts.hasOssConfig);
316
- }
317
- return Object.assign(Object.assign({}, base), { status: 'success', oldUrl: storedUrl.startsWith('undefined/') ? storedUrl : normalizedOldUrl, newUrl: primary.url, savedBytes: Math.max(0, oldSize - primary.size) });
318
- }
319
- catch (err) {
320
- return Object.assign(Object.assign({}, base), { error: err instanceof Error ? err.message : String(err) });
321
- }
322
- }
323
- async rewriteContentUrls(urlMap) {
324
- var _a, _b, _c;
325
- const pairs = Object.entries(urlMap).filter(([oldUrl, newUrl]) => oldUrl && newUrl && oldUrl !== newUrl);
326
- if (pairs.length === 0) {
327
- return { articles: 0, pages: 0, revisions: 0 };
328
- }
329
- let articles = 0;
330
- let pages = 0;
331
- let revisions = 0;
332
- for (const [oldUrl, newUrl] of pairs) {
333
- const pattern = `%${oldUrl}%`;
334
- const articleResult = await this.articleRepository
335
- .createQueryBuilder()
336
- .update(article_entity_1.Article)
337
- .set({
338
- cover: () => `REPLACE(cover, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
339
- content: () => `REPLACE(content, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
340
- html: () => `REPLACE(html, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
341
- })
342
- .where('cover LIKE :pattern OR content LIKE :pattern OR html LIKE :pattern', { pattern })
343
- .execute();
344
- articles += (_a = articleResult.affected) !== null && _a !== void 0 ? _a : 0;
345
- const revisionResult = await this.revisionRepository
346
- .createQueryBuilder()
347
- .update(article_revision_entity_1.ArticleRevision)
348
- .set({
349
- content: () => `REPLACE(content, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
350
- html: () => `REPLACE(html, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
351
- })
352
- .where('content LIKE :pattern OR html LIKE :pattern', { pattern })
353
- .execute();
354
- revisions += (_b = revisionResult.affected) !== null && _b !== void 0 ? _b : 0;
355
- const pageResult = await this.pageRepository
356
- .createQueryBuilder()
357
- .update(page_entity_1.Page)
358
- .set({
359
- cover: () => `REPLACE(cover, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
360
- content: () => `REPLACE(content, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
361
- html: () => `REPLACE(html, '${this.escapeSql(oldUrl)}', '${this.escapeSql(newUrl)}')`,
362
- })
363
- .where('cover LIKE :pattern OR content LIKE :pattern OR html LIKE :pattern', { pattern })
364
- .execute();
365
- pages += (_c = pageResult.affected) !== null && _c !== void 0 ? _c : 0;
366
- }
367
- return { articles, pages, revisions };
368
- }
369
- escapeSql(value) {
370
- return value.replace(/'/g, "''");
371
- }
372
- };
373
- FileOptimizationService = FileOptimizationService_1 = __decorate([
374
- (0, common_1.Injectable)(),
375
- __param(0, (0, typeorm_1.InjectRepository)(file_entity_1.File)),
376
- __param(1, (0, typeorm_1.InjectRepository)(article_entity_1.Article)),
377
- __param(2, (0, typeorm_1.InjectRepository)(article_revision_entity_1.ArticleRevision)),
378
- __param(3, (0, typeorm_1.InjectRepository)(page_entity_1.Page)),
379
- __metadata("design:paramtypes", [typeorm_2.Repository,
380
- typeorm_2.Repository,
381
- typeorm_2.Repository,
382
- typeorm_2.Repository,
383
- setting_service_1.SettingService,
384
- config_1.ConfigService])
385
- ], FileOptimizationService);
386
- exports.FileOptimizationService = FileOptimizationService;
387
- //# sourceMappingURL=file-optimization.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-optimization.service.js","sourceRoot":"","sources":["../../../src/modules/file/file-optimization.service.ts"],"names":[],"mappings":"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"}
@@ -1,66 +0,0 @@
1
- export declare const IMAGE_OPTIMIZER_PLUGIN_ID = "image-optimizer";
2
- export interface ImageOptimizeReport {
3
- total: number;
4
- alreadyOptimized: number;
5
- needsOptimization: number;
6
- skipped: {
7
- nonImage: number;
8
- svg: number;
9
- gif: number;
10
- missing: number;
11
- };
12
- storageBytes: {
13
- current: number;
14
- estimatedAfter: number;
15
- estimatedSaved: number;
16
- };
17
- contentRefs: {
18
- articles: number;
19
- pages: number;
20
- };
21
- }
22
- export interface OptimizeRunOptions {
23
- dryRun?: boolean;
24
- batchSize?: number;
25
- skipGif?: boolean;
26
- rewriteContent?: boolean;
27
- cleanupOriginals?: boolean;
28
- limit?: number;
29
- }
30
- export type OptimizeJobStatus = 'pending' | 'running' | 'completed' | 'failed';
31
- export interface OptimizeJobItemResult {
32
- fileId: string;
33
- originalname: string;
34
- status: 'success' | 'skipped' | 'failed';
35
- oldUrl?: string;
36
- newUrl?: string;
37
- savedBytes?: number;
38
- error?: string;
39
- }
40
- export interface OptimizeJob {
41
- id: string;
42
- status: OptimizeJobStatus;
43
- dryRun: boolean;
44
- total: number;
45
- processed: number;
46
- succeeded: number;
47
- failed: number;
48
- skipped: number;
49
- savedBytes: number;
50
- urlMap: Record<string, string>;
51
- items: OptimizeJobItemResult[];
52
- rewriteContent: boolean;
53
- contentRewrite?: {
54
- articles: number;
55
- pages: number;
56
- revisions: number;
57
- };
58
- error?: string;
59
- startedAt: string;
60
- finishedAt?: string;
61
- }
62
- export interface RewriteContentResult {
63
- articles: number;
64
- pages: number;
65
- revisions: number;
66
- }
@@ -1,5 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.IMAGE_OPTIMIZER_PLUGIN_ID = void 0;
4
- exports.IMAGE_OPTIMIZER_PLUGIN_ID = 'image-optimizer';
5
- //# sourceMappingURL=file-optimization.types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"file-optimization.types.js","sourceRoot":"","sources":["../../../src/modules/file/file-optimization.types.ts"],"names":[],"mappings":";;;AAAa,QAAA,yBAAyB,GAAG,iBAAiB,CAAC"}
@@ -1,7 +0,0 @@
1
- import { CanActivate, ExecutionContext } from '@nestjs/common';
2
- import { PluginService } from '../extension/plugin.service';
3
- export declare class ImageOptimizerPluginGuard implements CanActivate {
4
- private readonly pluginService;
5
- constructor(pluginService: PluginService);
6
- canActivate(_context: ExecutionContext): Promise<boolean>;
7
- }
@@ -1,33 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ImageOptimizerPluginGuard = void 0;
13
- const common_1 = require("@nestjs/common");
14
- const plugin_service_1 = require("../extension/plugin.service");
15
- const file_optimization_types_1 = require("./file-optimization.types");
16
- let ImageOptimizerPluginGuard = class ImageOptimizerPluginGuard {
17
- constructor(pluginService) {
18
- this.pluginService = pluginService;
19
- }
20
- async canActivate(_context) {
21
- const state = await this.pluginService.getPluginState();
22
- if (!state.activePlugins.includes(file_optimization_types_1.IMAGE_OPTIMIZER_PLUGIN_ID)) {
23
- throw new common_1.ForbiddenException('Image optimizer plugin is not active');
24
- }
25
- return true;
26
- }
27
- };
28
- ImageOptimizerPluginGuard = __decorate([
29
- (0, common_1.Injectable)(),
30
- __metadata("design:paramtypes", [plugin_service_1.PluginService])
31
- ], ImageOptimizerPluginGuard);
32
- exports.ImageOptimizerPluginGuard = ImageOptimizerPluginGuard;
33
- //# sourceMappingURL=image-optimizer-plugin.guard.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-optimizer-plugin.guard.js","sourceRoot":"","sources":["../../../src/modules/file/image-optimizer-plugin.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA+F;AAE/F,gEAA4D;AAC5D,uEAAsE;AAG/D,IAAM,yBAAyB,GAA/B,MAAM,yBAAyB;IACpC,YAA6B,aAA4B;QAA5B,kBAAa,GAAb,aAAa,CAAe;IAAG,CAAC;IAE7D,KAAK,CAAC,WAAW,CAAC,QAA0B;QAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,cAAc,EAAE,CAAC;QACxD,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,QAAQ,CAAC,mDAAyB,CAAC,EAAE;YAC5D,MAAM,IAAI,2BAAkB,CAAC,sCAAsC,CAAC,CAAC;SACtE;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAA;AAVY,yBAAyB;IADrC,IAAA,mBAAU,GAAE;qCAEiC,8BAAa;GAD9C,yBAAyB,CAUrC;AAVY,8DAAyB"}
@@ -1,11 +0,0 @@
1
- import { Connection } from 'typeorm';
2
- export declare class HealthController {
3
- private readonly connection;
4
- constructor(connection: Connection);
5
- check(): Promise<{
6
- status: string;
7
- version: string;
8
- database: "up" | "down";
9
- timestamp: string;
10
- }>;
11
- }
@@ -1,55 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- var __metadata = (this && this.__metadata) || function (k, v) {
9
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
- };
11
- var __param = (this && this.__param) || function (paramIndex, decorator) {
12
- return function (target, key) { decorator(target, key, paramIndex); }
13
- };
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.HealthController = void 0;
16
- const common_1 = require("@nestjs/common");
17
- const swagger_1 = require("@nestjs/swagger");
18
- const typeorm_1 = require("@nestjs/typeorm");
19
- const typeorm_2 = require("typeorm");
20
- let HealthController = class HealthController {
21
- constructor(connection) {
22
- this.connection = connection;
23
- }
24
- async check() {
25
- let database = 'down';
26
- try {
27
- await this.connection.query('SELECT 1');
28
- database = 'up';
29
- }
30
- catch (_a) {
31
- database = 'down';
32
- }
33
- return {
34
- status: database === 'up' ? 'ok' : 'degraded',
35
- version: '3.0.0',
36
- database,
37
- timestamp: new Date().toISOString(),
38
- };
39
- }
40
- };
41
- __decorate([
42
- (0, common_1.Get)(),
43
- (0, common_1.HttpCode)(common_1.HttpStatus.OK),
44
- __metadata("design:type", Function),
45
- __metadata("design:paramtypes", []),
46
- __metadata("design:returntype", Promise)
47
- ], HealthController.prototype, "check", null);
48
- HealthController = __decorate([
49
- (0, swagger_1.ApiTags)('Health'),
50
- (0, common_1.Controller)('health'),
51
- __param(0, (0, typeorm_1.InjectConnection)()),
52
- __metadata("design:paramtypes", [typeorm_2.Connection])
53
- ], HealthController);
54
- exports.HealthController = HealthController;
55
- //# sourceMappingURL=health.controller.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.controller.js","sourceRoot":"","sources":["../../../src/modules/health/health.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAuE;AACvE,6CAA0C;AAC1C,6CAAmD;AACnD,qCAAqC;AAI9B,IAAM,gBAAgB,GAAtB,MAAM,gBAAgB;IAC3B,YAAiD,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAIrE,AAAN,KAAK,CAAC,KAAK;QACT,IAAI,QAAQ,GAAkB,MAAM,CAAC;QACrC,IAAI;YACF,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACxC,QAAQ,GAAG,IAAI,CAAC;SACjB;QAAC,WAAM;YACN,QAAQ,GAAG,MAAM,CAAC;SACnB;QAED,OAAO;YACL,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU;YAC7C,OAAO,EAAE,OAAO;YAChB,QAAQ;YACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;CACF,CAAA;AAhBO;IAFL,IAAA,YAAG,GAAE;IACL,IAAA,iBAAQ,EAAC,mBAAU,CAAC,EAAE,CAAC;;;;6CAgBvB;AApBU,gBAAgB;IAF5B,IAAA,iBAAO,EAAC,QAAQ,CAAC;IACjB,IAAA,mBAAU,EAAC,QAAQ,CAAC;IAEN,WAAA,IAAA,0BAAgB,GAAE,CAAA;qCAA8B,oBAAU;GAD5D,gBAAgB,CAqB5B;AArBY,4CAAgB"}
@@ -1,2 +0,0 @@
1
- export declare class HealthModule {
2
- }
@@ -1,20 +0,0 @@
1
- "use strict";
2
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
- 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;
6
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7
- };
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.HealthModule = void 0;
10
- const common_1 = require("@nestjs/common");
11
- const health_controller_1 = require("./health.controller");
12
- let HealthModule = class HealthModule {
13
- };
14
- HealthModule = __decorate([
15
- (0, common_1.Module)({
16
- controllers: [health_controller_1.HealthController],
17
- })
18
- ], HealthModule);
19
- exports.HealthModule = HealthModule;
20
- //# sourceMappingURL=health.module.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"health.module.js","sourceRoot":"","sources":["../../../src/modules/health/health.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AAExC,2DAAuD;AAKhD,IAAM,YAAY,GAAlB,MAAM,YAAY;CAAG,CAAA;AAAf,YAAY;IAHxB,IAAA,eAAM,EAAC;QACN,WAAW,EAAE,CAAC,oCAAgB,CAAC;KAChC,CAAC;GACW,YAAY,CAAG;AAAf,oCAAY"}
@@ -1,2 +0,0 @@
1
- export declare class HookModule {
2
- }