stratal 0.0.26 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +912 -0
- package/README.md +96 -14
- package/dist/bin/cloudflare-workers-loader.mjs +18 -3
- package/dist/bin/cloudflare-workers-loader.mjs.map +1 -1
- package/dist/bin/quarry.mjs +85 -14
- package/dist/bin/quarry.mjs.map +1 -1
- package/dist/cache/index.d.mts +8 -9
- package/dist/cache/index.d.mts.map +1 -1
- package/dist/cache/index.mjs +56 -17
- package/dist/cache/index.mjs.map +1 -1
- package/dist/{cache.service-uElmBtdS.d.mts → cache.service-Dg0Hj0gp.d.mts} +27 -12
- package/dist/cache.service-Dg0Hj0gp.d.mts.map +1 -0
- package/dist/{command-DoBD2Cwl.d.mts → command-BXMccV_9.d.mts} +6 -3
- package/dist/command-BXMccV_9.d.mts.map +1 -0
- package/dist/{command-BvmUAPPQ.mjs → command-Bb820B6W.mjs} +36 -13
- package/dist/command-Bb820B6W.mjs.map +1 -0
- package/dist/common.schemas-BigQCwYB.mjs +89 -0
- package/dist/common.schemas-BigQCwYB.mjs.map +1 -0
- package/dist/config/index.d.mts +15 -15
- package/dist/config/index.d.mts.map +1 -1
- package/dist/config/index.mjs +4 -6
- package/dist/config/index.mjs.map +1 -1
- package/dist/{consumer-registry-D3iMTSdy.d.mts → consumer-registry-i9oCdarv.d.mts} +2 -3
- package/dist/consumer-registry-i9oCdarv.d.mts.map +1 -0
- package/dist/{container-storage-BmOJ4_Na.mjs → container-storage-DfF7SXdV.mjs} +11 -1
- package/dist/container-storage-DfF7SXdV.mjs.map +1 -0
- package/dist/{controller.decorator-YSTPQntu.mjs → controller.decorator-BB0JcwMg.mjs} +18 -9
- package/dist/controller.decorator-BB0JcwMg.mjs.map +1 -0
- package/dist/cron/index.d.mts +6 -7
- package/dist/cron/index.d.mts.map +1 -1
- package/dist/cron/index.mjs +1 -1
- package/dist/{cron-job-NesZRk8F.d.mts → cron-job-DAgNw4Bn.d.mts} +1 -2
- package/dist/cron-job-DAgNw4Bn.d.mts.map +1 -0
- package/dist/{cron.module-C81HTzR7.mjs → cron.module-Dnyl9sFk.mjs} +6 -7
- package/dist/{cron.module-C81HTzR7.mjs.map → cron.module-Dnyl9sFk.mjs.map} +1 -1
- package/dist/{decorate-CuAoSZvs.mjs → decorate-C79yt3Wt.mjs} +2 -2
- package/dist/di/index.d.mts +1 -1
- package/dist/di/index.mjs +2 -3
- package/dist/{di-D7qmrAir.mjs → di-DQ3xbjgf.mjs} +48 -6
- package/dist/di-DQ3xbjgf.mjs.map +1 -0
- package/dist/email/index.d.mts +158 -133
- package/dist/email/index.d.mts.map +1 -1
- package/dist/email/index.mjs +66 -78
- package/dist/email/index.mjs.map +1 -1
- package/dist/{en-CDZBMcc1.mjs → en-CCL84z4k.mjs} +2 -2
- package/dist/{en-CDZBMcc1.mjs.map → en-CCL84z4k.mjs.map} +1 -1
- package/dist/env-ug22bJj7.d.mts.map +1 -1
- package/dist/errors/index.d.mts +1 -1
- package/dist/errors/index.mjs +3 -3
- package/dist/{errors-C01O2T-n.mjs → errors-CrOXI_y5.mjs} +6 -8
- package/dist/errors-CrOXI_y5.mjs.map +1 -0
- package/dist/events/index.d.mts +8 -9
- package/dist/events/index.d.mts.map +1 -1
- package/dist/events/index.mjs +1 -1
- package/dist/{events-BhEQuT1X.mjs → events-GtwGEHyT.mjs} +5 -6
- package/dist/events-GtwGEHyT.mjs.map +1 -0
- package/dist/{exception-context-D-kvney-.mjs → exception-context-CdnGTQNF.mjs} +13 -7
- package/dist/exception-context-CdnGTQNF.mjs.map +1 -0
- package/dist/{gateway-context-m7kEzRa2.mjs → gateway-context-Cmc1NRS0.mjs} +7 -7
- package/dist/{gateway-context-m7kEzRa2.mjs.map → gateway-context-Cmc1NRS0.mjs.map} +1 -1
- package/dist/gateway-mode-0rUaeW3g.mjs +53 -0
- package/dist/gateway-mode-0rUaeW3g.mjs.map +1 -0
- package/dist/guards/index.d.mts +38 -20
- package/dist/guards/index.d.mts.map +1 -1
- package/dist/guards/index.mjs +2 -2
- package/dist/{guards-DALPXy3_.mjs → guards-DOGly9IF.mjs} +34 -11
- package/dist/guards-DOGly9IF.mjs.map +1 -0
- package/dist/hono-app-IhdqL0Fk.mjs +399 -0
- package/dist/hono-app-IhdqL0Fk.mjs.map +1 -0
- package/dist/{http-method.decorator-BljM8BDj.mjs → http-method.decorator-BDi9LTWj.mjs} +9 -8
- package/dist/http-method.decorator-BDi9LTWj.mjs.map +1 -0
- package/dist/i18n/index.d.mts +26 -137
- package/dist/i18n/index.d.mts.map +1 -1
- package/dist/i18n/index.mjs +4 -5
- package/dist/i18n/index.mjs.map +1 -1
- package/dist/i18n/messages/en/index.d.mts +1 -1
- package/dist/i18n/messages/en/index.mjs +1 -1
- package/dist/i18n/utils/index.d.mts +1 -2
- package/dist/i18n/utils/index.d.mts.map +1 -1
- package/dist/i18n/validation/index.d.mts +80 -5
- package/dist/i18n/validation/index.d.mts.map +1 -0
- package/dist/i18n/validation/index.mjs +4 -5
- package/dist/{i18n.module-B2DvWUPa.mjs → i18n.module-Bm3xlViA.mjs} +28 -13
- package/dist/i18n.module-Bm3xlViA.mjs.map +1 -0
- package/dist/index-0ItCjaqw.d.mts.map +1 -1
- package/dist/{index-CNuFQSNj.d.mts → index-3HJfhLlE.d.mts} +9 -11
- package/dist/index-3HJfhLlE.d.mts.map +1 -0
- package/dist/{index-uybm0bhQ.d.mts → index-B2WtEagR.d.mts} +1187 -234
- package/dist/index-B2WtEagR.d.mts.map +1 -0
- package/dist/index-BUt92sAE.d.mts.map +1 -1
- package/dist/index-CAHNCpvr.d.mts +203 -0
- package/dist/index-CAHNCpvr.d.mts.map +1 -0
- package/dist/index.d.mts +4 -4
- package/dist/index.mjs +2 -2
- package/dist/{is-command-CEPO9n8c.mjs → is-command-CSVv14wh.mjs} +2 -2
- package/dist/{is-command-CEPO9n8c.mjs.map → is-command-CSVv14wh.mjs.map} +1 -1
- package/dist/{is-seeder-Gvh_AM71.mjs → is-seeder-gLgXYbqC.mjs} +2 -2
- package/dist/is-seeder-gLgXYbqC.mjs.map +1 -0
- package/dist/{lazy-module-loader-M6YKudNL.d.mts → lazy-module-loader-C3OHoUnR.d.mts} +4 -5
- package/dist/lazy-module-loader-C3OHoUnR.d.mts.map +1 -0
- package/dist/limit-BE0HNAF6.mjs +116 -0
- package/dist/limit-BE0HNAF6.mjs.map +1 -0
- package/dist/locale-path.service-BqzDIrgy.mjs +213 -0
- package/dist/locale-path.service-BqzDIrgy.mjs.map +1 -0
- package/dist/locale-url-nZrZxqJP.mjs.map +1 -1
- package/dist/{locale-url.service-6bgia24_.mjs → locale-url.service-H8PH6GGh.mjs} +15 -5
- package/dist/{locale-url.service-6bgia24_.mjs.map → locale-url.service-H8PH6GGh.mjs.map} +1 -1
- package/dist/logger/index.mjs +3 -5
- package/dist/logger/index.mjs.map +1 -1
- package/dist/macroable-cvDTFZ_A.mjs.map +1 -1
- package/dist/metadata-Ba8Fxs1F.mjs +48 -0
- package/dist/metadata-Ba8Fxs1F.mjs.map +1 -0
- package/dist/module/index.d.mts +8 -9
- package/dist/module/index.d.mts.map +1 -1
- package/dist/module/index.mjs +3 -4
- package/dist/module/index.mjs.map +1 -1
- package/dist/{module-registry-NxX5O0Qk.mjs → module-registry-lkQPDuQe.mjs} +17 -15
- package/dist/module-registry-lkQPDuQe.mjs.map +1 -0
- package/dist/{module.decorator-CYHY6pG5.mjs → module.decorator-CYbrOlX9.mjs} +2 -2
- package/dist/{module.decorator-CYHY6pG5.mjs.map → module.decorator-CYbrOlX9.mjs.map} +1 -1
- package/dist/openapi/index.d.mts +19 -16
- package/dist/openapi/index.d.mts.map +1 -1
- package/dist/openapi/index.mjs +2 -2
- package/dist/{openapi-CMwuCp31.mjs → openapi-DBfBa5Qh.mjs} +41 -65
- package/dist/openapi-DBfBa5Qh.mjs.map +1 -0
- package/dist/openapi-generator-CCwiu8AU.mjs +134 -0
- package/dist/openapi-generator-CCwiu8AU.mjs.map +1 -0
- package/dist/{openapi-tools.service-BC5EC3R3.mjs → openapi-tools.service-VKZJlTIX.mjs} +12 -4
- package/dist/openapi-tools.service-VKZJlTIX.mjs.map +1 -0
- package/dist/openapi.service-Ds-R1tih.d.mts +43 -0
- package/dist/openapi.service-Ds-R1tih.d.mts.map +1 -0
- package/dist/quarry/index.d.mts +10 -11
- package/dist/quarry/index.d.mts.map +1 -1
- package/dist/quarry/index.mjs +4 -4
- package/dist/quarry/runner.d.mts +19 -20
- package/dist/quarry/runner.d.mts.map +1 -1
- package/dist/quarry/runner.mjs +16 -13
- package/dist/quarry/runner.mjs.map +1 -1
- package/dist/{quarry-registry-DRnV-DDa.d.mts → quarry-registry-Ci4k58FZ.d.mts} +3 -4
- package/dist/quarry-registry-Ci4k58FZ.d.mts.map +1 -0
- package/dist/{quarry.module-CcGxU2dJ.mjs → quarry.module-BssRR8f0.mjs} +20 -37
- package/dist/quarry.module-BssRR8f0.mjs.map +1 -0
- package/dist/queue/index.d.mts +2 -2
- package/dist/queue/index.mjs +3 -3
- package/dist/queue/index.mjs.map +1 -1
- package/dist/{queue.module-CEs4_kEM.mjs → queue.module-DnAdSbR-.mjs} +40 -41
- package/dist/queue.module-DnAdSbR-.mjs.map +1 -0
- package/dist/{r2-storage.provider-BoZmR6Ut.mjs → r2-storage.provider-wU_6api4.mjs} +45 -6
- package/dist/r2-storage.provider-wU_6api4.mjs.map +1 -0
- package/dist/{rate-limit.decorator-Djs4oYDB.mjs → rate-limit.decorator-PYQ9EYqs.mjs} +10 -5
- package/dist/{rate-limit.decorator-Djs4oYDB.mjs.map → rate-limit.decorator-PYQ9EYqs.mjs.map} +1 -1
- package/dist/rate-limiter/index.d.mts +64 -19
- package/dist/rate-limiter/index.d.mts.map +1 -1
- package/dist/rate-limiter/index.mjs +67 -83
- package/dist/rate-limiter/index.mjs.map +1 -1
- package/dist/response-cache/index.d.mts +326 -0
- package/dist/response-cache/index.d.mts.map +1 -0
- package/dist/response-cache/index.mjs +511 -0
- package/dist/response-cache/index.mjs.map +1 -0
- package/dist/response-cache.error-B4D0zy9W.mjs +24 -0
- package/dist/response-cache.error-B4D0zy9W.mjs.map +1 -0
- package/dist/response-headers-BqA57S_X.mjs +158 -0
- package/dist/response-headers-BqA57S_X.mjs.map +1 -0
- package/dist/rolldown-runtime-D7D4PA-g.mjs +13 -0
- package/dist/route-cache-binding-CrLh8tB6.mjs +390 -0
- package/dist/route-cache-binding-CrLh8tB6.mjs.map +1 -0
- package/dist/route-metadata-QQhbed1i.mjs +17 -0
- package/dist/route-metadata-QQhbed1i.mjs.map +1 -0
- package/dist/{route-name-DGoBOfPg.mjs → route-name-BslSbmMP.mjs} +15 -11
- package/dist/route-name-BslSbmMP.mjs.map +1 -0
- package/dist/route-registration.service-COKBZTsn.mjs +1265 -0
- package/dist/route-registration.service-COKBZTsn.mjs.map +1 -0
- package/dist/{route-registry-BvLJisvK.mjs → route-registry-DFz9_-N6.mjs} +6 -6
- package/dist/{route-registry-BvLJisvK.mjs.map → route-registry-DFz9_-N6.mjs.map} +1 -1
- package/dist/router/index.d.mts +2 -2
- package/dist/router/index.mjs +16 -15
- package/dist/{router-resolver-sUV_jTrU.mjs → router-resolver-B-dMSMIG.mjs} +7 -3
- package/dist/router-resolver-B-dMSMIG.mjs.map +1 -0
- package/dist/{router-DwyqEXgf.mjs → router-wlsVkGkM.mjs} +5 -14
- package/dist/{router-DwyqEXgf.mjs.map → router-wlsVkGkM.mjs.map} +1 -1
- package/dist/seeder/index.d.mts +12 -13
- package/dist/seeder/index.d.mts.map +1 -1
- package/dist/seeder/index.mjs +4 -4
- package/dist/{seeder-BPGY5rUb.mjs → seeder-BrAk7XIj.mjs} +5 -6
- package/dist/{seeder-BPGY5rUb.mjs.map → seeder-BrAk7XIj.mjs.map} +1 -1
- package/dist/{seeder-registry-DEvCycsT.mjs → seeder-registry-Bo5BgLbC.mjs} +5 -6
- package/dist/{seeder-registry-DEvCycsT.mjs.map → seeder-registry-Bo5BgLbC.mjs.map} +1 -1
- package/dist/{seeder.module-CIwQbdN4.mjs → seeder.module-DOoVgTsK.mjs} +5 -5
- package/dist/{seeder.module-CIwQbdN4.mjs.map → seeder.module-DOoVgTsK.mjs.map} +1 -1
- package/dist/signed-url-DIU0sK_6.mjs.map +1 -1
- package/dist/storage/index.d.mts +63 -13
- package/dist/storage/index.d.mts.map +1 -1
- package/dist/storage/index.mjs +2 -2
- package/dist/storage/providers/index.d.mts +18 -16
- package/dist/storage/providers/index.d.mts.map +1 -1
- package/dist/storage/providers/index.mjs +1 -1
- package/dist/{storage-C30X81CS.mjs → storage-DBWVYMnn.mjs} +167 -49
- package/dist/storage-DBWVYMnn.mjs.map +1 -0
- package/dist/storage-provider.interface-CinHpjl1.d.mts +315 -0
- package/dist/storage-provider.interface-CinHpjl1.d.mts.map +1 -0
- package/dist/storage.error-Ao38Qdjx.mjs +7 -0
- package/dist/storage.error-Ao38Qdjx.mjs.map +1 -0
- package/dist/{stratal-D5j_I14G.d.mts → stratal-Bs1_E8GQ.d.mts} +13 -3
- package/dist/stratal-Bs1_E8GQ.d.mts.map +1 -0
- package/dist/{stratal-BL6FKUM_.mjs → stratal-CiwNpWy2.mjs} +56 -23
- package/dist/stratal-CiwNpWy2.mjs.map +1 -0
- package/dist/{tiered-cache.service-Dv3BhxxE.d.mts → tiered-cache.service-Bz8bbvyb.d.mts} +16 -3
- package/dist/tiered-cache.service-Bz8bbvyb.d.mts.map +1 -0
- package/dist/trailing-slash-2SctvePW.mjs.map +1 -1
- package/dist/types-CmV_9xBD.d.mts.map +1 -1
- package/dist/{uri-iwofWJ_T.mjs → uri-BrOq148R.mjs} +13 -9
- package/dist/{uri-iwofWJ_T.mjs.map → uri-BrOq148R.mjs.map} +1 -1
- package/dist/{usage-generator-DAWYasuP.mjs → usage-generator-BW7EcO-C.mjs} +3 -3
- package/dist/{usage-generator-DAWYasuP.mjs.map → usage-generator-BW7EcO-C.mjs.map} +1 -1
- package/dist/{zod-eKqqhZ5_.mjs → validation-CZ_B0aXY.mjs} +38 -17
- package/dist/validation-CZ_B0aXY.mjs.map +1 -0
- package/dist/{validation.context-CRvmrhq7.mjs → validation.context-CdbwQWIr.mjs} +2 -2
- package/dist/{validation.context-CRvmrhq7.mjs.map → validation.context-CdbwQWIr.mjs.map} +1 -1
- package/dist/{versioning.service-CCa2oYMJ.mjs → versioning.service-DnF_4Lnd.mjs} +5 -5
- package/dist/{versioning.service-CCa2oYMJ.mjs.map → versioning.service-DnF_4Lnd.mjs.map} +1 -1
- package/dist/websocket/index.d.mts +12 -13
- package/dist/websocket/index.d.mts.map +1 -1
- package/dist/websocket/index.mjs +1 -1
- package/dist/workers/index.d.mts +70 -7
- package/dist/workers/index.d.mts.map +1 -1
- package/dist/workers/index.mjs +72 -3
- package/dist/workers/index.mjs.map +1 -1
- package/dist/{zod-wecrEVAs.d.mts → zod-BGisqLs3.d.mts} +9 -16
- package/dist/zod-BGisqLs3.d.mts.map +1 -0
- package/package.json +33 -25
- package/dist/cache.service-uElmBtdS.d.mts.map +0 -1
- package/dist/chunk-BBjsoOtd.mjs +0 -27
- package/dist/command-BvmUAPPQ.mjs.map +0 -1
- package/dist/command-DoBD2Cwl.d.mts.map +0 -1
- package/dist/consumer-registry-D3iMTSdy.d.mts.map +0 -1
- package/dist/container-storage-BmOJ4_Na.mjs.map +0 -1
- package/dist/controller.decorator-YSTPQntu.mjs.map +0 -1
- package/dist/cron-job-NesZRk8F.d.mts.map +0 -1
- package/dist/di-D7qmrAir.mjs.map +0 -1
- package/dist/errors-C01O2T-n.mjs.map +0 -1
- package/dist/events-BhEQuT1X.mjs.map +0 -1
- package/dist/exception-context-D-kvney-.mjs.map +0 -1
- package/dist/guards-DALPXy3_.mjs.map +0 -1
- package/dist/hono-app-COAgmutc.mjs +0 -168
- package/dist/hono-app-COAgmutc.mjs.map +0 -1
- package/dist/http-method.decorator-BljM8BDj.mjs.map +0 -1
- package/dist/i18n.module-B2DvWUPa.mjs.map +0 -1
- package/dist/index-CNuFQSNj.d.mts.map +0 -1
- package/dist/index-DtBNIFuP.d.mts +0 -42
- package/dist/index-DtBNIFuP.d.mts.map +0 -1
- package/dist/index-HgOLNruQ.d.mts +0 -203
- package/dist/index-HgOLNruQ.d.mts.map +0 -1
- package/dist/index-uybm0bhQ.d.mts.map +0 -1
- package/dist/is-seeder-Gvh_AM71.mjs.map +0 -1
- package/dist/lazy-module-loader-M6YKudNL.d.mts.map +0 -1
- package/dist/locale-path.service-CH0CaxwH.mjs +0 -165
- package/dist/locale-path.service-CH0CaxwH.mjs.map +0 -1
- package/dist/metadata-DzzprcID.mjs +0 -39
- package/dist/metadata-DzzprcID.mjs.map +0 -1
- package/dist/module-registry-NxX5O0Qk.mjs.map +0 -1
- package/dist/openapi-CMwuCp31.mjs.map +0 -1
- package/dist/openapi-tools.service-BC5EC3R3.mjs.map +0 -1
- package/dist/openapi.service-2rvJBCEg.d.mts +0 -50
- package/dist/openapi.service-2rvJBCEg.d.mts.map +0 -1
- package/dist/quarry-registry-DRnV-DDa.d.mts.map +0 -1
- package/dist/quarry.module-CcGxU2dJ.mjs.map +0 -1
- package/dist/queue.module-CEs4_kEM.mjs.map +0 -1
- package/dist/r2-storage.provider-BoZmR6Ut.mjs.map +0 -1
- package/dist/route-name-DGoBOfPg.mjs.map +0 -1
- package/dist/route-registration.service-CDPQKpm4.mjs +0 -918
- package/dist/route-registration.service-CDPQKpm4.mjs.map +0 -1
- package/dist/router-resolver-sUV_jTrU.mjs.map +0 -1
- package/dist/storage-C30X81CS.mjs.map +0 -1
- package/dist/storage-provider.interface-ClUwxz4S.d.mts +0 -201
- package/dist/storage-provider.interface-ClUwxz4S.d.mts.map +0 -1
- package/dist/storage.error-BStXPmO4.mjs +0 -8
- package/dist/storage.error-BStXPmO4.mjs.map +0 -1
- package/dist/stratal-BL6FKUM_.mjs.map +0 -1
- package/dist/stratal-D5j_I14G.d.mts.map +0 -1
- package/dist/tiered-cache.service-Dv3BhxxE.d.mts.map +0 -1
- package/dist/validation-CpOjviyT.mjs +0 -49
- package/dist/validation-CpOjviyT.mjs.map +0 -1
- package/dist/zod-eKqqhZ5_.mjs.map +0 -1
- package/dist/zod-wecrEVAs.d.mts.map +0 -1
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { p as inject } from "./di-
|
|
2
|
-
import { n as __decorateParam, t as __decorate } from "./decorate-
|
|
3
|
-
import { t as Command } from "./command-
|
|
4
|
-
import { t as SEEDER_TOKENS } from "./seeder-registry-
|
|
5
|
-
import "./seeder.module-CIwQbdN4.mjs";
|
|
1
|
+
import { p as inject } from "./di-DQ3xbjgf.mjs";
|
|
2
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-C79yt3Wt.mjs";
|
|
3
|
+
import { t as Command } from "./command-Bb820B6W.mjs";
|
|
4
|
+
import { t as SEEDER_TOKENS } from "./seeder-registry-Bo5BgLbC.mjs";
|
|
6
5
|
//#region src/seeder/commands/db-seed-list.command.ts
|
|
7
6
|
let DbSeedListCommand = class DbSeedListCommand extends Command {
|
|
8
7
|
seeders;
|
|
@@ -78,4 +77,4 @@ DbSeedCommand = __decorate([__decorateParam(0, inject(SEEDER_TOKENS.SeederRegist
|
|
|
78
77
|
//#endregion
|
|
79
78
|
export { DbSeedListCommand as n, DbSeedCommand as t };
|
|
80
79
|
|
|
81
|
-
//# sourceMappingURL=seeder-
|
|
80
|
+
//# sourceMappingURL=seeder-BrAk7XIj.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeder-
|
|
1
|
+
{"version":3,"file":"seeder-BrAk7XIj.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,IAAM,oBAAN,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;AAde,oBAAA,WAAA,CAAA,gBAAA,GAAA,OAAO,cAAc,cAAc,CAAA,CAAA,GAAA,iBAAA;;;ACJ3C,IAAM,gBAAN,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;AAxDe,gBAAA,WAAA,CAAA,gBAAA,GAAA,OAAO,cAAc,cAAc,CAAA,CAAA,GAAA,aAAA"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { l as Singleton, p as inject, r as DI_TOKENS } from "./di-
|
|
2
|
-
import { a as ApplicationError } from "./container-storage-
|
|
3
|
-
import { n as __decorateParam, t as __decorate } from "./decorate-
|
|
4
|
-
import "./
|
|
5
|
-
import { n as SEEDER_INTERNALS } from "./is-seeder-Gvh_AM71.mjs";
|
|
1
|
+
import { l as Singleton, p as inject, r as DI_TOKENS } from "./di-DQ3xbjgf.mjs";
|
|
2
|
+
import { a as ApplicationError } from "./container-storage-DfF7SXdV.mjs";
|
|
3
|
+
import { n as __decorateParam, t as __decorate } from "./decorate-C79yt3Wt.mjs";
|
|
4
|
+
import { n as SEEDER_INTERNALS } from "./is-seeder-gLgXYbqC.mjs";
|
|
6
5
|
//#region src/seeder/seeder.error.ts
|
|
7
6
|
var SeederError = class extends ApplicationError {};
|
|
8
7
|
//#endregion
|
|
@@ -54,4 +53,4 @@ SeederRegistry = __decorate([Singleton(SEEDER_TOKENS.SeederRegistry), __decorate
|
|
|
54
53
|
//#endregion
|
|
55
54
|
export { SeederRegistry as n, SeederError as r, SEEDER_TOKENS as t };
|
|
56
55
|
|
|
57
|
-
//# sourceMappingURL=seeder-registry-
|
|
56
|
+
//# sourceMappingURL=seeder-registry-Bo5BgLbC.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeder-registry-
|
|
1
|
+
{"version":3,"file":"seeder-registry-Bo5BgLbC.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,IAAM,iBAAN,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,CAAC,CAAC,KAAI,SAAQ,EAAE,WAAW,IAAI,KAAK,EAAE;CAC/D;AACF;AAvDC,iBAAA,WAAA,CAAA,UAAU,cAAc,cAAc,GAAA,gBAAA,GAKxB,OAAO,UAAU,WAAW,CAAA,CAAA,GAAA,cAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { t as __exportAll } from "./
|
|
2
|
-
import { t as __decorate } from "./decorate-
|
|
3
|
-
import { n as Module } from "./module.decorator-
|
|
4
|
-
import { n as SeederRegistry, t as SEEDER_TOKENS } from "./seeder-registry-
|
|
1
|
+
import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
|
|
2
|
+
import { t as __decorate } from "./decorate-C79yt3Wt.mjs";
|
|
3
|
+
import { n as Module } from "./module.decorator-CYbrOlX9.mjs";
|
|
4
|
+
import { n as SeederRegistry, t as SEEDER_TOKENS } from "./seeder-registry-Bo5BgLbC.mjs";
|
|
5
5
|
//#region src/seeder/seeder.module.ts
|
|
6
6
|
var seeder_module_exports = /* @__PURE__ */ __exportAll({ SeederModule: () => SeederModule });
|
|
7
7
|
let SeederModule = class SeederModule {};
|
|
@@ -12,4 +12,4 @@ SeederModule = __decorate([Module({ providers: [{
|
|
|
12
12
|
//#endregion
|
|
13
13
|
export { seeder_module_exports as n, SeederModule as t };
|
|
14
14
|
|
|
15
|
-
//# sourceMappingURL=seeder.module-
|
|
15
|
+
//# sourceMappingURL=seeder.module-DOoVgTsK.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"seeder.module-
|
|
1
|
+
{"version":3,"file":"seeder.module-DOoVgTsK.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,IAAM,eAAN,MAAM,aAAa,CAAE;AAL3B,eAAA,WAAA,CAAA,OAAO,EACN,WAAW,CACT;CAAE,SAAS,cAAc;CAAgB,UAAU;AAAe,CACpE,EACF,CAAC,CAAA,GAAA,YAAA"}
|
|
@@ -1 +1 @@
|
|
|
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,
|
|
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,CAAC,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC,QAAQ,OAAO,GAAG,CAAC,CAAC,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,CAAC,CAAC,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,14 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Jn as AsyncModuleOptions, Xn as DynamicModule, l as HttpException, li as ApplicationError, st as RouterContext } from "../index-B2WtEagR.mjs";
|
|
2
2
|
import { t as StratalEnv } from "../env-ug22bJj7.mjs";
|
|
3
|
-
import { _ as
|
|
4
|
-
|
|
3
|
+
import { _ as deleteFileInputSchema, a as uploadResultSchema, b as StorageEntry, c as HeadResult, d as getPresignedUrlInputSchema, f as presignedUrlResultSchema, g as DeleteFileInput, h as DownloadResult, i as UploadResult, l as GetPresignedUrlInput, m as fileExistsInputSchema, n as StreamingBlobPayloadInputTypes, o as ListOptions, p as FileExistsInput, r as UploadOptions, s as ListResult, t as IStorageProvider, u as PresignedUrlResult, v as PresignedUrlConfig, x as StorageRouteConfig, y as StorageConfig } from "../storage-provider.interface-CinHpjl1.mjs";
|
|
5
4
|
//#region src/storage/storage.module.d.ts
|
|
6
5
|
/**
|
|
7
6
|
* Storage module options
|
|
8
7
|
* Same as StorageConfig from types.ts
|
|
9
8
|
*/
|
|
10
9
|
type StorageModuleOptions = StorageConfig;
|
|
11
|
-
declare class StorageModule {
|
|
10
|
+
export declare class StorageModule {
|
|
12
11
|
/**
|
|
13
12
|
* Configure StorageModule with static options
|
|
14
13
|
*
|
|
@@ -47,7 +46,7 @@ declare class StorageModule {
|
|
|
47
46
|
* Dependency injection tokens for the Storage module
|
|
48
47
|
* Using Symbol-based tokens to avoid magic strings
|
|
49
48
|
*/
|
|
50
|
-
declare const STORAGE_TOKENS: {
|
|
49
|
+
export declare const STORAGE_TOKENS: {
|
|
51
50
|
readonly Options: symbol;
|
|
52
51
|
readonly StorageService: symbol;
|
|
53
52
|
readonly StorageManager: symbol;
|
|
@@ -59,7 +58,7 @@ declare const STORAGE_TOKENS: {
|
|
|
59
58
|
* Manages multiple storage providers (one per disk)
|
|
60
59
|
* Handles lazy initialization and caching of R2 providers
|
|
61
60
|
*/
|
|
62
|
-
declare class StorageManagerService {
|
|
61
|
+
export declare class StorageManagerService {
|
|
63
62
|
private readonly options;
|
|
64
63
|
private readonly env;
|
|
65
64
|
private readonly providers;
|
|
@@ -118,7 +117,7 @@ declare class StorageManagerService {
|
|
|
118
117
|
* await this.storage.upload(file, 'documents/report.pdf')
|
|
119
118
|
* ```
|
|
120
119
|
*/
|
|
121
|
-
declare class StorageService {
|
|
120
|
+
export declare class StorageService {
|
|
122
121
|
protected readonly storageManager: StorageManagerService;
|
|
123
122
|
protected readonly options: StorageConfig;
|
|
124
123
|
constructor(storageManager: StorageManagerService, options: StorageConfig);
|
|
@@ -151,6 +150,44 @@ declare class StorageService {
|
|
|
151
150
|
* @returns True if file exists, false otherwise
|
|
152
151
|
*/
|
|
153
152
|
exists(relativePath: string, disk?: string): Promise<boolean>;
|
|
153
|
+
/**
|
|
154
|
+
* Delete many files in one call
|
|
155
|
+
*
|
|
156
|
+
* Providers delete in bulk — R2 takes 1000 keys per round trip — so this costs a fraction of
|
|
157
|
+
* the subrequests that looping over `delete` would. Paths that do not exist are ignored.
|
|
158
|
+
*
|
|
159
|
+
* @param relativePaths - Relative paths within the disk
|
|
160
|
+
* @param disk - Optional disk name (uses default if not provided)
|
|
161
|
+
*/
|
|
162
|
+
deleteMany(relativePaths: string[], disk?: string): Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* Read an object's metadata without transferring its body
|
|
165
|
+
*
|
|
166
|
+
* Use this to learn a file's size or content type when the contents are not needed — asking
|
|
167
|
+
* `head` for a hundred objects costs a hundred metadata reads, where `download` would move a
|
|
168
|
+
* hundred bodies.
|
|
169
|
+
*
|
|
170
|
+
* @param relativePath - Relative path within the disk
|
|
171
|
+
* @param disk - Optional disk name (uses default if not provided)
|
|
172
|
+
* @returns Metadata, or null when nothing exists at that path
|
|
173
|
+
*/
|
|
174
|
+
head(relativePath: string, disk?: string): Promise<HeadResult | null>;
|
|
175
|
+
/**
|
|
176
|
+
* List objects on a disk, one page at a time
|
|
177
|
+
*
|
|
178
|
+
* **The result is a page, not the whole set.** Providers cap a single listing (R2 at 1000
|
|
179
|
+
* objects), so anything that aggregates across a prefix — summing sizes, counting files,
|
|
180
|
+
* copying a tree — must loop while `truncated` is true, passing `cursor` back in. Reading only
|
|
181
|
+
* the first page yields an answer that is quietly too small, with nothing having failed.
|
|
182
|
+
*
|
|
183
|
+
* Returned paths are relative to the disk, so they can be passed straight to `download`,
|
|
184
|
+
* `head` or `delete`.
|
|
185
|
+
*
|
|
186
|
+
* @param options - Prefix (relative to the disk), cursor and page limit
|
|
187
|
+
* @param disk - Optional disk name (uses default if not provided)
|
|
188
|
+
* @returns One page of matching objects
|
|
189
|
+
*/
|
|
190
|
+
list(options?: ListOptions, disk?: string): Promise<ListResult>;
|
|
154
191
|
/**
|
|
155
192
|
* Generate a presigned download URL
|
|
156
193
|
* @param relativePath - Relative path within the disk
|
|
@@ -197,6 +234,19 @@ declare class StorageService {
|
|
|
197
234
|
* @returns Full path including disk root
|
|
198
235
|
*/
|
|
199
236
|
protected buildFullPath(relativePath: string, diskName: string): string;
|
|
237
|
+
/**
|
|
238
|
+
* Strip the disk root from a provider path
|
|
239
|
+
*
|
|
240
|
+
* The inverse of `buildFullPath`, so what `head`/`list` hand back is what `download`/`delete`
|
|
241
|
+
* accept. A path that does not start with the root is returned unchanged rather than mangled —
|
|
242
|
+
* that can only happen if a provider returned something outside the disk, and silently trimming
|
|
243
|
+
* a prefix off it would disguise the fault as a valid path.
|
|
244
|
+
*
|
|
245
|
+
* @param fullPath - Path as the provider reported it
|
|
246
|
+
* @param diskName - Name of the disk
|
|
247
|
+
* @returns Path relative to the disk root
|
|
248
|
+
*/
|
|
249
|
+
protected toRelativePath(fullPath: string, diskName: string): string;
|
|
200
250
|
/**
|
|
201
251
|
* Substitute template variables in path
|
|
202
252
|
* Override this method in subclasses to add custom substitutions
|
|
@@ -249,7 +299,7 @@ declare class StorageService {
|
|
|
249
299
|
* - PUT /storage/:disk/* → upload file
|
|
250
300
|
* - DELETE /storage/:disk/* → delete file
|
|
251
301
|
*/
|
|
252
|
-
declare class StorageController {
|
|
302
|
+
export declare class StorageController {
|
|
253
303
|
private readonly storage;
|
|
254
304
|
constructor(storage: StorageService);
|
|
255
305
|
download(ctx: RouterContext): Promise<Response>;
|
|
@@ -258,25 +308,25 @@ declare class StorageController {
|
|
|
258
308
|
}
|
|
259
309
|
//#endregion
|
|
260
310
|
//#region src/storage/errors/file-not-found.error.d.ts
|
|
261
|
-
declare class FileNotFoundError extends HttpException {
|
|
311
|
+
export declare class FileNotFoundError extends HttpException {
|
|
262
312
|
constructor(path?: string);
|
|
263
313
|
}
|
|
264
314
|
//#endregion
|
|
265
315
|
//#region src/storage/errors/file-too-large.error.d.ts
|
|
266
|
-
declare class FileTooLargeError extends HttpException {
|
|
316
|
+
export declare class FileTooLargeError extends HttpException {
|
|
267
317
|
readonly size?: number | undefined;
|
|
268
318
|
readonly maxSize?: number | undefined;
|
|
269
319
|
constructor(size?: number | undefined, maxSize?: number | undefined);
|
|
270
320
|
}
|
|
271
321
|
//#endregion
|
|
272
322
|
//#region src/storage/errors/invalid-file-type.error.d.ts
|
|
273
|
-
declare class InvalidFileTypeError extends HttpException {
|
|
323
|
+
export declare class InvalidFileTypeError extends HttpException {
|
|
274
324
|
readonly mimeType?: string | undefined;
|
|
275
325
|
constructor(mimeType?: string | undefined);
|
|
276
326
|
}
|
|
277
327
|
//#endregion
|
|
278
328
|
//#region src/storage/storage.error.d.ts
|
|
279
|
-
declare class StorageError extends ApplicationError {}
|
|
329
|
+
export declare class StorageError extends ApplicationError {}
|
|
280
330
|
//#endregion
|
|
281
|
-
export { DeleteFileInput, DownloadResult, FileExistsInput,
|
|
331
|
+
export { DeleteFileInput, DownloadResult, FileExistsInput, GetPresignedUrlInput, HeadResult, type IStorageProvider, ListOptions, ListResult, type PresignedUrlConfig, PresignedUrlResult, type StorageConfig, type StorageEntry, type StorageRouteConfig, type StreamingBlobPayloadInputTypes, UploadOptions, UploadResult, deleteFileInputSchema, fileExistsInputSchema, getPresignedUrlInputSchema, presignedUrlResultSchema, uploadResultSchema };
|
|
282
332
|
//# 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/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":"
|
|
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":";;;;;;;;KAiBY,uBAAuB;qBAQtB;;;;;;;;;;;;;SAaJ,QAAQ,SAAS,uBAAuB;;;;;;;;;;;;;;;;;;SA0BxC,aAAa,SAAS,mBAAmB,wBAAwB;;;;;;;;qBC5D7D;WACX;WACA;WACA;;;;;;;;;qBCQW;mBAOQ;mBAEA;mBARF;mBACA;mBACA;EAEjB,YAEmB,SAAS,eAET,KAAK;;;;UAQhB;;;;;;;EAYF,YAAY,mBAAmB,QAAQ;;;;;;;UAwC/B;;;;;;EAcd,cAAc,mBAAmB;;;;;;EAajC,QAAQ;;;;;EAQR;;;;;;;;;;;;;;;;;;qBCvFW;qBAGU,gBAAgB;qBAEhB,SAAS;EAJ9B,YAEqB,gBAAgB,uBAEhB,SAAS;;;;;;;;;EAWxB,OACJ,MAAM,gCACN,sBACA,SAAS,eACT,gBACC,QAAQ;;;;;;;EAcL,SAAS,sBAAsB,gBAAgB,QAAQ;;;;;;EAavD,OAAO,sBAAsB,gBAAgB;;;;;;;EAc7C,OAAO,sBAAsB,gBAAgB;;;;;;;;;;EAiB7C,WAAW,yBAAyB,gBAAgB;;;;;;;;;;;;EAsBpD,KAAK,sBAAsB,gBAAgB,QAAQ;;;;;;;;;;;;;;;;EA4BnD,KAAK,UAAS,aAAkB,gBAAgB,QAAQ;;;;;;;;EAyBxD,wBACJ,sBACA,oBACA,gBACC,QAAQ;;;;;;;;EAWL,sBACJ,sBACA,oBACA,gBACC,QAAQ;;;;;;;;EAWL,sBACJ,sBACA,oBACA,gBACC,QAAQ;;;;;;;;;YAYK,gBACd,sBACA,2CACA,oBACA,gBACC,QAAQ;;;;;;YAcD,YAAY;;;;;;;YAgBZ,cAAc,sBAAsB;;;;;;;;;;;;;YAyBpC,eAAe,kBAAkB;;;;;;;;YAgBjC,4BAA4B;;;;;;YAiB5B,kBAAkB;;;;;EAkB5B;;;;;;;;;;;;;;;;EAmBM,cACJ,MAAM,gCACN,sBACA,SAAS,KAAK;IAA2B;KACzC,gBACC,QAAQ;;;;;;;;;;;;;;;;qBClTA;mBAGQ;EAFnB,YAEmB,SAAS;EAItB,SAAS,KAAK,gBAAgB,QAAQ;EAkCtC,OAAO,KAAK,gBAAgB,QAAQ;EAiBpC,QAAQ,KAAK,gBAAgB,QAAQ;;;;qBCrHhC,0BAA0B;EACrC,YAAY;;;;qBCDD,0BAA0B;WACT;WAA+B;EAA3D,YAA4B,2BAA+B;;;;qBCDhD,6BAA6B;WACZ;EAA5B,YAA4B;;;;qBCDjB,qBAAqB"}
|
package/dist/storage/index.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as StorageError } from "../storage.error-
|
|
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-
|
|
1
|
+
import { t as StorageError } from "../storage.error-Ao38Qdjx.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-DBWVYMnn.mjs";
|
|
3
3
|
export { FileNotFoundError, FileTooLargeError, InvalidFileTypeError, STORAGE_TOKENS, StorageController, StorageError, StorageManagerService, StorageModule, StorageService, deleteFileInputSchema, fileExistsInputSchema, getPresignedUrlInputSchema, presignedUrlResultSchema, uploadResultSchema };
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { t as StratalEnv } from "../../env-ug22bJj7.mjs";
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { b as StorageEntry, c as HeadResult, h as DownloadResult, i as UploadResult, n as StreamingBlobPayloadInputTypes, o as ListOptions, r as UploadOptions, s as ListResult, t as IStorageProvider, u as PresignedUrlResult, x as StorageRouteConfig } from "../../storage-provider.interface-CinHpjl1.mjs";
|
|
4
3
|
//#region src/storage/providers/multipart-provider.interface.d.ts
|
|
5
4
|
/**
|
|
6
5
|
* Options for creating a multipart upload
|
|
7
6
|
*/
|
|
8
|
-
interface CreateMultipartOptions {
|
|
7
|
+
export interface CreateMultipartOptions {
|
|
9
8
|
/** Content type (MIME type) */
|
|
10
9
|
contentType?: string;
|
|
11
10
|
/** Cache control header */
|
|
@@ -16,7 +15,7 @@ interface CreateMultipartOptions {
|
|
|
16
15
|
/**
|
|
17
16
|
* Result of creating a multipart upload
|
|
18
17
|
*/
|
|
19
|
-
interface CreateMultipartResult {
|
|
18
|
+
export interface CreateMultipartResult {
|
|
20
19
|
/** Upload ID for subsequent part uploads */
|
|
21
20
|
uploadId: string;
|
|
22
21
|
/** Object key */
|
|
@@ -25,7 +24,7 @@ interface CreateMultipartResult {
|
|
|
25
24
|
/**
|
|
26
25
|
* Result of uploading a part
|
|
27
26
|
*/
|
|
28
|
-
interface UploadPartResult {
|
|
27
|
+
export interface UploadPartResult {
|
|
29
28
|
/** ETag returned by the storage provider */
|
|
30
29
|
etag: string;
|
|
31
30
|
/** Part number */
|
|
@@ -34,7 +33,7 @@ interface UploadPartResult {
|
|
|
34
33
|
/**
|
|
35
34
|
* Part info for completing multipart upload
|
|
36
35
|
*/
|
|
37
|
-
interface CompletedPart {
|
|
36
|
+
export interface CompletedPart {
|
|
38
37
|
/** ETag from uploadPart */
|
|
39
38
|
etag: string;
|
|
40
39
|
/** Part number */
|
|
@@ -43,7 +42,7 @@ interface CompletedPart {
|
|
|
43
42
|
/**
|
|
44
43
|
* Result of completing a multipart upload
|
|
45
44
|
*/
|
|
46
|
-
interface CompleteMultipartResult {
|
|
45
|
+
export interface CompleteMultipartResult {
|
|
47
46
|
/** Location URL */
|
|
48
47
|
location?: string;
|
|
49
48
|
/** Object key */
|
|
@@ -52,7 +51,7 @@ interface CompleteMultipartResult {
|
|
|
52
51
|
/**
|
|
53
52
|
* Individual part info from listParts
|
|
54
53
|
*/
|
|
55
|
-
interface PartInfo {
|
|
54
|
+
export interface PartInfo {
|
|
56
55
|
/** Part number */
|
|
57
56
|
partNumber: number;
|
|
58
57
|
/** ETag */
|
|
@@ -63,7 +62,7 @@ interface PartInfo {
|
|
|
63
62
|
/**
|
|
64
63
|
* Result of listing parts
|
|
65
64
|
*/
|
|
66
|
-
interface ListPartsResult {
|
|
65
|
+
export interface ListPartsResult {
|
|
67
66
|
/** List of uploaded parts */
|
|
68
67
|
parts: PartInfo[];
|
|
69
68
|
/** Whether there are more parts */
|
|
@@ -74,7 +73,7 @@ interface ListPartsResult {
|
|
|
74
73
|
/**
|
|
75
74
|
* Individual upload info from listMultipartUploads
|
|
76
75
|
*/
|
|
77
|
-
interface MultipartUploadInfo {
|
|
76
|
+
export interface MultipartUploadInfo {
|
|
78
77
|
/** Object key */
|
|
79
78
|
key: string;
|
|
80
79
|
/** Upload ID */
|
|
@@ -85,7 +84,7 @@ interface MultipartUploadInfo {
|
|
|
85
84
|
/**
|
|
86
85
|
* Result of listing multipart uploads
|
|
87
86
|
*/
|
|
88
|
-
interface ListMultipartUploadsResult {
|
|
87
|
+
export interface ListMultipartUploadsResult {
|
|
89
88
|
/** List of in-progress uploads */
|
|
90
89
|
uploads: MultipartUploadInfo[];
|
|
91
90
|
/** Whether there are more uploads */
|
|
@@ -98,7 +97,7 @@ interface ListMultipartUploadsResult {
|
|
|
98
97
|
/**
|
|
99
98
|
* Result of headObject
|
|
100
99
|
*/
|
|
101
|
-
interface HeadObjectResult {
|
|
100
|
+
export interface HeadObjectResult {
|
|
102
101
|
/** Object size in bytes */
|
|
103
102
|
size: number;
|
|
104
103
|
/** Content type */
|
|
@@ -109,7 +108,7 @@ interface HeadObjectResult {
|
|
|
109
108
|
/**
|
|
110
109
|
* Result of batch delete
|
|
111
110
|
*/
|
|
112
|
-
interface DeleteObjectsResult {
|
|
111
|
+
export interface DeleteObjectsResult {
|
|
113
112
|
/** Number of objects deleted */
|
|
114
113
|
deleted: number;
|
|
115
114
|
/** Errors that occurred */
|
|
@@ -125,7 +124,7 @@ interface DeleteObjectsResult {
|
|
|
125
124
|
* Extends the generic IStorageProvider with multipart upload operations
|
|
126
125
|
* needed by resumable upload protocols like TUS.
|
|
127
126
|
*/
|
|
128
|
-
interface IMultipartProvider extends IStorageProvider {
|
|
127
|
+
export interface IMultipartProvider extends IStorageProvider {
|
|
129
128
|
/**
|
|
130
129
|
* Create a multipart upload
|
|
131
130
|
* @param key - Object key
|
|
@@ -203,7 +202,7 @@ interface IMultipartProvider extends IStorageProvider {
|
|
|
203
202
|
* Tracks multipart upload metadata using companion R2 objects so that
|
|
204
203
|
* listParts/listMultipartUploads work in all environments (local, test, prod).
|
|
205
204
|
*/
|
|
206
|
-
declare class R2StorageProvider implements IMultipartProvider {
|
|
205
|
+
export declare class R2StorageProvider implements IMultipartProvider {
|
|
207
206
|
private readonly config;
|
|
208
207
|
private readonly bucket;
|
|
209
208
|
private readonly env;
|
|
@@ -213,6 +212,9 @@ declare class R2StorageProvider implements IMultipartProvider {
|
|
|
213
212
|
download(path: string): Promise<DownloadResult>;
|
|
214
213
|
delete(path: string): Promise<void>;
|
|
215
214
|
exists(path: string): Promise<boolean>;
|
|
215
|
+
deleteMany(paths: string[]): Promise<void>;
|
|
216
|
+
head(path: string): Promise<HeadResult | null>;
|
|
217
|
+
list(options: ListOptions): Promise<ListResult>;
|
|
216
218
|
getPresignedUrl(path: string, method: 'GET' | 'PUT' | 'DELETE' | 'HEAD', expiresIn: number): Promise<PresignedUrlResult>;
|
|
217
219
|
chunkedUpload(body: StreamingBlobPayloadInputTypes, path: string, options: Omit<UploadOptions, 'size'> & {
|
|
218
220
|
size?: number;
|
|
@@ -229,5 +231,5 @@ declare class R2StorageProvider implements IMultipartProvider {
|
|
|
229
231
|
private cleanupTrackingObjects;
|
|
230
232
|
}
|
|
231
233
|
//#endregion
|
|
232
|
-
export {
|
|
234
|
+
export { IStorageProvider, StreamingBlobPayloadInputTypes };
|
|
233
235
|
//# sourceMappingURL=index.d.mts.map
|
|
@@ -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":"
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../../../src/storage/providers/multipart-provider.interface.ts","../../../src/storage/providers/r2-storage.provider.ts"],"mappings":";;;;;;iBAKiB;;EAEf;;EAEA;;EAEA,WAAW;;;;;iBAMI;;EAEf;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;EAEA;;;;;iBAMe;;EAEf,OAAO;;EAEP;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;EAEA,YAAY;;;;;iBAMG;;EAEf,SAAS;;EAET;;EAEA;;EAEA;;;;;iBAMe;;EAEf;;EAEA;;EAEA,WAAW;;;;;iBAMI;;EAEf;;EAEA;IACE;IACA;IACA;;;;;;;;;iBAUa,2BAA2B;;;;;;;EAW1C,sBACE,aACA,UAAU,yBACT,QAAQ;;;;;;;;;EAUX,WACE,aACA,kBACA,oBACA,MAAM,aACL,QAAQ;;;;;;;;EASX,wBACE,aACA,kBACA,OAAO,kBACN,QAAQ;;;;;;EAOX,qBAAqB,aAAa,mBAAmB;;;;;;;;;EAUrD,UACE,aACA,kBACA,4BACC,QAAQ;;;;;;;;EASX,qBACE,oBACA,0BACC,QAAQ;;;;;;;EAYX,WAAW,cAAc,QAAQ;;;;;;;EAQjC,cAAc,iBAAiB,QAAQ;;;;;EAUvC;;;;;;;;;;;;qBCzMW,6BAA6B;mBAIrB;mBACA;mBACA;mBALF;EAEjB,YACmB,QAAQ,cACR,QAAQ,UACR,KAAK,YACtB,cAAc;EAKV,OACJ,MAAM,gCACN,cACA,SAAS,gBACR,QAAQ;EAuBL,SAAS,eAAe,QAAQ;EAoBhC,OAAO,eAAe;EAItB,OAAO,eAAe;EAKtB,WAAW,kBAAkB;EAS7B,KAAK,eAAe,QAAQ;EAS5B,KAAK,SAAS,cAAc,QAAQ;EAsBpC,gBACJ,cACA,2CACA,oBACC,QAAQ;EAmBL,cACJ,MAAM,gCACN,cACA,SAAS,KAAK;IAA2B;MACxC,QAAQ;EAwEX;EAIM,WAAW,cAAc,QAAQ;EAYjC,cAAc,iBAAiB,QAAQ;EAavC,sBACJ,aACA,UAAU,yBACT,QAAQ;EAsBL,WACJ,aACA,kBACA,oBACA,MAAM,aACL,QAAQ;EAiBL,wBACJ,aACA,kBACA,OAAO,kBACN,QAAQ;EAgBL,qBAAqB,aAAa,mBAAmB;EAOrD,UACJ,cACA,kBACA,4BACC,QAAQ;EA4BL,qBACJ,oBACA,2BACC,QAAQ;UAiCG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { t as R2StorageProvider } from "../../r2-storage.provider-
|
|
1
|
+
import { t as R2StorageProvider } from "../../r2-storage.provider-wU_6api4.mjs";
|
|
2
2
|
export { R2StorageProvider };
|