@visulima/storage 1.0.0-alpha.8 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (424) hide show
  1. package/CHANGELOG.md +578 -0
  2. package/LICENSE.md +237 -568
  3. package/README.md +82 -466
  4. package/dist/adapter/nuxt/module.d.ts +41 -34
  5. package/dist/adapter/nuxt/module.js +1 -93
  6. package/dist/adapter/nuxt/package.json +0 -6
  7. package/dist/ai/ai-sdk/index.d.ts +113 -0
  8. package/dist/ai/ai-sdk/index.js +1 -0
  9. package/dist/ai/claude/index.d.ts +177 -0
  10. package/dist/ai/claude/index.js +1 -0
  11. package/dist/ai/openai/index.d.ts +205 -0
  12. package/dist/ai/openai/index.js +1 -0
  13. package/dist/ai/tanstack/index.d.ts +115 -0
  14. package/dist/ai/tanstack/index.js +1 -0
  15. package/dist/handler/http/fetch/index.d.ts +303 -4
  16. package/dist/handler/http/fetch/index.js +1 -4
  17. package/dist/handler/http/hono/index.d.ts +73 -64
  18. package/dist/handler/http/hono/index.js +1 -65
  19. package/dist/handler/http/nextjs/index.d.ts +66 -58
  20. package/dist/handler/http/nextjs/index.js +1 -37
  21. package/dist/handler/http/node/index.d.ts +368 -4
  22. package/dist/handler/http/node/index.js +1 -8
  23. package/dist/handler/http/solid-start/index.d.ts +66 -57
  24. package/dist/handler/http/solid-start/index.js +1 -44
  25. package/dist/index.d.ts +106 -17
  26. package/dist/index.js +1 -13
  27. package/dist/openapi/index.d.ts +24 -5
  28. package/dist/openapi/index.js +1 -5
  29. package/dist/packem_shared/AbstractBaseStorage-Ba7cLu-t.js +1 -0
  30. package/dist/packem_shared/AwsLightFile-CpZrubaV.js +1 -0
  31. package/dist/packem_shared/AwsLightMetaStorage-DPqJ9LTr.js +1 -0
  32. package/dist/packem_shared/AwsLightStorage-DTBVxHXO.js +1 -0
  33. package/dist/packem_shared/AzureFile-DFSaVe25.js +1 -0
  34. package/dist/packem_shared/AzureSMetaStorage-ByzM6Aix.js +1 -0
  35. package/dist/packem_shared/AzureStorage-BFsD4qbF.js +1 -0
  36. package/dist/packem_shared/BaseTransformer-Buw5lX_3.js +1 -0
  37. package/dist/packem_shared/BoxFile-CseIoPW1.js +1 -0
  38. package/dist/packem_shared/BoxMetaStorage-DFwhEI9C.js +1 -0
  39. package/dist/packem_shared/BoxStorage-B_t-OVzf.js +1 -0
  40. package/dist/packem_shared/BunS3File-BcYmsz1n.js +1 -0
  41. package/dist/packem_shared/BunS3MetaStorage-DFwhEI9C.js +1 -0
  42. package/dist/packem_shared/BunS3Storage-CB_pZWlV.js +1 -0
  43. package/dist/packem_shared/BunnyFile-BgEOlcYI.js +1 -0
  44. package/dist/packem_shared/BunnyMetaStorage-DFwhEI9C.js +1 -0
  45. package/dist/packem_shared/BunnyStorage-CILSK4_Z.js +1 -0
  46. package/dist/packem_shared/CloudinaryFile-Bo5B-vM1.js +1 -0
  47. package/dist/packem_shared/CloudinaryMetaStorage-D_vNzewL.js +1 -0
  48. package/dist/packem_shared/CloudinaryStorage-DiCbdAi_.js +1 -0
  49. package/dist/packem_shared/DiskStorage-Kp5t3vnF.js +1 -0
  50. package/dist/packem_shared/DiskStorageWithChecksum-Bh6w-Iu8.js +1 -0
  51. package/dist/packem_shared/DropboxFile-BFb7eOzy.js +1 -0
  52. package/dist/packem_shared/DropboxMetaStorage-DFwhEI9C.js +1 -0
  53. package/dist/packem_shared/DropboxStorage-H8bd8hEz.js +1 -0
  54. package/dist/packem_shared/ERRORS-BIBxE2oR.js +1 -0
  55. package/dist/packem_shared/File-W8aOo15X.js +1 -0
  56. package/dist/packem_shared/Files-BA3mpDwz.js +1 -0
  57. package/dist/packem_shared/FirebaseFile-BLaBxa2A.js +1 -0
  58. package/dist/packem_shared/FirebaseMetaStorage-D_vNzewL.js +1 -0
  59. package/dist/packem_shared/FirebaseStorage-Dgk4XyMr.js +2 -0
  60. package/dist/packem_shared/FtpFile-ClWDYnt2.js +1 -0
  61. package/dist/packem_shared/FtpMetaStorage-DFwhEI9C.js +1 -0
  62. package/dist/packem_shared/FtpStorage-g_DjiR-C.js +1 -0
  63. package/dist/packem_shared/GCSConfig-BQ0OpVhe.js +1 -0
  64. package/dist/packem_shared/GCSFile-Cero7qZN.js +1 -0
  65. package/dist/packem_shared/GCSMetaStorage-3fLTlRd4.js +1 -0
  66. package/dist/packem_shared/GCStorage-DUfwVFd3.js +1 -0
  67. package/dist/packem_shared/GoogleDriveFile-DHpLhzg9.js +1 -0
  68. package/dist/packem_shared/GoogleDriveMetaStorage-DqkgoE46.js +1 -0
  69. package/dist/packem_shared/GoogleDriveStorage-D0-5egHE.js +1 -0
  70. package/dist/packem_shared/LocalMetaStorage-Bp5mVc76.js +1 -0
  71. package/dist/packem_shared/MediaTransformer-D2kUsklW.js +1 -0
  72. package/dist/packem_shared/MemoryMetaStorage-Ksgh9pe7.js +1 -0
  73. package/dist/packem_shared/MemoryStorage-DzSTdlAq.js +1 -0
  74. package/dist/packem_shared/MetaStorage-DPEUyWgN.js +1 -0
  75. package/dist/packem_shared/Metadata-B7CcBueg.js +1 -0
  76. package/dist/packem_shared/Multipart-Btj2mo9r.js +1 -0
  77. package/dist/packem_shared/Multipart-C4GpuHMU.js +1 -0
  78. package/dist/packem_shared/NetlifyBlobFile-DoFhkzaH.js +1 -0
  79. package/dist/packem_shared/NetlifyBlobMetaStorage-D_vNzewL.js +1 -0
  80. package/dist/packem_shared/NetlifyBlobStorage-DZdCmOVW.js +1 -0
  81. package/dist/packem_shared/NoOpMetrics-BLo6u4NY.js +1 -0
  82. package/dist/packem_shared/OneDriveFile-CNNJYI43.js +1 -0
  83. package/dist/packem_shared/OneDriveMetaStorage-DqkgoE46.js +1 -0
  84. package/dist/packem_shared/OneDriveStorage-CvJetV7_.js +1 -0
  85. package/dist/packem_shared/OpenTelemetryMetrics-DJDQsNKp.js +1 -0
  86. package/dist/packem_shared/PocketBaseFile-DpJpxl3e.js +1 -0
  87. package/dist/packem_shared/PocketBaseMetaStorage-CpvDRnSu.js +1 -0
  88. package/dist/packem_shared/PocketBaseStorage-BPil-koe.js +1 -0
  89. package/dist/packem_shared/Rest-BehVaxbl.js +1 -0
  90. package/dist/packem_shared/Rest-ymPCZkKR.js +1 -0
  91. package/dist/packem_shared/S3File-CpZrubaV.js +1 -0
  92. package/dist/packem_shared/S3MetaStorage-CMonflzp.js +1 -0
  93. package/dist/packem_shared/S3Storage-wslqssvr.js +1 -0
  94. package/dist/packem_shared/SftpFile-ClWDYnt2.js +1 -0
  95. package/dist/packem_shared/SftpMetaStorage-DFwhEI9C.js +1 -0
  96. package/dist/packem_shared/SftpStorage-BVbMtS2b.js +1 -0
  97. package/dist/packem_shared/SharePointFile-Blz9FS4h.js +1 -0
  98. package/dist/packem_shared/SharePointMetaStorage-DFwhEI9C.js +1 -0
  99. package/dist/packem_shared/SharePointStorage-DWjvR5oZ.js +1 -0
  100. package/dist/packem_shared/SupabaseFile-Bo5B-vM1.js +1 -0
  101. package/dist/packem_shared/SupabaseMetaStorage-DqkgoE46.js +1 -0
  102. package/dist/packem_shared/SupabaseStorage-BiKmYKb6.js +1 -0
  103. package/dist/packem_shared/TUS_RESUMABLE-CyTSRvPU.js +1 -0
  104. package/dist/packem_shared/Tus-BgbON_wQ.js +1 -0
  105. package/dist/packem_shared/Tus-v6jzkaIO.js +1 -0
  106. package/dist/packem_shared/UploadControl-DZJhI9Wh.js +1 -0
  107. package/dist/packem_shared/UploadThingFile-BTFMpcIA.js +1 -0
  108. package/dist/packem_shared/UploadThingMetaStorage-D_vNzewL.js +1 -0
  109. package/dist/packem_shared/UploadThingStorage-jrEnANC5.js +1 -0
  110. package/dist/packem_shared/ValidationError-3B06DFyE.js +1 -0
  111. package/dist/packem_shared/VercelBlobFile-CVQwKlZk.js +1 -0
  112. package/dist/packem_shared/VercelBlobMetaStorage-DFwhEI9C.js +1 -0
  113. package/dist/packem_shared/VercelBlobStorage-Y-cDgH30.js +1 -0
  114. package/dist/packem_shared/_commonjsHelpers-CWAkuNXM.js +1 -0
  115. package/dist/packem_shared/agentsCopyFile-Dl5iffdH.js +1 -0
  116. package/dist/packem_shared/akamai-DthkaFul.js +1 -0
  117. package/dist/packem_shared/alibaba-BEi25O1g.js +1 -0
  118. package/dist/packem_shared/approval-fVHwBp7u.js +1 -0
  119. package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
  120. package/dist/packem_shared/aws-light-meta-storage-DGrn72VJ.js +4 -0
  121. package/dist/packem_shared/azure-meta-storage-ClbEsfI4.js +1 -0
  122. package/dist/packem_shared/backblaze-m1N5NZ9q.js +1 -0
  123. package/dist/packem_shared/base-handler-core-EeV8gZck.js +1 -0
  124. package/dist/packem_shared/base-handler-fetch-CHzsgb7C.js +1 -0
  125. package/dist/packem_shared/base-handler-node-BjpW8pGi.js +1 -0
  126. package/dist/packem_shared/cache-Cw3QjoVN.js +1 -0
  127. package/dist/packem_shared/claudeCopyFile-BX9O4ORk.js +1 -0
  128. package/dist/packem_shared/cloudflare-CdUTErlo.js +1 -0
  129. package/dist/packem_shared/copyFile-49FtxXcm.js +1 -0
  130. package/dist/packem_shared/copyFile-BUPezT_c.js +1 -0
  131. package/dist/packem_shared/createResponsesFileTools-6Tvt2PNr.js +1 -0
  132. package/dist/packem_shared/createRetryWrapper-CxgiV_hH.js +1 -0
  133. package/dist/packem_shared/detect-file-type-BA7UBLKA.js +1 -0
  134. package/dist/packem_shared/digitalOcean-B2uB6pgz.js +1 -0
  135. package/dist/packem_shared/disk-storage-DIn-VnCh.js +1 -0
  136. package/dist/packem_shared/disk-storage-with-checksum.d-B-VGEsfl.d.ts +156 -0
  137. package/dist/packem_shared/executors-BDzMjc4y.js +1 -0
  138. package/dist/packem_shared/executors.d-BZP2rWo3.d.ts +69 -0
  139. package/dist/packem_shared/exoscale-BDa1Gjth.js +1 -0
  140. package/dist/packem_shared/filebase-CsFYJIwB.js +1 -0
  141. package/dist/packem_shared/files.d-CH0iLBNC.d.ts +655 -0
  142. package/dist/packem_shared/gcs-meta-storage-Dy37wCjI.js +1 -0
  143. package/dist/packem_shared/get-file-status-y3wTtDQs.js +1 -0
  144. package/dist/packem_shared/getFormatFromContentType-DCTTPQHm.js +1 -0
  145. package/dist/packem_shared/has-content-50BsqrWw.js +1 -0
  146. package/dist/packem_shared/headers-BAiAKekR.js +26 -0
  147. package/dist/packem_shared/hetzner-BGGFiRGD.js +1 -0
  148. package/dist/packem_shared/ibmCos-j-3TfJ5p.js +1 -0
  149. package/dist/packem_shared/idriveE2-C6pQ5pQ0.js +1 -0
  150. package/dist/packem_shared/index-nZWCQrSe.js +5 -0
  151. package/dist/packem_shared/internal-D_cZIFwI.js +1 -0
  152. package/dist/packem_shared/is-expired-CBEk6XBi.js +1 -0
  153. package/dist/packem_shared/local-meta-storage-C2T92TYb.js +11 -0
  154. package/dist/packem_shared/local-meta-storage.d-D9PBfkn6.d.ts +21 -0
  155. package/dist/packem_shared/media-transformer.d-Quf4ai47.d.ts +331 -0
  156. package/dist/packem_shared/memory-storage.d-4EU1cMt1.d.ts +101 -0
  157. package/dist/packem_shared/minio-NKquuBfS.js +1 -0
  158. package/dist/packem_shared/multipart-base-BOzY19lb.js +1 -0
  159. package/dist/packem_shared/oauth-refresh-EdGzlcOZ.js +1 -0
  160. package/dist/packem_shared/oracleCloud-DslqNpn6.js +1 -0
  161. package/dist/packem_shared/ovhCloud-CMHE6uLV.js +1 -0
  162. package/dist/packem_shared/part-match-D-9dGX42.js +1 -0
  163. package/dist/packem_shared/path-0oTTdkvl-BVg7lYf5.js +1 -0
  164. package/dist/packem_shared/posix-dirname-CfpH5wZi.js +1 -0
  165. package/dist/packem_shared/response-builder-CbSA8qPa.js +1 -0
  166. package/dist/packem_shared/rest-base-CynUg0mH.js +1 -0
  167. package/dist/packem_shared/restOpenApiSpec-Csv513qf.js +1 -0
  168. package/dist/packem_shared/s3-base-storage-DXZYN24h.js +1 -0
  169. package/dist/packem_shared/s3-base-storage.d-BQgP5B-t.d.ts +287 -0
  170. package/dist/packem_shared/scaleway-U1In3v70.js +1 -0
  171. package/dist/packem_shared/sharedErrorSchemaObject-YN65aAKj.js +1 -0
  172. package/dist/packem_shared/storage-Cyy73Y6r.js +1 -0
  173. package/dist/packem_shared/storage.d-CEM1upWM.d.ts +1176 -0
  174. package/dist/packem_shared/storj-Cb59q9kF.js +1 -0
  175. package/dist/packem_shared/sync-DhR3536K.js +1 -0
  176. package/dist/packem_shared/tencent-Q1y2GENc.js +1 -0
  177. package/dist/packem_shared/tigris-BELKoyyp.js +1 -0
  178. package/dist/packem_shared/transformOpenApiSpec-CIEAgpBD.js +1 -0
  179. package/dist/packem_shared/tus-base.d-DLzKE54M.d.ts +106 -0
  180. package/dist/packem_shared/tusOpenApiSpec-D96B03t5.js +1 -0
  181. package/dist/packem_shared/types.d-Bon9GVVe.d.ts +104 -0
  182. package/dist/packem_shared/types.d-CggTCgXr.d.ts +49 -0
  183. package/dist/packem_shared/types.d-CrUWY4On.d.ts +720 -0
  184. package/dist/packem_shared/update-size-DuNuLyxj.js +1 -0
  185. package/dist/packem_shared/vultr-B491cQ4e.js +1 -0
  186. package/dist/packem_shared/waitForStorage-ByQmG4xF.js +1 -0
  187. package/dist/packem_shared/wasabi-DFrwIoab.js +1 -0
  188. package/dist/packem_shared/xhrOpenApiSpec-DQR4h6M8.js +1 -0
  189. package/dist/packem_shared/yandex-CwzHuEKP.js +1 -0
  190. package/dist/storage/aws/clients/index.d.ts +612 -6
  191. package/dist/storage/aws/clients/index.js +1 -6
  192. package/dist/storage/aws/index.d.ts +332 -4
  193. package/dist/storage/aws/index.js +1 -3
  194. package/dist/storage/aws-light/index.d.ts +259 -4
  195. package/dist/storage/aws-light/index.js +1 -3
  196. package/dist/storage/azure/index.d.ts +236 -4
  197. package/dist/storage/azure/index.js +1 -3
  198. package/dist/storage/box/index.d.ts +189 -0
  199. package/dist/storage/box/index.js +1 -0
  200. package/dist/storage/bun-s3/index.d.ts +200 -0
  201. package/dist/storage/bun-s3/index.js +1 -0
  202. package/dist/storage/bunny/index.d.ts +119 -0
  203. package/dist/storage/bunny/index.js +1 -0
  204. package/dist/storage/cloudinary/index.d.ts +121 -0
  205. package/dist/storage/cloudinary/index.js +1 -0
  206. package/dist/storage/dropbox/index.d.ts +132 -0
  207. package/dist/storage/dropbox/index.js +1 -0
  208. package/dist/storage/firebase/index.d.ts +192 -0
  209. package/dist/storage/firebase/index.js +1 -0
  210. package/dist/storage/ftp/index.d.ts +91 -0
  211. package/dist/storage/ftp/index.js +1 -0
  212. package/dist/storage/gcs/index.d.ts +195 -5
  213. package/dist/storage/gcs/index.js +1 -4
  214. package/dist/storage/google-drive/index.d.ts +148 -0
  215. package/dist/storage/google-drive/index.js +1 -0
  216. package/dist/storage/local/index.d.ts +7 -4
  217. package/dist/storage/local/index.js +1 -3
  218. package/dist/storage/memory/index.d.ts +6 -0
  219. package/dist/storage/memory/index.js +1 -0
  220. package/dist/storage/netlify-blob/index.d.ts +147 -4
  221. package/dist/storage/netlify-blob/index.js +1 -3
  222. package/dist/storage/onedrive/index.d.ts +103 -0
  223. package/dist/storage/onedrive/index.js +1 -0
  224. package/dist/storage/pocketbase/index.d.ts +172 -0
  225. package/dist/storage/pocketbase/index.js +1 -0
  226. package/dist/storage/sftp/index.d.ts +92 -0
  227. package/dist/storage/sftp/index.js +1 -0
  228. package/dist/storage/sharepoint/index.d.ts +180 -0
  229. package/dist/storage/sharepoint/index.js +1 -0
  230. package/dist/storage/supabase/index.d.ts +115 -0
  231. package/dist/storage/supabase/index.js +1 -0
  232. package/dist/storage/uploadthing/index.d.ts +95 -0
  233. package/dist/storage/uploadthing/index.js +1 -0
  234. package/dist/storage/vercel-blob/index.d.ts +189 -4
  235. package/dist/storage/vercel-blob/index.js +1 -3
  236. package/dist/transformer/audio-transformer.d.ts +127 -125
  237. package/dist/transformer/audio-transformer.js +1 -278
  238. package/dist/transformer/image-transformer.d.ts +573 -568
  239. package/dist/transformer/image-transformer.js +1 -1100
  240. package/dist/transformer/index.d.ts +62 -5
  241. package/dist/transformer/index.js +1 -4
  242. package/dist/transformer/video-transformer.d.ts +144 -142
  243. package/dist/transformer/video-transformer.js +1 -310
  244. package/package.json +202 -50
  245. package/dist/handler/base/base-handler-core.d.ts +0 -91
  246. package/dist/handler/base/base-handler-fetch.d.ts +0 -76
  247. package/dist/handler/base/base-handler-node.d.ts +0 -137
  248. package/dist/handler/multipart/multipart-base.d.ts +0 -84
  249. package/dist/handler/multipart/multipart-fetch.d.ts +0 -64
  250. package/dist/handler/multipart/multipart.d.ts +0 -49
  251. package/dist/handler/rest/rest-base.d.ts +0 -106
  252. package/dist/handler/rest/rest-fetch.d.ts +0 -88
  253. package/dist/handler/rest/rest.d.ts +0 -93
  254. package/dist/handler/tus/tus-base.d.ts +0 -152
  255. package/dist/handler/tus/tus-fetch.d.ts +0 -72
  256. package/dist/handler/tus/tus.d.ts +0 -78
  257. package/dist/handler/types.d.ts +0 -53
  258. package/dist/handler/utils/request-parser.d.ts +0 -72
  259. package/dist/handler/utils/response-builder.d.ts +0 -83
  260. package/dist/handler/utils/storage-utils.d.ts +0 -10
  261. package/dist/handler/utils/stream-utils.d.ts +0 -29
  262. package/dist/handler/utils/upload-handlers.d.ts +0 -76
  263. package/dist/metrics/index.d.ts +0 -2
  264. package/dist/metrics/no-op-metrics.d.ts +0 -15
  265. package/dist/metrics/opentelemetry-metrics.d.ts +0 -55
  266. package/dist/openapi/rest.d.ts +0 -7
  267. package/dist/openapi/shared.d.ts +0 -13
  268. package/dist/openapi/transform.d.ts +0 -3
  269. package/dist/openapi/tus.d.ts +0 -7
  270. package/dist/openapi/xhr.d.ts +0 -7
  271. package/dist/packem_shared/AwsLightFile-tTneXZgG.js +0 -11
  272. package/dist/packem_shared/AwsLightMetaStorage-BWSOtVaN.js +0 -4
  273. package/dist/packem_shared/AwsLightStorage-Blv-GP4v.js +0 -133
  274. package/dist/packem_shared/AzureFile-CesgFzps.js +0 -8
  275. package/dist/packem_shared/AzureSMetaStorage-CFs-OYJT.js +0 -88
  276. package/dist/packem_shared/AzureStorage-B0v048hG.js +0 -357
  277. package/dist/packem_shared/BaseTransformer-C2gLib6v.js +0 -82
  278. package/dist/packem_shared/DiskStorage-BlltBst6.js +0 -12
  279. package/dist/packem_shared/DiskStorageWithChecksum-BJTmMklc.js +0 -238
  280. package/dist/packem_shared/ERRORS-D0apMqnc.js +0 -97
  281. package/dist/packem_shared/File-Bb3P23dr.js +0 -69
  282. package/dist/packem_shared/GCSConfig-vPP22kN6.js +0 -11
  283. package/dist/packem_shared/GCSFile-BIEunhAN.js +0 -8
  284. package/dist/packem_shared/GCSMetaStorage-BYhwecZl.js +0 -7
  285. package/dist/packem_shared/GCStorage-BmnoK7Rz.js +0 -406
  286. package/dist/packem_shared/LocalMetaStorage-CZHhKkMd.js +0 -7
  287. package/dist/packem_shared/MediaTransformer-D6658DL1.js +0 -1197
  288. package/dist/packem_shared/MetaStorage-pECeFOad.js +0 -46
  289. package/dist/packem_shared/Metadata-DRLXeJ0F.js +0 -89
  290. package/dist/packem_shared/Multipart-5Xpy7WhY.js +0 -163
  291. package/dist/packem_shared/Multipart-C-iU9LXj.js +0 -128
  292. package/dist/packem_shared/NetlifyBlobFile-CXzyjqrD.js +0 -14
  293. package/dist/packem_shared/NetlifyBlobMetaStorage-DxZ5aDvD.js +0 -9
  294. package/dist/packem_shared/NetlifyBlobStorage-CLPtjHqd.js +0 -376
  295. package/dist/packem_shared/NoOpMetrics-DhAk5rXc.js +0 -10
  296. package/dist/packem_shared/OpenTelemetryMetrics-BnxhqIaH.js +0 -67
  297. package/dist/packem_shared/Rest-DO7OslCs.js +0 -267
  298. package/dist/packem_shared/Rest-DTaszQ6n.js +0 -228
  299. package/dist/packem_shared/S3File-DZiyk9Qt.js +0 -11
  300. package/dist/packem_shared/S3MetaStorage-Dz9aDabA.js +0 -76
  301. package/dist/packem_shared/S3Storage-DHmTk-hU.js +0 -316
  302. package/dist/packem_shared/TUS_RESUMABLE-BfguFdM1.js +0 -434
  303. package/dist/packem_shared/Tus-BQItPVAC.js +0 -200
  304. package/dist/packem_shared/Tus-BibjweWH.js +0 -195
  305. package/dist/packem_shared/ValidationError-BfF1aE4h.js +0 -26
  306. package/dist/packem_shared/VercelBlobFile-BCg4aTEq.js +0 -18
  307. package/dist/packem_shared/VercelBlobMetaStorage-Bd9F-VFm.js +0 -9
  308. package/dist/packem_shared/VercelBlobStorage-DD9LMOS6.js +0 -261
  309. package/dist/packem_shared/_commonjsHelpers-B85MJLTf.js +0 -5
  310. package/dist/packem_shared/aws-light-meta-storage-DKJBgbR6.js +0 -446
  311. package/dist/packem_shared/backblaze-BlMnIcBC.js +0 -20
  312. package/dist/packem_shared/base-handler-core-DLEVHemv.js +0 -303
  313. package/dist/packem_shared/base-handler-fetch-A7V0N6AJ.js +0 -291
  314. package/dist/packem_shared/base-handler-node-Dx7ce3sU.js +0 -730
  315. package/dist/packem_shared/cache-B88MXQ_2.js +0 -18
  316. package/dist/packem_shared/cloudflare-Bi1q8wXE.js +0 -21
  317. package/dist/packem_shared/defaultCloudStorageFileNameValidation-DUuacjWv.js +0 -11
  318. package/dist/packem_shared/digitalOcean-CWQRJM3L.js +0 -21
  319. package/dist/packem_shared/disk-storage-Bh2wy3YW.js +0 -810
  320. package/dist/packem_shared/gcs-meta-storage-DqNjM7DP.js +0 -158
  321. package/dist/packem_shared/has-content-CY66ehMK.js +0 -3
  322. package/dist/packem_shared/headers-C9DasoT1.js +0 -1318
  323. package/dist/packem_shared/is-expired-CTThU1q5.js +0 -8
  324. package/dist/packem_shared/isRetryableError-Dycp7127.js +0 -82
  325. package/dist/packem_shared/isValidMediaType-BeDgiObq.js +0 -35
  326. package/dist/packem_shared/local-meta-storage-By-3SNBI.js +0 -649
  327. package/dist/packem_shared/minio-C2YBZQOw.js +0 -22
  328. package/dist/packem_shared/multipart-base-BY0rhkw5.js +0 -102
  329. package/dist/packem_shared/part-match-BMNqHDYD.js +0 -96
  330. package/dist/packem_shared/path-CR6YkPXX-7R1-9CMk.js +0 -161
  331. package/dist/packem_shared/response-builder-BtnRiBUI.js +0 -45
  332. package/dist/packem_shared/rest-base-Bt9Np3M8.js +0 -457
  333. package/dist/packem_shared/restOpenApiSpec-D1JC_Jto.js +0 -800
  334. package/dist/packem_shared/s3-base-storage-C1DIHTYY.js +0 -510
  335. package/dist/packem_shared/sharedGet-Cpo7QUyu.js +0 -1019
  336. package/dist/packem_shared/storage-C6NSXb8h.js +0 -1175
  337. package/dist/packem_shared/tigris-Hac8TKnX.js +0 -21
  338. package/dist/packem_shared/transformOpenApiSpec-DWM5WtnN.js +0 -975
  339. package/dist/packem_shared/tusOpenApiSpec-mBZkl7he.js +0 -740
  340. package/dist/packem_shared/update-size-CCGm6i1J.js +0 -8
  341. package/dist/packem_shared/validator-BeX_lJet.js +0 -78
  342. package/dist/packem_shared/waitForStorage-Cscw85sx.js +0 -18
  343. package/dist/packem_shared/wasabi-DIyflHSd.js +0 -21
  344. package/dist/packem_shared/xhrOpenApiSpec-B1V5Dxrj.js +0 -264
  345. package/dist/storage/aws/clients/backblaze.d.ts +0 -12
  346. package/dist/storage/aws/clients/cloudflare.d.ts +0 -13
  347. package/dist/storage/aws/clients/digital-ocean.d.ts +0 -12
  348. package/dist/storage/aws/clients/minio.d.ts +0 -13
  349. package/dist/storage/aws/clients/tigris.d.ts +0 -12
  350. package/dist/storage/aws/clients/types.d.ts +0 -95
  351. package/dist/storage/aws/clients/wasabi.d.ts +0 -12
  352. package/dist/storage/aws/s3-base-storage.d.ts +0 -248
  353. package/dist/storage/aws/s3-client-adapter.d.ts +0 -110
  354. package/dist/storage/aws/s3-file.d.ts +0 -10
  355. package/dist/storage/aws/s3-meta-storage.d.ts +0 -15
  356. package/dist/storage/aws/s3-storage.d.ts +0 -70
  357. package/dist/storage/aws/types.d.ts +0 -119
  358. package/dist/storage/aws-light/aws-light-api-adapter.d.ts +0 -130
  359. package/dist/storage/aws-light/aws-light-file.d.ts +0 -10
  360. package/dist/storage/aws-light/aws-light-meta-storage.d.ts +0 -19
  361. package/dist/storage/aws-light/aws-light-storage.d.ts +0 -65
  362. package/dist/storage/aws-light/types.d.ts +0 -37
  363. package/dist/storage/azure/azure-file.d.ts +0 -6
  364. package/dist/storage/azure/azure-meta-storage.d.ts +0 -15
  365. package/dist/storage/azure/azure-storage.d.ts +0 -69
  366. package/dist/storage/azure/types.d.ts +0 -62
  367. package/dist/storage/gcs/fetch-error.d.ts +0 -11
  368. package/dist/storage/gcs/gcs-config.d.ts +0 -2
  369. package/dist/storage/gcs/gcs-file.d.ts +0 -6
  370. package/dist/storage/gcs/gcs-meta-storage.d.ts +0 -27
  371. package/dist/storage/gcs/gcs-storage.d.ts +0 -91
  372. package/dist/storage/gcs/types.d.ts +0 -55
  373. package/dist/storage/gcs/utils.d.ts +0 -7
  374. package/dist/storage/local/disk-storage-with-checksum.d.ts +0 -15
  375. package/dist/storage/local/disk-storage.d.ts +0 -135
  376. package/dist/storage/local/local-meta-storage.d.ts +0 -32
  377. package/dist/storage/meta-storage.d.ts +0 -30
  378. package/dist/storage/netlify-blob/netlify-blob-file.d.ts +0 -12
  379. package/dist/storage/netlify-blob/netlify-blob-meta-storage.d.ts +0 -7
  380. package/dist/storage/netlify-blob/netlify-blob-storage.d.ts +0 -93
  381. package/dist/storage/netlify-blob/types.d.ts +0 -30
  382. package/dist/storage/storage.d.ts +0 -353
  383. package/dist/storage/types.d.ts +0 -221
  384. package/dist/storage/utils/file/file.d.ts +0 -25
  385. package/dist/storage/utils/file/get-file-status.d.ts +0 -9
  386. package/dist/storage/utils/file/has-content.d.ts +0 -9
  387. package/dist/storage/utils/file/index.d.ts +0 -10
  388. package/dist/storage/utils/file/is-expired.d.ts +0 -8
  389. package/dist/storage/utils/file/metadata.d.ts +0 -18
  390. package/dist/storage/utils/file/part-match.d.ts +0 -11
  391. package/dist/storage/utils/file/types.d.ts +0 -37
  392. package/dist/storage/utils/file/update-metadata.d.ts +0 -10
  393. package/dist/storage/utils/file/update-size.d.ts +0 -10
  394. package/dist/storage/vercel-blob/types.d.ts +0 -32
  395. package/dist/storage/vercel-blob/vercel-blob-file.d.ts +0 -16
  396. package/dist/storage/vercel-blob/vercel-blob-meta-storage.d.ts +0 -7
  397. package/dist/storage/vercel-blob/vercel-blob-storage.d.ts +0 -76
  398. package/dist/transformer/base-transformer.d.ts +0 -63
  399. package/dist/transformer/media-transformer.d.ts +0 -332
  400. package/dist/transformer/types.d.ts +0 -652
  401. package/dist/transformer/utils.d.ts +0 -33
  402. package/dist/transformer/validation-error.d.ts +0 -23
  403. package/dist/utils/cache.d.ts +0 -32
  404. package/dist/utils/chunked-upload.d.ts +0 -65
  405. package/dist/utils/detect-file-type.d.ts +0 -28
  406. package/dist/utils/errors.d.ts +0 -74
  407. package/dist/utils/file-path-url-matcher.d.ts +0 -18
  408. package/dist/utils/headers.d.ts +0 -111
  409. package/dist/utils/http.d.ts +0 -92
  410. package/dist/utils/locker.d.ts +0 -26
  411. package/dist/utils/pipes/stream-checksum.d.ts +0 -47
  412. package/dist/utils/pipes/stream-length.d.ts +0 -22
  413. package/dist/utils/primitives/get-last-one.d.ts +0 -3
  414. package/dist/utils/primitives/is-record.d.ts +0 -2
  415. package/dist/utils/primitives/map-values.d.ts +0 -9
  416. package/dist/utils/primitives/pick.d.ts +0 -2
  417. package/dist/utils/primitives/to-milliseconds.d.ts +0 -12
  418. package/dist/utils/primitives/to-seconds.d.ts +0 -12
  419. package/dist/utils/range-checksum.d.ts +0 -33
  420. package/dist/utils/range-hasher.d.ts +0 -46
  421. package/dist/utils/retry.d.ts +0 -64
  422. package/dist/utils/types.d.ts +0 -108
  423. package/dist/utils/validation-error.d.ts +0 -22
  424. 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 };