stratal 0.0.17 → 0.0.19
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.md +8 -8
- package/dist/{base-email.provider-DypUAfWm.mjs → base-email.provider-mjynzewK.mjs} +1 -1
- package/dist/{base-email.provider-DypUAfWm.mjs.map → base-email.provider-mjynzewK.mjs.map} +1 -1
- package/dist/bin/cloudflare-workers-loader.mjs +33 -1
- package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
- package/dist/bin/quarry.mjs +169 -7
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +3 -2
- package/dist/cache/index.d.mts.map +1 -1
- package/dist/cache/index.mjs +3 -10
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{colors-Y7WIFXs7.mjs → colors-DJaRDXoS.mjs} +1 -1
- package/dist/{colors-Y7WIFXs7.mjs.map → colors-DJaRDXoS.mjs.map} +1 -1
- package/dist/{command-B1CPgsrU.mjs → command-BgSlsS4M.mjs} +3 -3
- package/dist/command-BgSlsS4M.mjs.map +1 -0
- package/dist/{command-TnkPYWta.d.mts → command-DsQq56Lp.d.mts} +2 -2
- package/dist/{command-TnkPYWta.d.mts.map → command-DsQq56Lp.d.mts.map} +1 -1
- package/dist/config/index.d.mts +81 -37
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +135 -61
- package/dist/config/index.mjs.map +1 -1
- package/dist/{consumer-registry-Bymm6ff4.d.mts → consumer-registry-Doom7BEh.d.mts} +1 -1
- package/dist/{consumer-registry-Bymm6ff4.d.mts.map → consumer-registry-Doom7BEh.d.mts.map} +1 -1
- package/dist/controller.decorator-LZY9aHYG.mjs +66 -0
- package/dist/controller.decorator-LZY9aHYG.mjs.map +1 -0
- package/dist/cron/index.d.mts +4 -3
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +1 -3
- package/dist/{cron-manager-CFBamKKk.mjs → cron-manager-C30t9UZM.mjs} +29 -19
- package/dist/cron-manager-C30t9UZM.mjs.map +1 -0
- package/dist/{cron-manager-D7imGwUT.d.mts → cron-manager-RuPtFVLy.d.mts} +28 -14
- package/dist/cron-manager-RuPtFVLy.d.mts.map +1 -0
- package/dist/di/index.d.mts +2 -2
- package/dist/di/index.mjs +3 -3
- package/dist/email/index.d.mts +3 -3
- package/dist/email/index.mjs +87 -18
- package/dist/email/index.mjs.map +1 -1
- package/dist/{en-DaewN8hc.mjs → en-rHmW6vD9.mjs} +14 -31
- package/dist/en-rHmW6vD9.mjs.map +1 -0
- package/dist/env-CamWD-U1.d.mts +25 -0
- package/dist/env-CamWD-U1.d.mts.map +1 -0
- package/dist/errors/index.d.mts +2 -2
- package/dist/errors/index.mjs +2 -3
- package/dist/errors-B4pYgYON.mjs +1714 -0
- package/dist/errors-B4pYgYON.mjs.map +1 -0
- package/dist/{errors-DuAR5Wke.mjs → errors-BUyUfr2Z.mjs} +14 -7
- package/dist/errors-BUyUfr2Z.mjs.map +1 -0
- package/dist/events/index.d.mts +2 -2
- package/dist/events/index.mjs +1 -2
- package/dist/{events-CvUSgEuN.mjs → events-COKixqnG.mjs} +2 -2
- package/dist/{events-CvUSgEuN.mjs.map → events-COKixqnG.mjs.map} +1 -1
- package/dist/{gateway-context-CNOLkLUC.mjs → gateway-context-cqZ8wMoi.mjs} +4 -9
- package/dist/gateway-context-cqZ8wMoi.mjs.map +1 -0
- package/dist/guards/index.d.mts +14 -5
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +1 -1
- package/dist/{guards-DUk_Kzst.mjs → guards-DMbsAxSX.mjs} +1 -1
- package/dist/guards-DMbsAxSX.mjs.map +1 -0
- package/dist/http-method.decorator-BT3ufnz8.mjs +96 -0
- package/dist/http-method.decorator-BT3ufnz8.mjs.map +1 -0
- package/dist/i18n/index.d.mts +3 -3
- package/dist/i18n/index.mjs +3 -16
- package/dist/i18n/messages/en/index.d.mts +1 -1
- package/dist/i18n/messages/en/index.mjs +1 -1
- package/dist/i18n/utils/index.d.mts +30 -0
- package/dist/i18n/utils/index.d.mts.map +1 -0
- package/dist/i18n/utils/index.mjs +2 -0
- package/dist/i18n/validation/index.d.mts +1 -1
- package/dist/i18n/validation/index.mjs +1 -1
- package/dist/i18n.module-CI_prYFD.mjs +2340 -0
- package/dist/i18n.module-CI_prYFD.mjs.map +1 -0
- package/dist/{index-NGxg-KP_.d.mts → index-B437eK7p.d.mts} +59 -16
- package/dist/index-B437eK7p.d.mts.map +1 -0
- package/dist/{index-Dp6A5ywM.d.mts → index-CWRS7Ri3.d.mts} +1 -1
- package/dist/{index-Dp6A5ywM.d.mts.map → index-CWRS7Ri3.d.mts.map} +1 -1
- package/dist/{index-D_w_Rmtd.d.mts → index-DFhEeFfC.d.mts} +13 -30
- package/dist/{index-D_w_Rmtd.d.mts.map → index-DFhEeFfC.d.mts.map} +1 -1
- package/dist/index-DPFqRs8L.d.mts +4318 -0
- package/dist/index-DPFqRs8L.d.mts.map +1 -0
- package/dist/{index-DGRe6Yoa.d.mts → index-Dnqm9ZB6.d.mts} +5 -4
- package/dist/index-Dnqm9ZB6.d.mts.map +1 -0
- package/dist/index-SHx31sBJ.d.mts +101 -0
- package/dist/index-SHx31sBJ.d.mts.map +1 -0
- package/dist/index.d.mts +5 -3
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +1 -20
- package/dist/{is-command-DJVI6wEJ.mjs → is-command-C6a7WTPw.mjs} +2 -2
- package/dist/{is-command-DJVI6wEJ.mjs.map → is-command-C6a7WTPw.mjs.map} +1 -1
- package/dist/{is-seeder-D5MIEcdz.mjs → is-seeder-CebjZCDn.mjs} +1 -1
- package/dist/{is-seeder-D5MIEcdz.mjs.map → is-seeder-CebjZCDn.mjs.map} +1 -1
- package/dist/logger/index.d.mts +1 -1
- package/dist/logger/index.mjs +1 -1
- package/dist/{logger-CGT91VY6.mjs → logger-V6Ms3QnQ.mjs} +63 -45
- package/dist/logger-V6Ms3QnQ.mjs.map +1 -0
- package/dist/macroable/index.d.mts +2 -0
- package/dist/macroable/index.mjs +2 -0
- package/dist/macroable-BmufBshB.mjs +122 -0
- package/dist/macroable-BmufBshB.mjs.map +1 -0
- package/dist/module/index.d.mts +3 -4
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +1 -10
- package/dist/module-qGE_1duv.mjs +732 -0
- package/dist/module-qGE_1duv.mjs.map +1 -0
- package/dist/openapi/index.d.mts +3 -3
- package/dist/openapi/index.mjs +2 -15
- package/dist/{openapi-tools.service-B3TxYKoQ.mjs → openapi-tools.service-CYWGuhue.mjs} +4 -1
- package/dist/{openapi-tools.service-B3TxYKoQ.mjs.map → openapi-tools.service-CYWGuhue.mjs.map} +1 -1
- package/dist/{openapi.service-DGnX3Fc4.d.mts → openapi.service-Bv_NioM9.d.mts} +9 -17
- package/dist/openapi.service-Bv_NioM9.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +26 -12
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +4 -8
- package/dist/{quarry-registry-B2rkO-JS.mjs → quarry-registry-DFfRRkA7.mjs} +45 -40
- package/dist/quarry-registry-DFfRRkA7.mjs.map +1 -0
- package/dist/queue/index.d.mts +2 -2
- package/dist/queue/index.mjs +3 -13
- package/dist/queue/index.mjs.map +1 -1
- package/dist/{queue.module-BtI8f4Jo.mjs → queue.module-P-G-nCYz.mjs} +39 -42
- package/dist/queue.module-P-G-nCYz.mjs.map +1 -0
- package/dist/r2-storage.provider-LdzK9tfG.mjs +244 -0
- package/dist/r2-storage.provider-LdzK9tfG.mjs.map +1 -0
- package/dist/{resend.provider-bXMEkdRJ.mjs → resend.provider-bwILp0WI.mjs} +2 -4
- package/dist/{resend.provider-bXMEkdRJ.mjs.map → resend.provider-bwILp0WI.mjs.map} +1 -1
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +7 -16
- package/dist/seeder/index.d.mts +3 -4
- package/dist/seeder/index.d.mts.map +1 -1
- package/dist/seeder/index.mjs +2 -6
- package/dist/{seeder-R7RXJC35.mjs → seeder-BcqIFa2X.mjs} +5 -5
- package/dist/{seeder-R7RXJC35.mjs.map → seeder-BcqIFa2X.mjs.map} +1 -1
- package/dist/setup-CtekcwuO.mjs +37 -0
- package/dist/setup-CtekcwuO.mjs.map +1 -0
- package/dist/signed-url-COX7cCWR.mjs +74 -0
- package/dist/signed-url-COX7cCWR.mjs.map +1 -0
- package/dist/{smtp.provider-DrbHQztF.mjs → smtp.provider-B07yuARi.mjs} +2 -4
- package/dist/{smtp.provider-DrbHQztF.mjs.map → smtp.provider-B07yuARi.mjs.map} +1 -1
- package/dist/storage/index.d.mts +39 -17
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +3 -14
- package/dist/storage/providers/index.d.mts +30 -69
- package/dist/storage/providers/index.d.mts.map +1 -1
- package/dist/storage/providers/index.mjs +2 -5
- package/dist/{storage-CZKHOhci.mjs → storage-P6X4h9So.mjs} +102 -29
- package/dist/storage-P6X4h9So.mjs.map +1 -0
- package/dist/{storage-provider.interface-0IqcdhBf.d.mts → storage-provider.interface-CC1nniHk.d.mts} +20 -15
- package/dist/storage-provider.interface-CC1nniHk.d.mts.map +1 -0
- package/dist/stratal-BCiwCFN9.mjs +533 -0
- package/dist/stratal-BCiwCFN9.mjs.map +1 -0
- package/dist/{types-DahElfUw.d.mts → types-DIWemRad.d.mts} +2 -2
- package/dist/types-DIWemRad.d.mts.map +1 -0
- package/dist/{usage-generator-CVIsENuE.mjs → usage-generator-MBcRo0Q2.mjs} +2 -2
- package/dist/{usage-generator-CVIsENuE.mjs.map → usage-generator-MBcRo0Q2.mjs.map} +1 -1
- package/dist/{validation-DQTC259A.mjs → validation-Dbg3ehdP.mjs} +2 -2
- package/dist/{validation-DQTC259A.mjs.map → validation-Dbg3ehdP.mjs.map} +1 -1
- package/dist/websocket/index.d.mts +3 -3
- package/dist/websocket/index.d.mts.map +1 -1
- package/dist/websocket/index.mjs +1 -4
- package/dist/workers/index.d.mts +2 -1
- package/dist/workers/index.d.mts.map +1 -1
- package/dist/workers/index.mjs +2 -20
- package/dist/workers/index.mjs.map +1 -1
- package/package.json +41 -50
- package/dist/application-DfPtIzxF.d.mts +0 -177
- package/dist/application-DfPtIzxF.d.mts.map +0 -1
- package/dist/command-B1CPgsrU.mjs.map +0 -1
- package/dist/cron-manager-CFBamKKk.mjs.map +0 -1
- package/dist/cron-manager-D7imGwUT.d.mts.map +0 -1
- package/dist/en-DaewN8hc.mjs.map +0 -1
- package/dist/errors-DSKapqD8.mjs +0 -707
- package/dist/errors-DSKapqD8.mjs.map +0 -1
- package/dist/errors-DuAR5Wke.mjs.map +0 -1
- package/dist/gateway-context-CNOLkLUC.mjs.map +0 -1
- package/dist/guards-DUk_Kzst.mjs.map +0 -1
- package/dist/i18n.module-Dn9SrFdS.mjs +0 -1841
- package/dist/i18n.module-Dn9SrFdS.mjs.map +0 -1
- package/dist/index-BFCxSp_f.d.mts +0 -2625
- package/dist/index-BFCxSp_f.d.mts.map +0 -1
- package/dist/index-DGRe6Yoa.d.mts.map +0 -1
- package/dist/index-NGxg-KP_.d.mts.map +0 -1
- package/dist/logger-CGT91VY6.mjs.map +0 -1
- package/dist/middleware/index.d.mts +0 -2
- package/dist/middleware/index.mjs +0 -5
- package/dist/middleware-Bl-b5pkt.mjs +0 -362
- package/dist/middleware-Bl-b5pkt.mjs.map +0 -1
- package/dist/module-registry-CmjBX6ol.d.mts +0 -121
- package/dist/module-registry-CmjBX6ol.d.mts.map +0 -1
- package/dist/module-tUtyVJ5E.mjs +0 -371
- package/dist/module-tUtyVJ5E.mjs.map +0 -1
- package/dist/openapi.service-DGnX3Fc4.d.mts.map +0 -1
- package/dist/quarry-registry-B2rkO-JS.mjs.map +0 -1
- package/dist/queue.module-BtI8f4Jo.mjs.map +0 -1
- package/dist/router-context-D9R1v2Ac.mjs +0 -267
- package/dist/router-context-D9R1v2Ac.mjs.map +0 -1
- package/dist/s3-storage.provider-CttzNnDR.mjs +0 -335
- package/dist/s3-storage.provider-CttzNnDR.mjs.map +0 -1
- package/dist/storage-CZKHOhci.mjs.map +0 -1
- package/dist/storage-provider.interface-0IqcdhBf.d.mts.map +0 -1
- package/dist/stratal-D5smIU1y.mjs +0 -315
- package/dist/stratal-D5smIU1y.mjs.map +0 -1
- package/dist/types-DahElfUw.d.mts.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-BFCxSp_f.d.mts","names":[],"sources":["../src/errors/error-response.ts","../src/i18n/messages/index.ts","../src/di/types.ts","../src/di/conditional-binding-builder.ts","../src/di/container.ts","../src/di/tokens.ts","../src/di/decorators/inject-param.decorator.ts","../src/di/decorators.ts","../src/di/errors/conditional-binding-fallback.error.ts","../src/di/errors/request-scope-operation-not-allowed.error.ts","../src/env.ts","../src/router/constants.ts","../src/router/types.ts","../src/router/router-context.ts","../src/router/controller.ts","../src/router/middleware.interface.ts","../src/middleware/types.ts","../src/module/types.ts","../src/i18n/i18n.options.ts","../src/i18n/i18n.module.ts","../src/i18n/i18n.tokens.ts","../src/i18n/services/message-registry.ts","../src/i18n/setup.ts","../src/i18n/errors/locale-not-supported.error.ts","../src/i18n/errors/translation-missing.error.ts","../src/i18n/services/message-loader.service.ts","../src/i18n/middleware/locale-extraction.middleware.ts","../src/middleware/middleware-consumer.ts","../src/middleware/middleware-configuration.service.ts","../src/router/hono-app.ts","../src/router/services/route-registration.service.ts","../src/router/router.tokens.ts","../src/router/decorators/controller.decorator.ts","../src/router/decorators/http-method.decorator.ts","../src/router/decorators/route.decorator.ts","../src/router/schemas/common.schemas.ts","../src/router/errors/hono-app-already-configured.error.ts","../src/router/errors/controller-registration.error.ts","../src/router/errors/openapi-route-registration.error.ts","../src/router/errors/openapi-validation.error.ts","../src/router/errors/route-not-found.error.ts","../src/i18n/services/i18n.service.ts","../src/i18n/middleware/i18n-context.middleware.ts","../src/errors/error-codes.ts","../src/errors/application-error.ts","../src/errors/get-http-status.ts","../src/errors/global-error-handler.ts","../src/errors/internal-error.ts","../src/errors/is-application-error.ts","../src/errors/request-container-not-initialized.error.ts","../src/errors/stratal-not-initialized.error.ts"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-DGRe6Yoa.d.mts","names":[],"sources":["../src/queue/queue-manager.ts","../src/queue/queue-name.ts","../src/queue/queue-sender.interface.ts","../src/queue/providers/queue-provider.interface.ts","../src/queue/providers/cloudflare-queue.provider.ts","../src/queue/providers/sync-queue.provider.ts","../src/queue/queue-sender.ts","../src/queue/queue.module.ts","../src/queue/services/queue-provider-factory.ts","../src/queue/queue-registry.ts","../src/queue/decorators/inject-queue.decorator.ts","../src/queue/queue.tokens.ts","../src/queue/errors/queue-binding-not-found.error.ts","../src/queue/errors/queue-provider-not-supported.error.ts"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-NGxg-KP_.d.mts","names":[],"sources":["../src/i18n/i18n.types.ts","../src/i18n/validation/with-i18n.ts","../src/i18n/validation/validation.types.ts","../src/i18n/validation/validation.context.ts","../src/i18n/validation/index.ts"],"mappings":";;;;;;;;;;;;;;AAoBA;;;;;;;KAAY,QAAA,kCAA0C,CAAA,gCAEpC,CAAA,YAAa,CAAA,CAAE,CAAA,mBACvB,QAAA,CAAS,CAAA,CAAE,CAAA,MAAO,MAAA,GAAS,CAAA,UACxB,MAAA,GAAS,CAAA,WACV,CAAA;;;;;KAOA,iBAAA,GAAoB,QAAA,QAAgB,iBAAA;;;;;;;;;;;;;;;;UAiB/B,WAAA;;;AAjBjB;;KAuBY,cAAA,GAAiB,QAAA,CAAS,WAAA;;;AANtC;;KAaY,WAAA,GAAc,iBAAA,GAAoB,cAAA;;;AAP9C;;KAaY,aAAA,GAAgB,MAAA;;;AAN5B;UAWiB,YAAA;;;;AALjB;;;;EAaE,CAAA,CAAE,GAAA,EAAK,WAAA,EAAa,MAAA,GAAS,aAAA;EARd;;;;;EAef,SAAA;AAAA;;;;;;;;;;;;;AApEF;;;;;;;;;;;;;;iBCOgB,QAAA,CACd,GAAA,EAAK,WAAA,EACL,MAAA,GAAS,MAAA;EACN,KAAA;AAAA;;;;;;UCxBY,eAAA;;;;EAIf,CAAA,GAAI,GAAA,EAAK,WAAA,EAAa,MAAA,GAAS,MAAA;;AFUjC;;EELE,MAAA;AAAA;;;;;KAOU,cAAA,SAAuB,eAAA;;;;UAKlB,iBAAA;EFHK;;;EEOpB,GAAA,EAAK,WAAA;EFXc;;;EEgBnB,MAAA,GAAS,MAAA;AAAA;;;;;KAOC,cAAA,GAAiB,eAAA;EAC3B,MAAA;IACE,IAAA,GAAO,iBAAA;IAAA,CACN,GAAA;EAAA;AAAA;;;;;;;cCzBQ,eAAA,EAAe,GAAA,CAAA,WAAA,CAAyC,YAAA,CAAzC,SAAA;;;;;;;;;;;;;;;;;;;;;iBAsBZ,sBAAA,GAAA,CACd,OAAA,EAAS,eAAA,EACT,EAAA,QAAU,CAAA,GACT,CAAA;AAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"logger-CGT91VY6.mjs","names":[],"sources":["../src/di/tokens.ts","../src/di/decorators/inject-param.decorator.ts","../src/di/decorators.ts","../src/logger/logger.tokens.ts","../src/logger/contracts/log-level.ts","../src/logger/services/logger.service.ts","../src/logger/formatters/json-formatter.ts","../src/logger/formatters/pretty-formatter.ts","../src/logger/transports/base-transport.ts","../src/logger/transports/console-transport.ts"],"sourcesContent":["/**\n * Token for the Container instance\n * Used for injecting the Container into services that need dynamic resolution\n */\nexport const CONTAINER_TOKEN = Symbol.for('stratal:di:container')\n\nexport const DI_TOKENS = {\n // Cloudflare\n CloudflareEnv: Symbol.for('stratal:cloudflare:env'),\n ExecutionContext: Symbol.for('stratal:execution:context'),\n\n // Infrastructure\n Container: CONTAINER_TOKEN,\n Application: Symbol.for('stratal:application'),\n ModuleRegistry: Symbol.for('stratal:module:registry'),\n ErrorHandler: Symbol.for('stratal:error:handler'),\n Database: Symbol.for('stratal:database:service'),\n Queue: Symbol.for('stratal:queue:manager'),\n ConsumerRegistry: Symbol.for('stratal:consumer:registry'),\n Cron: Symbol.for('stratal:cron:manager'),\n EventRegistry: Symbol.for('stratal:event:registry'),\n Quarry: Symbol.for('stratal:quarry'),\n\n // Context\n /**\n * AuthContext: Use for services that need user authentication (userId).\n */\n AuthContext: Symbol.for('stratal:auth:context'),\n\n // Workers\n DurableObjectState: Symbol.for('stratal:durable:object:state'),\n DurableObjectId: Symbol.for('stratal:durable:object:id'),\n} as const\n\nexport type DIToken = typeof DI_TOKENS[keyof typeof DI_TOKENS]\n","/**\n * Method Parameter Injection Decorator\n *\n * Enables DI for controller method parameters. Parameters marked with\n * @InjectParam(token) are resolved from the request-scoped container\n * at method invocation time.\n *\n * @example\n * ```typescript\n * @Route({ response: userSchema })\n * async show(\n * ctx: RouterContext,\n * @InjectParam(UserService) userService: UserService,\n * @InjectParam(CacheService) cache: CacheService\n * ): Promise<Response> {\n * // userService and cache auto-resolved from request container\n * }\n * ```\n */\nimport type InjectionToken from 'tsyringe/dist/typings/providers/injection-token'\n\n/**\n * Metadata key for storing parameter injection information\n */\nexport const INJECT_PARAM_METADATA_KEY = Symbol.for('stratal:inject:param')\n\n/**\n * Describes a parameter injection\n */\nexport interface ParamInjection {\n /** Parameter index in the method signature (0-based) */\n index: number\n /** DI token to resolve */\n token: InjectionToken\n}\n\n/**\n * Mark a method parameter for DI injection\n *\n * The parameter will be resolved from the request-scoped container\n * when the controller method is invoked.\n *\n * @param token - DI token to resolve (class or symbol)\n *\n * @example With class token\n * ```typescript\n * async show(\n * ctx: RouterContext,\n * @InjectParam(UserService) userService: UserService\n * ) { }\n * ```\n *\n * @example With symbol token\n * ```typescript\n * async show(\n * ctx: RouterContext,\n * @InjectParam(DI_TOKENS.Cache) cache: ICacheService\n * ) { }\n * ```\n */\nexport function InjectParam<T>(token: InjectionToken<T>): ParameterDecorator {\n return (target: object, propertyKey: string | symbol | undefined, parameterIndex: number) => {\n if (propertyKey === undefined) {\n throw new Error('@InjectParam can only be used on method parameters, not constructor parameters')\n }\n\n const existingInjections: ParamInjection[] =\n (Reflect.getMetadata(INJECT_PARAM_METADATA_KEY, target, propertyKey) as ParamInjection[] | undefined) ?? []\n\n existingInjections.push({\n index: parameterIndex,\n token,\n })\n\n Reflect.defineMetadata(INJECT_PARAM_METADATA_KEY, existingInjections, target, propertyKey)\n }\n}\n\n/**\n * Get method parameter injections\n *\n * @param target - Controller prototype\n * @param propertyKey - Method name\n * @returns Array of parameter injections sorted by index\n */\nexport function getMethodInjections(target: object, propertyKey: string | symbol): ParamInjection[] {\n const injections: ParamInjection[] =\n (Reflect.getMetadata(INJECT_PARAM_METADATA_KEY, target, propertyKey) as ParamInjection[] | undefined) ?? []\n\n return injections.sort((a, b) => a.index - b.index)\n}\n","/**\n * DI Decorators\n *\n * Provides decorators for dependency injection:\n * - @Transient: Mark classes as injectable (lifecycle controlled at registration)\n * - @InjectParam: Inject dependencies into method parameters\n *\n * Lifecycle (Singleton, Request, Transient) is controlled at registration time\n * via the `scope` property in module providers or Container.register().\n */\nimport { injectable } from 'tsyringe'\nimport type InjectionToken from 'tsyringe/dist/typings/providers/injection-token'\n\n// Re-export method parameter injection\nexport {\n InjectParam,\n getMethodInjections,\n type ParamInjection,\n INJECT_PARAM_METADATA_KEY,\n} from './decorators/inject-param.decorator'\n\n/**\n * Mark a class as injectable\n *\n * This decorator wraps tsyringe's `@injectable` decorator and optionally\n * associates a token with the class. The actual lifecycle (Singleton, Request,\n * Transient) is determined at registration time, not decoration time.\n *\n * **Lifecycle Control:**\n * - Use `scope: Scope.Singleton` in module providers for singleton\n * - Use `scope: Scope.Request` in module providers for request-scoped\n * - Default is Transient (new instance per resolution)\n *\n * @param token - Optional DI token for service resolution\n *\n * @example Basic usage (no token)\n * ```typescript\n * @Transient()\n * export class UserService {\n * constructor(@inject(DI_TOKENS.Database) private db: DatabaseService) {}\n * }\n *\n * // In module:\n * @Module({\n * providers: [UserService] // Transient by default\n * })\n * ```\n *\n * @example With token\n * ```typescript\n * @Transient(DI_TOKENS.ConnectionManager)\n * export class ConnectionManager implements Disposable {\n * // ...\n * }\n *\n * // In Application.ts:\n * container.register(DI_TOKENS.ConnectionManager, ConnectionManager, Scope.Request)\n * ```\n *\n * @example Singleton via provider scope\n * ```typescript\n * @Transient()\n * export class ConsumerRegistry {\n * // ...\n * }\n *\n * // In module:\n * @Module({\n * providers: [\n * { provide: DI_TOKENS.ConsumerRegistry, useClass: ConsumerRegistry, scope: Scope.Singleton }\n * ]\n * })\n * ```\n */\nexport function Transient<T>(token?: InjectionToken<T>) {\n return function <TFunction extends abstract new (...args: never[]) => unknown>(target: TFunction): TFunction {\n const targetConstructor = target as unknown as new (...args: unknown[]) => T\n injectable<T>({ token })(targetConstructor)\n return target\n }\n}\n","/**\n * Dependency Injection Tokens for Logger Module\n *\n * Symbol-based tokens ensure type-safe dependency injection\n * and prevent naming collisions.\n */\nexport const LOGGER_TOKENS = {\n /**\n * Main logger service facade\n */\n LoggerService: Symbol.for('stratal:logger:service'),\n\n /**\n * Log formatter (JSON or Pretty)\n */\n Formatter: Symbol.for('stratal:logger:formatter'),\n\n /**\n * Array of active transports\n */\n Transports: Symbol.for('stratal:logger:transports'),\n\n /**\n * Individual transport tokens (for factory registration)\n */\n ConsoleTransport: Symbol.for('stratal:logger:console:transport'),\n\n /**\n * Configured log level for filtering\n */\n LogLevelOptions: Symbol.for('stratal:logger:log:level:options'),\n} as const\n","/**\n * Log severity levels\n * Ordered from least to most severe\n */\nexport enum LogLevel {\n DEBUG = 'debug',\n INFO = 'info',\n WARN = 'warn',\n ERROR = 'error',\n}\n\n/**\n * Map log levels to numeric priorities (for filtering)\n * Higher numbers = more severe = higher priority\n */\nexport const LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {\n [LogLevel.DEBUG]: 0,\n [LogLevel.INFO]: 1,\n [LogLevel.WARN]: 2,\n [LogLevel.ERROR]: 3,\n}\n","import { inject } from 'tsyringe'\nimport { Transient } from '../../di/decorators'\nimport { DI_TOKENS } from '../../di/tokens'\nimport type { InternalLogContext, LogContext, LogEntry } from '../contracts'\nimport { LOG_LEVEL_PRIORITY, LogLevel } from '../contracts/log-level'\nimport type { ILogFormatter } from '../formatters/formatter.interface'\nimport { LOGGER_TOKENS } from '../logger.tokens'\nimport type { ILogTransport } from '../transports/transport.interface'\n\n/**\n * Logger Service\n *\n * Main logging facade.\n *\n * **Features:**\n * - Async logging via ctx.waitUntil() for non-blocking performance\n * - Multi-transport support (console, future Sentry/Cloudflare Analytics)\n * - Configurable formatters (JSON production, Pretty development)\n * - Log level filtering based on environment\n *\n * **Architecture:**\n * - Transports and formatters injected via DI\n *\n * @example Basic usage\n * ```typescript\n * @Transient()\n * export class UserService {\n * constructor(\n * @inject(LOGGER_TOKENS.LoggerService)\n * private readonly logger: LoggerService\n * ) {}\n *\n * async createUser(input: CreateUserInput) {\n * this.logger.info('Creating user', { email: input.email })\n * }\n * }\n * ```\n */\n@Transient()\nexport class LoggerService {\n constructor(\n @inject(LOGGER_TOKENS.LogLevelOptions)\n private readonly logLevel: LogLevel,\n\n @inject(DI_TOKENS.ExecutionContext)\n private readonly executionContext: globalThis.ExecutionContext,\n\n @inject(LOGGER_TOKENS.Formatter)\n private readonly formatter: ILogFormatter,\n\n @inject(LOGGER_TOKENS.Transports)\n private readonly transports: ILogTransport[],\n ) { }\n\n /**\n * Log debug message (development only)\n */\n debug(message: string, context?: LogContext): void {\n this.log(LogLevel.DEBUG, message, context)\n }\n\n /**\n * Log info message\n */\n info(message: string, context?: LogContext): void {\n this.log(LogLevel.INFO, message, context)\n }\n\n /**\n * Log warning message\n */\n warn(message: string, context?: LogContext): void {\n this.log(LogLevel.WARN, message, context)\n }\n\n /**\n * Log error message\n * Accepts Error object or custom context\n */\n error(message: string, contextOrError?: LogContext | Error): void {\n let context: LogContext | undefined\n let error: Error | undefined\n\n if (contextOrError instanceof Error) {\n error = contextOrError\n } else {\n context = contextOrError\n }\n\n this.log(LogLevel.ERROR, message, context, error)\n }\n\n /**\n * Core logging implementation\n * Enriches context, formats message, dispatches to transports\n * Uses ctx.waitUntil() for async non-blocking processing\n */\n private log(\n level: LogLevel,\n message: string,\n userContext?: LogContext,\n error?: Error\n ): void {\n // Filter by configured log level\n if (LOG_LEVEL_PRIORITY[level] < LOG_LEVEL_PRIORITY[this.logLevel]) {\n return\n }\n\n // Build complete log entry with enriched context\n const entry: LogEntry = {\n level,\n message,\n context: this.enrichContext(userContext ?? {}),\n error: error ? this.serializeError(error) : undefined,\n }\n\n // Format once for all transports\n const formatted = this.formatter.format(entry)\n\n // Dispatch to all transports asynchronously\n const writePromises = this.transports.map(transport =>\n transport.write(entry, formatted).catch((err: unknown) => {\n // Swallow transport errors to prevent log failure from crashing app\n console.error(`Transport ${transport.name} failed:`, err)\n })\n )\n\n // Use waitUntil to ensure logs complete even after response sent\n const allWrites = Promise.all(writePromises)\n try {\n this.executionContext.waitUntil(allWrites)\n } catch (error) {\n if (!(error instanceof Error) || !error.message.includes('global scope')) {\n throw error\n }\n }\n }\n\n /**\n * Enrich log context with request info and timestamp\n * Context enrichment can be extended by application modules\n */\n private enrichContext(userContext: LogContext): InternalLogContext {\n return {\n ...userContext,\n timestamp: Date.now(),\n }\n }\n\n /**\n * Serialize Error object for transport\n */\n private serializeError(error: Error): { message: string; stack?: string; name?: string } {\n return {\n message: error.message,\n stack: error.stack,\n name: error.name,\n }\n }\n}\n","import type { LogEntry } from '../contracts'\nimport type { ILogFormatter } from './formatter.interface'\n\n/**\n * JSON Formatter\n *\n * Produces structured JSON logs for production environments.\n * Optimized for log aggregation systems (Cloudflare Analytics, Datadog, etc.)\n *\n * Output format:\n * {\n * \"level\": \"info\",\n * \"message\": \"User logged in\",\n * \"timestamp\": 1234567890,\n * \"userId\": \"user_456\",\n * \"error\": { \"message\": \"...\", \"stack\": \"...\" }\n * }\n */\nexport class JsonFormatter implements ILogFormatter {\n format(entry: LogEntry): string {\n const output = {\n level: entry.level,\n message: entry.message,\n ...entry.context,\n ...(entry.error && { error: entry.error }),\n }\n\n return JSON.stringify(output)\n }\n}\n","import type { LogEntry } from '../contracts'\nimport { LogLevel } from '../contracts'\nimport type { ILogFormatter } from './formatter.interface'\n\n/**\n * Pretty Formatter\n *\n * Human-readable colored output for development environments.\n * Uses ANSI color codes for terminal output.\n *\n * Output format:\n * [2024-01-15 10:30:45] INFO: User logged in\n * userId: user_456\n */\nexport class PrettyFormatter implements ILogFormatter {\n private readonly colors: Record<LogLevel, string> = {\n [LogLevel.DEBUG]: '\\x1b[36m', // Cyan\n [LogLevel.INFO]: '\\x1b[32m', // Green\n [LogLevel.WARN]: '\\x1b[33m', // Yellow\n [LogLevel.ERROR]: '\\x1b[31m', // Red\n }\n\n private readonly reset = '\\x1b[0m'\n\n format(entry: LogEntry): string {\n const color = this.colors[entry.level]\n const timestamp = new Date(entry.context.timestamp).toISOString()\n const levelStr = entry.level.toUpperCase().padEnd(5)\n\n let output = `${color}[${timestamp}] ${levelStr}${this.reset}: ${entry.message}`\n\n // Add context (exclude timestamp)\n const { timestamp: _, ...contextWithoutTimestamp } = entry.context\n const contextEntries = Object.entries(contextWithoutTimestamp)\n\n if (contextEntries.length > 0) {\n output += '\\n'\n contextEntries.forEach(([key, value]) => {\n output += ` ${key}: ${JSON.stringify(value)}\\n`\n })\n }\n\n // Add error stack if present\n if (entry.error?.stack) {\n output += `\\n${entry.error.stack}\\n`\n }\n\n return output.trimEnd()\n }\n}\n","import type { ILogTransport } from './transport.interface'\nimport type { LogEntry } from '../contracts'\n\n/**\n * Base Transport\n *\n * Abstract base class providing shared transport logic.\n * Reduces code duplication across transport implementations.\n */\nexport abstract class BaseTransport implements ILogTransport {\n abstract readonly name: string\n\n /**\n * Write log entry - must be implemented by concrete transports\n */\n abstract write(entry: LogEntry, formatted: string): Promise<void>\n\n /**\n * Handle transport errors gracefully\n * Logs to console.error as fallback to prevent log loss\n *\n * @param error - Error that occurred during write\n * @param entry - Log entry that failed\n */\n protected handleError(error: unknown, entry: LogEntry): void {\n console.error(`[${this.name}] Failed to write log:`, {\n error: error instanceof Error ? error.message : String(error),\n logMessage: entry.message,\n level: entry.level,\n })\n }\n}\n","import { Transient } from '../../di/decorators'\nimport { LOGGER_TOKENS } from '../logger.tokens'\nimport { BaseTransport } from './base-transport'\nimport type { LogEntry } from '../contracts'\nimport { LogLevel } from '../contracts'\n\n/**\n * Console Transport\n *\n * Writes logs to console using appropriate console methods.\n * Maps log levels to console.debug, console.info, console.warn, console.error.\n *\n * Thread-safe for Cloudflare Workers environment.\n */\n@Transient(LOGGER_TOKENS.ConsoleTransport)\nexport class ConsoleTransport extends BaseTransport {\n readonly name = 'console'\n\n write(entry: LogEntry, formatted: string): Promise<void> {\n try {\n const consoleMethod = this.getConsoleMethod(entry.level)\n consoleMethod(formatted)\n } catch (error) {\n this.handleError(error, entry)\n }\n\n return Promise.resolve()\n }\n\n /**\n * Map log level to console method\n */\n private getConsoleMethod(level: LogLevel): typeof console.log {\n switch (level) {\n case LogLevel.DEBUG:\n return console.debug\n case LogLevel.INFO:\n return console.info\n case LogLevel.WARN:\n return console.warn\n case LogLevel.ERROR:\n return console.error\n default:\n return console.log\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import { G as MiddlewareConsumerImpl, K as createMiddlewareConsumer, St as RouteInfo, W as MiddlewareConfigurationService, _t as MiddlewareBuilder, bt as MiddlewareConsumer, vt as MiddlewareConfigEntry, xt as MiddlewareRouteTarget, yt as MiddlewareConfigurable } from "../index-BFCxSp_f.mjs";
|
|
2
|
-
export { MiddlewareBuilder, MiddlewareConfigEntry, MiddlewareConfigurable, MiddlewareConfigurationService, MiddlewareConsumer, MiddlewareConsumerImpl, MiddlewareRouteTarget, RouteInfo, createMiddlewareConsumer };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import "../errors-DSKapqD8.mjs";
|
|
2
|
-
import "../logger-CGT91VY6.mjs";
|
|
3
|
-
import { o as MiddlewareConsumerImpl, s as createMiddlewareConsumer, t as MiddlewareConfigurationService } from "../middleware-Bl-b5pkt.mjs";
|
|
4
|
-
import "../router-context-D9R1v2Ac.mjs";
|
|
5
|
-
export { MiddlewareConfigurationService, MiddlewareConsumerImpl, createMiddlewareConsumer };
|
|
@@ -1,362 +0,0 @@
|
|
|
1
|
-
import { d as Transient } from "./logger-CGT91VY6.mjs";
|
|
2
|
-
import { o as ROUTE_METADATA_KEYS, t as RouterContext } from "./router-context-D9R1v2Ac.mjs";
|
|
3
|
-
//#region src/middleware/middleware-consumer.ts
|
|
4
|
-
/**
|
|
5
|
-
* Builder for configuring middleware routes and exclusions
|
|
6
|
-
*
|
|
7
|
-
* Provides fluent API for specifying where middleware should apply.
|
|
8
|
-
*/
|
|
9
|
-
var MiddlewareBuilderImpl = class {
|
|
10
|
-
middlewares;
|
|
11
|
-
excludedRoutes = [];
|
|
12
|
-
consumer;
|
|
13
|
-
constructor(middlewares, consumer) {
|
|
14
|
-
this.middlewares = middlewares;
|
|
15
|
-
this.consumer = consumer;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Exclude specific routes from middleware
|
|
19
|
-
*
|
|
20
|
-
* @param routes - Routes to exclude (path strings or RouteInfo objects)
|
|
21
|
-
* @returns this for method chaining
|
|
22
|
-
*
|
|
23
|
-
* @example
|
|
24
|
-
* ```typescript
|
|
25
|
-
* consumer
|
|
26
|
-
* .apply(AuthMiddleware)
|
|
27
|
-
* .exclude('/health', { path: '/api/public', method: 'get' })
|
|
28
|
-
* .forRoutes('*')
|
|
29
|
-
* ```
|
|
30
|
-
*/
|
|
31
|
-
exclude(...routes) {
|
|
32
|
-
for (const route of routes) if (typeof route === "string") this.excludedRoutes.push({ path: route });
|
|
33
|
-
else this.excludedRoutes.push(route);
|
|
34
|
-
return this;
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Apply middleware to specified routes
|
|
38
|
-
*
|
|
39
|
-
* This method finalizes the configuration and registers it with the consumer.
|
|
40
|
-
*
|
|
41
|
-
* @param targets - Controller classes, RouteInfo objects, or '*' for global
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```typescript
|
|
45
|
-
* // Apply to all routes
|
|
46
|
-
* consumer.apply(LoggingMiddleware).forRoutes('*')
|
|
47
|
-
*
|
|
48
|
-
* // Apply to specific controllers
|
|
49
|
-
* consumer.apply(CorsMiddleware).forRoutes(ApiController, WebhooksController)
|
|
50
|
-
*
|
|
51
|
-
* // Apply to specific paths
|
|
52
|
-
* consumer.apply(RateLimitMiddleware).forRoutes(
|
|
53
|
-
* { path: '/api/v1/auth', method: 'post' }
|
|
54
|
-
* )
|
|
55
|
-
* ```
|
|
56
|
-
*/
|
|
57
|
-
forRoutes(...targets) {
|
|
58
|
-
const entry = {
|
|
59
|
-
middlewares: this.middlewares,
|
|
60
|
-
excludes: this.excludedRoutes,
|
|
61
|
-
routes: targets
|
|
62
|
-
};
|
|
63
|
-
this.consumer.addEntry(entry);
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Consumer for configuring middleware in modules
|
|
68
|
-
*
|
|
69
|
-
* Provides fluent API for registering middleware with route targeting.
|
|
70
|
-
* Used by modules implementing MiddlewareConfigurable interface.
|
|
71
|
-
*
|
|
72
|
-
* @example
|
|
73
|
-
* ```typescript
|
|
74
|
-
* @Module({ providers: [...] })
|
|
75
|
-
* export class AppModule implements MiddlewareConfigurable {
|
|
76
|
-
* configure(consumer: MiddlewareConsumer): void {
|
|
77
|
-
* // Global logging middleware (excludes health check)
|
|
78
|
-
* consumer
|
|
79
|
-
* .apply(LoggingMiddleware)
|
|
80
|
-
* .exclude('/health')
|
|
81
|
-
* .forRoutes('*')
|
|
82
|
-
*
|
|
83
|
-
* // CORS middleware for specific controllers
|
|
84
|
-
* consumer
|
|
85
|
-
* .apply(CorsMiddleware)
|
|
86
|
-
* .forRoutes(ApiController, WebhooksController)
|
|
87
|
-
*
|
|
88
|
-
* // Rate limiting for auth endpoints
|
|
89
|
-
* consumer
|
|
90
|
-
* .apply(RateLimitMiddleware)
|
|
91
|
-
* .forRoutes({ path: '/api/v1/auth/*', method: 'post' })
|
|
92
|
-
* }
|
|
93
|
-
* }
|
|
94
|
-
* ```
|
|
95
|
-
*/
|
|
96
|
-
var MiddlewareConsumerImpl = class {
|
|
97
|
-
entries = [];
|
|
98
|
-
/**
|
|
99
|
-
* Start configuring middleware
|
|
100
|
-
*
|
|
101
|
-
* @param middlewares - Middleware classes to apply
|
|
102
|
-
* @returns Builder for configuring routes and exclusions
|
|
103
|
-
*/
|
|
104
|
-
apply(...middlewares) {
|
|
105
|
-
return new MiddlewareBuilderImpl(middlewares, this);
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Add a configuration entry (called by builder)
|
|
109
|
-
* @internal
|
|
110
|
-
*/
|
|
111
|
-
addEntry(entry) {
|
|
112
|
-
this.entries.push(entry);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Get all configured middleware entries
|
|
116
|
-
*/
|
|
117
|
-
getEntries() {
|
|
118
|
-
return this.entries;
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
/**
|
|
122
|
-
* Create a new middleware consumer instance
|
|
123
|
-
*/
|
|
124
|
-
function createMiddlewareConsumer() {
|
|
125
|
-
return new MiddlewareConsumerImpl();
|
|
126
|
-
}
|
|
127
|
-
//#endregion
|
|
128
|
-
//#region src/router/decorators/controller.decorator.ts
|
|
129
|
-
const CONTROLLER_ROUTE_KEY = ROUTE_METADATA_KEYS.CONTROLLER_ROUTE;
|
|
130
|
-
/**
|
|
131
|
-
* Base controller decorator for route registration
|
|
132
|
-
*
|
|
133
|
-
* This is the core controller decorator that handles:
|
|
134
|
-
* - Transient scope registration (request-scoped)
|
|
135
|
-
* - Route metadata storage
|
|
136
|
-
* - Controller options (tags, security schemes, hideFromDocs)
|
|
137
|
-
*
|
|
138
|
-
* @param route - Base route for this controller (e.g., '/api/v1/users')
|
|
139
|
-
* @param options - Optional configuration (tags, security schemes, hideFromDocs)
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* ```typescript
|
|
143
|
-
* import { Controller } from 'stratal/router'
|
|
144
|
-
*
|
|
145
|
-
* @Controller('/api/v1/users', { tags: ['Users'] })
|
|
146
|
-
* export class UsersController implements IController {
|
|
147
|
-
* // All routes accessible
|
|
148
|
-
* }
|
|
149
|
-
* ```
|
|
150
|
-
*/
|
|
151
|
-
function Controller(route, options) {
|
|
152
|
-
return function(target) {
|
|
153
|
-
Transient()(target);
|
|
154
|
-
Reflect.defineMetadata(CONTROLLER_ROUTE_KEY, route, target);
|
|
155
|
-
if (options) Reflect.defineMetadata(ROUTE_METADATA_KEYS.CONTROLLER_OPTIONS, options, target);
|
|
156
|
-
return target;
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Get the route from controller class metadata
|
|
161
|
-
*
|
|
162
|
-
* @param target - Controller class or instance
|
|
163
|
-
* @returns Route string or undefined if not set
|
|
164
|
-
*/
|
|
165
|
-
function getControllerRoute(target) {
|
|
166
|
-
const metadataTarget = typeof target === "function" ? target : target.constructor;
|
|
167
|
-
return Reflect.getMetadata(CONTROLLER_ROUTE_KEY, metadataTarget);
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Get the options from controller class metadata
|
|
171
|
-
*
|
|
172
|
-
* @param target - Controller class or instance
|
|
173
|
-
* @returns Controller options or undefined if not set
|
|
174
|
-
*/
|
|
175
|
-
function getControllerOptions(target) {
|
|
176
|
-
const metadataTarget = typeof target === "function" ? target : target.constructor;
|
|
177
|
-
return Reflect.getMetadata(ROUTE_METADATA_KEYS.CONTROLLER_OPTIONS, metadataTarget);
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Get the version from controller class metadata
|
|
181
|
-
*
|
|
182
|
-
* @param target - Controller class or instance
|
|
183
|
-
* @returns Version string, array, VERSION_NEUTRAL symbol, or undefined if not set
|
|
184
|
-
*/
|
|
185
|
-
function getControllerVersion(target) {
|
|
186
|
-
return getControllerOptions(target)?.version;
|
|
187
|
-
}
|
|
188
|
-
//#endregion
|
|
189
|
-
//#region src/middleware/middleware-configuration.service.ts
|
|
190
|
-
/**
|
|
191
|
-
* Service for applying middleware configurations to Hono app
|
|
192
|
-
*
|
|
193
|
-
* Processes MiddlewareConfigEntry[] from modules and registers
|
|
194
|
-
* appropriate middleware handlers with route matching.
|
|
195
|
-
*/
|
|
196
|
-
var MiddlewareConfigurationService = class {
|
|
197
|
-
constructor(logger, versioningOptions = null) {
|
|
198
|
-
this.logger = logger;
|
|
199
|
-
this.versioningOptions = versioningOptions;
|
|
200
|
-
}
|
|
201
|
-
/**
|
|
202
|
-
* Apply middleware configurations to the Hono app
|
|
203
|
-
*
|
|
204
|
-
* @param app - Hono application instance
|
|
205
|
-
* @param configs - Middleware configuration entries from modules
|
|
206
|
-
* @param controllers - All registered controller classes (for route resolution)
|
|
207
|
-
* @param container - DI container for resolving middleware instances
|
|
208
|
-
*/
|
|
209
|
-
applyMiddlewares(app, configs, controllers, container) {
|
|
210
|
-
for (const config of configs) this.applyMiddlewareConfig(app, config, controllers, container);
|
|
211
|
-
}
|
|
212
|
-
/**
|
|
213
|
-
* Apply a single middleware configuration entry
|
|
214
|
-
*/
|
|
215
|
-
applyMiddlewareConfig(app, config, controllers, container) {
|
|
216
|
-
const { middlewares, excludes, routes } = config;
|
|
217
|
-
const routePatterns = this.resolveRoutePatterns(routes, controllers);
|
|
218
|
-
this.logger.debug("Applying middleware configuration", {
|
|
219
|
-
middlewares: middlewares.map((m) => m.name),
|
|
220
|
-
routes: routePatterns,
|
|
221
|
-
excludes
|
|
222
|
-
});
|
|
223
|
-
for (const pattern of routePatterns) this.registerMiddlewareForPattern(app, middlewares, pattern, excludes, container);
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Resolve route targets into concrete route patterns
|
|
227
|
-
*/
|
|
228
|
-
resolveRoutePatterns(targets, _controllers) {
|
|
229
|
-
const patterns = [];
|
|
230
|
-
for (const target of targets) if (target === "*") patterns.push({ path: "*" });
|
|
231
|
-
else if (typeof target === "function") {
|
|
232
|
-
const route = getControllerRoute(target);
|
|
233
|
-
if (route) {
|
|
234
|
-
patterns.push({ path: `${route}/*` });
|
|
235
|
-
patterns.push({ path: route });
|
|
236
|
-
} else this.logger.warn("Controller has no route metadata", { controller: target.name });
|
|
237
|
-
} else if (!this.versioningOptions || !target.version) patterns.push(target);
|
|
238
|
-
else {
|
|
239
|
-
const resolved = this.resolveVersionedRouteInfo(target);
|
|
240
|
-
patterns.push(...resolved);
|
|
241
|
-
}
|
|
242
|
-
return patterns;
|
|
243
|
-
}
|
|
244
|
-
/**
|
|
245
|
-
* Resolve a RouteInfo with version into versioned path(s).
|
|
246
|
-
* If versioning is disabled or no version is specified, returns the RouteInfo as-is.
|
|
247
|
-
*/
|
|
248
|
-
resolveVersionedRouteInfo(routeInfo) {
|
|
249
|
-
if (!this.versioningOptions || !routeInfo.version) return [routeInfo];
|
|
250
|
-
const prefix = this.versioningOptions.prefix ?? "v";
|
|
251
|
-
const versions = Array.isArray(routeInfo.version) ? routeInfo.version : [routeInfo.version];
|
|
252
|
-
const results = [];
|
|
253
|
-
for (const v of versions) {
|
|
254
|
-
const versionedPath = `/${prefix}${v}${routeInfo.path}`;
|
|
255
|
-
results.push({
|
|
256
|
-
path: versionedPath,
|
|
257
|
-
method: routeInfo.method
|
|
258
|
-
});
|
|
259
|
-
results.push({
|
|
260
|
-
path: `${versionedPath}/*`,
|
|
261
|
-
method: routeInfo.method
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
|
-
return results;
|
|
265
|
-
}
|
|
266
|
-
/**
|
|
267
|
-
* Register middleware handlers for a specific route pattern
|
|
268
|
-
*/
|
|
269
|
-
registerMiddlewareForPattern(app, middlewares, pattern, excludes, container) {
|
|
270
|
-
const path = pattern.path;
|
|
271
|
-
const methods = pattern.method ? Array.isArray(pattern.method) ? pattern.method : [pattern.method] : void 0;
|
|
272
|
-
const handler = this.createMiddlewareHandler(middlewares, excludes, container);
|
|
273
|
-
if (methods && methods.length > 0) for (const method of methods) this.registerForMethod(app, method, path, handler);
|
|
274
|
-
else app.use(path, handler);
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Register handler for a specific HTTP method
|
|
278
|
-
*/
|
|
279
|
-
registerForMethod(app, method, path, handler) {
|
|
280
|
-
switch (method) {
|
|
281
|
-
case "get":
|
|
282
|
-
app.get(path, handler);
|
|
283
|
-
break;
|
|
284
|
-
case "post":
|
|
285
|
-
app.post(path, handler);
|
|
286
|
-
break;
|
|
287
|
-
case "put":
|
|
288
|
-
app.put(path, handler);
|
|
289
|
-
break;
|
|
290
|
-
case "delete":
|
|
291
|
-
app.delete(path, handler);
|
|
292
|
-
break;
|
|
293
|
-
case "patch":
|
|
294
|
-
app.patch(path, handler);
|
|
295
|
-
break;
|
|
296
|
-
default: app.use(path, handler);
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Create a middleware handler function that executes the middleware chain
|
|
301
|
-
*/
|
|
302
|
-
createMiddlewareHandler(middlewares, excludes, container) {
|
|
303
|
-
return async (c, next) => {
|
|
304
|
-
const requestPath = c.req.path;
|
|
305
|
-
const requestMethod = c.req.method.toLowerCase();
|
|
306
|
-
if (this.isExcluded(requestPath, requestMethod, excludes)) {
|
|
307
|
-
await next();
|
|
308
|
-
return;
|
|
309
|
-
}
|
|
310
|
-
const ctx = new RouterContext(c);
|
|
311
|
-
await this.executeMiddlewareChain(middlewares, ctx, container, next);
|
|
312
|
-
};
|
|
313
|
-
}
|
|
314
|
-
/**
|
|
315
|
-
* Check if a request matches any exclusion pattern
|
|
316
|
-
*/
|
|
317
|
-
isExcluded(requestPath, requestMethod, excludes) {
|
|
318
|
-
for (const exclude of excludes) if (this.matchesRoute(requestPath, requestMethod, exclude)) return true;
|
|
319
|
-
return false;
|
|
320
|
-
}
|
|
321
|
-
/**
|
|
322
|
-
* Check if request matches a route pattern
|
|
323
|
-
*/
|
|
324
|
-
matchesRoute(requestPath, requestMethod, route) {
|
|
325
|
-
if (route.method) {
|
|
326
|
-
if (!(Array.isArray(route.method) ? route.method : [route.method]).includes(requestMethod)) return false;
|
|
327
|
-
}
|
|
328
|
-
return this.matchesPath(requestPath, route.path);
|
|
329
|
-
}
|
|
330
|
-
/**
|
|
331
|
-
* Match request path against pattern
|
|
332
|
-
* Supports wildcards: /api/* matches /api/users, /api/v1/users
|
|
333
|
-
*/
|
|
334
|
-
matchesPath(requestPath, pattern) {
|
|
335
|
-
if (pattern === requestPath) return true;
|
|
336
|
-
if (pattern === "*") return true;
|
|
337
|
-
if (pattern.endsWith("/*")) {
|
|
338
|
-
const prefix = pattern.slice(0, -2);
|
|
339
|
-
return requestPath === prefix || requestPath.startsWith(prefix + "/");
|
|
340
|
-
}
|
|
341
|
-
const regexPattern = pattern.replace(/:[^/]+/g, "[^/]+").replace(/\*/g, ".*");
|
|
342
|
-
return new RegExp(`^${regexPattern}$`).test(requestPath);
|
|
343
|
-
}
|
|
344
|
-
/**
|
|
345
|
-
* Execute middleware chain in order
|
|
346
|
-
*/
|
|
347
|
-
async executeMiddlewareChain(middlewares, ctx, container, finalNext) {
|
|
348
|
-
let chain = finalNext;
|
|
349
|
-
for (let i = middlewares.length - 1; i >= 0; i--) {
|
|
350
|
-
const MiddlewareClass = middlewares[i];
|
|
351
|
-
const currentNext = chain;
|
|
352
|
-
chain = async () => {
|
|
353
|
-
await ctx.getContainer().resolve(MiddlewareClass).handle(ctx, currentNext);
|
|
354
|
-
};
|
|
355
|
-
}
|
|
356
|
-
await chain();
|
|
357
|
-
}
|
|
358
|
-
};
|
|
359
|
-
//#endregion
|
|
360
|
-
export { getControllerVersion as a, getControllerRoute as i, Controller as n, MiddlewareConsumerImpl as o, getControllerOptions as r, createMiddlewareConsumer as s, MiddlewareConfigurationService as t };
|
|
361
|
-
|
|
362
|
-
//# sourceMappingURL=middleware-Bl-b5pkt.mjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"middleware-Bl-b5pkt.mjs","names":[],"sources":["../src/middleware/middleware-consumer.ts","../src/router/decorators/controller.decorator.ts","../src/middleware/middleware-configuration.service.ts"],"sourcesContent":["import type { Middleware } from '../router/middleware.interface'\nimport type { Constructor } from '../types'\nimport type {\n MiddlewareConfigEntry,\n MiddlewareConsumer as IMiddlewareConsumer,\n MiddlewareBuilder as IMiddlewareBuilder,\n MiddlewareRouteTarget,\n RouteInfo,\n} from './types'\n\n/**\n * Builder for configuring middleware routes and exclusions\n *\n * Provides fluent API for specifying where middleware should apply.\n */\nclass MiddlewareBuilderImpl implements IMiddlewareBuilder {\n private middlewares: Constructor<Middleware>[]\n private excludedRoutes: RouteInfo[] = []\n private consumer: MiddlewareConsumerImpl\n\n constructor(\n middlewares: Constructor<Middleware>[],\n consumer: MiddlewareConsumerImpl\n ) {\n this.middlewares = middlewares\n this.consumer = consumer\n }\n\n /**\n * Exclude specific routes from middleware\n *\n * @param routes - Routes to exclude (path strings or RouteInfo objects)\n * @returns this for method chaining\n *\n * @example\n * ```typescript\n * consumer\n * .apply(AuthMiddleware)\n * .exclude('/health', { path: '/api/public', method: 'get' })\n * .forRoutes('*')\n * ```\n */\n exclude(...routes: (string | RouteInfo)[]): this {\n for (const route of routes) {\n if (typeof route === 'string') {\n this.excludedRoutes.push({ path: route })\n } else {\n this.excludedRoutes.push(route)\n }\n }\n return this\n }\n\n /**\n * Apply middleware to specified routes\n *\n * This method finalizes the configuration and registers it with the consumer.\n *\n * @param targets - Controller classes, RouteInfo objects, or '*' for global\n *\n * @example\n * ```typescript\n * // Apply to all routes\n * consumer.apply(LoggingMiddleware).forRoutes('*')\n *\n * // Apply to specific controllers\n * consumer.apply(CorsMiddleware).forRoutes(ApiController, WebhooksController)\n *\n * // Apply to specific paths\n * consumer.apply(RateLimitMiddleware).forRoutes(\n * { path: '/api/v1/auth', method: 'post' }\n * )\n * ```\n */\n forRoutes(...targets: MiddlewareRouteTarget[]): void {\n const entry: MiddlewareConfigEntry = {\n middlewares: this.middlewares,\n excludes: this.excludedRoutes,\n routes: targets,\n }\n this.consumer.addEntry(entry)\n }\n}\n\n/**\n * Consumer for configuring middleware in modules\n *\n * Provides fluent API for registering middleware with route targeting.\n * Used by modules implementing MiddlewareConfigurable interface.\n *\n * @example\n * ```typescript\n * @Module({ providers: [...] })\n * export class AppModule implements MiddlewareConfigurable {\n * configure(consumer: MiddlewareConsumer): void {\n * // Global logging middleware (excludes health check)\n * consumer\n * .apply(LoggingMiddleware)\n * .exclude('/health')\n * .forRoutes('*')\n *\n * // CORS middleware for specific controllers\n * consumer\n * .apply(CorsMiddleware)\n * .forRoutes(ApiController, WebhooksController)\n *\n * // Rate limiting for auth endpoints\n * consumer\n * .apply(RateLimitMiddleware)\n * .forRoutes({ path: '/api/v1/auth/*', method: 'post' })\n * }\n * }\n * ```\n */\nexport class MiddlewareConsumerImpl implements IMiddlewareConsumer {\n private entries: MiddlewareConfigEntry[] = []\n\n /**\n * Start configuring middleware\n *\n * @param middlewares - Middleware classes to apply\n * @returns Builder for configuring routes and exclusions\n */\n apply(...middlewares: Constructor<Middleware>[]): IMiddlewareBuilder {\n return new MiddlewareBuilderImpl(middlewares, this)\n }\n\n /**\n * Add a configuration entry (called by builder)\n * @internal\n */\n addEntry(entry: MiddlewareConfigEntry): void {\n this.entries.push(entry)\n }\n\n /**\n * Get all configured middleware entries\n */\n getEntries(): MiddlewareConfigEntry[] {\n return this.entries\n }\n}\n\n/**\n * Create a new middleware consumer instance\n */\nexport function createMiddlewareConsumer(): IMiddlewareConsumer {\n return new MiddlewareConsumerImpl()\n}\n","import { Transient } from '../../di/decorators'\nimport { type Constructor } from '../../types'\nimport { ROUTE_METADATA_KEYS } from '../constants'\nimport { type ControllerOptions } from '../types'\n\nconst CONTROLLER_ROUTE_KEY = ROUTE_METADATA_KEYS.CONTROLLER_ROUTE\n\n/**\n * Base controller decorator for route registration\n *\n * This is the core controller decorator that handles:\n * - Transient scope registration (request-scoped)\n * - Route metadata storage\n * - Controller options (tags, security schemes, hideFromDocs)\n *\n * @param route - Base route for this controller (e.g., '/api/v1/users')\n * @param options - Optional configuration (tags, security schemes, hideFromDocs)\n *\n * @example\n * ```typescript\n * import { Controller } from 'stratal/router'\n *\n * @Controller('/api/v1/users', { tags: ['Users'] })\n * export class UsersController implements IController {\n * // All routes accessible\n * }\n * ```\n */\nexport function Controller(route: string, options?: ControllerOptions) {\n return function <T extends Constructor>(target: T) {\n // Wrap @Transient (handles @injectable and scope metadata)\n Transient()(target)\n\n // Store route metadata on the class\n Reflect.defineMetadata(CONTROLLER_ROUTE_KEY, route, target)\n\n // Store options metadata if provided\n if (options) {\n Reflect.defineMetadata(ROUTE_METADATA_KEYS.CONTROLLER_OPTIONS, options, target)\n }\n\n return target\n }\n}\n\n/**\n * Get the route from controller class metadata\n *\n * @param target - Controller class or instance\n * @returns Route string or undefined if not set\n */\nexport function getControllerRoute(target: object): string | undefined {\n // Check if target is a class constructor (function) or an instance\n // If class, get metadata from it directly; if instance, get from constructor\n const metadataTarget = typeof target === 'function' ? target : (target as { constructor: object }).constructor\n return Reflect.getMetadata(CONTROLLER_ROUTE_KEY, metadataTarget) as string | undefined\n}\n\n/**\n * Get the options from controller class metadata\n *\n * @param target - Controller class or instance\n * @returns Controller options or undefined if not set\n */\nexport function getControllerOptions(target: object): ControllerOptions | undefined {\n const metadataTarget = typeof target === 'function' ? target : (target as { constructor: object }).constructor\n return Reflect.getMetadata(ROUTE_METADATA_KEYS.CONTROLLER_OPTIONS, metadataTarget) as ControllerOptions | undefined\n}\n\n/**\n * Get the version from controller class metadata\n *\n * @param target - Controller class or instance\n * @returns Version string, array, VERSION_NEUTRAL symbol, or undefined if not set\n */\nexport function getControllerVersion(target: object): ControllerOptions['version'] {\n const options = getControllerOptions(target)\n return options?.version\n}\n","import type { Context } from 'hono'\nimport type { OpenAPIHono } from '../i18n/validation'\nimport type { Container } from '../di'\nimport type { LoggerService } from '../logger'\nimport type { IController } from '../router/controller'\nimport { getControllerRoute } from '../router/decorators/controller.decorator'\nimport type { Middleware } from '../router/middleware.interface'\nimport { RouterContext } from '../router/router-context'\nimport type { HttpMethod, RouterEnv, VersioningOptions } from '../router/types'\nimport type { Constructor } from '../types'\nimport type { MiddlewareConfigEntry, RouteInfo } from './types'\n\n/**\n * Service for applying middleware configurations to Hono app\n *\n * Processes MiddlewareConfigEntry[] from modules and registers\n * appropriate middleware handlers with route matching.\n */\nexport class MiddlewareConfigurationService {\n constructor(\n private readonly logger: LoggerService,\n private readonly versioningOptions: VersioningOptions | null = null,\n ) { }\n\n /**\n * Apply middleware configurations to the Hono app\n *\n * @param app - Hono application instance\n * @param configs - Middleware configuration entries from modules\n * @param controllers - All registered controller classes (for route resolution)\n * @param container - DI container for resolving middleware instances\n */\n applyMiddlewares(\n app: OpenAPIHono<RouterEnv>,\n configs: MiddlewareConfigEntry[],\n controllers: Constructor<IController>[],\n container: Container\n ): void {\n for (const config of configs) {\n this.applyMiddlewareConfig(app, config, controllers, container)\n }\n }\n\n /**\n * Apply a single middleware configuration entry\n */\n private applyMiddlewareConfig(\n app: OpenAPIHono<RouterEnv>,\n config: MiddlewareConfigEntry,\n controllers: Constructor<IController>[],\n container: Container\n ): void {\n const { middlewares, excludes, routes } = config\n\n // Resolve route patterns from targets\n const routePatterns = this.resolveRoutePatterns(routes, controllers)\n\n // Log the configuration for debugging\n this.logger.debug('Applying middleware configuration', {\n middlewares: middlewares.map(m => m.name),\n routes: routePatterns,\n excludes: excludes,\n })\n\n // Apply middleware to each route pattern\n for (const pattern of routePatterns) {\n this.registerMiddlewareForPattern(app, middlewares, pattern, excludes, container)\n }\n }\n\n /**\n * Resolve route targets into concrete route patterns\n */\n private resolveRoutePatterns(\n targets: (Constructor<IController> | RouteInfo | '*')[],\n _controllers: Constructor<IController>[]\n ): RouteInfo[] {\n const patterns: RouteInfo[] = []\n\n for (const target of targets) {\n if (target === '*') {\n // Global middleware - apply to all routes\n patterns.push({ path: '*' })\n } else if (typeof target === 'function') {\n // Controller class - get its route from metadata\n const route = getControllerRoute(target)\n if (route) {\n // Add wildcard for all paths under this controller\n patterns.push({ path: `${route}/*` })\n // Also match the exact path\n patterns.push({ path: route })\n } else {\n this.logger.warn('Controller has no route metadata', { controller: target.name })\n }\n } else {\n // RouteInfo object - resolve version if present\n if (!this.versioningOptions || !target.version) {\n // Fast path: no versioning or no version on target — push directly\n patterns.push(target)\n } else {\n const resolved = this.resolveVersionedRouteInfo(target)\n patterns.push(...resolved)\n }\n }\n }\n\n return patterns\n }\n\n /**\n * Resolve a RouteInfo with version into versioned path(s).\n * If versioning is disabled or no version is specified, returns the RouteInfo as-is.\n */\n private resolveVersionedRouteInfo(routeInfo: RouteInfo): RouteInfo[] {\n if (!this.versioningOptions || !routeInfo.version) {\n return [routeInfo]\n }\n\n const prefix = this.versioningOptions.prefix ?? 'v'\n const versions = Array.isArray(routeInfo.version) ? routeInfo.version : [routeInfo.version]\n const results: RouteInfo[] = []\n\n for (const v of versions) {\n const versionedPath = `/${prefix}${v}${routeInfo.path}`\n // Add exact path match\n results.push({ path: versionedPath, method: routeInfo.method })\n // Add wildcard match for sub-paths\n results.push({ path: `${versionedPath}/*`, method: routeInfo.method })\n }\n\n return results\n }\n\n /**\n * Register middleware handlers for a specific route pattern\n */\n private registerMiddlewareForPattern(\n app: OpenAPIHono<RouterEnv>,\n middlewares: Constructor<Middleware>[],\n pattern: RouteInfo,\n excludes: RouteInfo[],\n container: Container\n ): void {\n const path = pattern.path\n const methods = pattern.method\n ? (Array.isArray(pattern.method) ? pattern.method : [pattern.method])\n : undefined\n\n // Create the middleware handler\n const handler = this.createMiddlewareHandler(middlewares, excludes, container)\n\n // Register with Hono\n if (methods && methods.length > 0) {\n // Method-specific registration\n for (const method of methods) {\n this.registerForMethod(app, method, path, handler)\n }\n } else {\n // All methods\n app.use(path, handler)\n }\n }\n\n /**\n * Register handler for a specific HTTP method\n */\n private registerForMethod(\n app: OpenAPIHono<RouterEnv>,\n method: HttpMethod,\n path: string,\n handler: (c: Context<RouterEnv>, next: () => Promise<void>) => Promise<void>\n ): void {\n switch (method) {\n case 'get':\n app.get(path, handler)\n break\n case 'post':\n app.post(path, handler)\n break\n case 'put':\n app.put(path, handler)\n break\n case 'delete':\n app.delete(path, handler)\n break\n case 'patch':\n app.patch(path, handler)\n break\n default:\n app.use(path, handler)\n }\n }\n\n /**\n * Create a middleware handler function that executes the middleware chain\n */\n private createMiddlewareHandler(\n middlewares: Constructor<Middleware>[],\n excludes: RouteInfo[],\n container: Container\n ): (c: Context<RouterEnv>, next: () => Promise<void>) => Promise<void> {\n return async (c, next) => {\n const requestPath = c.req.path\n const requestMethod = c.req.method.toLowerCase() as HttpMethod\n\n // Check if this request should be excluded\n if (this.isExcluded(requestPath, requestMethod, excludes)) {\n await next()\n return\n }\n\n // Create RouterContext for middleware\n const ctx = new RouterContext(c)\n\n // Execute middleware chain\n await this.executeMiddlewareChain(middlewares, ctx, container, next)\n }\n }\n\n /**\n * Check if a request matches any exclusion pattern\n */\n private isExcluded(\n requestPath: string,\n requestMethod: HttpMethod,\n excludes: RouteInfo[]\n ): boolean {\n for (const exclude of excludes) {\n if (this.matchesRoute(requestPath, requestMethod, exclude)) {\n return true\n }\n }\n return false\n }\n\n /**\n * Check if request matches a route pattern\n */\n private matchesRoute(\n requestPath: string,\n requestMethod: HttpMethod,\n route: RouteInfo\n ): boolean {\n // Check method match (if specified)\n if (route.method) {\n const methods = Array.isArray(route.method) ? route.method : [route.method]\n if (!methods.includes(requestMethod)) {\n return false\n }\n }\n\n // Check path match\n return this.matchesPath(requestPath, route.path)\n }\n\n /**\n * Match request path against pattern\n * Supports wildcards: /api/* matches /api/users, /api/v1/users\n */\n private matchesPath(requestPath: string, pattern: string): boolean {\n // Exact match\n if (pattern === requestPath) {\n return true\n }\n\n // Global wildcard\n if (pattern === '*') {\n return true\n }\n\n // Wildcard pattern (e.g., /api/*)\n if (pattern.endsWith('/*')) {\n const prefix = pattern.slice(0, -2)\n return requestPath === prefix || requestPath.startsWith(prefix + '/')\n }\n\n // Path parameter pattern (e.g., /api/users/:id)\n // Convert to regex for matching\n const regexPattern = pattern\n .replace(/:[^/]+/g, '[^/]+') // Replace :param with regex\n .replace(/\\*/g, '.*') // Replace * with regex\n const regex = new RegExp(`^${regexPattern}$`)\n return regex.test(requestPath)\n }\n\n /**\n * Execute middleware chain in order\n */\n private async executeMiddlewareChain(\n middlewares: Constructor<Middleware>[],\n ctx: RouterContext,\n container: Container,\n finalNext: () => Promise<void>\n ): Promise<void> {\n // Build middleware chain from end to start\n let chain = finalNext\n\n for (let i = middlewares.length - 1; i >= 0; i--) {\n const MiddlewareClass = middlewares[i]\n const currentNext = chain\n\n chain = async () => {\n // Resolve middleware from request-scoped container\n const requestContainer = ctx.getContainer()\n const middleware = requestContainer.resolve<Middleware>(MiddlewareClass)\n await middleware.handle(ctx, currentNext)\n }\n }\n\n // Execute the chain\n await chain()\n }\n}\n"],"mappings":"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"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { at as DynamicModule, en as Container, lt as ModuleClass, vt as MiddlewareConfigEntry } from "./index-BFCxSp_f.mjs";
|
|
2
|
-
import { t as Constructor } from "./types-DahElfUw.mjs";
|
|
3
|
-
import { i as LoggerService } from "./index-Dp6A5ywM.mjs";
|
|
4
|
-
|
|
5
|
-
//#region src/module/module-registry.d.ts
|
|
6
|
-
/**
|
|
7
|
-
* ModuleRegistry - manages module lifecycle
|
|
8
|
-
*
|
|
9
|
-
* @example
|
|
10
|
-
* ```typescript
|
|
11
|
-
* const registry = new ModuleRegistry(container, logger)
|
|
12
|
-
* registry.register(AppModule) // Traverses imports recursively
|
|
13
|
-
* await registry.initialize()
|
|
14
|
-
* // ... application running ...
|
|
15
|
-
* await registry.shutdown()
|
|
16
|
-
* ```
|
|
17
|
-
*/
|
|
18
|
-
declare class ModuleRegistry {
|
|
19
|
-
private readonly container;
|
|
20
|
-
private readonly logger;
|
|
21
|
-
private modules;
|
|
22
|
-
private registeredClasses;
|
|
23
|
-
private initialized;
|
|
24
|
-
private allControllers;
|
|
25
|
-
private allConsumers;
|
|
26
|
-
private allJobs;
|
|
27
|
-
private allListeners;
|
|
28
|
-
private allCommands;
|
|
29
|
-
private allSeeders;
|
|
30
|
-
private allMiddlewareConfigs;
|
|
31
|
-
constructor(container: Container, logger: LoggerService);
|
|
32
|
-
/**
|
|
33
|
-
* Register a module (static or dynamic)
|
|
34
|
-
*
|
|
35
|
-
* @param moduleOrDynamic - Module class decorated with `@Module` or DynamicModule from configure()
|
|
36
|
-
*/
|
|
37
|
-
register(moduleOrDynamic: ModuleClass | DynamicModule): void;
|
|
38
|
-
/**
|
|
39
|
-
* Register multiple modules in order
|
|
40
|
-
*/
|
|
41
|
-
registerAll(modules: (ModuleClass | DynamicModule)[]): void;
|
|
42
|
-
/**
|
|
43
|
-
* Initialize all modules (call configure and onInitialize hooks)
|
|
44
|
-
*/
|
|
45
|
-
initialize(): Promise<void>;
|
|
46
|
-
/**
|
|
47
|
-
* Get all controllers registered from all modules
|
|
48
|
-
*/
|
|
49
|
-
getAllControllers(): Constructor[];
|
|
50
|
-
/**
|
|
51
|
-
* Get all consumers registered from all modules
|
|
52
|
-
*/
|
|
53
|
-
getAllConsumers(): Constructor[];
|
|
54
|
-
/**
|
|
55
|
-
* Get all jobs registered from all modules
|
|
56
|
-
*/
|
|
57
|
-
getAllJobs(): Constructor[];
|
|
58
|
-
/**
|
|
59
|
-
* Get all listeners registered from all modules
|
|
60
|
-
*/
|
|
61
|
-
getAllListeners(): Constructor[];
|
|
62
|
-
/**
|
|
63
|
-
* Get all commands registered from all modules
|
|
64
|
-
*/
|
|
65
|
-
getAllCommands(): Constructor[];
|
|
66
|
-
/**
|
|
67
|
-
* Get all seeders registered from all modules
|
|
68
|
-
*/
|
|
69
|
-
getAllSeeders(): Constructor[];
|
|
70
|
-
/**
|
|
71
|
-
* Get all middleware configurations from all modules
|
|
72
|
-
*/
|
|
73
|
-
getAllMiddlewareConfigs(): MiddlewareConfigEntry[];
|
|
74
|
-
/**
|
|
75
|
-
* Shutdown all modules (call onShutdown hooks in reverse order)
|
|
76
|
-
*/
|
|
77
|
-
shutdown(): Promise<void>;
|
|
78
|
-
/**
|
|
79
|
-
* Type guard for MiddlewareConfigurable
|
|
80
|
-
*/
|
|
81
|
-
private hasMiddlewareConfigurable;
|
|
82
|
-
/**
|
|
83
|
-
* Type guard for OnInitialize
|
|
84
|
-
*/
|
|
85
|
-
private hasOnInitialize;
|
|
86
|
-
/**
|
|
87
|
-
* Type guard for OnShutdown
|
|
88
|
-
*/
|
|
89
|
-
private hasOnShutdown;
|
|
90
|
-
/**
|
|
91
|
-
* Resolve module class and options from static or dynamic module
|
|
92
|
-
*
|
|
93
|
-
* For DynamicModules, merges the decorator metadata (consumers, controllers, jobs)
|
|
94
|
-
* with the DynamicModule options (providers, imports). This ensures modules using
|
|
95
|
-
* forRoot/forRootAsync patterns still have their decorator-defined consumers registered.
|
|
96
|
-
*/
|
|
97
|
-
private resolveModule;
|
|
98
|
-
/**
|
|
99
|
-
* Type guard for DynamicModule
|
|
100
|
-
*/
|
|
101
|
-
private isDynamicModule;
|
|
102
|
-
/**
|
|
103
|
-
* Register a single provider in the container
|
|
104
|
-
*/
|
|
105
|
-
private registerProvider;
|
|
106
|
-
/**
|
|
107
|
-
* Check if a class is a `Command` and collect it for auto-wiring
|
|
108
|
-
*/
|
|
109
|
-
private collectIfCommand;
|
|
110
|
-
/**
|
|
111
|
-
* Check if a class is a `Seeder` and collect it for auto-wiring
|
|
112
|
-
*/
|
|
113
|
-
private collectIfSeeder;
|
|
114
|
-
/**
|
|
115
|
-
* Check if a class is a `@Listener()` and collect it for auto-wiring
|
|
116
|
-
*/
|
|
117
|
-
private collectIfListener;
|
|
118
|
-
}
|
|
119
|
-
//#endregion
|
|
120
|
-
export { ModuleRegistry as t };
|
|
121
|
-
//# sourceMappingURL=module-registry-CmjBX6ol.d.mts.map
|