@visulima/storage 1.0.0 → 1.0.1

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 (109) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/handler/http/fetch/index.js +1 -1
  3. package/dist/handler/http/hono/index.js +1 -1
  4. package/dist/handler/http/nextjs/index.js +1 -1
  5. package/dist/handler/http/node/index.js +1 -1
  6. package/dist/handler/http/solid-start/index.js +1 -1
  7. package/dist/index.js +1 -1
  8. package/dist/packem_shared/{AbstractBaseStorage-Ba7cLu-t.js → AbstractBaseStorage-CiPEMcuo.js} +1 -1
  9. package/dist/packem_shared/{AwsLightStorage-DTBVxHXO.js → AwsLightStorage-BK-WPL0h.js} +1 -1
  10. package/dist/packem_shared/{AzureStorage-BFsD4qbF.js → AzureStorage-1UvDIQZd.js} +1 -1
  11. package/dist/packem_shared/BoxMetaStorage-BSn6Qfnf.js +1 -0
  12. package/dist/packem_shared/{BoxStorage-B_t-OVzf.js → BoxStorage-DbGqBLux.js} +1 -1
  13. package/dist/packem_shared/BunS3MetaStorage-BSn6Qfnf.js +1 -0
  14. package/dist/packem_shared/{BunS3Storage-CB_pZWlV.js → BunS3Storage-DNvimm9e.js} +1 -1
  15. package/dist/packem_shared/BunnyMetaStorage-BSn6Qfnf.js +1 -0
  16. package/dist/packem_shared/{BunnyStorage-CILSK4_Z.js → BunnyStorage-C7d0opLL.js} +1 -1
  17. package/dist/packem_shared/CloudinaryMetaStorage-DPVnmNe5.js +1 -0
  18. package/dist/packem_shared/{CloudinaryStorage-DiCbdAi_.js → CloudinaryStorage-Dc3XA2lP.js} +1 -1
  19. package/dist/packem_shared/{DiskStorage-Kp5t3vnF.js → DiskStorage-CI07TVNu.js} +1 -1
  20. package/dist/packem_shared/{DiskStorageWithChecksum-Bh6w-Iu8.js → DiskStorageWithChecksum-vFCubS6K.js} +1 -1
  21. package/dist/packem_shared/DropboxMetaStorage-BSn6Qfnf.js +1 -0
  22. package/dist/packem_shared/{DropboxStorage-H8bd8hEz.js → DropboxStorage-CY9Ggu3m.js} +1 -1
  23. package/dist/packem_shared/{Files-BA3mpDwz.js → Files-CpIcMjP0.js} +1 -1
  24. package/dist/packem_shared/FirebaseMetaStorage-DPVnmNe5.js +1 -0
  25. package/dist/packem_shared/{FirebaseStorage-Dgk4XyMr.js → FirebaseStorage-D6O9CJXN.js} +1 -1
  26. package/dist/packem_shared/FtpMetaStorage-BSn6Qfnf.js +1 -0
  27. package/dist/packem_shared/{FtpStorage-g_DjiR-C.js → FtpStorage-DbEjbq8z.js} +1 -1
  28. package/dist/packem_shared/{GCSMetaStorage-3fLTlRd4.js → GCSMetaStorage-BuPA0DDW.js} +1 -1
  29. package/dist/packem_shared/{GCStorage-DUfwVFd3.js → GCStorage-i9t5TQc1.js} +1 -1
  30. package/dist/packem_shared/GoogleDriveMetaStorage-Cbwa1CHV.js +1 -0
  31. package/dist/packem_shared/{GoogleDriveStorage-D0-5egHE.js → GoogleDriveStorage-Bklsz7Bh.js} +1 -1
  32. package/dist/packem_shared/{LocalMetaStorage-Bp5mVc76.js → LocalMetaStorage-BhicZnNl.js} +1 -1
  33. package/dist/packem_shared/{MemoryStorage-DzSTdlAq.js → MemoryStorage-9gbWd09l.js} +1 -1
  34. package/dist/packem_shared/{Multipart-C4GpuHMU.js → Multipart-CQjYqU--.js} +1 -1
  35. package/dist/packem_shared/{Multipart-Btj2mo9r.js → Multipart-D0ok6BBy.js} +1 -1
  36. package/dist/packem_shared/NetlifyBlobMetaStorage-DPVnmNe5.js +1 -0
  37. package/dist/packem_shared/{NetlifyBlobStorage-DZdCmOVW.js → NetlifyBlobStorage-CkpCCoN1.js} +1 -1
  38. package/dist/packem_shared/OneDriveMetaStorage-Cbwa1CHV.js +1 -0
  39. package/dist/packem_shared/{OneDriveStorage-CvJetV7_.js → OneDriveStorage-CP6MvGAa.js} +1 -1
  40. package/dist/packem_shared/PocketBaseMetaStorage-DOTLwVE7.js +1 -0
  41. package/dist/packem_shared/{PocketBaseStorage-BPil-koe.js → PocketBaseStorage-2qhbI2PW.js} +1 -1
  42. package/dist/packem_shared/{Rest-ymPCZkKR.js → Rest-CI_BiZPv.js} +1 -1
  43. package/dist/packem_shared/{Rest-BehVaxbl.js → Rest-DvfN4-kf.js} +1 -1
  44. package/dist/packem_shared/{S3Storage-wslqssvr.js → S3Storage-YGeNk3Tt.js} +1 -1
  45. package/dist/packem_shared/SftpMetaStorage-BSn6Qfnf.js +1 -0
  46. package/dist/packem_shared/{SftpStorage-BVbMtS2b.js → SftpStorage-2Hz396Xr.js} +1 -1
  47. package/dist/packem_shared/SharePointMetaStorage-BSn6Qfnf.js +1 -0
  48. package/dist/packem_shared/{SharePointStorage-DWjvR5oZ.js → SharePointStorage-CrX2Pk6C.js} +1 -1
  49. package/dist/packem_shared/SupabaseMetaStorage-Cbwa1CHV.js +1 -0
  50. package/dist/packem_shared/{SupabaseStorage-BiKmYKb6.js → SupabaseStorage-Dc_DBX29.js} +1 -1
  51. package/dist/packem_shared/{Tus-v6jzkaIO.js → Tus-BBVt2ky3.js} +1 -1
  52. package/dist/packem_shared/{Tus-BgbON_wQ.js → Tus-BlBZykIL.js} +1 -1
  53. package/dist/packem_shared/UploadThingMetaStorage-DPVnmNe5.js +1 -0
  54. package/dist/packem_shared/{UploadThingStorage-jrEnANC5.js → UploadThingStorage-BChykYSe.js} +1 -1
  55. package/dist/packem_shared/VercelBlobMetaStorage-BSn6Qfnf.js +1 -0
  56. package/dist/packem_shared/{VercelBlobStorage-Y-cDgH30.js → VercelBlobStorage-CsRyPfw3.js} +1 -1
  57. package/dist/packem_shared/{base-handler-core-EeV8gZck.js → base-handler-core-D-9Ku1h-.js} +1 -1
  58. package/dist/packem_shared/{base-handler-fetch-CHzsgb7C.js → base-handler-fetch-CfkNakv8.js} +1 -1
  59. package/dist/packem_shared/{base-handler-node-BjpW8pGi.js → base-handler-node-BF1v1qDa.js} +1 -1
  60. package/dist/packem_shared/{disk-storage-DIn-VnCh.js → disk-storage-CsQcYW3s.js} +1 -1
  61. package/dist/packem_shared/gcs-meta-storage-B1RrMqH3.js +1 -0
  62. package/dist/packem_shared/local-meta-storage-iuJnu90B.js +11 -0
  63. package/dist/packem_shared/path-0oTTdkvl-DvWvbDbh.js +1 -0
  64. package/dist/packem_shared/{rest-base-CynUg0mH.js → rest-base-e0reNDE_.js} +1 -1
  65. package/dist/packem_shared/{s3-base-storage-DXZYN24h.js → s3-base-storage-BoTyhuzO.js} +1 -1
  66. package/dist/packem_shared/{storage-Cyy73Y6r.js → storage-0j5nCAUp.js} +1 -1
  67. package/dist/storage/aws/index.js +1 -1
  68. package/dist/storage/aws-light/index.js +1 -1
  69. package/dist/storage/azure/index.js +1 -1
  70. package/dist/storage/box/index.js +1 -1
  71. package/dist/storage/bun-s3/index.js +1 -1
  72. package/dist/storage/bunny/index.js +1 -1
  73. package/dist/storage/cloudinary/index.js +1 -1
  74. package/dist/storage/dropbox/index.js +1 -1
  75. package/dist/storage/firebase/index.js +1 -1
  76. package/dist/storage/ftp/index.js +1 -1
  77. package/dist/storage/gcs/index.js +1 -1
  78. package/dist/storage/google-drive/index.js +1 -1
  79. package/dist/storage/local/index.js +1 -1
  80. package/dist/storage/memory/index.js +1 -1
  81. package/dist/storage/netlify-blob/index.js +1 -1
  82. package/dist/storage/onedrive/index.js +1 -1
  83. package/dist/storage/pocketbase/index.js +1 -1
  84. package/dist/storage/sftp/index.js +1 -1
  85. package/dist/storage/sharepoint/index.js +1 -1
  86. package/dist/storage/supabase/index.js +1 -1
  87. package/dist/storage/uploadthing/index.js +1 -1
  88. package/dist/storage/vercel-blob/index.js +1 -1
  89. package/dist/transformer/image-transformer.js +1 -1
  90. package/package.json +18 -18
  91. package/dist/packem_shared/BoxMetaStorage-DFwhEI9C.js +0 -1
  92. package/dist/packem_shared/BunS3MetaStorage-DFwhEI9C.js +0 -1
  93. package/dist/packem_shared/BunnyMetaStorage-DFwhEI9C.js +0 -1
  94. package/dist/packem_shared/CloudinaryMetaStorage-D_vNzewL.js +0 -1
  95. package/dist/packem_shared/DropboxMetaStorage-DFwhEI9C.js +0 -1
  96. package/dist/packem_shared/FirebaseMetaStorage-D_vNzewL.js +0 -1
  97. package/dist/packem_shared/FtpMetaStorage-DFwhEI9C.js +0 -1
  98. package/dist/packem_shared/GoogleDriveMetaStorage-DqkgoE46.js +0 -1
  99. package/dist/packem_shared/NetlifyBlobMetaStorage-D_vNzewL.js +0 -1
  100. package/dist/packem_shared/OneDriveMetaStorage-DqkgoE46.js +0 -1
  101. package/dist/packem_shared/PocketBaseMetaStorage-CpvDRnSu.js +0 -1
  102. package/dist/packem_shared/SftpMetaStorage-DFwhEI9C.js +0 -1
  103. package/dist/packem_shared/SharePointMetaStorage-DFwhEI9C.js +0 -1
  104. package/dist/packem_shared/SupabaseMetaStorage-DqkgoE46.js +0 -1
  105. package/dist/packem_shared/UploadThingMetaStorage-D_vNzewL.js +0 -1
  106. package/dist/packem_shared/VercelBlobMetaStorage-DFwhEI9C.js +0 -1
  107. package/dist/packem_shared/gcs-meta-storage-Dy37wCjI.js +0 -1
  108. package/dist/packem_shared/local-meta-storage-C2T92TYb.js +0 -11
  109. package/dist/packem_shared/path-0oTTdkvl-BVg7lYf5.js +0 -1
