expressed-core 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (561) hide show
  1. package/README-es.md +42 -0
  2. package/README-es.md.backup +44 -0
  3. package/README.md +41 -0
  4. package/README.md.backup +43 -0
  5. package/hooked/LICENSE +204 -0
  6. package/hooked/README.es.md +238 -0
  7. package/hooked/README.md +238 -0
  8. package/hooked/advanced-example.js +240 -0
  9. package/hooked/express-hooked.js +206 -0
  10. package/hooked/hooks.js +584 -0
  11. package/hooked/package.json +30 -0
  12. package/index.js +25 -0
  13. package/package.json +36 -0
  14. package/queued/LICENSE +201 -0
  15. package/queued/QueueSystem.js +451 -0
  16. package/queued/README.es.md +335 -0
  17. package/queued/README.md +335 -0
  18. package/queued/express-example.js +143 -0
  19. package/queued/express-integration.js +115 -0
  20. package/queued/package.json +33 -0
  21. package/router/ExpressRouter.js +247 -0
  22. package/router/ExpressRouterIntegration.js +129 -0
  23. package/router/LICENSE +201 -0
  24. package/router/README.es.md +142 -0
  25. package/router/README.md +142 -0
  26. package/router/RouteDirectoryLoader.js +299 -0
  27. package/router/RouteLoader.js +245 -0
  28. package/router/RouteMatcher.js +361 -0
  29. package/router/node_modules/.package-lock.json +876 -0
  30. package/router/node_modules/accepts/HISTORY.md +243 -0
  31. package/router/node_modules/accepts/LICENSE +23 -0
  32. package/router/node_modules/accepts/README.md +140 -0
  33. package/router/node_modules/accepts/index.js +238 -0
  34. package/router/node_modules/accepts/package.json +47 -0
  35. package/router/node_modules/array-flatten/LICENSE +21 -0
  36. package/router/node_modules/array-flatten/README.md +43 -0
  37. package/router/node_modules/array-flatten/array-flatten.js +64 -0
  38. package/router/node_modules/array-flatten/package.json +39 -0
  39. package/router/node_modules/body-parser/HISTORY.md +680 -0
  40. package/router/node_modules/body-parser/LICENSE +23 -0
  41. package/router/node_modules/body-parser/README.md +476 -0
  42. package/router/node_modules/body-parser/index.js +156 -0
  43. package/router/node_modules/body-parser/lib/read.js +205 -0
  44. package/router/node_modules/body-parser/lib/types/json.js +247 -0
  45. package/router/node_modules/body-parser/lib/types/raw.js +101 -0
  46. package/router/node_modules/body-parser/lib/types/text.js +121 -0
  47. package/router/node_modules/body-parser/lib/types/urlencoded.js +300 -0
  48. package/router/node_modules/body-parser/package.json +55 -0
  49. package/router/node_modules/bytes/History.md +97 -0
  50. package/router/node_modules/bytes/LICENSE +23 -0
  51. package/router/node_modules/bytes/Readme.md +152 -0
  52. package/router/node_modules/bytes/index.js +170 -0
  53. package/router/node_modules/bytes/package.json +42 -0
  54. package/router/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
  55. package/router/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
  56. package/router/node_modules/call-bind-apply-helpers/LICENSE +21 -0
  57. package/router/node_modules/call-bind-apply-helpers/README.md +62 -0
  58. package/router/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
  59. package/router/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
  60. package/router/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
  61. package/router/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
  62. package/router/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
  63. package/router/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
  64. package/router/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
  65. package/router/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
  66. package/router/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
  67. package/router/node_modules/call-bind-apply-helpers/index.js +15 -0
  68. package/router/node_modules/call-bind-apply-helpers/package.json +85 -0
  69. package/router/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
  70. package/router/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
  71. package/router/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
  72. package/router/node_modules/call-bound/.github/FUNDING.yml +12 -0
  73. package/router/node_modules/call-bound/CHANGELOG.md +42 -0
  74. package/router/node_modules/call-bound/LICENSE +21 -0
  75. package/router/node_modules/call-bound/README.md +53 -0
  76. package/router/node_modules/call-bound/index.d.ts +94 -0
  77. package/router/node_modules/call-bound/index.js +19 -0
  78. package/router/node_modules/call-bound/package.json +99 -0
  79. package/router/node_modules/call-bound/tsconfig.json +10 -0
  80. package/router/node_modules/content-disposition/HISTORY.md +60 -0
  81. package/router/node_modules/content-disposition/LICENSE +22 -0
  82. package/router/node_modules/content-disposition/README.md +142 -0
  83. package/router/node_modules/content-disposition/index.js +458 -0
  84. package/router/node_modules/content-disposition/package.json +44 -0
  85. package/router/node_modules/content-type/HISTORY.md +29 -0
  86. package/router/node_modules/content-type/LICENSE +22 -0
  87. package/router/node_modules/content-type/README.md +94 -0
  88. package/router/node_modules/content-type/index.js +225 -0
  89. package/router/node_modules/content-type/package.json +42 -0
  90. package/router/node_modules/cookie/LICENSE +24 -0
  91. package/router/node_modules/cookie/README.md +317 -0
  92. package/router/node_modules/cookie/SECURITY.md +25 -0
  93. package/router/node_modules/cookie/index.js +335 -0
  94. package/router/node_modules/cookie/package.json +44 -0
  95. package/router/node_modules/cookie-signature/History.md +42 -0
  96. package/router/node_modules/cookie-signature/Readme.md +42 -0
  97. package/router/node_modules/cookie-signature/index.js +51 -0
  98. package/router/node_modules/cookie-signature/package.json +18 -0
  99. package/router/node_modules/debug/.coveralls.yml +1 -0
  100. package/router/node_modules/debug/CHANGELOG.md +362 -0
  101. package/router/node_modules/debug/LICENSE +19 -0
  102. package/router/node_modules/debug/Makefile +50 -0
  103. package/router/node_modules/debug/README.md +312 -0
  104. package/router/node_modules/debug/component.json +19 -0
  105. package/router/node_modules/debug/karma.conf.js +70 -0
  106. package/router/node_modules/debug/node.js +1 -0
  107. package/router/node_modules/debug/package.json +49 -0
  108. package/router/node_modules/debug/src/browser.js +185 -0
  109. package/router/node_modules/debug/src/debug.js +202 -0
  110. package/router/node_modules/debug/src/index.js +10 -0
  111. package/router/node_modules/debug/src/inspector-log.js +15 -0
  112. package/router/node_modules/debug/src/node.js +248 -0
  113. package/router/node_modules/depd/History.md +103 -0
  114. package/router/node_modules/depd/LICENSE +22 -0
  115. package/router/node_modules/depd/Readme.md +280 -0
  116. package/router/node_modules/depd/index.js +538 -0
  117. package/router/node_modules/depd/lib/browser/index.js +77 -0
  118. package/router/node_modules/depd/package.json +45 -0
  119. package/router/node_modules/destroy/LICENSE +23 -0
  120. package/router/node_modules/destroy/README.md +63 -0
  121. package/router/node_modules/destroy/index.js +209 -0
  122. package/router/node_modules/destroy/package.json +48 -0
  123. package/router/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
  124. package/router/node_modules/dunder-proto/CHANGELOG.md +24 -0
  125. package/router/node_modules/dunder-proto/LICENSE +21 -0
  126. package/router/node_modules/dunder-proto/README.md +54 -0
  127. package/router/node_modules/dunder-proto/get.d.ts +5 -0
  128. package/router/node_modules/dunder-proto/get.js +30 -0
  129. package/router/node_modules/dunder-proto/package.json +76 -0
  130. package/router/node_modules/dunder-proto/set.d.ts +5 -0
  131. package/router/node_modules/dunder-proto/set.js +35 -0
  132. package/router/node_modules/dunder-proto/tsconfig.json +9 -0
  133. package/router/node_modules/ee-first/LICENSE +22 -0
  134. package/router/node_modules/ee-first/README.md +80 -0
  135. package/router/node_modules/ee-first/index.js +95 -0
  136. package/router/node_modules/ee-first/package.json +29 -0
  137. package/router/node_modules/encodeurl/LICENSE +22 -0
  138. package/router/node_modules/encodeurl/README.md +109 -0
  139. package/router/node_modules/encodeurl/index.js +60 -0
  140. package/router/node_modules/encodeurl/package.json +40 -0
  141. package/router/node_modules/es-define-property/.github/FUNDING.yml +12 -0
  142. package/router/node_modules/es-define-property/CHANGELOG.md +29 -0
  143. package/router/node_modules/es-define-property/LICENSE +21 -0
  144. package/router/node_modules/es-define-property/README.md +49 -0
  145. package/router/node_modules/es-define-property/index.d.ts +3 -0
  146. package/router/node_modules/es-define-property/index.js +14 -0
  147. package/router/node_modules/es-define-property/package.json +81 -0
  148. package/router/node_modules/es-define-property/tsconfig.json +10 -0
  149. package/router/node_modules/es-errors/.github/FUNDING.yml +12 -0
  150. package/router/node_modules/es-errors/CHANGELOG.md +40 -0
  151. package/router/node_modules/es-errors/LICENSE +21 -0
  152. package/router/node_modules/es-errors/README.md +55 -0
  153. package/router/node_modules/es-errors/eval.d.ts +3 -0
  154. package/router/node_modules/es-errors/eval.js +4 -0
  155. package/router/node_modules/es-errors/index.d.ts +3 -0
  156. package/router/node_modules/es-errors/index.js +4 -0
  157. package/router/node_modules/es-errors/package.json +80 -0
  158. package/router/node_modules/es-errors/range.d.ts +3 -0
  159. package/router/node_modules/es-errors/range.js +4 -0
  160. package/router/node_modules/es-errors/ref.d.ts +3 -0
  161. package/router/node_modules/es-errors/ref.js +4 -0
  162. package/router/node_modules/es-errors/syntax.d.ts +3 -0
  163. package/router/node_modules/es-errors/syntax.js +4 -0
  164. package/router/node_modules/es-errors/tsconfig.json +49 -0
  165. package/router/node_modules/es-errors/type.d.ts +3 -0
  166. package/router/node_modules/es-errors/type.js +4 -0
  167. package/router/node_modules/es-errors/uri.d.ts +3 -0
  168. package/router/node_modules/es-errors/uri.js +4 -0
  169. package/router/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
  170. package/router/node_modules/es-object-atoms/CHANGELOG.md +37 -0
  171. package/router/node_modules/es-object-atoms/LICENSE +21 -0
  172. package/router/node_modules/es-object-atoms/README.md +63 -0
  173. package/router/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
  174. package/router/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
  175. package/router/node_modules/es-object-atoms/ToObject.d.ts +7 -0
  176. package/router/node_modules/es-object-atoms/ToObject.js +10 -0
  177. package/router/node_modules/es-object-atoms/index.d.ts +3 -0
  178. package/router/node_modules/es-object-atoms/index.js +4 -0
  179. package/router/node_modules/es-object-atoms/isObject.d.ts +3 -0
  180. package/router/node_modules/es-object-atoms/isObject.js +6 -0
  181. package/router/node_modules/es-object-atoms/package.json +80 -0
  182. package/router/node_modules/es-object-atoms/tsconfig.json +6 -0
  183. package/router/node_modules/escape-html/LICENSE +24 -0
  184. package/router/node_modules/escape-html/Readme.md +43 -0
  185. package/router/node_modules/escape-html/index.js +78 -0
  186. package/router/node_modules/escape-html/package.json +24 -0
  187. package/router/node_modules/etag/HISTORY.md +83 -0
  188. package/router/node_modules/etag/LICENSE +22 -0
  189. package/router/node_modules/etag/README.md +159 -0
  190. package/router/node_modules/etag/index.js +131 -0
  191. package/router/node_modules/etag/package.json +47 -0
  192. package/router/node_modules/express/History.md +3667 -0
  193. package/router/node_modules/express/LICENSE +24 -0
  194. package/router/node_modules/express/Readme.md +260 -0
  195. package/router/node_modules/express/index.js +11 -0
  196. package/router/node_modules/express/lib/application.js +661 -0
  197. package/router/node_modules/express/lib/express.js +116 -0
  198. package/router/node_modules/express/lib/middleware/init.js +43 -0
  199. package/router/node_modules/express/lib/middleware/query.js +47 -0
  200. package/router/node_modules/express/lib/request.js +525 -0
  201. package/router/node_modules/express/lib/response.js +1179 -0
  202. package/router/node_modules/express/lib/router/index.js +673 -0
  203. package/router/node_modules/express/lib/router/layer.js +181 -0
  204. package/router/node_modules/express/lib/router/route.js +230 -0
  205. package/router/node_modules/express/lib/utils.js +303 -0
  206. package/router/node_modules/express/lib/view.js +182 -0
  207. package/router/node_modules/express/package.json +102 -0
  208. package/router/node_modules/express-hooked/LICENSE +204 -0
  209. package/router/node_modules/express-hooked/README.es.md +123 -0
  210. package/router/node_modules/express-hooked/README.md +123 -0
  211. package/router/node_modules/express-hooked/express-hooked.js +206 -0
  212. package/router/node_modules/express-hooked/hooks.js +584 -0
  213. package/router/node_modules/express-hooked/package.json +30 -0
  214. package/router/node_modules/finalhandler/HISTORY.md +216 -0
  215. package/router/node_modules/finalhandler/LICENSE +22 -0
  216. package/router/node_modules/finalhandler/README.md +147 -0
  217. package/router/node_modules/finalhandler/SECURITY.md +25 -0
  218. package/router/node_modules/finalhandler/index.js +341 -0
  219. package/router/node_modules/finalhandler/package.json +47 -0
  220. package/router/node_modules/forwarded/HISTORY.md +21 -0
  221. package/router/node_modules/forwarded/LICENSE +22 -0
  222. package/router/node_modules/forwarded/README.md +57 -0
  223. package/router/node_modules/forwarded/index.js +90 -0
  224. package/router/node_modules/forwarded/package.json +45 -0
  225. package/router/node_modules/fresh/HISTORY.md +70 -0
  226. package/router/node_modules/fresh/LICENSE +23 -0
  227. package/router/node_modules/fresh/README.md +119 -0
  228. package/router/node_modules/fresh/index.js +137 -0
  229. package/router/node_modules/fresh/package.json +46 -0
  230. package/router/node_modules/function-bind/.github/FUNDING.yml +12 -0
  231. package/router/node_modules/function-bind/.github/SECURITY.md +3 -0
  232. package/router/node_modules/function-bind/CHANGELOG.md +136 -0
  233. package/router/node_modules/function-bind/LICENSE +20 -0
  234. package/router/node_modules/function-bind/README.md +46 -0
  235. package/router/node_modules/function-bind/implementation.js +84 -0
  236. package/router/node_modules/function-bind/index.js +5 -0
  237. package/router/node_modules/function-bind/package.json +87 -0
  238. package/router/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
  239. package/router/node_modules/get-intrinsic/CHANGELOG.md +186 -0
  240. package/router/node_modules/get-intrinsic/LICENSE +21 -0
  241. package/router/node_modules/get-intrinsic/README.md +71 -0
  242. package/router/node_modules/get-intrinsic/index.js +378 -0
  243. package/router/node_modules/get-intrinsic/package.json +97 -0
  244. package/router/node_modules/get-proto/.github/FUNDING.yml +12 -0
  245. package/router/node_modules/get-proto/CHANGELOG.md +21 -0
  246. package/router/node_modules/get-proto/LICENSE +21 -0
  247. package/router/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
  248. package/router/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
  249. package/router/node_modules/get-proto/README.md +50 -0
  250. package/router/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
  251. package/router/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
  252. package/router/node_modules/get-proto/index.d.ts +5 -0
  253. package/router/node_modules/get-proto/index.js +27 -0
  254. package/router/node_modules/get-proto/package.json +81 -0
  255. package/router/node_modules/get-proto/tsconfig.json +9 -0
  256. package/router/node_modules/gopd/.github/FUNDING.yml +12 -0
  257. package/router/node_modules/gopd/CHANGELOG.md +45 -0
  258. package/router/node_modules/gopd/LICENSE +21 -0
  259. package/router/node_modules/gopd/README.md +40 -0
  260. package/router/node_modules/gopd/gOPD.d.ts +1 -0
  261. package/router/node_modules/gopd/gOPD.js +4 -0
  262. package/router/node_modules/gopd/index.d.ts +5 -0
  263. package/router/node_modules/gopd/index.js +15 -0
  264. package/router/node_modules/gopd/package.json +77 -0
  265. package/router/node_modules/gopd/tsconfig.json +9 -0
  266. package/router/node_modules/has-symbols/.github/FUNDING.yml +12 -0
  267. package/router/node_modules/has-symbols/CHANGELOG.md +91 -0
  268. package/router/node_modules/has-symbols/LICENSE +21 -0
  269. package/router/node_modules/has-symbols/README.md +46 -0
  270. package/router/node_modules/has-symbols/index.d.ts +3 -0
  271. package/router/node_modules/has-symbols/index.js +14 -0
  272. package/router/node_modules/has-symbols/package.json +111 -0
  273. package/router/node_modules/has-symbols/shams.d.ts +3 -0
  274. package/router/node_modules/has-symbols/shams.js +45 -0
  275. package/router/node_modules/has-symbols/tsconfig.json +10 -0
  276. package/router/node_modules/hasown/.github/FUNDING.yml +12 -0
  277. package/router/node_modules/hasown/CHANGELOG.md +40 -0
  278. package/router/node_modules/hasown/LICENSE +21 -0
  279. package/router/node_modules/hasown/README.md +40 -0
  280. package/router/node_modules/hasown/index.d.ts +3 -0
  281. package/router/node_modules/hasown/index.js +8 -0
  282. package/router/node_modules/hasown/package.json +92 -0
  283. package/router/node_modules/hasown/tsconfig.json +6 -0
  284. package/router/node_modules/http-errors/HISTORY.md +186 -0
  285. package/router/node_modules/http-errors/LICENSE +23 -0
  286. package/router/node_modules/http-errors/README.md +169 -0
  287. package/router/node_modules/http-errors/index.js +290 -0
  288. package/router/node_modules/http-errors/package.json +54 -0
  289. package/router/node_modules/iconv-lite/Changelog.md +162 -0
  290. package/router/node_modules/iconv-lite/LICENSE +21 -0
  291. package/router/node_modules/iconv-lite/README.md +156 -0
  292. package/router/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
  293. package/router/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
  294. package/router/node_modules/iconv-lite/encodings/index.js +22 -0
  295. package/router/node_modules/iconv-lite/encodings/internal.js +188 -0
  296. package/router/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
  297. package/router/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
  298. package/router/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
  299. package/router/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
  300. package/router/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
  301. package/router/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
  302. package/router/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
  303. package/router/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
  304. package/router/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
  305. package/router/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
  306. package/router/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
  307. package/router/node_modules/iconv-lite/encodings/utf16.js +177 -0
  308. package/router/node_modules/iconv-lite/encodings/utf7.js +290 -0
  309. package/router/node_modules/iconv-lite/lib/bom-handling.js +52 -0
  310. package/router/node_modules/iconv-lite/lib/extend-node.js +217 -0
  311. package/router/node_modules/iconv-lite/lib/index.d.ts +24 -0
  312. package/router/node_modules/iconv-lite/lib/index.js +153 -0
  313. package/router/node_modules/iconv-lite/lib/streams.js +121 -0
  314. package/router/node_modules/iconv-lite/package.json +46 -0
  315. package/router/node_modules/inherits/LICENSE +16 -0
  316. package/router/node_modules/inherits/README.md +42 -0
  317. package/router/node_modules/inherits/inherits.js +9 -0
  318. package/router/node_modules/inherits/inherits_browser.js +27 -0
  319. package/router/node_modules/inherits/package.json +29 -0
  320. package/router/node_modules/ipaddr.js/LICENSE +19 -0
  321. package/router/node_modules/ipaddr.js/README.md +233 -0
  322. package/router/node_modules/ipaddr.js/ipaddr.min.js +1 -0
  323. package/router/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
  324. package/router/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
  325. package/router/node_modules/ipaddr.js/package.json +35 -0
  326. package/router/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
  327. package/router/node_modules/math-intrinsics/CHANGELOG.md +24 -0
  328. package/router/node_modules/math-intrinsics/LICENSE +21 -0
  329. package/router/node_modules/math-intrinsics/README.md +50 -0
  330. package/router/node_modules/math-intrinsics/abs.d.ts +1 -0
  331. package/router/node_modules/math-intrinsics/abs.js +4 -0
  332. package/router/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
  333. package/router/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
  334. package/router/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
  335. package/router/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
  336. package/router/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
  337. package/router/node_modules/math-intrinsics/constants/maxValue.js +5 -0
  338. package/router/node_modules/math-intrinsics/floor.d.ts +1 -0
  339. package/router/node_modules/math-intrinsics/floor.js +4 -0
  340. package/router/node_modules/math-intrinsics/isFinite.d.ts +3 -0
  341. package/router/node_modules/math-intrinsics/isFinite.js +12 -0
  342. package/router/node_modules/math-intrinsics/isInteger.d.ts +3 -0
  343. package/router/node_modules/math-intrinsics/isInteger.js +16 -0
  344. package/router/node_modules/math-intrinsics/isNaN.d.ts +1 -0
  345. package/router/node_modules/math-intrinsics/isNaN.js +6 -0
  346. package/router/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
  347. package/router/node_modules/math-intrinsics/isNegativeZero.js +6 -0
  348. package/router/node_modules/math-intrinsics/max.d.ts +1 -0
  349. package/router/node_modules/math-intrinsics/max.js +4 -0
  350. package/router/node_modules/math-intrinsics/min.d.ts +1 -0
  351. package/router/node_modules/math-intrinsics/min.js +4 -0
  352. package/router/node_modules/math-intrinsics/mod.d.ts +3 -0
  353. package/router/node_modules/math-intrinsics/mod.js +9 -0
  354. package/router/node_modules/math-intrinsics/package.json +86 -0
  355. package/router/node_modules/math-intrinsics/pow.d.ts +1 -0
  356. package/router/node_modules/math-intrinsics/pow.js +4 -0
  357. package/router/node_modules/math-intrinsics/round.d.ts +1 -0
  358. package/router/node_modules/math-intrinsics/round.js +4 -0
  359. package/router/node_modules/math-intrinsics/sign.d.ts +3 -0
  360. package/router/node_modules/math-intrinsics/sign.js +11 -0
  361. package/router/node_modules/math-intrinsics/tsconfig.json +3 -0
  362. package/router/node_modules/media-typer/HISTORY.md +22 -0
  363. package/router/node_modules/media-typer/LICENSE +22 -0
  364. package/router/node_modules/media-typer/README.md +81 -0
  365. package/router/node_modules/media-typer/index.js +270 -0
  366. package/router/node_modules/media-typer/package.json +26 -0
  367. package/router/node_modules/merge-descriptors/HISTORY.md +21 -0
  368. package/router/node_modules/merge-descriptors/LICENSE +23 -0
  369. package/router/node_modules/merge-descriptors/README.md +49 -0
  370. package/router/node_modules/merge-descriptors/index.js +60 -0
  371. package/router/node_modules/merge-descriptors/package.json +39 -0
  372. package/router/node_modules/methods/HISTORY.md +29 -0
  373. package/router/node_modules/methods/LICENSE +24 -0
  374. package/router/node_modules/methods/README.md +51 -0
  375. package/router/node_modules/methods/index.js +69 -0
  376. package/router/node_modules/methods/package.json +36 -0
  377. package/router/node_modules/mime/CHANGELOG.md +164 -0
  378. package/router/node_modules/mime/LICENSE +21 -0
  379. package/router/node_modules/mime/README.md +90 -0
  380. package/router/node_modules/mime/cli.js +8 -0
  381. package/router/node_modules/mime/mime.js +108 -0
  382. package/router/node_modules/mime/package.json +44 -0
  383. package/router/node_modules/mime/src/build.js +53 -0
  384. package/router/node_modules/mime/src/test.js +60 -0
  385. package/router/node_modules/mime/types.json +1 -0
  386. package/router/node_modules/mime-db/HISTORY.md +507 -0
  387. package/router/node_modules/mime-db/LICENSE +23 -0
  388. package/router/node_modules/mime-db/README.md +100 -0
  389. package/router/node_modules/mime-db/db.json +8519 -0
  390. package/router/node_modules/mime-db/index.js +12 -0
  391. package/router/node_modules/mime-db/package.json +60 -0
  392. package/router/node_modules/mime-types/HISTORY.md +397 -0
  393. package/router/node_modules/mime-types/LICENSE +23 -0
  394. package/router/node_modules/mime-types/README.md +113 -0
  395. package/router/node_modules/mime-types/index.js +188 -0
  396. package/router/node_modules/mime-types/package.json +44 -0
  397. package/router/node_modules/ms/index.js +152 -0
  398. package/router/node_modules/ms/license.md +21 -0
  399. package/router/node_modules/ms/package.json +37 -0
  400. package/router/node_modules/ms/readme.md +51 -0
  401. package/router/node_modules/negotiator/HISTORY.md +108 -0
  402. package/router/node_modules/negotiator/LICENSE +24 -0
  403. package/router/node_modules/negotiator/README.md +203 -0
  404. package/router/node_modules/negotiator/index.js +82 -0
  405. package/router/node_modules/negotiator/lib/charset.js +169 -0
  406. package/router/node_modules/negotiator/lib/encoding.js +184 -0
  407. package/router/node_modules/negotiator/lib/language.js +179 -0
  408. package/router/node_modules/negotiator/lib/mediaType.js +294 -0
  409. package/router/node_modules/negotiator/package.json +42 -0
  410. package/router/node_modules/object-inspect/.github/FUNDING.yml +12 -0
  411. package/router/node_modules/object-inspect/CHANGELOG.md +424 -0
  412. package/router/node_modules/object-inspect/LICENSE +21 -0
  413. package/router/node_modules/object-inspect/example/all.js +23 -0
  414. package/router/node_modules/object-inspect/example/circular.js +6 -0
  415. package/router/node_modules/object-inspect/example/fn.js +5 -0
  416. package/router/node_modules/object-inspect/example/inspect.js +10 -0
  417. package/router/node_modules/object-inspect/index.js +544 -0
  418. package/router/node_modules/object-inspect/package-support.json +20 -0
  419. package/router/node_modules/object-inspect/package.json +105 -0
  420. package/router/node_modules/object-inspect/readme.markdown +84 -0
  421. package/router/node_modules/object-inspect/test-core-js.js +26 -0
  422. package/router/node_modules/object-inspect/util.inspect.js +1 -0
  423. package/router/node_modules/on-finished/HISTORY.md +98 -0
  424. package/router/node_modules/on-finished/LICENSE +23 -0
  425. package/router/node_modules/on-finished/README.md +162 -0
  426. package/router/node_modules/on-finished/index.js +234 -0
  427. package/router/node_modules/on-finished/package.json +39 -0
  428. package/router/node_modules/parseurl/HISTORY.md +58 -0
  429. package/router/node_modules/parseurl/LICENSE +24 -0
  430. package/router/node_modules/parseurl/README.md +133 -0
  431. package/router/node_modules/parseurl/index.js +158 -0
  432. package/router/node_modules/parseurl/package.json +40 -0
  433. package/router/node_modules/path-to-regexp/LICENSE +21 -0
  434. package/router/node_modules/path-to-regexp/Readme.md +35 -0
  435. package/router/node_modules/path-to-regexp/index.js +156 -0
  436. package/router/node_modules/path-to-regexp/package.json +30 -0
  437. package/router/node_modules/proxy-addr/HISTORY.md +161 -0
  438. package/router/node_modules/proxy-addr/LICENSE +22 -0
  439. package/router/node_modules/proxy-addr/README.md +139 -0
  440. package/router/node_modules/proxy-addr/index.js +327 -0
  441. package/router/node_modules/proxy-addr/package.json +47 -0
  442. package/router/node_modules/qs/.github/FUNDING.yml +12 -0
  443. package/router/node_modules/qs/.github/SECURITY.md +11 -0
  444. package/router/node_modules/qs/.github/THREAT_MODEL.md +78 -0
  445. package/router/node_modules/qs/CHANGELOG.md +644 -0
  446. package/router/node_modules/qs/LICENSE.md +29 -0
  447. package/router/node_modules/qs/README.md +740 -0
  448. package/router/node_modules/qs/dist/qs.js +141 -0
  449. package/router/node_modules/qs/eslint.config.mjs +56 -0
  450. package/router/node_modules/qs/lib/formats.js +23 -0
  451. package/router/node_modules/qs/lib/index.js +11 -0
  452. package/router/node_modules/qs/lib/parse.js +371 -0
  453. package/router/node_modules/qs/lib/stringify.js +356 -0
  454. package/router/node_modules/qs/lib/utils.js +340 -0
  455. package/router/node_modules/qs/package.json +94 -0
  456. package/router/node_modules/range-parser/HISTORY.md +56 -0
  457. package/router/node_modules/range-parser/LICENSE +23 -0
  458. package/router/node_modules/range-parser/README.md +84 -0
  459. package/router/node_modules/range-parser/index.js +162 -0
  460. package/router/node_modules/range-parser/package.json +44 -0
  461. package/router/node_modules/raw-body/LICENSE +22 -0
  462. package/router/node_modules/raw-body/README.md +223 -0
  463. package/router/node_modules/raw-body/index.d.ts +87 -0
  464. package/router/node_modules/raw-body/index.js +336 -0
  465. package/router/node_modules/raw-body/package.json +47 -0
  466. package/router/node_modules/safe-buffer/LICENSE +21 -0
  467. package/router/node_modules/safe-buffer/README.md +584 -0
  468. package/router/node_modules/safe-buffer/index.d.ts +187 -0
  469. package/router/node_modules/safe-buffer/index.js +65 -0
  470. package/router/node_modules/safe-buffer/package.json +51 -0
  471. package/router/node_modules/safer-buffer/LICENSE +21 -0
  472. package/router/node_modules/safer-buffer/Porting-Buffer.md +268 -0
  473. package/router/node_modules/safer-buffer/Readme.md +156 -0
  474. package/router/node_modules/safer-buffer/dangerous.js +58 -0
  475. package/router/node_modules/safer-buffer/package.json +34 -0
  476. package/router/node_modules/safer-buffer/safer.js +77 -0
  477. package/router/node_modules/safer-buffer/tests.js +406 -0
  478. package/router/node_modules/send/HISTORY.md +538 -0
  479. package/router/node_modules/send/LICENSE +23 -0
  480. package/router/node_modules/send/README.md +327 -0
  481. package/router/node_modules/send/SECURITY.md +24 -0
  482. package/router/node_modules/send/index.js +1142 -0
  483. package/router/node_modules/send/node_modules/ms/index.js +162 -0
  484. package/router/node_modules/send/node_modules/ms/license.md +21 -0
  485. package/router/node_modules/send/node_modules/ms/package.json +38 -0
  486. package/router/node_modules/send/node_modules/ms/readme.md +59 -0
  487. package/router/node_modules/send/package.json +62 -0
  488. package/router/node_modules/serve-static/HISTORY.md +493 -0
  489. package/router/node_modules/serve-static/LICENSE +25 -0
  490. package/router/node_modules/serve-static/README.md +257 -0
  491. package/router/node_modules/serve-static/index.js +209 -0
  492. package/router/node_modules/serve-static/package.json +42 -0
  493. package/router/node_modules/setprototypeof/LICENSE +13 -0
  494. package/router/node_modules/setprototypeof/README.md +31 -0
  495. package/router/node_modules/setprototypeof/index.d.ts +2 -0
  496. package/router/node_modules/setprototypeof/index.js +17 -0
  497. package/router/node_modules/setprototypeof/package.json +38 -0
  498. package/router/node_modules/side-channel/.github/FUNDING.yml +12 -0
  499. package/router/node_modules/side-channel/CHANGELOG.md +110 -0
  500. package/router/node_modules/side-channel/LICENSE +21 -0
  501. package/router/node_modules/side-channel/README.md +61 -0
  502. package/router/node_modules/side-channel/index.d.ts +14 -0
  503. package/router/node_modules/side-channel/index.js +43 -0
  504. package/router/node_modules/side-channel/package.json +85 -0
  505. package/router/node_modules/side-channel/tsconfig.json +9 -0
  506. package/router/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
  507. package/router/node_modules/side-channel-list/CHANGELOG.md +15 -0
  508. package/router/node_modules/side-channel-list/LICENSE +21 -0
  509. package/router/node_modules/side-channel-list/README.md +62 -0
  510. package/router/node_modules/side-channel-list/index.d.ts +13 -0
  511. package/router/node_modules/side-channel-list/index.js +113 -0
  512. package/router/node_modules/side-channel-list/list.d.ts +14 -0
  513. package/router/node_modules/side-channel-list/package.json +77 -0
  514. package/router/node_modules/side-channel-list/tsconfig.json +9 -0
  515. package/router/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
  516. package/router/node_modules/side-channel-map/CHANGELOG.md +22 -0
  517. package/router/node_modules/side-channel-map/LICENSE +21 -0
  518. package/router/node_modules/side-channel-map/README.md +62 -0
  519. package/router/node_modules/side-channel-map/index.d.ts +15 -0
  520. package/router/node_modules/side-channel-map/index.js +68 -0
  521. package/router/node_modules/side-channel-map/package.json +80 -0
  522. package/router/node_modules/side-channel-map/tsconfig.json +9 -0
  523. package/router/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
  524. package/router/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
  525. package/router/node_modules/side-channel-weakmap/LICENSE +21 -0
  526. package/router/node_modules/side-channel-weakmap/README.md +62 -0
  527. package/router/node_modules/side-channel-weakmap/index.d.ts +15 -0
  528. package/router/node_modules/side-channel-weakmap/index.js +84 -0
  529. package/router/node_modules/side-channel-weakmap/package.json +87 -0
  530. package/router/node_modules/side-channel-weakmap/tsconfig.json +9 -0
  531. package/router/node_modules/statuses/HISTORY.md +87 -0
  532. package/router/node_modules/statuses/LICENSE +23 -0
  533. package/router/node_modules/statuses/README.md +139 -0
  534. package/router/node_modules/statuses/codes.json +65 -0
  535. package/router/node_modules/statuses/index.js +146 -0
  536. package/router/node_modules/statuses/package.json +49 -0
  537. package/router/node_modules/toidentifier/HISTORY.md +9 -0
  538. package/router/node_modules/toidentifier/LICENSE +21 -0
  539. package/router/node_modules/toidentifier/README.md +61 -0
  540. package/router/node_modules/toidentifier/index.js +32 -0
  541. package/router/node_modules/toidentifier/package.json +38 -0
  542. package/router/node_modules/type-is/HISTORY.md +259 -0
  543. package/router/node_modules/type-is/LICENSE +23 -0
  544. package/router/node_modules/type-is/README.md +170 -0
  545. package/router/node_modules/type-is/index.js +266 -0
  546. package/router/node_modules/type-is/package.json +45 -0
  547. package/router/node_modules/unpipe/HISTORY.md +4 -0
  548. package/router/node_modules/unpipe/LICENSE +22 -0
  549. package/router/node_modules/unpipe/README.md +43 -0
  550. package/router/node_modules/unpipe/index.js +69 -0
  551. package/router/node_modules/unpipe/package.json +27 -0
  552. package/router/node_modules/utils-merge/LICENSE +20 -0
  553. package/router/node_modules/utils-merge/README.md +34 -0
  554. package/router/node_modules/utils-merge/index.js +23 -0
  555. package/router/node_modules/utils-merge/package.json +40 -0
  556. package/router/node_modules/vary/HISTORY.md +39 -0
  557. package/router/node_modules/vary/LICENSE +22 -0
  558. package/router/node_modules/vary/README.md +101 -0
  559. package/router/node_modules/vary/index.js +149 -0
  560. package/router/node_modules/vary/package.json +43 -0
  561. package/router/package.json +36 -0
