@visulima/storage 1.0.0-alpha.3 → 1.0.0-alpha.30
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 +361 -0
- package/LICENSE.md +213 -573
- package/README.md +83 -470
- package/dist/adapter/nuxt/module.d.ts +41 -34
- package/dist/adapter/nuxt/module.js +1 -93
- package/dist/adapter/nuxt/node_modules/.bin/nuxi +22 -0
- package/dist/adapter/nuxt/node_modules/.bin/nuxt +22 -0
- package/dist/adapter/nuxt/package.json +0 -6
- package/dist/ai/ai-sdk/index.d.ts +113 -0
- package/dist/ai/ai-sdk/index.js +1 -0
- package/dist/ai/claude/index.d.ts +177 -0
- package/dist/ai/claude/index.js +1 -0
- package/dist/ai/openai/index.d.ts +205 -0
- package/dist/ai/openai/index.js +1 -0
- package/dist/ai/tanstack/index.d.ts +115 -0
- package/dist/ai/tanstack/index.js +1 -0
- package/dist/handler/http/fetch/index.d.ts +303 -4
- package/dist/handler/http/fetch/index.js +1 -4
- package/dist/handler/http/hono/index.d.ts +73 -64
- package/dist/handler/http/hono/index.js +1 -65
- package/dist/handler/http/nextjs/index.d.ts +66 -58
- package/dist/handler/http/nextjs/index.js +1 -37
- package/dist/handler/http/node/index.d.ts +361 -4
- package/dist/handler/http/node/index.js +1 -4
- package/dist/handler/http/solid-start/index.d.ts +66 -57
- package/dist/handler/http/solid-start/index.js +1 -44
- package/dist/index.d.ts +58 -17
- package/dist/index.js +1 -13
- package/dist/openapi/index.d.ts +24 -5
- package/dist/openapi/index.js +1 -5
- package/dist/packem_shared/AwsLightFile-BSqjc_rD.js +1 -0
- package/dist/packem_shared/AwsLightMetaStorage-B-iQbToR.js +1 -0
- package/dist/packem_shared/AwsLightStorage-w21RxjUm.js +1 -0
- package/dist/packem_shared/AzureFile-Dgj2Tef4.js +1 -0
- package/dist/packem_shared/AzureSMetaStorage-CR-lfQNQ.js +1 -0
- package/dist/packem_shared/AzureStorage-2kl7JDXs.js +1 -0
- package/dist/packem_shared/BaseTransformer-Fpcuz4kj.js +1 -0
- package/dist/packem_shared/BoxFile-Be0S4N1L.js +1 -0
- package/dist/packem_shared/BoxMetaStorage-DLdXbZaV.js +1 -0
- package/dist/packem_shared/BoxStorage-BUeEJoGL.js +1 -0
- package/dist/packem_shared/BunS3File-D-SRiyrm.js +1 -0
- package/dist/packem_shared/BunS3MetaStorage-Bv_CTTMz.js +1 -0
- package/dist/packem_shared/BunS3Storage-WM3rF6Fw.js +1 -0
- package/dist/packem_shared/BunnyFile-Dotl-lO9.js +1 -0
- package/dist/packem_shared/BunnyMetaStorage-DNMTSeoN.js +1 -0
- package/dist/packem_shared/BunnyStorage-D3s2fRB3.js +1 -0
- package/dist/packem_shared/CloudinaryFile-B5-m33eS.js +1 -0
- package/dist/packem_shared/CloudinaryMetaStorage-DEBk5eQy.js +1 -0
- package/dist/packem_shared/CloudinaryStorage-BBE2-aVz.js +1 -0
- package/dist/packem_shared/DiskStorage-DL0GiG6k.js +1 -0
- package/dist/packem_shared/DiskStorageWithChecksum-BvUTn7O-.js +1 -0
- package/dist/packem_shared/DropboxFile-BGVG2kXM.js +1 -0
- package/dist/packem_shared/DropboxMetaStorage-C6vj1QDA.js +1 -0
- package/dist/packem_shared/DropboxStorage-BL3OIdE_.js +1 -0
- package/dist/packem_shared/ERRORS-CyOuSMLY.js +1 -0
- package/dist/packem_shared/File-BhfUgJjs.js +1 -0
- package/dist/packem_shared/Files-CJh9_N-9.js +1 -0
- package/dist/packem_shared/FirebaseFile-JEu3plMP.js +1 -0
- package/dist/packem_shared/FirebaseMetaStorage-CzyOim-J.js +1 -0
- package/dist/packem_shared/FirebaseStorage-lXMXy3Pm.js +2 -0
- package/dist/packem_shared/FtpFile-B8jaICTB.js +1 -0
- package/dist/packem_shared/FtpMetaStorage-1Njy0DpU.js +1 -0
- package/dist/packem_shared/FtpStorage-Dw94efNW.js +1 -0
- package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
- package/dist/packem_shared/GCSFile-CDQ6IWAz.js +1 -0
- package/dist/packem_shared/GCSMetaStorage-udgXA5ia.js +1 -0
- package/dist/packem_shared/GCStorage-ChY6uJuO.js +1 -0
- package/dist/packem_shared/GoogleDriveFile-D0aGfGbL.js +1 -0
- package/dist/packem_shared/GoogleDriveMetaStorage-WGuUZPyx.js +1 -0
- package/dist/packem_shared/GoogleDriveStorage-C0NhBBWH.js +1 -0
- package/dist/packem_shared/LocalMetaStorage-QMKL7McF.js +1 -0
- package/dist/packem_shared/MediaTransformer-D-1c9Q_k.js +1 -0
- package/dist/packem_shared/MetaStorage-Y4m1dWgd.js +1 -0
- package/dist/packem_shared/Metadata-B6Ir0KO7.js +1 -0
- package/dist/packem_shared/Multipart-CIFfQksD.js +1 -0
- package/dist/packem_shared/Multipart-D9WIud9R.js +1 -0
- package/dist/packem_shared/NetlifyBlobFile-PMZLJ8AC.js +1 -0
- package/dist/packem_shared/NetlifyBlobMetaStorage-ClIFdTkT.js +1 -0
- package/dist/packem_shared/NetlifyBlobStorage-CO89TGvF.js +1 -0
- package/dist/packem_shared/NoOpMetrics-Dky06sf1.js +1 -0
- package/dist/packem_shared/OneDriveFile-XbVVKIJh.js +1 -0
- package/dist/packem_shared/OneDriveMetaStorage-DS4f83X2.js +1 -0
- package/dist/packem_shared/OneDriveStorage-jAN46vRm.js +1 -0
- package/dist/packem_shared/OpenTelemetryMetrics-9uxQMSlg.js +1 -0
- package/dist/packem_shared/PocketBaseFile-CkAiSBb0.js +1 -0
- package/dist/packem_shared/PocketBaseMetaStorage-B6utPncj.js +1 -0
- package/dist/packem_shared/PocketBaseStorage-DpOjOKAt.js +1 -0
- package/dist/packem_shared/Rest-BuD3ySAg.js +1 -0
- package/dist/packem_shared/Rest-URrQ5FYM.js +1 -0
- package/dist/packem_shared/S3File-BfmCOET4.js +1 -0
- package/dist/packem_shared/S3MetaStorage-vcriiosn.js +1 -0
- package/dist/packem_shared/S3Storage-n1ohEZj4.js +1 -0
- package/dist/packem_shared/SftpFile-CQCxZNVq.js +1 -0
- package/dist/packem_shared/SftpMetaStorage-DYqXwCdM.js +1 -0
- package/dist/packem_shared/SftpStorage-Ban-WN8v.js +1 -0
- package/dist/packem_shared/SharePointFile-BA6X9Sxr.js +1 -0
- package/dist/packem_shared/SharePointMetaStorage-DVM5-X6g.js +1 -0
- package/dist/packem_shared/SharePointStorage-BY90zh1c.js +1 -0
- package/dist/packem_shared/SupabaseFile-DZ1iv9gM.js +1 -0
- package/dist/packem_shared/SupabaseMetaStorage-ivXoYVUu.js +1 -0
- package/dist/packem_shared/SupabaseStorage-pNbHAE1Y.js +1 -0
- package/dist/packem_shared/TUS_RESUMABLE-B7KtPVeC.js +1 -0
- package/dist/packem_shared/Tus-Fp_hx5ug.js +1 -0
- package/dist/packem_shared/Tus-TNG9HAY8.js +1 -0
- package/dist/packem_shared/UploadThingFile-BpG9mE8K.js +1 -0
- package/dist/packem_shared/UploadThingMetaStorage-BvKNzgm7.js +1 -0
- package/dist/packem_shared/UploadThingStorage-BcmIE2dI.js +1 -0
- package/dist/packem_shared/ValidationError-D8KKJiKA.js +1 -0
- package/dist/packem_shared/VercelBlobFile-Cni_1qwD.js +1 -0
- package/dist/packem_shared/VercelBlobMetaStorage-CwaqWucZ.js +1 -0
- package/dist/packem_shared/VercelBlobStorage-s260zfFo.js +1 -0
- package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +1 -0
- package/dist/packem_shared/agentsListFiles-R-CnGKc4.js +1 -0
- package/dist/packem_shared/akamai-BYS9pP8S.js +1 -0
- package/dist/packem_shared/alibaba-BJQ6ijoK.js +1 -0
- package/dist/packem_shared/approval-BBeX3o4E.js +1 -0
- package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
- package/dist/packem_shared/aws-light-meta-storage-CstQBYXG.js +4 -0
- package/dist/packem_shared/azure-meta-storage-C4SrMtT2.js +1 -0
- package/dist/packem_shared/backblaze-CvdtCvJL.js +1 -0
- package/dist/packem_shared/base-handler-core-BYDQditz.js +1 -0
- package/dist/packem_shared/base-handler-fetch-DWzsPkmV.js +1 -0
- package/dist/packem_shared/base-handler-node-Dety2rQB.js +1 -0
- package/dist/packem_shared/cache-qV_5Umeq.js +1 -0
- package/dist/packem_shared/claudeListFiles-DAezbKEi.js +1 -0
- package/dist/packem_shared/cloudflare-Bm_Pg6yx.js +1 -0
- package/dist/packem_shared/createResponsesFileTools-BCep-qdO.js +1 -0
- package/dist/packem_shared/defaultCloudStorageFileNameValidation-shIZX_7L.js +1 -0
- package/dist/packem_shared/detect-file-type-5JhzC9RU.js +1 -0
- package/dist/packem_shared/digitalOcean-Lj1NfDzc.js +1 -0
- package/dist/packem_shared/disk-storage-CKAJvhcj.js +1 -0
- package/dist/packem_shared/disk-storage-with-checksum.d-mHcg2uLw.d.ts +150 -0
- package/dist/packem_shared/executors-DG6hGtvm.js +1 -0
- package/dist/packem_shared/executors.d-X4hz3zfu.d.ts +65 -0
- package/dist/packem_shared/exoscale-O0HzxoDz.js +1 -0
- package/dist/packem_shared/filebase-D-urO4Ob.js +1 -0
- package/dist/packem_shared/gcs-meta-storage-mZiqlX-9.js +1 -0
- package/dist/packem_shared/has-content-Bx2p8Okx.js +1 -0
- package/dist/packem_shared/headers-DC2MEOrK.js +27 -0
- package/dist/packem_shared/hetzner-DDxE7Gy7.js +1 -0
- package/dist/packem_shared/ibmCos-Rx_yku4H.js +1 -0
- package/dist/packem_shared/idriveE2-BFhw0Vwy.js +1 -0
- package/dist/packem_shared/index-B4ETk0Lu.js +5 -0
- package/dist/packem_shared/index.d-C4Fivh4I.d.ts +94 -0
- package/dist/packem_shared/is-expired-1JuZjDtb.js +1 -0
- package/dist/packem_shared/isRetryableError-BhizNeAz.js +1 -0
- package/dist/packem_shared/isValidMediaType-B-2UKjZx.js +1 -0
- package/dist/packem_shared/listFiles-B6VF05d-.js +1 -0
- package/dist/packem_shared/listFiles-BtP6VnUp.js +1 -0
- package/dist/packem_shared/local-meta-storage-Bi0mK6gD.js +1 -0
- package/dist/packem_shared/local-meta-storage.d-B11vHYNm.d.ts +21 -0
- package/dist/packem_shared/media-transformer.d-C3QvECD7.d.ts +331 -0
- package/dist/packem_shared/minio-T_Z3iEy7.js +1 -0
- package/dist/packem_shared/multipart-base-BxckfvQf.js +1 -0
- package/dist/packem_shared/oauth-refresh-Dg2ybc6_.js +1 -0
- package/dist/packem_shared/oracleCloud-D5T9s4JV.js +1 -0
- package/dist/packem_shared/ovhCloud-DCwef2fe.js +1 -0
- package/dist/packem_shared/part-match-B5fLLmFw.js +1 -0
- package/dist/packem_shared/path-D7rMc9nq-B718mbm6.js +1 -0
- package/dist/packem_shared/posix-dirname-CiHXPPnw.js +1 -0
- package/dist/packem_shared/response-builder-Wdo_fvcF.js +1 -0
- package/dist/packem_shared/rest-base-DI7xFXr5.js +1 -0
- package/dist/packem_shared/restOpenApiSpec-PaIVbESh.js +1 -0
- package/dist/packem_shared/s3-base-storage-Dbexfg7p.js +1 -0
- package/dist/packem_shared/s3-base-storage.d-V3N2nKCt.d.ts +260 -0
- package/dist/packem_shared/scaleway-ygRXOss9.js +1 -0
- package/dist/packem_shared/sharedGet-Ce7WGAsc.js +1 -0
- package/dist/packem_shared/storage-Dh0tJh7j.js +1 -0
- package/dist/packem_shared/storage.d-RteRC-cG.d.ts +1106 -0
- package/dist/packem_shared/storj-CVA9mM-7.js +1 -0
- package/dist/packem_shared/tencent-CAcAGaIW.js +1 -0
- package/dist/packem_shared/tigris-wmhjfsH2.js +1 -0
- package/dist/packem_shared/transformOpenApiSpec-C0vEbDTO.js +1 -0
- package/dist/packem_shared/tus-base.d-CygntIPM.d.ts +99 -0
- package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
- package/dist/packem_shared/types.d-ChNXbbHG.d.ts +104 -0
- package/dist/packem_shared/types.d-DxonY4XS.d.ts +720 -0
- package/dist/packem_shared/types.d-cI_cMxcZ.d.ts +49 -0
- package/dist/packem_shared/update-size-DANV7aa2.js +1 -0
- package/dist/packem_shared/vultr-lK9L-sFk.js +1 -0
- package/dist/packem_shared/waitForStorage-ChSBLhLc.js +1 -0
- package/dist/packem_shared/wasabi-JQzxdrFy.js +1 -0
- package/dist/packem_shared/xhrOpenApiSpec-nyoboz83.js +1 -0
- package/dist/packem_shared/yandex-ZwvE77v4.js +1 -0
- package/dist/storage/aws/clients/index.d.ts +612 -6
- package/dist/storage/aws/clients/index.js +1 -6
- package/dist/storage/aws/index.d.ts +321 -4
- package/dist/storage/aws/index.js +1 -3
- package/dist/storage/aws-light/index.d.ts +254 -4
- package/dist/storage/aws-light/index.js +1 -3
- package/dist/storage/azure/index.d.ts +217 -4
- package/dist/storage/azure/index.js +1 -3
- package/dist/storage/box/index.d.ts +189 -0
- package/dist/storage/box/index.js +1 -0
- package/dist/storage/bun-s3/index.d.ts +200 -0
- package/dist/storage/bun-s3/index.js +1 -0
- package/dist/storage/bunny/index.d.ts +119 -0
- package/dist/storage/bunny/index.js +1 -0
- package/dist/storage/cloudinary/index.d.ts +121 -0
- package/dist/storage/cloudinary/index.js +1 -0
- package/dist/storage/dropbox/index.d.ts +132 -0
- package/dist/storage/dropbox/index.js +1 -0
- package/dist/storage/firebase/index.d.ts +192 -0
- package/dist/storage/firebase/index.js +1 -0
- package/dist/storage/ftp/index.d.ts +85 -0
- package/dist/storage/ftp/index.js +1 -0
- package/dist/storage/gcs/index.d.ts +181 -5
- package/dist/storage/gcs/index.js +1 -4
- package/dist/storage/google-drive/index.d.ts +148 -0
- package/dist/storage/google-drive/index.js +1 -0
- package/dist/storage/local/index.d.ts +7 -4
- package/dist/storage/local/index.js +1 -3
- package/dist/storage/netlify-blob/index.d.ts +147 -4
- package/dist/storage/netlify-blob/index.js +1 -3
- package/dist/storage/onedrive/index.d.ts +103 -0
- package/dist/storage/onedrive/index.js +1 -0
- package/dist/storage/pocketbase/index.d.ts +172 -0
- package/dist/storage/pocketbase/index.js +1 -0
- package/dist/storage/sftp/index.d.ts +86 -0
- package/dist/storage/sftp/index.js +1 -0
- package/dist/storage/sharepoint/index.d.ts +180 -0
- package/dist/storage/sharepoint/index.js +1 -0
- package/dist/storage/supabase/index.d.ts +115 -0
- package/dist/storage/supabase/index.js +1 -0
- package/dist/storage/uploadthing/index.d.ts +95 -0
- package/dist/storage/uploadthing/index.js +1 -0
- package/dist/storage/vercel-blob/index.d.ts +189 -4
- package/dist/storage/vercel-blob/index.js +1 -3
- package/dist/transformer/audio-transformer.d.ts +127 -125
- package/dist/transformer/audio-transformer.js +1 -278
- package/dist/transformer/image-transformer.d.ts +573 -568
- package/dist/transformer/image-transformer.js +1 -1100
- package/dist/transformer/index.d.ts +62 -5
- package/dist/transformer/index.js +1 -4
- package/dist/transformer/video-transformer.d.ts +144 -142
- package/dist/transformer/video-transformer.js +1 -310
- package/package.json +195 -47
- package/dist/handler/base/base-handler-core.d.ts +0 -91
- package/dist/handler/base/base-handler-fetch.d.ts +0 -76
- package/dist/handler/base/base-handler-node.d.ts +0 -137
- package/dist/handler/multipart/multipart-base.d.ts +0 -84
- package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
- package/dist/handler/multipart/multipart.d.ts +0 -49
- package/dist/handler/rest/rest-base.d.ts +0 -106
- package/dist/handler/rest/rest-fetch.d.ts +0 -88
- package/dist/handler/rest/rest.d.ts +0 -93
- package/dist/handler/tus/tus-base.d.ts +0 -152
- package/dist/handler/tus/tus-fetch.d.ts +0 -72
- package/dist/handler/tus/tus.d.ts +0 -78
- package/dist/handler/types.d.ts +0 -53
- package/dist/handler/utils/request-parser.d.ts +0 -72
- package/dist/handler/utils/response-builder.d.ts +0 -83
- package/dist/handler/utils/storage-utils.d.ts +0 -10
- package/dist/handler/utils/stream-utils.d.ts +0 -29
- package/dist/handler/utils/upload-handlers.d.ts +0 -76
- package/dist/metrics/index.d.ts +0 -2
- package/dist/metrics/no-op-metrics.d.ts +0 -15
- package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
- package/dist/openapi/rest.d.ts +0 -7
- package/dist/openapi/shared.d.ts +0 -13
- package/dist/openapi/transform.d.ts +0 -3
- package/dist/openapi/tus.d.ts +0 -7
- package/dist/openapi/xhr.d.ts +0 -7
- package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
- package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
- package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
- package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
- package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
- package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
- package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
- package/dist/packem_shared/DiskStorage-BlltBst6.js +0 -12
- package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +0 -238
- package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
- package/dist/packem_shared/File-Bb3P23dr.js +0 -69
- package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
- package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
- package/dist/packem_shared/GCSMetaStorage-BMFEdzJ7.js +0 -7
- package/dist/packem_shared/GCStorage-DnhiwaS9.js +0 -406
- package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
- package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
- package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
- package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
- package/dist/packem_shared/Multipart-CNFK_Okz.js +0 -163
- package/dist/packem_shared/Multipart-CtUL7BQw.js +0 -128
- package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
- package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
- package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
- package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
- package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
- package/dist/packem_shared/Rest-CAOAEkOj.js +0 -267
- package/dist/packem_shared/Rest-DNuLwBrK.js +0 -228
- package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
- package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
- package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
- package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +0 -434
- package/dist/packem_shared/Tus-B8PmlMgR.js +0 -200
- package/dist/packem_shared/Tus-C4F1aYOl.js +0 -195
- package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
- package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
- package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
- package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
- package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
- package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
- package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
- package/dist/packem_shared/base-handler-core-BKuf4YLT.js +0 -303
- package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +0 -291
- package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +0 -730
- package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
- package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
- package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
- package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
- package/dist/packem_shared/disk-storage-Bh2wy3YW.js +0 -810
- package/dist/packem_shared/gcs-meta-storage-0tgMNnPO.js +0 -158
- package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
- package/dist/packem_shared/headers-DoS5nwM-.js +0 -3220
- package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
- package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
- package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
- package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
- package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
- package/dist/packem_shared/multipart-base-B3i67SSX.js +0 -102
- package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
- package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
- package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
- package/dist/packem_shared/rest-base-GRCcnan7.js +0 -457
- package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +0 -800
- package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
- package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
- package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
- package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
- package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
- package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +0 -740
- package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
- package/dist/packem_shared/validator-BeX_lJet.js +0 -78
- package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
- package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
- package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +0 -264
- package/dist/storage/aws/clients/backblaze.d.ts +0 -12
- package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
- package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
- package/dist/storage/aws/clients/minio.d.ts +0 -13
- package/dist/storage/aws/clients/tigris.d.ts +0 -12
- package/dist/storage/aws/clients/types.d.ts +0 -95
- package/dist/storage/aws/clients/wasabi.d.ts +0 -12
- package/dist/storage/aws/s3-base-storage.d.ts +0 -248
- package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
- package/dist/storage/aws/s3-file.d.ts +0 -10
- package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
- package/dist/storage/aws/s3-storage.d.ts +0 -70
- package/dist/storage/aws/types.d.ts +0 -119
- package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
- package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
- package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
- package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
- package/dist/storage/aws-light/types.d.ts +0 -37
- package/dist/storage/azure/azure-file.d.ts +0 -6
- package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
- package/dist/storage/azure/azure-storage.d.ts +0 -69
- package/dist/storage/azure/types.d.ts +0 -62
- package/dist/storage/gcs/fetch-error.d.ts +0 -11
- package/dist/storage/gcs/gcs-config.d.ts +0 -2
- package/dist/storage/gcs/gcs-file.d.ts +0 -6
- package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
- package/dist/storage/gcs/gcs-storage.d.ts +0 -91
- package/dist/storage/gcs/types.d.ts +0 -55
- package/dist/storage/gcs/utils.d.ts +0 -7
- package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
- package/dist/storage/local/disk-storage.d.ts +0 -135
- package/dist/storage/local/local-meta-storage.d.ts +0 -32
- package/dist/storage/meta-storage.d.ts +0 -30
- package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
- package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
- package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
- package/dist/storage/netlify-blob/types.d.ts +0 -30
- package/dist/storage/storage.d.ts +0 -353
- package/dist/storage/types.d.ts +0 -221
- package/dist/storage/utils/file/file.d.ts +0 -25
- package/dist/storage/utils/file/get-file-status.d.ts +0 -9
- package/dist/storage/utils/file/has-content.d.ts +0 -9
- package/dist/storage/utils/file/index.d.ts +0 -10
- package/dist/storage/utils/file/is-expired.d.ts +0 -8
- package/dist/storage/utils/file/metadata.d.ts +0 -18
- package/dist/storage/utils/file/part-match.d.ts +0 -11
- package/dist/storage/utils/file/types.d.ts +0 -37
- package/dist/storage/utils/file/update-metadata.d.ts +0 -10
- package/dist/storage/utils/file/update-size.d.ts +0 -10
- package/dist/storage/vercel-blob/types.d.ts +0 -32
- package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
- package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
- package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
- package/dist/transformer/base-transformer.d.ts +0 -63
- package/dist/transformer/media-transformer.d.ts +0 -332
- package/dist/transformer/types.d.ts +0 -652
- package/dist/transformer/utils.d.ts +0 -33
- package/dist/transformer/validation-error.d.ts +0 -23
- package/dist/utils/cache.d.ts +0 -32
- package/dist/utils/chunked-upload.d.ts +0 -65
- package/dist/utils/detect-file-type.d.ts +0 -28
- package/dist/utils/errors.d.ts +0 -74
- package/dist/utils/file-path-url-matcher.d.ts +0 -18
- package/dist/utils/headers.d.ts +0 -111
- package/dist/utils/http.d.ts +0 -92
- package/dist/utils/locker.d.ts +0 -26
- package/dist/utils/pipes/stream-checksum.d.ts +0 -47
- package/dist/utils/pipes/stream-length.d.ts +0 -22
- package/dist/utils/primitives/get-last-one.d.ts +0 -3
- package/dist/utils/primitives/is-record.d.ts +0 -2
- package/dist/utils/primitives/map-values.d.ts +0 -9
- package/dist/utils/primitives/pick.d.ts +0 -2
- package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
- package/dist/utils/primitives/to-seconds.d.ts +0 -12
- package/dist/utils/range-checksum.d.ts +0 -33
- package/dist/utils/range-hasher.d.ts +0 -46
- package/dist/utils/retry.d.ts +0 -64
- package/dist/utils/types.d.ts +0 -108
- package/dist/utils/validation-error.d.ts +0 -22
- package/dist/utils/validator.d.ts +0 -36
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
class MetaStorage {
|
|
2
|
-
prefix = "";
|
|
3
|
-
suffix = "";
|
|
4
|
-
logger;
|
|
5
|
-
constructor(config) {
|
|
6
|
-
this.prefix = config?.prefix ?? "";
|
|
7
|
-
this.suffix = config?.suffix ?? ".META";
|
|
8
|
-
this.logger = config?.logger;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Saves upload metadata.
|
|
12
|
-
*/
|
|
13
|
-
// eslint-disable-next-line class-methods-use-this
|
|
14
|
-
async save(_id, file) {
|
|
15
|
-
return file;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Deletes an upload metadata.
|
|
19
|
-
*/
|
|
20
|
-
// eslint-disable-next-line class-methods-use-this
|
|
21
|
-
async delete(_id) {
|
|
22
|
-
throw new Error("Not implemented");
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Retrieves upload metadata.
|
|
26
|
-
*/
|
|
27
|
-
// eslint-disable-next-line class-methods-use-this
|
|
28
|
-
async get(_id) {
|
|
29
|
-
throw new Error("Not implemented");
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Marks upload active.
|
|
33
|
-
*/
|
|
34
|
-
// eslint-disable-next-line class-methods-use-this
|
|
35
|
-
async touch(_id, _file) {
|
|
36
|
-
throw new Error("Not implemented");
|
|
37
|
-
}
|
|
38
|
-
getMetaName(id) {
|
|
39
|
-
return this.prefix + id + this.suffix;
|
|
40
|
-
}
|
|
41
|
-
getIdFromMetaName(name) {
|
|
42
|
-
return name.slice(this.prefix.length, -this.suffix.length);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
export { MetaStorage as default };
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
const isRecord = (x) => x !== null && typeof x === "object" && !Array.isArray(x);
|
|
2
|
-
|
|
3
|
-
const ASCII_SPACE = " ".codePointAt(0) ?? 32;
|
|
4
|
-
const ASCII_COMMA = ",".codePointAt(0) ?? 44;
|
|
5
|
-
const BASE64_REGEX = /^[\d+/A-Z]*={0,2}$/i;
|
|
6
|
-
const isNumeric = (input) => {
|
|
7
|
-
if (typeof input !== "string") {
|
|
8
|
-
return false;
|
|
9
|
-
}
|
|
10
|
-
const parsedNumber = Number.parseFloat(input);
|
|
11
|
-
return !Number.isNaN(parsedNumber) && Number.isFinite(parsedNumber);
|
|
12
|
-
};
|
|
13
|
-
class Metadata {
|
|
14
|
-
psize;
|
|
15
|
-
pname;
|
|
16
|
-
pfiletype;
|
|
17
|
-
ptype;
|
|
18
|
-
pmimeType;
|
|
19
|
-
pcontentType;
|
|
20
|
-
ptitle;
|
|
21
|
-
pfilename;
|
|
22
|
-
poriginalName;
|
|
23
|
-
plastModified;
|
|
24
|
-
}
|
|
25
|
-
const isMetadata = (raw) => isRecord(raw);
|
|
26
|
-
const validateKey = (key) => {
|
|
27
|
-
if (key.length === 0) {
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
for (let index = 0; index < key.length; index += 1) {
|
|
31
|
-
const charCodePoint = key.codePointAt(index);
|
|
32
|
-
if (charCodePoint > 127 || charCodePoint === ASCII_SPACE || charCodePoint === ASCII_COMMA) {
|
|
33
|
-
return false;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
return true;
|
|
37
|
-
};
|
|
38
|
-
const validateValue = (value) => {
|
|
39
|
-
if (value.length % 4 !== 0) {
|
|
40
|
-
return false;
|
|
41
|
-
}
|
|
42
|
-
return BASE64_REGEX.test(value);
|
|
43
|
-
};
|
|
44
|
-
const stringifyMetadata = (metadata) => Object.entries(metadata).map(([key, value]) => {
|
|
45
|
-
if (value === null || value === void 0) {
|
|
46
|
-
return key;
|
|
47
|
-
}
|
|
48
|
-
const stringValue = typeof value === "object" ? JSON.stringify(value) : String(value);
|
|
49
|
-
const encodedValue = Buffer.from(stringValue, "utf8").toString("base64");
|
|
50
|
-
return `${key} ${encodedValue}`;
|
|
51
|
-
}).join(",");
|
|
52
|
-
const parseMetadata = (string_) => {
|
|
53
|
-
const meta = {};
|
|
54
|
-
if (!string_ || string_.trim().length === 0) {
|
|
55
|
-
throw new Error("Metadata string is not valid");
|
|
56
|
-
}
|
|
57
|
-
for (const pair of string_.split(",")) {
|
|
58
|
-
const tokens = pair.split(" ");
|
|
59
|
-
const [key, value] = tokens;
|
|
60
|
-
if ((tokens.length === 1 || tokens.length === 2) && validateKey(key) && (tokens.length === 1 || validateValue(value)) && !(key in meta)) {
|
|
61
|
-
let decodedValue = "";
|
|
62
|
-
if (tokens.length === 1) {
|
|
63
|
-
decodedValue = void 0;
|
|
64
|
-
} else if (value) {
|
|
65
|
-
decodedValue = Buffer.from(value, "base64").toString("utf8");
|
|
66
|
-
}
|
|
67
|
-
let parsedValue = decodedValue;
|
|
68
|
-
if (decodedValue !== void 0) {
|
|
69
|
-
try {
|
|
70
|
-
parsedValue = JSON.parse(decodedValue);
|
|
71
|
-
} catch {
|
|
72
|
-
if (decodedValue === "true") {
|
|
73
|
-
parsedValue = true;
|
|
74
|
-
} else if (decodedValue === "false") {
|
|
75
|
-
parsedValue = false;
|
|
76
|
-
} else if (isNumeric(decodedValue)) {
|
|
77
|
-
parsedValue = Number(decodedValue);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
meta[key] = parsedValue;
|
|
82
|
-
} else {
|
|
83
|
-
throw new Error("Metadata string is not valid");
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return meta;
|
|
87
|
-
};
|
|
88
|
-
|
|
89
|
-
export { Metadata, isMetadata, parseMetadata, stringifyMetadata, validateKey, validateValue };
|
|
@@ -1,163 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'node:stream';
|
|
2
|
-
import { parseMultipartRequest, MaxFileSizeExceededError, MultipartParseError } from '@remix-run/multipart-parser';
|
|
3
|
-
import { c as createHttpError } from './headers-DoS5nwM-.js';
|
|
4
|
-
import { V as ValidationError } from './validator-BeX_lJet.js';
|
|
5
|
-
import { B as BaseHandlerFetch } from './base-handler-fetch-Cr0hLiqg.js';
|
|
6
|
-
import { M as MultipartBase } from './multipart-base-B3i67SSX.js';
|
|
7
|
-
|
|
8
|
-
const RE_MIME = /^multipart\/.+|application\/x-www-form-urlencoded$/i;
|
|
9
|
-
const getIdFromRequestUrl = (url) => {
|
|
10
|
-
try {
|
|
11
|
-
const urlObject = new URL(url);
|
|
12
|
-
const pathParts = urlObject.pathname.split("/").filter(Boolean);
|
|
13
|
-
return pathParts[pathParts.length - 1] || void 0;
|
|
14
|
-
} catch {
|
|
15
|
-
return void 0;
|
|
16
|
-
}
|
|
17
|
-
};
|
|
18
|
-
class Multipart extends BaseHandlerFetch {
|
|
19
|
-
/**
|
|
20
|
-
* Limiting enabled http method handler
|
|
21
|
-
*/
|
|
22
|
-
static methods = ["delete", "download", "get", "options", "post"];
|
|
23
|
-
multipartBase;
|
|
24
|
-
/**
|
|
25
|
-
* Maximum file size allowed for multipart uploads
|
|
26
|
-
*/
|
|
27
|
-
maxFileSize;
|
|
28
|
-
/**
|
|
29
|
-
* Maximum header size allowed for multipart parser
|
|
30
|
-
*/
|
|
31
|
-
maxHeaderSize;
|
|
32
|
-
constructor(options) {
|
|
33
|
-
super(options);
|
|
34
|
-
this.maxFileSize = options.maxFileSize ?? Math.min(this.storage.maxUploadSize, 1024 * 1024 * 1024);
|
|
35
|
-
this.maxHeaderSize = options.maxHeaderSize ?? 64 * 1024;
|
|
36
|
-
const multipartInstance = this;
|
|
37
|
-
this.multipartBase = new class extends MultipartBase {
|
|
38
|
-
// eslint-disable-next-line class-methods-use-this
|
|
39
|
-
get storage() {
|
|
40
|
-
return multipartInstance.storage;
|
|
41
|
-
}
|
|
42
|
-
// eslint-disable-next-line class-methods-use-this
|
|
43
|
-
get maxFileSize() {
|
|
44
|
-
return multipartInstance.maxFileSize;
|
|
45
|
-
}
|
|
46
|
-
// eslint-disable-next-line class-methods-use-this
|
|
47
|
-
get maxHeaderSize() {
|
|
48
|
-
return multipartInstance.maxHeaderSize;
|
|
49
|
-
}
|
|
50
|
-
// eslint-disable-next-line class-methods-use-this
|
|
51
|
-
buildFileUrl(requestUrl, file) {
|
|
52
|
-
return multipartInstance.buildFileUrl({ url: requestUrl }, file);
|
|
53
|
-
}
|
|
54
|
-
// eslint-disable-next-line class-methods-use-this
|
|
55
|
-
createStreamFromBytes(bytes) {
|
|
56
|
-
if (bytes instanceof Uint8Array) {
|
|
57
|
-
return Readable.from(Buffer.from(bytes));
|
|
58
|
-
}
|
|
59
|
-
if (bytes instanceof ArrayBuffer) {
|
|
60
|
-
return Readable.from(Buffer.from(bytes));
|
|
61
|
-
}
|
|
62
|
-
return Readable.from(new Uint8Array(0));
|
|
63
|
-
}
|
|
64
|
-
// eslint-disable-next-line class-methods-use-this
|
|
65
|
-
createEmptyStream() {
|
|
66
|
-
return Readable.from(new Uint8Array(0));
|
|
67
|
-
}
|
|
68
|
-
}();
|
|
69
|
-
}
|
|
70
|
-
/**
|
|
71
|
-
* Handles multipart/form-data POST requests for file uploads.
|
|
72
|
-
* @param request Web API Request containing multipart data.
|
|
73
|
-
* @returns Promise resolving to ResponseFile with upload result.
|
|
74
|
-
*/
|
|
75
|
-
async post(request) {
|
|
76
|
-
const contentType = request.headers.get("content-type") || "";
|
|
77
|
-
if (!RE_MIME.test(contentType.split(";")[0] || "")) {
|
|
78
|
-
throw createHttpError(400, "Invalid content-type");
|
|
79
|
-
}
|
|
80
|
-
try {
|
|
81
|
-
const parts = [];
|
|
82
|
-
for await (const part of parseMultipartRequest(request, {
|
|
83
|
-
maxFileSize: this.maxFileSize,
|
|
84
|
-
maxHeaderSize: this.maxHeaderSize
|
|
85
|
-
})) {
|
|
86
|
-
parts.push(part);
|
|
87
|
-
}
|
|
88
|
-
const filePart = parts.find((part) => part.isFile);
|
|
89
|
-
if (!filePart) {
|
|
90
|
-
throw createHttpError(400, "No file found in multipart request");
|
|
91
|
-
}
|
|
92
|
-
const requestUrl = request.url;
|
|
93
|
-
return this.multipartBase.handlePost(filePart, parts, requestUrl);
|
|
94
|
-
} catch (error) {
|
|
95
|
-
if (error instanceof MaxFileSizeExceededError) {
|
|
96
|
-
throw createHttpError(413, "File size limit exceeded");
|
|
97
|
-
}
|
|
98
|
-
if (error instanceof MultipartParseError) {
|
|
99
|
-
throw createHttpError(400, "Invalid multipart request");
|
|
100
|
-
}
|
|
101
|
-
if (error instanceof ValidationError && error.statusCode) {
|
|
102
|
-
throw createHttpError(error.statusCode, error.message || error.body || "Validation failed");
|
|
103
|
-
}
|
|
104
|
-
throw error;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Delete an uploaded file.
|
|
109
|
-
* @param request Web API Request with file ID
|
|
110
|
-
* @returns Promise resolving to ResponseFile with deletion result
|
|
111
|
-
*/
|
|
112
|
-
async delete(request) {
|
|
113
|
-
const id = getIdFromRequestUrl(request.url);
|
|
114
|
-
if (!id) {
|
|
115
|
-
throw createHttpError(404, "File not found");
|
|
116
|
-
}
|
|
117
|
-
try {
|
|
118
|
-
return this.multipartBase.handleDelete(id);
|
|
119
|
-
} catch (error) {
|
|
120
|
-
const errorWithCode = error;
|
|
121
|
-
if (errorWithCode.code === "ENOENT") {
|
|
122
|
-
throw createHttpError(404, "File not found");
|
|
123
|
-
}
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
/**
|
|
128
|
-
* Handle OPTIONS requests with CORS headers.
|
|
129
|
-
* @param _request Web API Request (unused)
|
|
130
|
-
* @returns Promise resolving to ResponseFile with CORS headers
|
|
131
|
-
*/
|
|
132
|
-
async options(_request) {
|
|
133
|
-
const child = this.constructor;
|
|
134
|
-
return {
|
|
135
|
-
headers: {
|
|
136
|
-
"Access-Control-Allow-Methods": (child.methods || Multipart.methods).map((method) => method.toUpperCase()).join(", ")
|
|
137
|
-
},
|
|
138
|
-
statusCode: 204
|
|
139
|
-
};
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Retrieves a file or list of files based on the request path.
|
|
143
|
-
* Delegates to BaseHandlerFetch.fetch() method.
|
|
144
|
-
* @param _request Web API Request
|
|
145
|
-
* @returns Promise resolving to Web API Response
|
|
146
|
-
*/
|
|
147
|
-
// eslint-disable-next-line class-methods-use-this
|
|
148
|
-
async get(_request) {
|
|
149
|
-
throw createHttpError(500, "GET requests should be handled via fetch() method");
|
|
150
|
-
}
|
|
151
|
-
/**
|
|
152
|
-
* Compose and register HTTP method handlers.
|
|
153
|
-
*/
|
|
154
|
-
compose() {
|
|
155
|
-
this.registeredHandlers.set("POST", this.post.bind(this));
|
|
156
|
-
this.registeredHandlers.set("DELETE", this.delete.bind(this));
|
|
157
|
-
this.registeredHandlers.set("GET", this.get.bind(this));
|
|
158
|
-
this.registeredHandlers.set("OPTIONS", this.options.bind(this));
|
|
159
|
-
this.logger?.debug("Registered handler: %s", [...this.registeredHandlers.keys()].join(", "));
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
export { Multipart as default };
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
import { Readable } from 'node:stream';
|
|
2
|
-
import { parseMultipartRequest, MaxFileSizeExceededError, MultipartParseError } from '@remix-run/multipart-parser/node';
|
|
3
|
-
import { c as createHttpError } from './headers-DoS5nwM-.js';
|
|
4
|
-
import { g as getIdFromRequest } from './base-handler-core-BKuf4YLT.js';
|
|
5
|
-
import { V as ValidationError } from './validator-BeX_lJet.js';
|
|
6
|
-
import { B as BaseHandlerNode } from './base-handler-node-gk5aN9Cx.js';
|
|
7
|
-
import { M as MultipartBase } from './multipart-base-B3i67SSX.js';
|
|
8
|
-
|
|
9
|
-
const RE_MIME = /^multipart\/.+|application\/x-www-form-urlencoded$/i;
|
|
10
|
-
class Multipart extends BaseHandlerNode {
|
|
11
|
-
/**
|
|
12
|
-
* Limiting enabled http method handler
|
|
13
|
-
*/
|
|
14
|
-
static methods = ["delete", "download", "get", "options", "post"];
|
|
15
|
-
multipartBase;
|
|
16
|
-
/**
|
|
17
|
-
* Maximum file size allowed for multipart uploads
|
|
18
|
-
*/
|
|
19
|
-
maxFileSize;
|
|
20
|
-
/**
|
|
21
|
-
* Maximum header size allowed for multipart parser
|
|
22
|
-
*/
|
|
23
|
-
maxHeaderSize;
|
|
24
|
-
constructor(options) {
|
|
25
|
-
super(options);
|
|
26
|
-
this.maxFileSize = options.maxFileSize ?? Math.min(this.storage.maxUploadSize, 1024 * 1024 * 1024);
|
|
27
|
-
this.maxHeaderSize = options.maxHeaderSize ?? 64 * 1024;
|
|
28
|
-
const multipartInstance = this;
|
|
29
|
-
this.multipartBase = new class extends MultipartBase {
|
|
30
|
-
// eslint-disable-next-line class-methods-use-this
|
|
31
|
-
get storage() {
|
|
32
|
-
return multipartInstance.storage;
|
|
33
|
-
}
|
|
34
|
-
// eslint-disable-next-line class-methods-use-this
|
|
35
|
-
get maxFileSize() {
|
|
36
|
-
return multipartInstance.maxFileSize;
|
|
37
|
-
}
|
|
38
|
-
// eslint-disable-next-line class-methods-use-this
|
|
39
|
-
get maxHeaderSize() {
|
|
40
|
-
return multipartInstance.maxHeaderSize;
|
|
41
|
-
}
|
|
42
|
-
// eslint-disable-next-line class-methods-use-this
|
|
43
|
-
buildFileUrl(requestUrl, file) {
|
|
44
|
-
return multipartInstance.buildFileUrl({ url: requestUrl }, file);
|
|
45
|
-
}
|
|
46
|
-
// eslint-disable-next-line class-methods-use-this
|
|
47
|
-
createStreamFromBytes(bytes) {
|
|
48
|
-
if (bytes instanceof Uint8Array || Buffer.isBuffer(bytes)) {
|
|
49
|
-
return Readable.from(Buffer.from(bytes));
|
|
50
|
-
}
|
|
51
|
-
if (typeof bytes === "number") {
|
|
52
|
-
return Readable.from(Buffer.alloc(0));
|
|
53
|
-
}
|
|
54
|
-
return Readable.from(Buffer.from(String(bytes)));
|
|
55
|
-
}
|
|
56
|
-
// eslint-disable-next-line class-methods-use-this
|
|
57
|
-
createEmptyStream() {
|
|
58
|
-
return Readable.from(new Uint8Array(0));
|
|
59
|
-
}
|
|
60
|
-
}();
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Handles multipart/form-data POST requests for file uploads.
|
|
64
|
-
* @param request Node.js IncomingMessage containing multipart data.
|
|
65
|
-
* @returns Promise resolving to ResponseFile with upload result.
|
|
66
|
-
*/
|
|
67
|
-
async post(request) {
|
|
68
|
-
if (!RE_MIME.test(request.headers["content-type"]?.split(";")[0] ?? "")) {
|
|
69
|
-
throw createHttpError(400, "Invalid content-type");
|
|
70
|
-
}
|
|
71
|
-
try {
|
|
72
|
-
const parts = [];
|
|
73
|
-
for await (const part of parseMultipartRequest(request, {
|
|
74
|
-
maxFileSize: this.maxFileSize,
|
|
75
|
-
maxHeaderSize: this.maxHeaderSize
|
|
76
|
-
})) {
|
|
77
|
-
parts.push(part);
|
|
78
|
-
}
|
|
79
|
-
const filePart = parts.find((part) => part.isFile);
|
|
80
|
-
if (!filePart) {
|
|
81
|
-
throw createHttpError(400, "No file found in multipart request");
|
|
82
|
-
}
|
|
83
|
-
const requestUrl = request.originalUrl || request.url;
|
|
84
|
-
return this.multipartBase.handlePost(filePart, parts, requestUrl);
|
|
85
|
-
} catch (error) {
|
|
86
|
-
if (error instanceof MaxFileSizeExceededError) {
|
|
87
|
-
throw createHttpError(413, "File size limit exceeded");
|
|
88
|
-
}
|
|
89
|
-
if (error instanceof MultipartParseError) {
|
|
90
|
-
throw createHttpError(400, "Invalid multipart request");
|
|
91
|
-
}
|
|
92
|
-
if (error instanceof ValidationError && error.statusCode) {
|
|
93
|
-
throw createHttpError(error.statusCode, error.message || error.body || "Validation failed");
|
|
94
|
-
}
|
|
95
|
-
throw error;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
/**
|
|
99
|
-
* Delete an uploaded file.
|
|
100
|
-
* @param request Node.js IncomingMessage with file ID
|
|
101
|
-
* @returns Promise resolving to ResponseFile with deletion result
|
|
102
|
-
*/
|
|
103
|
-
async delete(request) {
|
|
104
|
-
try {
|
|
105
|
-
const id = getIdFromRequest(request);
|
|
106
|
-
return this.multipartBase.handleDelete(id);
|
|
107
|
-
} catch (error) {
|
|
108
|
-
this.checkForUndefinedIdOrPath(error);
|
|
109
|
-
const errorWithCode = error;
|
|
110
|
-
if (errorWithCode.code === "ENOENT") {
|
|
111
|
-
throw createHttpError(404, "File not found");
|
|
112
|
-
}
|
|
113
|
-
throw error;
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Compose and register HTTP method handlers.
|
|
118
|
-
*/
|
|
119
|
-
compose() {
|
|
120
|
-
this.registeredHandlers.set("POST", this.post.bind(this));
|
|
121
|
-
this.registeredHandlers.set("DELETE", this.delete.bind(this));
|
|
122
|
-
this.registeredHandlers.set("GET", this.get.bind(this));
|
|
123
|
-
this.registeredHandlers.set("OPTIONS", this.options.bind(this));
|
|
124
|
-
this.logger?.debug("Registered handler: %s", [...this.registeredHandlers.keys()].join(", "));
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
export { Multipart as default };
|