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,299 @@
1
+ /**
2
+ * Carga de rutas desde múltiples archivos JSON en un directorio para Express-Router
3
+ * Express-Router v1.0.0 - Carga de rutas desde directorio
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+ const RouteLoader = require('./RouteLoader');
9
+
10
+ class RouteDirectoryLoader {
11
+ /**
12
+ * Constructor del cargador de rutas desde directorio
13
+ */
14
+ constructor() {
15
+ this.loadedRoutes = [];
16
+ this.routeMap = new Map(); // Para detectar rutas duplicadas
17
+ }
18
+
19
+ /**
20
+ * Método para cargar rutas desde un directorio que contiene múltiples archivos JSON
21
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
22
+ * @param {string} directoryPath - Ruta al directorio que contiene los archivos JSON de rutas
23
+ * @returns {Promise<Array>} - Array de rutas cargadas
24
+ */
25
+ async loadRoutesFromDirectory(routerIntegration, directoryPath) {
26
+ try {
27
+ // Disparar hook antes de cargar rutas desde directorio
28
+ const hooks = routerIntegration.getHooks();
29
+ if (hooks) {
30
+ const hookResult = hooks.applyFilters('pre_directory_route_load', {
31
+ directoryPath,
32
+ routerIntegration,
33
+ shouldContinue: true
34
+ });
35
+
36
+ if (!hookResult.shouldContinue) {
37
+ return []; // Cancelar proceso si el filtro lo indica
38
+ }
39
+
40
+ directoryPath = hookResult.directoryPath || directoryPath;
41
+ }
42
+
43
+ // Verificar si el directorio existe
44
+ if (!fs.existsSync(directoryPath)) {
45
+ throw new Error(`Directorio de rutas no encontrado: ${directoryPath}`);
46
+ }
47
+
48
+ // Obtener todos los archivos JSON del directorio
49
+ const files = fs.readdirSync(directoryPath).filter(file =>
50
+ path.extname(file).toLowerCase() === '.json'
51
+ );
52
+
53
+ if (files.length === 0) {
54
+ console.log(`No se encontraron archivos JSON en el directorio: ${directoryPath}`);
55
+ return [];
56
+ }
57
+
58
+ // Cargar cada archivo JSON
59
+ for (const file of files) {
60
+ const filePath = path.join(directoryPath, file);
61
+ await this.loadRoutesFromFile(routerIntegration, filePath);
62
+ }
63
+
64
+ // Disparar hook después de cargar rutas desde directorio
65
+ if (hooks) {
66
+ hooks.doAction('post_directory_route_load', this.loadedRoutes, routerIntegration);
67
+ }
68
+
69
+ return this.loadedRoutes;
70
+ } catch (error) {
71
+ throw new Error(`Error cargando rutas desde directorio ${directoryPath}: ${error.message}`);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Método para cargar rutas desde un archivo JSON individual
77
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
78
+ * @param {string} filePath - Ruta al archivo JSON de rutas
79
+ */
80
+ async loadRoutesFromFile(routerIntegration, filePath) {
81
+ try {
82
+ // Disparar hook antes de cargar archivo
83
+ const hooks = routerIntegration.getHooks();
84
+ if (hooks) {
85
+ const hookResult = hooks.applyFilters('pre_file_route_load', {
86
+ filePath,
87
+ routerIntegration,
88
+ shouldContinue: true
89
+ });
90
+
91
+ if (!hookResult.shouldContinue) {
92
+ return; // Cancelar proceso si el filtro lo indica
93
+ }
94
+
95
+ filePath = hookResult.filePath || filePath;
96
+ }
97
+
98
+ // Verificar si el archivo existe
99
+ if (!fs.existsSync(filePath)) {
100
+ throw new Error(`Archivo de rutas no encontrado: ${filePath}`);
101
+ }
102
+
103
+ // Leer y parsear el archivo JSON
104
+ const routeData = fs.readFileSync(filePath, 'utf8');
105
+ const routes = JSON.parse(routeData);
106
+
107
+ // Validar estructura del archivo de rutas
108
+ this.validateRoutesStructure(routes);
109
+
110
+ // Cargar cada ruta, verificando duplicados
111
+ for (const route of routes) {
112
+ await this.loadSingleRoute(routerIntegration, route, filePath);
113
+ }
114
+ } catch (error) {
115
+ throw new Error(`Error cargando rutas desde ${filePath}: ${error.message}`);
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Método para validar la estructura del archivo de rutas
121
+ * @param {Array} routes - Array de rutas a validar
122
+ */
123
+ validateRoutesStructure(routes) {
124
+ if (!Array.isArray(routes)) {
125
+ throw new Error('El archivo de rutas debe contener un array de rutas');
126
+ }
127
+
128
+ for (let i = 0; i < routes.length; i++) {
129
+ const route = routes[i];
130
+
131
+ if (typeof route !== 'object' || route === null) {
132
+ throw new Error(`La ruta en la posición ${i} no es un objeto válido`);
133
+ }
134
+
135
+ if (!route.path) {
136
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'path'`);
137
+ }
138
+
139
+ if (!route.method) {
140
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'method'`);
141
+ }
142
+
143
+ // Verificar si es una ruta estática
144
+ if (route.static) {
145
+ if (typeof route.static !== 'object' || route.static === null) {
146
+ throw new Error(`La ruta en la posición ${i} tiene una propiedad 'static' inválida`);
147
+ }
148
+
149
+ if (!route.static.dir) {
150
+ throw new Error(`La ruta en la posición ${i} tiene una configuración 'static' sin directorio 'dir'`);
151
+ }
152
+
153
+ // El método debe ser GET para rutas estáticas
154
+ if (route.method.toUpperCase() !== 'GET') {
155
+ throw new Error(`Las rutas estáticas deben usar el método GET, no ${route.method}`);
156
+ }
157
+ } else {
158
+ // Validación normal para rutas dinámicas
159
+ if (!route.controller) {
160
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'controller'`);
161
+ }
162
+
163
+ if (!route.handler) {
164
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'handler'`);
165
+ }
166
+ }
167
+
168
+ // Validar que el content-type sea un string si está presente
169
+ if (route.contentType && typeof route.contentType !== 'string') {
170
+ throw new Error(`La ruta en la posición ${i} tiene un 'contentType' inválido, debe ser un string`);
171
+ }
172
+ }
173
+ }
174
+
175
+ /**
176
+ * Método para cargar una sola ruta, verificando si ya existe
177
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
178
+ * @param {Object} route - Objeto de ruta a cargar
179
+ * @param {string} sourceFile - Archivo del que proviene la ruta
180
+ */
181
+ async loadSingleRoute(routerIntegration, route, sourceFile) {
182
+ // Crear un identificador único para la ruta (método + path)
183
+ const routeKey = `${route.method.toUpperCase()}-${route.path}`;
184
+
185
+ // Verificar si ya existe una ruta con el mismo método y path
186
+ if (this.routeMap.has(routeKey)) {
187
+ const existingRouteInfo = this.routeMap.get(routeKey);
188
+
189
+ // Disparar hook antes de sobrescribir ruta
190
+ const hooks = routerIntegration.getHooks();
191
+ if (hooks) {
192
+ hooks.doAction('route_duplicate_detected', {
193
+ overwrittenRoute: existingRouteInfo,
194
+ newRoute: { route, sourceFile },
195
+ routerIntegration
196
+ });
197
+ }
198
+
199
+ // Mostrar mensaje de advertencia
200
+ console.log(`[RUTA SOBREESCRITA] Archivo: ${existingRouteInfo.sourceFile}, Ruta: ${route.method.toUpperCase()} ${route.path}`);
201
+ console.log(`[RUTA ACTUAL] Archivo: ${sourceFile}, Ruta: ${route.method.toUpperCase()} ${route.path}`);
202
+
203
+ // Actualizar la ruta en el mapa con la nueva información
204
+ this.routeMap.set(routeKey, {
205
+ route: { ...route },
206
+ sourceFile
207
+ });
208
+ } else {
209
+ // Agregar la ruta al mapa con su archivo de origen
210
+ this.routeMap.set(routeKey, {
211
+ route: { ...route },
212
+ sourceFile
213
+ });
214
+ }
215
+
216
+ // Cargar la ruta en el router
217
+ const routeLoader = new RouteLoader();
218
+ await routeLoader.loadSingleRoute(routerIntegration, route);
219
+
220
+ // Disparar hook después de cargar la ruta
221
+ const hooks = routerIntegration.getHooks();
222
+ if (hooks) {
223
+ hooks.doAction('route_loaded_from_directory', { route, sourceFile, routerIntegration });
224
+ }
225
+
226
+ // Agregar la ruta a las rutas cargadas
227
+ this.loadedRoutes.push({
228
+ ...route,
229
+ sourceFile
230
+ });
231
+ }
232
+
233
+ /**
234
+ * Método para recargar rutas desde un directorio
235
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
236
+ * @param {string} directoryPath - Ruta al directorio que contiene los archivos JSON de rutas
237
+ * @returns {Promise<Array>} - Array de rutas recargadas
238
+ */
239
+ async reloadRoutesFromDirectory(routerIntegration, directoryPath) {
240
+ // Limpiar rutas previamente cargadas
241
+ this.loadedRoutes = [];
242
+ this.routeMap.clear();
243
+
244
+ // Cargar rutas nuevamente
245
+ return await this.loadRoutesFromDirectory(routerIntegration, directoryPath);
246
+ }
247
+
248
+ /**
249
+ * Método para obtener las rutas cargadas
250
+ * @returns {Array} - Array de rutas cargadas
251
+ */
252
+ getLoadedRoutes() {
253
+ return this.loadedRoutes;
254
+ }
255
+
256
+ /**
257
+ * Método para observar cambios en los archivos de rutas del directorio y recargar automáticamente
258
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
259
+ * @param {string} directoryPath - Ruta al directorio que contiene los archivos JSON de rutas
260
+ * @param {number} debounceTime - Tiempo de espera entre recargas (milisegundos)
261
+ */
262
+ watchRoutesDirectory(routerIntegration, directoryPath, debounceTime = 1000) {
263
+ if (!fs.existsSync(directoryPath)) {
264
+ throw new Error(`Directorio de rutas no encontrado: ${directoryPath}`);
265
+ }
266
+
267
+ let timeoutId;
268
+
269
+ // Observar cambios en el directorio
270
+ fs.watch(directoryPath, (eventType, filename) => {
271
+ if (filename && path.extname(filename).toLowerCase() === '.json') {
272
+ clearTimeout(timeoutId);
273
+ timeoutId = setTimeout(async () => {
274
+ try {
275
+ console.log(`Recargando rutas desde directorio: ${directoryPath}`);
276
+
277
+ // Disparar hook antes de recargar
278
+ const hooks = routerIntegration.getHooks();
279
+ if (hooks) {
280
+ hooks.doAction('pre_directory_routes_reload', directoryPath, routerIntegration);
281
+ }
282
+
283
+ await this.reloadRoutesFromDirectory(routerIntegration, directoryPath);
284
+ console.log('Rutas recargadas exitosamente');
285
+
286
+ // Disparar hook después de recargar
287
+ if (hooks) {
288
+ hooks.doAction('post_directory_routes_reload', this.loadedRoutes, routerIntegration);
289
+ }
290
+ } catch (error) {
291
+ console.error('Error recargando rutas:', error.message);
292
+ }
293
+ }, debounceTime);
294
+ }
295
+ });
296
+ }
297
+ }
298
+
299
+ module.exports = RouteDirectoryLoader;
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Carga de rutas desde archivos JSON para Express-Router
3
+ * Express-Router v1.0.0 - Carga de rutas desde archivos JSON
4
+ */
5
+
6
+ const fs = require('fs');
7
+ const path = require('path');
8
+
9
+ class RouteLoader {
10
+ /**
11
+ * Constructor del cargador de rutas
12
+ */
13
+ constructor() {
14
+ this.loadedRoutes = [];
15
+ }
16
+
17
+ /**
18
+ * Método para cargar rutas desde un archivo JSON
19
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
20
+ * @param {string} filePath - Ruta al archivo JSON de rutas
21
+ * @returns {Promise<Array>} - Array de rutas cargadas
22
+ */
23
+ async loadRoutes(routerIntegration, filePath) {
24
+ try {
25
+ // Disparar hook antes de cargar rutas
26
+ const hooks = routerIntegration.getHooks();
27
+ if (hooks) {
28
+ hooks.doAction('pre_route_load', filePath, routerIntegration);
29
+ }
30
+
31
+ // Verificar si el archivo existe
32
+ if (!fs.existsSync(filePath)) {
33
+ throw new Error(`Archivo de rutas no encontrado: ${filePath}`);
34
+ }
35
+
36
+ // Leer y parsear el archivo JSON
37
+ const routeData = fs.readFileSync(filePath, 'utf8');
38
+ const routes = JSON.parse(routeData);
39
+
40
+ // Validar estructura del archivo de rutas
41
+ this.validateRoutesStructure(routes);
42
+
43
+ // Cargar cada ruta
44
+ for (const route of routes) {
45
+ await this.loadSingleRoute(routerIntegration, route);
46
+ }
47
+
48
+ this.loadedRoutes = [...this.loadedRoutes, ...routes];
49
+
50
+ // Disparar hook después de cargar rutas
51
+ if (hooks) {
52
+ hooks.doAction('post_route_load', routes, routerIntegration);
53
+ }
54
+
55
+ return routes;
56
+ } catch (error) {
57
+ throw new Error(`Error cargando rutas desde ${filePath}: ${error.message}`);
58
+ }
59
+ }
60
+
61
+ /**
62
+ * Método para validar la estructura del archivo de rutas
63
+ * @param {Array} routes - Array de rutas a validar
64
+ */
65
+ validateRoutesStructure(routes) {
66
+ if (!Array.isArray(routes)) {
67
+ throw new Error('El archivo de rutas debe contener un array de rutas');
68
+ }
69
+
70
+ for (let i = 0; i < routes.length; i++) {
71
+ const route = routes[i];
72
+
73
+ if (typeof route !== 'object' || route === null) {
74
+ throw new Error(`La ruta en la posición ${i} no es un objeto válido`);
75
+ }
76
+
77
+ if (!route.path) {
78
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'path'`);
79
+ }
80
+
81
+ if (!route.method) {
82
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'method'`);
83
+ }
84
+
85
+ // Verificar si es una ruta estática
86
+ if (route.static) {
87
+ if (typeof route.static !== 'object' || route.static === null) {
88
+ throw new Error(`La ruta en la posición ${i} tiene una propiedad 'static' inválida`);
89
+ }
90
+
91
+ if (!route.static.dir) {
92
+ throw new Error(`La ruta en la posición ${i} tiene una configuración 'static' sin directorio 'dir'`);
93
+ }
94
+
95
+ // El método debe ser GET para rutas estáticas
96
+ if (route.method.toUpperCase() !== 'GET') {
97
+ throw new Error(`Las rutas estáticas deben usar el método GET, no ${route.method}`);
98
+ }
99
+ } else {
100
+ // Validación normal para rutas dinámicas
101
+ if (!route.controller) {
102
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'controller'`);
103
+ }
104
+
105
+ if (!route.handler) {
106
+ throw new Error(`La ruta en la posición ${i} no tiene propiedad 'handler'`);
107
+ }
108
+ }
109
+
110
+ // Validar que el content-type sea un string si está presente
111
+ if (route.contentType && typeof route.contentType !== 'string') {
112
+ throw new Error(`La ruta en la posición ${i} tiene un 'contentType' inválido, debe ser un string`);
113
+ }
114
+ }
115
+ }
116
+
117
+ /**
118
+ * Método para cargar una sola ruta
119
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
120
+ * @param {Object} route - Objeto de ruta a cargar
121
+ */
122
+ async loadSingleRoute(routerIntegration, route) {
123
+ // Verificar si es una ruta estática
124
+ if (route.static) {
125
+ // Para rutas estáticas, crear un handler que sirva archivos estáticos
126
+ const staticHandler = this.createStaticHandler(route.static.dir, route.static.options || {});
127
+
128
+ routerIntegration.addRoute(route.method, route.path, staticHandler);
129
+ } else {
130
+ // Lógica para rutas dinámicas
131
+ // Obtener el controlador
132
+ // Si la ruta del controlador es relativa, resolverla desde el directorio actual
133
+ let controllerPath;
134
+ if (route.controller.startsWith('./') || route.controller.startsWith('../')) {
135
+ controllerPath = path.resolve(process.cwd(), route.controller);
136
+ } else {
137
+ controllerPath = path.resolve(process.cwd(), route.controller);
138
+ }
139
+
140
+ let controllerModule;
141
+
142
+ try {
143
+ controllerModule = require(controllerPath);
144
+ } catch (error) {
145
+ throw new Error(`No se pudo cargar el controlador: ${route.controller}. Error: ${error.message}`);
146
+ }
147
+
148
+ // Obtener el handler del controlador
149
+ const handler = controllerModule[route.handler];
150
+ if (typeof handler !== 'function') {
151
+ throw new Error(`El handler '${route.handler}' no es una función en el controlador: ${route.controller}`);
152
+ }
153
+
154
+ // Crear un handler que establezca el content-type si está especificado
155
+ let finalHandler = handler;
156
+
157
+ if (route.contentType) {
158
+ finalHandler = async (req, res, next) => {
159
+ // Establecer el content-type antes de ejecutar el handler original
160
+ res.setHeader('Content-Type', route.contentType);
161
+
162
+ // Si el handler es asíncrono, esperarlo
163
+ if (handler.constructor.name === 'AsyncFunction') {
164
+ await handler(req, res, next);
165
+ } else {
166
+ handler(req, res, next);
167
+ }
168
+ };
169
+ }
170
+
171
+ // Agregar la ruta con el handler final
172
+ routerIntegration.addRoute(route.method, route.path, finalHandler);
173
+ }
174
+ }
175
+
176
+ /**
177
+ * Método para crear un handler de archivos estáticos
178
+ * @param {string} dir - Directorio de archivos estáticos
179
+ * @param {Object} options - Opciones para servir archivos estáticos
180
+ * @returns {Function} - Handler de Express para archivos estáticos
181
+ */
182
+ createStaticHandler(dir, options = {}) {
183
+ const serveStatic = require('serve-static');
184
+ const serve = serveStatic(dir, options);
185
+
186
+ return (req, res, next) => {
187
+ // Disparar hook antes de servir archivo estático
188
+ // (esto se haría si tuviéramos acceso a los hooks aquí)
189
+ serve(req, res, next);
190
+ };
191
+ }
192
+
193
+ /**
194
+ * Método para recargar rutas desde un archivo
195
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
196
+ * @param {string} filePath - Ruta al archivo JSON de rutas
197
+ * @returns {Promise<Array>} - Array de rutas recargadas
198
+ */
199
+ async reloadRoutes(routerIntegration, filePath) {
200
+ // Limpiar rutas previamente cargadas
201
+ this.loadedRoutes = [];
202
+
203
+ // Cargar rutas nuevamente
204
+ return await this.loadRoutes(routerIntegration, filePath);
205
+ }
206
+
207
+ /**
208
+ * Método para obtener las rutas cargadas
209
+ * @returns {Array} - Array de rutas cargadas
210
+ */
211
+ getLoadedRoutes() {
212
+ return this.loadedRoutes;
213
+ }
214
+
215
+ /**
216
+ * Método para observar cambios en el archivo de rutas y recargar automáticamente
217
+ * @param {ExpressRouterIntegration} routerIntegration - Instancia de la integración del router
218
+ * @param {string} filePath - Ruta al archivo JSON de rutas
219
+ * @param {number} debounceTime - Tiempo de espera entre recargas (milisegundos)
220
+ */
221
+ watchRoutes(routerIntegration, filePath, debounceTime = 1000) {
222
+ if (!fs.existsSync(filePath)) {
223
+ throw new Error(`Archivo de rutas no encontrado: ${filePath}`);
224
+ }
225
+
226
+ let timeoutId;
227
+
228
+ fs.watch(filePath, (eventType) => {
229
+ if (eventType === 'change') {
230
+ clearTimeout(timeoutId);
231
+ timeoutId = setTimeout(async () => {
232
+ try {
233
+ console.log(`Recargando rutas desde: ${filePath}`);
234
+ await this.reloadRoutes(routerIntegration, filePath);
235
+ console.log('Rutas recargadas exitosamente');
236
+ } catch (error) {
237
+ console.error('Error recargando rutas:', error.message);
238
+ }
239
+ }, debounceTime);
240
+ }
241
+ });
242
+ }
243
+ }
244
+
245
+ module.exports = RouteLoader;