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.
- package/README-es.md +42 -0
- package/README-es.md.backup +44 -0
- package/README.md +41 -0
- package/README.md.backup +43 -0
- package/hooked/LICENSE +204 -0
- package/hooked/README.es.md +238 -0
- package/hooked/README.md +238 -0
- package/hooked/advanced-example.js +240 -0
- package/hooked/express-hooked.js +206 -0
- package/hooked/hooks.js +584 -0
- package/hooked/package.json +30 -0
- package/index.js +25 -0
- package/package.json +36 -0
- package/queued/LICENSE +201 -0
- package/queued/QueueSystem.js +451 -0
- package/queued/README.es.md +335 -0
- package/queued/README.md +335 -0
- package/queued/express-example.js +143 -0
- package/queued/express-integration.js +115 -0
- package/queued/package.json +33 -0
- package/router/ExpressRouter.js +247 -0
- package/router/ExpressRouterIntegration.js +129 -0
- package/router/LICENSE +201 -0
- package/router/README.es.md +142 -0
- package/router/README.md +142 -0
- package/router/RouteDirectoryLoader.js +299 -0
- package/router/RouteLoader.js +245 -0
- package/router/RouteMatcher.js +361 -0
- package/router/node_modules/.package-lock.json +876 -0
- package/router/node_modules/accepts/HISTORY.md +243 -0
- package/router/node_modules/accepts/LICENSE +23 -0
- package/router/node_modules/accepts/README.md +140 -0
- package/router/node_modules/accepts/index.js +238 -0
- package/router/node_modules/accepts/package.json +47 -0
- package/router/node_modules/array-flatten/LICENSE +21 -0
- package/router/node_modules/array-flatten/README.md +43 -0
- package/router/node_modules/array-flatten/array-flatten.js +64 -0
- package/router/node_modules/array-flatten/package.json +39 -0
- package/router/node_modules/body-parser/HISTORY.md +680 -0
- package/router/node_modules/body-parser/LICENSE +23 -0
- package/router/node_modules/body-parser/README.md +476 -0
- package/router/node_modules/body-parser/index.js +156 -0
- package/router/node_modules/body-parser/lib/read.js +205 -0
- package/router/node_modules/body-parser/lib/types/json.js +247 -0
- package/router/node_modules/body-parser/lib/types/raw.js +101 -0
- package/router/node_modules/body-parser/lib/types/text.js +121 -0
- package/router/node_modules/body-parser/lib/types/urlencoded.js +300 -0
- package/router/node_modules/body-parser/package.json +55 -0
- package/router/node_modules/bytes/History.md +97 -0
- package/router/node_modules/bytes/LICENSE +23 -0
- package/router/node_modules/bytes/Readme.md +152 -0
- package/router/node_modules/bytes/index.js +170 -0
- package/router/node_modules/bytes/package.json +42 -0
- package/router/node_modules/call-bind-apply-helpers/.github/FUNDING.yml +12 -0
- package/router/node_modules/call-bind-apply-helpers/CHANGELOG.md +30 -0
- package/router/node_modules/call-bind-apply-helpers/LICENSE +21 -0
- package/router/node_modules/call-bind-apply-helpers/README.md +62 -0
- package/router/node_modules/call-bind-apply-helpers/actualApply.d.ts +1 -0
- package/router/node_modules/call-bind-apply-helpers/actualApply.js +10 -0
- package/router/node_modules/call-bind-apply-helpers/applyBind.d.ts +19 -0
- package/router/node_modules/call-bind-apply-helpers/applyBind.js +10 -0
- package/router/node_modules/call-bind-apply-helpers/functionApply.d.ts +1 -0
- package/router/node_modules/call-bind-apply-helpers/functionApply.js +4 -0
- package/router/node_modules/call-bind-apply-helpers/functionCall.d.ts +1 -0
- package/router/node_modules/call-bind-apply-helpers/functionCall.js +4 -0
- package/router/node_modules/call-bind-apply-helpers/index.d.ts +64 -0
- package/router/node_modules/call-bind-apply-helpers/index.js +15 -0
- package/router/node_modules/call-bind-apply-helpers/package.json +85 -0
- package/router/node_modules/call-bind-apply-helpers/reflectApply.d.ts +3 -0
- package/router/node_modules/call-bind-apply-helpers/reflectApply.js +4 -0
- package/router/node_modules/call-bind-apply-helpers/tsconfig.json +9 -0
- package/router/node_modules/call-bound/.github/FUNDING.yml +12 -0
- package/router/node_modules/call-bound/CHANGELOG.md +42 -0
- package/router/node_modules/call-bound/LICENSE +21 -0
- package/router/node_modules/call-bound/README.md +53 -0
- package/router/node_modules/call-bound/index.d.ts +94 -0
- package/router/node_modules/call-bound/index.js +19 -0
- package/router/node_modules/call-bound/package.json +99 -0
- package/router/node_modules/call-bound/tsconfig.json +10 -0
- package/router/node_modules/content-disposition/HISTORY.md +60 -0
- package/router/node_modules/content-disposition/LICENSE +22 -0
- package/router/node_modules/content-disposition/README.md +142 -0
- package/router/node_modules/content-disposition/index.js +458 -0
- package/router/node_modules/content-disposition/package.json +44 -0
- package/router/node_modules/content-type/HISTORY.md +29 -0
- package/router/node_modules/content-type/LICENSE +22 -0
- package/router/node_modules/content-type/README.md +94 -0
- package/router/node_modules/content-type/index.js +225 -0
- package/router/node_modules/content-type/package.json +42 -0
- package/router/node_modules/cookie/LICENSE +24 -0
- package/router/node_modules/cookie/README.md +317 -0
- package/router/node_modules/cookie/SECURITY.md +25 -0
- package/router/node_modules/cookie/index.js +335 -0
- package/router/node_modules/cookie/package.json +44 -0
- package/router/node_modules/cookie-signature/History.md +42 -0
- package/router/node_modules/cookie-signature/Readme.md +42 -0
- package/router/node_modules/cookie-signature/index.js +51 -0
- package/router/node_modules/cookie-signature/package.json +18 -0
- package/router/node_modules/debug/.coveralls.yml +1 -0
- package/router/node_modules/debug/CHANGELOG.md +362 -0
- package/router/node_modules/debug/LICENSE +19 -0
- package/router/node_modules/debug/Makefile +50 -0
- package/router/node_modules/debug/README.md +312 -0
- package/router/node_modules/debug/component.json +19 -0
- package/router/node_modules/debug/karma.conf.js +70 -0
- package/router/node_modules/debug/node.js +1 -0
- package/router/node_modules/debug/package.json +49 -0
- package/router/node_modules/debug/src/browser.js +185 -0
- package/router/node_modules/debug/src/debug.js +202 -0
- package/router/node_modules/debug/src/index.js +10 -0
- package/router/node_modules/debug/src/inspector-log.js +15 -0
- package/router/node_modules/debug/src/node.js +248 -0
- package/router/node_modules/depd/History.md +103 -0
- package/router/node_modules/depd/LICENSE +22 -0
- package/router/node_modules/depd/Readme.md +280 -0
- package/router/node_modules/depd/index.js +538 -0
- package/router/node_modules/depd/lib/browser/index.js +77 -0
- package/router/node_modules/depd/package.json +45 -0
- package/router/node_modules/destroy/LICENSE +23 -0
- package/router/node_modules/destroy/README.md +63 -0
- package/router/node_modules/destroy/index.js +209 -0
- package/router/node_modules/destroy/package.json +48 -0
- package/router/node_modules/dunder-proto/.github/FUNDING.yml +12 -0
- package/router/node_modules/dunder-proto/CHANGELOG.md +24 -0
- package/router/node_modules/dunder-proto/LICENSE +21 -0
- package/router/node_modules/dunder-proto/README.md +54 -0
- package/router/node_modules/dunder-proto/get.d.ts +5 -0
- package/router/node_modules/dunder-proto/get.js +30 -0
- package/router/node_modules/dunder-proto/package.json +76 -0
- package/router/node_modules/dunder-proto/set.d.ts +5 -0
- package/router/node_modules/dunder-proto/set.js +35 -0
- package/router/node_modules/dunder-proto/tsconfig.json +9 -0
- package/router/node_modules/ee-first/LICENSE +22 -0
- package/router/node_modules/ee-first/README.md +80 -0
- package/router/node_modules/ee-first/index.js +95 -0
- package/router/node_modules/ee-first/package.json +29 -0
- package/router/node_modules/encodeurl/LICENSE +22 -0
- package/router/node_modules/encodeurl/README.md +109 -0
- package/router/node_modules/encodeurl/index.js +60 -0
- package/router/node_modules/encodeurl/package.json +40 -0
- package/router/node_modules/es-define-property/.github/FUNDING.yml +12 -0
- package/router/node_modules/es-define-property/CHANGELOG.md +29 -0
- package/router/node_modules/es-define-property/LICENSE +21 -0
- package/router/node_modules/es-define-property/README.md +49 -0
- package/router/node_modules/es-define-property/index.d.ts +3 -0
- package/router/node_modules/es-define-property/index.js +14 -0
- package/router/node_modules/es-define-property/package.json +81 -0
- package/router/node_modules/es-define-property/tsconfig.json +10 -0
- package/router/node_modules/es-errors/.github/FUNDING.yml +12 -0
- package/router/node_modules/es-errors/CHANGELOG.md +40 -0
- package/router/node_modules/es-errors/LICENSE +21 -0
- package/router/node_modules/es-errors/README.md +55 -0
- package/router/node_modules/es-errors/eval.d.ts +3 -0
- package/router/node_modules/es-errors/eval.js +4 -0
- package/router/node_modules/es-errors/index.d.ts +3 -0
- package/router/node_modules/es-errors/index.js +4 -0
- package/router/node_modules/es-errors/package.json +80 -0
- package/router/node_modules/es-errors/range.d.ts +3 -0
- package/router/node_modules/es-errors/range.js +4 -0
- package/router/node_modules/es-errors/ref.d.ts +3 -0
- package/router/node_modules/es-errors/ref.js +4 -0
- package/router/node_modules/es-errors/syntax.d.ts +3 -0
- package/router/node_modules/es-errors/syntax.js +4 -0
- package/router/node_modules/es-errors/tsconfig.json +49 -0
- package/router/node_modules/es-errors/type.d.ts +3 -0
- package/router/node_modules/es-errors/type.js +4 -0
- package/router/node_modules/es-errors/uri.d.ts +3 -0
- package/router/node_modules/es-errors/uri.js +4 -0
- package/router/node_modules/es-object-atoms/.github/FUNDING.yml +12 -0
- package/router/node_modules/es-object-atoms/CHANGELOG.md +37 -0
- package/router/node_modules/es-object-atoms/LICENSE +21 -0
- package/router/node_modules/es-object-atoms/README.md +63 -0
- package/router/node_modules/es-object-atoms/RequireObjectCoercible.d.ts +3 -0
- package/router/node_modules/es-object-atoms/RequireObjectCoercible.js +11 -0
- package/router/node_modules/es-object-atoms/ToObject.d.ts +7 -0
- package/router/node_modules/es-object-atoms/ToObject.js +10 -0
- package/router/node_modules/es-object-atoms/index.d.ts +3 -0
- package/router/node_modules/es-object-atoms/index.js +4 -0
- package/router/node_modules/es-object-atoms/isObject.d.ts +3 -0
- package/router/node_modules/es-object-atoms/isObject.js +6 -0
- package/router/node_modules/es-object-atoms/package.json +80 -0
- package/router/node_modules/es-object-atoms/tsconfig.json +6 -0
- package/router/node_modules/escape-html/LICENSE +24 -0
- package/router/node_modules/escape-html/Readme.md +43 -0
- package/router/node_modules/escape-html/index.js +78 -0
- package/router/node_modules/escape-html/package.json +24 -0
- package/router/node_modules/etag/HISTORY.md +83 -0
- package/router/node_modules/etag/LICENSE +22 -0
- package/router/node_modules/etag/README.md +159 -0
- package/router/node_modules/etag/index.js +131 -0
- package/router/node_modules/etag/package.json +47 -0
- package/router/node_modules/express/History.md +3667 -0
- package/router/node_modules/express/LICENSE +24 -0
- package/router/node_modules/express/Readme.md +260 -0
- package/router/node_modules/express/index.js +11 -0
- package/router/node_modules/express/lib/application.js +661 -0
- package/router/node_modules/express/lib/express.js +116 -0
- package/router/node_modules/express/lib/middleware/init.js +43 -0
- package/router/node_modules/express/lib/middleware/query.js +47 -0
- package/router/node_modules/express/lib/request.js +525 -0
- package/router/node_modules/express/lib/response.js +1179 -0
- package/router/node_modules/express/lib/router/index.js +673 -0
- package/router/node_modules/express/lib/router/layer.js +181 -0
- package/router/node_modules/express/lib/router/route.js +230 -0
- package/router/node_modules/express/lib/utils.js +303 -0
- package/router/node_modules/express/lib/view.js +182 -0
- package/router/node_modules/express/package.json +102 -0
- package/router/node_modules/express-hooked/LICENSE +204 -0
- package/router/node_modules/express-hooked/README.es.md +123 -0
- package/router/node_modules/express-hooked/README.md +123 -0
- package/router/node_modules/express-hooked/express-hooked.js +206 -0
- package/router/node_modules/express-hooked/hooks.js +584 -0
- package/router/node_modules/express-hooked/package.json +30 -0
- package/router/node_modules/finalhandler/HISTORY.md +216 -0
- package/router/node_modules/finalhandler/LICENSE +22 -0
- package/router/node_modules/finalhandler/README.md +147 -0
- package/router/node_modules/finalhandler/SECURITY.md +25 -0
- package/router/node_modules/finalhandler/index.js +341 -0
- package/router/node_modules/finalhandler/package.json +47 -0
- package/router/node_modules/forwarded/HISTORY.md +21 -0
- package/router/node_modules/forwarded/LICENSE +22 -0
- package/router/node_modules/forwarded/README.md +57 -0
- package/router/node_modules/forwarded/index.js +90 -0
- package/router/node_modules/forwarded/package.json +45 -0
- package/router/node_modules/fresh/HISTORY.md +70 -0
- package/router/node_modules/fresh/LICENSE +23 -0
- package/router/node_modules/fresh/README.md +119 -0
- package/router/node_modules/fresh/index.js +137 -0
- package/router/node_modules/fresh/package.json +46 -0
- package/router/node_modules/function-bind/.github/FUNDING.yml +12 -0
- package/router/node_modules/function-bind/.github/SECURITY.md +3 -0
- package/router/node_modules/function-bind/CHANGELOG.md +136 -0
- package/router/node_modules/function-bind/LICENSE +20 -0
- package/router/node_modules/function-bind/README.md +46 -0
- package/router/node_modules/function-bind/implementation.js +84 -0
- package/router/node_modules/function-bind/index.js +5 -0
- package/router/node_modules/function-bind/package.json +87 -0
- package/router/node_modules/get-intrinsic/.github/FUNDING.yml +12 -0
- package/router/node_modules/get-intrinsic/CHANGELOG.md +186 -0
- package/router/node_modules/get-intrinsic/LICENSE +21 -0
- package/router/node_modules/get-intrinsic/README.md +71 -0
- package/router/node_modules/get-intrinsic/index.js +378 -0
- package/router/node_modules/get-intrinsic/package.json +97 -0
- package/router/node_modules/get-proto/.github/FUNDING.yml +12 -0
- package/router/node_modules/get-proto/CHANGELOG.md +21 -0
- package/router/node_modules/get-proto/LICENSE +21 -0
- package/router/node_modules/get-proto/Object.getPrototypeOf.d.ts +5 -0
- package/router/node_modules/get-proto/Object.getPrototypeOf.js +6 -0
- package/router/node_modules/get-proto/README.md +50 -0
- package/router/node_modules/get-proto/Reflect.getPrototypeOf.d.ts +3 -0
- package/router/node_modules/get-proto/Reflect.getPrototypeOf.js +4 -0
- package/router/node_modules/get-proto/index.d.ts +5 -0
- package/router/node_modules/get-proto/index.js +27 -0
- package/router/node_modules/get-proto/package.json +81 -0
- package/router/node_modules/get-proto/tsconfig.json +9 -0
- package/router/node_modules/gopd/.github/FUNDING.yml +12 -0
- package/router/node_modules/gopd/CHANGELOG.md +45 -0
- package/router/node_modules/gopd/LICENSE +21 -0
- package/router/node_modules/gopd/README.md +40 -0
- package/router/node_modules/gopd/gOPD.d.ts +1 -0
- package/router/node_modules/gopd/gOPD.js +4 -0
- package/router/node_modules/gopd/index.d.ts +5 -0
- package/router/node_modules/gopd/index.js +15 -0
- package/router/node_modules/gopd/package.json +77 -0
- package/router/node_modules/gopd/tsconfig.json +9 -0
- package/router/node_modules/has-symbols/.github/FUNDING.yml +12 -0
- package/router/node_modules/has-symbols/CHANGELOG.md +91 -0
- package/router/node_modules/has-symbols/LICENSE +21 -0
- package/router/node_modules/has-symbols/README.md +46 -0
- package/router/node_modules/has-symbols/index.d.ts +3 -0
- package/router/node_modules/has-symbols/index.js +14 -0
- package/router/node_modules/has-symbols/package.json +111 -0
- package/router/node_modules/has-symbols/shams.d.ts +3 -0
- package/router/node_modules/has-symbols/shams.js +45 -0
- package/router/node_modules/has-symbols/tsconfig.json +10 -0
- package/router/node_modules/hasown/.github/FUNDING.yml +12 -0
- package/router/node_modules/hasown/CHANGELOG.md +40 -0
- package/router/node_modules/hasown/LICENSE +21 -0
- package/router/node_modules/hasown/README.md +40 -0
- package/router/node_modules/hasown/index.d.ts +3 -0
- package/router/node_modules/hasown/index.js +8 -0
- package/router/node_modules/hasown/package.json +92 -0
- package/router/node_modules/hasown/tsconfig.json +6 -0
- package/router/node_modules/http-errors/HISTORY.md +186 -0
- package/router/node_modules/http-errors/LICENSE +23 -0
- package/router/node_modules/http-errors/README.md +169 -0
- package/router/node_modules/http-errors/index.js +290 -0
- package/router/node_modules/http-errors/package.json +54 -0
- package/router/node_modules/iconv-lite/Changelog.md +162 -0
- package/router/node_modules/iconv-lite/LICENSE +21 -0
- package/router/node_modules/iconv-lite/README.md +156 -0
- package/router/node_modules/iconv-lite/encodings/dbcs-codec.js +555 -0
- package/router/node_modules/iconv-lite/encodings/dbcs-data.js +176 -0
- package/router/node_modules/iconv-lite/encodings/index.js +22 -0
- package/router/node_modules/iconv-lite/encodings/internal.js +188 -0
- package/router/node_modules/iconv-lite/encodings/sbcs-codec.js +72 -0
- package/router/node_modules/iconv-lite/encodings/sbcs-data-generated.js +451 -0
- package/router/node_modules/iconv-lite/encodings/sbcs-data.js +174 -0
- package/router/node_modules/iconv-lite/encodings/tables/big5-added.json +122 -0
- package/router/node_modules/iconv-lite/encodings/tables/cp936.json +264 -0
- package/router/node_modules/iconv-lite/encodings/tables/cp949.json +273 -0
- package/router/node_modules/iconv-lite/encodings/tables/cp950.json +177 -0
- package/router/node_modules/iconv-lite/encodings/tables/eucjp.json +182 -0
- package/router/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json +1 -0
- package/router/node_modules/iconv-lite/encodings/tables/gbk-added.json +55 -0
- package/router/node_modules/iconv-lite/encodings/tables/shiftjis.json +125 -0
- package/router/node_modules/iconv-lite/encodings/utf16.js +177 -0
- package/router/node_modules/iconv-lite/encodings/utf7.js +290 -0
- package/router/node_modules/iconv-lite/lib/bom-handling.js +52 -0
- package/router/node_modules/iconv-lite/lib/extend-node.js +217 -0
- package/router/node_modules/iconv-lite/lib/index.d.ts +24 -0
- package/router/node_modules/iconv-lite/lib/index.js +153 -0
- package/router/node_modules/iconv-lite/lib/streams.js +121 -0
- package/router/node_modules/iconv-lite/package.json +46 -0
- package/router/node_modules/inherits/LICENSE +16 -0
- package/router/node_modules/inherits/README.md +42 -0
- package/router/node_modules/inherits/inherits.js +9 -0
- package/router/node_modules/inherits/inherits_browser.js +27 -0
- package/router/node_modules/inherits/package.json +29 -0
- package/router/node_modules/ipaddr.js/LICENSE +19 -0
- package/router/node_modules/ipaddr.js/README.md +233 -0
- package/router/node_modules/ipaddr.js/ipaddr.min.js +1 -0
- package/router/node_modules/ipaddr.js/lib/ipaddr.js +673 -0
- package/router/node_modules/ipaddr.js/lib/ipaddr.js.d.ts +68 -0
- package/router/node_modules/ipaddr.js/package.json +35 -0
- package/router/node_modules/math-intrinsics/.github/FUNDING.yml +12 -0
- package/router/node_modules/math-intrinsics/CHANGELOG.md +24 -0
- package/router/node_modules/math-intrinsics/LICENSE +21 -0
- package/router/node_modules/math-intrinsics/README.md +50 -0
- package/router/node_modules/math-intrinsics/abs.d.ts +1 -0
- package/router/node_modules/math-intrinsics/abs.js +4 -0
- package/router/node_modules/math-intrinsics/constants/maxArrayLength.d.ts +3 -0
- package/router/node_modules/math-intrinsics/constants/maxArrayLength.js +4 -0
- package/router/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts +3 -0
- package/router/node_modules/math-intrinsics/constants/maxSafeInteger.js +5 -0
- package/router/node_modules/math-intrinsics/constants/maxValue.d.ts +3 -0
- package/router/node_modules/math-intrinsics/constants/maxValue.js +5 -0
- package/router/node_modules/math-intrinsics/floor.d.ts +1 -0
- package/router/node_modules/math-intrinsics/floor.js +4 -0
- package/router/node_modules/math-intrinsics/isFinite.d.ts +3 -0
- package/router/node_modules/math-intrinsics/isFinite.js +12 -0
- package/router/node_modules/math-intrinsics/isInteger.d.ts +3 -0
- package/router/node_modules/math-intrinsics/isInteger.js +16 -0
- package/router/node_modules/math-intrinsics/isNaN.d.ts +1 -0
- package/router/node_modules/math-intrinsics/isNaN.js +6 -0
- package/router/node_modules/math-intrinsics/isNegativeZero.d.ts +3 -0
- package/router/node_modules/math-intrinsics/isNegativeZero.js +6 -0
- package/router/node_modules/math-intrinsics/max.d.ts +1 -0
- package/router/node_modules/math-intrinsics/max.js +4 -0
- package/router/node_modules/math-intrinsics/min.d.ts +1 -0
- package/router/node_modules/math-intrinsics/min.js +4 -0
- package/router/node_modules/math-intrinsics/mod.d.ts +3 -0
- package/router/node_modules/math-intrinsics/mod.js +9 -0
- package/router/node_modules/math-intrinsics/package.json +86 -0
- package/router/node_modules/math-intrinsics/pow.d.ts +1 -0
- package/router/node_modules/math-intrinsics/pow.js +4 -0
- package/router/node_modules/math-intrinsics/round.d.ts +1 -0
- package/router/node_modules/math-intrinsics/round.js +4 -0
- package/router/node_modules/math-intrinsics/sign.d.ts +3 -0
- package/router/node_modules/math-intrinsics/sign.js +11 -0
- package/router/node_modules/math-intrinsics/tsconfig.json +3 -0
- package/router/node_modules/media-typer/HISTORY.md +22 -0
- package/router/node_modules/media-typer/LICENSE +22 -0
- package/router/node_modules/media-typer/README.md +81 -0
- package/router/node_modules/media-typer/index.js +270 -0
- package/router/node_modules/media-typer/package.json +26 -0
- package/router/node_modules/merge-descriptors/HISTORY.md +21 -0
- package/router/node_modules/merge-descriptors/LICENSE +23 -0
- package/router/node_modules/merge-descriptors/README.md +49 -0
- package/router/node_modules/merge-descriptors/index.js +60 -0
- package/router/node_modules/merge-descriptors/package.json +39 -0
- package/router/node_modules/methods/HISTORY.md +29 -0
- package/router/node_modules/methods/LICENSE +24 -0
- package/router/node_modules/methods/README.md +51 -0
- package/router/node_modules/methods/index.js +69 -0
- package/router/node_modules/methods/package.json +36 -0
- package/router/node_modules/mime/CHANGELOG.md +164 -0
- package/router/node_modules/mime/LICENSE +21 -0
- package/router/node_modules/mime/README.md +90 -0
- package/router/node_modules/mime/cli.js +8 -0
- package/router/node_modules/mime/mime.js +108 -0
- package/router/node_modules/mime/package.json +44 -0
- package/router/node_modules/mime/src/build.js +53 -0
- package/router/node_modules/mime/src/test.js +60 -0
- package/router/node_modules/mime/types.json +1 -0
- package/router/node_modules/mime-db/HISTORY.md +507 -0
- package/router/node_modules/mime-db/LICENSE +23 -0
- package/router/node_modules/mime-db/README.md +100 -0
- package/router/node_modules/mime-db/db.json +8519 -0
- package/router/node_modules/mime-db/index.js +12 -0
- package/router/node_modules/mime-db/package.json +60 -0
- package/router/node_modules/mime-types/HISTORY.md +397 -0
- package/router/node_modules/mime-types/LICENSE +23 -0
- package/router/node_modules/mime-types/README.md +113 -0
- package/router/node_modules/mime-types/index.js +188 -0
- package/router/node_modules/mime-types/package.json +44 -0
- package/router/node_modules/ms/index.js +152 -0
- package/router/node_modules/ms/license.md +21 -0
- package/router/node_modules/ms/package.json +37 -0
- package/router/node_modules/ms/readme.md +51 -0
- package/router/node_modules/negotiator/HISTORY.md +108 -0
- package/router/node_modules/negotiator/LICENSE +24 -0
- package/router/node_modules/negotiator/README.md +203 -0
- package/router/node_modules/negotiator/index.js +82 -0
- package/router/node_modules/negotiator/lib/charset.js +169 -0
- package/router/node_modules/negotiator/lib/encoding.js +184 -0
- package/router/node_modules/negotiator/lib/language.js +179 -0
- package/router/node_modules/negotiator/lib/mediaType.js +294 -0
- package/router/node_modules/negotiator/package.json +42 -0
- package/router/node_modules/object-inspect/.github/FUNDING.yml +12 -0
- package/router/node_modules/object-inspect/CHANGELOG.md +424 -0
- package/router/node_modules/object-inspect/LICENSE +21 -0
- package/router/node_modules/object-inspect/example/all.js +23 -0
- package/router/node_modules/object-inspect/example/circular.js +6 -0
- package/router/node_modules/object-inspect/example/fn.js +5 -0
- package/router/node_modules/object-inspect/example/inspect.js +10 -0
- package/router/node_modules/object-inspect/index.js +544 -0
- package/router/node_modules/object-inspect/package-support.json +20 -0
- package/router/node_modules/object-inspect/package.json +105 -0
- package/router/node_modules/object-inspect/readme.markdown +84 -0
- package/router/node_modules/object-inspect/test-core-js.js +26 -0
- package/router/node_modules/object-inspect/util.inspect.js +1 -0
- package/router/node_modules/on-finished/HISTORY.md +98 -0
- package/router/node_modules/on-finished/LICENSE +23 -0
- package/router/node_modules/on-finished/README.md +162 -0
- package/router/node_modules/on-finished/index.js +234 -0
- package/router/node_modules/on-finished/package.json +39 -0
- package/router/node_modules/parseurl/HISTORY.md +58 -0
- package/router/node_modules/parseurl/LICENSE +24 -0
- package/router/node_modules/parseurl/README.md +133 -0
- package/router/node_modules/parseurl/index.js +158 -0
- package/router/node_modules/parseurl/package.json +40 -0
- package/router/node_modules/path-to-regexp/LICENSE +21 -0
- package/router/node_modules/path-to-regexp/Readme.md +35 -0
- package/router/node_modules/path-to-regexp/index.js +156 -0
- package/router/node_modules/path-to-regexp/package.json +30 -0
- package/router/node_modules/proxy-addr/HISTORY.md +161 -0
- package/router/node_modules/proxy-addr/LICENSE +22 -0
- package/router/node_modules/proxy-addr/README.md +139 -0
- package/router/node_modules/proxy-addr/index.js +327 -0
- package/router/node_modules/proxy-addr/package.json +47 -0
- package/router/node_modules/qs/.github/FUNDING.yml +12 -0
- package/router/node_modules/qs/.github/SECURITY.md +11 -0
- package/router/node_modules/qs/.github/THREAT_MODEL.md +78 -0
- package/router/node_modules/qs/CHANGELOG.md +644 -0
- package/router/node_modules/qs/LICENSE.md +29 -0
- package/router/node_modules/qs/README.md +740 -0
- package/router/node_modules/qs/dist/qs.js +141 -0
- package/router/node_modules/qs/eslint.config.mjs +56 -0
- package/router/node_modules/qs/lib/formats.js +23 -0
- package/router/node_modules/qs/lib/index.js +11 -0
- package/router/node_modules/qs/lib/parse.js +371 -0
- package/router/node_modules/qs/lib/stringify.js +356 -0
- package/router/node_modules/qs/lib/utils.js +340 -0
- package/router/node_modules/qs/package.json +94 -0
- package/router/node_modules/range-parser/HISTORY.md +56 -0
- package/router/node_modules/range-parser/LICENSE +23 -0
- package/router/node_modules/range-parser/README.md +84 -0
- package/router/node_modules/range-parser/index.js +162 -0
- package/router/node_modules/range-parser/package.json +44 -0
- package/router/node_modules/raw-body/LICENSE +22 -0
- package/router/node_modules/raw-body/README.md +223 -0
- package/router/node_modules/raw-body/index.d.ts +87 -0
- package/router/node_modules/raw-body/index.js +336 -0
- package/router/node_modules/raw-body/package.json +47 -0
- package/router/node_modules/safe-buffer/LICENSE +21 -0
- package/router/node_modules/safe-buffer/README.md +584 -0
- package/router/node_modules/safe-buffer/index.d.ts +187 -0
- package/router/node_modules/safe-buffer/index.js +65 -0
- package/router/node_modules/safe-buffer/package.json +51 -0
- package/router/node_modules/safer-buffer/LICENSE +21 -0
- package/router/node_modules/safer-buffer/Porting-Buffer.md +268 -0
- package/router/node_modules/safer-buffer/Readme.md +156 -0
- package/router/node_modules/safer-buffer/dangerous.js +58 -0
- package/router/node_modules/safer-buffer/package.json +34 -0
- package/router/node_modules/safer-buffer/safer.js +77 -0
- package/router/node_modules/safer-buffer/tests.js +406 -0
- package/router/node_modules/send/HISTORY.md +538 -0
- package/router/node_modules/send/LICENSE +23 -0
- package/router/node_modules/send/README.md +327 -0
- package/router/node_modules/send/SECURITY.md +24 -0
- package/router/node_modules/send/index.js +1142 -0
- package/router/node_modules/send/node_modules/ms/index.js +162 -0
- package/router/node_modules/send/node_modules/ms/license.md +21 -0
- package/router/node_modules/send/node_modules/ms/package.json +38 -0
- package/router/node_modules/send/node_modules/ms/readme.md +59 -0
- package/router/node_modules/send/package.json +62 -0
- package/router/node_modules/serve-static/HISTORY.md +493 -0
- package/router/node_modules/serve-static/LICENSE +25 -0
- package/router/node_modules/serve-static/README.md +257 -0
- package/router/node_modules/serve-static/index.js +209 -0
- package/router/node_modules/serve-static/package.json +42 -0
- package/router/node_modules/setprototypeof/LICENSE +13 -0
- package/router/node_modules/setprototypeof/README.md +31 -0
- package/router/node_modules/setprototypeof/index.d.ts +2 -0
- package/router/node_modules/setprototypeof/index.js +17 -0
- package/router/node_modules/setprototypeof/package.json +38 -0
- package/router/node_modules/side-channel/.github/FUNDING.yml +12 -0
- package/router/node_modules/side-channel/CHANGELOG.md +110 -0
- package/router/node_modules/side-channel/LICENSE +21 -0
- package/router/node_modules/side-channel/README.md +61 -0
- package/router/node_modules/side-channel/index.d.ts +14 -0
- package/router/node_modules/side-channel/index.js +43 -0
- package/router/node_modules/side-channel/package.json +85 -0
- package/router/node_modules/side-channel/tsconfig.json +9 -0
- package/router/node_modules/side-channel-list/.github/FUNDING.yml +12 -0
- package/router/node_modules/side-channel-list/CHANGELOG.md +15 -0
- package/router/node_modules/side-channel-list/LICENSE +21 -0
- package/router/node_modules/side-channel-list/README.md +62 -0
- package/router/node_modules/side-channel-list/index.d.ts +13 -0
- package/router/node_modules/side-channel-list/index.js +113 -0
- package/router/node_modules/side-channel-list/list.d.ts +14 -0
- package/router/node_modules/side-channel-list/package.json +77 -0
- package/router/node_modules/side-channel-list/tsconfig.json +9 -0
- package/router/node_modules/side-channel-map/.github/FUNDING.yml +12 -0
- package/router/node_modules/side-channel-map/CHANGELOG.md +22 -0
- package/router/node_modules/side-channel-map/LICENSE +21 -0
- package/router/node_modules/side-channel-map/README.md +62 -0
- package/router/node_modules/side-channel-map/index.d.ts +15 -0
- package/router/node_modules/side-channel-map/index.js +68 -0
- package/router/node_modules/side-channel-map/package.json +80 -0
- package/router/node_modules/side-channel-map/tsconfig.json +9 -0
- package/router/node_modules/side-channel-weakmap/.github/FUNDING.yml +12 -0
- package/router/node_modules/side-channel-weakmap/CHANGELOG.md +28 -0
- package/router/node_modules/side-channel-weakmap/LICENSE +21 -0
- package/router/node_modules/side-channel-weakmap/README.md +62 -0
- package/router/node_modules/side-channel-weakmap/index.d.ts +15 -0
- package/router/node_modules/side-channel-weakmap/index.js +84 -0
- package/router/node_modules/side-channel-weakmap/package.json +87 -0
- package/router/node_modules/side-channel-weakmap/tsconfig.json +9 -0
- package/router/node_modules/statuses/HISTORY.md +87 -0
- package/router/node_modules/statuses/LICENSE +23 -0
- package/router/node_modules/statuses/README.md +139 -0
- package/router/node_modules/statuses/codes.json +65 -0
- package/router/node_modules/statuses/index.js +146 -0
- package/router/node_modules/statuses/package.json +49 -0
- package/router/node_modules/toidentifier/HISTORY.md +9 -0
- package/router/node_modules/toidentifier/LICENSE +21 -0
- package/router/node_modules/toidentifier/README.md +61 -0
- package/router/node_modules/toidentifier/index.js +32 -0
- package/router/node_modules/toidentifier/package.json +38 -0
- package/router/node_modules/type-is/HISTORY.md +259 -0
- package/router/node_modules/type-is/LICENSE +23 -0
- package/router/node_modules/type-is/README.md +170 -0
- package/router/node_modules/type-is/index.js +266 -0
- package/router/node_modules/type-is/package.json +45 -0
- package/router/node_modules/unpipe/HISTORY.md +4 -0
- package/router/node_modules/unpipe/LICENSE +22 -0
- package/router/node_modules/unpipe/README.md +43 -0
- package/router/node_modules/unpipe/index.js +69 -0
- package/router/node_modules/unpipe/package.json +27 -0
- package/router/node_modules/utils-merge/LICENSE +20 -0
- package/router/node_modules/utils-merge/README.md +34 -0
- package/router/node_modules/utils-merge/index.js +23 -0
- package/router/node_modules/utils-merge/package.json +40 -0
- package/router/node_modules/vary/HISTORY.md +39 -0
- package/router/node_modules/vary/LICENSE +22 -0
- package/router/node_modules/vary/README.md +101 -0
- package/router/node_modules/vary/index.js +149 -0
- package/router/node_modules/vary/package.json +43 -0
- 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;
|