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,584 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sistema de Hooks y Filters (Versión independiente para Express)
|
|
3
|
+
* HOOKED LIB 2.0
|
|
4
|
+
* Versión 2.0.0
|
|
5
|
+
* Implementación independiente para el sistema de hooks en Express
|
|
6
|
+
*
|
|
7
|
+
* @author Benjamin Sanchez Cardenas
|
|
8
|
+
* @license Apache 2.0
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
class HookSystem {
|
|
12
|
+
constructor() {
|
|
13
|
+
// Almacenar acciones registradas
|
|
14
|
+
this.actions = new Map();
|
|
15
|
+
// Almacenar filtros registrados
|
|
16
|
+
this.filters = new Map();
|
|
17
|
+
// Almacenar namespaces
|
|
18
|
+
this.namespaces = new Map();
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Extrae el namespace y el nombre del hook
|
|
23
|
+
* @private
|
|
24
|
+
*/
|
|
25
|
+
_parseNamespaceAndHook(hookName) {
|
|
26
|
+
if (typeof hookName !== 'string' || hookName.trim() === '') {
|
|
27
|
+
throw new TypeError('hookName debe ser una cadena no vacía');
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const parts = hookName.split('::');
|
|
31
|
+
if (parts.length === 1) {
|
|
32
|
+
return { namespace: null, hookName: parts[0] };
|
|
33
|
+
} else if (parts.length === 2) {
|
|
34
|
+
return { namespace: parts[0], hookName: parts[1] };
|
|
35
|
+
} else {
|
|
36
|
+
throw new Error('Formato de hook con namespace inválido. Use namespace::hookName');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Obtiene la colección de hooks (acciones o filtros) para un namespace
|
|
42
|
+
* @private
|
|
43
|
+
*/
|
|
44
|
+
_getHooksCollection(collectionMap, namespace, hookName) {
|
|
45
|
+
if (namespace) {
|
|
46
|
+
if (!this.namespaces.has(namespace)) {
|
|
47
|
+
this.namespaces.set(namespace, { actions: new Map(), filters: new Map() });
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const namespaceData = this.namespaces.get(namespace);
|
|
51
|
+
return namespaceData[collectionMap];
|
|
52
|
+
}
|
|
53
|
+
return collectionMap === 'actions' ? this.actions : this.filters;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* Valida los parámetros comunes para addAction y addFilter
|
|
58
|
+
* @private
|
|
59
|
+
*/
|
|
60
|
+
_validateCommonParams(hookName, callback, priority, acceptedArgs) {
|
|
61
|
+
if (typeof hookName !== 'string' || hookName.trim() === '') {
|
|
62
|
+
throw new TypeError('hookName debe ser una cadena no vacía');
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (typeof callback !== 'function') {
|
|
66
|
+
throw new TypeError('callback debe ser una función');
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (!Number.isInteger(priority) || priority < 0) {
|
|
70
|
+
throw new TypeError('priority debe ser un número entero no negativo');
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (!Number.isInteger(acceptedArgs) || acceptedArgs < 0) {
|
|
74
|
+
throw new TypeError('acceptedArgs debe ser un número entero no negativo');
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* Registra una acción
|
|
80
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
81
|
+
* @param {Function} callback - Función a ejecutar
|
|
82
|
+
* @param {number} priority - Prioridad (más bajo se ejecuta primero)
|
|
83
|
+
* @param {number} acceptedArgs - Número de argumentos aceptados
|
|
84
|
+
* @param {string} [identifier] - Identificador opcional para el callback
|
|
85
|
+
*/
|
|
86
|
+
addAction(hookName, callback, priority = 10, acceptedArgs = 1, identifier = null) {
|
|
87
|
+
this._validateCommonParams(hookName, callback, priority, acceptedArgs);
|
|
88
|
+
|
|
89
|
+
if (identifier !== null && typeof identifier !== 'string') {
|
|
90
|
+
throw new TypeError('identifier debe ser una cadena o null');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
94
|
+
const collection = this._getHooksCollection('actions', namespace, cleanHookName);
|
|
95
|
+
|
|
96
|
+
if (!collection.has(cleanHookName)) {
|
|
97
|
+
collection.set(cleanHookName, []);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const hookList = collection.get(cleanHookName);
|
|
101
|
+
|
|
102
|
+
// Crear objeto hook con identificador opcional
|
|
103
|
+
const hookObject = {
|
|
104
|
+
callback,
|
|
105
|
+
priority,
|
|
106
|
+
acceptedArgs,
|
|
107
|
+
id: Date.now() + Math.random(),
|
|
108
|
+
identifier: identifier || null,
|
|
109
|
+
namespace: namespace
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
// Insertar en la posición correcta manteniendo el orden por prioridad
|
|
113
|
+
this._insertHookSorted(hookList, hookObject);
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Registra un filtro
|
|
118
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
119
|
+
* @param {Function} callback - Función a ejecutar
|
|
120
|
+
* @param {number} priority - Prioridad (más bajo se ejecuta primero)
|
|
121
|
+
* @param {number} acceptedArgs - Número de argumentos aceptados
|
|
122
|
+
* @param {string} [identifier] - Identificador opcional para el callback
|
|
123
|
+
*/
|
|
124
|
+
addFilter(hookName, callback, priority = 10, acceptedArgs = 1, identifier = null) {
|
|
125
|
+
this._validateCommonParams(hookName, callback, priority, acceptedArgs);
|
|
126
|
+
|
|
127
|
+
if (identifier !== null && typeof identifier !== 'string') {
|
|
128
|
+
throw new TypeError('identifier debe ser una cadena o null');
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
132
|
+
const collection = this._getHooksCollection('filters', namespace, cleanHookName);
|
|
133
|
+
|
|
134
|
+
if (!collection.has(cleanHookName)) {
|
|
135
|
+
collection.set(cleanHookName, []);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
const hookList = collection.get(cleanHookName);
|
|
139
|
+
|
|
140
|
+
// Crear objeto hook con identificador opcional
|
|
141
|
+
const hookObject = {
|
|
142
|
+
callback,
|
|
143
|
+
priority,
|
|
144
|
+
acceptedArgs,
|
|
145
|
+
id: Date.now() + Math.random(),
|
|
146
|
+
identifier: identifier || null,
|
|
147
|
+
namespace: namespace
|
|
148
|
+
};
|
|
149
|
+
|
|
150
|
+
// Insertar en la posición correcta manteniendo el orden por prioridad
|
|
151
|
+
this._insertHookSorted(hookList, hookObject);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Inserta un hook en la posición correcta según la prioridad
|
|
156
|
+
* @private
|
|
157
|
+
*/
|
|
158
|
+
_insertHookSorted(hookList, hookObject) {
|
|
159
|
+
// Encontrar la posición correcta para mantener el orden por prioridad
|
|
160
|
+
let insertIndex = hookList.length;
|
|
161
|
+
for (let i = 0; i < hookList.length; i++) {
|
|
162
|
+
if (hookList[i].priority > hookObject.priority) {
|
|
163
|
+
insertIndex = i;
|
|
164
|
+
break;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Insertar en la posición encontrada
|
|
169
|
+
hookList.splice(insertIndex, 0, hookObject);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Obtiene los hooks para un nombre específico (considerando namespaces)
|
|
174
|
+
* @private
|
|
175
|
+
*/
|
|
176
|
+
_getHooks(hookName, type) {
|
|
177
|
+
if (typeof hookName !== 'string' || hookName.trim() === '') {
|
|
178
|
+
throw new TypeError('hookName debe ser una cadena no vacía');
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
182
|
+
|
|
183
|
+
if (namespace) {
|
|
184
|
+
const namespaceData = this.namespaces.get(namespace);
|
|
185
|
+
if (!namespaceData) {
|
|
186
|
+
return null;
|
|
187
|
+
}
|
|
188
|
+
return namespaceData[type].get(cleanHookName);
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
// Buscar en el namespace global
|
|
192
|
+
return this[type].get(cleanHookName);
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
/**
|
|
196
|
+
* Ejecuta una acción
|
|
197
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
198
|
+
* @param {...any} args - Argumentos a pasar a los callbacks
|
|
199
|
+
*/
|
|
200
|
+
doAction(hookName, ...args) {
|
|
201
|
+
const hooks = this._getHooks(hookName, 'actions');
|
|
202
|
+
if (!hooks || hooks.length === 0) {
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
for (const hook of hooks) {
|
|
207
|
+
// Limitar argumentos según acceptedArgs
|
|
208
|
+
const callArgs = args.slice(0, hook.acceptedArgs);
|
|
209
|
+
try {
|
|
210
|
+
hook.callback(...callArgs);
|
|
211
|
+
} catch (error) {
|
|
212
|
+
console.error(`Error ejecutando callback en hook '${hookName}':`, error);
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
/**
|
|
218
|
+
* Ejecuta una acción de forma asíncrona
|
|
219
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
220
|
+
* @param {...any} args - Argumentos a pasar a los callbacks
|
|
221
|
+
* @returns {Promise<void>} - Promesa que se resuelve cuando todas las acciones se completan
|
|
222
|
+
*/
|
|
223
|
+
async doActionAsync(hookName, ...args) {
|
|
224
|
+
const hooks = this._getHooks(hookName, 'actions');
|
|
225
|
+
if (!hooks || hooks.length === 0) {
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
const promises = [];
|
|
230
|
+
for (const hook of hooks) {
|
|
231
|
+
// Limitar argumentos según acceptedArgs
|
|
232
|
+
const callArgs = args.slice(0, hook.acceptedArgs);
|
|
233
|
+
try {
|
|
234
|
+
const result = hook.callback(...callArgs);
|
|
235
|
+
// Si el callback retorna una promesa, agregarla al array de promesas
|
|
236
|
+
if (result instanceof Promise) {
|
|
237
|
+
promises.push(result);
|
|
238
|
+
}
|
|
239
|
+
} catch (error) {
|
|
240
|
+
console.error(`Error ejecutando callback en hook '${hookName}':`, error);
|
|
241
|
+
// Crear una promesa rechazada para manejar el error
|
|
242
|
+
promises.push(Promise.reject(error));
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Esperar a que todas las promesas se resuelvan
|
|
247
|
+
await Promise.allSettled(promises);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Aplica un filtro
|
|
252
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
253
|
+
* @param {any} value - Valor a filtrar
|
|
254
|
+
* @param {...any} additionalArgs - Argumentos adicionales
|
|
255
|
+
* @returns {any} - Valor filtrado
|
|
256
|
+
*/
|
|
257
|
+
applyFilters(hookName, value, ...additionalArgs) {
|
|
258
|
+
const hooks = this._getHooks(hookName, 'filters');
|
|
259
|
+
if (!hooks || hooks.length === 0) {
|
|
260
|
+
return value;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
let filteredValue = value;
|
|
264
|
+
for (const hook of hooks) {
|
|
265
|
+
// El primer argumento es el valor a filtrar, luego los adicionales
|
|
266
|
+
const callArgs = [filteredValue, ...additionalArgs.slice(0, hook.acceptedArgs - 1)];
|
|
267
|
+
try {
|
|
268
|
+
filteredValue = hook.callback(...callArgs);
|
|
269
|
+
} catch (error) {
|
|
270
|
+
console.error(`Error aplicando filtro en hook '${hookName}':`, error);
|
|
271
|
+
// Continuar con el valor anterior en caso de error
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return filteredValue;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/**
|
|
279
|
+
* Aplica un filtro de forma asíncrona
|
|
280
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
281
|
+
* @param {any} value - Valor a filtrar
|
|
282
|
+
* @param {...any} additionalArgs - Argumentos adicionales
|
|
283
|
+
* @returns {Promise<any>} - Promesa que se resuelve con el valor filtrado
|
|
284
|
+
*/
|
|
285
|
+
async applyFiltersAsync(hookName, value, ...additionalArgs) {
|
|
286
|
+
const hooks = this._getHooks(hookName, 'filters');
|
|
287
|
+
if (!hooks || hooks.length === 0) {
|
|
288
|
+
return value;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
let filteredValue = value;
|
|
292
|
+
for (const hook of hooks) {
|
|
293
|
+
// El primer argumento es el valor a filtrar, luego los adicionales
|
|
294
|
+
const callArgs = [filteredValue, ...additionalArgs.slice(0, hook.acceptedArgs - 1)];
|
|
295
|
+
try {
|
|
296
|
+
// Si el callback retorna una promesa, esperar a que se resuelva
|
|
297
|
+
filteredValue = await Promise.resolve(hook.callback(...callArgs));
|
|
298
|
+
} catch (error) {
|
|
299
|
+
console.error(`Error aplicando filtro en hook '${hookName}':`, error);
|
|
300
|
+
// Continuar con el valor anterior en caso de error
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
return filteredValue;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
/**
|
|
308
|
+
* Verifica si una acción tiene callbacks registrados
|
|
309
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
310
|
+
* @returns {boolean} - True si tiene callbacks registrados
|
|
311
|
+
*/
|
|
312
|
+
hasAction(hookName) {
|
|
313
|
+
const hooks = this._getHooks(hookName, 'actions');
|
|
314
|
+
return !!hooks && hooks.length > 0;
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Verifica si un filtro tiene callbacks registrados
|
|
319
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
320
|
+
* @returns {boolean} - True si tiene callbacks registrados
|
|
321
|
+
*/
|
|
322
|
+
hasFilter(hookName) {
|
|
323
|
+
const hooks = this._getHooks(hookName, 'filters');
|
|
324
|
+
return !!hooks && hooks.length > 0;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
/**
|
|
328
|
+
* Elimina una acción específica
|
|
329
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
330
|
+
* @param {Function|string} callbackOrIdentifier - Callback o identificador a eliminar
|
|
331
|
+
* @param {number} priority - Prioridad del callback (opcional si se usa identificador)
|
|
332
|
+
* @returns {boolean} - True si se eliminó correctamente
|
|
333
|
+
*/
|
|
334
|
+
removeAction(hookName, callbackOrIdentifier, priority = 10) {
|
|
335
|
+
if (typeof hookName !== 'string' || hookName.trim() === '') {
|
|
336
|
+
throw new TypeError('hookName debe ser una cadena no vacía');
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
if (typeof callbackOrIdentifier !== 'function' && typeof callbackOrIdentifier !== 'string') {
|
|
340
|
+
throw new TypeError('callbackOrIdentifier debe ser una función o una cadena');
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
if (typeof callbackOrIdentifier === 'string' && arguments.length === 2) {
|
|
344
|
+
// Si se pasa un identificador y solo hay 2 argumentos, eliminar por identificador en todas las prioridades
|
|
345
|
+
return this._removeActionByIdentifier(hookName, callbackOrIdentifier);
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
if (!Number.isInteger(priority) || priority < 0) {
|
|
349
|
+
throw new TypeError('priority debe ser un número entero no negativo');
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
353
|
+
const collection = this._getHooksCollection('actions', namespace, cleanHookName);
|
|
354
|
+
|
|
355
|
+
const hooks = collection.get(cleanHookName);
|
|
356
|
+
if (!hooks) {
|
|
357
|
+
return false;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
const initialLength = hooks.length;
|
|
361
|
+
|
|
362
|
+
// Filtrar hooks basándose en función o identificador
|
|
363
|
+
const filteredHooks = hooks.filter(hook => {
|
|
364
|
+
if (typeof callbackOrIdentifier === 'function') {
|
|
365
|
+
return !(hook.callback === callbackOrIdentifier && hook.priority === priority);
|
|
366
|
+
} else {
|
|
367
|
+
return !(hook.identifier === callbackOrIdentifier && hook.priority === priority);
|
|
368
|
+
}
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
if (filteredHooks.length !== initialLength) {
|
|
372
|
+
if (filteredHooks.length === 0) {
|
|
373
|
+
collection.delete(cleanHookName);
|
|
374
|
+
} else {
|
|
375
|
+
collection.set(cleanHookName, filteredHooks);
|
|
376
|
+
}
|
|
377
|
+
return true;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return false;
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Elimina un filtro específico
|
|
385
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
386
|
+
* @param {Function|string} callbackOrIdentifier - Callback o identificador a eliminar
|
|
387
|
+
* @param {number} priority - Prioridad del callback (opcional si se usa identificador)
|
|
388
|
+
* @returns {boolean} - True si se eliminó correctamente
|
|
389
|
+
*/
|
|
390
|
+
removeFilter(hookName, callbackOrIdentifier, priority = 10) {
|
|
391
|
+
if (typeof hookName !== 'string' || hookName.trim() === '') {
|
|
392
|
+
throw new TypeError('hookName debe ser una cadena no vacía');
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
if (typeof callbackOrIdentifier !== 'function' && typeof callbackOrIdentifier !== 'string') {
|
|
396
|
+
throw new TypeError('callbackOrIdentifier debe ser una función o una cadena');
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
if (typeof callbackOrIdentifier === 'string' && arguments.length === 2) {
|
|
400
|
+
// Si se pasa un identificador y solo hay 2 argumentos, eliminar por identificador en todas las prioridades
|
|
401
|
+
return this._removeFilterByIdentifier(hookName, callbackOrIdentifier);
|
|
402
|
+
}
|
|
403
|
+
|
|
404
|
+
if (!Number.isInteger(priority) || priority < 0) {
|
|
405
|
+
throw new TypeError('priority debe ser un número entero no negativo');
|
|
406
|
+
}
|
|
407
|
+
|
|
408
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
409
|
+
const collection = this._getHooksCollection('filters', namespace, cleanHookName);
|
|
410
|
+
|
|
411
|
+
const hooks = collection.get(cleanHookName);
|
|
412
|
+
if (!hooks) {
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
const initialLength = hooks.length;
|
|
417
|
+
|
|
418
|
+
// Filtrar hooks basándose en función o identificador
|
|
419
|
+
const filteredHooks = hooks.filter(hook => {
|
|
420
|
+
if (typeof callbackOrIdentifier === 'function') {
|
|
421
|
+
return !(hook.callback === callbackOrIdentifier && hook.priority === priority);
|
|
422
|
+
} else {
|
|
423
|
+
return !(hook.identifier === callbackOrIdentifier && hook.priority === priority);
|
|
424
|
+
}
|
|
425
|
+
});
|
|
426
|
+
|
|
427
|
+
if (filteredHooks.length !== initialLength) {
|
|
428
|
+
if (filteredHooks.length === 0) {
|
|
429
|
+
collection.delete(cleanHookName);
|
|
430
|
+
} else {
|
|
431
|
+
collection.set(cleanHookName, filteredHooks);
|
|
432
|
+
}
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
/**
|
|
440
|
+
* Elimina una acción por identificador en todas las prioridades
|
|
441
|
+
* @private
|
|
442
|
+
*/
|
|
443
|
+
_removeActionByIdentifier(hookName, identifier) {
|
|
444
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
445
|
+
const collection = this._getHooksCollection('actions', namespace, cleanHookName);
|
|
446
|
+
|
|
447
|
+
const hooks = collection.get(cleanHookName);
|
|
448
|
+
if (!hooks) {
|
|
449
|
+
return false;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
const initialLength = hooks.length;
|
|
453
|
+
|
|
454
|
+
// Filtrar hooks basándose en identificador en todas las prioridades
|
|
455
|
+
const filteredHooks = hooks.filter(hook => hook.identifier !== identifier);
|
|
456
|
+
|
|
457
|
+
if (filteredHooks.length !== initialLength) {
|
|
458
|
+
if (filteredHooks.length === 0) {
|
|
459
|
+
collection.delete(cleanHookName);
|
|
460
|
+
} else {
|
|
461
|
+
collection.set(cleanHookName, filteredHooks);
|
|
462
|
+
}
|
|
463
|
+
return true;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
return false;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
/**
|
|
470
|
+
* Elimina un filtro por identificador en todas las prioridades
|
|
471
|
+
* @private
|
|
472
|
+
*/
|
|
473
|
+
_removeFilterByIdentifier(hookName, identifier) {
|
|
474
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
475
|
+
const collection = this._getHooksCollection('filters', namespace, cleanHookName);
|
|
476
|
+
|
|
477
|
+
const hooks = collection.get(cleanHookName);
|
|
478
|
+
if (!hooks) {
|
|
479
|
+
return false;
|
|
480
|
+
}
|
|
481
|
+
|
|
482
|
+
const initialLength = hooks.length;
|
|
483
|
+
|
|
484
|
+
// Filtrar hooks basándose en identificador en todas las prioridades
|
|
485
|
+
const filteredHooks = hooks.filter(hook => hook.identifier !== identifier);
|
|
486
|
+
|
|
487
|
+
if (filteredHooks.length !== initialLength) {
|
|
488
|
+
if (filteredHooks.length === 0) {
|
|
489
|
+
collection.delete(cleanHookName);
|
|
490
|
+
} else {
|
|
491
|
+
collection.set(cleanHookName, filteredHooks);
|
|
492
|
+
}
|
|
493
|
+
return true;
|
|
494
|
+
}
|
|
495
|
+
|
|
496
|
+
return false;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
/**
|
|
500
|
+
* Elimina todas las acciones de un hook
|
|
501
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
502
|
+
* @returns {boolean} - True si se eliminaron correctamente
|
|
503
|
+
*/
|
|
504
|
+
removeAllActions(hookName) {
|
|
505
|
+
if (hookName !== undefined && (typeof hookName !== 'string' || hookName.trim() === '')) {
|
|
506
|
+
throw new TypeError('hookName debe ser una cadena no vacía o undefined');
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
if (!hookName) {
|
|
510
|
+
this.actions.clear();
|
|
511
|
+
// Limpiar todos los namespaces también
|
|
512
|
+
for (const [namespace, data] of this.namespaces.entries()) {
|
|
513
|
+
data.actions.clear();
|
|
514
|
+
}
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
519
|
+
|
|
520
|
+
if (namespace) {
|
|
521
|
+
const namespaceData = this.namespaces.get(namespace);
|
|
522
|
+
if (namespaceData) {
|
|
523
|
+
return namespaceData.actions.delete(cleanHookName);
|
|
524
|
+
}
|
|
525
|
+
return false;
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
return this.actions.delete(cleanHookName);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
/**
|
|
532
|
+
* Elimina todos los filtros de un hook
|
|
533
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
534
|
+
* @returns {boolean} - True si se eliminaron correctamente
|
|
535
|
+
*/
|
|
536
|
+
removeAllFilters(hookName) {
|
|
537
|
+
if (hookName !== undefined && (typeof hookName !== 'string' || hookName.trim() === '')) {
|
|
538
|
+
throw new TypeError('hookName debe ser una cadena no vacía o undefined');
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
if (!hookName) {
|
|
542
|
+
this.filters.clear();
|
|
543
|
+
// Limpiar todos los namespaces también
|
|
544
|
+
for (const [namespace, data] of this.namespaces.entries()) {
|
|
545
|
+
data.filters.clear();
|
|
546
|
+
}
|
|
547
|
+
return true;
|
|
548
|
+
}
|
|
549
|
+
|
|
550
|
+
const { namespace, hookName: cleanHookName } = this._parseNamespaceAndHook(hookName);
|
|
551
|
+
|
|
552
|
+
if (namespace) {
|
|
553
|
+
const namespaceData = this.namespaces.get(namespace);
|
|
554
|
+
if (namespaceData) {
|
|
555
|
+
return namespaceData.filters.delete(cleanHookName);
|
|
556
|
+
}
|
|
557
|
+
return false;
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
return this.filters.delete(cleanHookName);
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
/**
|
|
564
|
+
* Obtiene el número de callbacks registrados para una acción
|
|
565
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
566
|
+
* @returns {number} - Número de callbacks
|
|
567
|
+
*/
|
|
568
|
+
actionsCount(hookName) {
|
|
569
|
+
const hooks = this._getHooks(hookName, 'actions');
|
|
570
|
+
return hooks ? hooks.length : 0;
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
/**
|
|
574
|
+
* Obtiene el número de callbacks registrados para un filtro
|
|
575
|
+
* @param {string} hookName - Nombre del hook (puede incluir namespace como namespace::nombre)
|
|
576
|
+
* @returns {number} - Número de callbacks
|
|
577
|
+
*/
|
|
578
|
+
filtersCount(hookName) {
|
|
579
|
+
const hooks = this._getHooks(hookName, 'filters');
|
|
580
|
+
return hooks ? hooks.length : 0;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
module.exports = HookSystem;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "express-hooked",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Hooks system for Express with support for filters and actions",
|
|
5
|
+
"main": "express-hooked.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
8
|
+
},
|
|
9
|
+
"keywords": [
|
|
10
|
+
"express",
|
|
11
|
+
"hooks",
|
|
12
|
+
"middleware",
|
|
13
|
+
"plugin",
|
|
14
|
+
"filters",
|
|
15
|
+
"actions"
|
|
16
|
+
],
|
|
17
|
+
"author": "Benjamin Sanchez Cardenas",
|
|
18
|
+
"license": "Apache-2.0",
|
|
19
|
+
"peerDependencies": {
|
|
20
|
+
"express": "^4.18.0"
|
|
21
|
+
},
|
|
22
|
+
"repository": {
|
|
23
|
+
"type": "git",
|
|
24
|
+
"url": "https://gitlab.com/bytedogssyndicate1/express-hooked.git"
|
|
25
|
+
},
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://gitlab.com/bytedogssyndicate1/express-hooked/issues"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://gitlab.com/bytedogssyndicate1/express-hooked#readme"
|
|
30
|
+
}
|