@@ -0,0 +1,238 @@
1
+ # Express-Hooked
2
+
3
+ Express-Hooked is a powerful extension for Express.js that brings a comprehensive hooks and filters system to your applications. Inspired by WordPress hooks system, it allows developers to extend functionality at various points in the request lifecycle without modifying core code.
4
+
5
+ ## Why Choose Express-Hooked?
6
+
7
+ - **Flexible Architecture**: Hook into request processing at multiple stages
8
+ - **Non-Intrusive**: Extend functionality without modifying existing code
9
+ - **Priority System**: Control execution order with priority levels
10
+ - **Namespace Support**: Organize hooks with namespaces for better maintainability
11
+ - **Easy Integration**: Simple setup with minimal configuration
12
+
13
+ ## Installation
14
+
15
+ ```bash
16
+ npm install express-hooked
17
+ ```
18
+
19
+ ## Quick Start
20
+
21
+ ```javascript
22
+ const express = require('express');
23
+ const ExpressHooked = require('express-hooked');
24
+
25
+ const app = express();
26
+ const port = 3000;
27
+
28
+ // Initialize ExpressHooked
29
+ const expressHooks = new ExpressHooked(app);
30
+
31
+ // Register an action hook
32
+ expressHooks.addAction('request_started', (req, res, next) => {
33
+ console.log(`Request received: ${req.method} ${req.url}`);
34
+ next();
35
+ });
36
+
37
+ // Register a filter hook
38
+ expressHooks.addFilter('modify_response_data', (data) => {
39
+ return {
40
+ ...data,
41
+ processedBy: 'ExpressHooked',
42
+ timestamp: new Date().toISOString()
43
+ };
44
+ });
45
+
46
+ // Example route using filters
47
+ app.get('/', (req, res) => {
48
+ let responseData = { message: 'Hello World!' };
49
+ responseData = expressHooks.applyFilters('modify_response_data', responseData);
50
+
51
+ res.json(responseData);
52
+ });
53
+
54
+ // Initialize hooks integration
55
+ expressHooks.init();
56
+
57
+ app.listen(port, () => {
58
+ console.log(`Server running at http://localhost:${port}`);
59
+ });
60
+ ```
61
+
62
+ ## Key Features
63
+
64
+ ### Actions
65
+ Actions allow you to execute code at specific points without modifying data:
66
+
67
+ ```javascript
68
+ expressHooks.addAction('request_started', (req, res, next) => {
69
+ // Do something when request starts
70
+ next();
71
+ });
72
+ ```
73
+
74
+ ### Filters
75
+ Filters allow you to modify data flowing through your application:
76
+
77
+ ```javascript
78
+ expressHooks.addFilter('modify_response_data', (data) => {
79
+ // Modify and return the data
80
+ return { ...data, customField: 'value' };
81
+ });
82
+ ```
83
+
84
+ ### Priority System
85
+ Control execution order with priority levels (lower numbers execute first):
86
+
87
+ ```javascript
88
+ // This executes first (higher priority)
89
+ expressHooks.addAction('request_started', callback, 5);
90
+
91
+ // This executes later (lower priority)
92
+ expressHooks.addAction('request_started', callback, 15);
93
+ ```
94
+
95
+ ### Namespaces
96
+ Organize your hooks with namespaces:
97
+
98
+ ```javascript
99
+ // Register hook with namespace
100
+ expressHooks.addAction('myplugin::before_request', callback);
101
+
102
+ // Execute namespaced hook
103
+ expressHooks.doAction('myplugin::before_request', req, res);
104
+ ```
105
+
106
+ ### Advanced Methods
107
+
108
+ #### Removing Hooks and Filters
109
+ You can remove specific hooks or filters using the following methods:
110
+
111
+ ```javascript
112
+ // Remove a specific action
113
+ expressHooks.removeAction('request_started', callback);
114
+
115
+ // Remove an action by identifier
116
+ expressHooks.removeAction('request_started', 'my-action-id');
117
+
118
+ // Remove all actions for a hook
119
+ expressHooks.removeAllActions('request_started');
120
+
121
+ // Remove a specific filter
122
+ expressHooks.removeFilter('modify_response_data', callback);
123
+
124
+ // Remove a filter by identifier
125
+ expressHooks.removeFilter('modify_response_data', 'my-filter-id');
126
+
127
+ // Remove all filters for a hook
128
+ expressHooks.removeAllFilters('modify_response_data');
129
+ ```
130
+
131
+ #### Checking for Hooks and Filters
132
+ Check if hooks or filters exist for a specific hook name:
133
+
134
+ ```javascript
135
+ // Check if an action exists
136
+ const hasAction = expressHooks.hasAction('request_started');
137
+
138
+ // Check if a filter exists
139
+ const hasFilter = expressHooks.hasFilter('modify_response_data');
140
+ ```
141
+
142
+ #### Counting Hooks and Filters
143
+ Get the number of registered hooks or filters for a specific hook name:
144
+
145
+ ```javascript
146
+ // Count actions for a hook
147
+ const actionCount = expressHooks.actionsCount('request_started');
148
+
149
+ // Count filters for a hook
150
+ const filterCount = expressHooks.filtersCount('modify_response_data');
151
+ ```
152
+
153
+ #### Asynchronous Hooks and Filters
154
+ Execute hooks and filters asynchronously:
155
+
156
+ ```javascript
157
+ // Execute actions asynchronously
158
+ await expressHooks.doActionAsync('request_started', req, res, next);
159
+
160
+ // Apply filters asynchronously
161
+ const filteredData = await expressHooks.applyFiltersAsync('modify_response_data', data);
162
+ ```
163
+
164
+ ### Additional Parameters
165
+ When registering hooks, you can specify additional parameters:
166
+
167
+ ```javascript
168
+ // acceptedArgs: Number of arguments the callback accepts
169
+ expressHooks.addAction('request_started', callback, priority, acceptedArgs);
170
+
171
+ // identifier: Optional identifier for the callback (useful for removal)
172
+ expressHooks.addAction('request_started', callback, priority, acceptedArgs, 'my-action-id');
173
+ ```
174
+
175
+ ### Error Handling
176
+ Errors within hooks are caught and logged to prevent crashing the application:
177
+
178
+ ```javascript
179
+ expressHooks.addAction('request_started', (req, res, next) => {
180
+ // If an error occurs here, it will be caught and logged
181
+ problematicFunction();
182
+ next();
183
+ });
184
+ ```
185
+
186
+ ### Route-Specific Hooks
187
+ Register hooks for specific routes:
188
+
189
+ ```javascript
190
+ // Register a hook to run before a specific route
191
+ expressHooks.addRouteHook('/api/users', 'before', (req, res, next) => {
192
+ console.log('Before /api/users route');
193
+ next();
194
+ });
195
+
196
+ // Register a hook to run after a specific route
197
+ expressHooks.addRouteHook('/api/users', 'after', (req, res, data) => {
198
+ console.log('After /api/users route');
199
+ });
200
+ ```
201
+
202
+ ### Extending Express Methods
203
+ Extend Express methods with custom functionality:
204
+
205
+ ```javascript
206
+ // Extend an Express method with custom functionality
207
+ expressHooks.extendExpressMethod('use', (originalUse) => {
208
+ return function(path, ...middlewares) {
209
+ // Custom logic before calling the original method
210
+ console.log(`Registering middleware for path: ${path}`);
211
+
212
+ // Call the original method
213
+ return originalUse.call(this, path, ...middlewares);
214
+ };
215
+ });
216
+ ```
217
+
218
+ ### Version Compatibility
219
+ The current version of Express-Hooked follows semantic versioning. Breaking changes will be documented in the changelog.
220
+
221
+ ## Use Cases
222
+
223
+ - **Authentication & Authorization**: Hook into request processing to validate credentials
224
+ - **Logging & Analytics**: Track requests, responses, and performance metrics
225
+ - **Caching**: Implement caching strategies at different levels
226
+ - **API Transformation**: Modify API responses before sending to clients
227
+ - **Error Handling**: Centralized error handling with custom logic
228
+ - **Rate Limiting**: Implement rate limiting based on custom criteria
229
+
230
+ ## Contributing
231
+
232
+ We welcome contributions! Please see our contributing guidelines for more information.
233
+
234
+ ## License
235
+
236
+ Apache 2.0
237
+
238
+ Repository: https://gitlab.com/bytedogssyndicate1/express-hooked
@@ -0,0 +1,240 @@
1
+ /**
2
+ * Ejemplo avanzado de uso del sistema de hooks para Express
3
+ *
4
+ * Este archivo demuestra cómo utilizar las características avanzadas del sistema de hooks,
5
+ * incluyendo namespaces, identificadores, métodos asíncronos y manejo de rutas específicas.
6
+ */
7
+
8
+ // Importar Express
9
+ const express = require('express');
10
+
11
+ // Importar el sistema de hooks para Express
12
+ const ExpressHooked = require('./express-hooked');
13
+
14
+ // Crear una aplicación Express
15
+ const app = express();
16
+ const port = 3032;
17
+
18
+ // Inicializar ExpressHooked con la aplicación
19
+ const expressHooks = new ExpressHooked(app);
20
+
21
+ // 1. USO DE NAMESPACES
22
+ console.log('1. Registrando hooks con namespaces...');
23
+
24
+ // Registrar hooks en diferentes namespaces
25
+ // En lugar de registrarlos como middlewares, los registramos para ser llamados por doAction
26
+ expressHooks.addAction('authentication::before_request', (req, res, next) => {
27
+ console.log('[NAMESPACE AUTH] Validando autenticación...');
28
+ req.user = { id: 1, name: 'John Doe' }; // Simulando un usuario autenticado
29
+ // No llamamos a next() aquí porque se llama desde doAction
30
+ });
31
+
32
+ expressHooks.addAction('logging::after_request', (req, res) => {
33
+ console.log(`[NAMESPACE LOGGING] Petición ${req.method} ${req.url} procesada por ${req.user?.name || 'Anónimo'}`);
34
+ });
35
+
36
+ expressHooks.addFilter('data::transform_response', (data) => {
37
+ console.log('[NAMESPACE DATA] Transformando respuesta...');
38
+ return {
39
+ ...data,
40
+ transformed: true,
41
+ timestamp: new Date().toISOString()
42
+ };
43
+ });
44
+
45
+ // 2. USO DE IDENTIFICADORES
46
+ console.log('2. Registrando hooks con identificadores...');
47
+
48
+ expressHooks.addAction('request_started', (req, res, next) => {
49
+ console.log('[IDENTIFIER EXAMPLE] Primer hook registrado con identificador');
50
+ next();
51
+ }, 10, 3, 'first_hook');
52
+
53
+ expressHooks.addAction('request_started', (req, res, next) => {
54
+ console.log('[IDENTIFIER EXAMPLE] Segundo hook registrado con identificador');
55
+ next();
56
+ }, 15, 3, 'second_hook');
57
+
58
+ // 3. MÉTODOS ASÍNCRONOS
59
+ console.log('3. Registrando hooks y filtros asíncronos...');
60
+
61
+ // Hook asíncrono para simular una operación que toma tiempo
62
+ expressHooks.addAction('async_operation', async (req, res, next) => {
63
+ console.log('[ASYNC HOOK] Iniciando operación asíncrona...');
64
+
65
+ // Simular operación asíncrona (por ejemplo, acceso a base de datos)
66
+ await new Promise(resolve => setTimeout(resolve, 1000));
67
+
68
+ console.log('[ASYNC HOOK] Operación asíncrona completada');
69
+ req.asyncData = 'Datos obtenidos de operación asíncrona';
70
+ next();
71
+ });
72
+
73
+ // Filtro asíncrono para transformar datos
74
+ expressHooks.addFilter('async_transform', async (data) => {
75
+ console.log('[ASYNC FILTER] Transformando datos de forma asíncrona...');
76
+
77
+ // Simular operación asíncrona
78
+ await new Promise(resolve => setTimeout(resolve, 500));
79
+
80
+ return {
81
+ ...data,
82
+ asyncProcessed: true,
83
+ extraInfo: 'Información adicional procesada asíncronamente'
84
+ };
85
+ });
86
+
87
+ // 4. MANEJO DE RUTAS ESPECÍFICAS
88
+ console.log('4. Registrando hooks para rutas específicas...');
89
+
90
+ // Hook antes de procesar la ruta /api/users
91
+ expressHooks.addRouteHook('/api/users', 'before', (req, res, next) => {
92
+ console.log('[ROUTE HOOK] Antes de procesar /api/users');
93
+ req.routeStartTime = Date.now();
94
+ next();
95
+ });
96
+
97
+ // Hook después de procesar la ruta /api/users
98
+ expressHooks.addRouteHook('/api/users', 'after', (req, res, data) => {
99
+ const duration = Date.now() - req.routeStartTime;
100
+ console.log(`[ROUTE HOOK] Después de procesar /api/users. Duración: ${duration}ms`);
101
+ });
102
+
103
+ // Agregar middleware específico para la ruta /api/users para disparar los hooks
104
+ app.use('/api/users', (req, res, next) => {
105
+ expressHooks.doAction('before_route_api_users', req, res, next);
106
+ next(); // Asegurar que se continúa con el siguiente middleware
107
+ });
108
+
109
+ // 5. VERIFICACIÓN Y CONTABILIZACIÓN DE HOOKS
110
+ console.log('5. Verificando y contabilizando hooks registrados...');
111
+
112
+ console.log('¿Existe el hook authentication::before_request?', expressHooks.hasAction('authentication::before_request'));
113
+ console.log('¿Existe el filtro data::transform_response?', expressHooks.hasFilter('data::transform_response'));
114
+ console.log('Cantidad de acciones para request_started:', expressHooks.actionsCount('request_started'));
115
+
116
+ // 6. USO DE MIDDLEWARE PARA DISPARAR HOOKS AVANZADOS
117
+ app.use((req, res, next) => {
118
+ // Disparar el hook asíncrono
119
+ expressHooks.doActionAsync('async_operation', req, res, next).then(() => {
120
+ next();
121
+ }).catch(next);
122
+ });
123
+
124
+ // Middleware para disparar hooks de logging después de la respuesta
125
+ app.use((req, res, next) => {
126
+ const originalSend = res.send;
127
+
128
+ res.send = function(body) {
129
+ // Disparar el hook de logging después de la respuesta
130
+ expressHooks.doAction('logging::after_request', req, res);
131
+
132
+ return originalSend.call(this, body);
133
+ };
134
+
135
+ next();
136
+ });
137
+
138
+ // Agregamos un hook al sistema predeterminado para que se ejecute al inicio de cada solicitud
139
+ expressHooks.addAction('request_started', (req, res, next) => {
140
+ // Disparar hooks de autenticación antes de la lógica de negocio
141
+ expressHooks.doAction('authentication::before_request', req, res, () => {});
142
+ next(); // Llamamos a next aquí para continuar con la cadena de Express
143
+ }, 4); // Mayor prioridad que el hook predeterminado (que es 5)
144
+
145
+ // Middleware para parsear JSON
146
+ app.use(express.json());
147
+
148
+ // Ruta de ejemplo que utiliza filtros y namespaces
149
+ app.get('/', async (req, res) => {
150
+ // Aplicar filtro del namespace
151
+ let responseData = { message: 'Hola Mundo desde ejemplo avanzado!' };
152
+ responseData = expressHooks.applyFilters('data::transform_response', responseData);
153
+
154
+ // Aplicar filtro asíncrono
155
+ responseData = await expressHooks.applyFiltersAsync('async_transform', responseData);
156
+
157
+ res.json(responseData);
158
+ });
159
+
160
+ // Ruta que utiliza hooks específicos para la ruta
161
+ app.get('/api/users', (req, res) => {
162
+ const users = [
163
+ { id: 1, name: 'John', email: 'john@example.com' },
164
+ { id: 2, name: 'Jane', email: 'jane@example.com' }
165
+ ];
166
+
167
+ // Aplicar filtro del namespace
168
+ const responseData = expressHooks.applyFilters('data::transform_response', { users });
169
+
170
+ // Disparar el hook 'after' antes de enviar la respuesta
171
+ expressHooks.doAction('after_route_api_users', req, res, responseData);
172
+
173
+ res.json(responseData);
174
+ });
175
+
176
+ // Ruta para demostrar remoción de hooks por identificador
177
+ app.get('/remove-hooks', (req, res) => {
178
+ console.log('6. Removiendo hooks por identificador...');
179
+
180
+ // Remover el primer hook por su identificador
181
+ const removed = expressHooks.removeAction('request_started', 'first_hook');
182
+ console.log('Hook con identificador "first_hook" removido:', removed);
183
+
184
+ // Contar acciones nuevamente
185
+ console.log('Cantidad de acciones para request_started después de remover:', expressHooks.actionsCount('request_started'));
186
+
187
+ res.json({
188
+ message: 'Hook removido',
189
+ hooksRemaining: expressHooks.actionsCount('request_started'),
190
+ asyncData: req.asyncData
191
+ });
192
+ });
193
+
194
+ // Ruta para probar la extensión de métodos de Express
195
+ app.get('/extended-method', (req, res) => {
196
+ res.json({ message: 'Ruta con método extendido' });
197
+ });
198
+
199
+ // Extender un método de Express para registrar middleware automáticamente
200
+ expressHooks.extendExpressMethod('get', (originalGet) => {
201
+ return function(path, ...handlers) {
202
+ console.log(`[EXTENDED METHOD] Registrando ruta GET: ${path}`);
203
+ // Agregar un middleware antes de la ruta
204
+ this.use(path, (req, res, next) => {
205
+ console.log(`[EXTENDED METHOD] Middleware ejecutado para ruta: ${path}`);
206
+ next();
207
+ });
208
+
209
+ // Llamar al método original
210
+ return originalGet.call(this, path, ...handlers);
211
+ };
212
+ });
213
+
214
+ // Registrar hooks predeterminados para que se vean en los logs
215
+ expressHooks.addAction('request_started', (req, res, next) => {
216
+ console.log('[DEFAULT HOOK] request_started ejecutado');
217
+ next();
218
+ }, 5); // Alta prioridad
219
+
220
+ expressHooks.addAction('request_processed', (req, res) => {
221
+ console.log('[DEFAULT HOOK] request_processed ejecutado');
222
+ });
223
+
224
+ expressHooks.addAction('response_sent', (req, res) => {
225
+ console.log('[DEFAULT HOOK] response_sent ejecutado');
226
+ });
227
+
228
+ // Iniciar la integración de hooks
229
+ expressHooks.init();
230
+
231
+ // Iniciar el servidor
232
+ app.listen(port, () => {
233
+ console.log(`\nServidor Express avanzado corriendo en http://localhost:${port}`);
234
+ console.log('Características avanzadas del sistema de hooks integradas correctamente.');
235
+ console.log('\nPrueba las siguientes rutas:');
236
+ console.log('- GET http://localhost:' + port + '/');
237
+ console.log('- GET http://localhost:' + port + '/api/users');
238
+ console.log('- GET http://localhost:' + port + '/remove-hooks');
239
+ console.log('- GET http://localhost:' + port + '/extended-method');
240
+ });
@@ -0,0 +1,206 @@
1
+ /**
2
+ * Sistema de Hooks para Express
3
+ * Basado en el sistema de hooks independiente
4
+ *
5
+ * @author Benjamin Sanchez Cardenas
6
+ * @license Apache 2.0
7
+ */
8
+
9
+ // Importar el sistema de hooks independiente
10
+ const HookSystem = require('./hooks');
11
+
12
+ class ExpressHooked extends HookSystem {
13
+ constructor(app) {
14
+ super();
15
+
16
+ // Almacenar la aplicación Express
17
+ this.app = app;
18
+
19
+ // Registrar hooks predeterminados para eventos de Express
20
+ this._registerDefaultHooks();
21
+
22
+ // Añadir el sistema de hooks a la aplicación Express
23
+ if (this.app) {
24
+ this.app.locals.hooks = this;
25
+ }
26
+ }
27
+
28
+ /**
29
+ * Registra hooks predeterminados para eventos de Express
30
+ * @private
31
+ */
32
+ _registerDefaultHooks() {
33
+ // Hooks para eventos de solicitud
34
+ this.addAction('request_started', (req, res, next) => {
35
+ // Este hook se ejecuta al inicio de cada solicitud
36
+ req.startTime = Date.now();
37
+ req.hookData = {}; // Objeto para almacenar datos entre hooks
38
+ next();
39
+ }, 5); // Alta prioridad para inicialización temprana
40
+
41
+ this.addAction('request_processed', (req, res) => {
42
+ // Este hook se ejecuta después de procesar la solicitud
43
+ if (req.startTime) {
44
+ const duration = Date.now() - req.startTime;
45
+ req.duration = duration;
46
+ console.log(`Request ${req.method} ${req.url} took ${duration}ms`);
47
+ }
48
+ }, 15); // Baja prioridad para ejecución tardía
49
+
50
+ this.addAction('response_sent', (req, res) => {
51
+ // Este hook se ejecuta después de enviar la respuesta
52
+ console.log(`Response sent for ${req.method} ${req.url}. Status: ${res.statusCode}`);
53
+ });
54
+ }
55
+
56
+ /**
57
+ * Middleware para disparar hooks al inicio de la solicitud
58
+ * @returns {Function} Middleware de Express
59
+ */
60
+ requestStartedMiddleware() {
61
+ return (req, res, next) => {
62
+ // Disparar hook al inicio de la solicitud
63
+ this.doAction('request_started', req, res, next);
64
+ };
65
+ }
66
+
67
+ /**
68
+ * Middleware para disparar hooks al finalizar la solicitud
69
+ * @returns {Function} Middleware de Express
70
+ */
71
+ requestProcessedMiddleware() {
72
+ return (req, res, next) => {
73
+ // Guardar la función original de res.end
74
+ const originalEnd = res.end;
75
+
76
+ // Sobrescribir res.end para capturar cuando se envía la respuesta
77
+ res.end = function(chunk, encoding, callback) {
78
+ // Disparar hook antes de enviar la respuesta
79
+ this.doAction('request_processed', req, res);
80
+
81
+ // Llamar a la función original
82
+ const result = originalEnd.call(res, chunk, encoding, callback);
83
+
84
+ // Disparar hook después de enviar la respuesta
85
+ setImmediate(() => {
86
+ this.doAction('response_sent', req, res);
87
+ });
88
+
89
+ return result;
90
+ }.bind(this);
91
+
92
+ next();
93
+ };
94
+ }
95
+
96
+ /**
97
+ * Middleware para manejar errores y disparar hooks correspondientes
98
+ * @returns {Function} Middleware de Express
99
+ */
100
+ errorHandlerMiddleware() {
101
+ return (err, req, res, next) => {
102
+ // Disparar hook cuando ocurre un error
103
+ this.doAction('error_occurred', err, req, res, next);
104
+
105
+ // Continuar con el manejo de errores de Express
106
+ next(err);
107
+ };
108
+ }
109
+
110
+ /**
111
+ * Middleware para disparar hooks antes de procesar la ruta
112
+ * @param {string} route - Ruta específica
113
+ * @returns {Function} Middleware de Express
114
+ */
115
+ routeProcessingMiddleware(route) {
116
+ return (req, res, next) => {
117
+ // Disparar hook antes de procesar la ruta específica
118
+ this.doAction(`before_route_${route}`, req, res, next);
119
+ next();
120
+ };
121
+ }
122
+
123
+ /**
124
+ * Middleware para disparar hooks después de procesar la ruta
125
+ * @param {string} route - Ruta específica
126
+ * @returns {Function} Middleware de Express
127
+ */
128
+ routeProcessedMiddleware(route) {
129
+ return (req, res, next) => {
130
+ // Guardar la función original de res.send
131
+ const originalSend = res.send;
132
+
133
+ // Sobrescribir res.send para capturar cuando se envía la respuesta para una ruta específica
134
+ res.send = function(data) {
135
+ // Disparar hook antes de enviar la respuesta para la ruta específica
136
+ this.doAction(`after_route_${route}`, req, res, data);
137
+
138
+ // Llamar a la función original
139
+ return originalSend.call(res, data);
140
+ }.bind(this);
141
+
142
+ next();
143
+ };
144
+ }
145
+
146
+ /**
147
+ * Método para iniciar la integración con Express
148
+ */
149
+ init() {
150
+ // Añadir middleware para hooks al inicio de la solicitud
151
+ this.app.use(this.requestStartedMiddleware());
152
+
153
+ // Añadir middleware para hooks al procesar la solicitud
154
+ this.app.use(this.requestProcessedMiddleware());
155
+
156
+ // Añadir middleware para manejo de errores
157
+ this.app.use(this.errorHandlerMiddleware());
158
+ }
159
+
160
+ /**
161
+ * Método para registrar un hook específico para una ruta
162
+ * @param {string} route - Ruta específica
163
+ * @param {string} hookType - Tipo de hook ('before' o 'after')
164
+ * @param {Function} callback - Callback a ejecutar
165
+ * @param {number} priority - Prioridad del callback
166
+ * @param {number} acceptedArgs - Número de argumentos aceptados
167
+ * @param {string} [identifier] - Identificador opcional
168
+ */
169
+ addRouteHook(route, hookType, callback, priority = 10, acceptedArgs = 1, identifier = null) {
170
+ if (!['before', 'after'].includes(hookType)) {
171
+ throw new Error('hookType debe ser "before" o "after"');
172
+ }
173
+
174
+ // Determinar el nombre del hook según el tipo
175
+ const hookName = hookType === 'before'
176
+ ? `before_route_${route.replace(/\//g, '_')}`
177
+ : `after_route_${route.replace(/\//g, '_')}`;
178
+
179
+ this.addAction(hookName, callback, priority, acceptedArgs, identifier);
180
+ }
181
+
182
+ /**
183
+ * Método para registrar un middleware específico para una ruta
184
+ * @param {string} method - Método HTTP (GET, POST, etc.)
185
+ * @param {string} route - Ruta específica
186
+ * @param {...Function} middlewares - Middlewares a aplicar
187
+ */
188
+ addRouteMiddleware(method, route, ...middlewares) {
189
+ // Añadir middlewares antes de la ruta específica
190
+ this.app[method.toLowerCase()](route, ...middlewares);
191
+ }
192
+
193
+ /**
194
+ * Método para extender la funcionalidad de Express con hooks
195
+ * @param {string} methodName - Nombre del método a extender
196
+ * @param {Function} wrapperFn - Función que envuelve la funcionalidad original
197
+ */
198
+ extendExpressMethod(methodName, wrapperFn) {
199
+ if (this.app && typeof this.app[methodName] === 'function') {
200
+ const originalMethod = this.app[methodName];
201
+ this.app[methodName] = wrapperFn(originalMethod);
202
+ }
203
+ }
204
+ }
205
+
206
+ module.exports = ExpressHooked;