jimpex 7.0.1 → 8.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 (388) hide show
  1. package/CHANGELOG.md +87 -0
  2. package/LICENSE +1 -1
  3. package/README.md +446 -434
  4. package/dist/app/index.d.ts +13 -0
  5. package/dist/app/index.js +19 -0
  6. package/dist/app/index.js.map +1 -0
  7. package/dist/app/jimpex.d.ts +13 -0
  8. package/dist/app/jimpex.js +440 -0
  9. package/dist/app/jimpex.js.map +1 -0
  10. package/dist/controllers/common/config.d.ts +78 -0
  11. package/dist/controllers/common/config.js +89 -0
  12. package/dist/controllers/common/config.js.map +1 -0
  13. package/dist/controllers/common/health.d.ts +82 -0
  14. package/dist/controllers/common/health.js +97 -0
  15. package/dist/controllers/common/health.js.map +1 -0
  16. package/dist/controllers/common/index.d.ts +21 -0
  17. package/dist/controllers/common/index.js +21 -0
  18. package/dist/controllers/common/index.js.map +1 -0
  19. package/dist/controllers/common/statics.d.ts +215 -0
  20. package/dist/controllers/common/statics.js +202 -0
  21. package/dist/controllers/common/statics.js.map +1 -0
  22. package/dist/controllers/index.d.ts +24 -0
  23. package/dist/controllers/index.js +20 -0
  24. package/dist/controllers/index.js.map +1 -0
  25. package/dist/controllers/utils/gateway.d.ts +724 -0
  26. package/dist/controllers/utils/gateway.js +425 -0
  27. package/dist/controllers/utils/gateway.js.map +1 -0
  28. package/dist/controllers/utils/index.d.ts +16 -0
  29. package/dist/controllers/utils/index.js +19 -0
  30. package/dist/controllers/utils/index.js.map +1 -0
  31. package/dist/esm/app/index.js +2 -0
  32. package/dist/esm/app/index.js.map +1 -0
  33. package/dist/esm/app/jimpex.js +415 -0
  34. package/dist/esm/app/jimpex.js.map +1 -0
  35. package/dist/esm/chunk-T2T6Q22Z.js +11 -0
  36. package/dist/esm/chunk-T2T6Q22Z.js.map +1 -0
  37. package/dist/esm/controllers/common/config.js +62 -0
  38. package/dist/esm/controllers/common/config.js.map +1 -0
  39. package/dist/esm/controllers/common/health.js +70 -0
  40. package/dist/esm/controllers/common/health.js.map +1 -0
  41. package/dist/esm/controllers/common/index.js +4 -0
  42. package/dist/esm/controllers/common/index.js.map +1 -0
  43. package/dist/esm/controllers/common/statics.js +173 -0
  44. package/dist/esm/controllers/common/statics.js.map +1 -0
  45. package/dist/esm/controllers/index.js +3 -0
  46. package/dist/esm/controllers/index.js.map +1 -0
  47. package/dist/esm/controllers/utils/gateway.js +404 -0
  48. package/dist/esm/controllers/utils/gateway.js.map +1 -0
  49. package/dist/esm/controllers/utils/index.js +2 -0
  50. package/dist/esm/controllers/utils/index.js.map +1 -0
  51. package/dist/esm/index.js +7 -0
  52. package/dist/esm/index.js.map +1 -0
  53. package/dist/esm/middlewares/common/errorHandler.js +92 -0
  54. package/dist/esm/middlewares/common/errorHandler.js.map +1 -0
  55. package/dist/esm/middlewares/common/forceHTTPS.js +41 -0
  56. package/dist/esm/middlewares/common/forceHTTPS.js.map +1 -0
  57. package/dist/esm/middlewares/common/hsts.js +53 -0
  58. package/dist/esm/middlewares/common/hsts.js.map +1 -0
  59. package/dist/esm/middlewares/common/index.js +4 -0
  60. package/dist/esm/middlewares/common/index.js.map +1 -0
  61. package/dist/esm/middlewares/html/fastHTML.js +104 -0
  62. package/dist/esm/middlewares/html/fastHTML.js.map +1 -0
  63. package/dist/esm/middlewares/html/index.js +3 -0
  64. package/dist/esm/middlewares/html/index.js.map +1 -0
  65. package/dist/esm/middlewares/html/showHTML.js +68 -0
  66. package/dist/esm/middlewares/html/showHTML.js.map +1 -0
  67. package/dist/esm/middlewares/index.js +4 -0
  68. package/dist/esm/middlewares/index.js.map +1 -0
  69. package/dist/esm/middlewares/utils/index.js +2 -0
  70. package/dist/esm/middlewares/utils/index.js.map +1 -0
  71. package/dist/esm/middlewares/utils/versionValidator.js +101 -0
  72. package/dist/esm/middlewares/utils/versionValidator.js.map +1 -0
  73. package/dist/esm/services/common/appError.js +52 -0
  74. package/dist/esm/services/common/appError.js.map +1 -0
  75. package/dist/esm/services/common/httpError.js +19 -0
  76. package/dist/esm/services/common/httpError.js.map +1 -0
  77. package/dist/esm/services/common/index.js +17 -0
  78. package/dist/esm/services/common/index.js.map +1 -0
  79. package/dist/esm/services/common/sendFile.js +27 -0
  80. package/dist/esm/services/common/sendFile.js.map +1 -0
  81. package/dist/esm/services/frontend/frontendFs.js +38 -0
  82. package/dist/esm/services/frontend/frontendFs.js.map +1 -0
  83. package/dist/esm/services/frontend/index.js +11 -0
  84. package/dist/esm/services/frontend/index.js.map +1 -0
  85. package/dist/esm/services/html/htmlGenerator.js +144 -0
  86. package/dist/esm/services/html/htmlGenerator.js.map +1 -0
  87. package/dist/esm/services/html/index.js +11 -0
  88. package/dist/esm/services/html/index.js.map +1 -0
  89. package/dist/esm/services/http/apiClient.js +71 -0
  90. package/dist/esm/services/http/apiClient.js.map +1 -0
  91. package/dist/esm/services/http/http.js +125 -0
  92. package/dist/esm/services/http/http.js.map +1 -0
  93. package/dist/esm/services/http/index.js +17 -0
  94. package/dist/esm/services/http/index.js.map +1 -0
  95. package/dist/esm/services/http/responsesBuilder.js +105 -0
  96. package/dist/esm/services/http/responsesBuilder.js.map +1 -0
  97. package/dist/esm/services/index.js +6 -0
  98. package/dist/esm/services/index.js.map +1 -0
  99. package/dist/esm/services/utils/ensureBearerToken.js +78 -0
  100. package/dist/esm/services/utils/ensureBearerToken.js.map +1 -0
  101. package/dist/esm/services/utils/index.js +11 -0
  102. package/dist/esm/services/utils/index.js.map +1 -0
  103. package/dist/esm/types/events.js +1 -0
  104. package/dist/esm/types/events.js.map +1 -0
  105. package/dist/esm/types/express.js +1 -0
  106. package/dist/esm/types/express.js.map +1 -0
  107. package/dist/esm/types/http.js +1 -0
  108. package/dist/esm/types/http.js.map +1 -0
  109. package/dist/esm/types/index.js +7 -0
  110. package/dist/esm/types/index.js.map +1 -0
  111. package/dist/esm/types/options.js +1 -0
  112. package/dist/esm/types/options.js.map +1 -0
  113. package/dist/esm/types/utils.js +1 -0
  114. package/dist/esm/types/utils.js.map +1 -0
  115. package/dist/esm/types/wootils.js +1 -0
  116. package/dist/esm/types/wootils.js.map +1 -0
  117. package/dist/esm/utils/fns/index.js +5 -0
  118. package/dist/esm/utils/fns/index.js.map +1 -0
  119. package/dist/esm/utils/fns/others.js +6 -0
  120. package/dist/esm/utils/fns/others.js.map +1 -0
  121. package/dist/esm/utils/fns/routes.js +25 -0
  122. package/dist/esm/utils/fns/routes.js.map +1 -0
  123. package/dist/esm/utils/fns/statuses.js +6 -0
  124. package/dist/esm/utils/fns/statuses.js.map +1 -0
  125. package/dist/esm/utils/fns/text.js +6 -0
  126. package/dist/esm/utils/fns/text.js.map +1 -0
  127. package/dist/esm/utils/index.js +3 -0
  128. package/dist/esm/utils/index.js.map +1 -0
  129. package/dist/esm/utils/wrappers.js +41 -0
  130. package/dist/esm/utils/wrappers.js.map +1 -0
  131. package/dist/index.d.ts +46 -0
  132. package/dist/index.js +24 -0
  133. package/dist/index.js.map +1 -0
  134. package/dist/jimpex-7eaee271.d.ts +1278 -0
  135. package/dist/middlewares/common/errorHandler.d.ts +131 -0
  136. package/dist/middlewares/common/errorHandler.js +119 -0
  137. package/dist/middlewares/common/errorHandler.js.map +1 -0
  138. package/dist/middlewares/common/forceHTTPS.d.ts +68 -0
  139. package/dist/middlewares/common/forceHTTPS.js +68 -0
  140. package/dist/middlewares/common/forceHTTPS.js.map +1 -0
  141. package/dist/middlewares/common/hsts.d.ts +109 -0
  142. package/dist/middlewares/common/hsts.js +80 -0
  143. package/dist/middlewares/common/hsts.js.map +1 -0
  144. package/dist/middlewares/common/index.d.ts +21 -0
  145. package/dist/middlewares/common/index.js +21 -0
  146. package/dist/middlewares/common/index.js.map +1 -0
  147. package/dist/middlewares/html/fastHTML.d.ts +180 -0
  148. package/dist/middlewares/html/fastHTML.js +131 -0
  149. package/dist/middlewares/html/fastHTML.js.map +1 -0
  150. package/dist/middlewares/html/index.d.ts +21 -0
  151. package/dist/middlewares/html/index.js +20 -0
  152. package/dist/middlewares/html/index.js.map +1 -0
  153. package/dist/middlewares/html/showHTML.d.ts +127 -0
  154. package/dist/middlewares/html/showHTML.js +95 -0
  155. package/dist/middlewares/html/showHTML.js.map +1 -0
  156. package/dist/middlewares/index.d.ts +30 -0
  157. package/dist/middlewares/index.js +21 -0
  158. package/dist/middlewares/index.js.map +1 -0
  159. package/dist/middlewares/utils/index.d.ts +19 -0
  160. package/dist/middlewares/utils/index.js +19 -0
  161. package/dist/middlewares/utils/index.js.map +1 -0
  162. package/dist/middlewares/utils/versionValidator.d.ts +214 -0
  163. package/dist/middlewares/utils/versionValidator.js +128 -0
  164. package/dist/middlewares/utils/versionValidator.js.map +1 -0
  165. package/dist/services/common/appError.d.ts +138 -0
  166. package/dist/services/common/appError.js +80 -0
  167. package/dist/services/common/appError.js.map +1 -0
  168. package/dist/services/common/httpError.d.ts +79 -0
  169. package/dist/services/common/httpError.js +44 -0
  170. package/dist/services/common/httpError.js.map +1 -0
  171. package/dist/services/common/index.d.ts +47 -0
  172. package/dist/services/common/index.js +41 -0
  173. package/dist/services/common/index.js.map +1 -0
  174. package/dist/services/common/sendFile.d.ts +102 -0
  175. package/dist/services/common/sendFile.js +51 -0
  176. package/dist/services/common/sendFile.js.map +1 -0
  177. package/dist/services/frontend/frontendFs.d.ts +96 -0
  178. package/dist/services/frontend/frontendFs.js +71 -0
  179. package/dist/services/frontend/frontendFs.js.map +1 -0
  180. package/dist/services/frontend/index.d.ts +40 -0
  181. package/dist/services/frontend/index.js +35 -0
  182. package/dist/services/frontend/index.js.map +1 -0
  183. package/dist/services/html/htmlGenerator.d.ts +237 -0
  184. package/dist/services/html/htmlGenerator.js +171 -0
  185. package/dist/services/html/htmlGenerator.js.map +1 -0
  186. package/dist/services/html/index.d.ts +43 -0
  187. package/dist/services/html/index.js +35 -0
  188. package/dist/services/html/index.js.map +1 -0
  189. package/dist/services/http/apiClient.d.ts +169 -0
  190. package/dist/services/http/apiClient.js +96 -0
  191. package/dist/services/http/apiClient.js.map +1 -0
  192. package/dist/services/http/http.d.ts +175 -0
  193. package/dist/services/http/http.js +158 -0
  194. package/dist/services/http/http.js.map +1 -0
  195. package/dist/services/http/index.d.ts +50 -0
  196. package/dist/services/http/index.js +41 -0
  197. package/dist/services/http/index.js.map +1 -0
  198. package/dist/services/http/responsesBuilder.d.ts +178 -0
  199. package/dist/services/http/responsesBuilder.js +132 -0
  200. package/dist/services/http/responsesBuilder.js.map +1 -0
  201. package/dist/services/index.d.ts +33 -0
  202. package/dist/services/index.js +23 -0
  203. package/dist/services/index.js.map +1 -0
  204. package/dist/services/utils/ensureBearerToken.d.ts +157 -0
  205. package/dist/services/utils/ensureBearerToken.js +105 -0
  206. package/dist/services/utils/ensureBearerToken.js.map +1 -0
  207. package/dist/services/utils/index.d.ts +43 -0
  208. package/dist/services/utils/index.js +35 -0
  209. package/dist/services/utils/index.js.map +1 -0
  210. package/dist/types/events.d.ts +13 -0
  211. package/dist/types/events.js +17 -0
  212. package/dist/types/events.js.map +1 -0
  213. package/dist/types/express.d.ts +10 -0
  214. package/dist/types/express.js +17 -0
  215. package/dist/types/express.js.map +1 -0
  216. package/dist/types/http.d.ts +79 -0
  217. package/dist/types/http.js +17 -0
  218. package/dist/types/http.js.map +1 -0
  219. package/dist/types/index.d.ts +14 -0
  220. package/dist/types/index.js +24 -0
  221. package/dist/types/index.js.map +1 -0
  222. package/dist/types/options.d.ts +13 -0
  223. package/dist/types/options.js +17 -0
  224. package/dist/types/options.js.map +1 -0
  225. package/dist/types/utils.d.ts +48 -0
  226. package/dist/types/utils.js +17 -0
  227. package/dist/types/utils.js.map +1 -0
  228. package/dist/types/wootils.d.ts +4 -0
  229. package/dist/types/wootils.js +17 -0
  230. package/dist/types/wootils.js.map +1 -0
  231. package/dist/utils/fns/index.d.ts +5 -0
  232. package/dist/utils/fns/index.js +22 -0
  233. package/dist/utils/fns/index.js.map +1 -0
  234. package/dist/utils/fns/others.d.ts +17 -0
  235. package/dist/utils/fns/others.js +29 -0
  236. package/dist/utils/fns/others.js.map +1 -0
  237. package/dist/utils/fns/routes.d.ts +39 -0
  238. package/dist/utils/fns/routes.js +51 -0
  239. package/dist/utils/fns/routes.js.map +1 -0
  240. package/dist/utils/fns/statuses.d.ts +45 -0
  241. package/dist/utils/fns/statuses.js +35 -0
  242. package/dist/utils/fns/statuses.js.map +1 -0
  243. package/dist/utils/fns/text.d.ts +9 -0
  244. package/dist/utils/fns/text.js +29 -0
  245. package/dist/utils/fns/text.js.map +1 -0
  246. package/dist/utils/index.d.ts +18 -0
  247. package/dist/utils/index.js +20 -0
  248. package/dist/utils/index.js.map +1 -0
  249. package/dist/utils/wrappers.d.ts +13 -0
  250. package/dist/utils/wrappers.js +68 -0
  251. package/dist/utils/wrappers.js.map +1 -0
  252. package/examples/basic/404.html +12 -0
  253. package/examples/basic/README.md +30 -0
  254. package/examples/basic/app.ts +18 -0
  255. package/examples/basic/controller.ts +45 -0
  256. package/examples/basic/index.ts +19 -0
  257. package/examples/basic/middleware.ts +13 -0
  258. package/examples/basic/service.ts +11 -0
  259. package/package.json +59 -38
  260. package/src/app/index.ts +1 -0
  261. package/src/app/jimpex.ts +743 -0
  262. package/src/controllers/common/config.ts +115 -0
  263. package/src/controllers/common/health.ts +128 -0
  264. package/src/controllers/common/index.ts +3 -0
  265. package/src/controllers/common/statics.ts +380 -0
  266. package/src/controllers/index.ts +2 -0
  267. package/src/controllers/utils/gateway.ts +1186 -0
  268. package/src/controllers/utils/index.ts +1 -0
  269. package/src/index.ts +6 -0
  270. package/src/middlewares/common/errorHandler.ts +203 -0
  271. package/src/middlewares/common/forceHTTPS.ts +83 -0
  272. package/src/middlewares/common/hsts.ts +135 -0
  273. package/src/middlewares/common/index.ts +3 -0
  274. package/src/middlewares/html/fastHTML.ts +255 -0
  275. package/src/middlewares/html/index.ts +2 -0
  276. package/src/middlewares/html/showHTML.ts +165 -0
  277. package/src/middlewares/index.ts +3 -0
  278. package/src/middlewares/utils/index.ts +1 -0
  279. package/src/middlewares/utils/versionValidator.ts +289 -0
  280. package/src/services/common/appError.ts +158 -0
  281. package/src/services/common/httpError.ts +74 -0
  282. package/src/services/common/index.ts +29 -0
  283. package/src/services/common/sendFile.ts +106 -0
  284. package/src/services/frontend/frontendFs.ts +101 -0
  285. package/src/services/frontend/index.ts +21 -0
  286. package/src/services/html/htmlGenerator.ts +356 -0
  287. package/src/services/html/index.ts +21 -0
  288. package/src/services/http/apiClient.ts +221 -0
  289. package/src/services/http/http.ts +286 -0
  290. package/src/services/http/index.ts +29 -0
  291. package/src/services/http/responsesBuilder.ts +265 -0
  292. package/src/services/index.ts +5 -0
  293. package/src/services/utils/ensureBearerToken.ts +202 -0
  294. package/src/services/utils/index.ts +21 -0
  295. package/src/types/events.ts +303 -0
  296. package/src/types/express.ts +21 -0
  297. package/src/types/http.ts +77 -0
  298. package/src/types/index.ts +6 -0
  299. package/src/types/options.ts +248 -0
  300. package/src/types/utils.ts +52 -0
  301. package/src/types/wootils.ts +4 -0
  302. package/src/utils/fns/index.ts +4 -0
  303. package/src/utils/fns/others.ts +15 -0
  304. package/src/utils/fns/routes.ts +64 -0
  305. package/src/utils/fns/statuses.ts +44 -0
  306. package/src/utils/fns/text.ts +8 -0
  307. package/src/utils/index.ts +2 -0
  308. package/src/utils/wrappers.ts +537 -0
  309. package/tsconfig.json +5 -8
  310. package/tsup.config.ts +10 -0
  311. package/src/app/index.js +0 -692
  312. package/src/constants/eventNames.js +0 -48
  313. package/src/constants/index.js +0 -7
  314. package/src/controllers/common/configuration.js +0 -116
  315. package/src/controllers/common/health.js +0 -79
  316. package/src/controllers/common/index.js +0 -7
  317. package/src/controllers/common/statics.js +0 -336
  318. package/src/controllers/index.js +0 -9
  319. package/src/controllers/utils/gateway.js +0 -1039
  320. package/src/controllers/utils/index.js +0 -3
  321. package/src/index.js +0 -30
  322. package/src/middlewares/common/errorHandler.js +0 -185
  323. package/src/middlewares/common/forceHTTPS.js +0 -80
  324. package/src/middlewares/common/hsts.js +0 -122
  325. package/src/middlewares/common/index.js +0 -7
  326. package/src/middlewares/html/fastHTML.js +0 -298
  327. package/src/middlewares/html/index.js +0 -5
  328. package/src/middlewares/html/showHTML.js +0 -167
  329. package/src/middlewares/index.js +0 -11
  330. package/src/middlewares/utils/index.js +0 -3
  331. package/src/middlewares/utils/versionValidator.js +0 -261
  332. package/src/services/common/appError.js +0 -136
  333. package/src/services/common/httpError.js +0 -60
  334. package/src/services/common/index.js +0 -25
  335. package/src/services/common/sendFile.js +0 -68
  336. package/src/services/frontend/frontendFs.js +0 -85
  337. package/src/services/frontend/index.js +0 -17
  338. package/src/services/html/htmlGenerator.js +0 -391
  339. package/src/services/html/index.js +0 -17
  340. package/src/services/http/apiClient.js +0 -148
  341. package/src/services/http/http.js +0 -256
  342. package/src/services/http/index.js +0 -25
  343. package/src/services/http/responsesBuilder.js +0 -193
  344. package/src/services/index.js +0 -15
  345. package/src/services/utils/ensureBearerToken.js +0 -147
  346. package/src/services/utils/index.js +0 -19
  347. package/src/types.js +0 -377
  348. package/src/utils/functions.js +0 -78
  349. package/src/utils/wrappers.js +0 -131
  350. package/types/app/index.d.ts +0 -417
  351. package/types/constants/eventNames.d.ts +0 -93
  352. package/types/constants/index.d.ts +0 -2
  353. package/types/controllers/common/configuration.d.ts +0 -71
  354. package/types/controllers/common/health.d.ts +0 -55
  355. package/types/controllers/common/index.d.ts +0 -4
  356. package/types/controllers/common/statics.d.ts +0 -271
  357. package/types/controllers/index.d.ts +0 -3
  358. package/types/controllers/utils/gateway.d.ts +0 -947
  359. package/types/controllers/utils/index.d.ts +0 -2
  360. package/types/index.d.ts +0 -15
  361. package/types/middlewares/common/errorHandler.d.ts +0 -143
  362. package/types/middlewares/common/forceHTTPS.d.ts +0 -64
  363. package/types/middlewares/common/hsts.d.ts +0 -111
  364. package/types/middlewares/common/index.d.ts +0 -4
  365. package/types/middlewares/html/fastHTML.d.ts +0 -238
  366. package/types/middlewares/html/index.d.ts +0 -3
  367. package/types/middlewares/html/showHTML.d.ts +0 -128
  368. package/types/middlewares/index.d.ts +0 -4
  369. package/types/middlewares/utils/index.d.ts +0 -2
  370. package/types/middlewares/utils/versionValidator.d.ts +0 -247
  371. package/types/services/common/appError.d.ts +0 -89
  372. package/types/services/common/httpError.d.ts +0 -37
  373. package/types/services/common/index.d.ts +0 -18
  374. package/types/services/common/sendFile.d.ts +0 -56
  375. package/types/services/frontend/frontendFs.d.ts +0 -72
  376. package/types/services/frontend/index.d.ts +0 -3
  377. package/types/services/html/htmlGenerator.d.ts +0 -298
  378. package/types/services/html/index.d.ts +0 -3
  379. package/types/services/http/apiClient.d.ts +0 -141
  380. package/types/services/http/http.d.ts +0 -159
  381. package/types/services/http/index.d.ts +0 -18
  382. package/types/services/http/responsesBuilder.d.ts +0 -140
  383. package/types/services/index.d.ts +0 -6
  384. package/types/services/utils/ensureBearerToken.d.ts +0 -137
  385. package/types/services/utils/index.d.ts +0 -16
  386. package/types/types.d.ts +0 -280
  387. package/types/utils/functions.d.ts +0 -55
  388. package/types/utils/wrappers.d.ts +0 -127
