stratal 0.0.21 → 0.0.23
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 +2 -2
- package/dist/bin/cloudflare-workers-loader.mjs +80 -7
- package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
- package/dist/bin/quarry.mjs +84 -160
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +8 -46
- package/dist/cache/index.d.mts.map +1 -1
- package/dist/cache/index.mjs +134 -97
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{cache.service-DsnKuNyO.d.mts → cache.service-uElmBtdS.d.mts} +29 -39
- package/dist/cache.service-uElmBtdS.d.mts.map +1 -0
- package/dist/{command-BgSlsS4M.mjs → command-BvmUAPPQ.mjs} +15 -4
- package/dist/command-BvmUAPPQ.mjs.map +1 -0
- package/dist/{command-Cmmf0oHX.d.mts → command-CPhFHjG3.d.mts} +3 -2
- package/dist/command-CPhFHjG3.d.mts.map +1 -0
- package/dist/command-not-found.error-ONAZ2Bpk.mjs +14 -0
- package/dist/command-not-found.error-ONAZ2Bpk.mjs.map +1 -0
- package/dist/config/index.d.mts +24 -11
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +32 -57
- package/dist/config/index.mjs.map +1 -1
- package/dist/{consumer-registry-B7yUNh0q.d.mts → consumer-registry-D3iMTSdy.d.mts} +54 -22
- package/dist/consumer-registry-D3iMTSdy.d.mts.map +1 -0
- package/dist/container-storage-BmOJ4_Na.mjs +52 -0
- package/dist/container-storage-BmOJ4_Na.mjs.map +1 -0
- package/dist/{controller.decorator-B9vwn0zK.mjs → controller.decorator-C5UVeJS3.mjs} +8 -8
- package/dist/controller.decorator-C5UVeJS3.mjs.map +1 -0
- package/dist/cron/index.d.mts +103 -7
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +2 -2
- package/dist/cron-job-NesZRk8F.d.mts +58 -0
- package/dist/cron-job-NesZRk8F.d.mts.map +1 -0
- package/dist/{cron-manager-DQSK8uoV.mjs → cron.module-Bgzq5hiT.mjs} +47 -17
- package/dist/cron.module-Bgzq5hiT.mjs.map +1 -0
- package/dist/decorate-CuAoSZvs.mjs +16 -0
- package/dist/deep-merge-ByiAOZ3r.mjs +18 -0
- package/dist/deep-merge-ByiAOZ3r.mjs.map +1 -0
- package/dist/di/index.d.mts +2 -2
- package/dist/di/index.mjs +4 -3
- package/dist/di-DseMn-z9.mjs +524 -0
- package/dist/di-DseMn-z9.mjs.map +1 -0
- package/dist/email/index.d.mts +40 -122
- package/dist/email/index.d.mts.map +1 -1
- package/dist/email/index.mjs +446 -131
- package/dist/email/index.mjs.map +1 -1
- package/dist/en-CDZBMcc1.mjs +202 -0
- package/dist/en-CDZBMcc1.mjs.map +1 -0
- package/dist/{env-D1rcZ8_r.d.mts → env-ug22bJj7.d.mts} +1 -1
- package/dist/env-ug22bJj7.d.mts.map +1 -0
- package/dist/errors/index.d.mts +2 -2
- package/dist/errors/index.mjs +4 -2
- package/dist/errors-mXYxG0XB.mjs +333 -0
- package/dist/errors-mXYxG0XB.mjs.map +1 -0
- package/dist/events/index.d.mts +14 -3
- package/dist/events/index.d.mts.map +1 -1
- package/dist/events/index.mjs +2 -2
- package/dist/{events-CzCV8jI8.mjs → events-BXJGZjpG.mjs} +23 -13
- package/dist/events-BXJGZjpG.mjs.map +1 -0
- package/dist/exception-context-kEoMFwze.mjs +429 -0
- package/dist/exception-context-kEoMFwze.mjs.map +1 -0
- package/dist/{gateway-context-CXmXtaUP.mjs → gateway-context-TMu_AlJt.mjs} +38 -31
- package/dist/gateway-context-TMu_AlJt.mjs.map +1 -0
- package/dist/guards/index.d.mts +3 -3
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +1 -1
- package/dist/{guards-DU1_J9YA.mjs → guards-DALPXy3_.mjs} +6 -5
- package/dist/guards-DALPXy3_.mjs.map +1 -0
- package/dist/hono-app-CvV3hOfT.mjs +161 -0
- package/dist/hono-app-CvV3hOfT.mjs.map +1 -0
- package/dist/{http-method.decorator-BrgHMdLQ.mjs → http-method.decorator-ByWZb9DO.mjs} +7 -6
- package/dist/http-method.decorator-ByWZb9DO.mjs.map +1 -0
- package/dist/i18n/index.d.mts +238 -3
- package/dist/i18n/index.d.mts.map +1 -0
- package/dist/i18n/index.mjs +39 -3
- package/dist/i18n/index.mjs.map +1 -0
- package/dist/i18n/messages/en/index.d.mts +2 -2
- package/dist/i18n/messages/en/index.mjs +2 -2
- package/dist/i18n/utils/index.d.mts +4 -26
- package/dist/i18n/utils/index.d.mts.map +1 -1
- package/dist/i18n/utils/index.mjs +2 -2
- package/dist/i18n/validation/index.d.mts +3 -2
- package/dist/i18n/validation/index.mjs +4 -2
- package/dist/i18n.module-DRQAZoSZ.mjs +222 -0
- package/dist/i18n.module-DRQAZoSZ.mjs.map +1 -0
- package/dist/i18n.tokens-CZ_v8oyS.mjs +19 -0
- package/dist/i18n.tokens-CZ_v8oyS.mjs.map +1 -0
- package/dist/{index-7-hU3GTV.d.mts → index-0ItCjaqw.d.mts} +1 -1
- package/dist/index-0ItCjaqw.d.mts.map +1 -0
- package/dist/index-B5JBRcWD.d.mts +544 -0
- package/dist/index-B5JBRcWD.d.mts.map +1 -0
- package/dist/index-BUt92sAE.d.mts +124 -0
- package/dist/index-BUt92sAE.d.mts.map +1 -0
- package/dist/{index-ByOyTmqf.d.mts → index-B_JoEl3V.d.mts} +751 -2229
- package/dist/index-B_JoEl3V.d.mts.map +1 -0
- package/dist/index-DtBNIFuP.d.mts +42 -0
- package/dist/index-DtBNIFuP.d.mts.map +1 -0
- package/dist/{index-C1KvMncZ.d.mts → index-HgOLNruQ.d.mts} +3 -108
- package/dist/index-HgOLNruQ.d.mts.map +1 -0
- package/dist/index.d.mts +6 -43
- package/dist/index.mjs +3 -2
- package/dist/{is-command-C6a7WTPw.mjs → is-command-CEPO9n8c.mjs} +2 -2
- package/dist/{is-command-C6a7WTPw.mjs.map → is-command-CEPO9n8c.mjs.map} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs → is-seeder-Gvh_AM71.mjs} +1 -1
- package/dist/{is-seeder-CebjZCDn.mjs.map → is-seeder-Gvh_AM71.mjs.map} +1 -1
- package/dist/lazy-module-loader-Ib383jH_.d.mts +60 -0
- package/dist/lazy-module-loader-Ib383jH_.d.mts.map +1 -0
- package/dist/locale-path.service-D-dHiIPc.mjs +165 -0
- package/dist/locale-path.service-D-dHiIPc.mjs.map +1 -0
- package/dist/locale-url-nZrZxqJP.mjs +44 -0
- package/dist/locale-url-nZrZxqJP.mjs.map +1 -0
- package/dist/locale-url.service-C2EWmGdq.mjs +41 -0
- package/dist/locale-url.service-C2EWmGdq.mjs.map +1 -0
- package/dist/logger/index.d.mts +2 -2
- package/dist/logger/index.mjs +170 -2
- package/dist/logger/index.mjs.map +1 -0
- package/dist/macroable/index.d.mts +2 -2
- package/dist/macroable/index.mjs +1 -1
- package/dist/{macroable-BmufBshB.mjs → macroable-cvDTFZ_A.mjs} +1 -1
- package/dist/{macroable-BmufBshB.mjs.map → macroable-cvDTFZ_A.mjs.map} +1 -1
- package/dist/metadata-DzzprcID.mjs +39 -0
- package/dist/metadata-DzzprcID.mjs.map +1 -0
- package/dist/module/index.d.mts +7 -24
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +10 -2
- package/dist/module/index.mjs.map +1 -0
- package/dist/module-registry-Dm-pqHd3.mjs +554 -0
- package/dist/module-registry-Dm-pqHd3.mjs.map +1 -0
- package/dist/module.decorator-CYHY6pG5.mjs +19 -0
- package/dist/module.decorator-CYHY6pG5.mjs.map +1 -0
- package/dist/openapi/index.d.mts +44 -8
- package/dist/openapi/index.d.mts.map +1 -1
- package/dist/openapi/index.mjs +3 -3
- package/dist/openapi-CstuTM8S.mjs +309 -0
- package/dist/openapi-CstuTM8S.mjs.map +1 -0
- package/dist/{openapi-tools.service-Zs-Ewv7F.mjs → openapi-tools.service-BC5EC3R3.mjs} +8 -2
- package/dist/openapi-tools.service-BC5EC3R3.mjs.map +1 -0
- package/dist/{openapi.service-Bt9bCIrd.d.mts → openapi.service-YhTiJ1bO.d.mts} +3 -3
- package/dist/openapi.service-YhTiJ1bO.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +14 -163
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +6 -5
- package/dist/quarry/runner.d.mts +184 -0
- package/dist/quarry/runner.d.mts.map +1 -0
- package/dist/quarry/runner.mjs +945 -0
- package/dist/quarry/runner.mjs.map +1 -0
- package/dist/quarry-registry-CXg0RFXq.d.mts +69 -0
- package/dist/quarry-registry-CXg0RFXq.d.mts.map +1 -0
- package/dist/quarry.module-BuRPGMDm.mjs +312 -0
- package/dist/quarry.module-BuRPGMDm.mjs.map +1 -0
- package/dist/queue/index.d.mts +3 -3
- package/dist/queue/index.mjs +57 -48
- package/dist/queue/index.mjs.map +1 -1
- package/dist/queue.module-nddvxzCB.mjs +613 -0
- package/dist/queue.module-nddvxzCB.mjs.map +1 -0
- package/dist/queue.tokens-DjHnFmre.mjs +11 -0
- package/dist/queue.tokens-DjHnFmre.mjs.map +1 -0
- package/dist/{r2-storage.provider-DuonKeYm.mjs → r2-storage.provider-DCxQt9dD.mjs} +6 -6
- package/dist/r2-storage.provider-DCxQt9dD.mjs.map +1 -0
- package/dist/{rate-limit.decorator-6qzNcSOt.mjs → rate-limit.decorator-BPAie_p3.mjs} +6 -11
- package/dist/rate-limit.decorator-BPAie_p3.mjs.map +1 -0
- package/dist/rate-limiter/index.d.mts +11 -50
- package/dist/rate-limiter/index.d.mts.map +1 -1
- package/dist/rate-limiter/index.mjs +33 -42
- package/dist/rate-limiter/index.mjs.map +1 -1
- package/dist/route-name-DGoBOfPg.mjs +171 -0
- package/dist/route-name-DGoBOfPg.mjs.map +1 -0
- package/dist/route-registration.service-D6vSwiKP.mjs +918 -0
- package/dist/route-registration.service-D6vSwiKP.mjs.map +1 -0
- package/dist/route-registry-CYqLp2Nj.mjs +123 -0
- package/dist/route-registry-CYqLp2Nj.mjs.map +1 -0
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +18 -7
- package/dist/router-CWGBD-Bg.mjs +78 -0
- package/dist/router-CWGBD-Bg.mjs.map +1 -0
- package/dist/router-resolver-D4YlPNlm.mjs +88 -0
- package/dist/router-resolver-D4YlPNlm.mjs.map +1 -0
- package/dist/seeder/index.d.mts +16 -11
- package/dist/seeder/index.d.mts.map +1 -1
- package/dist/seeder/index.mjs +5 -3
- package/dist/seeder-7ubkms-Y.mjs +81 -0
- package/dist/seeder-7ubkms-Y.mjs.map +1 -0
- package/dist/seeder-registry-CyUmKsJq.mjs +57 -0
- package/dist/seeder-registry-CyUmKsJq.mjs.map +1 -0
- package/dist/seeder.module-CYYwk3Qk.mjs +15 -0
- package/dist/seeder.module-CYYwk3Qk.mjs.map +1 -0
- package/dist/{signed-url-BQPbv2In.mjs → signed-url-DIU0sK_6.mjs} +1 -1
- package/dist/{signed-url-BQPbv2In.mjs.map → signed-url-DIU0sK_6.mjs.map} +1 -1
- package/dist/storage/index.d.mts +15 -39
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +3 -3
- package/dist/storage/providers/index.d.mts +2 -2
- package/dist/storage/providers/index.d.mts.map +1 -1
- package/dist/storage/providers/index.mjs +1 -1
- package/dist/{storage-D8CBP72Z.mjs → storage-MDZypIE9.mjs} +66 -59
- package/dist/storage-MDZypIE9.mjs.map +1 -0
- package/dist/{storage-provider.interface-Bd6vA4ak.d.mts → storage-provider.interface-ClUwxz4S.d.mts} +2 -3
- package/dist/storage-provider.interface-ClUwxz4S.d.mts.map +1 -0
- package/dist/storage.error-Dnib4VHc.mjs +8 -0
- package/dist/storage.error-Dnib4VHc.mjs.map +1 -0
- package/dist/stratal-DL9M38_s.mjs +383 -0
- package/dist/stratal-DL9M38_s.mjs.map +1 -0
- package/dist/stratal-DwDJPY9N.d.mts +43 -0
- package/dist/stratal-DwDJPY9N.d.mts.map +1 -0
- package/dist/tiered-cache.service-Dv3BhxxE.d.mts +79 -0
- package/dist/tiered-cache.service-Dv3BhxxE.d.mts.map +1 -0
- package/dist/trailing-slash-CFyw8nYu.mjs +34 -0
- package/dist/trailing-slash-CFyw8nYu.mjs.map +1 -0
- package/dist/{types-cySNS_lp.d.mts → types-CmV_9xBD.d.mts} +1 -1
- package/dist/types-CmV_9xBD.d.mts.map +1 -0
- package/dist/uri-h7Q8Jug9.mjs +251 -0
- package/dist/uri-h7Q8Jug9.mjs.map +1 -0
- package/dist/{usage-generator-BUdlhnCK.mjs → usage-generator-DAWYasuP.mjs} +7 -4
- package/dist/usage-generator-DAWYasuP.mjs.map +1 -0
- package/dist/validation-CpOjviyT.mjs +49 -0
- package/dist/validation-CpOjviyT.mjs.map +1 -0
- package/dist/validation.context-CRvmrhq7.mjs +117 -0
- package/dist/validation.context-CRvmrhq7.mjs.map +1 -0
- package/dist/versioning.service-C6aHky8-.mjs +36 -0
- package/dist/versioning.service-C6aHky8-.mjs.map +1 -0
- package/dist/websocket/index.d.mts +16 -14
- package/dist/websocket/index.d.mts.map +1 -1
- package/dist/websocket/index.mjs +2 -2
- package/dist/workers/index.d.mts +2 -2
- package/dist/workers/index.d.mts.map +1 -1
- package/dist/workers/index.mjs +3 -2
- package/dist/workers/index.mjs.map +1 -1
- package/dist/zod-eKqqhZ5_.mjs +72 -0
- package/dist/zod-eKqqhZ5_.mjs.map +1 -0
- package/dist/{index-Bnpfq6uk.d.mts → zod-wecrEVAs.d.mts} +63 -133
- package/dist/zod-wecrEVAs.d.mts.map +1 -0
- package/package.json +28 -39
- package/dist/base-email.provider-CfQCA08m.mjs +0 -42
- package/dist/base-email.provider-CfQCA08m.mjs.map +0 -1
- package/dist/cache.service-DsnKuNyO.d.mts.map +0 -1
- package/dist/cache.tokens-B7Rw1C9Q.mjs +0 -6
- package/dist/cache.tokens-B7Rw1C9Q.mjs.map +0 -1
- package/dist/colors-DJaRDXoS.mjs +0 -16
- package/dist/colors-DJaRDXoS.mjs.map +0 -1
- package/dist/command-BgSlsS4M.mjs.map +0 -1
- package/dist/command-Cmmf0oHX.d.mts.map +0 -1
- package/dist/consumer-registry-B7yUNh0q.d.mts.map +0 -1
- package/dist/controller.decorator-B9vwn0zK.mjs.map +0 -1
- package/dist/cron-manager-CmTimEjf.d.mts +0 -131
- package/dist/cron-manager-CmTimEjf.d.mts.map +0 -1
- package/dist/cron-manager-DQSK8uoV.mjs.map +0 -1
- package/dist/en-DSH_bhh6.mjs +0 -308
- package/dist/en-DSH_bhh6.mjs.map +0 -1
- package/dist/env-D1rcZ8_r.d.mts.map +0 -1
- package/dist/errors-COW9-Mar.mjs +0 -1739
- package/dist/errors-COW9-Mar.mjs.map +0 -1
- package/dist/errors-ORxu1-Bb.mjs +0 -74
- package/dist/errors-ORxu1-Bb.mjs.map +0 -1
- package/dist/events-CzCV8jI8.mjs.map +0 -1
- package/dist/gateway-context-CXmXtaUP.mjs.map +0 -1
- package/dist/guards-DU1_J9YA.mjs.map +0 -1
- package/dist/http-method.decorator-BrgHMdLQ.mjs.map +0 -1
- package/dist/i18n.module-CzXLW9Hy.mjs +0 -2532
- package/dist/i18n.module-CzXLW9Hy.mjs.map +0 -1
- package/dist/index-7-hU3GTV.d.mts.map +0 -1
- package/dist/index-Bnpfq6uk.d.mts.map +0 -1
- package/dist/index-ByOyTmqf.d.mts.map +0 -1
- package/dist/index-C1KvMncZ.d.mts.map +0 -1
- package/dist/index-DBd_2wv8.d.mts +0 -263
- package/dist/index-DBd_2wv8.d.mts.map +0 -1
- package/dist/index-DUzWs0z7.d.mts +0 -494
- package/dist/index-DUzWs0z7.d.mts.map +0 -1
- package/dist/index.d.mts.map +0 -1
- package/dist/logger-DlV7NtvD.mjs +0 -440
- package/dist/logger-DlV7NtvD.mjs.map +0 -1
- package/dist/module-BzLg57FK.mjs +0 -866
- package/dist/module-BzLg57FK.mjs.map +0 -1
- package/dist/openapi-tools.service-Zs-Ewv7F.mjs.map +0 -1
- package/dist/openapi.service-Bt9bCIrd.d.mts.map +0 -1
- package/dist/quarry-registry-BwY2hOxm.mjs +0 -699
- package/dist/quarry-registry-BwY2hOxm.mjs.map +0 -1
- package/dist/queue.module-BhCjZp6H.mjs +0 -409
- package/dist/queue.module-BhCjZp6H.mjs.map +0 -1
- package/dist/r2-storage.provider-DuonKeYm.mjs.map +0 -1
- package/dist/rate-limit.decorator-6qzNcSOt.mjs.map +0 -1
- package/dist/resend.provider-DB4IlFjG.mjs +0 -68
- package/dist/resend.provider-DB4IlFjG.mjs.map +0 -1
- package/dist/seeder-zoEfEw9i.mjs +0 -138
- package/dist/seeder-zoEfEw9i.mjs.map +0 -1
- package/dist/setup-CefZKV_e.mjs +0 -37
- package/dist/setup-CefZKV_e.mjs.map +0 -1
- package/dist/smtp.provider-B6D7zuWX.mjs +0 -76
- package/dist/smtp.provider-B6D7zuWX.mjs.map +0 -1
- package/dist/storage-D8CBP72Z.mjs.map +0 -1
- package/dist/storage-provider.interface-Bd6vA4ak.d.mts.map +0 -1
- package/dist/stratal-CNwpbSZl.mjs +0 -535
- package/dist/stratal-CNwpbSZl.mjs.map +0 -1
- package/dist/types-cySNS_lp.d.mts.map +0 -1
- package/dist/usage-generator-BUdlhnCK.mjs.map +0 -1
- package/dist/validation-DtJwAv7O.mjs +0 -248
- package/dist/validation-DtJwAv7O.mjs.map +0 -1
- /package/dist/{chunk-D1SwGrFN.mjs → chunk-BBjsoOtd.mjs} +0 -0
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
//#region src/router/locale-url.ts
|
|
2
|
+
/**
|
|
3
|
+
* Pure helpers for locale-aware URL path manipulation.
|
|
4
|
+
*
|
|
5
|
+
* Each function takes config explicitly so it can run anywhere (no DI, no request
|
|
6
|
+
* context). For ergonomic DI-driven access, see {@link LocaleUrlService} which
|
|
7
|
+
* binds these to the resolved {@link LocalePathService} config.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Whether a locale should be URL-prefixed under the given config.
|
|
11
|
+
*
|
|
12
|
+
* - No config → always prefix (caller didn't opt into locale-aware URLs).
|
|
13
|
+
* - `prefixDefaultLocale: true` → every locale, including the default, is prefixed.
|
|
14
|
+
* - Otherwise → only non-default locales are prefixed.
|
|
15
|
+
*/
|
|
16
|
+
function shouldPrefixLocale(locale, config) {
|
|
17
|
+
if (!config) return true;
|
|
18
|
+
if (config.prefixDefaultLocale === true) return true;
|
|
19
|
+
return locale !== config.defaultLocale;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Prepend `/{locale}` to a pathname, respecting `prefixDefaultLocale`.
|
|
23
|
+
* Returns the pathname unchanged when the locale shouldn't be prefixed.
|
|
24
|
+
*/
|
|
25
|
+
function applyLocalePrefix(pathname, locale, config) {
|
|
26
|
+
if (!shouldPrefixLocale(locale, config)) return pathname;
|
|
27
|
+
return pathname === "/" ? `/${locale}` : `/${locale}${pathname}`;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Strip a known-locale prefix from the start of a pathname.
|
|
31
|
+
* Returns the pathname unchanged if the first segment isn't in `knownLocales`.
|
|
32
|
+
*/
|
|
33
|
+
function stripLocalePrefix(pathname, knownLocales) {
|
|
34
|
+
const segments = pathname.split("/").filter(Boolean);
|
|
35
|
+
if (segments.length > 0 && knownLocales.includes(segments[0])) {
|
|
36
|
+
const rest = segments.slice(1).join("/");
|
|
37
|
+
return rest ? `/${rest}` : "/";
|
|
38
|
+
}
|
|
39
|
+
return pathname;
|
|
40
|
+
}
|
|
41
|
+
//#endregion
|
|
42
|
+
export { shouldPrefixLocale as n, stripLocalePrefix as r, applyLocalePrefix as t };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=locale-url-nZrZxqJP.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-url-nZrZxqJP.mjs","names":[],"sources":["../src/router/locale-url.ts"],"sourcesContent":["import type { LocaleUrlConfig } from './types'\n\n/**\n * Pure helpers for locale-aware URL path manipulation.\n *\n * Each function takes config explicitly so it can run anywhere (no DI, no request\n * context). For ergonomic DI-driven access, see {@link LocaleUrlService} which\n * binds these to the resolved {@link LocalePathService} config.\n */\n\n/**\n * Whether a locale should be URL-prefixed under the given config.\n *\n * - No config → always prefix (caller didn't opt into locale-aware URLs).\n * - `prefixDefaultLocale: true` → every locale, including the default, is prefixed.\n * - Otherwise → only non-default locales are prefixed.\n */\nexport function shouldPrefixLocale(locale: string, config: LocaleUrlConfig | undefined): boolean {\n if (!config) return true\n if (config.prefixDefaultLocale === true) return true\n return locale !== config.defaultLocale\n}\n\n/**\n * Prepend `/{locale}` to a pathname, respecting `prefixDefaultLocale`.\n * Returns the pathname unchanged when the locale shouldn't be prefixed.\n */\nexport function applyLocalePrefix(pathname: string, locale: string, config: LocaleUrlConfig | undefined): string {\n if (!shouldPrefixLocale(locale, config)) return pathname\n return pathname === '/' ? `/${locale}` : `/${locale}${pathname}`\n}\n\n/**\n * Strip a known-locale prefix from the start of a pathname.\n * Returns the pathname unchanged if the first segment isn't in `knownLocales`.\n */\nexport function stripLocalePrefix(pathname: string, knownLocales: readonly string[]): string {\n const segments = pathname.split('/').filter(Boolean)\n if (segments.length > 0 && knownLocales.includes(segments[0])) {\n const rest = segments.slice(1).join('/')\n return rest ? `/${rest}` : '/'\n }\n return pathname\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,SAAgB,mBAAmB,QAAgB,QAA8C;CAC/F,IAAI,CAAC,QAAQ,OAAO;CACpB,IAAI,OAAO,wBAAwB,MAAM,OAAO;CAChD,OAAO,WAAW,OAAO;AAC3B;;;;;AAMA,SAAgB,kBAAkB,UAAkB,QAAgB,QAA6C;CAC/G,IAAI,CAAC,mBAAmB,QAAQ,MAAM,GAAG,OAAO;CAChD,OAAO,aAAa,MAAM,IAAI,WAAW,IAAI,SAAS;AACxD;;;;;AAMA,SAAgB,kBAAkB,UAAkB,cAAyC;CAC3F,MAAM,WAAW,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO;CACnD,IAAI,SAAS,SAAS,KAAK,aAAa,SAAS,SAAS,EAAE,GAAG;EAC7D,MAAM,OAAO,SAAS,MAAM,CAAC,EAAE,KAAK,GAAG;EACvC,OAAO,OAAO,IAAI,SAAS;CAC7B;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-BBjsoOtd.mjs";
|
|
2
|
+
import { d as inject, s as Singleton, v as ROUTER_TOKENS } from "./di-DseMn-z9.mjs";
|
|
3
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-CuAoSZvs.mjs";
|
|
4
|
+
import { n as shouldPrefixLocale, r as stripLocalePrefix, t as applyLocalePrefix } from "./locale-url-nZrZxqJP.mjs";
|
|
5
|
+
//#region src/router/services/locale-url.service.ts
|
|
6
|
+
var locale_url_service_exports = /* @__PURE__ */ __exportAll({ LocaleUrlService: () => LocaleUrlService });
|
|
7
|
+
let LocaleUrlService = class LocaleUrlService {
|
|
8
|
+
localePath;
|
|
9
|
+
constructor(localePath) {
|
|
10
|
+
this.localePath = localePath;
|
|
11
|
+
}
|
|
12
|
+
/** Whether path-based locale detection is enabled — i.e., locales have URL-distinct path variants. */
|
|
13
|
+
get pathEnabled() {
|
|
14
|
+
return this.localePath.enabled;
|
|
15
|
+
}
|
|
16
|
+
/** Whether the given locale should get a URL prefix under the current config. */
|
|
17
|
+
shouldPrefix(locale) {
|
|
18
|
+
return shouldPrefixLocale(locale, this.toUrlConfig());
|
|
19
|
+
}
|
|
20
|
+
/** Prepend `/{locale}` to a pathname, respecting `prefixDefaultLocale`. */
|
|
21
|
+
applyPrefix(pathname, locale) {
|
|
22
|
+
return applyLocalePrefix(pathname, locale, this.toUrlConfig());
|
|
23
|
+
}
|
|
24
|
+
/** Strip a known-locale prefix from the start of a pathname. */
|
|
25
|
+
stripPrefix(pathname) {
|
|
26
|
+
return stripLocalePrefix(pathname, this.localePath.localePathConfig?.allLocales ?? []);
|
|
27
|
+
}
|
|
28
|
+
toUrlConfig() {
|
|
29
|
+
const config = this.localePath.localePathConfig;
|
|
30
|
+
if (!config) return void 0;
|
|
31
|
+
return {
|
|
32
|
+
defaultLocale: config.defaultLocale,
|
|
33
|
+
prefixDefaultLocale: this.localePath.prefixDefaultLocale
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
LocaleUrlService = __decorate([Singleton(), __decorateParam(0, inject(ROUTER_TOKENS.LocalePathService))], LocaleUrlService);
|
|
38
|
+
//#endregion
|
|
39
|
+
export { locale_url_service_exports as n, LocaleUrlService as t };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=locale-url.service-C2EWmGdq.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locale-url.service-C2EWmGdq.mjs","names":[],"sources":["../src/router/services/locale-url.service.ts"],"sourcesContent":["import { inject } from '../../di'\nimport { Singleton } from '../../di/decorators'\nimport { applyLocalePrefix, shouldPrefixLocale, stripLocalePrefix } from '../locale-url'\nimport { ROUTER_TOKENS } from '../router.tokens'\nimport type { LocaleUrlConfig } from '../types'\nimport { type LocalePathService } from './locale-path.service'\n\n/**\n * DI-friendly wrapper around the pure locale-url helpers.\n *\n * Binds {@link LocalePathService} config so consumers can call `applyPrefix`,\n * `stripPrefix`, and `shouldPrefix` without passing config every time.\n *\n * Useful for canonical URL generation, sitemap builders, redirect middleware,\n * hreflang link emission, and anywhere else a request handler needs to compute\n * locale-aware path variants.\n */\n@Singleton()\nexport class LocaleUrlService {\n constructor(\n @inject(ROUTER_TOKENS.LocalePathService) private readonly localePath: LocalePathService,\n ) { }\n\n /** Whether path-based locale detection is enabled — i.e., locales have URL-distinct path variants. */\n get pathEnabled(): boolean {\n return this.localePath.enabled\n }\n\n /** Whether the given locale should get a URL prefix under the current config. */\n shouldPrefix(locale: string): boolean {\n return shouldPrefixLocale(locale, this.toUrlConfig())\n }\n\n /** Prepend `/{locale}` to a pathname, respecting `prefixDefaultLocale`. */\n applyPrefix(pathname: string, locale: string): string {\n return applyLocalePrefix(pathname, locale, this.toUrlConfig())\n }\n\n /** Strip a known-locale prefix from the start of a pathname. */\n stripPrefix(pathname: string): string {\n const known = this.localePath.localePathConfig?.allLocales ?? []\n return stripLocalePrefix(pathname, known)\n }\n\n private toUrlConfig(): LocaleUrlConfig | undefined {\n const config = this.localePath.localePathConfig\n if (!config) return undefined\n return { defaultLocale: config.defaultLocale, prefixDefaultLocale: this.localePath.prefixDefaultLocale }\n }\n}\n"],"mappings":";;;;;;AAkBO,IAAA,mBAAA,MAAM,iBAAiB;CAEgC;CAD5D,YACE,YACA;EAD0D,KAAA,aAAA;CACxD;;CAGJ,IAAI,cAAuB;EACzB,OAAO,KAAK,WAAW;CACzB;;CAGA,aAAa,QAAyB;EACpC,OAAO,mBAAmB,QAAQ,KAAK,YAAY,CAAC;CACtD;;CAGA,YAAY,UAAkB,QAAwB;EACpD,OAAO,kBAAkB,UAAU,QAAQ,KAAK,YAAY,CAAC;CAC/D;;CAGA,YAAY,UAA0B;EAEpC,OAAO,kBAAkB,UADX,KAAK,WAAW,kBAAkB,cAAc,CAAC,CACvB;CAC1C;CAEA,cAAmD;EACjD,MAAM,SAAS,KAAK,WAAW;EAC/B,IAAI,CAAC,QAAQ,OAAO,KAAA;EACpB,OAAO;GAAE,eAAe,OAAO;GAAe,qBAAqB,KAAK,WAAW;EAAoB;CACzG;AACF;+BAhCC,UAAU,GAAA,gBAAA,GAGN,OAAO,cAAc,iBAAiB,CAAA,CAAA,GAAA,gBAAA"}
|
package/dist/logger/index.d.mts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { a as
|
|
2
|
-
export {
|
|
1
|
+
import { a as InternalLogContext, c as LogLevel, i as LogEntry, l as LOGGER_TOKENS, n as JsonFormatter, o as LogContext, r as LoggerService, s as LOG_LEVEL_PRIORITY, t as PrettyFormatter } from "../index-BUt92sAE.mjs";
|
|
2
|
+
export { InternalLogContext, JsonFormatter, LOGGER_TOKENS, LOG_LEVEL_PRIORITY, LogContext, LogEntry, LogLevel, LoggerService, PrettyFormatter };
|
package/dist/logger/index.mjs
CHANGED
|
@@ -1,2 +1,170 @@
|
|
|
1
|
-
import { c as
|
|
2
|
-
|
|
1
|
+
import { c as Transient, d as inject } from "../di-DseMn-z9.mjs";
|
|
2
|
+
import { n as __decorateParam, t as __decorate } from "../decorate-CuAoSZvs.mjs";
|
|
3
|
+
//#region src/logger/logger.tokens.ts
|
|
4
|
+
const LOGGER_TOKENS = {
|
|
5
|
+
LoggerService: Symbol.for("stratal:logger:service"),
|
|
6
|
+
Formatter: Symbol.for("stratal:logger:formatter"),
|
|
7
|
+
LogLevelOptions: Symbol.for("stratal:logger:log:level:options")
|
|
8
|
+
};
|
|
9
|
+
//#endregion
|
|
10
|
+
//#region src/logger/contracts/log-level.ts
|
|
11
|
+
/**
|
|
12
|
+
* Log severity levels
|
|
13
|
+
* Ordered from least to most severe
|
|
14
|
+
*/
|
|
15
|
+
let LogLevel = /* @__PURE__ */ function(LogLevel) {
|
|
16
|
+
LogLevel["DEBUG"] = "debug";
|
|
17
|
+
LogLevel["INFO"] = "info";
|
|
18
|
+
LogLevel["WARN"] = "warn";
|
|
19
|
+
LogLevel["ERROR"] = "error";
|
|
20
|
+
return LogLevel;
|
|
21
|
+
}({});
|
|
22
|
+
/**
|
|
23
|
+
* Map log levels to numeric priorities (for filtering)
|
|
24
|
+
* Higher numbers = more severe = higher priority
|
|
25
|
+
*/
|
|
26
|
+
const LOG_LEVEL_PRIORITY = {
|
|
27
|
+
["debug"]: 0,
|
|
28
|
+
["info"]: 1,
|
|
29
|
+
["warn"]: 2,
|
|
30
|
+
["error"]: 3
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
//#region src/logger/services/logger.service.ts
|
|
34
|
+
let LoggerService = class LoggerService {
|
|
35
|
+
logLevel;
|
|
36
|
+
formatter;
|
|
37
|
+
constructor(logLevel, formatter) {
|
|
38
|
+
this.logLevel = logLevel;
|
|
39
|
+
this.formatter = formatter;
|
|
40
|
+
}
|
|
41
|
+
debug(message, context) {
|
|
42
|
+
this.log("debug", message, context);
|
|
43
|
+
}
|
|
44
|
+
info(message, context) {
|
|
45
|
+
this.log("info", message, context);
|
|
46
|
+
}
|
|
47
|
+
warn(message, context) {
|
|
48
|
+
this.log("warn", message, context);
|
|
49
|
+
}
|
|
50
|
+
error(message, errorOrContext, maybeContext) {
|
|
51
|
+
let context;
|
|
52
|
+
let error;
|
|
53
|
+
if (errorOrContext instanceof Error) {
|
|
54
|
+
error = errorOrContext;
|
|
55
|
+
context = maybeContext;
|
|
56
|
+
} else context = errorOrContext;
|
|
57
|
+
this.log("error", message, context, error);
|
|
58
|
+
}
|
|
59
|
+
log(level, message, userContext, error) {
|
|
60
|
+
if (LOG_LEVEL_PRIORITY[level] < LOG_LEVEL_PRIORITY[this.logLevel]) return;
|
|
61
|
+
const entry = {
|
|
62
|
+
level,
|
|
63
|
+
message,
|
|
64
|
+
context: this.enrichContext(userContext ?? {}),
|
|
65
|
+
error: error ? this.serializeError(error) : void 0
|
|
66
|
+
};
|
|
67
|
+
const formatted = this.formatter.format(entry);
|
|
68
|
+
this.writeToConsole(level, formatted);
|
|
69
|
+
}
|
|
70
|
+
writeToConsole(level, formatted) {
|
|
71
|
+
switch (level) {
|
|
72
|
+
case "debug":
|
|
73
|
+
console.debug(formatted);
|
|
74
|
+
break;
|
|
75
|
+
case "info":
|
|
76
|
+
console.info(formatted);
|
|
77
|
+
break;
|
|
78
|
+
case "warn":
|
|
79
|
+
console.warn(formatted);
|
|
80
|
+
break;
|
|
81
|
+
case "error":
|
|
82
|
+
console.error(formatted);
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
enrichContext(userContext) {
|
|
87
|
+
return {
|
|
88
|
+
...userContext,
|
|
89
|
+
timestamp: Date.now()
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
serializeError(error) {
|
|
93
|
+
return {
|
|
94
|
+
message: error.message,
|
|
95
|
+
stack: error.stack,
|
|
96
|
+
name: error.name
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
LoggerService = __decorate([
|
|
101
|
+
Transient(),
|
|
102
|
+
__decorateParam(0, inject(LOGGER_TOKENS.LogLevelOptions)),
|
|
103
|
+
__decorateParam(1, inject(LOGGER_TOKENS.Formatter))
|
|
104
|
+
], LoggerService);
|
|
105
|
+
//#endregion
|
|
106
|
+
//#region src/logger/formatters/json-formatter.ts
|
|
107
|
+
/**
|
|
108
|
+
* JSON Formatter
|
|
109
|
+
*
|
|
110
|
+
* Produces structured JSON logs for production environments.
|
|
111
|
+
* Optimized for log aggregation systems (Cloudflare Analytics, Datadog, etc.)
|
|
112
|
+
*
|
|
113
|
+
* Output format:
|
|
114
|
+
* {
|
|
115
|
+
* "level": "info",
|
|
116
|
+
* "message": "User logged in",
|
|
117
|
+
* "timestamp": 1234567890,
|
|
118
|
+
* "userId": "user_456",
|
|
119
|
+
* "error": { "message": "...", "stack": "..." }
|
|
120
|
+
* }
|
|
121
|
+
*/
|
|
122
|
+
var JsonFormatter = class {
|
|
123
|
+
format(entry) {
|
|
124
|
+
const output = {
|
|
125
|
+
level: entry.level,
|
|
126
|
+
message: entry.message,
|
|
127
|
+
...entry.context,
|
|
128
|
+
...entry.error && { error: entry.error }
|
|
129
|
+
};
|
|
130
|
+
return JSON.stringify(output);
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
//#endregion
|
|
134
|
+
//#region src/logger/formatters/pretty-formatter.ts
|
|
135
|
+
/**
|
|
136
|
+
* Pretty Formatter
|
|
137
|
+
*
|
|
138
|
+
* Human-readable colored output for development environments.
|
|
139
|
+
* Uses ANSI color codes for terminal output.
|
|
140
|
+
*
|
|
141
|
+
* Output format:
|
|
142
|
+
* [2024-01-15 10:30:45] INFO: User logged in
|
|
143
|
+
* userId: user_456
|
|
144
|
+
*/
|
|
145
|
+
var PrettyFormatter = class {
|
|
146
|
+
colors = {
|
|
147
|
+
["debug"]: "\x1B[36m",
|
|
148
|
+
["info"]: "\x1B[32m",
|
|
149
|
+
["warn"]: "\x1B[33m",
|
|
150
|
+
["error"]: "\x1B[31m"
|
|
151
|
+
};
|
|
152
|
+
reset = "\x1B[0m";
|
|
153
|
+
format(entry) {
|
|
154
|
+
let output = `${this.colors[entry.level]}[${new Date(entry.context.timestamp).toISOString()}] ${entry.level.toUpperCase().padEnd(5)}${this.reset}: ${entry.message}`;
|
|
155
|
+
const { timestamp: _, ...contextWithoutTimestamp } = entry.context;
|
|
156
|
+
const contextEntries = Object.entries(contextWithoutTimestamp);
|
|
157
|
+
if (contextEntries.length > 0) {
|
|
158
|
+
output += "\n";
|
|
159
|
+
contextEntries.forEach(([key, value]) => {
|
|
160
|
+
output += ` ${key}: ${JSON.stringify(value)}\n`;
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
if (entry.error?.stack) output += `\n${entry.error.stack}\n`;
|
|
164
|
+
return output.trimEnd();
|
|
165
|
+
}
|
|
166
|
+
};
|
|
167
|
+
//#endregion
|
|
168
|
+
export { JsonFormatter, LOGGER_TOKENS, LOG_LEVEL_PRIORITY, LogLevel, LoggerService, PrettyFormatter };
|
|
169
|
+
|
|
170
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../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"],"sourcesContent":["export const LOGGER_TOKENS = {\n LoggerService: Symbol.for('stratal:logger:service'),\n Formatter: Symbol.for('stratal:logger:formatter'),\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 '../../di'\nimport { Transient } from '../../di/decorators'\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'\n\n@Transient()\nexport class LoggerService {\n constructor(\n @inject(LOGGER_TOKENS.LogLevelOptions)\n private readonly logLevel: LogLevel,\n\n @inject(LOGGER_TOKENS.Formatter)\n private readonly formatter: ILogFormatter,\n ) { }\n\n debug(message: string, context?: LogContext): void {\n this.log(LogLevel.DEBUG, message, context)\n }\n\n info(message: string, context?: LogContext): void {\n this.log(LogLevel.INFO, message, context)\n }\n\n warn(message: string, context?: LogContext): void {\n this.log(LogLevel.WARN, message, context)\n }\n\n error(message: string, error: Error, context?: LogContext): void\n error(message: string, context?: LogContext): void\n error(message: string, errorOrContext?: Error | LogContext, maybeContext?: LogContext): void {\n let context: LogContext | undefined\n let error: Error | undefined\n\n if (errorOrContext instanceof Error) {\n error = errorOrContext\n context = maybeContext\n } else {\n context = errorOrContext\n }\n\n this.log(LogLevel.ERROR, message, context, error)\n }\n\n private log(\n level: LogLevel,\n message: string,\n userContext?: LogContext,\n error?: Error\n ): void {\n if (LOG_LEVEL_PRIORITY[level] < LOG_LEVEL_PRIORITY[this.logLevel]) {\n return\n }\n\n const entry: LogEntry = {\n level,\n message,\n context: this.enrichContext(userContext ?? {}),\n error: error ? this.serializeError(error) : undefined,\n }\n\n const formatted = this.formatter.format(entry)\n this.writeToConsole(level, formatted)\n }\n\n private writeToConsole(level: LogLevel, formatted: string): void {\n switch (level) {\n case LogLevel.DEBUG:\n console.debug(formatted)\n break\n case LogLevel.INFO:\n console.info(formatted)\n break\n case LogLevel.WARN:\n console.warn(formatted)\n break\n case LogLevel.ERROR:\n console.error(formatted)\n break\n }\n }\n\n private enrichContext(userContext: LogContext): InternalLogContext {\n return {\n ...userContext,\n timestamp: Date.now(),\n }\n }\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"],"mappings":";;;AAAA,MAAa,gBAAgB;CAC3B,eAAe,OAAO,IAAI,wBAAwB;CAClD,WAAW,OAAO,IAAI,0BAA0B;CAChD,iBAAiB,OAAO,IAAI,kCAAkC;AAChE;;;;;;;ACAA,IAAY,WAAL,yBAAA,UAAA;CACL,SAAA,WAAA;CACA,SAAA,UAAA;CACA,SAAA,UAAA;CACA,SAAA,WAAA;;AACF,EAAA,CAAA,CAAA;;;;;AAMA,MAAa,qBAA+C;YACxC;WACD;WACA;YACC;AACpB;;;ACZO,IAAA,gBAAA,MAAM,cAAc;CAGN;CAGA;CALnB,YACE,UAGA,WAEA;EAJiB,KAAA,WAAA;EAGA,KAAA,YAAA;CACf;CAEJ,MAAM,SAAiB,SAA4B;EACjD,KAAK,IAAA,SAAoB,SAAS,OAAO;CAC3C;CAEA,KAAK,SAAiB,SAA4B;EAChD,KAAK,IAAA,QAAmB,SAAS,OAAO;CAC1C;CAEA,KAAK,SAAiB,SAA4B;EAChD,KAAK,IAAA,QAAmB,SAAS,OAAO;CAC1C;CAIA,MAAM,SAAiB,gBAAqC,cAAiC;EAC3F,IAAI;EACJ,IAAI;EAEJ,IAAI,0BAA0B,OAAO;GACnC,QAAQ;GACR,UAAU;EACZ,OACE,UAAU;EAGZ,KAAK,IAAA,SAAoB,SAAS,SAAS,KAAK;CAClD;CAEA,IACE,OACA,SACA,aACA,OACM;EACN,IAAI,mBAAmB,SAAS,mBAAmB,KAAK,WACtD;EAGF,MAAM,QAAkB;GACtB;GACA;GACA,SAAS,KAAK,cAAc,eAAe,CAAC,CAAC;GAC7C,OAAO,QAAQ,KAAK,eAAe,KAAK,IAAI,KAAA;EAC9C;EAEA,MAAM,YAAY,KAAK,UAAU,OAAO,KAAK;EAC7C,KAAK,eAAe,OAAO,SAAS;CACtC;CAEA,eAAuB,OAAiB,WAAyB;EAC/D,QAAQ,OAAR;GACE,KAAA;IACE,QAAQ,MAAM,SAAS;IACvB;GACF,KAAA;IACE,QAAQ,KAAK,SAAS;IACtB;GACF,KAAA;IACE,QAAQ,KAAK,SAAS;IACtB;GACF,KAAA;IACE,QAAQ,MAAM,SAAS;IACvB;EACJ;CACF;CAEA,cAAsB,aAA6C;EACjE,OAAO;GACL,GAAG;GACH,WAAW,KAAK,IAAI;EACtB;CACF;CAEA,eAAuB,OAAkE;EACvF,OAAO;GACL,SAAS,MAAM;GACf,OAAO,MAAM;GACb,MAAM,MAAM;EACd;CACF;AACF;;CA1FC,UAAU;oBAGN,OAAO,cAAc,eAAe,CAAA;oBAGpC,OAAO,cAAc,SAAS,CAAA;;;;;;;;;;;;;;;;;;;ACKnC,IAAa,gBAAb,MAAoD;CAClD,OAAO,OAAyB;EAC9B,MAAM,SAAS;GACb,OAAO,MAAM;GACb,SAAS,MAAM;GACf,GAAG,MAAM;GACT,GAAI,MAAM,SAAS,EAAE,OAAO,MAAM,MAAM;EAC1C;EAEA,OAAO,KAAK,UAAU,MAAM;CAC9B;AACF;;;;;;;;;;;;;ACfA,IAAa,kBAAb,MAAsD;CACpD,SAAoD;aAChC;YACD;YACA;aACC;CACpB;CAEA,QAAyB;CAEzB,OAAO,OAAyB;EAK9B,IAAI,SAAS,GAJC,KAAK,OAAO,MAAM,OAIV,GAHJ,IAAI,KAAK,MAAM,QAAQ,SAAS,EAAE,YAGnB,EAAE,IAFlB,MAAM,MAAM,YAAY,EAAE,OAAO,CAEJ,IAAI,KAAK,MAAM,IAAI,MAAM;EAGvE,MAAM,EAAE,WAAW,GAAG,GAAG,4BAA4B,MAAM;EAC3D,MAAM,iBAAiB,OAAO,QAAQ,uBAAuB;EAE7D,IAAI,eAAe,SAAS,GAAG;GAC7B,UAAU;GACV,eAAe,SAAS,CAAC,KAAK,WAAW;IACvC,UAAU,KAAK,IAAI,IAAI,KAAK,UAAU,KAAK,EAAE;GAC/C,CAAC;EACH;EAGA,IAAI,MAAM,OAAO,OACf,UAAU,KAAK,MAAM,MAAM,MAAM;EAGnC,OAAO,OAAO,QAAQ;CACxB;AACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { n as MacroFunction, t as Macroable } from "../index-
|
|
2
|
-
export { MacroFunction, Macroable };
|
|
1
|
+
import { n as MacroFunction, t as Macroable } from "../index-0ItCjaqw.mjs";
|
|
2
|
+
export { type MacroFunction, Macroable };
|
package/dist/macroable/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as Macroable } from "../macroable-
|
|
1
|
+
import { t as Macroable } from "../macroable-cvDTFZ_A.mjs";
|
|
2
2
|
export { Macroable };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"macroable-
|
|
1
|
+
{"version":3,"file":"macroable-cvDTFZ_A.mjs","names":[],"sources":["../src/macroable/macroable.ts"],"sourcesContent":["import type { MacroFunction } from './types'\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Constructor = abstract new (...args: any[]) => any\n\n/**\n * Abstract base class for adding macros, instance properties, and getters\n * to classes at runtime.\n *\n * Inspired by [@poppinss/macroable](https://github.com/poppinss/macroable)\n * and Laravel's Macroable trait.\n *\n * @example\n * ```typescript\n * // Register a macro\n * RouterContext.macro('flash', function (this: RouterContext, key: string, value: unknown) {\n * const session = this.getContainer().resolve(SessionService)\n * session.flash(key, value)\n * })\n *\n * // Register a getter\n * RouterContext.getter('requestId', function (this: RouterContext) {\n * return this.header('x-request-id') ?? crypto.randomUUID()\n * }, true)\n *\n * // Register a per-instance property (safe for destructuring)\n * RouterContext.instanceProperty('getUser', function (this: RouterContext) {\n * return this.getContainer().resolve(AuthContext).user\n * })\n * ```\n */\nexport abstract class Macroable {\n [key: string | symbol]: unknown\n /**\n * Per-instance properties. Each entry is applied and bound\n * to `this` inside the constructor so destructuring stays safe.\n */\n protected static instanceMacros = new Set<{ key: string | symbol; value: unknown }>()\n\n /**\n * Names registered via macro() — used by hasMacro() and flushMacros().\n */\n protected static macroNames = new Set<string | symbol>()\n\n /**\n * Names registered via getter() — used by hasMacro() and flushMacros().\n */\n protected static getterNames = new Set<string | symbol>()\n\n /**\n * Original prototype values saved before macro() overrides them.\n * Used by flushMacros() to restore native methods.\n */\n private static _originals = new Map<string | symbol, { existed: boolean; value: unknown }>()\n\n // ── Macros (prototype-level) ──────────────────────────────\n\n /**\n * Register a macro on the class prototype.\n * Can override existing methods.\n *\n * When the name matches an existing property, the value type is auto-derived.\n *\n * @param name - Method or property name\n * @param value - Function or value to assign\n */\n static macro<T extends Constructor, K extends keyof InstanceType<T>>(\n this: T,\n name: K,\n value: InstanceType<T>[K],\n ): void\n static macro(name: string | symbol, value: unknown): void\n static macro(name: string | symbol, value: unknown): void {\n if (!Object.prototype.hasOwnProperty.call(this, 'macroNames')) {\n this.macroNames = new Set(this.macroNames)\n }\n if (!Object.prototype.hasOwnProperty.call(this, '_originals')) {\n this._originals = new Map(this._originals)\n }\n\n // Save the original value before first override so flushMacros() can restore it\n if (!this._originals.has(name)) {\n const existed = Object.prototype.hasOwnProperty.call(this.prototype, name)\n this._originals.set(name, {\n existed,\n value: existed ? (this.prototype as Record<string | symbol, unknown>)[name] : undefined,\n })\n }\n\n this.macroNames.add(name);\n (this.prototype as Record<string | symbol, unknown>)[name] = value\n }\n\n // ── Instance properties (bound per-instance) ─────────────\n\n /**\n * Register a per-instance property that is bound to `this`\n * in the constructor. Safe for destructuring.\n *\n * When the name matches an existing property, the value type is auto-derived.\n *\n * @param name - Property name\n * @param value - Function (will be bound) or value\n */\n static instanceProperty<T extends Constructor, K extends keyof InstanceType<T>>(\n this: T,\n name: K,\n value: InstanceType<T>[K],\n ): void\n static instanceProperty(name: string | symbol, value: unknown): void\n static instanceProperty(name: string | symbol, value: unknown): void {\n if (!Object.prototype.hasOwnProperty.call(this, 'instanceMacros')) {\n this.instanceMacros = new Set(this.instanceMacros)\n }\n this.instanceMacros.add({ key: name, value })\n }\n\n // ── Getters (Object.defineProperty on prototype) ──────────\n\n /**\n * Register a computed getter on the class prototype.\n *\n * @param name - Property name\n * @param accumulator - Function that computes the value (called with instance as `this`)\n * @param singleton - If true, cache the value after first access\n */\n static getter<T extends Constructor, K extends keyof InstanceType<T>>(\n this: T,\n name: K,\n accumulator: (this: InstanceType<T>) => InstanceType<T>[K],\n singleton?: boolean,\n ): void\n static getter(name: string | symbol, accumulator: MacroFunction, singleton?: boolean): void\n static getter(\n name: string | symbol,\n accumulator: MacroFunction,\n singleton = false,\n ): void {\n if (!Object.prototype.hasOwnProperty.call(this, 'getterNames')) {\n this.getterNames = new Set(this.getterNames)\n }\n this.getterNames.add(name)\n\n Object.defineProperty(this.prototype, name, {\n get(): unknown {\n const value: unknown = accumulator.call(this)\n if (singleton) {\n Object.defineProperty(this, name, {\n value,\n configurable: false,\n enumerable: false,\n writable: false,\n })\n }\n return value\n },\n configurable: true,\n enumerable: false,\n })\n }\n\n // ── Introspection ─────────────────────────────────────────\n\n /**\n * Check if a macro, instance property, or getter is registered.\n *\n * @param name - Name to check\n */\n static hasMacro(name: string | symbol): boolean {\n return (\n this.macroNames.has(name) ||\n [...this.instanceMacros].some((m) => m.key === name) ||\n this.getterNames.has(name)\n )\n }\n\n // ── Cleanup ───────────────────────────────────────────────\n\n /**\n * Remove all macros, instance properties, and getters\n * registered on this class. Does not affect parent classes.\n */\n static flushMacros(): void {\n const proto = this.prototype as Record<string | symbol, unknown>\n\n // Restore original prototype values or delete if they didn't exist before\n for (const name of this.macroNames) {\n const original = this._originals.get(name)\n if (original?.existed) {\n proto[name] = original.value\n } else {\n Reflect.deleteProperty(proto, name)\n }\n }\n for (const name of this.getterNames) {\n Reflect.deleteProperty(proto, name)\n }\n\n if (Object.prototype.hasOwnProperty.call(this, 'macroNames')) {\n this.macroNames.clear()\n }\n if (Object.prototype.hasOwnProperty.call(this, 'instanceMacros')) {\n this.instanceMacros.clear()\n }\n if (Object.prototype.hasOwnProperty.call(this, 'getterNames')) {\n this.getterNames.clear()\n }\n if (Object.prototype.hasOwnProperty.call(this, '_originals')) {\n this._originals.clear()\n }\n }\n\n // ── Constructor (applies instance properties) ─────────────\n\n constructor() {\n const Constructor = this.constructor as typeof Macroable\n const self = this as Record<string | symbol, unknown>\n Constructor.instanceMacros.forEach(({ key, value }) => {\n if (typeof value === 'function') {\n self[key] = value.bind(this)\n } else {\n self[key] = value\n }\n })\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,IAAsB,YAAtB,MAAgC;;;;;CAM9B,OAAiB,iCAAiB,IAAI,IAA8C;;;;CAKpF,OAAiB,6BAAa,IAAI,IAAqB;;;;CAKvD,OAAiB,8BAAc,IAAI,IAAqB;;;;;CAMxD,OAAe,6BAAa,IAAI,IAA2D;CAmB3F,OAAO,MAAM,MAAuB,OAAsB;EACxD,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,YAAY,GAC1D,KAAK,aAAa,IAAI,IAAI,KAAK,UAAU;EAE3C,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,YAAY,GAC1D,KAAK,aAAa,IAAI,IAAI,KAAK,UAAU;EAI3C,IAAI,CAAC,KAAK,WAAW,IAAI,IAAI,GAAG;GAC9B,MAAM,UAAU,OAAO,UAAU,eAAe,KAAK,KAAK,WAAW,IAAI;GACzE,KAAK,WAAW,IAAI,MAAM;IACxB;IACA,OAAO,UAAW,KAAK,UAA+C,QAAQ,KAAA;GAChF,CAAC;EACH;EAEA,KAAK,WAAW,IAAI,IAAI;EACxB,KAAM,UAA+C,QAAQ;CAC/D;CAmBA,OAAO,iBAAiB,MAAuB,OAAsB;EACnE,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,gBAAgB,GAC9D,KAAK,iBAAiB,IAAI,IAAI,KAAK,cAAc;EAEnD,KAAK,eAAe,IAAI;GAAE,KAAK;GAAM;EAAM,CAAC;CAC9C;CAkBA,OAAO,OACL,MACA,aACA,YAAY,OACN;EACN,IAAI,CAAC,OAAO,UAAU,eAAe,KAAK,MAAM,aAAa,GAC3D,KAAK,cAAc,IAAI,IAAI,KAAK,WAAW;EAE7C,KAAK,YAAY,IAAI,IAAI;EAEzB,OAAO,eAAe,KAAK,WAAW,MAAM;GAC1C,MAAe;IACb,MAAM,QAAiB,YAAY,KAAK,IAAI;IAC5C,IAAI,WACF,OAAO,eAAe,MAAM,MAAM;KAChC;KACA,cAAc;KACd,YAAY;KACZ,UAAU;IACZ,CAAC;IAEH,OAAO;GACT;GACA,cAAc;GACd,YAAY;EACd,CAAC;CACH;;;;;;CASA,OAAO,SAAS,MAAgC;EAC9C,OACE,KAAK,WAAW,IAAI,IAAI,KACxB,CAAC,GAAG,KAAK,cAAc,EAAE,MAAM,MAAM,EAAE,QAAQ,IAAI,KACnD,KAAK,YAAY,IAAI,IAAI;CAE7B;;;;;CAQA,OAAO,cAAoB;EACzB,MAAM,QAAQ,KAAK;EAGnB,KAAK,MAAM,QAAQ,KAAK,YAAY;GAClC,MAAM,WAAW,KAAK,WAAW,IAAI,IAAI;GACzC,IAAI,UAAU,SACZ,MAAM,QAAQ,SAAS;QAEvB,QAAQ,eAAe,OAAO,IAAI;EAEtC;EACA,KAAK,MAAM,QAAQ,KAAK,aACtB,QAAQ,eAAe,OAAO,IAAI;EAGpC,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,YAAY,GACzD,KAAK,WAAW,MAAM;EAExB,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,gBAAgB,GAC7D,KAAK,eAAe,MAAM;EAE5B,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,aAAa,GAC1D,KAAK,YAAY,MAAM;EAEzB,IAAI,OAAO,UAAU,eAAe,KAAK,MAAM,YAAY,GACzD,KAAK,WAAW,MAAM;CAE1B;CAIA,cAAc;EACZ,MAAM,cAAc,KAAK;EACzB,MAAM,OAAO;EACb,YAAY,eAAe,SAAS,EAAE,KAAK,YAAY;GACrD,IAAI,OAAO,UAAU,YACnB,KAAK,OAAO,MAAM,KAAK,IAAI;QAE3B,KAAK,OAAO;EAEhB,CAAC;CACH;AACF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
//#region src/di/metadata.ts
|
|
2
|
+
const STORE_KEY = Symbol.for("stratal:metadata:store");
|
|
3
|
+
const g = globalThis;
|
|
4
|
+
const store = g[STORE_KEY] ?? (g[STORE_KEY] = /* @__PURE__ */ new WeakMap());
|
|
5
|
+
function getKeyTarget(target, propertyKey) {
|
|
6
|
+
if (propertyKey === void 0) return target;
|
|
7
|
+
let propMap = store.get(target);
|
|
8
|
+
if (!propMap) {
|
|
9
|
+
propMap = /* @__PURE__ */ new Map();
|
|
10
|
+
store.set(target, propMap);
|
|
11
|
+
}
|
|
12
|
+
let propTarget = propMap.get(propertyKey);
|
|
13
|
+
if (!propTarget) {
|
|
14
|
+
propTarget = Object.create(null);
|
|
15
|
+
propMap.set(propertyKey, propTarget);
|
|
16
|
+
}
|
|
17
|
+
return propTarget;
|
|
18
|
+
}
|
|
19
|
+
function defineMetadata(key, value, target, propertyKey) {
|
|
20
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
21
|
+
let meta = store.get(resolved);
|
|
22
|
+
if (!meta) {
|
|
23
|
+
meta = /* @__PURE__ */ new Map();
|
|
24
|
+
store.set(resolved, meta);
|
|
25
|
+
}
|
|
26
|
+
meta.set(key, value);
|
|
27
|
+
}
|
|
28
|
+
function getMetadata(key, target, propertyKey) {
|
|
29
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
30
|
+
return store.get(resolved)?.get(key);
|
|
31
|
+
}
|
|
32
|
+
function hasMetadata(key, target, propertyKey) {
|
|
33
|
+
const resolved = getKeyTarget(target, propertyKey);
|
|
34
|
+
return store.get(resolved)?.has(key) ?? false;
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
37
|
+
export { getMetadata as n, hasMetadata as r, defineMetadata as t };
|
|
38
|
+
|
|
39
|
+
//# sourceMappingURL=metadata-DzzprcID.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-DzzprcID.mjs","names":[],"sources":["../src/di/metadata.ts"],"sourcesContent":["type MetadataTarget = object | string | symbol\n\nconst STORE_KEY = Symbol.for('stratal:metadata:store')\nconst g = globalThis as Record<symbol, unknown>\nconst store: WeakMap<object, Map<MetadataTarget, unknown>> =\n (g[STORE_KEY] as WeakMap<object, Map<MetadataTarget, unknown>>) ??\n (g[STORE_KEY] = new WeakMap<object, Map<MetadataTarget, unknown>>())\n\nfunction getKeyTarget(target: object, propertyKey?: string | symbol): object {\n if (propertyKey === undefined) return target\n let propMap = store.get(target)\n if (!propMap) {\n propMap = new Map()\n store.set(target, propMap)\n }\n let propTarget = propMap.get(propertyKey) as object | undefined\n if (!propTarget) {\n propTarget = Object.create(null) as object\n propMap.set(propertyKey, propTarget)\n }\n return propTarget\n}\n\nexport function defineMetadata(key: symbol, value: unknown, target: object, propertyKey?: string | symbol): void {\n const resolved = getKeyTarget(target, propertyKey)\n let meta = store.get(resolved)\n if (!meta) {\n meta = new Map()\n store.set(resolved, meta)\n }\n meta.set(key, value)\n}\n\nexport function getMetadata<T = unknown>(key: symbol, target: object, propertyKey?: string | symbol): T | undefined {\n const resolved = getKeyTarget(target, propertyKey)\n return store.get(resolved)?.get(key) as T | undefined\n}\n\nexport function hasMetadata(key: symbol, target: object, propertyKey?: string | symbol): boolean {\n const resolved = getKeyTarget(target, propertyKey)\n return store.get(resolved)?.has(key) ?? false\n}\n"],"mappings":";AAEA,MAAM,YAAY,OAAO,IAAI,wBAAwB;AACrD,MAAM,IAAI;AACV,MAAM,QACH,EAAE,eACF,EAAE,6BAAa,IAAI,QAA8C;AAEpE,SAAS,aAAa,QAAgB,aAAuC;CAC3E,IAAI,gBAAgB,KAAA,GAAW,OAAO;CACtC,IAAI,UAAU,MAAM,IAAI,MAAM;CAC9B,IAAI,CAAC,SAAS;EACZ,0BAAU,IAAI,IAAI;EAClB,MAAM,IAAI,QAAQ,OAAO;CAC3B;CACA,IAAI,aAAa,QAAQ,IAAI,WAAW;CACxC,IAAI,CAAC,YAAY;EACf,aAAa,OAAO,OAAO,IAAI;EAC/B,QAAQ,IAAI,aAAa,UAAU;CACrC;CACA,OAAO;AACT;AAEA,SAAgB,eAAe,KAAa,OAAgB,QAAgB,aAAqC;CAC/G,MAAM,WAAW,aAAa,QAAQ,WAAW;CACjD,IAAI,OAAO,MAAM,IAAI,QAAQ;CAC7B,IAAI,CAAC,MAAM;EACT,uBAAO,IAAI,IAAI;EACf,MAAM,IAAI,UAAU,IAAI;CAC1B;CACA,KAAK,IAAI,KAAK,KAAK;AACrB;AAEA,SAAgB,YAAyB,KAAa,QAAgB,aAA8C;CAClH,MAAM,WAAW,aAAa,QAAQ,WAAW;CACjD,OAAO,MAAM,IAAI,QAAQ,GAAG,IAAI,GAAG;AACrC;AAEA,SAAgB,YAAY,KAAa,QAAgB,aAAwC;CAC/F,MAAM,WAAW,aAAa,QAAQ,WAAW;CACjD,OAAO,MAAM,IAAI,QAAQ,GAAG,IAAI,GAAG,KAAK;AAC1C"}
|
package/dist/module/index.d.mts
CHANGED
|
@@ -1,32 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as Constructor } from "../types-
|
|
1
|
+
import { An as ExistingProvider, Dn as AsyncModuleOptions, Dr as ApplicationError, Fn as OnException, Hn as InjectionToken, In as OnInitialize, Ln as OnShutdown, Mn as ModuleClass, Nn as ModuleContext, On as ClassProvider, Pn as ModuleOptions, Rn as Provider, jn as FactoryProvider, kn as DynamicModule, ln as ModuleRegistry, zn as ValueProvider } from "../index-B_JoEl3V.mjs";
|
|
2
|
+
import { t as Constructor } from "../types-CmV_9xBD.mjs";
|
|
3
|
+
import { n as ModuleRef, t as LazyModuleLoader } from "../lazy-module-loader-Ib383jH_.mjs";
|
|
3
4
|
|
|
5
|
+
//#region src/module/module.error.d.ts
|
|
6
|
+
declare class ModuleError extends ApplicationError {}
|
|
7
|
+
//#endregion
|
|
4
8
|
//#region src/module/module.decorator.d.ts
|
|
5
9
|
declare const MODULE_OPTIONS_KEY: unique symbol;
|
|
6
|
-
/**
|
|
7
|
-
* `@Module` decorator - defines a module with imports, providers, controllers, consumers, jobs
|
|
8
|
-
*
|
|
9
|
-
* Uses tsyringe's `@registry` internally to auto-register providers when module is imported.
|
|
10
|
-
*
|
|
11
|
-
* @example
|
|
12
|
-
* ```typescript
|
|
13
|
-
* @Module({
|
|
14
|
-
* imports: [OtherModule],
|
|
15
|
-
* providers: [MyService, MyRepository],
|
|
16
|
-
* controllers: [MyController],
|
|
17
|
-
* })
|
|
18
|
-
* export class MyModule {}
|
|
19
|
-
* ```
|
|
20
|
-
*/
|
|
21
10
|
declare function Module(options: ModuleOptions): <TFunction extends abstract new (...args: never[]) => unknown>(target: TFunction) => TFunction;
|
|
22
|
-
/**
|
|
23
|
-
* Get module options from decorated class
|
|
24
|
-
*/
|
|
25
11
|
declare function getModuleOptions(target: Constructor): ModuleOptions | undefined;
|
|
26
|
-
/**
|
|
27
|
-
* Check if a class is decorated with `@Module`
|
|
28
|
-
*/
|
|
29
12
|
declare function isModuleClass(target: unknown): target is Constructor;
|
|
30
13
|
//#endregion
|
|
31
|
-
export { AsyncModuleOptions, ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, InjectionToken, MODULE_OPTIONS_KEY, Module, ModuleClass, ModuleContext, ModuleOptions, ModuleRegistry, OnException, OnInitialize, OnShutdown, Provider,
|
|
14
|
+
export { AsyncModuleOptions, ClassProvider, DynamicModule, ExistingProvider, FactoryProvider, type InjectionToken, LazyModuleLoader, MODULE_OPTIONS_KEY, Module, ModuleClass, ModuleContext, ModuleError, ModuleOptions, ModuleRef, ModuleRegistry, OnException, OnInitialize, OnShutdown, Provider, ValueProvider, getModuleOptions, isModuleClass };
|
|
32
15
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/module/module.decorator.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/module/module.error.ts","../../src/module/module.decorator.ts"],"mappings":";;;;;cAEa,WAAA,SAAoB,gBAAgB;;;cCEpC,kBAAA;AAAA,iBAEG,MAAA,CAAO,OAAA,EAAS,aAAA,uCACa,IAAA,uBAA2B,MAAA,EAAQ,SAAA,KAAY,SAAA;AAAA,iBAM5E,gBAAA,CAAiB,MAAA,EAAQ,WAAA,GAAc,aAAa;AAAA,iBAIpD,aAAA,CAAc,MAAA,YAAkB,MAAA,IAAU,WAAW"}
|
package/dist/module/index.mjs
CHANGED
|
@@ -1,2 +1,10 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { a as ApplicationError } from "../container-storage-BmOJ4_Na.mjs";
|
|
2
|
+
import "../errors-mXYxG0XB.mjs";
|
|
3
|
+
import { i as isModuleClass, n as Module, r as getModuleOptions, t as MODULE_OPTIONS_KEY } from "../module.decorator-CYHY6pG5.mjs";
|
|
4
|
+
import { d as LazyModuleLoader, f as ModuleRef, t as ModuleRegistry } from "../module-registry-Dm-pqHd3.mjs";
|
|
5
|
+
//#region src/module/module.error.ts
|
|
6
|
+
var ModuleError = class extends ApplicationError {};
|
|
7
|
+
//#endregion
|
|
8
|
+
export { LazyModuleLoader, MODULE_OPTIONS_KEY, Module, ModuleError, ModuleRef, ModuleRegistry, getModuleOptions, isModuleClass };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../../src/module/module.error.ts"],"sourcesContent":["import { ApplicationError } from '../errors'\n\nexport class ModuleError extends ApplicationError {}\n"],"mappings":";;;;;AAEA,IAAa,cAAb,cAAiC,iBAAiB,CAAC"}
|