@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.
Files changed (417) hide show
  1. package/CHANGELOG.md +361 -0
  2. package/LICENSE.md +213 -573
  3. package/README.md +83 -470
  4. package/dist/adapter/nuxt/module.d.ts +41 -34
  5. package/dist/adapter/nuxt/module.js +1 -93
  6. package/dist/adapter/nuxt/node_modules/.bin/nuxi +22 -0
  7. package/dist/adapter/nuxt/node_modules/.bin/nuxt +22 -0
  8. package/dist/adapter/nuxt/package.json +0 -6
  9. package/dist/ai/ai-sdk/index.d.ts +113 -0
  10. package/dist/ai/ai-sdk/index.js +1 -0
  11. package/dist/ai/claude/index.d.ts +177 -0
  12. package/dist/ai/claude/index.js +1 -0
  13. package/dist/ai/openai/index.d.ts +205 -0
  14. package/dist/ai/openai/index.js +1 -0
  15. package/dist/ai/tanstack/index.d.ts +115 -0
  16. package/dist/ai/tanstack/index.js +1 -0
  17. package/dist/handler/http/fetch/index.d.ts +303 -4
  18. package/dist/handler/http/fetch/index.js +1 -4
  19. package/dist/handler/http/hono/index.d.ts +73 -64
  20. package/dist/handler/http/hono/index.js +1 -65
  21. package/dist/handler/http/nextjs/index.d.ts +66 -58
  22. package/dist/handler/http/nextjs/index.js +1 -37
  23. package/dist/handler/http/node/index.d.ts +361 -4
  24. package/dist/handler/http/node/index.js +1 -4
  25. package/dist/handler/http/solid-start/index.d.ts +66 -57
  26. package/dist/handler/http/solid-start/index.js +1 -44
  27. package/dist/index.d.ts +58 -17
  28. package/dist/index.js +1 -13
  29. package/dist/openapi/index.d.ts +24 -5
  30. package/dist/openapi/index.js +1 -5
  31. package/dist/packem_shared/AwsLightFile-BSqjc_rD.js +1 -0
  32. package/dist/packem_shared/AwsLightMetaStorage-B-iQbToR.js +1 -0
  33. package/dist/packem_shared/AwsLightStorage-w21RxjUm.js +1 -0
  34. package/dist/packem_shared/AzureFile-Dgj2Tef4.js +1 -0
  35. package/dist/packem_shared/AzureSMetaStorage-CR-lfQNQ.js +1 -0
  36. package/dist/packem_shared/AzureStorage-2kl7JDXs.js +1 -0
  37. package/dist/packem_shared/BaseTransformer-Fpcuz4kj.js +1 -0
  38. package/dist/packem_shared/BoxFile-Be0S4N1L.js +1 -0
  39. package/dist/packem_shared/BoxMetaStorage-DLdXbZaV.js +1 -0
  40. package/dist/packem_shared/BoxStorage-BUeEJoGL.js +1 -0
  41. package/dist/packem_shared/BunS3File-D-SRiyrm.js +1 -0
  42. package/dist/packem_shared/BunS3MetaStorage-Bv_CTTMz.js +1 -0
  43. package/dist/packem_shared/BunS3Storage-WM3rF6Fw.js +1 -0
  44. package/dist/packem_shared/BunnyFile-Dotl-lO9.js +1 -0
  45. package/dist/packem_shared/BunnyMetaStorage-DNMTSeoN.js +1 -0
  46. package/dist/packem_shared/BunnyStorage-D3s2fRB3.js +1 -0
  47. package/dist/packem_shared/CloudinaryFile-B5-m33eS.js +1 -0
  48. package/dist/packem_shared/CloudinaryMetaStorage-DEBk5eQy.js +1 -0
  49. package/dist/packem_shared/CloudinaryStorage-BBE2-aVz.js +1 -0
  50. package/dist/packem_shared/DiskStorage-DL0GiG6k.js +1 -0
  51. package/dist/packem_shared/DiskStorageWithChecksum-BvUTn7O-.js +1 -0
  52. package/dist/packem_shared/DropboxFile-BGVG2kXM.js +1 -0
  53. package/dist/packem_shared/DropboxMetaStorage-C6vj1QDA.js +1 -0
  54. package/dist/packem_shared/DropboxStorage-BL3OIdE_.js +1 -0
  55. package/dist/packem_shared/ERRORS-CyOuSMLY.js +1 -0
  56. package/dist/packem_shared/File-BhfUgJjs.js +1 -0
  57. package/dist/packem_shared/Files-CJh9_N-9.js +1 -0
  58. package/dist/packem_shared/FirebaseFile-JEu3plMP.js +1 -0
  59. package/dist/packem_shared/FirebaseMetaStorage-CzyOim-J.js +1 -0
  60. package/dist/packem_shared/FirebaseStorage-lXMXy3Pm.js +2 -0
  61. package/dist/packem_shared/FtpFile-B8jaICTB.js +1 -0
  62. package/dist/packem_shared/FtpMetaStorage-1Njy0DpU.js +1 -0
  63. package/dist/packem_shared/FtpStorage-Dw94efNW.js +1 -0
  64. package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
  65. package/dist/packem_shared/GCSFile-CDQ6IWAz.js +1 -0
  66. package/dist/packem_shared/GCSMetaStorage-udgXA5ia.js +1 -0
  67. package/dist/packem_shared/GCStorage-ChY6uJuO.js +1 -0
  68. package/dist/packem_shared/GoogleDriveFile-D0aGfGbL.js +1 -0
  69. package/dist/packem_shared/GoogleDriveMetaStorage-WGuUZPyx.js +1 -0
  70. package/dist/packem_shared/GoogleDriveStorage-C0NhBBWH.js +1 -0
  71. package/dist/packem_shared/LocalMetaStorage-QMKL7McF.js +1 -0
  72. package/dist/packem_shared/MediaTransformer-D-1c9Q_k.js +1 -0
  73. package/dist/packem_shared/MetaStorage-Y4m1dWgd.js +1 -0
  74. package/dist/packem_shared/Metadata-B6Ir0KO7.js +1 -0
  75. package/dist/packem_shared/Multipart-CIFfQksD.js +1 -0
  76. package/dist/packem_shared/Multipart-D9WIud9R.js +1 -0
  77. package/dist/packem_shared/NetlifyBlobFile-PMZLJ8AC.js +1 -0
  78. package/dist/packem_shared/NetlifyBlobMetaStorage-ClIFdTkT.js +1 -0
  79. package/dist/packem_shared/NetlifyBlobStorage-CO89TGvF.js +1 -0
  80. package/dist/packem_shared/NoOpMetrics-Dky06sf1.js +1 -0
  81. package/dist/packem_shared/OneDriveFile-XbVVKIJh.js +1 -0
  82. package/dist/packem_shared/OneDriveMetaStorage-DS4f83X2.js +1 -0
  83. package/dist/packem_shared/OneDriveStorage-jAN46vRm.js +1 -0
  84. package/dist/packem_shared/OpenTelemetryMetrics-9uxQMSlg.js +1 -0
  85. package/dist/packem_shared/PocketBaseFile-CkAiSBb0.js +1 -0
  86. package/dist/packem_shared/PocketBaseMetaStorage-B6utPncj.js +1 -0
  87. package/dist/packem_shared/PocketBaseStorage-DpOjOKAt.js +1 -0
  88. package/dist/packem_shared/Rest-BuD3ySAg.js +1 -0
  89. package/dist/packem_shared/Rest-URrQ5FYM.js +1 -0
  90. package/dist/packem_shared/S3File-BfmCOET4.js +1 -0
  91. package/dist/packem_shared/S3MetaStorage-vcriiosn.js +1 -0
  92. package/dist/packem_shared/S3Storage-n1ohEZj4.js +1 -0
  93. package/dist/packem_shared/SftpFile-CQCxZNVq.js +1 -0
  94. package/dist/packem_shared/SftpMetaStorage-DYqXwCdM.js +1 -0
  95. package/dist/packem_shared/SftpStorage-Ban-WN8v.js +1 -0
  96. package/dist/packem_shared/SharePointFile-BA6X9Sxr.js +1 -0
  97. package/dist/packem_shared/SharePointMetaStorage-DVM5-X6g.js +1 -0
  98. package/dist/packem_shared/SharePointStorage-BY90zh1c.js +1 -0
  99. package/dist/packem_shared/SupabaseFile-DZ1iv9gM.js +1 -0
  100. package/dist/packem_shared/SupabaseMetaStorage-ivXoYVUu.js +1 -0
  101. package/dist/packem_shared/SupabaseStorage-pNbHAE1Y.js +1 -0
  102. package/dist/packem_shared/TUS_RESUMABLE-B7KtPVeC.js +1 -0
  103. package/dist/packem_shared/Tus-Fp_hx5ug.js +1 -0
  104. package/dist/packem_shared/Tus-TNG9HAY8.js +1 -0
  105. package/dist/packem_shared/UploadThingFile-BpG9mE8K.js +1 -0
  106. package/dist/packem_shared/UploadThingMetaStorage-BvKNzgm7.js +1 -0
  107. package/dist/packem_shared/UploadThingStorage-BcmIE2dI.js +1 -0
  108. package/dist/packem_shared/ValidationError-D8KKJiKA.js +1 -0
  109. package/dist/packem_shared/VercelBlobFile-Cni_1qwD.js +1 -0
  110. package/dist/packem_shared/VercelBlobMetaStorage-CwaqWucZ.js +1 -0
  111. package/dist/packem_shared/VercelBlobStorage-s260zfFo.js +1 -0
  112. package/dist/packem_shared/_commonjsHelpers-D6W6KoPK.js +1 -0
  113. package/dist/packem_shared/agentsListFiles-R-CnGKc4.js +1 -0
  114. package/dist/packem_shared/akamai-BYS9pP8S.js +1 -0
  115. package/dist/packem_shared/alibaba-BJQ6ijoK.js +1 -0
  116. package/dist/packem_shared/approval-BBeX3o4E.js +1 -0
  117. package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
  118. package/dist/packem_shared/aws-light-meta-storage-CstQBYXG.js +4 -0
  119. package/dist/packem_shared/azure-meta-storage-C4SrMtT2.js +1 -0
  120. package/dist/packem_shared/backblaze-CvdtCvJL.js +1 -0
  121. package/dist/packem_shared/base-handler-core-BYDQditz.js +1 -0
  122. package/dist/packem_shared/base-handler-fetch-DWzsPkmV.js +1 -0
  123. package/dist/packem_shared/base-handler-node-Dety2rQB.js +1 -0
  124. package/dist/packem_shared/cache-qV_5Umeq.js +1 -0
  125. package/dist/packem_shared/claudeListFiles-DAezbKEi.js +1 -0
  126. package/dist/packem_shared/cloudflare-Bm_Pg6yx.js +1 -0
  127. package/dist/packem_shared/createResponsesFileTools-BCep-qdO.js +1 -0
  128. package/dist/packem_shared/defaultCloudStorageFileNameValidation-shIZX_7L.js +1 -0
  129. package/dist/packem_shared/detect-file-type-5JhzC9RU.js +1 -0
  130. package/dist/packem_shared/digitalOcean-Lj1NfDzc.js +1 -0
  131. package/dist/packem_shared/disk-storage-CKAJvhcj.js +1 -0
  132. package/dist/packem_shared/disk-storage-with-checksum.d-mHcg2uLw.d.ts +150 -0
  133. package/dist/packem_shared/executors-DG6hGtvm.js +1 -0
  134. package/dist/packem_shared/executors.d-X4hz3zfu.d.ts +65 -0
  135. package/dist/packem_shared/exoscale-O0HzxoDz.js +1 -0
  136. package/dist/packem_shared/filebase-D-urO4Ob.js +1 -0
  137. package/dist/packem_shared/gcs-meta-storage-mZiqlX-9.js +1 -0
  138. package/dist/packem_shared/has-content-Bx2p8Okx.js +1 -0
  139. package/dist/packem_shared/headers-DC2MEOrK.js +27 -0
  140. package/dist/packem_shared/hetzner-DDxE7Gy7.js +1 -0
  141. package/dist/packem_shared/ibmCos-Rx_yku4H.js +1 -0
  142. package/dist/packem_shared/idriveE2-BFhw0Vwy.js +1 -0
  143. package/dist/packem_shared/index-B4ETk0Lu.js +5 -0
  144. package/dist/packem_shared/index.d-C4Fivh4I.d.ts +94 -0
  145. package/dist/packem_shared/is-expired-1JuZjDtb.js +1 -0
  146. package/dist/packem_shared/isRetryableError-BhizNeAz.js +1 -0
  147. package/dist/packem_shared/isValidMediaType-B-2UKjZx.js +1 -0
  148. package/dist/packem_shared/listFiles-B6VF05d-.js +1 -0
  149. package/dist/packem_shared/listFiles-BtP6VnUp.js +1 -0
  150. package/dist/packem_shared/local-meta-storage-Bi0mK6gD.js +1 -0
  151. package/dist/packem_shared/local-meta-storage.d-B11vHYNm.d.ts +21 -0
  152. package/dist/packem_shared/media-transformer.d-C3QvECD7.d.ts +331 -0
  153. package/dist/packem_shared/minio-T_Z3iEy7.js +1 -0
  154. package/dist/packem_shared/multipart-base-BxckfvQf.js +1 -0
  155. package/dist/packem_shared/oauth-refresh-Dg2ybc6_.js +1 -0
  156. package/dist/packem_shared/oracleCloud-D5T9s4JV.js +1 -0
  157. package/dist/packem_shared/ovhCloud-DCwef2fe.js +1 -0
  158. package/dist/packem_shared/part-match-B5fLLmFw.js +1 -0
  159. package/dist/packem_shared/path-D7rMc9nq-B718mbm6.js +1 -0
  160. package/dist/packem_shared/posix-dirname-CiHXPPnw.js +1 -0
  161. package/dist/packem_shared/response-builder-Wdo_fvcF.js +1 -0
  162. package/dist/packem_shared/rest-base-DI7xFXr5.js +1 -0
  163. package/dist/packem_shared/restOpenApiSpec-PaIVbESh.js +1 -0
  164. package/dist/packem_shared/s3-base-storage-Dbexfg7p.js +1 -0
  165. package/dist/packem_shared/s3-base-storage.d-V3N2nKCt.d.ts +260 -0
  166. package/dist/packem_shared/scaleway-ygRXOss9.js +1 -0
  167. package/dist/packem_shared/sharedGet-Ce7WGAsc.js +1 -0
  168. package/dist/packem_shared/storage-Dh0tJh7j.js +1 -0
  169. package/dist/packem_shared/storage.d-RteRC-cG.d.ts +1106 -0
  170. package/dist/packem_shared/storj-CVA9mM-7.js +1 -0
  171. package/dist/packem_shared/tencent-CAcAGaIW.js +1 -0
  172. package/dist/packem_shared/tigris-wmhjfsH2.js +1 -0
  173. package/dist/packem_shared/transformOpenApiSpec-C0vEbDTO.js +1 -0
  174. package/dist/packem_shared/tus-base.d-CygntIPM.d.ts +99 -0
  175. package/dist/packem_shared/tusOpenApiSpec-DF0-hlWV.js +1 -0
  176. package/dist/packem_shared/types.d-ChNXbbHG.d.ts +104 -0
  177. package/dist/packem_shared/types.d-DxonY4XS.d.ts +720 -0
  178. package/dist/packem_shared/types.d-cI_cMxcZ.d.ts +49 -0
  179. package/dist/packem_shared/update-size-DANV7aa2.js +1 -0
  180. package/dist/packem_shared/vultr-lK9L-sFk.js +1 -0
  181. package/dist/packem_shared/waitForStorage-ChSBLhLc.js +1 -0
  182. package/dist/packem_shared/wasabi-JQzxdrFy.js +1 -0
  183. package/dist/packem_shared/xhrOpenApiSpec-nyoboz83.js +1 -0
  184. package/dist/packem_shared/yandex-ZwvE77v4.js +1 -0
  185. package/dist/storage/aws/clients/index.d.ts +612 -6
  186. package/dist/storage/aws/clients/index.js +1 -6
  187. package/dist/storage/aws/index.d.ts +321 -4
  188. package/dist/storage/aws/index.js +1 -3
  189. package/dist/storage/aws-light/index.d.ts +254 -4
  190. package/dist/storage/aws-light/index.js +1 -3
  191. package/dist/storage/azure/index.d.ts +217 -4
  192. package/dist/storage/azure/index.js +1 -3
  193. package/dist/storage/box/index.d.ts +189 -0
  194. package/dist/storage/box/index.js +1 -0
  195. package/dist/storage/bun-s3/index.d.ts +200 -0
  196. package/dist/storage/bun-s3/index.js +1 -0
  197. package/dist/storage/bunny/index.d.ts +119 -0
  198. package/dist/storage/bunny/index.js +1 -0
  199. package/dist/storage/cloudinary/index.d.ts +121 -0
  200. package/dist/storage/cloudinary/index.js +1 -0
  201. package/dist/storage/dropbox/index.d.ts +132 -0
  202. package/dist/storage/dropbox/index.js +1 -0
  203. package/dist/storage/firebase/index.d.ts +192 -0
  204. package/dist/storage/firebase/index.js +1 -0
  205. package/dist/storage/ftp/index.d.ts +85 -0
  206. package/dist/storage/ftp/index.js +1 -0
  207. package/dist/storage/gcs/index.d.ts +181 -5
  208. package/dist/storage/gcs/index.js +1 -4
  209. package/dist/storage/google-drive/index.d.ts +148 -0
  210. package/dist/storage/google-drive/index.js +1 -0
  211. package/dist/storage/local/index.d.ts +7 -4
  212. package/dist/storage/local/index.js +1 -3
  213. package/dist/storage/netlify-blob/index.d.ts +147 -4
  214. package/dist/storage/netlify-blob/index.js +1 -3
  215. package/dist/storage/onedrive/index.d.ts +103 -0
  216. package/dist/storage/onedrive/index.js +1 -0
  217. package/dist/storage/pocketbase/index.d.ts +172 -0
  218. package/dist/storage/pocketbase/index.js +1 -0
  219. package/dist/storage/sftp/index.d.ts +86 -0
  220. package/dist/storage/sftp/index.js +1 -0
  221. package/dist/storage/sharepoint/index.d.ts +180 -0
  222. package/dist/storage/sharepoint/index.js +1 -0
  223. package/dist/storage/supabase/index.d.ts +115 -0
  224. package/dist/storage/supabase/index.js +1 -0
  225. package/dist/storage/uploadthing/index.d.ts +95 -0
  226. package/dist/storage/uploadthing/index.js +1 -0
  227. package/dist/storage/vercel-blob/index.d.ts +189 -4
  228. package/dist/storage/vercel-blob/index.js +1 -3
  229. package/dist/transformer/audio-transformer.d.ts +127 -125
  230. package/dist/transformer/audio-transformer.js +1 -278
  231. package/dist/transformer/image-transformer.d.ts +573 -568
  232. package/dist/transformer/image-transformer.js +1 -1100
  233. package/dist/transformer/index.d.ts +62 -5
  234. package/dist/transformer/index.js +1 -4
  235. package/dist/transformer/video-transformer.d.ts +144 -142
  236. package/dist/transformer/video-transformer.js +1 -310
  237. package/package.json +195 -47
  238. package/dist/handler/base/base-handler-core.d.ts +0 -91
  239. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  240. package/dist/handler/base/base-handler-node.d.ts +0 -137
  241. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  242. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  243. package/dist/handler/multipart/multipart.d.ts +0 -49
  244. package/dist/handler/rest/rest-base.d.ts +0 -106
  245. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  246. package/dist/handler/rest/rest.d.ts +0 -93
  247. package/dist/handler/tus/tus-base.d.ts +0 -152
  248. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  249. package/dist/handler/tus/tus.d.ts +0 -78
  250. package/dist/handler/types.d.ts +0 -53
  251. package/dist/handler/utils/request-parser.d.ts +0 -72
  252. package/dist/handler/utils/response-builder.d.ts +0 -83
  253. package/dist/handler/utils/storage-utils.d.ts +0 -10
  254. package/dist/handler/utils/stream-utils.d.ts +0 -29
  255. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  256. package/dist/metrics/index.d.ts +0 -2
  257. package/dist/metrics/no-op-metrics.d.ts +0 -15
  258. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  259. package/dist/openapi/rest.d.ts +0 -7
  260. package/dist/openapi/shared.d.ts +0 -13
  261. package/dist/openapi/transform.d.ts +0 -3
  262. package/dist/openapi/tus.d.ts +0 -7
  263. package/dist/openapi/xhr.d.ts +0 -7
  264. package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
  265. package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
  266. package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
  267. package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
  268. package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
  269. package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
  270. package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
  271. package/dist/packem_shared/DiskStorage-BlltBst6.js +0 -12
  272. package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +0 -238
  273. package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
  274. package/dist/packem_shared/File-Bb3P23dr.js +0 -69
  275. package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
  276. package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
  277. package/dist/packem_shared/GCSMetaStorage-BMFEdzJ7.js +0 -7
  278. package/dist/packem_shared/GCStorage-DnhiwaS9.js +0 -406
  279. package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
  280. package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
  281. package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
  282. package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
  283. package/dist/packem_shared/Multipart-CNFK_Okz.js +0 -163
  284. package/dist/packem_shared/Multipart-CtUL7BQw.js +0 -128
  285. package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
  286. package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
  287. package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
  288. package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
  289. package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
  290. package/dist/packem_shared/Rest-CAOAEkOj.js +0 -267
  291. package/dist/packem_shared/Rest-DNuLwBrK.js +0 -228
  292. package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
  293. package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
  294. package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
  295. package/dist/packem_shared/TUS_RESUMABLE-GJzZ9R-f.js +0 -434
  296. package/dist/packem_shared/Tus-B8PmlMgR.js +0 -200
  297. package/dist/packem_shared/Tus-C4F1aYOl.js +0 -195
  298. package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
  299. package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
  300. package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
  301. package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
  302. package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
  303. package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
  304. package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
  305. package/dist/packem_shared/base-handler-core-BKuf4YLT.js +0 -303
  306. package/dist/packem_shared/base-handler-fetch-Cr0hLiqg.js +0 -291
  307. package/dist/packem_shared/base-handler-node-gk5aN9Cx.js +0 -730
  308. package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
  309. package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
  310. package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
  311. package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
  312. package/dist/packem_shared/disk-storage-Bh2wy3YW.js +0 -810
  313. package/dist/packem_shared/gcs-meta-storage-0tgMNnPO.js +0 -158
  314. package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
  315. package/dist/packem_shared/headers-DoS5nwM-.js +0 -3220
  316. package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
  317. package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
  318. package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
  319. package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
  320. package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
  321. package/dist/packem_shared/multipart-base-B3i67SSX.js +0 -102
  322. package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
  323. package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
  324. package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
  325. package/dist/packem_shared/rest-base-GRCcnan7.js +0 -457
  326. package/dist/packem_shared/restOpenApiSpec-CwcHHY2C.js +0 -800
  327. package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
  328. package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
  329. package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
  330. package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
  331. package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
  332. package/dist/packem_shared/tusOpenApiSpec-6ohiToBy.js +0 -740
  333. package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
  334. package/dist/packem_shared/validator-BeX_lJet.js +0 -78
  335. package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
  336. package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
  337. package/dist/packem_shared/xhrOpenApiSpec-DS17brnx.js +0 -264
  338. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  339. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  340. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  341. package/dist/storage/aws/clients/minio.d.ts +0 -13
  342. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  343. package/dist/storage/aws/clients/types.d.ts +0 -95
  344. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  345. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  346. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  347. package/dist/storage/aws/s3-file.d.ts +0 -10
  348. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  349. package/dist/storage/aws/s3-storage.d.ts +0 -70
  350. package/dist/storage/aws/types.d.ts +0 -119
  351. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  352. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  353. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  354. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
  355. package/dist/storage/aws-light/types.d.ts +0 -37
  356. package/dist/storage/azure/azure-file.d.ts +0 -6
  357. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  358. package/dist/storage/azure/azure-storage.d.ts +0 -69
  359. package/dist/storage/azure/types.d.ts +0 -62
  360. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  361. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  362. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  363. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  364. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  365. package/dist/storage/gcs/types.d.ts +0 -55
  366. package/dist/storage/gcs/utils.d.ts +0 -7
  367. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  368. package/dist/storage/local/disk-storage.d.ts +0 -135
  369. package/dist/storage/local/local-meta-storage.d.ts +0 -32
  370. package/dist/storage/meta-storage.d.ts +0 -30
  371. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  372. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
  373. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  374. package/dist/storage/netlify-blob/types.d.ts +0 -30
  375. package/dist/storage/storage.d.ts +0 -353
  376. package/dist/storage/types.d.ts +0 -221
  377. package/dist/storage/utils/file/file.d.ts +0 -25
  378. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  379. package/dist/storage/utils/file/has-content.d.ts +0 -9
  380. package/dist/storage/utils/file/index.d.ts +0 -10
  381. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  382. package/dist/storage/utils/file/metadata.d.ts +0 -18
  383. package/dist/storage/utils/file/part-match.d.ts +0 -11
  384. package/dist/storage/utils/file/types.d.ts +0 -37
  385. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  386. package/dist/storage/utils/file/update-size.d.ts +0 -10
  387. package/dist/storage/vercel-blob/types.d.ts +0 -32
  388. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  389. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
  390. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  391. package/dist/transformer/base-transformer.d.ts +0 -63
  392. package/dist/transformer/media-transformer.d.ts +0 -332
  393. package/dist/transformer/types.d.ts +0 -652
  394. package/dist/transformer/utils.d.ts +0 -33
  395. package/dist/transformer/validation-error.d.ts +0 -23
  396. package/dist/utils/cache.d.ts +0 -32
  397. package/dist/utils/chunked-upload.d.ts +0 -65
  398. package/dist/utils/detect-file-type.d.ts +0 -28
  399. package/dist/utils/errors.d.ts +0 -74
  400. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  401. package/dist/utils/headers.d.ts +0 -111
  402. package/dist/utils/http.d.ts +0 -92
  403. package/dist/utils/locker.d.ts +0 -26
  404. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  405. package/dist/utils/pipes/stream-length.d.ts +0 -22
  406. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  407. package/dist/utils/primitives/is-record.d.ts +0 -2
  408. package/dist/utils/primitives/map-values.d.ts +0 -9
  409. package/dist/utils/primitives/pick.d.ts +0 -2
  410. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  411. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  412. package/dist/utils/range-checksum.d.ts +0 -33
  413. package/dist/utils/range-hasher.d.ts +0 -46
  414. package/dist/utils/retry.d.ts +0 -64
  415. package/dist/utils/types.d.ts +0 -108
  416. package/dist/utils/validation-error.d.ts +0 -22
  417. package/dist/utils/validator.d.ts +0 -36