@@ -1 +1 @@
1
- import{Readable as K}from"node:stream";import{setInterval as W}from"node:timers";import{inspect as Z}from"node:util";import{W as H,A as O}from"./path-0oTTdkvl-BVg7lYf5.js";import X from"type-is";import q from"./NoOpMetrics-BLo6u4NY.js";import{N as J}from"./cache-Cw3QjoVN.js";import{ErrorMap as $,throwErrorCode as b,ERRORS as E}from"./ERRORS-BIBxE2oR.js";import{randomUUID as Q}from"node:crypto";import{LRUCache as ee}from"lru-cache";import{retry as te}from"./createRetryWrapper-CxgiV_hH.js";import{t as re}from"./is-expired-CBEk6XBi.js";const se=/^(?<value>-?\d+(?:[.,]\d+)*) *(?<type>[a-z]+)?$/i,oe=/^KIBI/,ie=/^MIBI/,ae=/^GIBI/,ne=/^TEBI/,ce=/^PEBI/,le=/^EXBI/,ue=/^ZEBI/,ge=/^YIBI/,he=/^(.)IB$/,me={iec:[{long:"Bytes",short:"B"},{long:"Kibibytes",short:"KiB"},{long:"Mebibytes",short:"MiB"},{long:"Gibibytes",short:"GiB"},{long:"Tebibytes",short:"TiB"},{long:"Pebibytes",short:"PiB"},{long:"Exbibytes",short:"EiB"},{long:"Zebibytes",short:"ZiB"},{long:"Yobibytes",short:"YiB"}],iec_octet:[{long:"Octets",short:"o"},{long:"Kibioctets",short:"Kio"},{long:"Mebioctets",short:"Mio"},{long:"Gibioctets",short:"Gio"},{long:"Tebioctets",short:"Tio"},{long:"Pebioctets",short:"Pio"},{long:"Exbioctets",short:"Eio"},{long:"Zebioctets",short:"Zio"},{long:"Yobioctets",short:"Yio"}],metric:[{long:"Bytes",short:"Bytes"},{long:"Kilobytes",short:"KB"},{long:"Megabytes",short:"MB"},{long:"Gigabytes",short:"GB"},{long:"Terabytes",short:"TB"},{long:"Petabytes",short:"PB"},{long:"Exabytes",short:"EB"},{long:"Zettabytes",short:"ZB"},{long:"Yottabytes",short:"YB"}],metric_octet:[{long:"Octets",short:"o"},{long:"Kilo-octets",short:"ko"},{long:"Mega-octets",short:"Mo"},{long:"Giga-octets",short:"Go"},{long:"Tera-octets",short:"To"},{long:"Peta-octets",short:"Po"},{long:"Exa-octets",short:"Eo"},{long:"Zetta-octets",short:"Zo"},{long:"Yotta-octets",short:"Yo"}]},k=new Map,de=t=>{let e=k.get(t);if(e===void 0){const r=new Intl.NumberFormat(t);e={decimalSeparator:r.format(1.1).replaceAll(new RegExp("\\p{Number}","gu"),""),thousandSeparator:r.format(11111).replaceAll(new RegExp("\\p{Number}","gu"),"")},k.set(t,e)}return e},pe=(t,e)=>{const{decimalSeparator:r,thousandSeparator:s}=de(e);return Number.parseFloat(t.replaceAll(new RegExp(`\\${s}`,"g"),"").replace(new RegExp(`\\${r}`),"."))},fe=t=>{switch(t){case 2:return 1024;case 10:return 1e3;default:throw new Error("Unsupported base.")}},_=(t,e)=>{const r={base:2,locale:"en-US",units:"metric",...e};if(typeof t!="string"||t.length===0)throw new TypeError("Value is not a string or is empty.");if(t.length>100)throw new TypeError("Value exceeds the maximum length of 100 characters.");const s=se.exec(t)?.groups;if(!s)return Number.NaN;const o=pe(s.value,r.locale),i=(s.type??"Bytes").toUpperCase().replace(oe,"KILO").replace(ie,"MEGA").replace(ae,"GIGA").replace(ne,"TERA").replace(ce,"PETA").replace(le,"EXA").replace(ue,"ZETTA").replace(ge,"YOTTA").replace(he,"$1B"),a=me[r.units].findIndex(l=>l.short.toUpperCase()===i||l.long.toUpperCase()===i);if(a===-1)return Number.NaN;const c=fe(r.base);return o*c**a},ye=(t,e,r,s,o,i,a,c,l,n,u,h,g,d)=>{const m={d:s,h:o,m:i,mo:e,ms:c,s:a,w:r,y:t};return m.future=l,m.past=n,m.decimal=u,h!==void 0&&(m.unitMap=h),m.groupSeparator=g,m.placeholderSeparator=d,m},F={d:"d",day:"d",days:"d",h:"h",hour:"h",hours:"h",hr:"h",hrs:"h",m:"m",millisecond:"ms",milliseconds:"ms",min:"m",mins:"m",minute:"m",minutes:"m",mo:"mo",month:"mo",months:"mo",ms:"ms",s:"s",sec:"s",second:"s",seconds:"s",secs:"s",w:"w",week:"w",weeks:"w",y:"y",year:"y",years:"y",yr:"y",yrs:"y"},we=ye(t=>`year${t===1?"":"s"}`,t=>`month${t===1?"":"s"}`,t=>`week${t===1?"":"s"}`,t=>`day${t===1?"":"s"}`,t=>`hour${t===1?"":"s"}`,t=>`minute${t===1?"":"s"}`,t=>`second${t===1?"":"s"}`,t=>`millisecond${t===1?"":"s"}`,"in %s","%s ago",".",F,",","_"),z=new WeakSet,be=t=>{if(z.has(t))return;const e=["y","mo","w","d","h","m","s","ms","future","past"];for(const s of e)if(!Object.hasOwn(t,s))throw new TypeError(`Missing required property: ${s}`);if(typeof t.future!="string"||typeof t.past!="string")throw new TypeError("Properties future and past must be of type string");const r=["y","mo","w","d","h","m","s","ms"];for(const s of r)if(typeof t[s]!="string"&&typeof t[s]!="function")throw new TypeError(`Property ${s} must be of type string or function`);if(t.decimal&&typeof t.decimal!="string")throw new TypeError("Property decimal must be of type string");if(t.delimiter&&typeof t.delimiter!="string")throw new TypeError("Property delimiter must be of type string");if(t._digitReplacements&&!Array.isArray(t._digitReplacements))throw new TypeError("Property _digitReplacements must be an array");if(t._numberFirst&&typeof t._numberFirst!="boolean")throw new TypeError("Property _numberFirst must be of type boolean");if(t.unitMap&&typeof t.unitMap!="object")throw new TypeError("Property unitMap must be an object");if(t.unitMap&&Object.values(t.unitMap).some(s=>typeof s!="string"))throw new TypeError("All values in unitMap must be of type string");z.add(t)},w={d:864e5,h:36e5,m:6e4,mo:2629746e3,ms:1,s:1e3,w:6048e5,y:31556952e3},T=/[-/\\^$*+?.()|[\]{}]/g,R=new WeakMap,v=t=>String.raw`(?:(\d+(?:[.,]\d+)?)${t})?`,Ee=new RegExp(`^P${v("Y")}${v("M")}${v("W")}${v("D")}(?:T${v("H")}${v("M")}${v("S")})?$`,"i"),ve=/^(?:(\d+):)?(?:(\d+):)?(\d+)$/,$e=/^[+-]?\d+(?:\.\d+)?$/,xe=/^[-+]/,Ae=(t,e)=>{if(typeof t!="string"||t.length===0)return;const{defaultUnit:r="ms",language:s=we}={};be(s);const o=s.decimal??".",i=s.groupSeparator??",",a=s.placeholderSeparator??"_",c=o.replaceAll(T,String.raw`\$&`),l=i.replaceAll(T,String.raw`\$&`),n=a.replaceAll(T,String.raw`\$&`),u=s.unitMap??F;let h=t.replaceAll(new RegExp(String.raw`(\d)[${n}${l}](\d)`,"g"),"$1$2");if(o!=="."&&(h=h.replaceAll(new RegExp(String.raw`(\d)${c}(\d)`,"g"),"$1.$2")),$e.test(t)){const f=Number.parseFloat(h.trim());if(!Number.isNaN(f)){const p=u[r];if(p!==void 0)return f*w[p]}return}const g=Ee.exec(t);if(g){const f=[[1,w.y],[2,w.mo],[3,w.w],[4,w.d],[5,w.h],[6,w.m],[7,w.s]];let p=0,y=!1;for(const[N,I]of f){const A=g[N];A!==void 0&&(y=!0,p+=Number.parseFloat(A.replace(",","."))*I)}if(y)return p}const d=ve.exec(t);if(d){let f=0,p=0;d[2]!==void 0?(f=Number.parseInt(d[1]??"0",10),p=Number.parseInt(d[2],10)):d[1]!==void 0&&(p=Number.parseInt(d[1],10));const y=Number.parseInt(d[3]??"0",10);return f*36e5+p*6e4+y*1e3}let m=R.get(u);if(m===void 0){const f=Object.keys(u).toSorted((p,y)=>y.length-p.length).map(p=>p.replaceAll(T,String.raw`\$&`)).join("|");m=new RegExp(String.raw`(-?\d*\.?\d+)\s*(${f})`,"gi"),R.set(u,m)}let D=0,x,S=!1,B=-1,M=0;for(m.lastIndex=0;(x=m.exec(h))!==null;){const f=x[1],p=x[2];if(!f||!p)continue;const y=f.trim(),N=y.startsWith("-")?-1:1,I=y.replace(xe,""),A=Number.parseFloat(I),U=u[p.toLowerCase()];if(U===void 0)continue;if(!S)B=x.index;else if(h.slice(M,x.index).trim().length>0)return;S=!0,M=m.lastIndex;const Y=w[U];if(Number.isNaN(A))return;D+=N*A*Y}const j=h.slice(0,B).trim(),G=h.slice(M).trim();if(!(S&&(j.length>0||G.length>0))&&S)return D};class Se extends ee{constructor(e){super({ttl:3e4,ttlAutopurge:!0,...e})}lock(e){if(this.get(e)!==void 0)throw new Error(`${e} is locked`);const r=Q();return this.set(e,r),r}unlock(e,r){return this.get(e)!==r?!1:this.delete(e)}}const C=t=>{if(t===Number(t))return t;if(!t)return;const e=Ae(t);if(e!==void 0)return e};class Te extends Error{code;statusCode;body;headers;name="ValidationError";constructor(e,r,s,o){const i=typeof s=="string"?s:s?.message||"Validation error";super(i),this.code=e,this.statusCode=r,this.body=s,this.headers=o}}const Ce=t=>t&&t[0].toUpperCase()+t.slice(1),Me=t=>{if(!Array.isArray(t))return t;const[e,r,s]=t;return{body:r,headers:s,statusCode:e}};class Ne{constructor(e="ValidationError"){this.prefix=e}prefix;validators={};add(e){Object.entries(e).forEach(([r,s])=>{const o=`${this.prefix}${Ce(r)}`;if(this.validators[o]={...this.validators[o],...s},typeof this.validators[o].isValid!="function")throw new TypeError('Validation config "isValid" is missing, or it is not a function!')})}async verify(e){for(const[r,s]of Object.entries(this.validators))if(!await s.isValid(e)){const o=s.response||(r in $?$[r]:$.UnknownError),i=Me(o),{body:a,headers:c,message:l,statusCode:n}=i;throw new Te(r,n,a||l,c)}}}const We=t=>t.name==="ValidationError",Ie=t=>{if(typeof t.name=="string")return t.name;if(typeof t.title=="string")return t.title;if(typeof t.originalName=="string")return t.originalName;if(typeof t.filename=="string")return t.filename},P=(t,e)=>{const r={...t};return Object.keys(e).forEach(s=>{const o=e[s];if(o!==null&&typeof o=="object"&&!Array.isArray(o)){const i=r[s],a=i&&typeof i=="object"&&!Array.isArray(i)?i:{};r[s]=P(a,o)}else r[s]=o}),r},Oe=(t,e)=>{const r=P(t,e);Object.assign(t,r),t.originalName=Ie(t.metadata)||t.originalName},De=/(secret|password|passwd|pwd|token|api[_-]?key|credential|authorization|sas|signature|sessiontoken|connectionstring)/i,L=t=>{const e={};for(const[r,s]of Object.entries(t))typeof s=="string"&&De.test(r)?e[r]="[REDACTED]":s&&typeof s=="object"&&!Array.isArray(s)&&s.constructor===Object?e[r]=L(s):e[r]=s;return e},Be={allowMIME:["*/*"],filename:({id:t})=>t,maxMetadataSize:"8MB",maxUploadSize:"5TB",onComplete:()=>{},onCreate:()=>{},onDelete:()=>{},onError:()=>{},onUpdate:()=>{},useRelativeLocation:!1,validation:{}},Ue=t=>!t||t.length<3||t.length>255||O(t)?!1:!(t.toUpperCase().includes("../")||t.includes("\0")),Ze=t=>{if(!t||t.length<3||t.length>255||O(t))return!1;const e=t.toUpperCase();return!['"',"*",":","<",">","?","\\","|","../","\0"].some(r=>e.includes(r))};class V{onCreate;onUpdate;onComplete;onDelete;onError;isReady=!0;errorResponses={};cache;logger;metrics;genericConfig;maxMetadataSize;checksumTypes=[];supportsRange=!1;supportsMetadata=!0;supportsCacheControl=!1;supportsDelimiter=!1;reportsUploadProgress=!1;maxUploadSize;expiration;locker;namingFunction;validation=new Ne;assetFolder=void 0;concurrency;constructor(e){const r={...Be,...e};this.onCreate=r.onCreate,this.onUpdate=r.onUpdate,this.onComplete=r.onComplete,this.onDelete=r.onDelete,this.onError=r.onError,this.namingFunction=r.filename,this.maxUploadSize=typeof r.maxUploadSize=="string"?_(r.maxUploadSize):r.maxUploadSize,this.maxMetadataSize=typeof r.maxMetadataSize=="string"?_(r.maxMetadataSize):r.maxMetadataSize,this.expiration=r.expiration,this.genericConfig=r,r.assetFolder!==void 0&&(this.assetFolder=H(r.assetFolder)),this.locker=new Se({max:1e3,ttl:3e4,ttlAutopurge:!0}),this.cache=r.cache??new J,this.logger=r.logger,this.metrics=r.metrics??new q,this.logger?.debug(`${this.constructor.name} config: ${Z(L({...e,logger:this.logger.constructor}))}`);const s=C(r.expiration?.purgeInterval);s&&this.startAutoPurge(s);const o={isValid(l){if(l.size===void 0)return!0;const n=l.size;if(n==null)return!1;const u=typeof n=="number"?n:Number(n);if(Number.isNaN(u)||u<0)return!1;const h=typeof this.value=="number"?this.value:Number(this.value);return!Number.isNaN(h)&&u<=h},response:$.RequestEntityTooLarge,value:this.maxUploadSize},i={isValid(l){return!!X.is(l.contentType,this.value)},response:$.UnsupportedMediaType,value:r.allowMIME},a=r.fileNameValidation??Ue,c={isValid(l){return a(l.name)},response:$.InvalidFileName};this.validation.add({filename:c,mime:i,size:o}),this.validation.add({...r.validation})}get raw(){}async getReadUrl(e,r){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement getReadUrl()`)}async getUploadUrl(e,r){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement getUploadUrl()`)}get tusExtension(){const e=["creation","creation-with-upload","termination","checksum","creation-defer-length","concatenation"];return this.expiration&&e.push("expiration"),e}async validate(e){await this.validation.verify(e)}async exists(e,r){return this.instrumentOperation("exists",async()=>{try{return await this.getMeta(e.id,r),!0}catch{return!1}})}normalizeError(e){const r={code:e.name,message:e.message,name:e.name,statusCode:500};return{...r,message:`[${this.constructor.name}] ${r.message}`}}get config(){return this.genericConfig}async saveMeta(e){return V.assertSafeId(e.id),this.updateTimestamps(e),this.cache.set(e.id,e),this.meta.save(e.id,e)}static assertSafeId(e){(!e||typeof e!="string"||e.includes("\0")||e.includes("../")||e.includes("..\\")||e===".."||e.startsWith("../")||e.startsWith("..\\")||O(e)||/^[A-Z]:[/\\]/i.test(e))&&b(E.INVALID_FILE_NAME,`Invalid file id: "${e}"`)}async deleteMeta(e){return this.cache.delete(e),this.meta.delete(e)}async getMeta(e,r){try{const s=await this.meta.get(e);return this.cache.set(s.id,s),{...s}}catch(s){const o=this.normalizeError(s instanceof Error?s:new Error(String(s)));return await this.onError(o),b(E.FILE_NOT_FOUND)}}async checkIfExpired(e){return re(e)?(this.delete(e).catch(()=>{}),this.deleteMeta(e.id).catch(()=>{}),b(E.GONE)):e}async purge(e){return this.instrumentOperation("purge",async()=>{const r=C(e||this.expiration?.maxAge),s={items:[],maxAgeMs:r};if(r){const o=Date.now()-r,i=(await this.list()).filter(a=>Number(new Date(this.expiration?.rolling&&a.modifiedAt||a.createdAt))<o);for await(const{id:a,...c}of i)try{const l=await this.delete({id:a});s.items.push({...l,...c})}catch(l){this.logger?.warn(`Failed to delete file ${a} during purge: ${l instanceof Error?l.message:String(l)}`)}s.items.length>0&&(this.logger?.info(`Purge: removed ${s.items.length} uploads`),this.metrics.gauge("storage.operations.purge.items_count",s.items.length,{storage:this.constructor.name.toLowerCase().replace("storage","")}))}return s})}async getStream({id:e},r){return this.instrumentOperation("getStream",async()=>{const s=await this.get({id:e},r),o=K.from(s.content);return{headers:{"Content-Length":String(s.size),"Content-Type":s.contentType,...s.ETag&&{ETag:s.ETag},...s.modifiedAt&&{"Last-Modified":s.modifiedAt.toString()}},size:typeof s.size=="number"?s.size:void 0,stream:o}})}async list(e=1e3,r){return this.instrumentOperation("list",async()=>{throw new Error("Not implemented")})}async listDirectory(e){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement listDirectory()`)}async update({id:e},r){return this.instrumentOperation("update",async()=>{const s=await this.getMeta(e),o={...r};if("ttl"in o&&o.ttl!==void 0){const a=o.ttl,c=typeof a=="string"?C(a):a;c!==void 0&&(o.expiredAt=Date.now()+c),delete o.ttl}Oe(s,o),await this.saveMeta(s);const i={...s,status:"updated"};return await this.onUpdate(i),i})}async deleteBatch(e,r){const s=Date.now(),o=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.delete.count",1,{batch_size:e.length,storage:o});const i=[],a=[],c=e.map(async u=>{try{return{file:await this.delete({id:u},r),id:u,success:!0}}catch(h){const g=h instanceof Error?h.message:"Delete failed";return this.metrics.increment("storage.operations.delete.error.count",1,{error:g,storage:o}),{error:g,id:u,success:!1}}}),l=await Promise.allSettled(c);for(const u of l)u.status==="fulfilled"?u.value.success?i.push(u.value.file):a.push({error:u.value.error,id:u.value.id}):a.push({error:u.reason?.message||"Delete failed",id:""});const n=Date.now()-s;return this.metrics.timing("storage.operations.batch.delete.duration",n,{batch_size:e.length,storage:o}),this.metrics.gauge("storage.operations.batch.delete.success_count",i.length,{storage:o}),this.metrics.gauge("storage.operations.batch.delete.failed_count",a.length,{storage:o}),{failed:a,failedCount:a.length,successful:i,successfulCount:i.length}}async copyBatch(e){const r=Date.now(),s=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.copy.count",1,{batch_size:e.length,storage:s});const o=[],i=[],a=e.map(async({destination:n,options:u,source:h})=>{try{return{file:await this.copy(h,n,u),id:n,success:!0}}catch(g){const d=g instanceof Error?g.message:"Copy failed";return this.metrics.increment("storage.operations.copy.error.count",1,{error:d,storage:s}),{error:d,id:n,success:!1}}}),c=await Promise.allSettled(a);for(const n of c)n.status==="fulfilled"?n.value.success&&n.value.file?o.push(n.value.file):i.push({error:n.value.error||"Copy failed",id:n.value.id}):i.push({error:n.reason?.message||"Copy failed",id:""});const l=Date.now()-r;return this.metrics.timing("storage.operations.batch.copy.duration",l,{batch_size:e.length,storage:s}),this.metrics.gauge("storage.operations.batch.copy.success_count",o.length,{storage:s}),this.metrics.gauge("storage.operations.batch.copy.failed_count",i.length,{storage:s}),{failed:i,failedCount:i.length,successful:o,successfulCount:o.length}}async moveBatch(e){const r=Date.now(),s=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.move.count",1,{batch_size:e.length,storage:s});const o=[],i=[],a=e.map(async({destination:n,source:u})=>{try{return{file:await this.move(u,n),id:n,success:!0}}catch(h){const g=h instanceof Error?h.message:"Move failed";return this.metrics.increment("storage.operations.move.error.count",1,{error:g,storage:s}),{error:g,id:n,success:!1}}}),c=await Promise.allSettled(a);for(const n of c)n.status==="fulfilled"?n.value.success&&n.value.file?o.push(n.value.file):i.push({error:n.value.error||"Move failed",id:n.value.id}):i.push({error:n.reason?.message||"Move failed",id:n.reason?.id||""});const l=Date.now()-r;return this.metrics.timing("storage.operations.batch.move.duration",l,{batch_size:e.length,storage:s}),this.metrics.gauge("storage.operations.batch.move.success_count",o.length,{storage:s}),this.metrics.gauge("storage.operations.batch.move.failed_count",i.length,{storage:s}),{failed:i,failedCount:i.length,successful:o,successfulCount:o.length}}async lock(e){return this.locker.has(e)?b(E.FILE_LOCKED):this.config.concurrency&&typeof this.config.concurrency=="number"&&this.config.concurrency<=this.locker.size?b(E.STORAGE_BUSY):this.locker.lock(e)}async unlock(e,r){if(r===void 0){this.locker.delete(e);return}this.locker.unlock(e,r)}async withLock(e,r){const s=await this.lock(e);try{return await r()}finally{await this.unlock(e,s)}}isUnsupportedChecksum(e=""){return!!e&&!this.checksumTypes.includes(e)}startAutoPurge(e){if(e>=2147483647)throw new Error("“purgeInterval” must be less than 2147483647 ms");W(()=>{this.purge().catch(r=>this.logger?.error(r))},e)}updateTimestamps(e){e.createdAt??=new Date().toISOString();const r=C(this.expiration?.maxAge);return r&&!e.expiredAt&&(e.expiredAt=this.expiration?.rolling?Date.now()+r:+new Date(e.createdAt)+r),e}getRetryConfig(){}runOperation(e,r,s){let o;typeof e?.retries=="number"?o={maxRetries:e.retries}:e?.retries&&(o=e.retries);const i={...this.getRetryConfig(),...o};s?.replayable===!1&&(i.maxRetries=0);const a=[];this.genericConfig.defaultSignal&&a.push(this.genericConfig.defaultSignal),e?.signal&&a.push(e.signal);let c;a.length===1?[c]=a:a.length>1&&(c=AbortSignal.any(a));const l=typeof e?.timeout=="number"?e.timeout:this.genericConfig.defaultTimeout,n=typeof l=="number"&&l>0?l:void 0,u=i.shouldRetry;i.shouldRetry=g=>c?.aborted||g instanceof Error&&g.name==="AbortError"?!1:u?u(g):!1;const h=g=>{if(g instanceof Error&&g.name==="AbortError")return g;const d=g instanceof Error&&g.message?g.message:"The operation was aborted",m=new Error(d,{cause:g});return m.name="AbortError",m};return te(async()=>{if(c?.aborted)throw h(c.reason);let g,d;if(n===void 0)d=c;else{const m=new AbortController;g=setTimeout(()=>{m.abort(new DOMException(`The operation timed out after ${n}ms`,"TimeoutError"))},n),d=c?AbortSignal.any([c,m.signal]):m.signal}try{return await r(d)}catch(m){throw d?.aborted?h(m):m}finally{g&&clearTimeout(g)}},i)}async instrumentOperation(e,r,s){const o=Date.now(),i={storage:this.constructor.name.toLowerCase().replace("storage",""),...s};try{this.metrics.increment(`storage.operations.${e}.count`,1,i);const a=await r(),c=Date.now()-o;return this.metrics.timing(`storage.operations.${e}.duration`,c,i),a&&typeof a=="object"&&"size"in a&&typeof a.size=="number"&&this.metrics.gauge("storage.files.size",a.size,{...i,operation:e}),a}catch(a){const c=Date.now()-o,l=a instanceof Error?a.message:"Unknown error";throw this.metrics.timing(`storage.operations.${e}.duration`,c,{...i,error:"true"}),this.metrics.increment(`storage.operations.${e}.error.count`,1,{...i,error:l}),a}}}export{V as B,Ae as C,_ as X,Ze as a,Te as b,C as c,Ue as d,Oe as e,We as i};
1
+ import{Readable as K}from"node:stream";import{setInterval as W}from"node:timers";import{inspect as Z}from"node:util";import{W as H,A as O}from"./path-0oTTdkvl-DvWvbDbh.js";import X from"type-is";import q from"./NoOpMetrics-BLo6u4NY.js";import{N as J}from"./cache-Cw3QjoVN.js";import{ErrorMap as $,throwErrorCode as b,ERRORS as E}from"./ERRORS-BIBxE2oR.js";import{randomUUID as Q}from"node:crypto";import{LRUCache as ee}from"lru-cache";import{retry as te}from"./createRetryWrapper-CxgiV_hH.js";import{t as re}from"./is-expired-CBEk6XBi.js";const se=/^(?<value>-?\d+(?:[.,]\d+)*) *(?<type>[a-z]+)?$/i,oe=/^KIBI/,ie=/^MIBI/,ae=/^GIBI/,ne=/^TEBI/,ce=/^PEBI/,le=/^EXBI/,ue=/^ZEBI/,ge=/^YIBI/,he=/^(.)IB$/,me={iec:[{long:"Bytes",short:"B"},{long:"Kibibytes",short:"KiB"},{long:"Mebibytes",short:"MiB"},{long:"Gibibytes",short:"GiB"},{long:"Tebibytes",short:"TiB"},{long:"Pebibytes",short:"PiB"},{long:"Exbibytes",short:"EiB"},{long:"Zebibytes",short:"ZiB"},{long:"Yobibytes",short:"YiB"}],iec_octet:[{long:"Octets",short:"o"},{long:"Kibioctets",short:"Kio"},{long:"Mebioctets",short:"Mio"},{long:"Gibioctets",short:"Gio"},{long:"Tebioctets",short:"Tio"},{long:"Pebioctets",short:"Pio"},{long:"Exbioctets",short:"Eio"},{long:"Zebioctets",short:"Zio"},{long:"Yobioctets",short:"Yio"}],metric:[{long:"Bytes",short:"Bytes"},{long:"Kilobytes",short:"KB"},{long:"Megabytes",short:"MB"},{long:"Gigabytes",short:"GB"},{long:"Terabytes",short:"TB"},{long:"Petabytes",short:"PB"},{long:"Exabytes",short:"EB"},{long:"Zettabytes",short:"ZB"},{long:"Yottabytes",short:"YB"}],metric_octet:[{long:"Octets",short:"o"},{long:"Kilo-octets",short:"ko"},{long:"Mega-octets",short:"Mo"},{long:"Giga-octets",short:"Go"},{long:"Tera-octets",short:"To"},{long:"Peta-octets",short:"Po"},{long:"Exa-octets",short:"Eo"},{long:"Zetta-octets",short:"Zo"},{long:"Yotta-octets",short:"Yo"}]},k=new Map,de=t=>{let e=k.get(t);if(e===void 0){const r=new Intl.NumberFormat(t);e={decimalSeparator:r.format(1.1).replaceAll(new RegExp("\\p{Number}","gu"),""),thousandSeparator:r.format(11111).replaceAll(new RegExp("\\p{Number}","gu"),"")},k.set(t,e)}return e},pe=(t,e)=>{const{decimalSeparator:r,thousandSeparator:s}=de(e);return Number.parseFloat(t.replaceAll(new RegExp(`\\${s}`,"g"),"").replace(new RegExp(`\\${r}`),"."))},fe=t=>{switch(t){case 2:return 1024;case 10:return 1e3;default:throw new Error("Unsupported base.")}},_=(t,e)=>{const r={base:2,locale:"en-US",units:"metric",...e};if(typeof t!="string"||t.length===0)throw new TypeError("Value is not a string or is empty.");if(t.length>100)throw new TypeError("Value exceeds the maximum length of 100 characters.");const s=se.exec(t)?.groups;if(!s)return Number.NaN;const o=pe(s.value,r.locale),i=(s.type??"Bytes").toUpperCase().replace(oe,"KILO").replace(ie,"MEGA").replace(ae,"GIGA").replace(ne,"TERA").replace(ce,"PETA").replace(le,"EXA").replace(ue,"ZETTA").replace(ge,"YOTTA").replace(he,"$1B"),a=me[r.units].findIndex(l=>l.short.toUpperCase()===i||l.long.toUpperCase()===i);if(a===-1)return Number.NaN;const c=fe(r.base);return o*c**a},ye=(t,e,r,s,o,i,a,c,l,n,u,h,g,d)=>{const m={d:s,h:o,m:i,mo:e,ms:c,s:a,w:r,y:t};return m.future=l,m.past=n,m.decimal=u,h!==void 0&&(m.unitMap=h),m.groupSeparator=g,m.placeholderSeparator=d,m},F={d:"d",day:"d",days:"d",h:"h",hour:"h",hours:"h",hr:"h",hrs:"h",m:"m",millisecond:"ms",milliseconds:"ms",min:"m",mins:"m",minute:"m",minutes:"m",mo:"mo",month:"mo",months:"mo",ms:"ms",s:"s",sec:"s",second:"s",seconds:"s",secs:"s",w:"w",week:"w",weeks:"w",y:"y",year:"y",years:"y",yr:"y",yrs:"y"},we=ye(t=>`year${t===1?"":"s"}`,t=>`month${t===1?"":"s"}`,t=>`week${t===1?"":"s"}`,t=>`day${t===1?"":"s"}`,t=>`hour${t===1?"":"s"}`,t=>`minute${t===1?"":"s"}`,t=>`second${t===1?"":"s"}`,t=>`millisecond${t===1?"":"s"}`,"in %s","%s ago",".",F,",","_"),z=new WeakSet,be=t=>{if(z.has(t))return;const e=["y","mo","w","d","h","m","s","ms","future","past"];for(const s of e)if(!Object.hasOwn(t,s))throw new TypeError(`Missing required property: ${s}`);if(typeof t.future!="string"||typeof t.past!="string")throw new TypeError("Properties future and past must be of type string");const r=["y","mo","w","d","h","m","s","ms"];for(const s of r)if(typeof t[s]!="string"&&typeof t[s]!="function")throw new TypeError(`Property ${s} must be of type string or function`);if(t.decimal&&typeof t.decimal!="string")throw new TypeError("Property decimal must be of type string");if(t.delimiter&&typeof t.delimiter!="string")throw new TypeError("Property delimiter must be of type string");if(t._digitReplacements&&!Array.isArray(t._digitReplacements))throw new TypeError("Property _digitReplacements must be an array");if(t._numberFirst&&typeof t._numberFirst!="boolean")throw new TypeError("Property _numberFirst must be of type boolean");if(t.unitMap&&typeof t.unitMap!="object")throw new TypeError("Property unitMap must be an object");if(t.unitMap&&Object.values(t.unitMap).some(s=>typeof s!="string"))throw new TypeError("All values in unitMap must be of type string");z.add(t)},w={d:864e5,h:36e5,m:6e4,mo:2629746e3,ms:1,s:1e3,w:6048e5,y:31556952e3},T=/[-/\\^$*+?.()|[\]{}]/g,R=new WeakMap,v=t=>String.raw`(?:(\d+(?:[.,]\d+)?)${t})?`,Ee=new RegExp(`^P${v("Y")}${v("M")}${v("W")}${v("D")}(?:T${v("H")}${v("M")}${v("S")})?$`,"i"),ve=/^(?:(\d+):)?(?:(\d+):)?(\d+)$/,$e=/^[+-]?\d+(?:\.\d+)?$/,xe=/^[-+]/,Ae=(t,e)=>{if(typeof t!="string"||t.length===0)return;const{defaultUnit:r="ms",language:s=we}={};be(s);const o=s.decimal??".",i=s.groupSeparator??",",a=s.placeholderSeparator??"_",c=o.replaceAll(T,String.raw`\$&`),l=i.replaceAll(T,String.raw`\$&`),n=a.replaceAll(T,String.raw`\$&`),u=s.unitMap??F;let h=t.replaceAll(new RegExp(String.raw`(\d)[${n}${l}](\d)`,"g"),"$1$2");if(o!=="."&&(h=h.replaceAll(new RegExp(String.raw`(\d)${c}(\d)`,"g"),"$1.$2")),$e.test(t)){const f=Number.parseFloat(h.trim());if(!Number.isNaN(f)){const p=u[r];if(p!==void 0)return f*w[p]}return}const g=Ee.exec(t);if(g){const f=[[1,w.y],[2,w.mo],[3,w.w],[4,w.d],[5,w.h],[6,w.m],[7,w.s]];let p=0,y=!1;for(const[N,I]of f){const A=g[N];A!==void 0&&(y=!0,p+=Number.parseFloat(A.replace(",","."))*I)}if(y)return p}const d=ve.exec(t);if(d){let f=0,p=0;d[2]!==void 0?(f=Number.parseInt(d[1]??"0",10),p=Number.parseInt(d[2],10)):d[1]!==void 0&&(p=Number.parseInt(d[1],10));const y=Number.parseInt(d[3]??"0",10);return f*36e5+p*6e4+y*1e3}let m=R.get(u);if(m===void 0){const f=Object.keys(u).toSorted((p,y)=>y.length-p.length).map(p=>p.replaceAll(T,String.raw`\$&`)).join("|");m=new RegExp(String.raw`(-?\d*\.?\d+)\s*(${f})`,"gi"),R.set(u,m)}let D=0,x,S=!1,B=-1,M=0;for(m.lastIndex=0;(x=m.exec(h))!==null;){const f=x[1],p=x[2];if(!f||!p)continue;const y=f.trim(),N=y.startsWith("-")?-1:1,I=y.replace(xe,""),A=Number.parseFloat(I),U=u[p.toLowerCase()];if(U===void 0)continue;if(!S)B=x.index;else if(h.slice(M,x.index).trim().length>0)return;S=!0,M=m.lastIndex;const Y=w[U];if(Number.isNaN(A))return;D+=N*A*Y}const j=h.slice(0,B).trim(),G=h.slice(M).trim();if(!(S&&(j.length>0||G.length>0))&&S)return D};class Se extends ee{constructor(e){super({ttl:3e4,ttlAutopurge:!0,...e})}lock(e){if(this.get(e)!==void 0)throw new Error(`${e} is locked`);const r=Q();return this.set(e,r),r}unlock(e,r){return this.get(e)!==r?!1:this.delete(e)}}const C=t=>{if(t===Number(t))return t;if(!t)return;const e=Ae(t);if(e!==void 0)return e};class Te extends Error{code;statusCode;body;headers;name="ValidationError";constructor(e,r,s,o){const i=typeof s=="string"?s:s?.message||"Validation error";super(i),this.code=e,this.statusCode=r,this.body=s,this.headers=o}}const Ce=t=>t&&t[0].toUpperCase()+t.slice(1),Me=t=>{if(!Array.isArray(t))return t;const[e,r,s]=t;return{body:r,headers:s,statusCode:e}};class Ne{constructor(e="ValidationError"){this.prefix=e}prefix;validators={};add(e){Object.entries(e).forEach(([r,s])=>{const o=`${this.prefix}${Ce(r)}`;if(this.validators[o]={...this.validators[o],...s},typeof this.validators[o].isValid!="function")throw new TypeError('Validation config "isValid" is missing, or it is not a function!')})}async verify(e){for(const[r,s]of Object.entries(this.validators))if(!await s.isValid(e)){const o=s.response||(r in $?$[r]:$.UnknownError),i=Me(o),{body:a,headers:c,message:l,statusCode:n}=i;throw new Te(r,n,a||l,c)}}}const We=t=>t.name==="ValidationError",Ie=t=>{if(typeof t.name=="string")return t.name;if(typeof t.title=="string")return t.title;if(typeof t.originalName=="string")return t.originalName;if(typeof t.filename=="string")return t.filename},P=(t,e)=>{const r={...t};return Object.keys(e).forEach(s=>{const o=e[s];if(o!==null&&typeof o=="object"&&!Array.isArray(o)){const i=r[s],a=i&&typeof i=="object"&&!Array.isArray(i)?i:{};r[s]=P(a,o)}else r[s]=o}),r},Oe=(t,e)=>{const r=P(t,e);Object.assign(t,r),t.originalName=Ie(t.metadata)||t.originalName},De=/(secret|password|passwd|pwd|token|api[_-]?key|credential|authorization|sas|signature|sessiontoken|connectionstring)/i,L=t=>{const e={};for(const[r,s]of Object.entries(t))typeof s=="string"&&De.test(r)?e[r]="[REDACTED]":s&&typeof s=="object"&&!Array.isArray(s)&&s.constructor===Object?e[r]=L(s):e[r]=s;return e},Be={allowMIME:["*/*"],filename:({id:t})=>t,maxMetadataSize:"8MB",maxUploadSize:"5TB",onComplete:()=>{},onCreate:()=>{},onDelete:()=>{},onError:()=>{},onUpdate:()=>{},useRelativeLocation:!1,validation:{}},Ue=t=>!t||t.length<3||t.length>255||O(t)?!1:!(t.toUpperCase().includes("../")||t.includes("\0")),Ze=t=>{if(!t||t.length<3||t.length>255||O(t))return!1;const e=t.toUpperCase();return!['"',"*",":","<",">","?","\\","|","../","\0"].some(r=>e.includes(r))};class V{onCreate;onUpdate;onComplete;onDelete;onError;isReady=!0;errorResponses={};cache;logger;metrics;genericConfig;maxMetadataSize;checksumTypes=[];supportsRange=!1;supportsMetadata=!0;supportsCacheControl=!1;supportsDelimiter=!1;reportsUploadProgress=!1;maxUploadSize;expiration;locker;namingFunction;validation=new Ne;assetFolder=void 0;concurrency;constructor(e){const r={...Be,...e};this.onCreate=r.onCreate,this.onUpdate=r.onUpdate,this.onComplete=r.onComplete,this.onDelete=r.onDelete,this.onError=r.onError,this.namingFunction=r.filename,this.maxUploadSize=typeof r.maxUploadSize=="string"?_(r.maxUploadSize):r.maxUploadSize,this.maxMetadataSize=typeof r.maxMetadataSize=="string"?_(r.maxMetadataSize):r.maxMetadataSize,this.expiration=r.expiration,this.genericConfig=r,r.assetFolder!==void 0&&(this.assetFolder=H(r.assetFolder)),this.locker=new Se({max:1e3,ttl:3e4,ttlAutopurge:!0}),this.cache=r.cache??new J,this.logger=r.logger,this.metrics=r.metrics??new q,this.logger?.debug(`${this.constructor.name} config: ${Z(L({...e,logger:this.logger.constructor}))}`);const s=C(r.expiration?.purgeInterval);s&&this.startAutoPurge(s);const o={isValid(l){if(l.size===void 0)return!0;const n=l.size;if(n==null)return!1;const u=typeof n=="number"?n:Number(n);if(Number.isNaN(u)||u<0)return!1;const h=typeof this.value=="number"?this.value:Number(this.value);return!Number.isNaN(h)&&u<=h},response:$.RequestEntityTooLarge,value:this.maxUploadSize},i={isValid(l){return!!X.is(l.contentType,this.value)},response:$.UnsupportedMediaType,value:r.allowMIME},a=r.fileNameValidation??Ue,c={isValid(l){return a(l.name)},response:$.InvalidFileName};this.validation.add({filename:c,mime:i,size:o}),this.validation.add({...r.validation})}get raw(){}async getReadUrl(e,r){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement getReadUrl()`)}async getUploadUrl(e,r){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement getUploadUrl()`)}get tusExtension(){const e=["creation","creation-with-upload","termination","checksum","creation-defer-length","concatenation"];return this.expiration&&e.push("expiration"),e}async validate(e){await this.validation.verify(e)}async exists(e,r){return this.instrumentOperation("exists",async()=>{try{return await this.getMeta(e.id,r),!0}catch{return!1}})}normalizeError(e){const r={code:e.name,message:e.message,name:e.name,statusCode:500};return{...r,message:`[${this.constructor.name}] ${r.message}`}}get config(){return this.genericConfig}async saveMeta(e){return V.assertSafeId(e.id),this.updateTimestamps(e),this.cache.set(e.id,e),this.meta.save(e.id,e)}static assertSafeId(e){(!e||typeof e!="string"||e.includes("\0")||e.includes("../")||e.includes("..\\")||e===".."||e.startsWith("../")||e.startsWith("..\\")||O(e)||/^[A-Z]:[/\\]/i.test(e))&&b(E.INVALID_FILE_NAME,`Invalid file id: "${e}"`)}async deleteMeta(e){return this.cache.delete(e),this.meta.delete(e)}async getMeta(e,r){try{const s=await this.meta.get(e);return this.cache.set(s.id,s),{...s}}catch(s){const o=this.normalizeError(s instanceof Error?s:new Error(String(s)));return await this.onError(o),b(E.FILE_NOT_FOUND)}}async checkIfExpired(e){return re(e)?(this.delete(e).catch(()=>{}),this.deleteMeta(e.id).catch(()=>{}),b(E.GONE)):e}async purge(e){return this.instrumentOperation("purge",async()=>{const r=C(e||this.expiration?.maxAge),s={items:[],maxAgeMs:r};if(r){const o=Date.now()-r,i=(await this.list()).filter(a=>Number(new Date(this.expiration?.rolling&&a.modifiedAt||a.createdAt))<o);for await(const{id:a,...c}of i)try{const l=await this.delete({id:a});s.items.push({...l,...c})}catch(l){this.logger?.warn(`Failed to delete file ${a} during purge: ${l instanceof Error?l.message:String(l)}`)}s.items.length>0&&(this.logger?.info(`Purge: removed ${s.items.length} uploads`),this.metrics.gauge("storage.operations.purge.items_count",s.items.length,{storage:this.constructor.name.toLowerCase().replace("storage","")}))}return s})}async getStream({id:e},r){return this.instrumentOperation("getStream",async()=>{const s=await this.get({id:e},r),o=K.from(s.content);return{headers:{"Content-Length":String(s.size),"Content-Type":s.contentType,...s.ETag&&{ETag:s.ETag},...s.modifiedAt&&{"Last-Modified":s.modifiedAt.toString()}},size:typeof s.size=="number"?s.size:void 0,stream:o}})}async list(e=1e3,r){return this.instrumentOperation("list",async()=>{throw new Error("Not implemented")})}async listDirectory(e){return b(E.METHOD_NOT_ALLOWED,`${this.constructor.name} does not implement listDirectory()`)}async update({id:e},r){return this.instrumentOperation("update",async()=>{const s=await this.getMeta(e),o={...r};if("ttl"in o&&o.ttl!==void 0){const a=o.ttl,c=typeof a=="string"?C(a):a;c!==void 0&&(o.expiredAt=Date.now()+c),delete o.ttl}Oe(s,o),await this.saveMeta(s);const i={...s,status:"updated"};return await this.onUpdate(i),i})}async deleteBatch(e,r){const s=Date.now(),o=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.delete.count",1,{batch_size:e.length,storage:o});const i=[],a=[],c=e.map(async u=>{try{return{file:await this.delete({id:u},r),id:u,success:!0}}catch(h){const g=h instanceof Error?h.message:"Delete failed";return this.metrics.increment("storage.operations.delete.error.count",1,{error:g,storage:o}),{error:g,id:u,success:!1}}}),l=await Promise.allSettled(c);for(const u of l)u.status==="fulfilled"?u.value.success?i.push(u.value.file):a.push({error:u.value.error,id:u.value.id}):a.push({error:u.reason?.message||"Delete failed",id:""});const n=Date.now()-s;return this.metrics.timing("storage.operations.batch.delete.duration",n,{batch_size:e.length,storage:o}),this.metrics.gauge("storage.operations.batch.delete.success_count",i.length,{storage:o}),this.metrics.gauge("storage.operations.batch.delete.failed_count",a.length,{storage:o}),{failed:a,failedCount:a.length,successful:i,successfulCount:i.length}}async copyBatch(e){const r=Date.now(),s=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.copy.count",1,{batch_size:e.length,storage:s});const o=[],i=[],a=e.map(async({destination:n,options:u,source:h})=>{try{return{file:await this.copy(h,n,u),id:n,success:!0}}catch(g){const d=g instanceof Error?g.message:"Copy failed";return this.metrics.increment("storage.operations.copy.error.count",1,{error:d,storage:s}),{error:d,id:n,success:!1}}}),c=await Promise.allSettled(a);for(const n of c)n.status==="fulfilled"?n.value.success&&n.value.file?o.push(n.value.file):i.push({error:n.value.error||"Copy failed",id:n.value.id}):i.push({error:n.reason?.message||"Copy failed",id:""});const l=Date.now()-r;return this.metrics.timing("storage.operations.batch.copy.duration",l,{batch_size:e.length,storage:s}),this.metrics.gauge("storage.operations.batch.copy.success_count",o.length,{storage:s}),this.metrics.gauge("storage.operations.batch.copy.failed_count",i.length,{storage:s}),{failed:i,failedCount:i.length,successful:o,successfulCount:o.length}}async moveBatch(e){const r=Date.now(),s=this.constructor.name.toLowerCase().replace("storage","");this.metrics.increment("storage.operations.batch.move.count",1,{batch_size:e.length,storage:s});const o=[],i=[],a=e.map(async({destination:n,source:u})=>{try{return{file:await this.move(u,n),id:n,success:!0}}catch(h){const g=h instanceof Error?h.message:"Move failed";return this.metrics.increment("storage.operations.move.error.count",1,{error:g,storage:s}),{error:g,id:n,success:!1}}}),c=await Promise.allSettled(a);for(const n of c)n.status==="fulfilled"?n.value.success&&n.value.file?o.push(n.value.file):i.push({error:n.value.error||"Move failed",id:n.value.id}):i.push({error:n.reason?.message||"Move failed",id:n.reason?.id||""});const l=Date.now()-r;return this.metrics.timing("storage.operations.batch.move.duration",l,{batch_size:e.length,storage:s}),this.metrics.gauge("storage.operations.batch.move.success_count",o.length,{storage:s}),this.metrics.gauge("storage.operations.batch.move.failed_count",i.length,{storage:s}),{failed:i,failedCount:i.length,successful:o,successfulCount:o.length}}async lock(e){return this.locker.has(e)?b(E.FILE_LOCKED):this.config.concurrency&&typeof this.config.concurrency=="number"&&this.config.concurrency<=this.locker.size?b(E.STORAGE_BUSY):this.locker.lock(e)}async unlock(e,r){if(r===void 0){this.locker.delete(e);return}this.locker.unlock(e,r)}async withLock(e,r){const s=await this.lock(e);try{return await r()}finally{await this.unlock(e,s)}}isUnsupportedChecksum(e=""){return!!e&&!this.checksumTypes.includes(e)}startAutoPurge(e){if(e>=2147483647)throw new Error("“purgeInterval” must be less than 2147483647 ms");W(()=>{this.purge().catch(r=>this.logger?.error(r))},e)}updateTimestamps(e){e.createdAt??=new Date().toISOString();const r=C(this.expiration?.maxAge);return r&&!e.expiredAt&&(e.expiredAt=this.expiration?.rolling?Date.now()+r:+new Date(e.createdAt)+r),e}getRetryConfig(){}runOperation(e,r,s){let o;typeof e?.retries=="number"?o={maxRetries:e.retries}:e?.retries&&(o=e.retries);const i={...this.getRetryConfig(),...o};s?.replayable===!1&&(i.maxRetries=0);const a=[];this.genericConfig.defaultSignal&&a.push(this.genericConfig.defaultSignal),e?.signal&&a.push(e.signal);let c;a.length===1?[c]=a:a.length>1&&(c=AbortSignal.any(a));const l=typeof e?.timeout=="number"?e.timeout:this.genericConfig.defaultTimeout,n=typeof l=="number"&&l>0?l:void 0,u=i.shouldRetry;i.shouldRetry=g=>c?.aborted||g instanceof Error&&g.name==="AbortError"?!1:u?u(g):!1;const h=g=>{if(g instanceof Error&&g.name==="AbortError")return g;const d=g instanceof Error&&g.message?g.message:"The operation was aborted",m=new Error(d,{cause:g});return m.name="AbortError",m};return te(async()=>{if(c?.aborted)throw h(c.reason);let g,d;if(n===void 0)d=c;else{const m=new AbortController;g=setTimeout(()=>{m.abort(new DOMException(`The operation timed out after ${n}ms`,"TimeoutError"))},n),d=c?AbortSignal.any([c,m.signal]):m.signal}try{return await r(d)}catch(m){throw d?.aborted?h(m):m}finally{g&&clearTimeout(g)}},i)}async instrumentOperation(e,r,s){const o=Date.now(),i={storage:this.constructor.name.toLowerCase().replace("storage",""),...s};try{this.metrics.increment(`storage.operations.${e}.count`,1,i);const a=await r(),c=Date.now()-o;return this.metrics.timing(`storage.operations.${e}.duration`,c,i),a&&typeof a=="object"&&"size"in a&&typeof a.size=="number"&&this.metrics.gauge("storage.files.size",a.size,{...i,operation:e}),a}catch(a){const c=Date.now()-o,l=a instanceof Error?a.message:"Unknown error";throw this.metrics.timing(`storage.operations.${e}.duration`,c,{...i,error:"true"}),this.metrics.increment(`storage.operations.${e}.error.count`,1,{...i,error:l}),a}}}export{V as B,Ae as C,_ as X,Ze as a,Te as b,C as c,Ue as d,Oe as e,We as i};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/S3File-CpZrubaV.js";import{default as r}from"../../packem_shared/S3MetaStorage-CMonflzp.js";import{default as S}from"../../packem_shared/S3Storage-wslqssvr.js";export{t as S3File,r as S3MetaStorage,S as S3Storage};
1
+ import{default as t}from"../../packem_shared/S3File-CpZrubaV.js";import{default as r}from"../../packem_shared/S3MetaStorage-CMonflzp.js";import{default as S}from"../../packem_shared/S3Storage-YGeNk3Tt.js";export{t as S3File,r as S3MetaStorage,S as S3Storage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/AwsLightFile-CpZrubaV.js";import{p as r}from"../../packem_shared/aws-light-meta-storage-DGrn72VJ.js";import{default as f}from"../../packem_shared/AwsLightStorage-DTBVxHXO.js";export{a as AwsLightFile,r as AwsLightMetaStorage,f as AwsLightStorage};
1
+ import{default as a}from"../../packem_shared/AwsLightFile-CpZrubaV.js";import{p as r}from"../../packem_shared/aws-light-meta-storage-DGrn72VJ.js";import{default as f}from"../../packem_shared/AwsLightStorage-BK-WPL0h.js";export{a as AwsLightFile,r as AwsLightMetaStorage,f as AwsLightStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/AzureFile-DFSaVe25.js";import{c as t}from"../../packem_shared/azure-meta-storage-ClbEsfI4.js";import{default as u}from"../../packem_shared/AzureStorage-BFsD4qbF.js";export{a as AzureFile,t as AzureSMetaStorage,u as AzureStorage};
1
+ import{default as a}from"../../packem_shared/AzureFile-DFSaVe25.js";import{c as t}from"../../packem_shared/azure-meta-storage-ClbEsfI4.js";import{default as u}from"../../packem_shared/AzureStorage-1UvDIQZd.js";export{a as AzureFile,t as AzureSMetaStorage,u as AzureStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/BoxFile-CseIoPW1.js";import{default as r}from"../../packem_shared/BoxMetaStorage-DFwhEI9C.js";import{default as x}from"../../packem_shared/BoxStorage-B_t-OVzf.js";export{a as BoxFile,r as BoxMetaStorage,x as BoxStorage};
1
+ import{default as a}from"../../packem_shared/BoxFile-CseIoPW1.js";import{default as r}from"../../packem_shared/BoxMetaStorage-BSn6Qfnf.js";import{default as x}from"../../packem_shared/BoxStorage-DbGqBLux.js";export{a as BoxFile,r as BoxMetaStorage,x as BoxStorage};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/BunS3File-BcYmsz1n.js";import{default as r}from"../../packem_shared/BunS3MetaStorage-DFwhEI9C.js";import{default as u}from"../../packem_shared/BunS3Storage-CB_pZWlV.js";export{t as BunS3File,r as BunS3MetaStorage,u as BunS3Storage};
1
+ import{default as t}from"../../packem_shared/BunS3File-BcYmsz1n.js";import{default as r}from"../../packem_shared/BunS3MetaStorage-BSn6Qfnf.js";import{default as u}from"../../packem_shared/BunS3Storage-DNvimm9e.js";export{t as BunS3File,r as BunS3MetaStorage,u as BunS3Storage};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/BunnyFile-BgEOlcYI.js";import{default as r}from"../../packem_shared/BunnyMetaStorage-DFwhEI9C.js";import{default as n}from"../../packem_shared/BunnyStorage-CILSK4_Z.js";export{t as BunnyFile,r as BunnyMetaStorage,n as BunnyStorage};
1
+ import{default as t}from"../../packem_shared/BunnyFile-BgEOlcYI.js";import{default as r}from"../../packem_shared/BunnyMetaStorage-BSn6Qfnf.js";import{default as n}from"../../packem_shared/BunnyStorage-C7d0opLL.js";export{t as BunnyFile,r as BunnyMetaStorage,n as BunnyStorage};
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/CloudinaryFile-Bo5B-vM1.js";import{default as t}from"../../packem_shared/CloudinaryMetaStorage-D_vNzewL.js";import{default as d}from"../../packem_shared/CloudinaryStorage-DiCbdAi_.js";export{r as CloudinaryFile,t as CloudinaryMetaStorage,d as CloudinaryStorage};
1
+ import{default as r}from"../../packem_shared/CloudinaryFile-Bo5B-vM1.js";import{default as t}from"../../packem_shared/CloudinaryMetaStorage-DPVnmNe5.js";import{default as d}from"../../packem_shared/CloudinaryStorage-Dc3XA2lP.js";export{r as CloudinaryFile,t as CloudinaryMetaStorage,d as CloudinaryStorage};
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/DropboxFile-BFb7eOzy.js";import{default as t}from"../../packem_shared/DropboxMetaStorage-DFwhEI9C.js";import{default as p}from"../../packem_shared/DropboxStorage-H8bd8hEz.js";export{e as DropboxFile,t as DropboxMetaStorage,p as DropboxStorage};
1
+ import{default as e}from"../../packem_shared/DropboxFile-BFb7eOzy.js";import{default as t}from"../../packem_shared/DropboxMetaStorage-BSn6Qfnf.js";import{default as p}from"../../packem_shared/DropboxStorage-CY9Ggu3m.js";export{e as DropboxFile,t as DropboxMetaStorage,p as DropboxStorage};
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/FirebaseFile-BLaBxa2A.js";import{default as o}from"../../packem_shared/FirebaseMetaStorage-D_vNzewL.js";import{default as s}from"../../packem_shared/FirebaseStorage-Dgk4XyMr.js";export{r as FirebaseFile,o as FirebaseMetaStorage,s as FirebaseStorage};
1
+ import{default as r}from"../../packem_shared/FirebaseFile-BLaBxa2A.js";import{default as o}from"../../packem_shared/FirebaseMetaStorage-DPVnmNe5.js";import{default as s}from"../../packem_shared/FirebaseStorage-D6O9CJXN.js";export{r as FirebaseFile,o as FirebaseMetaStorage,s as FirebaseStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/FtpFile-ClWDYnt2.js";import{default as r}from"../../packem_shared/FtpMetaStorage-DFwhEI9C.js";import{default as p}from"../../packem_shared/FtpStorage-g_DjiR-C.js";export{a as FtpFile,r as FtpMetaStorage,p as FtpStorage};
1
+ import{default as a}from"../../packem_shared/FtpFile-ClWDYnt2.js";import{default as r}from"../../packem_shared/FtpMetaStorage-BSn6Qfnf.js";import{default as p}from"../../packem_shared/FtpStorage-DbEjbq8z.js";export{a as FtpFile,r as FtpMetaStorage,p as FtpStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/GCSConfig-BQ0OpVhe.js";import{default as t}from"../../packem_shared/GCSFile-Cero7qZN.js";import{v as C}from"../../packem_shared/gcs-meta-storage-Dy37wCjI.js";import{default as l}from"../../packem_shared/GCStorage-DUfwVFd3.js";export{a as GCSConfig,t as GCSFile,C as GCSMetaStorage,l as GCStorage};
1
+ import{default as a}from"../../packem_shared/GCSConfig-BQ0OpVhe.js";import{default as t}from"../../packem_shared/GCSFile-Cero7qZN.js";import{v as C}from"../../packem_shared/gcs-meta-storage-B1RrMqH3.js";import{default as l}from"../../packem_shared/GCStorage-i9t5TQc1.js";export{a as GCSConfig,t as GCSFile,C as GCSMetaStorage,l as GCStorage};
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/GoogleDriveFile-DHpLhzg9.js";import{default as t}from"../../packem_shared/GoogleDriveMetaStorage-DqkgoE46.js";import{default as f}from"../../packem_shared/GoogleDriveStorage-D0-5egHE.js";export{r as GoogleDriveFile,t as GoogleDriveMetaStorage,f as GoogleDriveStorage};
1
+ import{default as r}from"../../packem_shared/GoogleDriveFile-DHpLhzg9.js";import{default as t}from"../../packem_shared/GoogleDriveMetaStorage-Cbwa1CHV.js";import{default as f}from"../../packem_shared/GoogleDriveStorage-Bklsz7Bh.js";export{r as GoogleDriveFile,t as GoogleDriveMetaStorage,f as GoogleDriveStorage};
@@ -1 +1 @@
1
- import{F as e}from"../../packem_shared/disk-storage-DIn-VnCh.js";import{default as t}from"../../packem_shared/DiskStorageWithChecksum-Bh6w-Iu8.js";import{y as f}from"../../packem_shared/local-meta-storage-C2T92TYb.js";export{e as DiskStorage,t as DiskStorageWithChecksum,f as LocalMetaStorage};
1
+ import{F as e}from"../../packem_shared/disk-storage-CsQcYW3s.js";import{default as t}from"../../packem_shared/DiskStorageWithChecksum-vFCubS6K.js";import{y as f}from"../../packem_shared/local-meta-storage-iuJnu90B.js";export{e as DiskStorage,t as DiskStorageWithChecksum,f as LocalMetaStorage};
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/MemoryMetaStorage-Ksgh9pe7.js";import{default as t,default as f}from"../../packem_shared/MemoryStorage-DzSTdlAq.js";export{o as MemoryMetaStorage,t as MemoryStorage,f as default};
1
+ import{default as o}from"../../packem_shared/MemoryMetaStorage-Ksgh9pe7.js";import{default as t,default as f}from"../../packem_shared/MemoryStorage-9gbWd09l.js";export{o as MemoryMetaStorage,t as MemoryStorage,f as default};
@@ -1 +1 @@
1
- import{default as o}from"../../packem_shared/NetlifyBlobFile-DoFhkzaH.js";import{default as a}from"../../packem_shared/NetlifyBlobMetaStorage-D_vNzewL.js";import{default as r}from"../../packem_shared/NetlifyBlobStorage-DZdCmOVW.js";export{o as NetlifyBlobFile,a as NetlifyBlobMetaStorage,r as NetlifyBlobStorage};
1
+ import{default as o}from"../../packem_shared/NetlifyBlobFile-DoFhkzaH.js";import{default as a}from"../../packem_shared/NetlifyBlobMetaStorage-DPVnmNe5.js";import{default as r}from"../../packem_shared/NetlifyBlobStorage-CkpCCoN1.js";export{o as NetlifyBlobFile,a as NetlifyBlobMetaStorage,r as NetlifyBlobStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/OneDriveFile-CNNJYI43.js";import{default as o}from"../../packem_shared/OneDriveMetaStorage-DqkgoE46.js";import{default as i}from"../../packem_shared/OneDriveStorage-CvJetV7_.js";export{a as OneDriveFile,o as OneDriveMetaStorage,i as OneDriveStorage};
1
+ import{default as a}from"../../packem_shared/OneDriveFile-CNNJYI43.js";import{default as o}from"../../packem_shared/OneDriveMetaStorage-Cbwa1CHV.js";import{default as i}from"../../packem_shared/OneDriveStorage-CP6MvGAa.js";export{a as OneDriveFile,o as OneDriveMetaStorage,i as OneDriveStorage};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/PocketBaseFile-DpJpxl3e.js";import{default as r}from"../../packem_shared/PocketBaseMetaStorage-CpvDRnSu.js";import{default as s}from"../../packem_shared/PocketBaseStorage-BPil-koe.js";export{t as PocketBaseFile,r as PocketBaseMetaStorage,s as PocketBaseStorage};
1
+ import{default as t}from"../../packem_shared/PocketBaseFile-DpJpxl3e.js";import{default as r}from"../../packem_shared/PocketBaseMetaStorage-DOTLwVE7.js";import{default as s}from"../../packem_shared/PocketBaseStorage-2qhbI2PW.js";export{t as PocketBaseFile,r as PocketBaseMetaStorage,s as PocketBaseStorage};
@@ -1 +1 @@
1
- import{default as a}from"../../packem_shared/SftpFile-ClWDYnt2.js";import{default as o}from"../../packem_shared/SftpMetaStorage-DFwhEI9C.js";import{default as p}from"../../packem_shared/SftpStorage-BVbMtS2b.js";export{a as SftpFile,o as SftpMetaStorage,p as SftpStorage};
1
+ import{default as a}from"../../packem_shared/SftpFile-ClWDYnt2.js";import{default as o}from"../../packem_shared/SftpMetaStorage-BSn6Qfnf.js";import{default as p}from"../../packem_shared/SftpStorage-2Hz396Xr.js";export{a as SftpFile,o as SftpMetaStorage,p as SftpStorage};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/SharePointFile-Blz9FS4h.js";import{default as r}from"../../packem_shared/SharePointMetaStorage-DFwhEI9C.js";import{default as S}from"../../packem_shared/SharePointStorage-DWjvR5oZ.js";export{t as SharePointFile,r as SharePointMetaStorage,S as SharePointStorage};
1
+ import{default as t}from"../../packem_shared/SharePointFile-Blz9FS4h.js";import{default as r}from"../../packem_shared/SharePointMetaStorage-BSn6Qfnf.js";import{default as S}from"../../packem_shared/SharePointStorage-CrX2Pk6C.js";export{t as SharePointFile,r as SharePointMetaStorage,S as SharePointStorage};
@@ -1 +1 @@
1
- import{default as t}from"../../packem_shared/SupabaseFile-Bo5B-vM1.js";import{default as r}from"../../packem_shared/SupabaseMetaStorage-DqkgoE46.js";import{default as p}from"../../packem_shared/SupabaseStorage-BiKmYKb6.js";export{t as SupabaseFile,r as SupabaseMetaStorage,p as SupabaseStorage};
1
+ import{default as t}from"../../packem_shared/SupabaseFile-Bo5B-vM1.js";import{default as r}from"../../packem_shared/SupabaseMetaStorage-Cbwa1CHV.js";import{default as p}from"../../packem_shared/SupabaseStorage-Dc_DBX29.js";export{t as SupabaseFile,r as SupabaseMetaStorage,p as SupabaseStorage};
@@ -1 +1 @@
1
- import{default as e}from"../../packem_shared/UploadThingFile-BTFMpcIA.js";import{default as r}from"../../packem_shared/UploadThingMetaStorage-D_vNzewL.js";import{default as d}from"../../packem_shared/UploadThingStorage-jrEnANC5.js";export{e as UploadThingFile,r as UploadThingMetaStorage,d as UploadThingStorage};
1
+ import{default as e}from"../../packem_shared/UploadThingFile-BTFMpcIA.js";import{default as r}from"../../packem_shared/UploadThingMetaStorage-DPVnmNe5.js";import{default as d}from"../../packem_shared/UploadThingStorage-BChykYSe.js";export{e as UploadThingFile,r as UploadThingMetaStorage,d as UploadThingStorage};
@@ -1 +1 @@
1
- import{default as r}from"../../packem_shared/VercelBlobFile-CVQwKlZk.js";import{default as a}from"../../packem_shared/VercelBlobMetaStorage-DFwhEI9C.js";import{default as f}from"../../packem_shared/VercelBlobStorage-Y-cDgH30.js";export{r as VercelBlobFile,a as VercelBlobMetaStorage,f as VercelBlobStorage};
1
+ import{default as r}from"../../packem_shared/VercelBlobFile-CVQwKlZk.js";import{default as a}from"../../packem_shared/VercelBlobMetaStorage-BSn6Qfnf.js";import{default as f}from"../../packem_shared/VercelBlobStorage-CsRyPfw3.js";export{r as VercelBlobFile,a as VercelBlobMetaStorage,f as VercelBlobStorage};
@@ -1 +1 @@
1
- import{Readable as u}from"node:stream";import y from"sharp";import g from"../packem_shared/BaseTransformer-Buw5lX_3.js";import{isValidMediaType as f,getFormatFromContentType as d}from"../packem_shared/getFormatFromContentType-DCTTPQHm.js";class C extends g{constructor(e,a={}){const t=a.logger||e.logger,n={cacheTtl:3600,failOn:"warning",limitInputPixels:268435456,maxCacheSize:100,maxImageSize:50*1024*1024,supportedFormats:["jpeg","png","webp","avif","tiff","gif","svg"],...a};super(e,n,t)}openImage(e){return y(e,{failOn:this.config?.failOn??"warning",limitInputPixels:this.config?.limitInputPixels??268435456})}async resize(e,a){return this.transform(e,[{options:a,type:"resize"}])}async crop(e,a){return this.transform(e,[{options:a,type:"crop"}])}async rotate(e,a){return this.transform(e,[{options:a,type:"rotate"}])}async convertFormat(e,a,t={}){return this.transform(e,[{options:{...t,format:a},type:"format"}])}async sharpen(e,a={}){return this.transform(e,[{options:a,type:"sharpen"}])}async blur(e,a={}){return this.transform(e,[{options:a,type:"blur"}])}async median(e,a={}){return this.transform(e,[{options:a,type:"median"}])}async clahe(e,a={}){return this.transform(e,[{options:a,type:"clahe"}])}async convolve(e,a){return this.transform(e,[{options:a,type:"convolve"}])}async threshold(e,a={}){return this.transform(e,[{options:a,type:"threshold"}])}async boolean(e,a){return this.transform(e,[{options:a,type:"boolean"}])}async linear(e,a){return this.transform(e,[{options:a,type:"linear"}])}async recombine(e,a){return this.transform(e,[{options:a,type:"recombine"}])}async modulate(e,a){return this.transform(e,[{options:a,type:"modulate"}])}async tint(e,a){return this.transform(e,[{options:a,type:"tint"}])}async greyscale(e,a={}){return this.transform(e,[{options:a,type:"greyscale"}])}async colourspace(e,a){return this.transform(e,[{options:a,type:"colourspace"}])}async extractChannel(e,a){return this.transform(e,[{options:a,type:"extractChannel"}])}async joinChannel(e,a){return this.transform(e,[{options:a,type:"joinChannel"}])}async bandbool(e,a){return this.transform(e,[{options:a,type:"bandbool"}])}async autoOrient(e,a={}){return this.transform(e,[{options:a,type:"autoOrient"}])}async flip(e,a={}){return this.transform(e,[{options:a,type:"flip"}])}async flop(e,a={}){return this.transform(e,[{options:a,type:"flop"}])}async flatten(e,a={}){return this.transform(e,[{options:a,type:"flatten"}])}async unflatten(e,a={}){return this.transform(e,[{options:a,type:"unflatten"}])}async gamma(e,a={}){return this.transform(e,[{options:a,type:"gamma"}])}async negate(e,a={}){return this.transform(e,[{options:a,type:"negate"}])}async normalise(e,a={}){return this.transform(e,[{options:a,type:"normalise"}])}async affine(e,a){return this.transform(e,[{options:a,type:"affine"}])}async dilate(e,a={}){return this.transform(e,[{options:a,type:"dilate"}])}async erode(e,a={}){return this.transform(e,[{options:a,type:"erode"}])}async pipelineColourspace(e,a){return this.transform(e,[{options:a,type:"pipelineColourspace"}])}async toColourspace(e,a){return this.transform(e,[{options:a,type:"toColourspace"}])}async removeAlpha(e,a={}){return this.transform(e,[{options:a,type:"removeAlpha"}])}async ensureAlpha(e,a={}){return this.transform(e,[{options:a,type:"ensureAlpha"}])}async transform(e,a){const t={id:e},n=this.generateCacheKey(e,a),o=this.cache?await Promise.resolve(this.cache.get(n)):void 0;if(o)return this.logger?.debug("Returning cached transformed image for %s",e),o;const r=await this.storage.get(t);await this.validateImage(r);const s=await this.applyTransformations(r.content,a),i=await this.createTransformResult(s,r);return this.cache&&this.cache.set(n,i),i}async transformStream(e,a){const t=await this.transform(e,a);return{headers:{"Content-Length":t.buffer.length.toString(),"Content-Type":this.getContentTypeFromResult(t),"X-Image-Height":t.height?.toString(),"X-Image-Width":t.width?.toString()},size:t.buffer.length,stream:u.from(t.buffer)}}async applyTransformations(e,a){let t=this.openImage(e);for(const n of a)switch(n.type){case"affine":{t=this.applyAffine(t,n.options);break}case"autoOrient":{t=t.rotate();break}case"bandbool":{t=this.applyBandbool(t,n.options);break}case"blur":{t=this.applyBlur(t,n.options);break}case"boolean":{t=this.applyBoolean(t,n.options);break}case"clahe":{t=this.applyCLAHE(t,n.options);break}case"colourspace":{t=this.applyColourspace(t,n.options);break}case"convolve":{t=this.applyConvolve(t,n.options);break}case"crop":{t=this.applyCrop(t,n.options);break}case"dilate":{t=this.applyDilate(t,n.options);break}case"ensureAlpha":{t=this.applyEnsureAlpha(t,n.options);break}case"erode":{t=this.applyErode(t,n.options);break}case"extractChannel":{t=this.applyExtractChannel(t,n.options);break}case"flatten":{t=t.flatten();break}case"flip":{t=t.flip();break}case"flop":{t=t.flop();break}case"format":case"quality":{t=this.applyFormatAndQuality(t,n.options);break}case"gamma":{t=t.gamma();break}case"greyscale":{t=this.applyGreyscale(t,n.options);break}case"joinChannel":{t=this.applyJoinChannel(t,n.options);break}case"linear":{t=this.applyLinear(t,n.options);break}case"median":{t=this.applyMedian(t,n.options);break}case"modulate":{t=this.applyModulate(t,n.options);break}case"negate":{t=t.negate();break}case"normalise":case"normalize":{t=t.normalise();break}case"pipelineColourspace":{t=this.applyPipelineColourspace(t,n.options);break}case"recombine":{t=this.applyRecombine(t,n.options);break}case"removeAlpha":{t=this.applyRemoveAlpha(t,n.options);break}case"resize":{t=this.applyResize(t,n.options);break}case"rotate":{t=this.applyRotate(t,n.options);break}case"sharpen":{t=this.applySharpen(t,n.options);break}case"threshold":{t=this.applyThreshold(t,n.options);break}case"tint":{t=this.applyTint(t,n.options);break}case"toColourspace":{t=this.applyToColourspace(t,n.options);break}case"unflatten":{t=t.unflatten();break}default:throw new Error(`Unknown transformation type: ${n.type}`)}return t.toBuffer()}applyResize(e,a){const{background:t,fastShrinkOnLoad:n,fit:o="cover",height:r,kernel:s,position:i,width:l,withoutEnlargement:p,withoutReduction:m,...c}=a;let h={background:t||"transparent",fastShrinkOnLoad:n,fit:o,height:r,kernel:s,position:i,width:l,withoutEnlargement:p,withoutReduction:m};return Object.keys(c).length>0&&(h={...h,...this.getFormatOptions(c)}),e.resize(h)}applyCrop(e,a){const{height:t,left:n,top:o,width:r,...s}=a;let i=e.extract({height:t,left:n,top:o,width:r});return Object.keys(s).length>0&&(i=this.applyFormatAndQuality(i,s)),i}applyRotate(e,a){const{angle:t,background:n,...o}=a;let r=e.rotate(t,{background:n||"transparent"});return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applySharpen(e,a){const{sigma:t,...n}=a,o={};t!==void 0&&(o.sigma=t);let r=e.sharpen(o);return Object.keys(n).length>0&&(r=this.applyFormatAndQuality(r,n)),r}applyBlur(e,a){const{sigma:t,...n}=a;let o=e.blur(t===void 0?!0:t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyMedian(e,a){const{size:t,...n}=a;let o=e.median(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyCLAHE(e,a){const{height:t,maxSlope:n,width:o,...r}=a;let s=e.clahe({height:t,maxSlope:n,width:o});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyConvolve(e,a){const{height:t,kernel:n,offset:o,scale:r,width:s,...i}=a;let l=e.convolve({height:t,kernel:n,offset:o,scale:r,width:s});return Object.keys(i).length>0&&(l=this.applyFormatAndQuality(l,i)),l}applyThreshold(e,a){const{grayscale:t,greyscale:n,threshold:o=128,...r}=a;let s=e.threshold(o,{greyscale:n||t});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyBoolean(e,a){const{operand:t,operator:n,raw:o,...r}=a;let s=e.boolean(t,n,o);return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyLinear(e,a){const{a:t,b:n,...o}=a;let r=e.linear(t,n);return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applyRecombine(e,a){const{matrix:t,...n}=a;let o=e.recomb(t.flat());return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyModulate(e,a){const{brightness:t,hue:n,lightness:o,saturation:r,...s}=a;let i=e.modulate({brightness:t,hue:n,lightness:o,saturation:r});return Object.keys(s).length>0&&(i=this.applyFormatAndQuality(i,s)),i}applyTint(e,a){const{rgb:t,...n}=a;let o=e.tint(Array.isArray(t)?{b:t[2],g:t[1],r:t[0]}:t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyGreyscale(e,a){const{grayscale:t,greyscale:n,...o}=a;let r=e.greyscale(n||t);return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applyColourspace(e,a){const{colourspace:t,...n}=a;let o=e.toColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyExtractChannel(e,a){const{channel:t,...n}=a;let o=e.extractChannel(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyJoinChannel(e,a){const{images:t,...n}=a;let o=e.joinChannel(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyBandbool(e,a){const{operator:t,...n}=a;let o=e.bandbool(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyAffine(e,a){const{background:t,interpolation:n,matrix:o,...r}=a;let s=e.affine(o,{background:t||"transparent",interpolator:n||"bicubic"});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyDilate(e,a){const{kernelSize:t,...n}=a;let o=t?e.dilate(t):e.dilate();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyErode(e,a){const{kernelSize:t,...n}=a;let o=t?e.erode(t):e.erode();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyPipelineColourspace(e,a){const{colourspace:t,...n}=a;let o=e.pipelineColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyToColourspace(e,a){const{colourspace:t,...n}=a;let o=e.toColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyRemoveAlpha(e,a){const{background:t,...n}=a;let o=e.removeAlpha();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyEnsureAlpha(e,a){const{alpha:t,...n}=a;let o=e.ensureAlpha();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyFormatAndQuality(e,a){const t=this.getFormatOptions(a);return a.format?e.toFormat(a.format,t):Object.keys(t).length>0?e.jpeg(t).png(t).webp(t):e}getFormatOptions(e){const{alphaQuality:a,compressionLevel:t,delay:n,effort:o,loop:r,lossless:s,progressive:i,quality:l}=e,p={};return l!==void 0&&(p.quality=l),i!==void 0&&(p.progressive=i),s!==void 0&&(p.lossless=s),t!==void 0&&(p.compressionLevel=t),o!==void 0&&(p.effort=o),a!==void 0&&(p.alphaQuality=a),r!==void 0&&(p.loop=r),n!==void 0&&(p.delay=n),p}async validateImage(e){const a=typeof e.size=="string"?Number.parseInt(e.size,10):e.size;if(this.config?.maxImageSize&&a>this.config.maxImageSize)throw new Error(`Image size ${a} exceeds maximum allowed size ${this.config.maxImageSize}`);if(!f(e.contentType,"image"))throw new Error(`File is not an image: ${e.contentType}`);const t=d(e.contentType);if(this.config?.supportedFormats&&t&&!this.config.supportedFormats.includes(t))throw new Error(`Unsupported image format: ${t}`);try{const n=await this.openImage(e.content).metadata();if(!n.width||!n.height)throw new Error("Invalid image: missing dimensions");const{maxImageHeight:o,maxImageWidth:r}=this.config??{};if(r!==void 0&&n.width>r)throw new Error(`Image width ${n.width}px exceeds maximum ${r}px`);if(o!==void 0&&n.height>o)throw new Error(`Image height ${n.height}px exceeds maximum ${o}px`)}catch(n){throw new Error(`Invalid image file: ${n}`)}}async createTransformResult(e,a){const t=await y(e).metadata();return{buffer:e,format:t.format||"unknown",height:t.height||0,originalFile:a,size:e.length,width:t.width||0}}generateCacheKey(e,a){const t=a.map(n=>`${n.type}:${JSON.stringify(n.options)}`).join("|");return`${e}:${t}`}}export{C as default};
1
+ import{Readable as u}from"node:stream";import y from"sharp";import g from"../packem_shared/BaseTransformer-Buw5lX_3.js";import{isValidMediaType as d,getFormatFromContentType as f}from"../packem_shared/getFormatFromContentType-DCTTPQHm.js";class C extends g{constructor(e,a={}){const t=a.logger||e.logger,n={cacheTtl:3600,failOn:"warning",limitInputPixels:268435456,maxCacheSize:100,maxImageSize:50*1024*1024,supportedFormats:["jpeg","png","webp","avif","tiff","gif","svg"],...a};super(e,n,t)}openImage(e){return y(e,{failOn:this.config?.failOn??"warning",limitInputPixels:this.config?.limitInputPixels??268435456})}async resize(e,a){return this.transform(e,[{options:a,type:"resize"}])}async crop(e,a){return this.transform(e,[{options:a,type:"crop"}])}async rotate(e,a){return this.transform(e,[{options:a,type:"rotate"}])}async convertFormat(e,a,t={}){return this.transform(e,[{options:{...t,format:a},type:"format"}])}async sharpen(e,a={}){return this.transform(e,[{options:a,type:"sharpen"}])}async blur(e,a={}){return this.transform(e,[{options:a,type:"blur"}])}async median(e,a={}){return this.transform(e,[{options:a,type:"median"}])}async clahe(e,a={}){return this.transform(e,[{options:a,type:"clahe"}])}async convolve(e,a){return this.transform(e,[{options:a,type:"convolve"}])}async threshold(e,a={}){return this.transform(e,[{options:a,type:"threshold"}])}async boolean(e,a){return this.transform(e,[{options:a,type:"boolean"}])}async linear(e,a){return this.transform(e,[{options:a,type:"linear"}])}async recombine(e,a){return this.transform(e,[{options:a,type:"recombine"}])}async modulate(e,a){return this.transform(e,[{options:a,type:"modulate"}])}async tint(e,a){return this.transform(e,[{options:a,type:"tint"}])}async greyscale(e,a={}){return this.transform(e,[{options:a,type:"greyscale"}])}async colourspace(e,a){return this.transform(e,[{options:a,type:"colourspace"}])}async extractChannel(e,a){return this.transform(e,[{options:a,type:"extractChannel"}])}async joinChannel(e,a){return this.transform(e,[{options:a,type:"joinChannel"}])}async bandbool(e,a){return this.transform(e,[{options:a,type:"bandbool"}])}async autoOrient(e,a={}){return this.transform(e,[{options:a,type:"autoOrient"}])}async flip(e,a={}){return this.transform(e,[{options:a,type:"flip"}])}async flop(e,a={}){return this.transform(e,[{options:a,type:"flop"}])}async flatten(e,a={}){return this.transform(e,[{options:a,type:"flatten"}])}async unflatten(e,a={}){return this.transform(e,[{options:a,type:"unflatten"}])}async gamma(e,a={}){return this.transform(e,[{options:a,type:"gamma"}])}async negate(e,a={}){return this.transform(e,[{options:a,type:"negate"}])}async normalise(e,a={}){return this.transform(e,[{options:a,type:"normalise"}])}async affine(e,a){return this.transform(e,[{options:a,type:"affine"}])}async dilate(e,a={}){return this.transform(e,[{options:a,type:"dilate"}])}async erode(e,a={}){return this.transform(e,[{options:a,type:"erode"}])}async pipelineColourspace(e,a){return this.transform(e,[{options:a,type:"pipelineColourspace"}])}async toColourspace(e,a){return this.transform(e,[{options:a,type:"toColourspace"}])}async removeAlpha(e,a={}){return this.transform(e,[{options:a,type:"removeAlpha"}])}async ensureAlpha(e,a={}){return this.transform(e,[{options:a,type:"ensureAlpha"}])}async transform(e,a){const t={id:e},n=this.generateCacheKey(e,a),o=this.cache?await Promise.resolve(this.cache.get(n)):void 0;if(o)return this.logger?.debug("Returning cached transformed image for %s",e),o;const r=await this.storage.get(t);await this.validateImage(r);const s=await this.applyTransformations(r.content,a),i=await this.createTransformResult(s,r);return this.cache&&this.cache.set(n,i),i}async transformStream(e,a){const t=await this.transform(e,a);return{headers:{"Content-Length":t.buffer.length.toString(),"Content-Type":this.getContentTypeFromResult(t),"X-Image-Height":t.height?.toString(),"X-Image-Width":t.width?.toString()},size:t.buffer.length,stream:u.from(t.buffer)}}async applyTransformations(e,a){let t=this.openImage(e);for(const n of a)switch(n.type){case"affine":{t=this.applyAffine(t,n.options);break}case"autoOrient":{t=t.rotate();break}case"bandbool":{t=this.applyBandbool(t,n.options);break}case"blur":{t=this.applyBlur(t,n.options);break}case"boolean":{t=this.applyBoolean(t,n.options);break}case"clahe":{t=this.applyCLAHE(t,n.options);break}case"colourspace":{t=this.applyColourspace(t,n.options);break}case"convolve":{t=this.applyConvolve(t,n.options);break}case"crop":{t=this.applyCrop(t,n.options);break}case"dilate":{t=this.applyDilate(t,n.options);break}case"ensureAlpha":{t=this.applyEnsureAlpha(t,n.options);break}case"erode":{t=this.applyErode(t,n.options);break}case"extractChannel":{t=this.applyExtractChannel(t,n.options);break}case"flatten":{t=t.flatten();break}case"flip":{t=t.flip();break}case"flop":{t=t.flop();break}case"format":case"quality":{t=this.applyFormatAndQuality(t,n.options);break}case"gamma":{t=t.gamma();break}case"greyscale":{t=this.applyGreyscale(t,n.options);break}case"joinChannel":{t=this.applyJoinChannel(t,n.options);break}case"linear":{t=this.applyLinear(t,n.options);break}case"median":{t=this.applyMedian(t,n.options);break}case"modulate":{t=this.applyModulate(t,n.options);break}case"negate":{t=t.negate();break}case"normalise":case"normalize":{t=t.normalise();break}case"pipelineColourspace":{t=this.applyPipelineColourspace(t,n.options);break}case"recombine":{t=this.applyRecombine(t,n.options);break}case"removeAlpha":{t=this.applyRemoveAlpha(t,n.options);break}case"resize":{t=this.applyResize(t,n.options);break}case"rotate":{t=this.applyRotate(t,n.options);break}case"sharpen":{t=this.applySharpen(t,n.options);break}case"threshold":{t=this.applyThreshold(t,n.options);break}case"tint":{t=this.applyTint(t,n.options);break}case"toColourspace":{t=this.applyToColourspace(t,n.options);break}case"unflatten":{t=t.unflatten();break}default:throw new Error(`Unknown transformation type: ${n.type}`)}return t.toBuffer()}applyResize(e,a){const{background:t,fastShrinkOnLoad:n,fit:o="cover",height:r,kernel:s,position:i,width:l,withoutEnlargement:p,withoutReduction:m,...c}=a;let h={background:t||"transparent",fastShrinkOnLoad:n,fit:o,height:r,kernel:s,position:i,width:l,withoutEnlargement:p,withoutReduction:m};return Object.keys(c).length>0&&(h={...h,...this.getFormatOptions(c)}),e.resize(h)}applyCrop(e,a){const{height:t,left:n,top:o,width:r,...s}=a;let i=e.extract({height:t,left:n,top:o,width:r});return Object.keys(s).length>0&&(i=this.applyFormatAndQuality(i,s)),i}applyRotate(e,a){const{angle:t,background:n,...o}=a;let r=e.rotate(t,{background:n||"transparent"});return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applySharpen(e,a){const{sigma:t,...n}=a,o={};t!==void 0&&(o.sigma=t);let r=e.sharpen(o);return Object.keys(n).length>0&&(r=this.applyFormatAndQuality(r,n)),r}applyBlur(e,a){const{sigma:t,...n}=a;let o=e.blur(t===void 0?!0:t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyMedian(e,a){const{size:t,...n}=a;let o=e.median(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyCLAHE(e,a){const{height:t,maxSlope:n,width:o,...r}=a;if(o===void 0||t===void 0)throw new Error("CLAHE transformation requires both `width` and `height`.");let s=e.clahe({height:t,maxSlope:n,width:o});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyConvolve(e,a){const{height:t,kernel:n,offset:o,scale:r,width:s,...i}=a;if(s===void 0||t===void 0||n===void 0)throw new Error("Convolve transformation requires `width`, `height`, and `kernel`.");let l=e.convolve({height:t,kernel:n,offset:o,scale:r,width:s});return Object.keys(i).length>0&&(l=this.applyFormatAndQuality(l,i)),l}applyThreshold(e,a){const{grayscale:t,greyscale:n,threshold:o=128,...r}=a;let s=e.threshold(o,{greyscale:n||t});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyBoolean(e,a){const{operand:t,operator:n,raw:o,...r}=a;let s=e.boolean(t,n,o);return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyLinear(e,a){const{a:t,b:n,...o}=a;let r=e.linear(t,n);return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applyRecombine(e,a){const{matrix:t,...n}=a;let o=e.recomb(t.flat());return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyModulate(e,a){const{brightness:t,hue:n,lightness:o,saturation:r,...s}=a;let i=e.modulate({brightness:t,hue:n,lightness:o,saturation:r});return Object.keys(s).length>0&&(i=this.applyFormatAndQuality(i,s)),i}applyTint(e,a){const{rgb:t,...n}=a;let o=e.tint(Array.isArray(t)?{b:t[2],g:t[1],r:t[0]}:t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyGreyscale(e,a){const{grayscale:t,greyscale:n,...o}=a;let r=e.greyscale(n||t);return Object.keys(o).length>0&&(r=this.applyFormatAndQuality(r,o)),r}applyColourspace(e,a){const{colourspace:t,...n}=a;let o=e.toColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyExtractChannel(e,a){const{channel:t,...n}=a;let o=e.extractChannel(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyJoinChannel(e,a){const{images:t,...n}=a;let o=e.joinChannel(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyBandbool(e,a){const{operator:t,...n}=a;let o=e.bandbool(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyAffine(e,a){const{background:t,interpolation:n,matrix:o,...r}=a;let s=e.affine(o,{background:t||"transparent",interpolator:n||"bicubic"});return Object.keys(r).length>0&&(s=this.applyFormatAndQuality(s,r)),s}applyDilate(e,a){const{kernelSize:t,...n}=a;let o=t?e.dilate(t):e.dilate();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyErode(e,a){const{kernelSize:t,...n}=a;let o=t?e.erode(t):e.erode();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyPipelineColourspace(e,a){const{colourspace:t,...n}=a;let o=e.pipelineColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyToColourspace(e,a){const{colourspace:t,...n}=a;let o=e.toColourspace(t);return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyRemoveAlpha(e,a){const{background:t,...n}=a;let o=e.removeAlpha();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyEnsureAlpha(e,a){const{alpha:t,...n}=a;let o=e.ensureAlpha();return Object.keys(n).length>0&&(o=this.applyFormatAndQuality(o,n)),o}applyFormatAndQuality(e,a){const t=this.getFormatOptions(a);return a.format?e.toFormat(a.format,t):Object.keys(t).length>0?e.jpeg(t).png(t).webp(t):e}getFormatOptions(e){const{alphaQuality:a,compressionLevel:t,delay:n,effort:o,loop:r,lossless:s,progressive:i,quality:l}=e,p={};return l!==void 0&&(p.quality=l),i!==void 0&&(p.progressive=i),s!==void 0&&(p.lossless=s),t!==void 0&&(p.compressionLevel=t),o!==void 0&&(p.effort=o),a!==void 0&&(p.alphaQuality=a),r!==void 0&&(p.loop=r),n!==void 0&&(p.delay=n),p}async validateImage(e){const a=typeof e.size=="string"?Number.parseInt(e.size,10):e.size;if(this.config?.maxImageSize&&a>this.config.maxImageSize)throw new Error(`Image size ${a} exceeds maximum allowed size ${this.config.maxImageSize}`);if(!d(e.contentType,"image"))throw new Error(`File is not an image: ${e.contentType}`);const t=f(e.contentType);if(this.config?.supportedFormats&&t&&!this.config.supportedFormats.includes(t))throw new Error(`Unsupported image format: ${t}`);try{const n=await this.openImage(e.content).metadata();if(!n.width||!n.height)throw new Error("Invalid image: missing dimensions");const{maxImageHeight:o,maxImageWidth:r}=this.config??{};if(r!==void 0&&n.width>r)throw new Error(`Image width ${n.width}px exceeds maximum ${r}px`);if(o!==void 0&&n.height>o)throw new Error(`Image height ${n.height}px exceeds maximum ${o}px`)}catch(n){throw new Error(`Invalid image file: ${n}`)}}async createTransformResult(e,a){const t=await y(e).metadata();return{buffer:e,format:t.format||"unknown",height:t.height||0,originalFile:a,size:e.length,width:t.width||0}}generateCacheKey(e,a){const t=a.map(n=>`${n.type}:${JSON.stringify(n.options)}`).join("|");return`${e}:${t}`}}export{C as default};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/storage",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "Server-side file-storage abstraction - store files in a web-accessible location via a simplified API. Includes S3, Azure, GCS, local filesystem and 20+ other backends with TUS/multipart/REST upload handlers and the most convenient features of each.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -61,6 +61,11 @@
61
61
  "visulima"
62
62
  ],
63
63
  "homepage": "https://visulima.com/packages/storage",
64
+ "license": "MIT",
65
+ "author": {
66
+ "name": "Daniel Bannert",
67
+ "email": "d.bannert@anolilab.de"
68
+ },
64
69
  "repository": {
65
70
  "type": "git",
66
71
  "url": "https://github.com/visulima/visulima.git",
@@ -76,13 +81,14 @@
76
81
  "url": "https://anolilab.com/support"
77
82
  }
78
83
  ],
79
- "license": "MIT",
80
- "author": {
81
- "name": "Daniel Bannert",
82
- "email": "d.bannert@anolilab.de"
83
- },
84
- "sideEffects": false,
84
+ "files": [
85
+ "dist/**",
86
+ "README.md",
87
+ "CHANGELOG.md",
88
+ "LICENSE.md"
89
+ ],
85
90
  "type": "module",
91
+ "sideEffects": false,
86
92
  "exports": {
87
93
  ".": {
88
94
  "types": "./dist/index.d.ts",
@@ -258,12 +264,10 @@
258
264
  },
259
265
  "./package.json": "./package.json"
260
266
  },
261
- "files": [
262
- "dist/**",
263
- "README.md",
264
- "CHANGELOG.md",
265
- "LICENSE.md"
266
- ],
267
+ "publishConfig": {
268
+ "access": "public",
269
+ "provenance": true
270
+ },
267
271
  "dependencies": {
268
272
  "@remix-run/multipart-parser": "0.16.3",
269
273
  "@sindresorhus/fnv1a": "3.1.0",
@@ -271,7 +275,7 @@
271
275
  "file-type": "22.0.1",
272
276
  "lru-cache": "11.5.1",
273
277
  "mime": "^4.1.0",
274
- "nanoid": "5.1.11",
278
+ "nanoid": "5.1.16",
275
279
  "path-to-regexp": "8.4.2",
276
280
  "type-is": "^2.1.0",
277
281
  "zod": "4.4.3"
@@ -430,9 +434,5 @@
430
434
  },
431
435
  "engines": {
432
436
  "node": "^22.14.0 || >=24.10.0"
433
- },
434
- "publishConfig": {
435
- "access": "public",
436
- "provenance": true
437
437
  }
438
438
  }
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as s}from"./local-meta-storage-C2T92TYb.js";class o extends s{constructor(r){super(r)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as s}from"./local-meta-storage-C2T92TYb.js";class o extends s{constructor(r){super(r)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(t){super(t)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as s}from"./local-meta-storage-C2T92TYb.js";class o extends s{constructor(r){super(r)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(t){super(t)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class e extends r{constructor(o){super(o)}}export{e as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(t){super(t)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as s}from"./local-meta-storage-C2T92TYb.js";class o extends s{constructor(r){super(r)}}export{o as default};
@@ -1 +0,0 @@
1
- import{y as r}from"./local-meta-storage-C2T92TYb.js";class o extends r{constructor(e){super(e)}}export{o as default};
@@ -1 +0,0 @@
1
- import{randomUUID as p}from"node:crypto";import{request as l}from"gaxios";import{GoogleAuth as g}from"google-auth-library";import y from"./MetaStorage-DPEUyWgN.js";import{stringifyMetadata as f,parseMetadata as C}from"./Metadata-B7CcBueg.js";import a from"./GCSConfig-BQ0OpVhe.js";import{e as R}from"./has-content-50BsqrWw.js";var v="@visulima/storage",E="1.0.0-alpha.36";const n={name:v,version:E},b=r=>{const t=r.match(/(\d+)-(\d+)/),e=t?.[2]?+t[2]:0;return e>0?e+1:0},q=r=>{if(R(r)){const t=r.contentLength?r.start+r.contentLength-1:"*";return`bytes ${r.start}-${t}/${r.size??"*"}`}return`bytes */${r.size??"*"}`},I=r=>{if(r.response!==void 0){const{response:t}=r;return t?.data?.error?.errors?.map(({reason:e=""})=>e==="rateLimitExceeded"||e==="userRateLimitExceeded"?!0:!!(e&&e.includes("EAI_AGAIN"))).includes(!0)}return!1},A={retry:3,shouldRetry:I,statusCodesToRetry:[[408,429,500,502,503,504],[100,199],[429],[500,599]]};class M extends y{constructor(t){super(t),this.config=t;const{authClient:e,...s}=t,o=s.bucket||process.env.GCS_BUCKET;if(e===void 0){if(!o)throw new Error("GCS bucket is not defined");if(!s.projectId)throw new Error("Sorry, we cannot connect to Cloud Services without a project ID.");s.scopes||=a.authScopes,this.authClient=new g(s)}else this.authClient=e;this.storageBaseURI=`${s.storageAPI||a.storageAPI}/${o}/o`,this.uploadBaseURI=`${s.uploadAPI||a.uploadAPI}/${o}/o`;const u=["storage.googleapis.com"],c=new URL(this.storageBaseURI).hostname;this.isCustomEndpoint=!u.includes(c);const{retryOptions:h,useAuthWithCustomEndpoint:d,userProject:m}=t;this.userProject=m,this.useAuthWithCustomEndpoint=d||!1,this.retryOptions={...A,...h},e===void 0&&this.accessCheck().catch(i=>{throw i.code==="404"?new Error(`Bucket ${o} does not exist`):i})}config;authClient;storageBaseURI;uploadBaseURI;isCustomEndpoint=!1;retryOptions={};useAuthWithCustomEndpoint;userProject;async save(t,e){const s={...e};return s.metadata&&(s.metadata=f(e.metadata)),await this.makeRequest({body:JSON.stringify(s),headers:{"Content-Type":"application/json; charset=utf-8"},method:"POST",params:{name:encodeURIComponent(this.getMetaName(t)),uploadType:"media"},url:this.uploadBaseURI}),e}async delete(t){const e=this.getMetaPath(t);await this.makeRequest({method:"DELETE",url:e})}async get(t){const e=this.getMetaPath(t),{data:s}=await this.makeRequest({params:{alt:"media"},url:e});return s.metadata&&typeof s.metadata=="string"&&(s.metadata=C(s.metadata)),s}async touch(t,e){return this.save(t,e)}async accessCheck(){return this.makeRequest({url:this.storageBaseURI.replace("/o","")})}getMetaPath(t){return`${this.storageBaseURI}/${this.getMetaName(t)}`}async makeRequest(t){return typeof t.url=="string"&&(t.url=t.url.replaceAll("/:",":")),t={...t,headers:{"User-Agent":`${n.name}/${n.version}`,"x-goog-api-client":`gl-node/${process.versions.node} gccl/${n.version} gccl-invocation-id/${p()}`},params:{...this.userProject===void 0?{}:{userProject:this.userProject}},retry:!0,retryConfig:this.retryOptions,timeout:6e4},this.isCustomEndpoint&&!this.useAuthWithCustomEndpoint?l(t):this.authClient.request(t)}}export{q as b,b as g,n as m,A as r,M as v};