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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/seeder/seeder.ts","../../src/seeder/seeder-registry.ts","../../src/seeder/commands/db-seed-list.command.ts","../../src/seeder/commands/db-seed.command.ts","../../src/seeder/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/seeder/seeder.ts","../../src/seeder/seeder-registry.ts","../../src/seeder/commands/db-seed-list.command.ts","../../src/seeder/commands/db-seed.command.ts","../../src/seeder/seeder.error.ts","../../src/seeder/is-seeder.ts","../../src/seeder/seeder.module.ts"],"mappings":";;;;;cAGa,gBAAA;AAAA,UAEI,aAAA;EACf,GAAA,CAAI,WAAA,EAAa,WAAA,CAAY,MAAA,IAAU,OAAA;EACvC,SAAA,EAAW,SAAA;AAAA;AAAA,uBAGS,MAAA;EAAA,CACnB,gBAAA,GAAmB,aAAA;EAAA,SAKX,GAAA,IAAO,OAAA;EAXD;EAAA,UAcC,IAAA,CAAK,WAAA,EAAa,WAAA,CAAY,MAAA,IAAU,OAAA;AAAA;;;cCX7C,aAAA;EAAA,SAEH,cAAA;AAAA;AAAA,cAGG,cAAA;EAAA,QAIwC,GAAA;EAAA,QAH3C,OAAA;EAAA,QACA,SAAA;cAE2C,GAAA,EAAK,WAAA;EAExD,QAAA,CAAS,WAAA,EAAa,WAAA,CAAY,MAAA;EAS5B,GAAA,CAAI,WAAA,EAAa,WAAA,CAAY,MAAA,GAAS,OAAA;IAAY,SAAA,GAAY,SAAA;EAAA,IAAc,OAAA;EAsB5E,MAAA,CAAO,OAAA;IAAY,SAAA,GAAY,SAAA;EAAA,IAAc,OAAA;EAMnD,IAAA,CAAK,IAAA,WAAe,WAAA,CAAY,MAAA;EAIhC,GAAA,CAAI,WAAA,EAAa,WAAA,CAAY,MAAA;EAI7B,IAAA;IAAU,SAAA;EAAA;AAAA;;;cC5DC,iBAAA,SAA0B,OAAO;EAAA,QAIc,OAAA;EAAA,OAHnD,OAAA;EAAA,OACA,WAAA;cAEmD,OAAA,EAAS,cAAA;EAInE,MAAA;AAAA;;;cCRW,aAAA,SAAsB,OAAA;EAAA,QAIyB,OAAA;EAAA,OAHnD,OAAA;EAAA,OACA,WAAA;cAEmD,OAAA,EAAS,cAAA;EAI7D,MAAA,IAAU,OAAA;AAAA;;;cCVL,WAAA,SAAoB,gBAAgB;;;;;;;AJCjD;iBKKgB,QAAA,CAAS,MAAmB,EAAX,WAAW;;;;;;;;ALL5C;;cMYa,YAAA"}
|
package/dist/seeder/index.mjs
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
-
import { n as SEEDER_INTERNALS, r as Seeder, t as isSeeder } from "../is-seeder-
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { n as SEEDER_INTERNALS, r as Seeder, t as isSeeder } from "../is-seeder-Gvh_AM71.mjs";
|
|
2
|
+
import { n as SeederRegistry, r as SeederError, t as SEEDER_TOKENS } from "../seeder-registry-CyUmKsJq.mjs";
|
|
3
|
+
import { n as DbSeedListCommand, t as DbSeedCommand } from "../seeder-7ubkms-Y.mjs";
|
|
4
|
+
import { t as SeederModule } from "../seeder.module-CYYwk3Qk.mjs";
|
|
5
|
+
export { DbSeedCommand, DbSeedListCommand, SEEDER_INTERNALS, SEEDER_TOKENS, Seeder, SeederError, SeederModule, SeederRegistry, isSeeder };
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { d as inject } from "./di-DseMn-z9.mjs";
|
|
2
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-CuAoSZvs.mjs";
|
|
3
|
+
import { t as Command } from "./command-BvmUAPPQ.mjs";
|
|
4
|
+
import { t as SEEDER_TOKENS } from "./seeder-registry-CyUmKsJq.mjs";
|
|
5
|
+
import "./seeder.module-CYYwk3Qk.mjs";
|
|
6
|
+
//#region src/seeder/commands/db-seed-list.command.ts
|
|
7
|
+
let DbSeedListCommand = class DbSeedListCommand extends Command {
|
|
8
|
+
seeders;
|
|
9
|
+
static command = "db:seed:list";
|
|
10
|
+
static description = "List available database seeders";
|
|
11
|
+
constructor(seeders) {
|
|
12
|
+
super();
|
|
13
|
+
this.seeders = seeders;
|
|
14
|
+
}
|
|
15
|
+
handle() {
|
|
16
|
+
const list = this.seeders.list();
|
|
17
|
+
if (list.length === 0) {
|
|
18
|
+
this.info("No seeders found");
|
|
19
|
+
return 0;
|
|
20
|
+
}
|
|
21
|
+
this.table(["Class"], list.map((s) => [s.className]));
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
DbSeedListCommand = __decorate([__decorateParam(0, inject(SEEDER_TOKENS.SeederRegistry))], DbSeedListCommand);
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/seeder/commands/db-seed.command.ts
|
|
27
|
+
let DbSeedCommand = class DbSeedCommand extends Command {
|
|
28
|
+
seeders;
|
|
29
|
+
static command = "db:seed {names* : Seeder class names} {--a|all : Run all seeders} {--dry-run : Preview without executing}";
|
|
30
|
+
static description = "Run database seeders";
|
|
31
|
+
constructor(seeders) {
|
|
32
|
+
super();
|
|
33
|
+
this.seeders = seeders;
|
|
34
|
+
}
|
|
35
|
+
async handle() {
|
|
36
|
+
const names = this.array("names");
|
|
37
|
+
const all = this.boolean("all");
|
|
38
|
+
const dryRun = this.boolean("dry-run");
|
|
39
|
+
if (names.length > 0 && all) this.warn(`Ignoring "${names.join(", ")}" because --all takes precedence`);
|
|
40
|
+
if (names.length === 0 && !all) {
|
|
41
|
+
this.fail("Specify one or more seeder class names or use --all");
|
|
42
|
+
return 1;
|
|
43
|
+
}
|
|
44
|
+
if (dryRun) {
|
|
45
|
+
if (all) {
|
|
46
|
+
const list = this.seeders.list();
|
|
47
|
+
this.info("Dry run — would execute:");
|
|
48
|
+
for (const s of list) this.info(` ${s.className}`);
|
|
49
|
+
} else {
|
|
50
|
+
this.info("Dry run — would execute:");
|
|
51
|
+
for (const name of names) {
|
|
52
|
+
const SeederClass = this.seeders.find(name);
|
|
53
|
+
if (!SeederClass) {
|
|
54
|
+
this.fail(`Seeder "${name}" not found`);
|
|
55
|
+
return 1;
|
|
56
|
+
}
|
|
57
|
+
this.info(` ${SeederClass.name}`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
if (all) {
|
|
63
|
+
await this.seeders.runAll();
|
|
64
|
+
this.success("All seeders completed");
|
|
65
|
+
} else for (const name of names) {
|
|
66
|
+
const SeederClass = this.seeders.find(name);
|
|
67
|
+
if (!SeederClass) {
|
|
68
|
+
this.fail(`Seeder "${name}" not found`);
|
|
69
|
+
return 1;
|
|
70
|
+
}
|
|
71
|
+
await this.seeders.run(SeederClass);
|
|
72
|
+
this.success(`Seeder "${name}" completed`);
|
|
73
|
+
}
|
|
74
|
+
return 0;
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
DbSeedCommand = __decorate([__decorateParam(0, inject(SEEDER_TOKENS.SeederRegistry))], DbSeedCommand);
|
|
78
|
+
//#endregion
|
|
79
|
+
export { DbSeedListCommand as n, DbSeedCommand as t };
|
|
80
|
+
|
|
81
|
+
//# sourceMappingURL=seeder-7ubkms-Y.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder-7ubkms-Y.mjs","names":[],"sources":["../src/seeder/commands/db-seed-list.command.ts","../src/seeder/commands/db-seed.command.ts"],"sourcesContent":["import { inject } from '../../di'\nimport { Command } from '../../quarry/command'\nimport { type SeederRegistry, SEEDER_TOKENS } from '../seeder-registry'\n\nexport class DbSeedListCommand extends Command {\n static command = 'db:seed:list'\n static description = 'List available database seeders'\n\n constructor(@inject(SEEDER_TOKENS.SeederRegistry) private seeders: SeederRegistry) {\n super()\n }\n\n handle(): undefined | number {\n const list = this.seeders.list()\n if (list.length === 0) {\n this.info('No seeders found')\n return 0\n }\n this.table(['Class'], list.map(s => [s.className]))\n\n return undefined\n }\n}\n","import { inject } from '../../di'\nimport { Command } from '../../quarry/command'\nimport { type SeederRegistry, SEEDER_TOKENS } from '../seeder-registry'\n\nexport class DbSeedCommand extends Command {\n static command = 'db:seed {names* : Seeder class names} {--a|all : Run all seeders} {--dry-run : Preview without executing}'\n static description = 'Run database seeders'\n\n constructor(@inject(SEEDER_TOKENS.SeederRegistry) private seeders: SeederRegistry) {\n super()\n }\n\n async handle(): Promise<number | undefined> {\n const names = this.array('names')\n const all = this.boolean('all')\n const dryRun = this.boolean('dry-run')\n\n if (names.length > 0 && all) {\n this.warn(`Ignoring \"${names.join(', ')}\" because --all takes precedence`)\n }\n\n if (names.length === 0 && !all) {\n this.fail('Specify one or more seeder class names or use --all')\n return 1\n }\n\n if (dryRun) {\n if (all) {\n const list = this.seeders.list()\n this.info('Dry run — would execute:')\n for (const s of list) {\n this.info(` ${s.className}`)\n }\n } else {\n this.info('Dry run — would execute:')\n for (const name of names) {\n const SeederClass = this.seeders.find(name)\n if (!SeederClass) {\n this.fail(`Seeder \"${name}\" not found`)\n return 1\n }\n this.info(` ${SeederClass.name}`)\n }\n }\n return 0\n }\n\n if (all) {\n await this.seeders.runAll()\n this.success('All seeders completed')\n } else {\n for (const name of names) {\n const SeederClass = this.seeders.find(name)\n if (!SeederClass) {\n this.fail(`Seeder \"${name}\" not found`)\n return 1\n }\n await this.seeders.run(SeederClass)\n this.success(`Seeder \"${name}\" completed`)\n }\n }\n\n return 0\n }\n}\n"],"mappings":";;;;;;AAIO,IAAA,oBAAA,MAAM,0BAA0B,QAAQ;CAIa;CAH1D,OAAO,UAAU;CACjB,OAAO,cAAc;CAErB,YAAY,SAAuE;EACjF,MAAM;EADkD,KAAA,UAAA;CAE1D;CAEA,SAA6B;EAC3B,MAAM,OAAO,KAAK,QAAQ,KAAK;EAC/B,IAAI,KAAK,WAAW,GAAG;GACrB,KAAK,KAAK,kBAAkB;GAC5B,OAAO;EACT;EACA,KAAK,MAAM,CAAC,OAAO,GAAG,KAAK,KAAI,MAAK,CAAC,EAAE,SAAS,CAAC,CAAC;CAGpD;AACF;mDAde,OAAO,cAAc,cAAc,CAAA,CAAA,GAAA,iBAAA;;;ACJ3C,IAAA,gBAAA,MAAM,sBAAsB,QAAQ;CAIiB;CAH1D,OAAO,UAAU;CACjB,OAAO,cAAc;CAErB,YAAY,SAAuE;EACjF,MAAM;EADkD,KAAA,UAAA;CAE1D;CAEA,MAAM,SAAsC;EAC1C,MAAM,QAAQ,KAAK,MAAM,OAAO;EAChC,MAAM,MAAM,KAAK,QAAQ,KAAK;EAC9B,MAAM,SAAS,KAAK,QAAQ,SAAS;EAErC,IAAI,MAAM,SAAS,KAAK,KACtB,KAAK,KAAK,aAAa,MAAM,KAAK,IAAI,EAAE,iCAAiC;EAG3E,IAAI,MAAM,WAAW,KAAK,CAAC,KAAK;GAC9B,KAAK,KAAK,qDAAqD;GAC/D,OAAO;EACT;EAEA,IAAI,QAAQ;GACV,IAAI,KAAK;IACP,MAAM,OAAO,KAAK,QAAQ,KAAK;IAC/B,KAAK,KAAK,0BAA0B;IACpC,KAAK,MAAM,KAAK,MACd,KAAK,KAAK,KAAK,EAAE,WAAW;GAEhC,OAAO;IACL,KAAK,KAAK,0BAA0B;IACpC,KAAK,MAAM,QAAQ,OAAO;KACxB,MAAM,cAAc,KAAK,QAAQ,KAAK,IAAI;KAC1C,IAAI,CAAC,aAAa;MAChB,KAAK,KAAK,WAAW,KAAK,YAAY;MACtC,OAAO;KACT;KACA,KAAK,KAAK,KAAK,YAAY,MAAM;IACnC;GACF;GACA,OAAO;EACT;EAEA,IAAI,KAAK;GACP,MAAM,KAAK,QAAQ,OAAO;GAC1B,KAAK,QAAQ,uBAAuB;EACtC,OACE,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,cAAc,KAAK,QAAQ,KAAK,IAAI;GAC1C,IAAI,CAAC,aAAa;IAChB,KAAK,KAAK,WAAW,KAAK,YAAY;IACtC,OAAO;GACT;GACA,MAAM,KAAK,QAAQ,IAAI,WAAW;GAClC,KAAK,QAAQ,WAAW,KAAK,YAAY;EAC3C;EAGF,OAAO;CACT;AACF;+CAxDe,OAAO,cAAc,cAAc,CAAA,CAAA,GAAA,aAAA"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { d as inject, r as DI_TOKENS, s as Singleton } from "./di-DseMn-z9.mjs";
|
|
2
|
+
import { a as ApplicationError } from "./container-storage-BmOJ4_Na.mjs";
|
|
3
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-CuAoSZvs.mjs";
|
|
4
|
+
import "./errors-mXYxG0XB.mjs";
|
|
5
|
+
import { n as SEEDER_INTERNALS } from "./is-seeder-Gvh_AM71.mjs";
|
|
6
|
+
//#region src/seeder/seeder.error.ts
|
|
7
|
+
var SeederError = class extends ApplicationError {};
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region src/seeder/seeder-registry.ts
|
|
10
|
+
const SEEDER_TOKENS = { SeederRegistry: Symbol.for("stratal:seeders:registry") };
|
|
11
|
+
let SeederRegistry = class SeederRegistry {
|
|
12
|
+
app;
|
|
13
|
+
seeders = /* @__PURE__ */ new Set();
|
|
14
|
+
nameIndex = /* @__PURE__ */ new Map();
|
|
15
|
+
constructor(app) {
|
|
16
|
+
this.app = app;
|
|
17
|
+
}
|
|
18
|
+
register(SeederClass) {
|
|
19
|
+
const existing = this.nameIndex.get(SeederClass.name);
|
|
20
|
+
if (existing && existing !== SeederClass) throw new SeederError(`Seeder name collision: "${SeederClass.name}" is already registered`);
|
|
21
|
+
this.seeders.add(SeederClass);
|
|
22
|
+
this.nameIndex.set(SeederClass.name, SeederClass);
|
|
23
|
+
}
|
|
24
|
+
async run(SeederClass, options) {
|
|
25
|
+
if (!this.seeders.has(SeederClass)) throw new SeederError(`Seeder "${SeederClass.name}" is not registered`);
|
|
26
|
+
const execute = async (container) => {
|
|
27
|
+
const seeder = container.resolve(SeederClass);
|
|
28
|
+
seeder[SEEDER_INTERNALS] = {
|
|
29
|
+
run: (cls) => this.run(cls, { container }),
|
|
30
|
+
container
|
|
31
|
+
};
|
|
32
|
+
await seeder.run();
|
|
33
|
+
};
|
|
34
|
+
if (options?.container) await execute(options.container);
|
|
35
|
+
else {
|
|
36
|
+
const mockContext = this.app.createMockRouterContext("en");
|
|
37
|
+
await this.app.container.runInRequestScope(mockContext, execute);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async runAll(options) {
|
|
41
|
+
for (const SeederClass of this.seeders) await this.run(SeederClass, options);
|
|
42
|
+
}
|
|
43
|
+
find(name) {
|
|
44
|
+
return this.nameIndex.get(name);
|
|
45
|
+
}
|
|
46
|
+
has(SeederClass) {
|
|
47
|
+
return this.seeders.has(SeederClass);
|
|
48
|
+
}
|
|
49
|
+
list() {
|
|
50
|
+
return [...this.seeders].map((cls) => ({ className: cls.name }));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
SeederRegistry = __decorate([Singleton(SEEDER_TOKENS.SeederRegistry), __decorateParam(0, inject(DI_TOKENS.Application))], SeederRegistry);
|
|
54
|
+
//#endregion
|
|
55
|
+
export { SeederRegistry as n, SeederError as r, SEEDER_TOKENS as t };
|
|
56
|
+
|
|
57
|
+
//# sourceMappingURL=seeder-registry-CyUmKsJq.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder-registry-CyUmKsJq.mjs","names":[],"sources":["../src/seeder/seeder.error.ts","../src/seeder/seeder-registry.ts"],"sourcesContent":["import { ApplicationError } from '../errors'\n\nexport class SeederError extends ApplicationError {}\n","import type { Application } from '../application'\nimport type { Container } from '../di/container'\nimport { inject, Singleton } from '../di/decorators'\nimport { DI_TOKENS } from '../di/tokens'\nimport type { Constructor } from '../types'\nimport { SeederError } from './seeder.error'\nimport { type Seeder, SEEDER_INTERNALS } from './seeder'\n\nexport const SEEDER_TOKENS = {\n SeederRegistry: Symbol.for('stratal:seeders:registry'),\n} as const\n\n@Singleton(SEEDER_TOKENS.SeederRegistry)\nexport class SeederRegistry {\n private seeders = new Set<Constructor<Seeder>>()\n private nameIndex = new Map<string, Constructor<Seeder>>()\n\n constructor(@inject(DI_TOKENS.Application) private app: Application) { }\n\n register(SeederClass: Constructor<Seeder>): void {\n const existing = this.nameIndex.get(SeederClass.name)\n if (existing && existing !== SeederClass) {\n throw new SeederError(`Seeder name collision: \"${SeederClass.name}\" is already registered`)\n }\n this.seeders.add(SeederClass)\n this.nameIndex.set(SeederClass.name, SeederClass)\n }\n\n async run(SeederClass: Constructor<Seeder>, options?: { container?: Container }): Promise<void> {\n if (!this.seeders.has(SeederClass)) {\n throw new SeederError(`Seeder \"${SeederClass.name}\" is not registered`)\n }\n\n const execute = async (container: Container) => {\n const seeder = container.resolve<Seeder>(SeederClass)\n seeder[SEEDER_INTERNALS] = {\n run: (cls) => this.run(cls, { container }),\n container,\n }\n await seeder.run()\n }\n\n if (options?.container) {\n await execute(options.container)\n } else {\n const mockContext = this.app.createMockRouterContext('en')\n await this.app.container.runInRequestScope(mockContext, execute)\n }\n }\n\n async runAll(options?: { container?: Container }): Promise<void> {\n for (const SeederClass of this.seeders) {\n await this.run(SeederClass, options)\n }\n }\n\n find(name: string): Constructor<Seeder> | undefined {\n return this.nameIndex.get(name)\n }\n\n has(SeederClass: Constructor<Seeder>): boolean {\n return this.seeders.has(SeederClass)\n }\n\n list(): { className: string }[] {\n return [...this.seeders].map(cls => ({ className: cls.name }))\n }\n}\n"],"mappings":";;;;;;AAEA,IAAa,cAAb,cAAiC,iBAAiB,CAAC;;;ACMnD,MAAa,gBAAgB,EAC3B,gBAAgB,OAAO,IAAI,0BAA0B,EACvD;AAGO,IAAA,iBAAA,MAAM,eAAe;CAIyB;CAHnD,0BAAkB,IAAI,IAAyB;CAC/C,4BAAoB,IAAI,IAAiC;CAEzD,YAAY,KAAyD;EAAlB,KAAA,MAAA;CAAoB;CAEvE,SAAS,aAAwC;EAC/C,MAAM,WAAW,KAAK,UAAU,IAAI,YAAY,IAAI;EACpD,IAAI,YAAY,aAAa,aAC3B,MAAM,IAAI,YAAY,2BAA2B,YAAY,KAAK,wBAAwB;EAE5F,KAAK,QAAQ,IAAI,WAAW;EAC5B,KAAK,UAAU,IAAI,YAAY,MAAM,WAAW;CAClD;CAEA,MAAM,IAAI,aAAkC,SAAoD;EAC9F,IAAI,CAAC,KAAK,QAAQ,IAAI,WAAW,GAC/B,MAAM,IAAI,YAAY,WAAW,YAAY,KAAK,oBAAoB;EAGxE,MAAM,UAAU,OAAO,cAAyB;GAC9C,MAAM,SAAS,UAAU,QAAgB,WAAW;GACpD,OAAO,oBAAoB;IACzB,MAAM,QAAQ,KAAK,IAAI,KAAK,EAAE,UAAU,CAAC;IACzC;GACF;GACA,MAAM,OAAO,IAAI;EACnB;EAEA,IAAI,SAAS,WACX,MAAM,QAAQ,QAAQ,SAAS;OAC1B;GACL,MAAM,cAAc,KAAK,IAAI,wBAAwB,IAAI;GACzD,MAAM,KAAK,IAAI,UAAU,kBAAkB,aAAa,OAAO;EACjE;CACF;CAEA,MAAM,OAAO,SAAoD;EAC/D,KAAK,MAAM,eAAe,KAAK,SAC7B,MAAM,KAAK,IAAI,aAAa,OAAO;CAEvC;CAEA,KAAK,MAA+C;EAClD,OAAO,KAAK,UAAU,IAAI,IAAI;CAChC;CAEA,IAAI,aAA2C;EAC7C,OAAO,KAAK,QAAQ,IAAI,WAAW;CACrC;CAEA,OAAgC;EAC9B,OAAO,CAAC,GAAG,KAAK,OAAO,EAAE,KAAI,SAAQ,EAAE,WAAW,IAAI,KAAK,EAAE;CAC/D;AACF;6BAvDC,UAAU,cAAc,cAAc,GAAA,gBAAA,GAKxB,OAAO,UAAU,WAAW,CAAA,CAAA,GAAA,cAAA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { t as __exportAll } from "./chunk-BBjsoOtd.mjs";
|
|
2
|
+
import { t as __decorate } from "./decorate-CuAoSZvs.mjs";
|
|
3
|
+
import { n as Module } from "./module.decorator-CYHY6pG5.mjs";
|
|
4
|
+
import { n as SeederRegistry, t as SEEDER_TOKENS } from "./seeder-registry-CyUmKsJq.mjs";
|
|
5
|
+
//#region src/seeder/seeder.module.ts
|
|
6
|
+
var seeder_module_exports = /* @__PURE__ */ __exportAll({ SeederModule: () => SeederModule });
|
|
7
|
+
let SeederModule = class SeederModule {};
|
|
8
|
+
SeederModule = __decorate([Module({ providers: [{
|
|
9
|
+
provide: SEEDER_TOKENS.SeederRegistry,
|
|
10
|
+
useClass: SeederRegistry
|
|
11
|
+
}] })], SeederModule);
|
|
12
|
+
//#endregion
|
|
13
|
+
export { seeder_module_exports as n, SeederModule as t };
|
|
14
|
+
|
|
15
|
+
//# sourceMappingURL=seeder.module-CYYwk3Qk.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seeder.module-CYYwk3Qk.mjs","names":[],"sources":["../src/seeder/seeder.module.ts"],"sourcesContent":["import { Module } from '../module/module.decorator'\nimport { SEEDER_TOKENS, SeederRegistry } from './seeder-registry'\n\n/**\n * Registers the seeder registry (`SEEDER_TOKENS.SeederRegistry`).\n *\n * Eager: resolved synchronously at bootstrap (`registerSeeders`) and by the\n * test harness (`@stratal/testing`), so it cannot be lazily loaded.\n * {@link SeederRegistry} injects the `Application` via `DI_TOKENS.Application`.\n */\n@Module({\n providers: [\n { provide: SEEDER_TOKENS.SeederRegistry, useClass: SeederRegistry },\n ],\n})\nexport class SeederModule { }\n"],"mappings":";;;;;;AAeO,IAAA,eAAA,MAAM,aAAa,CAAE;2BAL3B,OAAO,EACN,WAAW,CACT;CAAE,SAAS,cAAc;CAAgB,UAAU;AAAe,CACpE,EACF,CAAC,CAAA,GAAA,YAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signed-url-
|
|
1
|
+
{"version":3,"file":"signed-url-DIU0sK_6.mjs","names":[],"sources":["../src/router/signed-url.ts"],"sourcesContent":["/**\n * Signed URL utilities using HMAC-SHA256 via Web Crypto API.\n *\n * Follows the Cloudflare Workers signing pattern:\n * https://developers.cloudflare.com/workers/examples/signing-requests/\n *\n * Uses `crypto.subtle.verify()` for timing-attack-safe comparison.\n */\n\n/**\n * Options for signing a URL.\n */\nexport interface SignedUrlOptions {\n /** Time-to-live in seconds. URL expires after this duration. */\n expiresIn?: number\n}\n\n/**\n * Import a signing key for HMAC-SHA256.\n */\nasync function importKey(secret: string): Promise<CryptoKey> {\n const encoder = new TextEncoder()\n return crypto.subtle.importKey(\n 'raw',\n encoder.encode(secret),\n { name: 'HMAC', hash: 'SHA-256' },\n false,\n ['sign', 'verify']\n )\n}\n\n/**\n * Encode an ArrayBuffer as base64url (URL-safe base64).\n */\nfunction toBase64Url(buffer: ArrayBuffer): string {\n const bytes = new Uint8Array(buffer)\n let binary = ''\n for (const byte of bytes) {\n binary += String.fromCharCode(byte)\n }\n return btoa(binary).replace(/\\+/g, '-').replace(/\\//g, '_').replace(/=+$/, '')\n}\n\n/**\n * Sign a URL with HMAC-SHA256.\n *\n * Appends `signature` and optionally `expires` query parameters.\n * The signature covers the pathname + search (excluding the signature params themselves).\n *\n * @param url - Full URL or path to sign\n * @param secret - HMAC secret key (e.g., from env.APP_SECRET)\n * @param options - Optional expiration\n * @returns URL string with `signature` (and `expires`) query params appended\n */\nexport async function signUrl(url: string, secret: string, options?: SignedUrlOptions): Promise<string> {\n const parsedUrl = new URL(url, 'https://placeholder.local')\n const key = await importKey(secret)\n\n // Add expiry if specified\n if (options?.expiresIn) {\n const expires = Math.floor(Date.now() / 1000) + options.expiresIn\n parsedUrl.searchParams.set('expires', String(expires))\n }\n\n // Sign: pathname + sorted search params (without signature)\n const dataToSign = `${parsedUrl.pathname}?${parsedUrl.searchParams.toString()}`\n const encoder = new TextEncoder()\n const signatureBuffer = await crypto.subtle.sign('HMAC', key, encoder.encode(dataToSign))\n const signature = toBase64Url(signatureBuffer)\n\n parsedUrl.searchParams.set('signature', signature)\n // Return just the path + query for relative URLs, full URL for absolute\n return url.startsWith('http') ? parsedUrl.toString() : `${parsedUrl.pathname}?${parsedUrl.searchParams.toString()}`\n}\n\n/**\n * Verify a signed URL using `crypto.subtle.verify()` (timing-attack-safe).\n *\n * @param url - Full URL or path with signature query param\n * @param secret - HMAC secret key (same key used for signing)\n * @returns true if signature is valid and not expired\n */\nexport async function verifySignedUrl(url: string, secret: string): Promise<boolean> {\n const parsedUrl = new URL(url, 'https://placeholder.local')\n const signature = parsedUrl.searchParams.get('signature')\n if (!signature) return false\n\n // Check expiry\n const expires = parsedUrl.searchParams.get('expires')\n if (expires) {\n const expiryTime = parseInt(expires, 10)\n if (isNaN(expiryTime) || Math.floor(Date.now() / 1000) > expiryTime) {\n return false\n }\n }\n\n // Reconstruct the data that was signed (without signature param)\n parsedUrl.searchParams.delete('signature')\n const dataToVerify = `${parsedUrl.pathname}?${parsedUrl.searchParams.toString()}`\n\n // Decode base64url signature\n const base64 = signature.replace(/-/g, '+').replace(/_/g, '/')\n const binaryStr = atob(base64)\n const signatureBytes = new Uint8Array(binaryStr.length)\n for (let i = 0; i < binaryStr.length; i++) {\n signatureBytes[i] = binaryStr.charCodeAt(i)\n }\n\n const key = await importKey(secret)\n const encoder = new TextEncoder()\n\n // Use crypto.subtle.verify() for timing-attack-safe comparison\n return crypto.subtle.verify('HMAC', key, signatureBytes, encoder.encode(dataToVerify))\n}\n"],"mappings":";;;;AAoBA,eAAe,UAAU,QAAoC;CAC3D,MAAM,UAAU,IAAI,YAAY;CAChC,OAAO,OAAO,OAAO,UACnB,OACA,QAAQ,OAAO,MAAM,GACrB;EAAE,MAAM;EAAQ,MAAM;CAAU,GAChC,OACA,CAAC,QAAQ,QAAQ,CACnB;AACF;;;;AAKA,SAAS,YAAY,QAA6B;CAChD,MAAM,QAAQ,IAAI,WAAW,MAAM;CACnC,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OACjB,UAAU,OAAO,aAAa,IAAI;CAEpC,OAAO,KAAK,MAAM,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,GAAG,EAAE,QAAQ,OAAO,EAAE;AAC/E;;;;;;;;;;;;AAaA,eAAsB,QAAQ,KAAa,QAAgB,SAA6C;CACtG,MAAM,YAAY,IAAI,IAAI,KAAK,2BAA2B;CAC1D,MAAM,MAAM,MAAM,UAAU,MAAM;CAGlC,IAAI,SAAS,WAAW;EACtB,MAAM,UAAU,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,IAAI,QAAQ;EACxD,UAAU,aAAa,IAAI,WAAW,OAAO,OAAO,CAAC;CACvD;CAGA,MAAM,aAAa,GAAG,UAAU,SAAS,GAAG,UAAU,aAAa,SAAS;CAC5E,MAAM,UAAU,IAAI,YAAY;CAEhC,MAAM,YAAY,YAAY,MADA,OAAO,OAAO,KAAK,QAAQ,KAAK,QAAQ,OAAO,UAAU,CAAC,CAC3C;CAE7C,UAAU,aAAa,IAAI,aAAa,SAAS;CAEjD,OAAO,IAAI,WAAW,MAAM,IAAI,UAAU,SAAS,IAAI,GAAG,UAAU,SAAS,GAAG,UAAU,aAAa,SAAS;AAClH;;;;;;;;AASA,eAAsB,gBAAgB,KAAa,QAAkC;CACnF,MAAM,YAAY,IAAI,IAAI,KAAK,2BAA2B;CAC1D,MAAM,YAAY,UAAU,aAAa,IAAI,WAAW;CACxD,IAAI,CAAC,WAAW,OAAO;CAGvB,MAAM,UAAU,UAAU,aAAa,IAAI,SAAS;CACpD,IAAI,SAAS;EACX,MAAM,aAAa,SAAS,SAAS,EAAE;EACvC,IAAI,MAAM,UAAU,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,GAAI,IAAI,YACvD,OAAO;CAEX;CAGA,UAAU,aAAa,OAAO,WAAW;CACzC,MAAM,eAAe,GAAG,UAAU,SAAS,GAAG,UAAU,aAAa,SAAS;CAG9E,MAAM,SAAS,UAAU,QAAQ,MAAM,GAAG,EAAE,QAAQ,MAAM,GAAG;CAC7D,MAAM,YAAY,KAAK,MAAM;CAC7B,MAAM,iBAAiB,IAAI,WAAW,UAAU,MAAM;CACtD,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KACpC,eAAe,KAAK,UAAU,WAAW,CAAC;CAG5C,MAAM,MAAM,MAAM,UAAU,MAAM;CAClC,MAAM,UAAU,IAAI,YAAY;CAGhC,OAAO,OAAO,OAAO,OAAO,QAAQ,KAAK,gBAAgB,QAAQ,OAAO,YAAY,CAAC;AACvF"}
|
package/dist/storage/index.d.mts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { t as StratalEnv } from "../env-
|
|
3
|
-
import { _ as StorageEntry, a as uploadResultSchema, c as getPresignedUrlInputSchema, d as fileExistsInputSchema, f as DownloadResult, g as StorageConfig, h as PresignedUrlConfig, i as UploadResult, l as presignedUrlResultSchema, m as deleteFileInputSchema, n as StreamingBlobPayloadInputTypes, o as GetPresignedUrlInput, p as DeleteFileInput, r as UploadOptions, s as PresignedUrlResult, t as IStorageProvider, u as FileExistsInput, v as StorageRouteConfig } from "../storage-provider.interface-
|
|
1
|
+
import { Dn as AsyncModuleOptions, Dr as ApplicationError, c as HttpException, kn as DynamicModule, rt as RouterContext } from "../index-B_JoEl3V.mjs";
|
|
2
|
+
import { t as StratalEnv } from "../env-ug22bJj7.mjs";
|
|
3
|
+
import { _ as StorageEntry, a as uploadResultSchema, c as getPresignedUrlInputSchema, d as fileExistsInputSchema, f as DownloadResult, g as StorageConfig, h as PresignedUrlConfig, i as UploadResult, l as presignedUrlResultSchema, m as deleteFileInputSchema, n as StreamingBlobPayloadInputTypes, o as GetPresignedUrlInput, p as DeleteFileInput, r as UploadOptions, s as PresignedUrlResult, t as IStorageProvider, u as FileExistsInput, v as StorageRouteConfig } from "../storage-provider.interface-ClUwxz4S.mjs";
|
|
4
4
|
|
|
5
5
|
//#region src/storage/storage.module.d.ts
|
|
6
6
|
/**
|
|
@@ -257,50 +257,26 @@ declare class StorageController {
|
|
|
257
257
|
destroy(ctx: RouterContext): Promise<Response>;
|
|
258
258
|
}
|
|
259
259
|
//#endregion
|
|
260
|
-
//#region src/storage/errors/disk-not-configured.error.d.ts
|
|
261
|
-
declare class DiskNotConfiguredError extends ApplicationError {
|
|
262
|
-
constructor(disk: string);
|
|
263
|
-
}
|
|
264
|
-
//#endregion
|
|
265
260
|
//#region src/storage/errors/file-not-found.error.d.ts
|
|
266
|
-
declare class FileNotFoundError extends
|
|
267
|
-
constructor(path
|
|
261
|
+
declare class FileNotFoundError extends HttpException {
|
|
262
|
+
constructor(path?: string);
|
|
268
263
|
}
|
|
269
264
|
//#endregion
|
|
270
265
|
//#region src/storage/errors/file-too-large.error.d.ts
|
|
271
|
-
declare class FileTooLargeError extends
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
//#region src/storage/errors/invalid-disk.error.d.ts
|
|
276
|
-
declare class InvalidDiskError extends ApplicationError {
|
|
277
|
-
constructor(disk: string);
|
|
266
|
+
declare class FileTooLargeError extends HttpException {
|
|
267
|
+
readonly size?: number | undefined;
|
|
268
|
+
readonly maxSize?: number | undefined;
|
|
269
|
+
constructor(size?: number | undefined, maxSize?: number | undefined);
|
|
278
270
|
}
|
|
279
271
|
//#endregion
|
|
280
272
|
//#region src/storage/errors/invalid-file-type.error.d.ts
|
|
281
|
-
declare class InvalidFileTypeError extends
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
//#endregion
|
|
285
|
-
//#region src/storage/errors/presigned-url-invalid-expiry.error.d.ts
|
|
286
|
-
declare class PresignedUrlInvalidExpiryError extends ApplicationError {
|
|
287
|
-
constructor(expiresIn: number, min: number, max: number);
|
|
273
|
+
declare class InvalidFileTypeError extends HttpException {
|
|
274
|
+
readonly mimeType?: string | undefined;
|
|
275
|
+
constructor(mimeType?: string | undefined);
|
|
288
276
|
}
|
|
289
277
|
//#endregion
|
|
290
|
-
//#region src/storage/
|
|
291
|
-
declare class
|
|
292
|
-
constructor(binding: string);
|
|
293
|
-
}
|
|
294
|
-
//#endregion
|
|
295
|
-
//#region src/storage/errors/r2-presigned-url-secret-missing.error.d.ts
|
|
296
|
-
declare class R2PresignedUrlSecretMissingError extends ApplicationError {
|
|
297
|
-
constructor();
|
|
298
|
-
}
|
|
299
|
-
//#endregion
|
|
300
|
-
//#region src/storage/errors/storage-response-body-missing.error.d.ts
|
|
301
|
-
declare class StorageResponseBodyMissingError extends ApplicationError {
|
|
302
|
-
constructor(path: string);
|
|
303
|
-
}
|
|
278
|
+
//#region src/storage/storage.error.d.ts
|
|
279
|
+
declare class StorageError extends ApplicationError {}
|
|
304
280
|
//#endregion
|
|
305
|
-
export { DeleteFileInput,
|
|
281
|
+
export { DeleteFileInput, DownloadResult, FileExistsInput, FileNotFoundError, FileTooLargeError, GetPresignedUrlInput, type IStorageProvider, InvalidFileTypeError, type PresignedUrlConfig, PresignedUrlResult, STORAGE_TOKENS, type StorageConfig, StorageController, type StorageEntry, StorageError, StorageManagerService, StorageModule, type StorageRouteConfig, StorageService, type StreamingBlobPayloadInputTypes, UploadOptions, UploadResult, deleteFileInputSchema, fileExistsInputSchema, getPresignedUrlInputSchema, presignedUrlResultSchema, uploadResultSchema };
|
|
306
282
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/storage/storage.module.ts","../../src/storage/storage.tokens.ts","../../src/storage/services/storage-manager.service.ts","../../src/storage/services/storage.service.ts","../../src/storage/controllers/storage.controller.ts","../../src/storage/errors/
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../src/storage/storage.module.ts","../../src/storage/storage.tokens.ts","../../src/storage/services/storage-manager.service.ts","../../src/storage/services/storage.service.ts","../../src/storage/controllers/storage.controller.ts","../../src/storage/errors/file-not-found.error.ts","../../src/storage/errors/file-too-large.error.ts","../../src/storage/errors/invalid-file-type.error.ts","../../src/storage/storage.error.ts"],"mappings":"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"}
|
package/dist/storage/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { a as
|
|
3
|
-
export {
|
|
1
|
+
import { t as StorageError } from "../storage.error-Dnib4VHc.mjs";
|
|
2
|
+
import { a as presignedUrlResultSchema, c as StorageController, d as StorageService, f as StorageManagerService, i as getPresignedUrlInputSchema, l as FileNotFoundError, n as FileTooLargeError, o as fileExistsInputSchema, p as STORAGE_TOKENS, r as uploadResultSchema, s as deleteFileInputSchema, t as InvalidFileTypeError, u as StorageModule } from "../storage-MDZypIE9.mjs";
|
|
3
|
+
export { FileNotFoundError, FileTooLargeError, InvalidFileTypeError, STORAGE_TOKENS, StorageController, StorageError, StorageManagerService, StorageModule, StorageService, deleteFileInputSchema, fileExistsInputSchema, getPresignedUrlInputSchema, presignedUrlResultSchema, uploadResultSchema };
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as StratalEnv } from "../../env-
|
|
2
|
-
import { _ as StorageEntry, f as DownloadResult, i as UploadResult, n as StreamingBlobPayloadInputTypes, r as UploadOptions, s as PresignedUrlResult, t as IStorageProvider, v as StorageRouteConfig } from "../../storage-provider.interface-
|
|
1
|
+
import { t as StratalEnv } from "../../env-ug22bJj7.mjs";
|
|
2
|
+
import { _ as StorageEntry, f as DownloadResult, i as UploadResult, n as StreamingBlobPayloadInputTypes, r as UploadOptions, s as PresignedUrlResult, t as IStorageProvider, v as StorageRouteConfig } from "../../storage-provider.interface-ClUwxz4S.mjs";
|
|
3
3
|
|
|
4
4
|
//#region src/storage/providers/multipart-provider.interface.d.ts
|
|
5
5
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/storage/providers/multipart-provider.interface.ts","../../../src/storage/providers/r2-storage.provider.ts"],"mappings":";;;;;;;UAKiB,sBAAA;EAAsB;EAErC,WAAA;EAIiB;EAFjB,YAAA;EAAA;EAEA,QAAA,GAAW,
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/storage/providers/multipart-provider.interface.ts","../../../src/storage/providers/r2-storage.provider.ts"],"mappings":";;;;;;;UAKiB,sBAAA;EAAsB;EAErC,WAAA;EAIiB;EAFjB,YAAA;EAAA;EAEA,QAAA,GAAW,MAAM;AAAA;;AAAA;AAMnB;UAAiB,qBAAA;;EAEf,QAAA;EAEG;EAAH,GAAG;AAAA;;;AAUO;UAJK,gBAAA;EAUa;EAR5B,IAAA;EAUA;EARA,UAAU;AAAA;;;;UAMK,aAAA;EAoBA;EAlBf,IAAA;;EAEA,UAAU;AAAA;;;;UAMK,uBAAA;EAsBA;EApBf,QAAA;;EAEA,GAAG;AAAA;;;;UAMY,QAAA;EAkBK;EAhBpB,UAAA;EAsBkC;EApBlC,IAAA;EA0BgB;EAxBhB,IAAA;AAAA;;;;UAMe,eAAA;EAwBA;EAtBf,KAAA,EAAO,QAAQ;;EAEf,WAAA;EAsBA;EApBA,oBAAA;AAAA;;;;UAMe,mBAAA;EA0BA;EAxBf,GAAA;;EAEA,QAAA;EAwBA;EAtBA,SAAA,GAAY,IAAI;AAAA;;;AA0BC;UApBF,0BAAA;EA0BmB;EAxBlC,OAAA,EAAS,mBAAmB;EAwBM;EAtBlC,WAAA;EA0BA;EAxBA,aAAA;EA0BE;EAxBF,kBAAA;AAAA;AAyBS;AAUX;;AAVW,UAnBM,gBAAA;EA0CH;EAxCZ,IAAA;EAyCG;EAvCH,WAAA;EAsDW;EApDX,QAAA,GAAW,MAAM;AAAA;;;;UAMF,mBAAA;EAgFZ;EA9EH,OAAA;EA0FG;EAxFH,MAAA;IACE,GAAA;IACA,IAAA;IACA,OAAA;EAAA;AAAA;;;;;;;UAUa,kBAAA,SAA2B,gBAAA;EAc/B;;;;;;EAHX,qBAAA,CACE,GAAA,UACA,OAAA,GAAU,sBAAA,GACT,OAAA,CAAQ,qBAAA;EAeR;;;;;;;;EALH,UAAA,CACE,GAAA,UACA,QAAA,UACA,UAAA,UACA,IAAA,EAAM,UAAA,GACL,OAAA,CAAQ,gBAAA;EAoBX;;;;;;;EAXA,uBAAA,CACE,GAAA,UACA,QAAA,UACA,KAAA,EAAO,aAAA,KACN,OAAA,CAAQ,uBAAA;EAqBR;;;;;EAdH,oBAAA,CAAqB,GAAA,UAAa,QAAA,WAAmB,OAAA;EA0B1C;;;;;;;;EAhBX,SAAA,CACE,GAAA,UACA,QAAA,UACA,gBAAA,YACC,OAAA,CAAQ,eAAA;EA0CX;;AAAS;;;;AClNX;EDiLE,oBAAA,CACE,SAAA,WACA,cAAA,YACC,OAAA,CAAQ,0BAAA;;;;;;;EAYX,UAAA,CAAW,GAAA,WAAc,OAAA,CAAQ,gBAAA;EChLtB;;;;;;EDwLX,aAAA,CAAc,IAAA,aAAiB,OAAA,CAAQ,mBAAA;EChIpC;;;;ED0IH,SAAA;AAAA;;;;;;;;;;;cClNW,iBAAA,YAA6B,kBAAA;EAAA,iBAIrB,MAAA;EAAA,iBACA,MAAA;EAAA,iBACA,GAAA;EAAA,iBALF,aAAA;cAGE,MAAA,EAAQ,YAAA,EACR,MAAA,EAAQ,QAAA,EACR,GAAA,EAAK,UAAA,EACtB,WAAA,GAAc,kBAAA;EAKV,MAAA,CACJ,IAAA,EAAM,8BAAA,EACN,IAAA,UACA,OAAA,EAAS,aAAA,GACR,OAAA,CAAQ,YAAA;EAuBL,QAAA,CAAS,IAAA,WAAe,OAAA,CAAQ,cAAA;EAoBhC,MAAA,CAAO,IAAA,WAAe,OAAA;EAItB,MAAA,CAAO,IAAA,WAAe,OAAA;EAKtB,eAAA,CACJ,IAAA,UACA,MAAA,qCACA,SAAA,WACC,OAAA,CAAQ,kBAAA;EAmBL,aAAA,CACJ,IAAA,EAAM,8BAAA,EACN,IAAA,UACA,OAAA,EAAS,IAAA,CAAK,aAAA;IAA2B,IAAA;EAAA,IACxC,OAAA,CAAQ,YAAA;EAwEX,SAAA;EAIM,UAAA,CAAW,GAAA,WAAc,OAAA,CAAQ,gBAAA;EAYjC,aAAA,CAAc,IAAA,aAAiB,OAAA,CAAQ,mBAAA;EAavC,qBAAA,CACJ,GAAA,UACA,OAAA,GAAU,sBAAA,GACT,OAAA,CAAQ,qBAAA;EAsBL,UAAA,CACJ,GAAA,UACA,QAAA,UACA,UAAA,UACA,IAAA,EAAM,UAAA,GACL,OAAA,CAAQ,gBAAA;EAiBL,uBAAA,CACJ,GAAA,UACA,QAAA,UACA,KAAA,EAAO,aAAA,KACN,OAAA,CAAQ,uBAAA;EAgBL,oBAAA,CAAqB,GAAA,UAAa,QAAA,WAAmB,OAAA;EAOrD,SAAA,CACJ,IAAA,UACA,QAAA,UACA,gBAAA,YACC,OAAA,CAAQ,eAAA;EA4BL,oBAAA,CACJ,SAAA,WACA,eAAA,YACC,OAAA,CAAQ,0BAAA;EAAA,QAiCG,sBAAA;AAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as R2StorageProvider } from "../../r2-storage.provider-
|
|
1
|
+
import { t as R2StorageProvider } from "../../r2-storage.provider-DCxQt9dD.mjs";
|
|
2
2
|
export { R2StorageProvider };
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
1
|
+
import { d as inject, o as Request, r as DI_TOKENS, s as Singleton } from "./di-DseMn-z9.mjs";
|
|
2
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-CuAoSZvs.mjs";
|
|
3
|
+
import { u as HttpException } from "./errors-mXYxG0XB.mjs";
|
|
4
|
+
import { n as Module } from "./module.decorator-CYHY6pG5.mjs";
|
|
5
|
+
import "./module/index.mjs";
|
|
6
|
+
import { t as StorageError } from "./storage.error-Dnib4VHc.mjs";
|
|
7
|
+
import { r as z } from "./zod-eKqqhZ5_.mjs";
|
|
8
|
+
import { t as withZodI18n } from "./validation-CpOjviyT.mjs";
|
|
9
|
+
import { t as Controller } from "./controller.decorator-C5UVeJS3.mjs";
|
|
10
|
+
import { n as Delete, o as Put, r as Get } from "./http-method.decorator-ByWZb9DO.mjs";
|
|
9
11
|
//#region src/storage/storage.tokens.ts
|
|
10
12
|
/**
|
|
11
13
|
* Dependency injection tokens for the Storage module
|
|
@@ -47,7 +49,7 @@ let StorageManagerService = class StorageManagerService {
|
|
|
47
49
|
const inflight = this.creationPromises.get(diskName);
|
|
48
50
|
if (inflight) return inflight;
|
|
49
51
|
const diskConfig = this.diskConfigs.get(diskName);
|
|
50
|
-
if (!diskConfig) throw new
|
|
52
|
+
if (!diskConfig) throw new StorageError(`Disk "${diskName}" is not configured`);
|
|
51
53
|
const promise = this.createProvider(diskConfig).then((provider) => {
|
|
52
54
|
this.providers.set(diskName, provider);
|
|
53
55
|
this.creationPromises.delete(diskName);
|
|
@@ -66,9 +68,9 @@ let StorageManagerService = class StorageManagerService {
|
|
|
66
68
|
* @returns Storage provider instance
|
|
67
69
|
*/
|
|
68
70
|
async createProvider(config) {
|
|
69
|
-
const { R2StorageProvider } = await import("./r2-storage.provider-
|
|
71
|
+
const { R2StorageProvider } = await import("./r2-storage.provider-DCxQt9dD.mjs").then((n) => n.n);
|
|
70
72
|
const bucket = this.env[config.binding];
|
|
71
|
-
if (!bucket) throw new
|
|
73
|
+
if (!bucket) throw new StorageError(`R2 binding "${config.binding}" was not found in the environment`);
|
|
72
74
|
return new R2StorageProvider(config, bucket, this.env, this.options.route);
|
|
73
75
|
}
|
|
74
76
|
/**
|
|
@@ -78,7 +80,7 @@ let StorageManagerService = class StorageManagerService {
|
|
|
78
80
|
*/
|
|
79
81
|
getDiskConfig(diskName) {
|
|
80
82
|
const config = this.diskConfigs.get(diskName);
|
|
81
|
-
if (!config) throw new
|
|
83
|
+
if (!config) throw new StorageError(`Disk "${diskName}" is not configured`);
|
|
82
84
|
return config;
|
|
83
85
|
}
|
|
84
86
|
/**
|
|
@@ -98,10 +100,9 @@ let StorageManagerService = class StorageManagerService {
|
|
|
98
100
|
}
|
|
99
101
|
};
|
|
100
102
|
StorageManagerService = __decorate([
|
|
101
|
-
|
|
103
|
+
Singleton(STORAGE_TOKENS.StorageManager),
|
|
102
104
|
__decorateParam(0, inject(STORAGE_TOKENS.Options)),
|
|
103
|
-
__decorateParam(1, inject(DI_TOKENS.CloudflareEnv))
|
|
104
|
-
__decorateMetadata("design:paramtypes", [Object, Object])
|
|
105
|
+
__decorateParam(1, inject(DI_TOKENS.CloudflareEnv))
|
|
105
106
|
], StorageManagerService);
|
|
106
107
|
//#endregion
|
|
107
108
|
//#region src/storage/services/storage.service.ts
|
|
@@ -213,7 +214,7 @@ let StorageService = class StorageService {
|
|
|
213
214
|
*/
|
|
214
215
|
resolveDisk(disk) {
|
|
215
216
|
const diskName = disk ?? this.options.defaultStorageDisk;
|
|
216
|
-
if (!this.storageManager.hasDisk(diskName)) throw new
|
|
217
|
+
if (!this.storageManager.hasDisk(diskName)) throw new StorageError(`Disk "${diskName}" is not configured`);
|
|
217
218
|
return diskName;
|
|
218
219
|
}
|
|
219
220
|
/**
|
|
@@ -252,7 +253,7 @@ let StorageService = class StorageService {
|
|
|
252
253
|
const validatedExpiresIn = expiresIn ?? presignedUrlConfig.defaultExpiry;
|
|
253
254
|
const minExpiry = 1;
|
|
254
255
|
const maxExpiry = presignedUrlConfig.maxExpiry;
|
|
255
|
-
if (validatedExpiresIn < minExpiry || validatedExpiresIn > maxExpiry) throw new
|
|
256
|
+
if (validatedExpiresIn < minExpiry || validatedExpiresIn > maxExpiry) throw new StorageError(`Presigned URL expiry ${validatedExpiresIn}s is out of range (${minExpiry}–${maxExpiry}s)`);
|
|
256
257
|
return validatedExpiresIn;
|
|
257
258
|
}
|
|
258
259
|
/**
|
|
@@ -285,10 +286,9 @@ let StorageService = class StorageService {
|
|
|
285
286
|
}
|
|
286
287
|
};
|
|
287
288
|
StorageService = __decorate([
|
|
288
|
-
|
|
289
|
+
Request(STORAGE_TOKENS.StorageService),
|
|
289
290
|
__decorateParam(0, inject(STORAGE_TOKENS.StorageManager)),
|
|
290
|
-
__decorateParam(1, inject(STORAGE_TOKENS.Options))
|
|
291
|
-
__decorateMetadata("design:paramtypes", [Object, Object])
|
|
291
|
+
__decorateParam(1, inject(STORAGE_TOKENS.Options))
|
|
292
292
|
], StorageService);
|
|
293
293
|
//#endregion
|
|
294
294
|
//#region src/storage/storage.module.ts
|
|
@@ -350,13 +350,19 @@ let StorageModule = _StorageModule = class StorageModule {
|
|
|
350
350
|
};
|
|
351
351
|
StorageModule = _StorageModule = __decorate([Module({ providers: [{
|
|
352
352
|
provide: STORAGE_TOKENS.StorageManager,
|
|
353
|
-
useClass: StorageManagerService
|
|
354
|
-
scope: Scope.Singleton
|
|
353
|
+
useClass: StorageManagerService
|
|
355
354
|
}, {
|
|
356
355
|
provide: STORAGE_TOKENS.StorageService,
|
|
357
356
|
useClass: StorageService
|
|
358
357
|
}] })], StorageModule);
|
|
359
358
|
//#endregion
|
|
359
|
+
//#region src/storage/errors/file-not-found.error.ts
|
|
360
|
+
var FileNotFoundError = class extends HttpException {
|
|
361
|
+
constructor(path) {
|
|
362
|
+
super(404, path ? `File not found: "${path}"` : "File not found");
|
|
363
|
+
}
|
|
364
|
+
};
|
|
365
|
+
//#endregion
|
|
360
366
|
//#region src/storage/controllers/storage.controller.ts
|
|
361
367
|
const diskParam = z.object({ disk: z.string() });
|
|
362
368
|
let StorageController = class StorageController {
|
|
@@ -398,38 +404,19 @@ let StorageController = class StorageController {
|
|
|
398
404
|
return ctx.c.body(null, 204);
|
|
399
405
|
}
|
|
400
406
|
};
|
|
401
|
-
__decorate([
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
}),
|
|
415
|
-
__decorateMetadata("design:type", Function),
|
|
416
|
-
__decorateMetadata("design:paramtypes", [Object]),
|
|
417
|
-
__decorateMetadata("design:returntype", Promise)
|
|
418
|
-
], StorageController.prototype, "upload", null);
|
|
419
|
-
__decorate([
|
|
420
|
-
Delete("/:disk/*", {
|
|
421
|
-
hideFromDocs: true,
|
|
422
|
-
params: diskParam
|
|
423
|
-
}),
|
|
424
|
-
__decorateMetadata("design:type", Function),
|
|
425
|
-
__decorateMetadata("design:paramtypes", [Object]),
|
|
426
|
-
__decorateMetadata("design:returntype", Promise)
|
|
427
|
-
], StorageController.prototype, "destroy", null);
|
|
428
|
-
StorageController = __decorate([
|
|
429
|
-
Controller("/storage", { hideFromDocs: true }),
|
|
430
|
-
__decorateParam(0, inject(STORAGE_TOKENS.StorageService)),
|
|
431
|
-
__decorateMetadata("design:paramtypes", [Object])
|
|
432
|
-
], StorageController);
|
|
407
|
+
__decorate([Get("/:disk/*", {
|
|
408
|
+
hideFromDocs: true,
|
|
409
|
+
params: diskParam
|
|
410
|
+
})], StorageController.prototype, "download", null);
|
|
411
|
+
__decorate([Put("/:disk/*", {
|
|
412
|
+
hideFromDocs: true,
|
|
413
|
+
params: diskParam
|
|
414
|
+
})], StorageController.prototype, "upload", null);
|
|
415
|
+
__decorate([Delete("/:disk/*", {
|
|
416
|
+
hideFromDocs: true,
|
|
417
|
+
params: diskParam
|
|
418
|
+
})], StorageController.prototype, "destroy", null);
|
|
419
|
+
StorageController = __decorate([Controller("/storage", { hideFromDocs: true }), __decorateParam(0, inject(STORAGE_TOKENS.StorageService))], StorageController);
|
|
433
420
|
/**
|
|
434
421
|
* Extract the wildcard path from the Hono context.
|
|
435
422
|
* Hono stores wildcard params under the key matching the path pattern.
|
|
@@ -440,19 +427,19 @@ function extractWildcardPath(ctx) {
|
|
|
440
427
|
//#endregion
|
|
441
428
|
//#region src/storage/contracts/delete-file.input.ts
|
|
442
429
|
const deleteFileInputSchema = z.object({
|
|
443
|
-
path: z.string().min(1,
|
|
430
|
+
path: z.string().min(1, withZodI18n("zodI18n.errors.custom.filePathRequired")),
|
|
444
431
|
disk: z.string().optional()
|
|
445
432
|
});
|
|
446
433
|
//#endregion
|
|
447
434
|
//#region src/storage/contracts/file-exists.input.ts
|
|
448
435
|
const fileExistsInputSchema = z.object({
|
|
449
|
-
path: z.string().min(1,
|
|
436
|
+
path: z.string().min(1, withZodI18n("zodI18n.errors.custom.filePathRequired")),
|
|
450
437
|
disk: z.string().optional()
|
|
451
438
|
});
|
|
452
439
|
//#endregion
|
|
453
440
|
//#region src/storage/contracts/get-presigned-url.input.ts
|
|
454
441
|
const getPresignedUrlInputSchema = z.object({
|
|
455
|
-
path: z.string().min(1,
|
|
442
|
+
path: z.string().min(1, withZodI18n("zodI18n.errors.custom.filePathRequired")),
|
|
456
443
|
method: z.enum([
|
|
457
444
|
"GET",
|
|
458
445
|
"PUT",
|
|
@@ -484,6 +471,26 @@ const uploadResultSchema = z.object({
|
|
|
484
471
|
uploadedAt: z.date()
|
|
485
472
|
});
|
|
486
473
|
//#endregion
|
|
487
|
-
|
|
474
|
+
//#region src/storage/errors/file-too-large.error.ts
|
|
475
|
+
var FileTooLargeError = class extends HttpException {
|
|
476
|
+
size;
|
|
477
|
+
maxSize;
|
|
478
|
+
constructor(size, maxSize) {
|
|
479
|
+
super(413, "File too large");
|
|
480
|
+
this.size = size;
|
|
481
|
+
this.maxSize = maxSize;
|
|
482
|
+
}
|
|
483
|
+
};
|
|
484
|
+
//#endregion
|
|
485
|
+
//#region src/storage/errors/invalid-file-type.error.ts
|
|
486
|
+
var InvalidFileTypeError = class extends HttpException {
|
|
487
|
+
mimeType;
|
|
488
|
+
constructor(mimeType) {
|
|
489
|
+
super(422, "Invalid file type");
|
|
490
|
+
this.mimeType = mimeType;
|
|
491
|
+
}
|
|
492
|
+
};
|
|
493
|
+
//#endregion
|
|
494
|
+
export { presignedUrlResultSchema as a, StorageController as c, StorageService as d, StorageManagerService as f, getPresignedUrlInputSchema as i, FileNotFoundError as l, FileTooLargeError as n, fileExistsInputSchema as o, STORAGE_TOKENS as p, uploadResultSchema as r, deleteFileInputSchema as s, InvalidFileTypeError as t, StorageModule as u };
|
|
488
495
|
|
|
489
|
-
//# sourceMappingURL=storage-
|
|
496
|
+
//# sourceMappingURL=storage-MDZypIE9.mjs.map
|