@@ -1,357 +0,0 @@
1
- import { BlobServiceClient, StorageSharedKeyCredential } from '@azure/storage-blob';
2
- import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
3
- import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
4
- import { B as BaseStorage, t as toMilliseconds } from './storage-C6NSXb8h.js';
5
- import { createRetryWrapper } from './isRetryableError-Dycp7127.js';
6
- import { L as LocalMetaStorage } from './local-meta-storage-By-3SNBI.js';
7
- import AzureFile from './AzureFile-CesgFzps.js';
8
- import AzureMetaStorage from './AzureSMetaStorage-CFs-OYJT.js';
9
- import { n as normalize } from './path-CR6YkPXX-7R1-9CMk.js';
10
- import { h as hasContent } from './has-content-CY66ehMK.js';
11
-
12
- class AzureStorage extends BaseStorage {
13
- static name = "azure";
14
- checksumTypes = ["md5"];
15
- meta;
16
- client;
17
- containerClient;
18
- root;
19
- retry;
20
- // eslint-disable-next-line sonarjs/cognitive-complexity
21
- constructor(config) {
22
- super(config);
23
- if (!config.containerName) {
24
- throw new Error("Missing required parameter: Azure container name.");
25
- }
26
- const connectionString = config.connectionString || process.env.AZURE_STORAGE_CONNECTION_STRING || void 0;
27
- if (connectionString) {
28
- this.client = BlobServiceClient.fromConnectionString(connectionString);
29
- } else {
30
- const accountKey = config.accountKey || process.env.AZURE_STORAGE_ACCOUNT_KEY || void 0;
31
- const accountName = config.accountName || process.env.AZURE_STORAGE_ACCOUNT || void 0;
32
- if (!config.accountKey) {
33
- throw new Error("Missing required parameter: Azure blob storage account key.");
34
- }
35
- if (!config.accountName) {
36
- throw new Error("Missing required parameter: Azure blob storage account name.");
37
- }
38
- const signedCredentials = new StorageSharedKeyCredential(accountName, accountKey);
39
- this.client = new BlobServiceClient(config.endpoint ?? `https://${accountName}.blob.core.windows.net`, signedCredentials);
40
- }
41
- this.containerClient = this.client.getContainerClient(config.containerName);
42
- this.root = config.root ? normalize(config.root).replace(/^\//, "") : "";
43
- const retryConfig = {
44
- backoffMultiplier: 2,
45
- initialDelay: 1e3,
46
- maxDelay: 3e4,
47
- maxRetries: 3,
48
- retryableStatusCodes: [408, 429, 500, 502, 503, 504],
49
- shouldRetry: (error) => {
50
- const errorWithCode = error;
51
- if (errorWithCode.statusCode && [408, 429, 500, 502, 503, 504].includes(errorWithCode.statusCode)) {
52
- return true;
53
- }
54
- if (error instanceof Error) {
55
- const errorCode = errorWithCode.code;
56
- if (errorCode === "ECONNRESET" || errorCode === "ETIMEDOUT" || errorCode === "ENOTFOUND" || errorCode === "ECONNREFUSED") {
57
- return true;
58
- }
59
- }
60
- return false;
61
- },
62
- ...config.retryConfig
63
- };
64
- this.retry = createRetryWrapper(retryConfig);
65
- if (config.metaStorage) {
66
- this.meta = config.metaStorage;
67
- } else {
68
- let metaConfig = { ...config, ...config.metaStorageConfig, logger: this.logger };
69
- const localMeta = "directory" in metaConfig;
70
- if (localMeta) {
71
- this.logger?.debug("Using local meta storage");
72
- this.meta = new LocalMetaStorage(metaConfig);
73
- } else {
74
- if (connectionString === metaConfig.connectionString) {
75
- metaConfig = { ...metaConfig, client: this.client };
76
- }
77
- this.meta = new AzureMetaStorage(metaConfig);
78
- }
79
- }
80
- this.isReady = false;
81
- this.accessCheck().then(() => {
82
- this.isReady = true;
83
- return void 0;
84
- }).catch((error) => {
85
- this.logger?.error("Storage access check failed: %O", error);
86
- });
87
- }
88
- async create(config) {
89
- return this.instrumentOperation("create", async () => {
90
- const processedConfig = { ...config };
91
- if (config.ttl) {
92
- const ttlMs = typeof config.ttl === "string" ? toMilliseconds(config.ttl) : config.ttl;
93
- if (ttlMs !== void 0) {
94
- processedConfig.expiredAt = Date.now() + ttlMs;
95
- }
96
- }
97
- const file = new AzureFile(processedConfig);
98
- file.name = this.namingFunction(file);
99
- await this.validate(file);
100
- try {
101
- const existing = await this.getMeta(file.id);
102
- if (existing.bytesWritten >= 0) {
103
- return existing;
104
- }
105
- } catch {
106
- }
107
- const blobClient = this.containerClient.getBlockBlobClient(this.getFullPath(file.name));
108
- const stringifiedMetaValues = {};
109
- for (const [key, value] of Object.entries(file.metadata || {})) {
110
- stringifiedMetaValues[key] = JSON.stringify(value);
111
- }
112
- const response = await this.retry(
113
- () => blobClient.uploadData(Buffer.from(""), {
114
- blobHTTPHeaders: {
115
- blobContentType: file.contentType
116
- },
117
- metadata: {
118
- name: file.name,
119
- originalName: file.originalName,
120
- ...stringifiedMetaValues
121
- }
122
- })
123
- );
124
- if (response.requestId === void 0) {
125
- return throwErrorCode(ERRORS.FILE_ERROR, "azure create upload error");
126
- }
127
- file.requestId = response.requestId;
128
- file.uri = response._response.headers.get("location");
129
- file.bytesWritten = 0;
130
- await this.saveMeta(file);
131
- file.status = "created";
132
- await this.onCreate(file);
133
- return file;
134
- });
135
- }
136
- /**
137
- * Deletes an upload and its metadata.
138
- * @param query File query containing the file ID to delete.
139
- * @param query.id File ID to delete.
140
- * @returns Promise resolving to the deleted file object with status: "deleted".
141
- * @throws {UploadError} If the file metadata cannot be found.
142
- */
143
- async delete({ id }) {
144
- return this.instrumentOperation("delete", async () => {
145
- const file = await this.getMeta(id);
146
- file.status = "deleted";
147
- await Promise.all([
148
- this.deleteMeta(file.id),
149
- this.retry(() => this.containerClient.getBlockBlobClient(this.getFullPath(file.name)).deleteIfExists())
150
- ]);
151
- const deletedFile = { ...file };
152
- await this.onDelete(deletedFile);
153
- return deletedFile;
154
- });
155
- }
156
- /**
157
- * Moves an upload file to a new location.
158
- * @param name Source file name/ID.
159
- * @param destination Destination file name/ID.
160
- * @returns Promise resolving to the moved file object.
161
- * @throws {UploadError} If the source file cannot be found.
162
- */
163
- async move(name, destination) {
164
- return this.instrumentOperation("move", async () => {
165
- const copiedFile = await this.copy(name, destination);
166
- const source = this.getFullPath(name);
167
- await this.retry(() => this.containerClient.getBlockBlobClient(source).deleteIfExists());
168
- return copiedFile;
169
- });
170
- }
171
- async write(part) {
172
- return this.instrumentOperation("write", async () => {
173
- let file;
174
- if ("contentType" in part && "metadata" in part && !("body" in part) && !("start" in part)) {
175
- file = part;
176
- } else {
177
- file = await this.getMeta(part.id);
178
- await this.checkIfExpired(file);
179
- }
180
- if (file.status === "completed") {
181
- return file;
182
- }
183
- if (!partMatch(part, file)) {
184
- return throwErrorCode(ERRORS.FILE_CONFLICT);
185
- }
186
- await this.lock(part.id);
187
- try {
188
- if (hasContent(part)) {
189
- if ((file.bytesWritten === 0 || Number.isNaN(file.bytesWritten)) && (!file.contentType || file.contentType === "application/octet-stream")) {
190
- try {
191
- const { fileType, stream: detectedStream } = await detectFileTypeFromStream(part.body);
192
- if (fileType?.mime) {
193
- file.contentType = fileType.mime;
194
- }
195
- part.body = detectedStream;
196
- } catch {
197
- }
198
- }
199
- const blobClient = this.containerClient.getBlockBlobClient(this.getFullPath(file.name));
200
- const abortController = new AbortController();
201
- part.body.on("error", () => abortController.abort());
202
- const response = await this.retry(
203
- () => blobClient.uploadStream(part.body, void 0, void 0, {
204
- abortSignal: abortController.signal,
205
- blobHTTPHeaders: {
206
- blobContentType: file.contentType ?? "application/octet-stream"
207
- },
208
- metadata: file.metadata
209
- })
210
- );
211
- if (response.requestId === void 0) {
212
- return throwErrorCode(ERRORS.FILE_ERROR, "azure write upload error");
213
- }
214
- file.requestId = response.requestId;
215
- file.bytesWritten += part.contentLength || 0;
216
- file.status = getFileStatus(file);
217
- if (file.status === "completed") {
218
- file.uri = response._response.headers.get("location");
219
- await this.deleteMeta(file.id);
220
- }
221
- }
222
- } finally {
223
- await this.unlock(part.id);
224
- }
225
- return file;
226
- });
227
- }
228
- async get({ id }) {
229
- return this.instrumentOperation("get", async () => {
230
- const blobClient = this.containerClient.getBlockBlobClient(id);
231
- const exists = await this.retry(() => blobClient.exists());
232
- if (!exists) {
233
- try {
234
- await this.getMeta(id);
235
- return throwErrorCode(ERRORS.GONE);
236
- } catch {
237
- return throwErrorCode(ERRORS.FILE_NOT_FOUND);
238
- }
239
- }
240
- const response = await this.retry(() => blobClient.getProperties());
241
- const { contentLength, contentType, etag, expiresOn, lastModified, metadata } = response;
242
- return {
243
- content: await this.retry(() => blobClient.downloadToBuffer()),
244
- contentType,
245
- ETag: etag,
246
- expiredAt: expiresOn,
247
- id,
248
- metadata: metadata || {},
249
- modifiedAt: lastModified,
250
- name: metadata?.name || id,
251
- originalName: metadata?.originalName || "",
252
- size: contentLength
253
- };
254
- });
255
- }
256
- /**
257
- * Checks if a file exists by verifying both metadata and the actual Azure blob.
258
- * Returns true only if both the metadata and the blob exist.
259
- * @param query File query containing the file ID to check.
260
- * @returns Promise resolving to true if both metadata and blob exist, false otherwise.
261
- */
262
- async exists({ id }) {
263
- return this.instrumentOperation("exists", async () => {
264
- try {
265
- await this.getMeta(id);
266
- const blobClient = this.containerClient.getBlockBlobClient(id);
267
- const exists = await this.retry(() => blobClient.exists());
268
- return exists;
269
- } catch {
270
- return false;
271
- }
272
- });
273
- }
274
- /**
275
- * Copies an upload file to a new location.
276
- * @param name Source file name/ID.
277
- * @param destination Destination file name/ID.
278
- * @returns Promise resolving to the copied file object.
279
- * @throws {UploadError} If the source file cannot be found.
280
- */
281
- async copy(name, destination) {
282
- return this.instrumentOperation("copy", async () => {
283
- const source = this.containerClient.getBlockBlobClient(this.getFullPath(name));
284
- const exists = await this.retry(() => source.exists());
285
- if (!exists) {
286
- try {
287
- await this.getMeta(name);
288
- return throwErrorCode(ERRORS.GONE);
289
- } catch {
290
- return throwErrorCode(ERRORS.FILE_NOT_FOUND);
291
- }
292
- }
293
- const target = this.containerClient.getBlockBlobClient(this.getFullPath(destination));
294
- const poller = await this.retry(() => target.beginCopyFromURL(source.url));
295
- await this.retry(() => poller.pollUntilDone());
296
- const sourceFile = await this.getMeta(name);
297
- return { ...sourceFile, id: destination, name: destination };
298
- });
299
- }
300
- async list(limit = 1e3) {
301
- return this.instrumentOperation(
302
- "list",
303
- async () => {
304
- const files = [];
305
- let truncated = true;
306
- let token;
307
- while (truncated) {
308
- try {
309
- const iterator = this.containerClient.listBlobsFlat({
310
- includeMetadata: true,
311
- prefix: this.root
312
- }).byPage({ continuationToken: token, maxPageSize: limit });
313
- const next = await this.retry(() => iterator.next());
314
- const response = next.value;
315
- if (response !== void 0 && "segment" in response) {
316
- response.segment.blobItems.forEach((blob) => {
317
- if (!blob.deleted) {
318
- files.push({
319
- createdAt: blob.properties.createdOn,
320
- id: blob.name,
321
- modifiedAt: blob.properties.lastModified
322
- });
323
- }
324
- });
325
- }
326
- truncated = response?.continuationToken !== void 0;
327
- if (truncated) {
328
- token = response.continuationToken;
329
- }
330
- } catch (error) {
331
- const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
332
- await this.onError(httpError);
333
- throw error;
334
- }
335
- }
336
- return files;
337
- },
338
- { limit }
339
- );
340
- }
341
- /**
342
- * Prefixes the given filePath with the storage root location (assetFolder if configured).
343
- * @param filePath Relative file path to prefix.
344
- * @returns Full path with asset folder prefix if configured, otherwise returns original path.
345
- */
346
- getFullPath(filePath) {
347
- if (this.assetFolder !== void 0) {
348
- return `${this.assetFolder}/${filePath}`;
349
- }
350
- return filePath;
351
- }
352
- async accessCheck() {
353
- await this.retry(() => this.containerClient.getProperties());
354
- }
355
- }
356
-
357
- export { AzureStorage as default };
@@ -1,82 +0,0 @@
1
- import { Readable } from 'node:stream';
2
- import mime from 'mime';
3
- import { N as NoOpCache } from './cache-B88MXQ_2.js';
4
-
5
- class BaseTransformer {
6
- /**
7
- * Creates a new BaseTransformer instance with common functionality.
8
- * @param storage The storage backend for retrieving and storing files.
9
- * @param config Configuration options for the transformer.
10
- * @param logger Optional logger instance for logging operations.
11
- * @protected
12
- */
13
- constructor(storage, config, logger) {
14
- this.storage = storage;
15
- this.config = config;
16
- this.logger = logger;
17
- this.cache = config.cache ?? new NoOpCache();
18
- }
19
- config;
20
- logger;
21
- cache;
22
- /**
23
- * Streams transform of a file with the given steps (for large files).
24
- * @param fileId Unique identifier of the file to transform.
25
- * @param steps Array of transformation steps to apply.
26
- * @returns Promise resolving to streaming result with headers, size, and stream.
27
- */
28
- async transformStream(fileId, steps) {
29
- const result = await this.transform(fileId, steps);
30
- if (result && "buffer" in result) {
31
- const { buffer } = result;
32
- return {
33
- headers: {
34
- "Content-Length": buffer.length.toString(),
35
- "Content-Type": this.getContentTypeFromResult(result)
36
- },
37
- size: buffer.length,
38
- stream: Readable.from(buffer)
39
- };
40
- }
41
- throw new Error("Streaming transformation not supported for this transformer");
42
- }
43
- /**
44
- * Clears cache for a specific file or all files.
45
- * @param fileId Optional file identifier to clear cache for specific file.
46
- */
47
- clearCache(fileId) {
48
- if (fileId) {
49
- this.cache?.delete(fileId);
50
- } else {
51
- this.cache?.clear?.();
52
- }
53
- }
54
- /**
55
- * Gets cache statistics.
56
- * @returns Cache statistics including max size and current size.
57
- */
58
- getCacheStats() {
59
- return {
60
- maxSize: -1,
61
- // -1 indicates unlimited or unknown max size
62
- size: this.cache?.size ?? 0
63
- };
64
- }
65
- /**
66
- * Gets content type from transformation result based on format.
67
- * @param result Transformation result object containing format information.
68
- * @returns Content type string (MIME type).
69
- */
70
- // eslint-disable-next-line class-methods-use-this
71
- getContentTypeFromResult(result) {
72
- if (result?.format) {
73
- const contentType = mime.getType(result.format);
74
- if (contentType) {
75
- return contentType;
76
- }
77
- }
78
- return "application/octet-stream";
79
- }
80
- }
81
-
82
- export { BaseTransformer as default };
@@ -1,12 +0,0 @@
1
- import 'node:fs';
2
- import 'node:fs/promises';
3
- import 'node:stream';
4
- export { D as default } from './disk-storage-Bh2wy3YW.js';
5
- import './part-match-BMNqHDYD.js';
6
- import './ERRORS-D0apMqnc.js';
7
- import './storage-C6NSXb8h.js';
8
- import './local-meta-storage-By-3SNBI.js';
9
- import './File-Bb3P23dr.js';
10
- import './update-size-CCGm6i1J.js';
11
- import './has-content-CY66ehMK.js';
12
- import './path-CR6YkPXX-7R1-9CMk.js';
@@ -1,238 +0,0 @@
1
- import { createReadStream, createWriteStream } from 'node:fs';
2
- import { truncate } from 'node:fs/promises';
3
- import { Transform, pipeline } from 'node:stream';
4
- import { p as partMatch, d as detectFileTypeFromStream, g as getFileStatus } from './part-match-BMNqHDYD.js';
5
- import { throwErrorCode, ERRORS } from './ERRORS-D0apMqnc.js';
6
- import { D as DiskStorage, e as ensureFile, S as StreamLength, s as streamChecksum } from './disk-storage-Bh2wy3YW.js';
7
- import { LRUCache } from 'lru-cache';
8
- import { createHash } from 'node:crypto';
9
- import { r as remove } from './local-meta-storage-By-3SNBI.js';
10
- import { u as updateSize } from './update-size-CCGm6i1J.js';
11
- import { h as hasContent } from './has-content-CY66ehMK.js';
12
-
13
- class RangeChecksum extends Transform {
14
- /**
15
- * Creates a new RangeChecksum transform stream.
16
- * @param hashes Range hasher instance managing multiple file hashes
17
- * @param path File path identifier for this checksum operation
18
- */
19
- constructor(hashes, path) {
20
- super();
21
- this.path = path;
22
- this.hashes = hashes;
23
- this.hash = this.hashes.get(path) || createHash(this.hashes.algorithm);
24
- this.hashCopy = this.hash.copy();
25
- }
26
- hash;
27
- hashCopy;
28
- hashes;
29
- /**
30
- * Resets the hash state to its initial value.
31
- * Useful for reusing the checksum calculator for multiple operations.
32
- */
33
- reset() {
34
- this.hashes.set(this.path, this.hashCopy);
35
- }
36
- /**
37
- * Returns the current hash digest in the specified encoding.
38
- * @param encoding Output encoding format (default: 'hex')
39
- * @returns Hash digest as a string
40
- */
41
- digest(encoding = "hex") {
42
- return this.hash.copy().digest(encoding);
43
- }
44
- // eslint-disable-next-line no-underscore-dangle
45
- _transform(chunk, _encoding, done) {
46
- this.push(chunk);
47
- this.hash.update(chunk);
48
- done();
49
- }
50
- // eslint-disable-next-line class-methods-use-this,no-underscore-dangle
51
- _flush(callback) {
52
- callback();
53
- }
54
- }
55
-
56
- class RangeHasher extends LRUCache {
57
- /**
58
- * Creates a new RangeHasher instance.
59
- * @param algorithm Hash algorithm to use (default: 'sha1')
60
- * @param options LRU cache configuration options
61
- */
62
- constructor(algorithm = "sha1", options) {
63
- super({
64
- ttl: 1e3,
65
- ttlAutopurge: true,
66
- ...options
67
- });
68
- this.algorithm = algorithm;
69
- }
70
- /**
71
- * Returns the hex-encoded digest for a previously initialized path.
72
- * @param path File path identifier
73
- * @returns Hex-encoded hash digest, or empty string if not found
74
- */
75
- hex(path) {
76
- return this.get(path)?.copy().digest("hex") || "";
77
- }
78
- /**
79
- * Returns the base64-encoded digest for a previously initialized path.
80
- * @param path File path identifier
81
- * @returns Base64-encoded hash digest, or empty string if not found
82
- */
83
- base64(path) {
84
- return this.get(path)?.copy().digest("base64") || "";
85
- }
86
- /**
87
- * Initializes or continues a hasher for a file from the specified offset.
88
- * Returns cached hash if available, otherwise calculates from filesystem.
89
- * @param path File path to hash
90
- * @param start Starting offset in bytes (default: 0)
91
- * @returns Promise resolving to the hash instance
92
- */
93
- async init(path, start = 0) {
94
- return this.get(path)?.copy() || this.updateFromFs(path, start);
95
- }
96
- /**
97
- * Creates a transform stream that updates the rolling hash for a file path.
98
- * Useful for incremental hashing during streaming operations.
99
- * @param path File path identifier for hash tracking
100
- * @returns RangeChecksum transform stream instance
101
- */
102
- digester(path) {
103
- return new RangeChecksum(this, path);
104
- }
105
- async updateFromFs(path, start = 0, initial) {
106
- const hash = await this.fromFs(path, start, initial);
107
- this.set(path, hash);
108
- return hash;
109
- }
110
- fromFs(path, start = 0, initial) {
111
- return new Promise((resolve, reject) => {
112
- const digester = this.digester(path);
113
- if (initial !== void 0) {
114
- digester.hash = initial;
115
- }
116
- createReadStream(path, { start }).on("error", reject).on("end", () => resolve(digester.hash)).pipe(digester).resume();
117
- });
118
- }
119
- }
120
-
121
- class DiskStorageWithChecksum extends DiskStorage {
122
- hashes;
123
- constructor(config) {
124
- super(config);
125
- this.hashes = new RangeHasher(config?.checksum === "sha1" ? "sha1" : "md5");
126
- }
127
- async delete({ id }) {
128
- try {
129
- const file = await this.getMeta(id);
130
- const path = this.getFilePath(file.name);
131
- this.hashes.delete(path);
132
- await remove(path);
133
- await this.deleteMeta(id);
134
- const deletedFile = { ...file, status: "deleted" };
135
- await this.onDelete(deletedFile);
136
- return deletedFile;
137
- } catch (error) {
138
- this.logger?.error("[error]: Could not delete file: %O", error);
139
- const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
140
- await this.onError(httpError);
141
- }
142
- return { id };
143
- }
144
- async write(part) {
145
- let file;
146
- if ("contentType" in part && "metadata" in part && !("body" in part) && !("start" in part)) {
147
- file = part;
148
- } else {
149
- file = await this.getMeta(part.id);
150
- await this.checkIfExpired(file);
151
- }
152
- if (file.status === "completed") {
153
- return file;
154
- }
155
- if (part.size !== void 0) {
156
- updateSize(file, part.size);
157
- }
158
- if (!partMatch(part, file)) {
159
- return throwErrorCode(ERRORS.FILE_CONFLICT);
160
- }
161
- const path = this.getFilePath(file.name);
162
- try {
163
- const startPosition = part.start || 0;
164
- await ensureFile(path);
165
- if (file.bytesWritten === 0 || Number.isNaN(file.bytesWritten)) {
166
- file.bytesWritten = startPosition;
167
- }
168
- await this.hashes.init(path);
169
- if (hasContent(part)) {
170
- if (this.isUnsupportedChecksum(part.checksumAlgorithm)) {
171
- return throwErrorCode(ERRORS.UNSUPPORTED_CHECKSUM_ALGORITHM);
172
- }
173
- const isFirstChunk = part.start === 0 || part.start === void 0;
174
- if (isFirstChunk && (file.bytesWritten === 0 || Number.isNaN(file.bytesWritten)) && (!file.contentType || file.contentType === "application/octet-stream")) {
175
- try {
176
- const { fileType, stream: detectedStream } = await detectFileTypeFromStream(part.body);
177
- if (fileType?.mime) {
178
- file.contentType = fileType.mime;
179
- }
180
- part.body = detectedStream;
181
- } catch {
182
- }
183
- }
184
- const [bytesWritten, errorCode] = await this.lazyWrite({ ...part, ...file });
185
- if (errorCode) {
186
- await truncate(path, file.bytesWritten);
187
- return throwErrorCode(errorCode);
188
- }
189
- if (typeof bytesWritten !== "number") {
190
- await this.hashes.updateFromFs(path, file.bytesWritten);
191
- }
192
- file.bytesWritten = bytesWritten;
193
- }
194
- file.status = getFileStatus(file);
195
- file.hash = {
196
- algorithm: this.hashes.algorithm,
197
- value: this.hashes.hex(path)
198
- };
199
- if (file.status === "completed") {
200
- this.hashes.delete(path);
201
- }
202
- await this.saveMeta(file);
203
- return file;
204
- } catch (error) {
205
- await this.hashes.updateFromFs(path, file.bytesWritten);
206
- const httpError = this.normalizeError(error instanceof Error ? error : new Error(String(error)));
207
- await this.onError(httpError);
208
- return throwErrorCode(ERRORS.FILE_ERROR, (typeof httpError.message === "string" ? httpError.message : String(error)) || String(error));
209
- }
210
- }
211
- lazyWrite(part) {
212
- return new Promise((resolve, reject) => {
213
- const path = this.getFilePath(part.name);
214
- const destination = createWriteStream(path, { flags: "r+", start: part.start });
215
- const lengthChecker = new StreamLength(part.contentLength || Number(part.size) - part.start);
216
- const checksumChecker = streamChecksum(part.checksum, part.checksumAlgorithm);
217
- const digester = this.hashes.digester(path);
218
- const keepPartial = !part.checksum;
219
- const failWithCode = (code) => {
220
- digester.reset();
221
- destination.close();
222
- resolve([Number.NaN, code]);
223
- };
224
- lengthChecker.on("error", () => failWithCode(ERRORS.FILE_CONFLICT));
225
- checksumChecker.on("error", () => failWithCode(ERRORS.CHECKSUM_MISMATCH));
226
- part.body.on("aborted", () => failWithCode(keepPartial ? void 0 : ERRORS.REQUEST_ABORTED));
227
- pipeline(part.body, lengthChecker, checksumChecker, digester, destination, (error) => {
228
- if (error) {
229
- digester.reset();
230
- return reject(error);
231
- }
232
- return resolve([part.start + destination.bytesWritten]);
233
- });
234
- });
235
- }
236
- }
237
-
238
- export { DiskStorageWithChecksum as default };