@@ -0,0 +1,180 @@
1
+ import * as _homer0_jimple from '@homer0/jimple';
2
+ import { l as Events, J as Jimpex, R as MiddlewareConnectFn } from '../../jimpex-7eaee271.js';
3
+ import { AsyncExpressMiddleware } from '../../types/express.js';
4
+ import { SendFile } from '../../services/common/sendFile.js';
5
+ import { HTMLGenerator } from '../../services/html/htmlGenerator.js';
6
+ import { Response, NextFunction } from 'express';
7
+ import '@homer0/events-hub';
8
+ import '../../types/http.js';
9
+ import 'https';
10
+ import 'http';
11
+ import 'spdy';
12
+ import 'node-fetch';
13
+ import '@homer0/simple-config';
14
+ import '../../types/utils.js';
15
+ import '@homer0/simple-logger';
16
+ import '@homer0/path-utils';
17
+ import '../../services/frontend/frontendFs.js';
18
+ import 'fs/promises';
19
+ import '@homer0/deferred';
20
+
21
+ /**
22
+ * The options to customize the behavior of the middleware.
23
+ *
24
+ * @group Middlewares/FastHTML
25
+ */
26
+ type FastHTMLOptions = {
27
+ /**
28
+ * The name of the file the middleware will serve. If the {@link HTMLGenerator} service
29
+ * is available, it will be overriden by the service.
30
+ *
31
+ * @default 'index.html'
32
+ */
33
+ file: string;
34
+ /**
35
+ * A list of regular expressions to match request paths that should be ignored by the
36
+ * middleware.
37
+ *
38
+ * @default [/\.ico$/i]
39
+ */
40
+ ignoredRoutes: RegExp[];
41
+ /**
42
+ * If `true`, {@link FastHTML} will get the list of all the routes controlled by the
43
+ * application, and will use them to validate the incoming requests (in addition to the
44
+ * `ignore` list): If a request URL doesn't match with any of the "controlled routes",
45
+ * it will serve the HTML file.
46
+ *
47
+ * @default true
48
+ */
49
+ useAppRoutes: boolean;
50
+ };
51
+ /**
52
+ * The options to construct a {@link FastHTML}.
53
+ *
54
+ * @group Middlewares/FastHTML
55
+ */
56
+ type FastHTMLConstructorOptions = Partial<FastHTMLOptions> & {
57
+ /**
58
+ * A dictionary with the dependencies to inject.
59
+ */
60
+ inject: {
61
+ sendFile: SendFile;
62
+ events: Events;
63
+ /**
64
+ * A function to get a possible {@link HTMLGenerator}. This is injected as a "getter"
65
+ * to not interrupt the DIC "lifecycle": middlewares are initialized right when the
66
+ * app starts, and injecting a reference would force the service to be initialized
67
+ * too, even if a request is not being made.
68
+ */
69
+ getHTMLGenerator?: () => HTMLGenerator | undefined;
70
+ };
71
+ };
72
+ /**
73
+ * The options for the middleware creator that will mount an instance of {@link FastHTML}.
74
+ *
75
+ * @group Middlewares/FastHTML
76
+ */
77
+ type FastHTMLMiddlewareOptions = Partial<FastHTMLOptions> & {
78
+ /**
79
+ * The name of an {@link HTMLGenerator} service already available in the application.
80
+ *
81
+ * @default 'htmlGenerator'
82
+ */
83
+ htmlGeneratorServiceName?: string;
84
+ };
85
+ /**
86
+ * It's common for an app to show an HTML view when no route was able to handle a request,
87
+ * so the idea behind this middleware is to avoid going to every middleware and controller
88
+ * and just specify that if the request is not for a route handled by a controller, just
89
+ * serve the HTML and avoid processing unnecessary data.
90
+ *
91
+ * A simple example: The app has a route `/backend` that a frontend uses to get
92
+ * information.
93
+ * This middleware can be used to only allow the execution of middlewares and controllers
94
+ * when the request route is for `/backend`.
95
+ *
96
+ * **Disclaimer**: Managing statics files with Express is not a best practice, but there
97
+ * are scenarios where there is not other choice.
98
+ *
99
+ * @group Middleware Classes
100
+ * @group Middlewares/FastHTML
101
+ * @prettierignore
102
+ */
103
+ declare class FastHTML {
104
+ /**
105
+ * The service that serves a file.
106
+ */
107
+ protected readonly _sendFile: SendFile;
108
+ /**
109
+ * The application envent bus, to listen and get the list of "controlled routes" after
110
+ * the application is started.
111
+ */
112
+ protected readonly _events: Events;
113
+ /**
114
+ * A function to get a possible {@link HTMLGenerator}. This is injected as a "getter"
115
+ * to not interrupt the DIC "lifecycle": middlewares are initialized right when the
116
+ * app starts, and injecting a reference would force the service to be initialized
117
+ * too, even if a request is not being made.
118
+ */
119
+ protected readonly _getHTMLGenerator: () => HTMLGenerator | undefined;
120
+ /**
121
+ * The customization options for the middleware.
122
+ */
123
+ protected _options: FastHTMLOptions;
124
+ /**
125
+ * Whether or not the file is ready to be served. In case the middleware uses an
126
+ * {@link HTMLGenerator} service, the file needs to be generated before being available,
127
+ * and that's why this flag exists.
128
+ */
129
+ protected _fileReady: boolean;
130
+ /**
131
+ * A list of regular expression that match the routes controlled by the application.
132
+ * This is in case the `useAppRoutes` option is set to `true`; when the application gets
133
+ * started, an event listener will obtain all the top controlled routes, create regular
134
+ * expressions, and save them on this property.
135
+ */
136
+ protected _routeExpressions: RegExp[];
137
+ /**
138
+ * @param options The options to construct the class.
139
+ * @throws If `ignoredRoutes` is empty and `useAppRoutes` is set to `false`.
140
+ */
141
+ constructor({ inject, ...options }: FastHTMLConstructorOptions);
142
+ /**
143
+ * Generates the middleware that serves the HTML file.
144
+ */
145
+ getMiddleware(): AsyncExpressMiddleware;
146
+ /**
147
+ * The customization options.
148
+ */
149
+ get options(): Readonly<FastHTMLOptions>;
150
+ /**
151
+ * Serves the HTML file to the response.
152
+ *
153
+ * @param res The response object generated by the application.
154
+ * @param next The function to call the next middleware.
155
+ */
156
+ protected _sendResponse(res: Response, next: NextFunction): void;
157
+ /**
158
+ * Adds the event listener that obtains the list of "controlled routes" when
159
+ * `useAppRoutes` is set to `true`.
160
+ */
161
+ protected _setupEvents(): void;
162
+ /**
163
+ * Validates whether a route should be ignored or not. The method checks first against
164
+ * the `ignore` option, and then against the list of "controlled routes" if
165
+ * `useAppRoutes` is set to `true`.
166
+ *
167
+ * @param route The route to validate.
168
+ */
169
+ protected _shouldIgnoreRoute(route: string): boolean;
170
+ }
171
+ /**
172
+ * Creates the middleware that filters the routes and serves an HTML before the
173
+ * application gets to evaluate whether there's a controller for the request or not.
174
+ *
175
+ * @group Middlewares
176
+ * @group Middlewares/FastHTML
177
+ */
178
+ declare const fastHTMLMiddleware: _homer0_jimple.ResourceCreator<"middleware", "connect", (options?: FastHTMLMiddlewareOptions) => <ContainerType extends Jimpex = Jimpex>(app: ContainerType) => AsyncExpressMiddleware, MiddlewareConnectFn>;
179
+
180
+ export { FastHTML, FastHTMLConstructorOptions, FastHTMLMiddlewareOptions, FastHTMLOptions, fastHTMLMiddleware };
@@ -0,0 +1,131 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
23
+ };
24
+ var fastHTML_exports = {};
25
+ __export(fastHTML_exports, {
26
+ FastHTML: () => FastHTML,
27
+ fastHTMLMiddleware: () => fastHTMLMiddleware
28
+ });
29
+ module.exports = __toCommonJS(fastHTML_exports);
30
+ var import_utils = require("../../utils");
31
+ class FastHTML {
32
+ constructor({ inject, ...options }) {
33
+ __publicField(this, "_sendFile");
34
+ __publicField(this, "_events");
35
+ __publicField(this, "_getHTMLGenerator");
36
+ __publicField(this, "_options");
37
+ __publicField(this, "_fileReady", false);
38
+ __publicField(this, "_routeExpressions", []);
39
+ this._sendFile = inject.sendFile;
40
+ this._events = inject.events;
41
+ this._getHTMLGenerator = inject.getHTMLGenerator || (() => void 0);
42
+ this._options = {
43
+ file: "index.html",
44
+ ignoredRoutes: [/\.ico$/i],
45
+ useAppRoutes: true,
46
+ ...options
47
+ };
48
+ if (!this._options.ignoredRoutes.length && !this._options.useAppRoutes) {
49
+ throw new Error("You must provide either `ignoredRoutes` or `useAppRoutes`");
50
+ }
51
+ if (this._options.useAppRoutes) {
52
+ this._setupEvents();
53
+ }
54
+ }
55
+ getMiddleware() {
56
+ return async (req, res, next) => {
57
+ if (this._shouldIgnoreRoute(req.originalUrl)) {
58
+ next();
59
+ return;
60
+ }
61
+ if (this._fileReady) {
62
+ this._sendResponse(res, next);
63
+ return;
64
+ }
65
+ const htmlGenerator = this._getHTMLGenerator();
66
+ if (!htmlGenerator) {
67
+ this._fileReady = true;
68
+ this._sendResponse(res, next);
69
+ return;
70
+ }
71
+ try {
72
+ await htmlGenerator.whenReady();
73
+ this._options.file = htmlGenerator.options.file;
74
+ this._fileReady = true;
75
+ this._sendResponse(res, next);
76
+ } catch (error) {
77
+ next(error);
78
+ }
79
+ };
80
+ }
81
+ get options() {
82
+ return { ...this._options };
83
+ }
84
+ _sendResponse(res, next) {
85
+ res.setHeader("Content-Type", "text/html");
86
+ this._sendFile({
87
+ res,
88
+ next,
89
+ filepath: this._options.file
90
+ });
91
+ }
92
+ _setupEvents() {
93
+ this._events.once("afterStart", ({ app }) => {
94
+ const [routeExpressions] = app.routes.reduce(
95
+ (acc, route) => {
96
+ const [expressions, processed] = acc;
97
+ const clean = (0, import_utils.removeSlashes)(route).trim();
98
+ if (!clean || processed.includes(clean))
99
+ return acc;
100
+ expressions.push((0, import_utils.createRouteExpression)(clean));
101
+ processed.push(clean);
102
+ return acc;
103
+ },
104
+ [[], []]
105
+ );
106
+ this._routeExpressions.push(...routeExpressions);
107
+ });
108
+ }
109
+ _shouldIgnoreRoute(route) {
110
+ return this._options.ignoredRoutes.some((expression) => route.match(expression)) || this._routeExpressions.some((expression) => route.match(expression));
111
+ }
112
+ }
113
+ const fastHTMLMiddleware = (0, import_utils.middlewareCreator)(
114
+ (options = {}) => (app) => {
115
+ const { htmlGeneratorServiceName = "htmlGenerator", ...rest } = options;
116
+ return new FastHTML({
117
+ inject: {
118
+ events: app.get("events"),
119
+ sendFile: app.get("sendFile"),
120
+ getHTMLGenerator: () => app.try(htmlGeneratorServiceName)
121
+ },
122
+ ...rest
123
+ }).getMiddleware();
124
+ }
125
+ );
126
+ // Annotate the CommonJS export names for ESM import in node:
127
+ 0 && (module.exports = {
128
+ FastHTML,
129
+ fastHTMLMiddleware
130
+ });
131
+ //# sourceMappingURL=fastHTML.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/middlewares/html/fastHTML.ts"],"sourcesContent":["import { createRouteExpression, middlewareCreator, removeSlashes } from '../../utils';\nimport type { HTMLGenerator, SendFile } from '../../services';\nimport type { AsyncExpressMiddleware, Response, NextFunction, Events } from '../../types';\n/**\n * The options to customize the behavior of the middleware.\n *\n * @group Middlewares/FastHTML\n */\nexport type FastHTMLOptions = {\n /**\n * The name of the file the middleware will serve. If the {@link HTMLGenerator} service\n * is available, it will be overriden by the service.\n *\n * @default 'index.html'\n */\n file: string;\n /**\n * A list of regular expressions to match request paths that should be ignored by the\n * middleware.\n *\n * @default [/\\.ico$/i]\n */\n ignoredRoutes: RegExp[];\n /**\n * If `true`, {@link FastHTML} will get the list of all the routes controlled by the\n * application, and will use them to validate the incoming requests (in addition to the\n * `ignore` list): If a request URL doesn't match with any of the \"controlled routes\",\n * it will serve the HTML file.\n *\n * @default true\n */\n useAppRoutes: boolean;\n};\n/**\n * The options to construct a {@link FastHTML}.\n *\n * @group Middlewares/FastHTML\n */\nexport type FastHTMLConstructorOptions = Partial<FastHTMLOptions> & {\n /**\n * A dictionary with the dependencies to inject.\n */\n inject: {\n sendFile: SendFile;\n events: Events;\n /**\n * A function to get a possible {@link HTMLGenerator}. This is injected as a \"getter\"\n * to not interrupt the DIC \"lifecycle\": middlewares are initialized right when the\n * app starts, and injecting a reference would force the service to be initialized\n * too, even if a request is not being made.\n */\n getHTMLGenerator?: () => HTMLGenerator | undefined;\n };\n};\n/**\n * The options for the middleware creator that will mount an instance of {@link FastHTML}.\n *\n * @group Middlewares/FastHTML\n */\nexport type FastHTMLMiddlewareOptions = Partial<FastHTMLOptions> & {\n /**\n * The name of an {@link HTMLGenerator} service already available in the application.\n *\n * @default 'htmlGenerator'\n */\n htmlGeneratorServiceName?: string;\n};\n/**\n * It's common for an app to show an HTML view when no route was able to handle a request,\n * so the idea behind this middleware is to avoid going to every middleware and controller\n * and just specify that if the request is not for a route handled by a controller, just\n * serve the HTML and avoid processing unnecessary data.\n *\n * A simple example: The app has a route `/backend` that a frontend uses to get\n * information.\n * This middleware can be used to only allow the execution of middlewares and controllers\n * when the request route is for `/backend`.\n *\n * **Disclaimer**: Managing statics files with Express is not a best practice, but there\n * are scenarios where there is not other choice.\n *\n * @group Middleware Classes\n * @group Middlewares/FastHTML\n * @prettierignore\n */\nexport class FastHTML {\n /**\n * The service that serves a file.\n */\n protected readonly _sendFile: SendFile;\n /**\n * The application envent bus, to listen and get the list of \"controlled routes\" after\n * the application is started.\n */\n protected readonly _events: Events;\n /**\n * A function to get a possible {@link HTMLGenerator}. This is injected as a \"getter\"\n * to not interrupt the DIC \"lifecycle\": middlewares are initialized right when the\n * app starts, and injecting a reference would force the service to be initialized\n * too, even if a request is not being made.\n */\n protected readonly _getHTMLGenerator: () => HTMLGenerator | undefined;\n /**\n * The customization options for the middleware.\n */\n protected _options: FastHTMLOptions;\n /**\n * Whether or not the file is ready to be served. In case the middleware uses an\n * {@link HTMLGenerator} service, the file needs to be generated before being available,\n * and that's why this flag exists.\n */\n protected _fileReady: boolean = false;\n /**\n * A list of regular expression that match the routes controlled by the application.\n * This is in case the `useAppRoutes` option is set to `true`; when the application gets\n * started, an event listener will obtain all the top controlled routes, create regular\n * expressions, and save them on this property.\n */\n protected _routeExpressions: RegExp[] = [];\n /**\n * @param options The options to construct the class.\n * @throws If `ignoredRoutes` is empty and `useAppRoutes` is set to `false`.\n */\n constructor({ inject, ...options }: FastHTMLConstructorOptions) {\n this._sendFile = inject.sendFile;\n this._events = inject.events;\n this._getHTMLGenerator = inject.getHTMLGenerator || (() => undefined);\n this._options = {\n file: 'index.html',\n ignoredRoutes: [/\\.ico$/i],\n useAppRoutes: true,\n ...options,\n };\n\n if (!this._options.ignoredRoutes.length && !this._options.useAppRoutes) {\n throw new Error('You must provide either `ignoredRoutes` or `useAppRoutes`');\n }\n\n if (this._options.useAppRoutes) {\n this._setupEvents();\n }\n }\n /**\n * Generates the middleware that serves the HTML file.\n */\n getMiddleware(): AsyncExpressMiddleware {\n return async (req, res, next) => {\n // If the route should be ignored, move to the next middleware.\n if (this._shouldIgnoreRoute(req.originalUrl)) {\n next();\n return;\n }\n\n // If the file is ready to be served, serve it.\n if (this._fileReady) {\n this._sendResponse(res, next);\n return;\n }\n\n const htmlGenerator = this._getHTMLGenerator();\n // If there's no generator, switch the flag and just serve the file.\n if (!htmlGenerator) {\n this._fileReady = true;\n this._sendResponse(res, next);\n return;\n }\n\n try {\n // Wait for the HTML to be generated.\n await htmlGenerator.whenReady();\n // Update the local option.\n this._options.file = htmlGenerator.options.file;\n // Switch the flag and serve the file.\n this._fileReady = true;\n this._sendResponse(res, next);\n } catch (error) {\n next(error);\n }\n };\n }\n /**\n * The customization options.\n */\n get options(): Readonly<FastHTMLOptions> {\n return { ...this._options };\n }\n /**\n * Serves the HTML file to the response.\n *\n * @param res The response object generated by the application.\n * @param next The function to call the next middleware.\n */\n protected _sendResponse(res: Response, next: NextFunction): void {\n res.setHeader('Content-Type', 'text/html');\n this._sendFile({\n res,\n next,\n filepath: this._options.file,\n });\n }\n /**\n * Adds the event listener that obtains the list of \"controlled routes\" when\n * `useAppRoutes` is set to `true`.\n */\n protected _setupEvents() {\n this._events.once('afterStart', ({ app }) => {\n const [routeExpressions] = app.routes.reduce<[RegExp[], string[]]>(\n (acc, route) => {\n const [expressions, processed] = acc;\n const clean = removeSlashes(route).trim();\n if (!clean || processed.includes(clean)) return acc;\n expressions.push(createRouteExpression(clean));\n processed.push(clean);\n return acc;\n },\n [[], []],\n );\n this._routeExpressions.push(...routeExpressions);\n });\n }\n /**\n * Validates whether a route should be ignored or not. The method checks first against\n * the `ignore` option, and then against the list of \"controlled routes\" if\n * `useAppRoutes` is set to `true`.\n *\n * @param route The route to validate.\n */\n protected _shouldIgnoreRoute(route: string): boolean {\n return (\n this._options.ignoredRoutes.some((expression) => route.match(expression)) ||\n this._routeExpressions.some((expression) => route.match(expression))\n );\n }\n}\n/**\n * Creates the middleware that filters the routes and serves an HTML before the\n * application gets to evaluate whether there's a controller for the request or not.\n *\n * @group Middlewares\n * @group Middlewares/FastHTML\n */\nexport const fastHTMLMiddleware = middlewareCreator(\n (options: FastHTMLMiddlewareOptions = {}) =>\n (app) => {\n const { htmlGeneratorServiceName = 'htmlGenerator', ...rest } = options;\n return new FastHTML({\n inject: {\n events: app.get('events'),\n sendFile: app.get('sendFile'),\n getHTMLGenerator: () => app.try(htmlGeneratorServiceName),\n },\n ...rest,\n }).getMiddleware();\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAwE;AAqFjE,MAAM,SAAS;AAAA,EAsCpB,YAAY,EAAE,WAAW,QAAQ,GAA+B;AAlChE,wBAAmB;AAKnB,wBAAmB;AAOnB,wBAAmB;AAInB,wBAAU;AAMV,wBAAU,cAAsB;AAOhC,wBAAU,qBAA8B,CAAC;AAMvC,SAAK,YAAY,OAAO;AACxB,SAAK,UAAU,OAAO;AACtB,SAAK,oBAAoB,OAAO,qBAAqB,MAAM;AAC3D,SAAK,WAAW;AAAA,MACd,MAAM;AAAA,MACN,eAAe,CAAC,SAAS;AAAA,MACzB,cAAc;AAAA,MACd,GAAG;AAAA,IACL;AAEA,QAAI,CAAC,KAAK,SAAS,cAAc,UAAU,CAAC,KAAK,SAAS,cAAc;AACtE,YAAM,IAAI,MAAM,2DAA2D;AAAA,IAC7E;AAEA,QAAI,KAAK,SAAS,cAAc;AAC9B,WAAK,aAAa;AAAA,IACpB;AAAA,EACF;AAAA,EAIA,gBAAwC;AACtC,WAAO,OAAO,KAAK,KAAK,SAAS;AAE/B,UAAI,KAAK,mBAAmB,IAAI,WAAW,GAAG;AAC5C,aAAK;AACL;AAAA,MACF;AAGA,UAAI,KAAK,YAAY;AACnB,aAAK,cAAc,KAAK,IAAI;AAC5B;AAAA,MACF;AAEA,YAAM,gBAAgB,KAAK,kBAAkB;AAE7C,UAAI,CAAC,eAAe;AAClB,aAAK,aAAa;AAClB,aAAK,cAAc,KAAK,IAAI;AAC5B;AAAA,MACF;AAEA,UAAI;AAEF,cAAM,cAAc,UAAU;AAE9B,aAAK,SAAS,OAAO,cAAc,QAAQ;AAE3C,aAAK,aAAa;AAClB,aAAK,cAAc,KAAK,IAAI;AAAA,MAC9B,SAAS,OAAP;AACA,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EAIA,IAAI,UAAqC;AACvC,WAAO,EAAE,GAAG,KAAK,SAAS;AAAA,EAC5B;AAAA,EAOU,cAAc,KAAe,MAA0B;AAC/D,QAAI,UAAU,gBAAgB,WAAW;AACzC,SAAK,UAAU;AAAA,MACb;AAAA,MACA;AAAA,MACA,UAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AAAA,EAKU,eAAe;AACvB,SAAK,QAAQ,KAAK,cAAc,CAAC,EAAE,IAAI,MAAM;AAC3C,YAAM,CAAC,gBAAgB,IAAI,IAAI,OAAO;AAAA,QACpC,CAAC,KAAK,UAAU;AACd,gBAAM,CAAC,aAAa,SAAS,IAAI;AACjC,gBAAM,YAAQ,4BAAc,KAAK,EAAE,KAAK;AACxC,cAAI,CAAC,SAAS,UAAU,SAAS,KAAK;AAAG,mBAAO;AAChD,sBAAY,SAAK,oCAAsB,KAAK,CAAC;AAC7C,oBAAU,KAAK,KAAK;AACpB,iBAAO;AAAA,QACT;AAAA,QACA,CAAC,CAAC,GAAG,CAAC,CAAC;AAAA,MACT;AACA,WAAK,kBAAkB,KAAK,GAAG,gBAAgB;AAAA,IACjD,CAAC;AAAA,EACH;AAAA,EAQU,mBAAmB,OAAwB;AACnD,WACE,KAAK,SAAS,cAAc,KAAK,CAAC,eAAe,MAAM,MAAM,UAAU,CAAC,KACxE,KAAK,kBAAkB,KAAK,CAAC,eAAe,MAAM,MAAM,UAAU,CAAC;AAAA,EAEvE;AACF;AAQO,MAAM,yBAAqB;AAAA,EAChC,CAAC,UAAqC,CAAC,MACrC,CAAC,QAAQ;AACP,UAAM,EAAE,2BAA2B,oBAAoB,KAAK,IAAI;AAChE,WAAO,IAAI,SAAS;AAAA,MAClB,QAAQ;AAAA,QACN,QAAQ,IAAI,IAAI,QAAQ;AAAA,QACxB,UAAU,IAAI,IAAI,UAAU;AAAA,QAC5B,kBAAkB,MAAM,IAAI,IAAI,wBAAwB;AAAA,MAC1D;AAAA,MACA,GAAG;AAAA,IACL,CAAC,EAAE,cAAc;AAAA,EACnB;AACJ;","names":[]}
@@ -0,0 +1,21 @@
1
+ export { FastHTML, FastHTMLConstructorOptions, FastHTMLMiddlewareOptions, FastHTMLOptions, fastHTMLMiddleware } from './fastHTML.js';
2
+ export { ShowHTML, ShowHTMLConstructorOptions, ShowHTMLMiddlewareOptions, ShowHTMLOptions, showHTMLMiddleware } from './showHTML.js';
3
+ import '@homer0/jimple';
4
+ import '../../jimpex-7eaee271.js';
5
+ import '@homer0/events-hub';
6
+ import '../../types/express.js';
7
+ import 'express';
8
+ import '../../types/http.js';
9
+ import 'https';
10
+ import 'http';
11
+ import 'spdy';
12
+ import 'node-fetch';
13
+ import '@homer0/simple-config';
14
+ import '../../types/utils.js';
15
+ import '@homer0/simple-logger';
16
+ import '../../services/common/sendFile.js';
17
+ import '@homer0/path-utils';
18
+ import '../../services/html/htmlGenerator.js';
19
+ import '../../services/frontend/frontendFs.js';
20
+ import 'fs/promises';
21
+ import '@homer0/deferred';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __copyProps = (to, from, except, desc) => {
7
+ if (from && typeof from === "object" || typeof from === "function") {
8
+ for (let key of __getOwnPropNames(from))
9
+ if (!__hasOwnProp.call(to, key) && key !== except)
10
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
11
+ }
12
+ return to;
13
+ };
14
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
15
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
16
+ var html_exports = {};
17
+ module.exports = __toCommonJS(html_exports);
18
+ __reExport(html_exports, require("./fastHTML"), module.exports);
19
+ __reExport(html_exports, require("./showHTML"), module.exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/middlewares/html/index.ts"],"sourcesContent":["export * from './fastHTML';\nexport * from './showHTML';\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,yBAAc,uBAAd;AACA,yBAAc,uBADd;","names":[]}
@@ -0,0 +1,127 @@
1
+ import * as _homer0_jimple from '@homer0/jimple';
2
+ import { J as Jimpex, R as MiddlewareConnectFn } from '../../jimpex-7eaee271.js';
3
+ import { AsyncExpressMiddleware } from '../../types/express.js';
4
+ import { SendFile } from '../../services/common/sendFile.js';
5
+ import { HTMLGenerator } from '../../services/html/htmlGenerator.js';
6
+ import { Response, NextFunction } from 'express';
7
+ import '@homer0/events-hub';
8
+ import '../../types/http.js';
9
+ import 'https';
10
+ import 'http';
11
+ import 'spdy';
12
+ import 'node-fetch';
13
+ import '@homer0/simple-config';
14
+ import '../../types/utils.js';
15
+ import '@homer0/simple-logger';
16
+ import '@homer0/path-utils';
17
+ import '../../services/frontend/frontendFs.js';
18
+ import 'fs/promises';
19
+ import '@homer0/deferred';
20
+
21
+ /**
22
+ * The options to customize the behavior of the middleware.
23
+ *
24
+ * @group Middlewares/ShowHTML
25
+ */
26
+ type ShowHTMLOptions = {
27
+ /**
28
+ * The name of the file the middleware will serve. If the {@link HTMLGenerator} service
29
+ * is available, it will be overriden by the service.
30
+ *
31
+ * @default 'index.html'
32
+ */
33
+ file: string;
34
+ };
35
+ /**
36
+ * The options to construct a {@link ShowHTML}.
37
+ *
38
+ * @group Middlewares/ShowHTML
39
+ */
40
+ type ShowHTMLConstructorOptions = Partial<ShowHTMLOptions> & {
41
+ /**
42
+ * A dictionary with the dependencies to inject.
43
+ */
44
+ inject: {
45
+ sendFile: SendFile;
46
+ /**
47
+ * A function to get a possible {@link HTMLGenerator}. This is injected as a "getter"
48
+ * to not interrupt the DIC "lifecycle": middlewares are initialized right when the
49
+ * app starts, and injecting a reference would force the service to be initialized
50
+ * too, even if a request is not being made.
51
+ */
52
+ getHTMLGenerator?: () => HTMLGenerator | undefined;
53
+ };
54
+ };
55
+ /**
56
+ * The options for the middleware creator that will mount an instance of {@link ShowHTML}.
57
+ *
58
+ * @group Middlewares/ShowHTML
59
+ */
60
+ type ShowHTMLMiddlewareOptions = Partial<ShowHTMLOptions> & {
61
+ /**
62
+ * The name of an {@link HTMLGenerator} service already available in the application.
63
+ *
64
+ * @default 'htmlGenerator'
65
+ */
66
+ htmlGeneratorServiceName?: string;
67
+ };
68
+ /**
69
+ * A very simple middleware service to send an HTML on a server response. The special
70
+ * _'feature'_ of this service is that it can be hooked up to an {@link HTMLGenerator}
71
+ * service and it will automatically server the file generated by it.
72
+ *
73
+ * @group Middleware Classes
74
+ * @group Middlewares/ShowHTML
75
+ * @prettierignore
76
+ */
77
+ declare class ShowHTML {
78
+ /**
79
+ * The service that serves a file.
80
+ */
81
+ protected readonly _sendFile: SendFile;
82
+ /**
83
+ * A function to get a possible {@link HTMLGenerator}. This is injected as a "getter"
84
+ * to not interrupt the DIC "lifecycle": middlewares are initialized right when the
85
+ * app starts, and injecting a reference would force the service to be initialized
86
+ * too, even if a request is not being made.
87
+ */
88
+ protected readonly _getHTMLGenerator: () => HTMLGenerator | undefined;
89
+ /**
90
+ * The customization options for the middleware.
91
+ */
92
+ protected _options: ShowHTMLOptions;
93
+ /**
94
+ * Whether or not the file is ready to be served. In case the middleware uses an
95
+ * {@link HTMLGenerator} service, the file needs to be generated before being available,
96
+ * and that's why this flag exists.
97
+ */
98
+ protected _fileReady: boolean;
99
+ /**
100
+ * @param options The options to construct the class.
101
+ */
102
+ constructor({ inject, ...options }: ShowHTMLConstructorOptions);
103
+ /**
104
+ * Generates the middleware that serves the HTML file.
105
+ */
106
+ getMiddleware(): AsyncExpressMiddleware;
107
+ /**
108
+ * The customization options.
109
+ */
110
+ get options(): Readonly<ShowHTMLOptions>;
111
+ /**
112
+ * Serves the HTML file to the response.
113
+ *
114
+ * @param res The response object generated by the application.
115
+ * @param next The function to call the next middleware.
116
+ */
117
+ protected _sendResponse(res: Response, next: NextFunction): void;
118
+ }
119
+ /**
120
+ * Creates the middleware that serves an HTML file in the response.
121
+ *
122
+ * @group Middlewares
123
+ * @group Middlewares/ShowHTML
124
+ */
125
+ declare const showHTMLMiddleware: _homer0_jimple.ResourceCreator<"middleware", "connect", (options?: ShowHTMLMiddlewareOptions) => <ContainerType extends Jimpex = Jimpex>(app: ContainerType) => AsyncExpressMiddleware, MiddlewareConnectFn>;
126
+
127
+ export { ShowHTML, ShowHTMLConstructorOptions, ShowHTMLMiddlewareOptions, ShowHTMLOptions, showHTMLMiddleware };
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var __publicField = (obj, key, value) => {
21
+ __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
22
+ return value;
23
+ };
24
+ var showHTML_exports = {};
25
+ __export(showHTML_exports, {
26
+ ShowHTML: () => ShowHTML,
27
+ showHTMLMiddleware: () => showHTMLMiddleware
28
+ });
29
+ module.exports = __toCommonJS(showHTML_exports);
30
+ var import_utils = require("../../utils");
31
+ class ShowHTML {
32
+ constructor({ inject, ...options }) {
33
+ __publicField(this, "_sendFile");
34
+ __publicField(this, "_getHTMLGenerator");
35
+ __publicField(this, "_options");
36
+ __publicField(this, "_fileReady", false);
37
+ this._sendFile = inject.sendFile;
38
+ this._getHTMLGenerator = inject.getHTMLGenerator || (() => void 0);
39
+ this._options = {
40
+ file: "index.html",
41
+ ...options
42
+ };
43
+ }
44
+ getMiddleware() {
45
+ return async (_, res, next) => {
46
+ if (this._fileReady) {
47
+ this._sendResponse(res, next);
48
+ return;
49
+ }
50
+ const htmlGenerator = this._getHTMLGenerator();
51
+ if (!htmlGenerator) {
52
+ this._fileReady = true;
53
+ this._sendResponse(res, next);
54
+ return;
55
+ }
56
+ try {
57
+ await htmlGenerator.whenReady();
58
+ this._options.file = htmlGenerator.options.file;
59
+ this._fileReady = true;
60
+ this._sendResponse(res, next);
61
+ } catch (error) {
62
+ next(error);
63
+ }
64
+ };
65
+ }
66
+ get options() {
67
+ return { ...this._options };
68
+ }
69
+ _sendResponse(res, next) {
70
+ res.setHeader("Content-Type", "text/html");
71
+ this._sendFile({
72
+ res,
73
+ next,
74
+ filepath: this._options.file
75
+ });
76
+ }
77
+ }
78
+ const showHTMLMiddleware = (0, import_utils.middlewareCreator)(
79
+ (options = {}) => (app) => {
80
+ const { htmlGeneratorServiceName = "htmlGenerator", ...rest } = options;
81
+ return new ShowHTML({
82
+ inject: {
83
+ sendFile: app.get("sendFile"),
84
+ getHTMLGenerator: () => app.try(htmlGeneratorServiceName)
85
+ },
86
+ ...rest
87
+ }).getMiddleware();
88
+ }
89
+ );
90
+ // Annotate the CommonJS export names for ESM import in node:
91
+ 0 && (module.exports = {
92
+ ShowHTML,
93
+ showHTMLMiddleware
94
+ });
95
+ //# sourceMappingURL=showHTML.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/middlewares/html/showHTML.ts"],"sourcesContent":["import { middlewareCreator } from '../../utils';\nimport type { HTMLGenerator, SendFile } from '../../services';\nimport type { AsyncExpressMiddleware, Response, NextFunction } from '../../types';\n/**\n * The options to customize the behavior of the middleware.\n *\n * @group Middlewares/ShowHTML\n */\nexport type ShowHTMLOptions = {\n /**\n * The name of the file the middleware will serve. If the {@link HTMLGenerator} service\n * is available, it will be overriden by the service.\n *\n * @default 'index.html'\n */\n file: string;\n};\n/**\n * The options to construct a {@link ShowHTML}.\n *\n * @group Middlewares/ShowHTML\n */\nexport type ShowHTMLConstructorOptions = Partial<ShowHTMLOptions> & {\n /**\n * A dictionary with the dependencies to inject.\n */\n inject: {\n sendFile: SendFile;\n /**\n * A function to get a possible {@link HTMLGenerator}. This is injected as a \"getter\"\n * to not interrupt the DIC \"lifecycle\": middlewares are initialized right when the\n * app starts, and injecting a reference would force the service to be initialized\n * too, even if a request is not being made.\n */\n getHTMLGenerator?: () => HTMLGenerator | undefined;\n };\n};\n/**\n * The options for the middleware creator that will mount an instance of {@link ShowHTML}.\n *\n * @group Middlewares/ShowHTML\n */\nexport type ShowHTMLMiddlewareOptions = Partial<ShowHTMLOptions> & {\n /**\n * The name of an {@link HTMLGenerator} service already available in the application.\n *\n * @default 'htmlGenerator'\n */\n htmlGeneratorServiceName?: string;\n};\n\n/**\n * A very simple middleware service to send an HTML on a server response. The special\n * _'feature'_ of this service is that it can be hooked up to an {@link HTMLGenerator}\n * service and it will automatically server the file generated by it.\n *\n * @group Middleware Classes\n * @group Middlewares/ShowHTML\n * @prettierignore\n */\nexport class ShowHTML {\n /**\n * The service that serves a file.\n */\n protected readonly _sendFile: SendFile;\n /**\n * A function to get a possible {@link HTMLGenerator}. This is injected as a \"getter\"\n * to not interrupt the DIC \"lifecycle\": middlewares are initialized right when the\n * app starts, and injecting a reference would force the service to be initialized\n * too, even if a request is not being made.\n */\n protected readonly _getHTMLGenerator: () => HTMLGenerator | undefined;\n /**\n * The customization options for the middleware.\n */\n protected _options: ShowHTMLOptions;\n /**\n * Whether or not the file is ready to be served. In case the middleware uses an\n * {@link HTMLGenerator} service, the file needs to be generated before being available,\n * and that's why this flag exists.\n */\n protected _fileReady: boolean = false;\n /**\n * @param options The options to construct the class.\n */\n constructor({ inject, ...options }: ShowHTMLConstructorOptions) {\n this._sendFile = inject.sendFile;\n this._getHTMLGenerator = inject.getHTMLGenerator || (() => undefined);\n this._options = {\n file: 'index.html',\n ...options,\n };\n }\n /**\n * Generates the middleware that serves the HTML file.\n */\n getMiddleware(): AsyncExpressMiddleware {\n return async (_, res, next) => {\n // If the file is ready to be served, serve it.\n if (this._fileReady) {\n this._sendResponse(res, next);\n return;\n }\n\n const htmlGenerator = this._getHTMLGenerator();\n // If there's no generator, switch the flag and just serve the file.\n if (!htmlGenerator) {\n this._fileReady = true;\n this._sendResponse(res, next);\n return;\n }\n\n try {\n // Wait for the HTML to be generated.\n await htmlGenerator.whenReady();\n // Update the local option.\n this._options.file = htmlGenerator.options.file;\n // Switch the flag and serve the file.\n this._fileReady = true;\n this._sendResponse(res, next);\n } catch (error) {\n next(error);\n }\n };\n }\n /**\n * The customization options.\n */\n get options(): Readonly<ShowHTMLOptions> {\n return { ...this._options };\n }\n /**\n * Serves the HTML file to the response.\n *\n * @param res The response object generated by the application.\n * @param next The function to call the next middleware.\n */\n protected _sendResponse(res: Response, next: NextFunction): void {\n res.setHeader('Content-Type', 'text/html');\n this._sendFile({\n res,\n next,\n filepath: this._options.file,\n });\n }\n}\n/**\n * Creates the middleware that serves an HTML file in the response.\n *\n * @group Middlewares\n * @group Middlewares/ShowHTML\n */\nexport const showHTMLMiddleware = middlewareCreator(\n (options: ShowHTMLMiddlewareOptions = {}) =>\n (app) => {\n const { htmlGeneratorServiceName = 'htmlGenerator', ...rest } = options;\n return new ShowHTML({\n inject: {\n sendFile: app.get('sendFile'),\n getHTMLGenerator: () => app.try(htmlGeneratorServiceName),\n },\n ...rest,\n }).getMiddleware();\n },\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkC;AA4D3B,MAAM,SAAS;AAAA,EAyBpB,YAAY,EAAE,WAAW,QAAQ,GAA+B;AArBhE,wBAAmB;AAOnB,wBAAmB;AAInB,wBAAU;AAMV,wBAAU,cAAsB;AAK9B,SAAK,YAAY,OAAO;AACxB,SAAK,oBAAoB,OAAO,qBAAqB,MAAM;AAC3D,SAAK,WAAW;AAAA,MACd,MAAM;AAAA,MACN,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAIA,gBAAwC;AACtC,WAAO,OAAO,GAAG,KAAK,SAAS;AAE7B,UAAI,KAAK,YAAY;AACnB,aAAK,cAAc,KAAK,IAAI;AAC5B;AAAA,MACF;AAEA,YAAM,gBAAgB,KAAK,kBAAkB;AAE7C,UAAI,CAAC,eAAe;AAClB,aAAK,aAAa;AAClB,aAAK,cAAc,KAAK,IAAI;AAC5B;AAAA,MACF;AAEA,UAAI;AAEF,cAAM,cAAc,UAAU;AAE9B,aAAK,SAAS,OAAO,cAAc,QAAQ;AAE3C,aAAK,aAAa;AAClB,aAAK,cAAc,KAAK,IAAI;AAAA,MAC9B,SAAS,OAAP;AACA,aAAK,KAAK;AAAA,MACZ;AAAA,IACF;AAAA,EACF;AAAA,EAIA,IAAI,UAAqC;AACvC,WAAO,EAAE,GAAG,KAAK,SAAS;AAAA,EAC5B;AAAA,EAOU,cAAc,KAAe,MAA0B;AAC/D,QAAI,UAAU,gBAAgB,WAAW;AACzC,SAAK,UAAU;AAAA,MACb;AAAA,MACA;AAAA,MACA,UAAU,KAAK,SAAS;AAAA,IAC1B,CAAC;AAAA,EACH;AACF;AAOO,MAAM,yBAAqB;AAAA,EAChC,CAAC,UAAqC,CAAC,MACrC,CAAC,QAAQ;AACP,UAAM,EAAE,2BAA2B,oBAAoB,KAAK,IAAI;AAChE,WAAO,IAAI,SAAS;AAAA,MAClB,QAAQ;AAAA,QACN,UAAU,IAAI,IAAI,UAAU;AAAA,QAC5B,kBAAkB,MAAM,IAAI,IAAI,wBAAwB;AAAA,MAC1D;AAAA,MACA,GAAG;AAAA,IACL,CAAC,EAAE,cAAc;AAAA,EACnB;AACJ;","names":[]}
@@ -0,0 +1,30 @@
1
+ export { ErrorHandler, ErrorHandlerConstructorOptions, ErrorHandlerOptions, ErrorHandlerPartialOptions, ErrorHandlerResponseOptions, errorHandlerMiddleware } from './common/errorHandler.js';
2
+ export { ForceHTTPS, ForceHTTPSOptions, ForceHTTPSPartialOptions, forceHTTPSMiddleware } from './common/forceHTTPS.js';
3
+ export { HSTS, HSTSMiddlewareOptions, HSTSMiddlewarePartialOptions, HSTSMiddlewareSettings, hstsMiddleware } from './common/hsts.js';
4
+ export { FastHTML, FastHTMLConstructorOptions, FastHTMLMiddlewareOptions, FastHTMLOptions, fastHTMLMiddleware } from './html/fastHTML.js';
5
+ export { ShowHTML, ShowHTMLConstructorOptions, ShowHTMLMiddlewareOptions, ShowHTMLOptions, showHTMLMiddleware } from './html/showHTML.js';
6
+ export { VersionValidator, VersionValidatorConstructorOptions, VersionValidatorLatestOptions, VersionValidatorMiddlewareOptions, VersionValidatorOptions, VersionValidatorPartialOptions, VersionValidatorPopupOptions, versionValidatorMiddleware } from './utils/versionValidator.js';
7
+ import '@homer0/jimple';
8
+ import '../utils/fns/statuses.js';
9
+ import 'statuses';
10
+ import '../jimpex-7eaee271.js';
11
+ import '@homer0/events-hub';
12
+ import '../types/express.js';
13
+ import 'express';
14
+ import '../types/http.js';
15
+ import 'https';
16
+ import 'http';
17
+ import 'spdy';
18
+ import 'node-fetch';
19
+ import '@homer0/simple-config';
20
+ import '../types/utils.js';
21
+ import '@homer0/simple-logger';
22
+ import '../services/common/httpError.js';
23
+ import '../services/common/appError.js';
24
+ import '../services/http/responsesBuilder.js';
25
+ import '../services/common/sendFile.js';
26
+ import '@homer0/path-utils';
27
+ import '../services/html/htmlGenerator.js';
28
+ import '../services/frontend/frontendFs.js';
29
+ import 'fs/promises';
30
+ import '@homer0/deferred';