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,335 @@
1
+ # Express-Queued
2
+
3
+ Express-Queued es un sistema de colas independiente para Express.js que permite la ejecución asíncrona de tareas en múltiples colas concurrentes. Este sistema es ideal para operaciones que consumen tiempo como procesamiento de imágenes, envío de correos electrónicos, procesamiento de pagos, y otras operaciones que no deben bloquear la respuesta inmediata a las solicitudes del usuario.
4
+
5
+ ## Características
6
+
7
+ - **Soporte para N colas**: Puedes crear tantas colas como necesites, cada una con su propia configuración.
8
+ - **Concurrencia configurable**: Controla cuántas tareas se ejecutan simultáneamente por cola.
9
+ - **Hooks personalizados**: Personaliza la lógica de procesamiento y fallback para cada cola usando el sistema de hooks de [express-hooked](https://www.npmjs.com/package/express-hooked).
10
+ - **Sistema de reintentos**: Manejo automático de fallos con reintentos configurables.
11
+ - **Gestión de prioridades**: Asigna prioridades a las tareas para determinar su orden de ejecución.
12
+ - **Sistema de fallback**: Manejo de tareas que fallan definitivamente.
13
+ - **Totalmente asíncrono**: No bloquea el hilo principal de ejecución.
14
+ - **Integración con Express**: Middleware para inyectar el sistema de colas en las solicitudes de Express.
15
+
16
+ ## Instalación
17
+
18
+ ```bash
19
+ npm install express-queued express-hooked
20
+ ```
21
+
22
+ ## Uso Básico
23
+
24
+ ### 1. Importar e inicializar
25
+
26
+ ```javascript
27
+ const express = require('express');
28
+ const ExpressQueueIntegration = require('express-queued');
29
+
30
+ const app = express();
31
+ const expressQueue = new ExpressQueueIntegration();
32
+ ```
33
+
34
+ ### 2. Crear una cola
35
+
36
+ ```javascript
37
+ // Crear una cola con configuración por defecto
38
+ expressQueue.createQueue('procesamiento-general', {
39
+ concurrency: 2, // Máximo 2 tareas ejecutándose simultáneamente
40
+ retryAttempts: 3, // Reintentar hasta 3 veces si falla
41
+ retryDelay: 1000 // Esperar 1 segundo entre reintentos
42
+ });
43
+ ```
44
+
45
+ ### 3. Definir una tarea
46
+
47
+ ```javascript
48
+ // Función que representa una tarea
49
+ function procesarImagen(datos, taskObj) {
50
+ return new Promise((resolve, reject) => {
51
+ // Simular procesamiento
52
+ setTimeout(() => {
53
+ console.log(`Procesando imagen:`, datos);
54
+ resolve('Procesamiento de imagen completado');
55
+ }, 2000);
56
+ });
57
+ }
58
+ ```
59
+
60
+ ### 4. Agregar tareas a la cola
61
+
62
+ ```javascript
63
+ // Agregar una tarea a la cola
64
+ const taskId = expressQueue.addTask(
65
+ 'procesamiento-general', // Nombre de la cola
66
+ procesarImagen, // Función de la tarea
67
+ { id: 1, nombre: 'imagen1.jpg' }, // Datos para la tarea
68
+ 0 // Prioridad (0 es la más alta)
69
+ );
70
+ ```
71
+
72
+ ### 5. Iniciar el sistema de colas
73
+
74
+ ```javascript
75
+ // Iniciar la ejecución de tareas
76
+ expressQueue.start();
77
+ ```
78
+
79
+ ## Uso con Express
80
+
81
+ ### 1. Agregar el middleware
82
+
83
+ ```javascript
84
+ // Middleware para inyectar el sistema de colas en las solicitudes
85
+ app.use(expressQueue.queueMiddleware());
86
+ ```
87
+
88
+ ### 2. Usar el sistema de colas en las rutas
89
+
90
+ ```javascript
91
+ // Ruta para agregar una tarea
92
+ app.post('/procesar-imagen', (req, res) => {
93
+ const { nombre, tamaño } = req.body;
94
+
95
+ const taskId = req.addTask('procesamiento-general', procesarImagen, {
96
+ nombre,
97
+ tamaño
98
+ });
99
+
100
+ res.json({
101
+ message: 'Tarea de procesamiento de imagen agregada a la cola',
102
+ taskId
103
+ });
104
+ });
105
+
106
+ // Ruta para obtener el estado del sistema de colas
107
+ app.get('/estado-colas', (req, res) => {
108
+ const status = req.getQueueStatus();
109
+ res.json(status);
110
+ });
111
+ ```
112
+
113
+ ## Hooks Personalizados
114
+
115
+ El sistema de colas se integra con el sistema de hooks de [express-hooked](https://www.npmjs.com/package/express-hooked), lo que permite personalizar el comportamiento del sistema a través de puntos de extensión.
116
+
117
+ ### Hooks Disponibles
118
+
119
+ - `queue_execute_task`: Se ejecuta antes de procesar una tarea. Permite modificar la lógica de la tarea.
120
+ - `queue_task_completed`: Se ejecuta cuando una tarea se completa exitosamente.
121
+ - `queue_task_failed`: Se ejecuta cuando una tarea falla.
122
+ - `queue_task_retry`: Se ejecuta cuando una tarea se reintenta.
123
+ - `queue_task_fallback`: Se ejecuta cuando una tarea falla definitivamente después de todos los reintentos.
124
+ - `queue_task_added`: Se ejecuta cuando se agrega una tarea a la cola.
125
+ - `queue_system_started`: Se ejecuta cuando se inicia el sistema de colas.
126
+ - `queue_system_stopped`: Se ejecuta cuando se detiene el sistema de colas.
127
+
128
+ ### Ejemplo de hook personalizado
129
+
130
+ ```javascript
131
+ const { HookSystem } = require('express-hooked');
132
+
133
+ // Crear un sistema de hooks específico para una cola
134
+ const imagenHooks = new HookSystem();
135
+
136
+ // Hook para personalizar la lógica de procesamiento
137
+ imagenHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
138
+ console.log(`Preparando para procesar imagen: ${taskObj.id}`);
139
+
140
+ // Envolver la tarea original con lógica adicional
141
+ const wrappedTask = async (datos, taskObj) => {
142
+ console.log(`Iniciando procesamiento de imagen: ${taskObj.id}`);
143
+ try {
144
+ const result = await task(datos, taskObj);
145
+ console.log(`Imagen procesada exitosamente: ${taskObj.id}`);
146
+ return result;
147
+ } catch (error) {
148
+ console.log(`Error procesando imagen: ${taskObj.id} - ${error.message}`);
149
+ throw error;
150
+ }
151
+ };
152
+
153
+ return wrappedTask;
154
+ });
155
+
156
+ // Crear la cola con hooks personalizados
157
+ expressQueue.createQueue('imagenes', {
158
+ concurrency: 3,
159
+ retryAttempts: 2,
160
+ retryDelay: 1000
161
+ }, imagenHooks);
162
+ ```
163
+
164
+ ## Manejo de Errores y Reintentos
165
+
166
+ El sistema de colas incluye un mecanismo robusto para manejar errores:
167
+
168
+ ### Configuración de reintentos
169
+
170
+ ```javascript
171
+ expressQueue.createQueue('procesamiento-confiable', {
172
+ retryAttempts: 5, // Número máximo de reintentos
173
+ retryDelay: 2000 // Milisegundos de espera entre reintentos
174
+ });
175
+ ```
176
+
177
+ ### Lógica de fallback
178
+
179
+ Cuando una tarea falla después de todos los reintentos, se ejecuta la lógica de fallback:
180
+
181
+ ```javascript
182
+ const hooks = new HookSystem();
183
+
184
+ hooks.addAction('queue_task_fallback', (queueName, task, error) => {
185
+ // Aquí puedes implementar lógica personalizada para manejar tareas fallidas
186
+ console.log(`Tarea fallida definitivamente:`, task.id);
187
+ console.log(`Error:`, error.message);
188
+
189
+ // Por ejemplo, guardar en una base de datos para procesamiento manual
190
+ // o enviar una alerta al equipo de soporte
191
+ });
192
+ ```
193
+
194
+ ## Uso Avanzado
195
+
196
+ ### Múltiples colas con diferentes configuraciones
197
+
198
+ ```javascript
199
+ // Cola de procesamiento de imágenes
200
+ expressQueue.createQueue('procesamiento-imagenes', {
201
+ concurrency: 3,
202
+ retryAttempts: 2,
203
+ retryDelay: 1000
204
+ });
205
+
206
+ // Cola de envío de correos
207
+ expressQueue.createQueue('envio-correos', {
208
+ concurrency: 2,
209
+ retryAttempts: 3,
210
+ retryDelay: 2000
211
+ });
212
+
213
+ // Cola de procesamiento de pagos
214
+ expressQueue.createQueue('procesamiento-pagos', {
215
+ concurrency: 1,
216
+ retryAttempts: 5,
217
+ retryDelay: 3000
218
+ });
219
+ ```
220
+
221
+ ### Prioridades de tareas
222
+
223
+ Las tareas pueden asignarse con diferentes niveles de prioridad:
224
+
225
+ ```javascript
226
+ // Tarea de alta prioridad (prioridad 0)
227
+ expressQueue.addTask('procesamiento-imagenes', procesarImagen, { nombre: 'urgente.jpg' }, 0);
228
+
229
+ // Tarea de prioridad media (prioridad 5)
230
+ expressQueue.addTask('procesamiento-imagenes', procesarImagen, { nombre: 'normal.jpg' }, 5);
231
+
232
+ // Tarea de baja prioridad (prioridad 10)
233
+ expressQueue.addTask('procesamiento-imagenes', procesarImagen, { nombre: 'opcional.jpg' }, 10);
234
+ ```
235
+
236
+ ### Gestión de colas mediante API
237
+
238
+ ```javascript
239
+ // Pausar una cola
240
+ app.post('/pausar-cola/:queueName', (req, res) => {
241
+ const { queueName } = req.params;
242
+ expressQueue.pauseQueue(queueName);
243
+ res.json({ message: `Cola ${queueName} pausada` });
244
+ });
245
+
246
+ // Reanudar una cola
247
+ app.post('/reanudar-cola/:queueName', (req, res) => {
248
+ const { queueName } = req.params;
249
+ expressQueue.resumeQueue(queueName);
250
+ res.json({ message: `Cola ${queueName} reanudada` });
251
+ });
252
+
253
+ // Limpiar una cola
254
+ app.post('/limpiar-cola/:queueName', (req, res) => {
255
+ const { queueName } = req.params;
256
+ expressQueue.clearQueue(queueName);
257
+ res.json({ message: `Cola ${queueName} limpiada` });
258
+ });
259
+
260
+ // Reintentar tareas fallidas
261
+ app.post('/reintentar-fallidas/:queueName', (req, res) => {
262
+ const { queueName } = req.params;
263
+ expressQueue.retryFailedTasks(queueName);
264
+ res.json({ message: `Reintentando tareas fallidas en cola ${queueName}` });
265
+ });
266
+ ```
267
+
268
+ ## API
269
+
270
+ ### ExpressQueueIntegration
271
+
272
+ #### constructor(options = {})
273
+
274
+ - `options.concurrency`: Número de trabajadores concurrentes por defecto (por defecto: 1)
275
+ - `options.retryAttempts`: Número de reintentos por defecto (por defecto: 3)
276
+ - `options.retryDelay`: Retraso entre reintentos en ms por defecto (por defecto: 1000)
277
+
278
+ #### createQueue(queueName, options = {}, hooks = null)
279
+
280
+ Crea una cola con la configuración especificada.
281
+
282
+ - `queueName`: Nombre de la cola
283
+ - `options.concurrency`: Número de trabajadores concurrentes
284
+ - `options.retryAttempts`: Número de reintentos
285
+ - `options.retryDelay`: Retraso entre reintentos en ms
286
+ - `hooks`: Sistema de hooks para esta cola
287
+
288
+ #### addTask(queueName, task, data = {}, priority = 0)
289
+
290
+ Agrega una tarea a la cola especificada.
291
+
292
+ - `queueName`: Nombre de la cola
293
+ - `task`: Función que representa la tarea
294
+ - `data`: Datos para la tarea
295
+ - `priority`: Prioridad de la tarea (menor número = mayor prioridad)
296
+
297
+ #### start()
298
+
299
+ Inicia la ejecución de tareas en todas las colas.
300
+
301
+ #### stop()
302
+
303
+ Detiene la ejecución de tareas en todas las colas.
304
+
305
+ #### getStatus()
306
+
307
+ Obtiene el estado actual del sistema de colas.
308
+
309
+ #### retryFailedTasks(queueName)
310
+
311
+ Reintenta todas las tareas fallidas en la cola especificada.
312
+
313
+ #### queueMiddleware()
314
+
315
+ Middleware para inyectar el sistema de colas en las solicitudes de Express.
316
+
317
+ #### pauseQueue(queueName)
318
+
319
+ Pausa la cola especificada.
320
+
321
+ #### resumeQueue(queueName)
322
+
323
+ Reanuda la cola especificada.
324
+
325
+ #### clearQueue(queueName)
326
+
327
+ Limpia las tareas pendientes de la cola especificada.
328
+
329
+ ## Repositorio
330
+
331
+ Código fuente disponible en: https://gitlab.com/bytedogssyndicate1/express-queued
332
+
333
+ ## Licencia
334
+
335
+ Apache 2.0
@@ -0,0 +1,335 @@
1
+ # Express-Queued
2
+
3
+ Express-Queued is an independent queue system for Express.js that enables asynchronous execution of tasks in multiple concurrent queues. This system is ideal for time-consuming operations such as image processing, email sending, payment processing, and other operations that shouldn't block the immediate response to user requests.
4
+
5
+ ## Features
6
+
7
+ - **Support for N queues**: Create as many queues as needed, each with its own configuration.
8
+ - **Configurable concurrency**: Control how many tasks execute simultaneously per queue.
9
+ - **Custom hooks**: Customize processing and fallback logic for each queue using the hooks system from [express-hooked](https://www.npmjs.com/package/express-hooked).
10
+ - **Retry system**: Automatic failure handling with configurable retries.
11
+ - **Priority management**: Assign priorities to tasks to determine their execution order.
12
+ - **Fallback system**: Handle tasks that definitively fail.
13
+ - **Fully asynchronous**: Does not block the main execution thread.
14
+ - **Express integration**: Middleware to inject the queue system into Express requests.
15
+
16
+ ## Installation
17
+
18
+ ```bash
19
+ npm install express-queued express-hooked
20
+ ```
21
+
22
+ ## Basic Usage
23
+
24
+ ### 1. Import and initialize
25
+
26
+ ```javascript
27
+ const express = require('express');
28
+ const ExpressQueueIntegration = require('express-queued');
29
+
30
+ const app = express();
31
+ const expressQueue = new ExpressQueueIntegration();
32
+ ```
33
+
34
+ ### 2. Create a queue
35
+
36
+ ```javascript
37
+ // Create a queue with default configuration
38
+ expressQueue.createQueue('general-processing', {
39
+ concurrency: 2, // Maximum 2 tasks running simultaneously
40
+ retryAttempts: 3, // Retry up to 3 times if it fails
41
+ retryDelay: 1000 // Wait 1 second between retries
42
+ });
43
+ ```
44
+
45
+ ### 3. Define a task
46
+
47
+ ```javascript
48
+ // Function representing a task
49
+ function processImage(data, taskObj) {
50
+ return new Promise((resolve, reject) => {
51
+ // Simulate processing
52
+ setTimeout(() => {
53
+ console.log(`Processing image:`, data);
54
+ resolve('Image processing completed');
55
+ }, 2000);
56
+ });
57
+ }
58
+ ```
59
+
60
+ ### 4. Add tasks to the queue
61
+
62
+ ```javascript
63
+ // Add a task to the queue
64
+ const taskId = expressQueue.addTask(
65
+ 'general-processing', // Queue name
66
+ processImage, // Task function
67
+ { id: 1, filename: 'image1.jpg' }, // Data for the task
68
+ 0 // Priority (0 is highest)
69
+ );
70
+ ```
71
+
72
+ ### 5. Start the queue system
73
+
74
+ ```javascript
75
+ // Start task execution
76
+ expressQueue.start();
77
+ ```
78
+
79
+ ## Express Usage
80
+
81
+ ### 1. Add the middleware
82
+
83
+ ```javascript
84
+ // Middleware to inject the queue system into requests
85
+ app.use(expressQueue.queueMiddleware());
86
+ ```
87
+
88
+ ### 2. Use the queue system in routes
89
+
90
+ ```javascript
91
+ // Route to add a task
92
+ app.post('/process-image', (req, res) => {
93
+ const { filename, size } = req.body;
94
+
95
+ const taskId = req.addTask('general-processing', processImage, {
96
+ filename,
97
+ size
98
+ });
99
+
100
+ res.json({
101
+ message: 'Image processing task added to queue',
102
+ taskId
103
+ });
104
+ });
105
+
106
+ // Route to get queue system status
107
+ app.get('/queue-status', (req, res) => {
108
+ const status = req.getQueueStatus();
109
+ res.json(status);
110
+ });
111
+ ```
112
+
113
+ ## Custom Hooks
114
+
115
+ The queue system integrates with the hooks system from [express-hooked](https://www.npmjs.com/package/express-hooked), allowing customization of system behavior through extension points.
116
+
117
+ ### Available Hooks
118
+
119
+ - `queue_execute_task`: Executes before processing a task. Allows modifying task logic.
120
+ - `queue_task_completed`: Executes when a task completes successfully.
121
+ - `queue_task_failed`: Executes when a task fails.
122
+ - `queue_task_retry`: Executes when a task is retried.
123
+ - `queue_task_fallback`: Executes when a task definitively fails after all retries.
124
+ - `queue_task_added`: Executes when a task is added to the queue.
125
+ - `queue_system_started`: Executes when the queue system starts.
126
+ - `queue_system_stopped`: Executes when the queue system stops.
127
+
128
+ ### Custom Hook Example
129
+
130
+ ```javascript
131
+ const { HookSystem } = require('express-hooked');
132
+
133
+ // Create a specific hook system for a queue
134
+ const imageHooks = new HookSystem();
135
+
136
+ // Hook to customize processing logic
137
+ imageHooks.addAction('queue_execute_task', (task, queueName, taskObj) => {
138
+ console.log(`Preparing to process image: ${taskObj.id}`);
139
+
140
+ // Wrap the original task with additional logic
141
+ const wrappedTask = async (data, taskObj) => {
142
+ console.log(`Starting image processing: ${taskObj.id}`);
143
+ try {
144
+ const result = await task(data, taskObj);
145
+ console.log(`Image processed successfully: ${taskObj.id}`);
146
+ return result;
147
+ } catch (error) {
148
+ console.log(`Error processing image: ${taskObj.id} - ${error.message}`);
149
+ throw error;
150
+ }
151
+ };
152
+
153
+ return wrappedTask;
154
+ });
155
+
156
+ // Create the queue with custom hooks
157
+ expressQueue.createQueue('images', {
158
+ concurrency: 3,
159
+ retryAttempts: 2,
160
+ retryDelay: 1000
161
+ }, imageHooks);
162
+ ```
163
+
164
+ ## Error Handling and Retries
165
+
166
+ The queue system includes a robust mechanism for handling errors:
167
+
168
+ ### Retry Configuration
169
+
170
+ ```javascript
171
+ expressQueue.createQueue('reliable-processing', {
172
+ retryAttempts: 5, // Maximum number of retries
173
+ retryDelay: 2000 // Milliseconds to wait between retries
174
+ });
175
+ ```
176
+
177
+ ### Fallback Logic
178
+
179
+ When a task fails after all retries, the fallback logic executes:
180
+
181
+ ```javascript
182
+ const hooks = new HookSystem();
183
+
184
+ hooks.addAction('queue_task_fallback', (queueName, task, error) => {
185
+ // Implement custom logic to handle failed tasks
186
+ console.log(`Definitively failed task:`, task.id);
187
+ console.log(`Error:`, error.message);
188
+
189
+ // For example, save to a database for manual processing
190
+ // or send an alert to the support team
191
+ });
192
+ ```
193
+
194
+ ## Advanced Usage
195
+
196
+ ### Multiple Queues with Different Configurations
197
+
198
+ ```javascript
199
+ // Image processing queue
200
+ expressQueue.createQueue('image-processing', {
201
+ concurrency: 3,
202
+ retryAttempts: 2,
203
+ retryDelay: 1000
204
+ });
205
+
206
+ // Email sending queue
207
+ expressQueue.createQueue('email-sending', {
208
+ concurrency: 2,
209
+ retryAttempts: 3,
210
+ retryDelay: 2000
211
+ });
212
+
213
+ // Payment processing queue
214
+ expressQueue.createQueue('payment-processing', {
215
+ concurrency: 1,
216
+ retryAttempts: 5,
217
+ retryDelay: 3000
218
+ });
219
+ ```
220
+
221
+ ### Task Priorities
222
+
223
+ Tasks can be assigned different priority levels:
224
+
225
+ ```javascript
226
+ // High priority task (priority 0)
227
+ expressQueue.addTask('image-processing', processImage, { filename: 'urgent.jpg' }, 0);
228
+
229
+ // Medium priority task (priority 5)
230
+ expressQueue.addTask('image-processing', processImage, { filename: 'normal.jpg' }, 5);
231
+
232
+ // Low priority task (priority 10)
233
+ expressQueue.addTask('image-processing', processImage, { filename: 'optional.jpg' }, 10);
234
+ ```
235
+
236
+ ### Queue Management via API
237
+
238
+ ```javascript
239
+ // Pause a queue
240
+ app.post('/pause-queue/:queueName', (req, res) => {
241
+ const { queueName } = req.params;
242
+ expressQueue.pauseQueue(queueName);
243
+ res.json({ message: `Queue ${queueName} paused` });
244
+ });
245
+
246
+ // Resume a queue
247
+ app.post('/resume-queue/:queueName', (req, res) => {
248
+ const { queueName } = req.params;
249
+ expressQueue.resumeQueue(queueName);
250
+ res.json({ message: `Queue ${queueName} resumed` });
251
+ });
252
+
253
+ // Clear a queue
254
+ app.post('/clear-queue/:queueName', (req, res) => {
255
+ const { queueName } = req.params;
256
+ expressQueue.clearQueue(queueName);
257
+ res.json({ message: `Queue ${queueName} cleared` });
258
+ });
259
+
260
+ // Retry failed tasks
261
+ app.post('/retry-failed/:queueName', (req, res) => {
262
+ const { queueName } = req.params;
263
+ expressQueue.retryFailedTasks(queueName);
264
+ res.json({ message: `Retrying failed tasks in queue ${queueName}` });
265
+ });
266
+ ```
267
+
268
+ ## API
269
+
270
+ ### ExpressQueueIntegration
271
+
272
+ #### constructor(options = {})
273
+
274
+ - `options.concurrency`: Default number of concurrent workers (default: 1)
275
+ - `options.retryAttempts`: Default number of retries (default: 3)
276
+ - `options.retryDelay`: Default delay between retries in ms (default: 1000)
277
+
278
+ #### createQueue(queueName, options = {}, hooks = null)
279
+
280
+ Creates a queue with the specified configuration.
281
+
282
+ - `queueName`: Name of the queue
283
+ - `options.concurrency`: Number of concurrent workers
284
+ - `options.retryAttempts`: Number of retries
285
+ - `options.retryDelay`: Delay between retries in ms
286
+ - `hooks`: Hook system for this queue
287
+
288
+ #### addTask(queueName, task, data = {}, priority = 0)
289
+
290
+ Adds a task to the specified queue.
291
+
292
+ - `queueName`: Name of the queue
293
+ - `task`: Function representing the task
294
+ - `data`: Data for the task
295
+ - `priority`: Task priority (lower number = higher priority)
296
+
297
+ #### start()
298
+
299
+ Starts task execution in all queues.
300
+
301
+ #### stop()
302
+
303
+ Stops task execution in all queues.
304
+
305
+ #### getStatus()
306
+
307
+ Gets the current status of the queue system.
308
+
309
+ #### retryFailedTasks(queueName)
310
+
311
+ Retries all failed tasks in the specified queue.
312
+
313
+ #### queueMiddleware()
314
+
315
+ Middleware to inject the queue system into Express requests.
316
+
317
+ #### pauseQueue(queueName)
318
+
319
+ Pauses the specified queue.
320
+
321
+ #### resumeQueue(queueName)
322
+
323
+ Resumes the specified queue.
324
+
325
+ #### clearQueue(queueName)
326
+
327
+ Clears pending tasks from the specified queue.
328
+
329
+ ## Repository
330
+
331
+ Source code available at: https://gitlab.com/bytedogssyndicate1/express-queued
332
+
333
+ ## License
334
+
335
+ Apache 2.0