@visulima/storage 1.0.9 → 1.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -0
- package/dist/adapter/nuxt/module.d.ts +9 -8
- package/dist/ai/ai-sdk/index.d.ts +52 -59
- package/dist/ai/claude/index.d.ts +105 -119
- package/dist/ai/openai/index.d.ts +87 -99
- package/dist/ai/tanstack/index.d.ts +54 -61
- package/dist/handler/http/fetch/index.d.ts +202 -201
- package/dist/handler/http/fetch/index.js +1 -1
- package/dist/handler/http/hono/index.d.ts +60 -59
- package/dist/handler/http/hono/index.js +1 -1
- package/dist/handler/http/nextjs/index.d.ts +55 -54
- package/dist/handler/http/nextjs/index.js +1 -1
- package/dist/handler/http/node/index.d.ts +234 -246
- package/dist/handler/http/node/index.js +1 -1
- package/dist/handler/http/solid-start/index.d.ts +55 -54
- package/dist/handler/http/solid-start/index.js +1 -1
- package/dist/index.d.ts +71 -70
- package/dist/index.js +1 -1
- package/dist/packem_shared/{AbstractBaseStorage-CiPEMcuo.js → AbstractBaseStorage-CLsYmMZg.js} +1 -1
- package/dist/packem_shared/AwsLightStorage-DGSPFUqr.js +1 -0
- package/dist/packem_shared/AzureStorage-DvKk_hhz.js +1 -0
- package/dist/packem_shared/BoxMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{BoxStorage-DbGqBLux.js → BoxStorage-CmM95wi2.js} +1 -1
- package/dist/packem_shared/BunS3MetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{BunS3Storage-DNvimm9e.js → BunS3Storage-B_roVJ29.js} +1 -1
- package/dist/packem_shared/BunnyMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{BunnyStorage-C7d0opLL.js → BunnyStorage-eZ1QDVaY.js} +1 -1
- package/dist/packem_shared/CloudinaryMetaStorage-Bv_YCZ0Q.js +1 -0
- package/dist/packem_shared/{CloudinaryStorage-Dc3XA2lP.js → CloudinaryStorage-CpH2f0Fv.js} +1 -1
- package/dist/packem_shared/DiskStorage-DzjjqCzo.js +1 -0
- package/dist/packem_shared/{DiskStorageWithChecksum-vFCubS6K.js → DiskStorageWithChecksum-MZkDEyts.js} +1 -1
- package/dist/packem_shared/DropboxMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{DropboxStorage-CY9Ggu3m.js → DropboxStorage-BB9NoWK2.js} +1 -1
- package/dist/packem_shared/{Files-CpIcMjP0.js → Files-DyMJ9FPN.js} +1 -1
- package/dist/packem_shared/FirebaseMetaStorage-Bv_YCZ0Q.js +1 -0
- package/dist/packem_shared/{FirebaseStorage-D6O9CJXN.js → FirebaseStorage-BgbxzYNC.js} +1 -1
- package/dist/packem_shared/FtpMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{FtpStorage-DbEjbq8z.js → FtpStorage-CNqXDz7P.js} +1 -1
- package/dist/packem_shared/{GCSMetaStorage-DT8K6zdm.js → GCSMetaStorage-gEhWlpfS.js} +1 -1
- package/dist/packem_shared/{GCStorage-6BHkFlEs.js → GCStorage-CRd5vjok.js} +1 -1
- package/dist/packem_shared/GoogleDriveMetaStorage-B0gLF7Io.js +1 -0
- package/dist/packem_shared/{GoogleDriveStorage-Bklsz7Bh.js → GoogleDriveStorage-Du7uBhSm.js} +1 -1
- package/dist/packem_shared/{LocalMetaStorage-BhicZnNl.js → LocalMetaStorage-CcGfFG39.js} +1 -1
- package/dist/packem_shared/{MemoryStorage-9gbWd09l.js → MemoryStorage-ChKyI6OY.js} +1 -1
- package/dist/packem_shared/{Multipart-D0ok6BBy.js → Multipart-C35TR2qL.js} +1 -1
- package/dist/packem_shared/{Multipart-CQjYqU--.js → Multipart-V64Bg5dt.js} +1 -1
- package/dist/packem_shared/NetlifyBlobMetaStorage-Bv_YCZ0Q.js +1 -0
- package/dist/packem_shared/NetlifyBlobStorage-CZsr_0DF.js +1 -0
- package/dist/packem_shared/OneDriveMetaStorage-B0gLF7Io.js +1 -0
- package/dist/packem_shared/{OneDriveStorage-CP6MvGAa.js → OneDriveStorage-B8qFgMq1.js} +1 -1
- package/dist/packem_shared/PocketBaseMetaStorage-Cm3v8g1-.js +1 -0
- package/dist/packem_shared/{PocketBaseStorage-2qhbI2PW.js → PocketBaseStorage-D2vMN-oY.js} +1 -1
- package/dist/packem_shared/{Rest-CI_BiZPv.js → Rest-B7g1sgkq.js} +1 -1
- package/dist/packem_shared/{Rest-DvfN4-kf.js → Rest-BrEMYgxZ.js} +1 -1
- package/dist/packem_shared/{S3Storage-YGeNk3Tt.js → S3Storage-CTe_BMDl.js} +1 -1
- package/dist/packem_shared/SftpMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{SftpStorage-2Hz396Xr.js → SftpStorage-BKeAzuej.js} +1 -1
- package/dist/packem_shared/SharePointMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{SharePointStorage-CrX2Pk6C.js → SharePointStorage-Dtnt5-wk.js} +1 -1
- package/dist/packem_shared/SupabaseMetaStorage-B0gLF7Io.js +1 -0
- package/dist/packem_shared/{SupabaseStorage-Dc_DBX29.js → SupabaseStorage-CmGQjqXf.js} +1 -1
- package/dist/packem_shared/{Tus-BlBZykIL.js → Tus-CJBgnJrn.js} +1 -1
- package/dist/packem_shared/{Tus-BBVt2ky3.js → Tus-D9c7KDnl.js} +1 -1
- package/dist/packem_shared/UploadThingMetaStorage-Bv_YCZ0Q.js +1 -0
- package/dist/packem_shared/{UploadThingStorage-BChykYSe.js → UploadThingStorage-DZ4zNvDH.js} +1 -1
- package/dist/packem_shared/VercelBlobMetaStorage-CJsyeQ63.js +1 -0
- package/dist/packem_shared/{VercelBlobStorage-CsRyPfw3.js → VercelBlobStorage-DDNEofR3.js} +1 -1
- package/dist/packem_shared/{approval.d-CMAYH9GF.d.ts → approval.d-C-d-t94D.d.ts} +6 -6
- package/dist/packem_shared/{base-handler-core-D-9Ku1h-.js → base-handler-core-BJP9jHCE.js} +1 -1
- package/dist/packem_shared/{base-handler-fetch-CfkNakv8.js → base-handler-fetch-yrYrukwL.js} +1 -1
- package/dist/packem_shared/base-handler-node-C8P9rkaH.js +1 -0
- package/dist/packem_shared/{createRetryWrapper-CxgiV_hH.js → createRetryWrapper-DgmeHPNF.js} +1 -1
- package/dist/packem_shared/disk-storage-DqnnFQAQ.js +1 -0
- package/dist/packem_shared/disk-storage-with-checksum.d-Dgwyza8a.d.ts +146 -0
- package/dist/packem_shared/{executors.d-BZP2rWo3.d.ts → executors.d-B9dIy3NT.d.ts} +3 -2
- package/dist/packem_shared/files.d-CmSZi3M0.d.ts +655 -0
- package/dist/packem_shared/gcs-meta-storage-C9F78Sqq.js +1 -0
- package/dist/packem_shared/local-meta-storage-BELb1YwO.js +11 -0
- package/dist/packem_shared/{local-meta-storage.d-D9PBfkn6.d.ts → local-meta-storage.d-cRTXr1kb.d.ts} +7 -7
- package/dist/packem_shared/media-transformer.d-C8tn4J2Z.d.ts +331 -0
- package/dist/packem_shared/{memory-storage.d-4EU1cMt1.d.ts → memory-storage.d-BNZvDG1b.d.ts} +32 -40
- package/dist/packem_shared/path-C-OWflAo-_mqb5p5d.js +1 -0
- package/dist/packem_shared/{rest-base-e0reNDE_.js → rest-base-BQ_dhWyV.js} +1 -1
- package/dist/packem_shared/s3-base-storage-CX94H-Za.js +1 -0
- package/dist/packem_shared/{s3-base-storage.d-BQgP5B-t.d.ts → s3-base-storage.d-ks99NSs-.d.ts} +64 -70
- package/dist/packem_shared/storage-DR7qdwBN.js +1 -0
- package/dist/packem_shared/storage.d-DwdJrArF.d.ts +1186 -0
- package/dist/packem_shared/tus-base.d-BKBoJVy0.d.ts +103 -0
- package/dist/packem_shared/types.d-B1_xZIhu.d.ts +104 -0
- package/dist/packem_shared/{types.d-CrUWY4On.d.ts → types.d-BEUv414z.d.ts} +134 -134
- package/dist/packem_shared/{types.d-CggTCgXr.d.ts → types.d-D7Zlz5RE.d.ts} +3 -3
- package/dist/storage/aws/clients/index.d.ts +388 -388
- package/dist/storage/aws/index.d.ts +110 -113
- package/dist/storage/aws/index.js +1 -1
- package/dist/storage/aws-light/index.d.ts +64 -67
- package/dist/storage/aws-light/index.js +1 -1
- package/dist/storage/azure/index.d.ts +134 -139
- package/dist/storage/azure/index.js +1 -1
- package/dist/storage/box/index.d.ts +89 -92
- package/dist/storage/box/index.js +1 -1
- package/dist/storage/bun-s3/index.d.ts +71 -76
- package/dist/storage/bun-s3/index.js +1 -1
- package/dist/storage/bunny/index.d.ts +52 -55
- package/dist/storage/bunny/index.js +1 -1
- package/dist/storage/cloudinary/index.d.ts +54 -59
- package/dist/storage/cloudinary/index.js +1 -1
- package/dist/storage/dropbox/index.d.ts +59 -62
- package/dist/storage/dropbox/index.js +1 -1
- package/dist/storage/firebase/index.d.ts +74 -79
- package/dist/storage/firebase/index.js +1 -1
- package/dist/storage/ftp/index.d.ts +38 -43
- package/dist/storage/ftp/index.js +1 -1
- package/dist/storage/gcs/index.d.ts +90 -95
- package/dist/storage/gcs/index.js +1 -1
- package/dist/storage/google-drive/index.d.ts +69 -72
- package/dist/storage/google-drive/index.js +1 -1
- package/dist/storage/local/index.d.ts +4 -3
- package/dist/storage/local/index.js +1 -1
- package/dist/storage/memory/index.d.ts +3 -2
- package/dist/storage/memory/index.js +1 -1
- package/dist/storage/netlify-blob/index.d.ts +86 -93
- package/dist/storage/netlify-blob/index.js +1 -1
- package/dist/storage/onedrive/index.d.ts +44 -53
- package/dist/storage/onedrive/index.js +1 -1
- package/dist/storage/pocketbase/index.d.ts +67 -72
- package/dist/storage/pocketbase/index.js +1 -1
- package/dist/storage/sftp/index.d.ts +40 -45
- package/dist/storage/sftp/index.js +1 -1
- package/dist/storage/sharepoint/index.d.ts +96 -95
- package/dist/storage/sharepoint/index.js +1 -1
- package/dist/storage/supabase/index.d.ts +50 -55
- package/dist/storage/supabase/index.js +1 -1
- package/dist/storage/uploadthing/index.d.ts +34 -37
- package/dist/storage/uploadthing/index.js +1 -1
- package/dist/storage/vercel-blob/index.d.ts +110 -115
- package/dist/storage/vercel-blob/index.js +1 -1
- package/dist/transformer/audio-transformer.d.ts +97 -96
- package/dist/transformer/image-transformer.d.ts +423 -422
- package/dist/transformer/index.d.ts +35 -34
- package/dist/transformer/video-transformer.d.ts +112 -111
- package/package.json +2 -2
- package/dist/packem_shared/AwsLightStorage-BK-WPL0h.js +0 -1
- package/dist/packem_shared/AzureStorage-1UvDIQZd.js +0 -1
- package/dist/packem_shared/BoxMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/BunS3MetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/BunnyMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/CloudinaryMetaStorage-DPVnmNe5.js +0 -1
- package/dist/packem_shared/DiskStorage-CI07TVNu.js +0 -1
- package/dist/packem_shared/DropboxMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/FirebaseMetaStorage-DPVnmNe5.js +0 -1
- package/dist/packem_shared/FtpMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/GoogleDriveMetaStorage-Cbwa1CHV.js +0 -1
- package/dist/packem_shared/NetlifyBlobMetaStorage-DPVnmNe5.js +0 -1
- package/dist/packem_shared/NetlifyBlobStorage-CkpCCoN1.js +0 -1
- package/dist/packem_shared/OneDriveMetaStorage-Cbwa1CHV.js +0 -1
- package/dist/packem_shared/PocketBaseMetaStorage-DOTLwVE7.js +0 -1
- package/dist/packem_shared/SftpMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/SharePointMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/SupabaseMetaStorage-Cbwa1CHV.js +0 -1
- package/dist/packem_shared/UploadThingMetaStorage-DPVnmNe5.js +0 -1
- package/dist/packem_shared/VercelBlobMetaStorage-BSn6Qfnf.js +0 -1
- package/dist/packem_shared/base-handler-node-BF1v1qDa.js +0 -1
- package/dist/packem_shared/disk-storage-CsQcYW3s.js +0 -1
- package/dist/packem_shared/disk-storage-with-checksum.d-B-VGEsfl.d.ts +0 -156
- package/dist/packem_shared/files.d-CH0iLBNC.d.ts +0 -655
- package/dist/packem_shared/gcs-meta-storage-B7BnctnV.js +0 -1
- package/dist/packem_shared/local-meta-storage-iuJnu90B.js +0 -11
- package/dist/packem_shared/media-transformer.d-Quf4ai47.d.ts +0 -331
- package/dist/packem_shared/path-0oTTdkvl-DvWvbDbh.js +0 -1
- package/dist/packem_shared/s3-base-storage-BoTyhuzO.js +0 -1
- package/dist/packem_shared/storage-0j5nCAUp.js +0 -1
- package/dist/packem_shared/storage.d-CEM1upWM.d.ts +0 -1176
- package/dist/packem_shared/tus-base.d-DLzKE54M.d.ts +0 -106
- package/dist/packem_shared/types.d-Bon9GVVe.d.ts +0 -104
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import{utimes as tr}from"node:fs/promises";import{tmpdir as rr}from"node:os";import{createRequire as C}from"node:module";import{v as or,H as ge,B as mt,m as Ut,W as yt,J as sr}from"./path-0oTTdkvl-DvWvbDbh.js";import{throwErrorCode as nt,ERRORS as it}from"./ERRORS-BIBxE2oR.js";import nr from"./MetaStorage-DPEUyWgN.js";import{stringifyMetadata as ir,parseMetadata as ur}from"./Metadata-B7CcBueg.js";const Xt=0,ar=C(import.meta.url),be=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,lr=t=>{if(typeof be<"u"&&be.versions&&be.versions.node){const[e,r]=be.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return be.getBuiltinModule(t)}return ar(t)},{fileURLToPath:pr}=lr("node:url");function cr(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Tt,xt;function fr(){return xt||(xt=1,Tt=["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cr3","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Tt}var dr=fr();const gr=cr(dr);new Set(gr);const ye=t=>or(t instanceof URL?pr(t):t);let hr=class extends Error{constructor(e){super(`EEXIST: ${e}`)}get code(){return"EEXIST"}set code(e){throw new Error("Cannot overwrite code EEXIST")}get name(){return"AlreadyExistsError"}set name(e){throw new Error("Cannot overwrite name of AlreadyExistsError")}};const he=t=>{if(!t||!(t instanceof URL)&&typeof t!="string")throw new TypeError("Path must be a non-empty string or URL.")},mr=C(import.meta.url),$e=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,yr=t=>{if(typeof $e<"u"&&$e.versions&&$e.versions.node){const[e,r]=$e.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return $e.getBuiltinModule(t)}return mr(t)};yr("node:fs/promises");const br=C(import.meta.url),ve=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,$r=t=>{if(typeof ve<"u"&&ve.versions&&ve.versions.node){const[e,r]=ve.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return ve.getBuiltinModule(t)}return br(t)};$r("node:fs");const bt=t=>{if(t.isFile())return"file";if(t.isDirectory())return"dir";if(t.isSymbolicLink())return"symlink"},vr=C(import.meta.url),Ee=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Er=t=>{if(typeof Ee<"u"&&Ee.versions&&Ee.versions.node){const[e,r]=Ee.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ee.getBuiltinModule(t)}return vr(t)},{lstat:wt,mkdir:Ar}=Er("node:fs/promises"),zt=async t=>{he(t);try{const e=await wt(t);if(!e.isDirectory())throw new Error(`Ensure path exists, expected 'dir', got '${String(bt(e))}'`);return}catch(e){if(e.code!=="ENOENT")throw e}try{await Ar(t,{recursive:!0})}catch(e){if(e.code!=="EEXIST")throw e;const r=await wt(t);if(!r.isDirectory())throw new Error(`Ensure path exists, expected 'dir', got '${String(bt(r))}'`,{cause:e})}},Rr=C(import.meta.url),Ae=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Tr=t=>{if(typeof Ae<"u"&&Ae.versions&&Ae.versions.node){const[e,r]=Ae.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ae.getBuiltinModule(t)}return Rr(t)};Tr("node:fs");const xr=C(import.meta.url),Re=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,wr=t=>{if(typeof Re<"u"&&Re.versions&&Re.versions.node){const[e,r]=Re.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Re.getBuiltinModule(t)}return xr(t)},{lstat:_r,writeFile:Sr}=wr("node:fs/promises"),Hs=async t=>{he(t);try{const e=await _r(t);if(!e.isFile())throw new Error(`Ensure path exists, expected 'file', got '${String(bt(e))}'`)}catch(e){if(e.code==="ENOENT"){await zt(ge(ye(t))),await Sr(t,new Uint8Array);return}throw e}},Cr=C(import.meta.url),Te=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,kr=t=>{if(typeof Te<"u"&&Te.versions&&Te.versions.node){const[e,r]=Te.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Te.getBuiltinModule(t)}return Cr(t)};kr("node:fs");const Or=C(import.meta.url),xe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Nr=t=>{if(typeof xe<"u"&&xe.versions&&xe.versions.node){const[e,r]=xe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return xe.getBuiltinModule(t)}return Or(t)};Nr("node:fs/promises");const Lr=C(import.meta.url),we=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Hr=t=>{if(typeof we<"u"&&we.versions&&we.versions.node){const[e,r]=we.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return we.getBuiltinModule(t)}return Lr(t)};Hr("node:fs");const Mr=C(import.meta.url),_e=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Br=t=>{if(typeof _e<"u"&&_e.versions&&_e.versions.node){const[e,r]=_e.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return _e.getBuiltinModule(t)}return Mr(t)};Br("node:fs/promises");const Ir=C(import.meta.url),Se=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Dr=t=>{if(typeof Se<"u"&&Se.versions&&Se.versions.node){const[e,r]=Se.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Se.getBuiltinModule(t)}return Ir(t)};Dr("node:fs");C(import.meta.url);let _t=class extends Error{root;constructor(e,r){super(`${e instanceof Error?e.message:String(e)} for path "${r}"`),this.cause=e,this.root=r}get name(){return"WalkError"}set name(e){throw new Error("Cannot overwrite name of WalkError")}};const St=t=>{const e=t.replace(/[$()+\\^]/g,String.raw`\$&`).replace(/\.\*/g,".([^/]*)").replace(/\*\*/g,"(.*)").replace(/(?<!\.)\*(?!\*)/g,"([^/]*)").replace(/\?/g,"[^/]").replace(/\.(?!\*)/g,String.raw`\.`).replace(/\{/g,"(").replace(/\}/g,")").replace(/,/g,"|").replace(/\[!(.*?)\]/g,"[^$1]");try{return new RegExp(`^${e}$`)}catch(r){throw new Error(`Invalid glob pattern: ${t}`,{cause:r})}};let Pr=class{name;path;#e;constructor(e,r,y){this.#e=e,this.name=r,this.path=y}isDirectory(){return this.#e.isDirectory()}isFile(){return this.#e.isFile()}isSymbolicLink(){return this.#e.isSymbolicLink()}};const $t=(t,e,r)=>new Pr(t,e,r),rt=(t,e,r,y)=>{if(Array.isArray(e)&&e.length>0&&!e.some(o=>t.endsWith(o)))return!1;const p=t.includes("\\")?t.replaceAll("\\","/"):t;return r&&!r.some(o=>o.test(p))?!1:!y?.some(o=>o.test(p))},Fr=C(import.meta.url),Ce=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Gr=t=>{if(typeof Ce<"u"&&Ce.versions&&Ce.versions.node){const[e,r]=Ce.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ce.getBuiltinModule(t)}return Fr(t)},{readdir:Ur,realpath:Xr,stat:Kt}=Gr("node:fs/promises"),zr=async t=>{const e=yt(t),r=sr(e),y=await Kt(e);return $t(y,r,e)};async function*Kr(t,e={}){const{extensions:r,followSymlinks:y=!1,includeDirs:p=!0,includeFiles:o=!0,includeSymlinks:a=!0,match:f,maxDepth:l=Number.POSITIVE_INFINITY,skip:A}=e;if(he(t),l<0)return;const g=e.visited??new Set,T=f?f.map(b=>typeof b=="string"?St(b):b):void 0,w=A?A.map(b=>typeof b=="string"?St(b):b):void 0;if(t=mt(ye(t)),p&&rt(t,r,T,w)&&(yield await zr(t)),!(l<1||!rt(t,void 0,void 0,w)))try{const b=await Ur(t,{withFileTypes:!0});for(const k of b){let X=Ut(t,k.name),K=k.isDirectory(),W=k.isFile();if(k.isSymbolicLink())if(y){const L=await Xr(X);if(g.has(L))continue;X=L;const h=await Kt(L);K=h.isDirectory(),W=h.isFile()}else if(a&&rt(X,r,T,w)){yield $t(k,k.name,X);continue}else continue;K?(y&&g.add(X),yield*Kr(X,{extensions:r,followSymlinks:y,includeDirs:p,includeFiles:o,includeSymlinks:a,match:T,maxDepth:l-1,skip:w,visited:g})):W&&o&&rt(X,r,T,w)&&(yield $t(k,k.name,X))}}catch(b){throw b instanceof _t?b:new _t(b,t)}}const Wr=C(import.meta.url),ke=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,jr=t=>{if(typeof ke<"u"&&ke.versions&&ke.versions.node){const[e,r]=ke.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return ke.getBuiltinModule(t)}return Wr(t)};jr("node:fs");const Qr=C(import.meta.url),Oe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,qr=t=>{if(typeof Oe<"u"&&Oe.versions&&Oe.versions.node){const[e,r]=Oe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Oe.getBuiltinModule(t)}return Qr(t)};qr("node:fs/promises");const Vr=C(import.meta.url),Ne=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Yr=t=>{if(typeof Ne<"u"&&Ne.versions&&Ne.versions.node){const[e,r]=Ne.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ne.getBuiltinModule(t)}return Vr(t)};Yr("node:fs");function Et(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Ct={},ut,kt;function ot(){if(kt)return ut;kt=1;const t="[^\\\\/]",e=Symbol("unignore"),r="\\.",y="\\+",p="\\?",o="\\/",a="(?=.)",f="[^/]",l=`(?:${o}|$)`,A=`(?:^|${o})`,g=`${r}{1,2}${l}`,T=`(?!${r})`,w=`(?!${A}${g})`,b=`(?!${r}{0,1}${l})`,k=`(?!${g})`,X=`[^.${o}]`,K=`${f}*?`,W="/",L={DOT_LITERAL:r,PLUS_LITERAL:y,QMARK_LITERAL:p,SLASH_LITERAL:o,ONE_CHAR:a,QMARK:f,END_ANCHOR:l,DOTS_SLASH:g,NO_DOT:T,NO_DOTS:w,NO_DOT_SLASH:b,NO_DOTS_SLASH:k,QMARK_NO_DOT:X,STAR:K,START_ANCHOR:A,SEP:W},h={...L,SLASH_LITERAL:"[\\\\/]",QMARK:t,STAR:`${t}*?`,DOTS_SLASH:`${r}{1,2}(?:[\\\\/]|$)`,NO_DOT:`(?!${r})`,NO_DOTS:`(?!(?:^|[\\\\/])${r}{1,2}(?:[\\\\/]|$))`,NO_DOT_SLASH:`(?!${r}{0,1}(?:[\\\\/]|$))`,NO_DOTS_SLASH:`(?!${r}{1,2}(?:[\\\\/]|$))`,QMARK_NO_DOT:"[^.\\\\/]",START_ANCHOR:"(?:^|[\\\\/])",END_ANCHOR:"(?:[\\\\/]|$)",SEP:"\\"},m={__proto__:null,alnum:"a-zA-Z0-9",alpha:"a-zA-Z",ascii:"\\x00-\\x7F",blank:" \\t",cntrl:"\\x00-\\x1F\\x7F",digit:"0-9",graph:"\\x21-\\x7E",lower:"a-z",print:"\\x20-\\x7E ",punct:"\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",space:" \\t\\r\\n\\v\\f",upper:"A-Z",word:"A-Za-z0-9_",xdigit:"A-Fa-f0-9"};return ut={DEFAULT_MAX_EXTGLOB_RECURSION:0,MAX_LENGTH:1024*64,POSIX_REGEX_SOURCE:m,UNIGNORE:e,REGEX_BACKSLASH:/\\(?![*+?^${}(|)[\]])/g,REGEX_NON_SPECIAL_CHARS:/^[^@![\].,$*+?^{}()|\\/]+/,REGEX_SPECIAL_CHARS:/[-*+?.^${}(|)[\]]/,REGEX_SPECIAL_CHARS_BACKREF:/(\\?)((\W)(\3*))/g,REGEX_SPECIAL_CHARS_GLOBAL:/([-*+?.^${}(|)[\]])/g,REGEX_REMOVE_BACKSLASH:/(?:\[.*?[^\\]\]|\\(?=.))/g,REPLACEMENTS:{__proto__:null,"***":"*","**/**":"**","**/**/**":"**"},CHAR_0:48,CHAR_9:57,CHAR_UPPERCASE_A:65,CHAR_LOWERCASE_A:97,CHAR_UPPERCASE_Z:90,CHAR_LOWERCASE_Z:122,CHAR_LEFT_PARENTHESES:40,CHAR_RIGHT_PARENTHESES:41,CHAR_ASTERISK:42,CHAR_AMPERSAND:38,CHAR_AT:64,CHAR_BACKWARD_SLASH:92,CHAR_CARRIAGE_RETURN:13,CHAR_CIRCUMFLEX_ACCENT:94,CHAR_COLON:58,CHAR_COMMA:44,CHAR_DOT:46,CHAR_DOUBLE_QUOTE:34,CHAR_EQUAL:61,CHAR_EXCLAMATION_MARK:33,CHAR_FORM_FEED:12,CHAR_FORWARD_SLASH:47,CHAR_GRAVE_ACCENT:96,CHAR_HASH:35,CHAR_HYPHEN_MINUS:45,CHAR_LEFT_ANGLE_BRACKET:60,CHAR_LEFT_CURLY_BRACE:123,CHAR_LEFT_SQUARE_BRACKET:91,CHAR_LINE_FEED:10,CHAR_NO_BREAK_SPACE:160,CHAR_PERCENT:37,CHAR_PLUS:43,CHAR_QUESTION_MARK:63,CHAR_RIGHT_ANGLE_BRACKET:62,CHAR_RIGHT_CURLY_BRACE:125,CHAR_RIGHT_SQUARE_BRACKET:93,CHAR_SEMICOLON:59,CHAR_SINGLE_QUOTE:39,CHAR_SPACE:32,CHAR_TAB:9,CHAR_UNDERSCORE:95,CHAR_VERTICAL_LINE:124,CHAR_ZERO_WIDTH_NOBREAK_SPACE:65279,extglobChars(s){return{"!":{type:"negate",open:"(?:(?!(?:",close:`))${s.STAR})`},"?":{type:"qmark",open:"(?:",close:")?"},"+":{type:"plus",open:"(?:",close:")+"},"*":{type:"star",open:"(?:",close:")*"},"@":{type:"at",open:"(?:",close:")"}}},globChars(s){return s===!0?h:L}},ut}var Ot;function st(){return Ot||(Ot=1,(function(t){const{REGEX_BACKSLASH:e,REGEX_REMOVE_BACKSLASH:r,REGEX_SPECIAL_CHARS:y,REGEX_SPECIAL_CHARS_GLOBAL:p}=ot();t.isObject=o=>o!==null&&typeof o=="object"&&!Array.isArray(o),t.hasRegexChars=o=>y.test(o),t.isRegexChar=o=>o.length===1&&t.hasRegexChars(o),t.escapeRegex=o=>o.replace(p,"\\$1"),t.toPosixSlashes=o=>o.replace(e,"/"),t.isWindows=()=>{if(typeof navigator<"u"&&navigator.platform){const o=navigator.platform.toLowerCase();return o==="win32"||o==="windows"}return process.platform?process.platform==="win32":!1},t.removeBackslashes=o=>o.replace(r,a=>a==="\\"?"":a),t.escapeLast=(o,a,f)=>{const l=o.lastIndexOf(a,f);return l===-1?o:o[l-1]==="\\"?t.escapeLast(o,a,l-1):`${o.slice(0,l)}\\${o.slice(l)}`},t.removePrefix=(o,a={})=>{let f=o;return f.startsWith("./")&&(f=f.slice(2),a.prefix="./"),f},t.wrapOutput=(o,a={},f={})=>{const l=f.contains?"":"^",A=f.contains?"":"$";let g=`${l}(?:${o})${A}`;return a.negated===!0&&(g=`(?:^(?!${g}).*$)`),g},t.basename=(o,{windows:a}={})=>{const f=o.split(a?/[\\/]/:"/"),l=f[f.length-1];return l===""?f[f.length-2]:l}})(Ct)),Ct}var at,Nt;function Zr(){if(Nt)return at;Nt=1;const t=st(),{CHAR_ASTERISK:e,CHAR_AT:r,CHAR_BACKWARD_SLASH:y,CHAR_COMMA:p,CHAR_DOT:o,CHAR_EXCLAMATION_MARK:a,CHAR_FORWARD_SLASH:f,CHAR_LEFT_CURLY_BRACE:l,CHAR_LEFT_PARENTHESES:A,CHAR_LEFT_SQUARE_BRACKET:g,CHAR_PLUS:T,CHAR_QUESTION_MARK:w,CHAR_RIGHT_CURLY_BRACE:b,CHAR_RIGHT_PARENTHESES:k,CHAR_RIGHT_SQUARE_BRACKET:X}=ot(),K=L=>L===f||L===y,W=L=>{L.isPrefix!==!0&&(L.depth=L.isGlobstar?1/0:1)};return at=(L,h)=>{const m=h||{},s=L.length-1,R=m.parts===!0||m.scanToEnd===!0,O=[],$=[],x=[];let v=L,j=-1,G=0,J=0,le=!1,ee=!1,U=!1,te=!1,pe=!1,se=!1,re=!1,P=!1,ne=!1,q=!1,ce=0,V,E,H={value:"",depth:0,isGlob:!1};const Q=()=>j>=s,u=()=>v.charCodeAt(j+1),I=()=>(V=E,v.charCodeAt(++j));for(;j<s;){E=I();let Y;if(E===y){re=H.backslashes=!0,E=I(),E===l&&(se=!0);continue}if(se===!0||E===l){for(ce++;Q()!==!0&&(E=I());){if(E===y){re=H.backslashes=!0,I();continue}if(E===l){ce++;continue}if(se!==!0&&E===o&&(E=I())===o){if(le=H.isBrace=!0,U=H.isGlob=!0,q=!0,R===!0)continue;break}if(se!==!0&&E===p){if(le=H.isBrace=!0,U=H.isGlob=!0,q=!0,R===!0)continue;break}if(E===b&&(ce--,ce===0)){se=!1,le=H.isBrace=!0,q=!0;break}}if(R===!0)continue;break}if(E===f){if(O.push(j),$.push(H),H={value:"",depth:0,isGlob:!1},q===!0)continue;if(V===o&&j===G+1){G+=2;continue}J=j+1;continue}if(m.noext!==!0&&(E===T||E===r||E===e||E===w||E===a)&&u()===A){if(U=H.isGlob=!0,te=H.isExtglob=!0,q=!0,E===a&&j===G&&(ne=!0),R===!0){for(;Q()!==!0&&(E=I());){if(E===y){re=H.backslashes=!0,E=I();continue}if(E===k){U=H.isGlob=!0,q=!0;break}}continue}break}if(E===e){if(V===e&&(pe=H.isGlobstar=!0),U=H.isGlob=!0,q=!0,R===!0)continue;break}if(E===w){if(U=H.isGlob=!0,q=!0,R===!0)continue;break}if(E===g){for(;Q()!==!0&&(Y=I());){if(Y===y){re=H.backslashes=!0,I();continue}if(Y===X){ee=H.isBracket=!0,U=H.isGlob=!0,q=!0;break}}if(R===!0)continue;break}if(m.nonegate!==!0&&E===a&&j===G){P=H.negated=!0,G++;continue}if(m.noparen!==!0&&E===A){if(U=H.isGlob=!0,R===!0){for(;Q()!==!0&&(E=I());){if(E===A){re=H.backslashes=!0,E=I();continue}if(E===k){q=!0;break}}continue}break}if(U===!0){if(q=!0,R===!0)continue;break}}m.noext===!0&&(te=!1,U=!1);let B=v,fe="",n="";G>0&&(fe=v.slice(0,G),v=v.slice(G),J-=G),B&&U===!0&&J>0?(B=v.slice(0,J),n=v.slice(J)):U===!0?(B="",n=v):B=v,B&&B!==""&&B!=="/"&&B!==v&&K(B.charCodeAt(B.length-1))&&(B=B.slice(0,-1)),m.unescape===!0&&(n&&(n=t.removeBackslashes(n)),B&&re===!0&&(B=t.removeBackslashes(B)));const i={prefix:fe,input:L,start:G,base:B,glob:n,isBrace:le,isBracket:ee,isGlob:U,isExtglob:te,isGlobstar:pe,negated:P,negatedExtglob:ne};if(m.tokens===!0&&(i.maxDepth=0,K(E)||$.push(H),i.tokens=$),m.parts===!0||m.tokens===!0){let Y;for(let N=0;N<O.length;N++){const oe=Y?Y+1:G,ie=O[N],Z=L.slice(oe,ie);m.tokens&&(N===0&&G!==0?($[N].isPrefix=!0,$[N].value=fe):$[N].value=Z,W($[N]),i.maxDepth+=$[N].depth),(N!==0||Z!=="")&&x.push(Z),Y=ie}if(Y&&Y+1<L.length){const N=L.slice(Y+1);x.push(N),m.tokens&&($[$.length-1].value=N,W($[$.length-1]),i.maxDepth+=$[$.length-1].depth)}i.slashes=O,i.parts=x}return i},at}var lt,Lt;function Jr(){if(Lt)return lt;Lt=1;const t=ot(),e=st(),{MAX_LENGTH:r,POSIX_REGEX_SOURCE:y,REGEX_NON_SPECIAL_CHARS:p,REGEX_SPECIAL_CHARS_BACKREF:o,REPLACEMENTS:a}=t,f=(h,m)=>typeof m.expandRange=="function"?m.expandRange(...h,m):(h.sort(),`[${h.join("-")}]`),l=(h,m)=>`Missing ${h}: "${m}" - use "\\\\${m}" to match literal characters`,A=h=>{const m=[];let s=0,R=0,O=0,$="",x=!1;for(const v of h){if(x===!0){$+=v,x=!1;continue}if(v==="\\"){$+=v,x=!0;continue}if(v==='"'){O=O===1?0:1,$+=v;continue}if(O===0){if(v==="[")s++;else if(v==="]"&&s>0)s--;else if(s===0){if(v==="(")R++;else if(v===")"&&R>0)R--;else if(v==="|"&&R===0){m.push($),$="";continue}}}$+=v}return m.push($),m},g=h=>{let m=!1;for(const s of h){if(m===!0){m=!1;continue}if(s==="\\"){m=!0;continue}if(/[?*+@!()[\]{}]/.test(s))return!1}return!0},T=h=>{let m=h.trim(),s=!0;for(;s===!0;)s=!1,/^@\([^\\()[\]{}|]+\)$/.test(m)&&(m=m.slice(2,-1),s=!0);if(g(m))return m.replace(/\\(.)/g,"$1")},w=h=>{const m=h.map(T).filter(Boolean);for(let s=0;s<m.length;s++)for(let R=s+1;R<m.length;R++){const O=m[s],$=m[R],x=O[0];if(!(!x||O!==x.repeat(O.length)||$!==x.repeat($.length))&&(O===$||O.startsWith($)||$.startsWith(O)))return!0}return!1},b=(h,m=!0)=>{if(h[0]!=="+"&&h[0]!=="*"||h[1]!=="(")return;let s=0,R=0,O=0,$=!1;for(let x=1;x<h.length;x++){const v=h[x];if($===!0){$=!1;continue}if(v==="\\"){$=!0;continue}if(v==='"'){O=O===1?0:1;continue}if(O!==1){if(v==="["){s++;continue}if(v==="]"&&s>0){s--;continue}if(!(s>0)){if(v==="("){R++;continue}if(v===")"&&(R--,R===0))return m===!0&&x!==h.length-1?void 0:{type:h[0],body:h.slice(2,x),end:x}}}}},k=h=>`${h.length===1?e.escapeRegex(h[0]):`[${h.map(m=>e.escapeRegex(m)).join("")}]`}*`,X=h=>{let m=0;const s=[];for(;m<h.length;){const R=b(h.slice(m),!1);if(!R||R.type!=="*")return;const O=A(R.body).map(x=>x.trim());if(O.length!==1)return;const $=T(O[0]);if(!$||$.length!==1)return;s.push($),m+=R.end+1}if(!(s.length<1))return s},K=h=>{let m=0,s=h.trim(),R=b(s);for(;R;)m++,s=R.body.trim(),R=b(s);return m},W=(h,m)=>{if(m.maxExtglobRecursion===!1)return{risky:!1};const s=typeof m.maxExtglobRecursion=="number"?m.maxExtglobRecursion:t.DEFAULT_MAX_EXTGLOB_RECURSION,R=A(h).map(v=>v.trim());if(R.length>1&&(R.some(v=>v==="")||R.some(v=>/^[*?]+$/.test(v))||w(R)))return{risky:!0};const O=[];let $=!1,x=!0;for(const v of R){const j=X(v);if(j){$=!0,O.push(...j);continue}const G=T(v);if(G&&G.length===1){O.push(G);continue}if(x=!1,K(v)>s)return{risky:!0}}return $?x?{risky:!0,safeOutput:k([...new Set(O)])}:{risky:!0}:{risky:!1}},L=(h,m)=>{if(typeof h!="string")throw new TypeError("Expected a string");h=a[h]||h;const s={...m},R=typeof s.maxLength=="number"?Math.min(r,s.maxLength):r;let O=h.length;if(O>R)throw new SyntaxError(`Input length: ${O}, exceeds maximum allowed length: ${R}`);const $={type:"bos",value:"",output:s.prepend||""},x=[$],v=s.capture?"":"?:",j=t.globChars(s.windows),G=t.extglobChars(j),{DOT_LITERAL:J,PLUS_LITERAL:le,SLASH_LITERAL:ee,ONE_CHAR:U,DOTS_SLASH:te,NO_DOT:pe,NO_DOT_SLASH:se,NO_DOTS_SLASH:re,QMARK:P,QMARK_NO_DOT:ne,STAR:q,START_ANCHOR:ce}=j,V=d=>`(${v}(?:(?!${ce}${d.dot?te:J}).)*?)`,E=s.dot?"":pe,H=s.dot?P:ne;let Q=s.bash===!0?V(s):q;s.capture&&(Q=`(${Q})`),typeof s.noext=="boolean"&&(s.noextglob=s.noext);const u={input:h,index:-1,start:0,dot:s.dot===!0,consumed:"",output:"",prefix:"",backtrack:!1,negated:!1,brackets:0,braces:0,parens:0,quotes:0,globstar:!1,tokens:x};h=e.removePrefix(h,u),O=h.length;const I=[],B=[],fe=[];let n=$,i;const Y=()=>u.index===O-1,N=u.peek=(d=1)=>h[u.index+d],oe=u.advance=()=>h[++u.index]||"",ie=()=>h.slice(u.index+1),Z=(d="",D=0)=>{u.consumed+=d,u.index+=D},Je=d=>{u.output+=d.output!=null?d.output:d.value,Z(d.value)},Jt=()=>{let d=1;for(;N()==="!"&&(N(2)!=="("||N(3)==="?");)oe(),u.start++,d++;return d%2===0?!1:(u.negated=!0,u.start++,!0)},et=d=>{u[d]++,fe.push(d)},de=d=>{u[d]--,fe.pop()},_=d=>{if(n.type==="globstar"){const D=u.braces>0&&(d.type==="comma"||d.type==="brace"),c=d.extglob===!0||I.length&&(d.type==="pipe"||d.type==="paren");d.type!=="slash"&&d.type!=="paren"&&!D&&!c&&(u.output=u.output.slice(0,-n.output.length),n.type="star",n.value="*",n.output=Q,u.output+=n.output)}if(I.length&&d.type!=="paren"&&(I[I.length-1].inner+=d.value),(d.value||d.output)&&Je(d),n&&n.type==="text"&&d.type==="text"){n.output=(n.output||n.value)+d.value,n.value+=d.value;return}d.prev=n,x.push(d),n=d},tt=(d,D)=>{const c={...G[D],conditions:1,inner:""};c.prev=n,c.parens=u.parens,c.output=u.output,c.startIndex=u.index,c.tokensIndex=x.length;const S=(s.capture?"(":"")+c.open;et("parens"),_({type:d,value:D,output:u.output?"":U}),_({type:"paren",extglob:!0,value:oe(),output:S}),I.push(c)},er=d=>{const D=h.slice(d.startIndex,u.index+1),c=h.slice(d.startIndex+2,u.index),S=W(c,s);if((d.type==="plus"||d.type==="star")&&S.risky){const M=S.safeOutput?(d.output?"":U)+(s.capture?`(${S.safeOutput})`:S.safeOutput):void 0,ue=x[d.tokensIndex];ue.type="text",ue.value=D,ue.output=M||e.escapeRegex(D);for(let ae=d.tokensIndex+1;ae<x.length;ae++)x[ae].value="",x[ae].output="",delete x[ae].suffix;u.output=d.output+ue.output,u.backtrack=!0,_({type:"paren",extglob:!0,value:i,output:""}),de("parens");return}let F=d.close+(s.capture?")":""),z;if(d.type==="negate"){let M=Q;if(d.inner&&d.inner.length>1&&d.inner.includes("/")&&(M=V(s)),(M!==Q||Y()||/^\)+$/.test(ie()))&&(F=d.close=`)$))${M}`),d.inner.includes("*")&&(z=ie())&&/^\.[^\\/.]+$/.test(z)){const ue=L(z,{...m,fastpaths:!1}).output;F=d.close=`)${ue})${M})`}d.prev.type==="bos"&&(u.negatedExtglob=!0)}_({type:"paren",extglob:!0,value:i,output:F}),de("parens")};if(s.fastpaths!==!1&&!/(^[*!]|[/()[\]{}"])/.test(h)){let d=!1,D=h.replace(o,(c,S,F,z,M,ue)=>z==="\\"?(d=!0,c):z==="?"?S?S+z+(M?P.repeat(M.length):""):ue===0?H+(M?P.repeat(M.length):""):P.repeat(F.length):z==="."?J.repeat(F.length):z==="*"?S?S+z+(M?Q:""):Q:S?c:`\\${c}`);return d===!0&&(s.unescape===!0?D=D.replace(/\\/g,""):D=D.replace(/\\+/g,c=>c.length%2===0?"\\\\":c?"\\":"")),D===h&&s.contains===!0?(u.output=h,u):(u.output=e.wrapOutput(D,u,m),u)}for(;!Y();){if(i=oe(),i==="\0")continue;if(i==="\\"){const c=N();if(c==="/"&&s.bash!==!0||c==="."||c===";")continue;if(!c){i+="\\",_({type:"text",value:i});continue}const S=/^\\+/.exec(ie());let F=0;if(S&&S[0].length>2&&(F=S[0].length,u.index+=F,F%2!==0&&(i+="\\")),s.unescape===!0?i=oe():i+=oe(),u.brackets===0){_({type:"text",value:i});continue}}if(u.brackets>0&&(i!=="]"||n.value==="["||n.value==="[^")){if(s.posix!==!1&&i===":"){const c=n.value.slice(1);if(c.includes("[")&&(n.posix=!0,c.includes(":"))){const S=n.value.lastIndexOf("["),F=n.value.slice(0,S),z=n.value.slice(S+2),M=y[z];if(M){n.value=F+M,u.backtrack=!0,oe(),!$.output&&x.indexOf(n)===1&&($.output=U);continue}}}(i==="["&&N()!==":"||i==="-"&&N()==="]")&&(i=`\\${i}`),i==="]"&&(n.value==="["||n.value==="[^")&&(i=`\\${i}`),s.posix===!0&&i==="!"&&n.value==="["&&(i="^"),n.value+=i,Je({value:i});continue}if(u.quotes===1&&i!=='"'){i=e.escapeRegex(i),n.value+=i,Je({value:i});continue}if(i==='"'){u.quotes=u.quotes===1?0:1,s.keepQuotes===!0&&_({type:"text",value:i});continue}if(i==="("){et("parens"),_({type:"paren",value:i});continue}if(i===")"){if(u.parens===0&&s.strictBrackets===!0)throw new SyntaxError(l("opening","("));const c=I[I.length-1];if(c&&u.parens===c.parens+1){er(I.pop());continue}_({type:"paren",value:i,output:u.parens?")":"\\)"}),de("parens");continue}if(i==="["){if(s.nobracket===!0||!ie().includes("]")){if(s.nobracket!==!0&&s.strictBrackets===!0)throw new SyntaxError(l("closing","]"));i=`\\${i}`}else et("brackets");_({type:"bracket",value:i});continue}if(i==="]"){if(s.nobracket===!0||n&&n.type==="bracket"&&n.value.length===1){_({type:"text",value:i,output:`\\${i}`});continue}if(u.brackets===0){if(s.strictBrackets===!0)throw new SyntaxError(l("opening","["));_({type:"text",value:i,output:`\\${i}`});continue}de("brackets");const c=n.value.slice(1);if(n.posix!==!0&&c[0]==="^"&&!c.includes("/")&&(i=`/${i}`),n.value+=i,Je({value:i}),s.literalBrackets===!1||e.hasRegexChars(c))continue;const S=e.escapeRegex(n.value);if(u.output=u.output.slice(0,-n.value.length),s.literalBrackets===!0){u.output+=S,n.value=S;continue}n.value=`(${v}${S}|${n.value})`,u.output+=n.value;continue}if(i==="{"&&s.nobrace!==!0){et("braces");const c={type:"brace",value:i,output:"(",outputIndex:u.output.length,tokensIndex:u.tokens.length};B.push(c),_(c);continue}if(i==="}"){const c=B[B.length-1];if(s.nobrace===!0||!c){_({type:"text",value:i,output:i});continue}let S=")";if(c.dots===!0){const F=x.slice(),z=[];for(let M=F.length-1;M>=0&&(x.pop(),F[M].type!=="brace");M--)F[M].type!=="dots"&&z.unshift(F[M].value);S=f(z,s),u.backtrack=!0}if(c.comma!==!0&&c.dots!==!0){const F=u.output.slice(0,c.outputIndex),z=u.tokens.slice(c.tokensIndex);c.value=c.output="\\{",i=S="\\}",u.output=F;for(const M of z)u.output+=M.output||M.value}_({type:"brace",value:i,output:S}),de("braces"),B.pop();continue}if(i==="|"){I.length>0&&I[I.length-1].conditions++,_({type:"text",value:i});continue}if(i===","){let c=i;const S=B[B.length-1];S&&fe[fe.length-1]==="braces"&&(S.comma=!0,c="|"),_({type:"comma",value:i,output:c});continue}if(i==="/"){if(n.type==="dot"&&u.index===u.start+1){u.start=u.index+1,u.consumed="",u.output="",x.pop(),n=$;continue}_({type:"slash",value:i,output:ee});continue}if(i==="."){if(u.braces>0&&n.type==="dot"){n.value==="."&&(n.output=J);const c=B[B.length-1];n.type="dots",n.output+=i,n.value+=i,c.dots=!0;continue}if(u.braces+u.parens===0&&n.type!=="bos"&&n.type!=="slash"){_({type:"text",value:i,output:J});continue}_({type:"dot",value:i,output:J});continue}if(i==="?"){if(!(n&&n.value==="(")&&s.noextglob!==!0&&N()==="("&&N(2)!=="?"){tt("qmark",i);continue}if(n&&n.type==="paren"){const c=N();let S=i;(n.value==="("&&!/[!=<:]/.test(c)||c==="<"&&!/<([!=]|\w+>)/.test(ie()))&&(S=`\\${i}`),_({type:"text",value:i,output:S});continue}if(s.dot!==!0&&(n.type==="slash"||n.type==="bos")){_({type:"qmark",value:i,output:ne});continue}_({type:"qmark",value:i,output:P});continue}if(i==="!"){if(s.noextglob!==!0&&N()==="("&&(N(2)!=="?"||!/[!=<:]/.test(N(3)))){tt("negate",i);continue}if(s.nonegate!==!0&&u.index===0){Jt();continue}}if(i==="+"){if(s.noextglob!==!0&&N()==="("&&N(2)!=="?"){tt("plus",i);continue}if(n&&n.value==="("||s.regex===!1){_({type:"plus",value:i,output:le});continue}if(n&&(n.type==="bracket"||n.type==="paren"||n.type==="brace")||u.parens>0){_({type:"plus",value:i});continue}_({type:"plus",value:le});continue}if(i==="@"){if(s.noextglob!==!0&&N()==="("&&N(2)!=="?"){_({type:"at",extglob:!0,value:i,output:""});continue}_({type:"text",value:i});continue}if(i!=="*"){(i==="$"||i==="^")&&(i=`\\${i}`);const c=p.exec(ie());c&&(i+=c[0],u.index+=c[0].length),_({type:"text",value:i});continue}if(n&&(n.type==="globstar"||n.star===!0)){n.type="star",n.star=!0,n.value+=i,n.output=Q,u.backtrack=!0,u.globstar=!0,Z(i);continue}let d=ie();if(s.noextglob!==!0&&/^\([^?]/.test(d)){tt("star",i);continue}if(n.type==="star"){if(s.noglobstar===!0){Z(i);continue}const c=n.prev,S=c.prev,F=c.type==="slash"||c.type==="bos",z=S&&(S.type==="star"||S.type==="globstar");if(s.bash===!0&&(!F||d[0]&&d[0]!=="/")){_({type:"star",value:i,output:""});continue}const M=u.braces>0&&(c.type==="comma"||c.type==="brace"),ue=I.length&&(c.type==="pipe"||c.type==="paren");if(!F&&c.type!=="paren"&&!M&&!ue){_({type:"star",value:i,output:""});continue}for(;d.slice(0,3)==="/**";){const ae=h[u.index+4];if(ae&&ae!=="/")break;d=d.slice(3),Z("/**",3)}if(c.type==="bos"&&Y()){n.type="globstar",n.value+=i,n.output=V(s),u.output=n.output,u.globstar=!0,Z(i);continue}if(c.type==="slash"&&c.prev.type!=="bos"&&!z&&Y()){u.output=u.output.slice(0,-(c.output+n.output).length),c.output=`(?:${c.output}`,n.type="globstar",n.output=V(s)+(s.strictSlashes?")":"|$)"),n.value+=i,u.globstar=!0,u.output+=c.output+n.output,Z(i);continue}if(c.type==="slash"&&c.prev.type!=="bos"&&d[0]==="/"){const ae=d[1]!==void 0?"|$":"";u.output=u.output.slice(0,-(c.output+n.output).length),c.output=`(?:${c.output}`,n.type="globstar",n.output=`${V(s)}${ee}|${ee}${ae})`,n.value+=i,u.output+=c.output+n.output,u.globstar=!0,Z(i+oe()),_({type:"slash",value:"/",output:""});continue}if(c.type==="bos"&&d[0]==="/"){n.type="globstar",n.value+=i,n.output=`(?:^|${ee}|${V(s)}${ee})`,u.output=n.output,u.globstar=!0,Z(i+oe()),_({type:"slash",value:"/",output:""});continue}if(M&&d[0]==="/"){n.type="globstar",n.value+=i,n.output=`(?:^|${ee}|${V(s)}${ee})`,u.output+=n.output,u.globstar=!0,Z(i+oe()),_({type:"slash",value:"/",output:""});continue}u.output=u.output.slice(0,-n.output.length),n.type="globstar",n.output=V(s),n.value+=i,u.output+=n.output,u.globstar=!0,Z(i);continue}const D={type:"star",value:i,output:Q};if(s.bash===!0){D.output=".*?",(n.type==="bos"||n.type==="slash")&&(D.output=E+D.output),_(D);continue}if(n&&(n.type==="bracket"||n.type==="paren")&&s.regex===!0){D.output=i,_(D);continue}(u.index===u.start||n.type==="slash"||n.type==="dot")&&(n.type==="dot"?(u.output+=se,n.output+=se):s.dot===!0?(u.output+=re,n.output+=re):(u.output+=E,n.output+=E),N()!=="*"&&(u.output+=U,n.output+=U)),_(D)}for(;u.brackets>0;){if(s.strictBrackets===!0)throw new SyntaxError(l("closing","]"));u.output=e.escapeLast(u.output,"["),de("brackets")}for(;u.parens>0;){if(s.strictBrackets===!0)throw new SyntaxError(l("closing",")"));u.output=e.escapeLast(u.output,"("),de("parens")}for(;u.braces>0;){if(s.strictBrackets===!0)throw new SyntaxError(l("closing","}"));u.output=e.escapeLast(u.output,"{"),de("braces")}if(s.strictSlashes!==!0&&(n.type==="star"||n.type==="bracket")&&_({type:"maybe_slash",value:"",output:`${ee}?`}),u.backtrack===!0){u.output="";for(const d of u.tokens)u.output+=d.output!=null?d.output:d.value,d.suffix&&(u.output+=d.suffix)}return u};return L.fastpaths=(h,m)=>{const s={...m},R=typeof s.maxLength=="number"?Math.min(r,s.maxLength):r,O=h.length;if(O>R)throw new SyntaxError(`Input length: ${O}, exceeds maximum allowed length: ${R}`);h=a[h]||h;const{DOT_LITERAL:$,SLASH_LITERAL:x,ONE_CHAR:v,DOTS_SLASH:j,NO_DOT:G,NO_DOTS:J,NO_DOTS_SLASH:le,STAR:ee,START_ANCHOR:U}=t.globChars(s.windows),te=s.dot?J:G,pe=s.dot?le:G,se=s.capture?"":"?:",re={negated:!1,prefix:""};let P=s.bash===!0?".*?":ee;s.capture&&(P=`(${P})`);const ne=E=>E.noglobstar===!0?P:`(${se}(?:(?!${U}${E.dot?j:$}).)*?)`,q=E=>{switch(E){case"*":return`${te}${v}${P}`;case".*":return`${$}${v}${P}`;case"*.*":return`${te}${P}${$}${v}${P}`;case"*/*":return`${te}${P}${x}${v}${pe}${P}`;case"**":return te+ne(s);case"**/*":return`(?:${te}${ne(s)}${x})?${pe}${v}${P}`;case"**/*.*":return`(?:${te}${ne(s)}${x})?${pe}${P}${$}${v}${P}`;case"**/.*":return`(?:${te}${ne(s)}${x})?${$}${v}${P}`;default:{const H=/^(.*?)\.(\w+)$/.exec(E);if(!H)return;const Q=q(H[1]);return Q?Q+$+H[2]:void 0}}},ce=e.removePrefix(h,re);let V=q(ce);return V&&s.strictSlashes!==!0&&(V+=`${x}?`),V},lt=L,lt}var pt,Ht;function eo(){if(Ht)return pt;Ht=1;const t=Zr(),e=Jr(),r=st(),y=ot(),p=a=>a&&typeof a=="object"&&!Array.isArray(a),o=(a,f,l=!1)=>{if(Array.isArray(a)){const K=a.map(W=>o(W,f,l));return W=>{for(const L of K){const h=L(W);if(h)return h}return!1}}const A=p(a)&&a.tokens&&a.input;if(a===""||typeof a!="string"&&!A)throw new TypeError("Expected pattern to be a non-empty string");const g=f||{},T=g.windows,w=A?o.compileRe(a,f):o.makeRe(a,f,!1,!0),b=w.state;delete w.state;let k=()=>!1;if(g.ignore){const K={...f,ignore:null,onMatch:null,onResult:null};k=o(g.ignore,K,l)}const X=(K,W=!1)=>{const{isMatch:L,match:h,output:m}=o.test(K,w,f,{glob:a,posix:T}),s={glob:a,state:b,regex:w,posix:T,input:K,output:m,match:h,isMatch:L};if(typeof g.onResult=="function"&&g.onResult(s),L===!1)return s.isMatch=!1,W?s:!1;e:if(k(K)){if(typeof g.onIgnore=="function"&&g.onIgnore(s)===y.UNIGNORE){s.isMatch=!0;break e}return s.isMatch=!1,W?s:!1}return typeof g.onMatch=="function"&&g.onMatch(s),W?s:!0};return l&&(X.state=b),X};return o.test=(a,f,l,{glob:A,posix:g}={})=>{if(typeof a!="string")throw new TypeError("Expected input to be a string");if(a==="")return{isMatch:!1,output:""};const T=l||{},w=T.format||(g?r.toPosixSlashes:null);let b=a===A,k=b&&w?w(a):a;return b===!1&&(k=w?w(a):a,b=k===A),(b===!1||T.capture===!0)&&(T.matchBase===!0||T.basename===!0?b=o.matchBase(a,f,l,g):b=f.exec(k)),{isMatch:!!b,match:b,output:k}},o.matchBase=(a,f,l,A=l&&l.windows)=>(f instanceof RegExp?f:o.makeRe(f,l)).test(r.basename(a,{windows:A})),o.isMatch=(a,f,l)=>o(f,l)(a),o.parse=(a,f)=>Array.isArray(a)?a.map(l=>o.parse(l,f)):e(a,{...f,fastpaths:!1}),o.scan=(a,f)=>t(a,f),o.compileRe=(a,f,l=!1,A=!1)=>{if(l===!0)return a.output;const g=f||{},T=g.contains?"":"^",w=g.contains?"":"$";let b=`${T}(?:${a.output})${w}`;a&&a.negated===!0&&(b=`^(?!${b}).*$`);const k=o.toRegex(b,f);return A===!0&&(k.state=a),k},o.makeRe=(a,f={},l=!1,A=!1)=>{if(!a||typeof a!="string")throw new TypeError("Expected a non-empty string");let g={negated:!1,fastpaths:!0};return f.fastpaths!==!1&&(a[0]==="."||a[0]==="*")&&(g.output=e.fastpaths(a,f)),g.output||(g=e(a,f)),o.compileRe(g,f,l,A)},o.toRegex=(a,f)=>{try{const l=f||{};return new RegExp(a,l.flags||(l.nocase?"i":""))}catch(l){if(f&&f.debug===!0)throw l;return/$^/}},o.constants=y,pt=o,pt}var ct,Mt;function to(){if(Mt)return ct;Mt=1;const t=eo(),e=st();function r(y,p,o=!1){return p&&(p.windows===null||p.windows===void 0)&&(p={...p,windows:e.isWindows()}),t(y,p,o)}return Object.assign(r,t),ct=r,ct}var ro=to();Et(ro);const oo=C(import.meta.url),Le=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Ze=t=>{if(typeof Le<"u"&&Le.versions&&Le.versions.node){const[e,r]=Le.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Le.getBuiltinModule(t)}return oo(t)};Ze("fs");Ze("fs");Ze("path");Ze("url");const{createRequire:so}=Ze("module");var Bt=so(import.meta.url);try{Bt.resolve("picomatch"),Bt("picomatch")}catch{}var ft,It;function no(){if(It)return ft;It=1;/*!
|
|
2
|
-
* is-extglob <https://github.com/jonschlinkert/is-extglob>
|
|
3
|
-
*
|
|
4
|
-
* Copyright (c) 2014-2016, Jon Schlinkert.
|
|
5
|
-
* Licensed under the MIT License.
|
|
6
|
-
*/return ft=function(t){if(typeof t!="string"||t==="")return!1;for(var e;e=/(\\).|([@?!+*]\(.*\))/g.exec(t);){if(e[2])return!0;t=t.slice(e.index+e[0].length)}return!1},ft}var dt,Dt;function Wt(){if(Dt)return dt;Dt=1;/*!
|
|
7
|
-
* is-glob <https://github.com/jonschlinkert/is-glob>
|
|
8
|
-
*
|
|
9
|
-
* Copyright (c) 2014-2017, Jon Schlinkert.
|
|
10
|
-
* Released under the MIT License.
|
|
11
|
-
*/var t=no(),e={"{":"}","(":")","[":"]"},r=function(p){if(p[0]==="!")return!0;for(var o=0,a=-2,f=-2,l=-2,A=-2,g=-2;o<p.length;){if(p[o]==="*"||p[o+1]==="?"&&/[\].+)]/.test(p[o])||f!==-1&&p[o]==="["&&p[o+1]!=="]"&&(f<o&&(f=p.indexOf("]",o)),f>o&&(g===-1||g>f||(g=p.indexOf("\\",o),g===-1||g>f)))||l!==-1&&p[o]==="{"&&p[o+1]!=="}"&&(l=p.indexOf("}",o),l>o&&(g=p.indexOf("\\",o),g===-1||g>l))||A!==-1&&p[o]==="("&&p[o+1]==="?"&&/[:!=]/.test(p[o+2])&&p[o+3]!==")"&&(A=p.indexOf(")",o),A>o&&(g=p.indexOf("\\",o),g===-1||g>A))||a!==-1&&p[o]==="("&&p[o+1]!=="|"&&(a<o&&(a=p.indexOf("|",o)),a!==-1&&p[a+1]!==")"&&(A=p.indexOf(")",a),A>a&&(g=p.indexOf("\\",a),g===-1||g>A))))return!0;if(p[o]==="\\"){var T=p[o+1];o+=2;var w=e[T];if(w){var b=p.indexOf(w,o);b!==-1&&(o=b+1)}if(p[o]==="!")return!0}else o++}return!1},y=function(p){if(p[0]==="!")return!0;for(var o=0;o<p.length;){if(/[*?{}()[\]]/.test(p[o]))return!0;if(p[o]==="\\"){var a=p[o+1];o+=2;var f=e[a];if(f){var l=p.indexOf(f,o);l!==-1&&(o=l+1)}if(p[o]==="!")return!0}else o++}return!1};return dt=function(p,o){if(typeof p!="string"||p==="")return!1;if(t(p))return!0;var a=r;return o&&o.strict===!1&&(a=y),a(p)},dt}const io=C(import.meta.url),He=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,jt=t=>{if(typeof He<"u"&&He.versions&&He.versions.node){const[e,r]=He.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return He.getBuiltinModule(t)}return io(t)},uo=jt("path"),ao=jt("os");var gt,Pt;function lo(){if(Pt)return gt;Pt=1;var t=Wt(),e=uo.posix.dirname,r=ao.platform()==="win32",y="/",p=/\\/g,o=/\\([!*?|[\](){}])/g;gt=function(l,A){var g=Object.assign({flipBackslashes:!0},A);g.flipBackslashes&&r&&l.indexOf(y)<0&&(l=l.replace(p,y)),a(l)&&(l+=y),l+="a";do l=e(l);while(f(l));return l.replace(o,"$1")};function a(l){var A=l.slice(-1),g;switch(A){case"}":g="{";break;case"]":g="[";break;default:return!1}var T=l.indexOf(g);return T<0?!1:l.slice(T+1,-1).includes(y)}function f(l){return/\([^()]+$/.test(l)||l[0]==="{"||l[0]==="["||/[^\\][{[]/.test(l)?!0:t(l)}return gt}var po=lo();Et(po);const co=C(import.meta.url),Me=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,fo=t=>{if(typeof Me<"u"&&Me.versions&&Me.versions.node){const[e,r]=Me.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Me.getBuiltinModule(t)}return co(t)},{access:go}=fo("node:fs/promises");async function vt(t,e=Xt){he(t),t=ye(t);try{return await go(t,e),!0}catch{return!1}}const ho=C(import.meta.url),Be=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,mo=t=>{if(typeof Be<"u"&&Be.versions&&Be.versions.node){const[e,r]=Be.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Be.getBuiltinModule(t)}return ho(t)};mo("node:fs");var yo=Wt();Et(yo);const bo=C(import.meta.url),me=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Qt=t=>{if(typeof me<"u"&&me.versions&&me.versions.node){const[e,r]=me.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return me.getBuiltinModule(t)}return bo(t)},{cwd:$o}=me,{mkdir:vo,rename:Eo,copyFile:Ao,unlink:Ro}=Qt("node:fs/promises");Qt("node:fs");class To extends Error{constructor(e,r){super(`Source directory "${ge(e)}" does not match destination directory "${ge(r)}"`),this.name="SameDirectoryError"}}const xo=(t,e)=>{if(!t||!e)throw new Error("Source and destination paths must not be empty");if(ge(t)!==ge(e))throw new To(t,e)},wo=async(t,e,{cwd:r,directoryMode:y,overwrite:p,validateDirectory:o})=>{if(r&&(t=mt(r,t),e=mt(r,e)),o&&xo(t,e),!p&&await vt(e))throw new Error(`The destination file exists: ${e}`);await vo(ge(e),{mode:y,recursive:!0});try{await Eo(t,e)}catch(a){if(a.code==="EXDEV")await Ao(t,e),await Ro(t);else throw a}},Is=async(t,e,r={})=>{const y={overwrite:!0,validateDirectory:!1,...r,cwd:r.cwd?ye(r.cwd):$o()};await wo(t,e,y)};let _o=class extends Error{constructor(e){super(`ENOENT: ${e}`)}get code(){return"ENOENT"}set code(e){throw new Error("Cannot overwrite code ENOENT")}get name(){return"NotFoundError"}set name(e){throw new Error("Cannot overwrite name of NotFoundError")}},So=class extends Error{constructor(e){super(`EPERM: Operation not permitted, ${e}`)}get code(){return"EPERM"}set code(e){throw new Error("Cannot overwrite code EPERM")}get name(){return"PermissionError"}set name(e){throw new Error("Cannot overwrite name of PermissionError")}};const Co=(t,e)=>{const r=t?.code;return r==="ENOENT"?new _o(`no such file or directory, open '${e}'`):r==="EACCES"||r==="EPERM"?new So(`unable to read the non-readable file: ${e}`):t},ko=C(import.meta.url),Ie=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,qt=t=>{if(typeof Ie<"u"&&Ie.versions&&Ie.versions.node){const[e,r]=Ie.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ie.getBuiltinModule(t)}return ko(t)},{readFile:Oo}=qt("node:fs/promises"),{unzip:No,brotliDecompress:Lo}=qt("node:zlib"),Ho={brotli:Lo,gzip:No,none:(t,e)=>{e(null,t)}},Mo=async(t,e)=>{he(t),t=ye(t);const{buffer:r,compression:y,encoding:p,flag:o}=e??{};let a;try{a=await Oo(t,o?{flag:o}:{})}catch(f){throw Co(f,t)}return await new Promise((f,l)=>{Ho[y??"none"](a,(A,g)=>{A?l(A):f(r?g:g.toString(p??"utf8"))})})},Bo=C(import.meta.url),De=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Vt=t=>{if(typeof De<"u"&&De.versions&&De.versions.node){const[e,r]=De.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return De.getBuiltinModule(t)}return Bo(t)};Vt("node:fs");Vt("node:zlib");const Io=C(import.meta.url),Pe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Do=t=>{if(typeof Pe<"u"&&Pe.versions&&Pe.versions.node){const[e,r]=Pe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Pe.getBuiltinModule(t)}return Io(t)},{createRequire:Yt}=Do("node:module"),Po=new Map([["Error",Error],["EvalError",EvalError],["RangeError",RangeError],["ReferenceError",ReferenceError],["SyntaxError",SyntaxError],["TypeError",TypeError],["URIError",URIError]]);typeof AggregateError<"u"&&Po.set("AggregateError",AggregateError);const Fo=Yt(import.meta.url),Fe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Go=t=>{if(typeof Fe<"u"&&Fe.versions&&Fe.versions.node){const[e,r]=Fe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Fe.getBuiltinModule(t)}return Fo(t)};Go("node:util");const Uo=Yt(import.meta.url),Ge=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,At=t=>{if(typeof Ge<"u"&&Ge.versions&&Ge.versions.node){const[e,r]=Ge.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ge.getBuiltinModule(t)}return Uo(t)};At("node:fs");At("node:path");At("node:url");const Xo=t=>{const e={force:!0,recursive:!0};return t?.maxRetries!==void 0&&(e.maxRetries=t.maxRetries),t?.retryDelay!==void 0&&(e.retryDelay=t.retryDelay),e},zo=C(import.meta.url),Ue=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Zt=t=>{if(typeof Ue<"u"&&Ue.versions&&Ue.versions.node){const[e,r]=Ue.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ue.getBuiltinModule(t)}return zo(t)};Zt("node:fs");Zt("node:fs/promises");const Ko=C(import.meta.url),Xe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Wo=t=>{if(typeof Xe<"u"&&Xe.versions&&Xe.versions.node){const[e,r]=Xe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Xe.getBuiltinModule(t)}return Ko(t)};Wo("node:fs");const jo=C(import.meta.url),ze=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Qo=t=>{if(typeof ze<"u"&&ze.versions&&ze.versions.node){const[e,r]=ze.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return ze.getBuiltinModule(t)}return jo(t)},{rm:qo}=Qo("node:fs/promises"),Vo=async(t,e={})=>{he(t),await qo(t,Xo(e))},Yo=C(import.meta.url),Ke=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Zo=t=>{if(typeof Ke<"u"&&Ke.versions&&Ke.versions.node){const[e,r]=Ke.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ke.getBuiltinModule(t)}return Yo(t)};Zo("node:fs");C(import.meta.url);const Jo=t=>{if(typeof t!="string"&&!(t instanceof ArrayBuffer)&&!ArrayBuffer.isView(t))throw new TypeError("File contents must be a string, ArrayBuffer, or ArrayBuffer view.")},es=C(import.meta.url),We=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ts=t=>{if(typeof We<"u"&&We.versions&&We.versions.node){const[e,r]=We.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return We.getBuiltinModule(t)}return es(t)},{randomBytes:rs}=ts("node:crypto"),os=t=>`${t}.${process.pid.toString(36)}.${rs(6).toString("hex")}.tmp`,ss=new TextEncoder,ns=t=>{if(t instanceof Uint8Array)return t;if(typeof t=="string")return ss.encode(t);if(t instanceof ArrayBuffer)return new Uint8Array(t);if(ArrayBuffer.isView(t)){const e=t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength);return new Uint8Array(e)}throw new TypeError("Invalid contents type. Expected string or ArrayBuffer.")},is=C(import.meta.url),je=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,us=t=>{if(typeof je<"u"&&je.versions&&je.versions.node){const[e,r]=je.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return je.getBuiltinModule(t)}return is(t)},{mkdir:as,writeFile:ls,stat:ps,rename:Ft,chown:cs,chmod:fs,unlink:ds}=us("node:fs/promises"),gs=async(t,e,r)=>{r={backup:!1,encoding:"utf8",flag:"w",overwrite:!0,recursive:!0,...r},he(t),Jo(e),t=ye(t);const y=await vt(t,Xt);if(y&&!r.overwrite)throw new hr(`file already exists, open '${t}'`);const p=os(t);try{!y&&r.recursive&&await as(ge(t),{recursive:!0});let o;if(await ls(p,typeof e=="string"?Buffer.from(e,r.encoding??"utf8"):ns(e),{flag:"wx"}),y&&r.backup&&(o=await ps(t),r.chown??={gid:o.gid,uid:o.uid},await Ft(t,`${t}.bak`)),r.chown)try{await cs(p,r.chown.uid,r.chown.gid)}catch{}await fs(p,o&&!r.mode?o.mode:r.mode??438),await Ft(p,t)}catch(o){throw new Error(`Failed to write file at: ${t} - ${o.message}`,{cause:o})}finally{await vt(p)&&await ds(p)}},hs=C(import.meta.url),Qe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,ms=t=>{if(typeof Qe<"u"&&Qe.versions&&Qe.versions.node){const[e,r]=Qe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Qe.getBuiltinModule(t)}return hs(t)};ms("node:fs");const ys=C(import.meta.url),qe=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,bs=t=>{if(typeof qe<"u"&&qe.versions&&qe.versions.node){const[e,r]=qe.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return qe.getBuiltinModule(t)}return ys(t)};bs("node:fs/promises");const $s=C(import.meta.url),Ve=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,vs=t=>{if(typeof Ve<"u"&&Ve.versions&&Ve.versions.node){const[e,r]=Ve.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ve.getBuiltinModule(t)}return $s(t)};vs("node:fs");const Es=C(import.meta.url),Ye=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,Rt=t=>{if(typeof Ye<"u"&&Ye.versions&&Ye.versions.node){const[e,r]=Ye.versions.node.split(".").map(Number);if(e>22||e===22&&r>=3||e===20&&r>=16)return Ye.getBuiltinModule(t)}return Es(t)},As=Rt("fs"),Rs=Rt("os"),Ts=Rt("path");var ht={},Gt;function xs(){if(Gt)return ht;Gt=1;var t=Object.defineProperty,e=(g,T)=>t(g,"name",{value:T,configurable:!0}),r=As,y=Rs,p=Ts;const o=e(g=>{let T="";for(let w=0;w<g.length;w+=1){const b=g[w],k=b.toUpperCase();T+=b===k?b.toLowerCase():k}return T},"invertCase"),a=new Map,f=e((g,T)=>{const w=p.join(g,`.is-fs-case-sensitive-test-${process.pid}`);try{return T.writeFileSync(w,""),!T.existsSync(o(w))}finally{try{T.unlinkSync(w)}catch{}}},"checkDirectoryCaseWithWrite"),l=e((g,T,w)=>{try{return f(g,w)}catch(b){if(T===void 0)return f(y.tmpdir(),w);throw b}},"checkDirectoryCaseWithFallback"),A=e((g,T=r,w=!0)=>{const b=g??process.cwd();if(w&&a.has(b))return a.get(b);let k;const X=o(b);return X!==b&&T.existsSync(b)?k=!T.existsSync(X):k=l(b,g,T),w&&a.set(b,k),k},"isFsCaseSensitive");return ht.isFsCaseSensitive=A,ht}xs();class Fs extends nr{directory;constructor(e){super(e),this.directory=yt(e?.directory||Ut(rr(),"Upload_meta")),this.accessCheck().catch(r=>{this.logger?.error("Metadata storage access check failed: %O",r)})}getMetaPath=e=>{const r=yt(`${this.directory}/${this.prefix}${e}${this.suffix}`),y=this.directory.endsWith("/")?this.directory:`${this.directory}/`;return r.startsWith(y)?r:nt(it.INVALID_FILE_NAME,`Invalid id: "${e}" resolves outside the meta directory`)};getIdFromPath=e=>e.slice(`${this.directory}/${this.prefix}`.length,-this.suffix.length);async save(e,r){await this.accessCheck();const y={...r};return y.metadata&&(y.metadata=ir(r.metadata)),await gs(this.getMetaPath(e),JSON.stringify(y),{recursive:!0}),r}async touch(e,r){const y=new Date;return await tr(this.getMetaPath(e),y,y),r}async get(e){try{const r=await Mo(this.getMetaPath(e));if(r===void 0)throw nt(it.FILE_NOT_FOUND);const y=JSON.parse(r);return y.metadata&&typeof y.metadata=="string"&&(y.metadata=ur(y.metadata)),y}catch(r){const y=r,p=r instanceof SyntaxError;throw y.code==="ENOENT"||p?nt(it.FILE_NOT_FOUND):r}}async delete(e){await Vo(this.getMetaPath(e))}async accessCheck(){await zt(this.directory)}}export{Is as V,Hs as d,zt as f,Vo as l,Kr as x,Fs as y,Mo as z};
|
|
@@ -1,331 +0,0 @@
|
|
|
1
|
-
import { F as File, g as FileReturn, B as BaseStorage } from "./storage.d-CEM1upWM.js";
|
|
2
|
-
import { M as MediaTransformerConfig, a as MediaTransformResult } from "./types.d-CrUWY4On.js";
|
|
3
|
-
/**
|
|
4
|
-
* Unified media transformer that automatically detects media type and routes to appropriate transformer.
|
|
5
|
-
* @template TFile The file type used by this transformer.
|
|
6
|
-
* @template TFileReturn The return type for file retrieval operations.
|
|
7
|
-
*
|
|
8
|
-
* Supports transformations via query parameters for on-demand media processing across all supported formats.
|
|
9
|
-
* @example
|
|
10
|
-
* // eslint-disable-next-line jsdoc/match-description
|
|
11
|
-
* ```ts
|
|
12
|
-
* const transformer = new MediaTransformer(storage, {
|
|
13
|
-
* maxImageSize: 10 * 1024 * 1024, // 10MB
|
|
14
|
-
* maxVideoSize: 100 * 1024 * 1024, // 100MB
|
|
15
|
-
* maxAudioSize: 50 * 1024 * 1024, // 50MB
|
|
16
|
-
* cache: new MapCache(), // In-memory caching
|
|
17
|
-
* saveTransformedFiles: true // Persist transformed files to storage
|
|
18
|
-
* });
|
|
19
|
-
*
|
|
20
|
-
* // Handle transformation via query parameters
|
|
21
|
-
* const result = await transformer.handle('file-id', {
|
|
22
|
-
* width: 800,
|
|
23
|
-
* height: 600,
|
|
24
|
-
* fit: 'cover',
|
|
25
|
-
* format: 'webp',
|
|
26
|
-
* quality: 80
|
|
27
|
-
* });
|
|
28
|
-
*
|
|
29
|
-
* // Fetch with URL query string
|
|
30
|
-
* const result = await transformer.fetch('file-id', 'width=1280&height=720&codec=avc&bitrate=2000000');
|
|
31
|
-
*
|
|
32
|
-
* // Clear all cached transformed files
|
|
33
|
-
* transformer.clearSavedTransformedFiles();
|
|
34
|
-
* ```
|
|
35
|
-
*
|
|
36
|
-
* ## Configuration Options
|
|
37
|
-
*
|
|
38
|
-
* - `saveTransformedFiles`: Persist transformed files to storage for reuse (default: false)
|
|
39
|
-
* - `cache`: Cache instance for in-memory caching (optional)
|
|
40
|
-
* - `maxImageSize/maxVideoSize/maxAudioSize`: Size limits for processing
|
|
41
|
-
* - `cacheTtl`: Cache time-to-live in seconds
|
|
42
|
-
*
|
|
43
|
-
* ## Supported Query Parameters
|
|
44
|
-
*
|
|
45
|
-
* ### Common Parameters
|
|
46
|
-
* - `format`: Output format (jpeg/png/webp/avif/mp4/webm/mkv/mp3/wav/ogg/aac/flac)
|
|
47
|
-
* - `quality`: Quality for images (0-100), bitrate for video/audio
|
|
48
|
-
*
|
|
49
|
-
* ### Image Parameters
|
|
50
|
-
* - `width`: Width in pixels
|
|
51
|
-
* - `height`: Height in pixels
|
|
52
|
-
* - `fit`: Resize fit mode - cover/contain/fill/inside/outside
|
|
53
|
-
* - `position`: Position for cover/contain fits
|
|
54
|
-
* - `withoutEnlargement`: Avoid enlarging smaller images (boolean)
|
|
55
|
-
* - `withoutReduction`: Avoid reducing larger images (boolean)
|
|
56
|
-
* - `kernel`: Resize kernel - nearest/cubic/mitchell/lanczos2/lanczos3
|
|
57
|
-
* - `fastShrinkOnLoad`: Fast shrink on load (boolean)
|
|
58
|
-
* - `left/top/cropWidth/cropHeight`: Crop parameters
|
|
59
|
-
* - `angle`: Rotation angle in degrees (any number, but angles other than 90°/180°/270° use interpolation and may affect quality)
|
|
60
|
-
* - `background`: Background color for rotation
|
|
61
|
-
* - `blur`: Apply blur effect (boolean)
|
|
62
|
-
* - `sharpen`: Apply sharpening (boolean)
|
|
63
|
-
* - `median`: Apply median filter with size (number)
|
|
64
|
-
* // eslint-disable-next-line jsdoc/match-description
|
|
65
|
-
* - `clahe`: Apply CLAHE (Contrast Limited Adaptive Histogram Equalization) (boolean)
|
|
66
|
-
* - `threshold`: Apply thresholding with value (0-255)
|
|
67
|
-
* - `gamma`: Apply gamma correction (boolean)
|
|
68
|
-
* - `negate`: Negate (invert) the image (boolean)
|
|
69
|
-
* - `normalise/normalize`: Normalise the image (boolean)
|
|
70
|
-
* - `flatten`: Flatten alpha channel (boolean)
|
|
71
|
-
* - `unflatten`: Unflatten alpha channel (boolean)
|
|
72
|
-
* - `flip`: Flip image vertically (boolean)
|
|
73
|
-
* - `flop`: Flop image horizontally (boolean)
|
|
74
|
-
* - `greyscale/grayscale`: Convert to greyscale (boolean)
|
|
75
|
-
* - `modulate`: Apply modulation effects (boolean)
|
|
76
|
-
* - `brightness`: Brightness multiplier for modulation (number)
|
|
77
|
-
* - `saturation`: Saturation multiplier for modulation (number)
|
|
78
|
-
* - `hue`: Hue rotation in degrees for modulation (number)
|
|
79
|
-
* // eslint-disable-next-line jsdoc/match-description
|
|
80
|
-
* - `lightness`: Lightness adjustment for modulation (number)
|
|
81
|
-
* - `tint`: Apply tinting (boolean)
|
|
82
|
-
* - `colourspace`: Convert colourspace - srgb/rgb/cmyk/lab/b-w
|
|
83
|
-
*
|
|
84
|
-
* ### Video Parameters
|
|
85
|
-
* - `width/height/fit`: Same as images
|
|
86
|
-
* - `codec`: Video codec - avc/hevc/vp8/vp9/av1
|
|
87
|
-
* - `bitrate`: Video bitrate in bits per second
|
|
88
|
-
* - `frameRate`: Frame rate in Hz
|
|
89
|
-
* - `keyFrameInterval`: Key frame interval in seconds
|
|
90
|
-
* - `angle`: Rotation angle in degrees (any number, but angles other than 90°/180°/270° use interpolation and may affect quality)
|
|
91
|
-
* - `background`: Background color for rotation
|
|
92
|
-
*
|
|
93
|
-
* ### Audio Parameters
|
|
94
|
-
* - `sampleRate`: Sample rate in Hz
|
|
95
|
-
* - `numberOfChannels`: Number of channels
|
|
96
|
-
* - `codec`: Audio codec - aac/opus/mp3/vorbis/flac
|
|
97
|
-
* - `bitrate`: Audio bitrate in bits per second
|
|
98
|
-
*
|
|
99
|
-
* ## File Persistence
|
|
100
|
-
*
|
|
101
|
-
* When `saveTransformedFiles` is enabled, transformed files are automatically saved to storage
|
|
102
|
-
* with deterministic IDs based on the original file and transformation parameters. Subsequent
|
|
103
|
-
* requests for the same transformation will serve the cached file directly, improving performance
|
|
104
|
-
* and reducing processing costs.
|
|
105
|
-
*/
|
|
106
|
-
declare class MediaTransformer<TFile extends File = File, TFileReturn extends FileReturn = FileReturn> {
|
|
107
|
-
private readonly storage;
|
|
108
|
-
private readonly imageTransformer?;
|
|
109
|
-
private readonly videoTransformer?;
|
|
110
|
-
private readonly audioTransformer?;
|
|
111
|
-
private readonly config;
|
|
112
|
-
private readonly logger;
|
|
113
|
-
/**
|
|
114
|
-
* Creates a new MediaTransformer instance.
|
|
115
|
-
* @param storage The storage backend for retrieving and storing media files.
|
|
116
|
-
* @param config Configuration options for the media transformer including transformer classes and settings.
|
|
117
|
-
* @throws Error if no transformer classes are provided in the configuration.
|
|
118
|
-
*/
|
|
119
|
-
constructor(storage: BaseStorage<TFile, TFileReturn>, config?: MediaTransformerConfig<TFile, TFileReturn>);
|
|
120
|
-
supportedFormats(): string[];
|
|
121
|
-
/**
|
|
122
|
-
* Handles media transformation based on query parameters.
|
|
123
|
-
* @param fileId File identifier.
|
|
124
|
-
* @param query Query parameters for transformation.
|
|
125
|
-
* @returns Unified transformation result.
|
|
126
|
-
*/
|
|
127
|
-
handle(fileId: string, query: Record<string, string | undefined> | URLSearchParams | string): Promise<MediaTransformResult>;
|
|
128
|
-
/**
|
|
129
|
-
* Fetches media transformation with URL query string support.
|
|
130
|
-
* @param fileId File identifier.
|
|
131
|
-
* @param queryString URL query string (e.g., "width=800&height=600&format=webp").
|
|
132
|
-
* @returns Unified transformation result.
|
|
133
|
-
*/
|
|
134
|
-
fetch(fileId: string, queryString: string): Promise<MediaTransformResult>;
|
|
135
|
-
/**
|
|
136
|
-
* Clears cache for a specific file across all transformers.
|
|
137
|
-
* @param fileId Optional file identifier to clear cache for. If omitted, clears all cache.
|
|
138
|
-
*/
|
|
139
|
-
clearCache(fileId?: string): void;
|
|
140
|
-
/**
|
|
141
|
-
* Clears all saved transformed files from storage.
|
|
142
|
-
* @remarks This is a maintenance operation and may take time for large numbers of files.
|
|
143
|
-
*/
|
|
144
|
-
clearSavedTransformedFiles(): Promise<void>;
|
|
145
|
-
/**
|
|
146
|
-
* Clears saved transformed files for a specific original file.
|
|
147
|
-
* @param originalFileId Original file identifier to clear transformed files for.
|
|
148
|
-
*/
|
|
149
|
-
clearSavedTransformedFilesForFile(originalFileId: string): Promise<void>;
|
|
150
|
-
/**
|
|
151
|
-
* Gets cache statistics (combined from all transformers).
|
|
152
|
-
* @returns Cache statistics for audio, image, and video transformers.
|
|
153
|
-
*/
|
|
154
|
-
getCacheStats(): {
|
|
155
|
-
audio?: {
|
|
156
|
-
maxSize: number;
|
|
157
|
-
size: number;
|
|
158
|
-
};
|
|
159
|
-
image?: {
|
|
160
|
-
maxSize: number;
|
|
161
|
-
size: number;
|
|
162
|
-
};
|
|
163
|
-
video?: {
|
|
164
|
-
maxSize: number;
|
|
165
|
-
size: number;
|
|
166
|
-
};
|
|
167
|
-
};
|
|
168
|
-
/**
|
|
169
|
-
* Validates query parameters for the given media type.
|
|
170
|
-
* @param query The query parameters to validate.
|
|
171
|
-
* @param mediaType The media type being validated ('image', 'video', or 'audio').
|
|
172
|
-
* @throws {ValidationError} When invalid parameters are provided.
|
|
173
|
-
*/
|
|
174
|
-
private validateQueryParameters;
|
|
175
|
-
/**
|
|
176
|
-
* Validates query parameters for image transformations. Checks for invalid video/audio-only parameters, invalid fit values, invalid rotation angles, invalid formats, and incomplete crop parameter sets.
|
|
177
|
-
* @param query Query parameters to validate.
|
|
178
|
-
* @throws {ValidationError} When validation fails.
|
|
179
|
-
*/
|
|
180
|
-
private validateImageQueryParameters;
|
|
181
|
-
/**
|
|
182
|
-
* Validates query parameters for video transformations. Checks for invalid audio-only parameters, invalid fit values, invalid rotation angles, invalid codecs, invalid formats, incomplete crop parameter sets, and invalid numeric values.
|
|
183
|
-
* @param query Query parameters to validate.
|
|
184
|
-
* @throws {ValidationError} When validation fails.
|
|
185
|
-
*/
|
|
186
|
-
private validateVideoQueryParameters;
|
|
187
|
-
/**
|
|
188
|
-
* Generates a unique ID for transformed files based on original file and transformations.
|
|
189
|
-
* @param originalFileId The original file identifier.
|
|
190
|
-
* @param query The transformation query parameters.
|
|
191
|
-
* @param mediaType The media type (image, video, audio).
|
|
192
|
-
* @returns Unique deterministic identifier for the transformed file.
|
|
193
|
-
* @private
|
|
194
|
-
*/
|
|
195
|
-
private generateTransformedFileId;
|
|
196
|
-
/**
|
|
197
|
-
* Checks if the query contains any transformations.
|
|
198
|
-
* @param query The transformation query parameters.
|
|
199
|
-
* @returns True if any transformations are requested.
|
|
200
|
-
* @private
|
|
201
|
-
*/
|
|
202
|
-
private hasTransformations;
|
|
203
|
-
/**
|
|
204
|
-
* Creates a MediaTransformResult from a stored transformed file.
|
|
205
|
-
* @param storedFile The stored transformed file.
|
|
206
|
-
* @param mediaType The media type (image, video, audio).
|
|
207
|
-
* @param originalFile The original file information.
|
|
208
|
-
* @returns Media transformation result with metadata.
|
|
209
|
-
* @private
|
|
210
|
-
*/
|
|
211
|
-
private createMediaTransformResult;
|
|
212
|
-
/**
|
|
213
|
-
* Extracts format from content type.
|
|
214
|
-
* @param contentType MIME content type string.
|
|
215
|
-
* @returns Format string extracted from content type.
|
|
216
|
-
* @private
|
|
217
|
-
*/
|
|
218
|
-
private getFormatFromContentType;
|
|
219
|
-
/**
|
|
220
|
-
* Saves transformed file to storage.
|
|
221
|
-
* @param result The transformation result to save.
|
|
222
|
-
* @param originalFileId The original file identifier.
|
|
223
|
-
* @param query The transformation query parameters.
|
|
224
|
-
* @param mediaType The media type (image, video, audio).
|
|
225
|
-
* @returns Promise that resolves when file is saved.
|
|
226
|
-
* @private
|
|
227
|
-
*/
|
|
228
|
-
private saveTransformedFile;
|
|
229
|
-
/**
|
|
230
|
-
* Validates query parameters for audio transformations. Checks for invalid video-only parameters, invalid codecs, invalid formats, and invalid numeric values.
|
|
231
|
-
* @param query Query parameters to validate.
|
|
232
|
-
* @throws {ValidationError} When validation fails.
|
|
233
|
-
*/
|
|
234
|
-
private validateAudioQueryParameters;
|
|
235
|
-
/**
|
|
236
|
-
* Handles image transformation.
|
|
237
|
-
* @param fileId The file identifier.
|
|
238
|
-
* @param query The transformation query parameters.
|
|
239
|
-
* @returns Promise resolving to media transformation result.
|
|
240
|
-
* @private
|
|
241
|
-
*/
|
|
242
|
-
private handleImageTransformation;
|
|
243
|
-
/**
|
|
244
|
-
* Handles video transformation.
|
|
245
|
-
* @param fileId The file identifier.
|
|
246
|
-
* @param query The transformation query parameters.
|
|
247
|
-
* @returns Promise resolving to media transformation result.
|
|
248
|
-
* @private
|
|
249
|
-
*/
|
|
250
|
-
private handleVideoTransformation;
|
|
251
|
-
/**
|
|
252
|
-
* Handles audio transformation.
|
|
253
|
-
* @param fileId The file identifier.
|
|
254
|
-
* @param query The transformation query parameters.
|
|
255
|
-
* @returns Promise resolving to media transformation result.
|
|
256
|
-
* @private
|
|
257
|
-
*/
|
|
258
|
-
private handleAudioTransformation;
|
|
259
|
-
/**
|
|
260
|
-
* Parses query parameters from various input formats.
|
|
261
|
-
* @param query Query parameters in various formats.
|
|
262
|
-
* @returns Normalized MediaTransformQuery object.
|
|
263
|
-
* @private
|
|
264
|
-
*/
|
|
265
|
-
private parseQuery;
|
|
266
|
-
/**
|
|
267
|
-
* Parses boolean parameter from string.
|
|
268
|
-
* @param value String value to parse.
|
|
269
|
-
* @returns Boolean value or undefined.
|
|
270
|
-
* @private
|
|
271
|
-
*/
|
|
272
|
-
private parseBooleanParameter;
|
|
273
|
-
/**
|
|
274
|
-
* Parses URLSearchParams into MediaTransformQuery.
|
|
275
|
-
* @param parameters URL search parameters object.
|
|
276
|
-
* @returns MediaTransformQuery object with parsed parameters.
|
|
277
|
-
* @private
|
|
278
|
-
*/
|
|
279
|
-
private parseURLSearchParams;
|
|
280
|
-
/**
|
|
281
|
-
* Detects media type from MIME type.
|
|
282
|
-
* @param contentType MIME content type string.
|
|
283
|
-
* @returns Detected media type.
|
|
284
|
-
* @throws Error if content type is missing or unsupported.
|
|
285
|
-
* @private
|
|
286
|
-
*/
|
|
287
|
-
private detectMediaType;
|
|
288
|
-
/**
|
|
289
|
-
* Checks if query has image transformations.
|
|
290
|
-
* @param query The transformation query parameters.
|
|
291
|
-
* @returns True if image transformations are requested.
|
|
292
|
-
* @private
|
|
293
|
-
*/
|
|
294
|
-
private hasImageTransformations;
|
|
295
|
-
/**
|
|
296
|
-
* Checks if query has video transformations.
|
|
297
|
-
* @param query The transformation query parameters.
|
|
298
|
-
* @returns True if video transformations are requested.
|
|
299
|
-
* @private
|
|
300
|
-
*/
|
|
301
|
-
private hasVideoTransformations;
|
|
302
|
-
/**
|
|
303
|
-
* Checks if query has audio transformations.
|
|
304
|
-
* @param query The transformation query parameters.
|
|
305
|
-
* @returns True if audio transformations are requested.
|
|
306
|
-
* @private
|
|
307
|
-
*/
|
|
308
|
-
private hasAudioTransformations;
|
|
309
|
-
/**
|
|
310
|
-
* Converts ImageTransformer result to unified format.
|
|
311
|
-
* @param result The image transformation result.
|
|
312
|
-
* @returns Unified media transformation result.
|
|
313
|
-
* @private
|
|
314
|
-
*/
|
|
315
|
-
private convertImageResult;
|
|
316
|
-
/**
|
|
317
|
-
* Converts VideoTransformer result to unified format.
|
|
318
|
-
* @param result The video transformation result.
|
|
319
|
-
* @returns Unified media transformation result.
|
|
320
|
-
* @private
|
|
321
|
-
*/
|
|
322
|
-
private convertVideoResult;
|
|
323
|
-
/**
|
|
324
|
-
* Converts AudioTransformer result to unified format.
|
|
325
|
-
* @param result The audio transformation result.
|
|
326
|
-
* @returns Unified media transformation result.
|
|
327
|
-
* @private
|
|
328
|
-
*/
|
|
329
|
-
private convertAudioResult;
|
|
330
|
-
}
|
|
331
|
-
export { MediaTransformer as M };
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
const $=/^[A-Z]:\//i,h=(t="")=>t&&t.replaceAll("\\","/").replace($,n=>n.toUpperCase()),p=/^[/\\]{2}/,d=/^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Z]:[/\\]/i,g=/^[A-Z]:$/i,i=/\/$/,x=()=>typeof process.cwd=="function"?process.cwd().replaceAll("\\","/"):"/",u=(t,n)=>{let e="",l=0,s=-1,r=0,o;for(let f=0;f<=t.length;++f){if(f<t.length)o=t[f];else{if(o==="/")break;o="/"}if(o==="/"){if(!(s===f-1||r===1))if(r===2){if(e.length<2||l!==2||!e.endsWith(".")||e.at(-2)!=="."){if(e.length>2){const a=e.lastIndexOf("/");a===-1?(e="",l=0):(e=e.slice(0,a),l=e.length-1-e.lastIndexOf("/")),s=f,r=0;continue}else if(e.length>0){e="",l=0,s=f,r=0;continue}}n&&(e+=e.length>0?"/..":"..",l=2)}else e.length>0?e+=`/${t.slice(s+1,f)}`:e=t.slice(s+1,f),l=f-s-1;s=f,r=0}else o==="."&&r!==-1?++r:r=-1}return e},c=t=>d.test(t),A=function(t){if(t.length===0)return".";t=h(t);const n=p.exec(t),e=c(t),l=t.at(-1)==="/";return t=u(t,!e),t.length===0?e?"/":l?"./":".":(l&&(t+="/"),g.test(t)&&(t+="/"),n?e?`//${t}`:`//./${t}`:e&&!c(t)?`/${t}`:t)},I=(...t)=>{let n="";for(const e of t)if(e)if(n.length>0){const l=n.at(-1)==="/",s=e[0]==="/";l&&s?n+=e.slice(1):n+=l||s?e:`/${e}`}else n+=e;return A(n)},O=function(...t){t=t.map(l=>h(l));let n="",e=!1;for(let l=t.length-1;l>=-1&&!e;l--){const s=l>=0?t[l]:x();!s||s.length===0||(n=`${s}/${n}`,e=c(s))}return n=u(n,!e),e&&!c(n)?`/${n}`:n.length>0?n:"."},m=t=>{const n=h(t).replace(i,""),e=n.lastIndexOf("/");if(e===-1)return c(t)?"/":".";const l=n.slice(0,e);return g.test(l)?`${l}/`:l||(c(t)?"/":".")},W=(t,n)=>{const e=h(t),l=e.slice(e.lastIndexOf("/")+1);if(n&&l.endsWith(n)){if(n===e)return"";const s=l.slice(0,-n.length);if(s.length>0)return s}return l};export{c as A,O as B,m as H,W as J,A as W,I as m,h as v};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{Readable as w}from"node:stream";import{C,B as M,X as U,c as O}from"./storage-0j5nCAUp.js";import{d as T}from"./detect-file-type-BA7UBLKA.js";import{throwErrorCode as m,ERRORS as y}from"./ERRORS-BIBxE2oR.js";import{createRetryWrapper as A}from"./createRetryWrapper-CxgiV_hH.js";import{y as k}from"./local-meta-storage-iuJnu90B.js";import{t as x}from"./update-size-DuNuLyxj.js";import{i as I}from"./part-match-D-9dGX42.js";import{e as R}from"./has-content-50BsqrWw.js";import{t as S}from"./get-file-status-y3wTtDQs.js";const z=(u,t)=>{const i={};return Object.keys(u).forEach(e=>{i[e]=t(u[e])}),i},v=u=>u===Number(u)?u:(C(u)??0)/1e3,B=5*1024*1024,L=16*1024*1024,N=u=>{if(u)return`bytes=${Math.max(0,u.start)}-${u.end===void 0?"":u.end}`};class b extends M{checksumTypes=["md5","crc32","crc32c","sha1","sha256"];supportsRange=!0;supportsDelimiter=!0;bucket;meta;MAX_PARTS=1e4;partSize;retry;resolvedRetryConfig;constructor(t){if(super(t),this.bucket=t.bucket,this.partSize=typeof t.partSize=="string"?U(t.partSize):t.partSize||L,this.partSize<B)throw new Error("Minimum allowed partSize value is 5MB");const i={backoffMultiplier:2,initialDelay:1e3,maxDelay:3e4,maxRetries:3,retryableStatusCodes:[408,429,500,502,503,504],shouldRetry:a=>{const s=a;return s.statusCode&&[408,429,500,502,503,504].includes(s.statusCode)?!0:s.retryable??!1},...t.retryConfig};this.retry=A(i),this.resolvedRetryConfig=i;const{metaStorage:e,metaStorageConfig:r}=t;if(e)this.meta=e;else{const a={...t,...r,logger:this.logger};"directory"in a?(this.logger?.debug("Using local meta storage"),this.meta=new k(a)):this.meta=new k(a)}this.isReady=!1,this.accessCheck().then(()=>{this.isReady=!0}).catch(a=>{this.logger?.error("Storage access check failed: %O",a)})}getRetryConfig(){return this.resolvedRetryConfig}async create(t,i){return this.instrumentOperation("create",async()=>{const e={...t};if(t.ttl){const n=typeof t.ttl=="string"?O(t.ttl):t.ttl;n!==void 0&&(e.expiredAt=Date.now()+n)}const r=new(this.getFileClass())(e);r.name=this.namingFunction(r),await this.validate(r);try{const n=await this.getMeta(r.id);if(n.bytesWritten>=0)return n}catch{}const a=this.getS3Api();let s;try{s=await this.runOperation(i,n=>a.createMultipartUpload({ACL:this.getAcl(),Bucket:this.bucket,ContentType:r.contentType,Key:r.name,Metadata:z({originalName:r.originalName,...r.metadata},o=>encodeURI(String(o)))},{signal:n}))}catch{return m(y.FILE_ERROR,"s3 create upload error")}const{UploadId:c}=s||{};return c?(r.UploadId=c,r.bytesWritten=0,this.config.clientDirectUpload&&(r.partSize??=this.partSize),await this.saveMeta(r),r.status="created",await this.onCreate(r),this.config.clientDirectUpload?this.buildPresigned(r):r):m(y.FILE_ERROR,"s3 create upload error")})}async write(t,i){return this.instrumentOperation("write",async()=>{let e;if("contentType"in t&&"metadata"in t&&!("body"in t)&&!("start"in t)?e=t:(e=await this.getMeta(t.id),await this.checkIfExpired(e)),e.status==="completed")return e;if(typeof t.size=="number"&&t.size>0&&x(e,t.size),!I(t,e))return m(y.FILE_CONFLICT);if(this.config.clientDirectUpload)return this.buildPresigned(e);e.Parts??=await this.getParts(e),e.bytesWritten=e.Parts.map(a=>a.Size||0).reduce((a,s)=>a+s,0);const r=await this.lock(t.id);try{if(R(t)){if(this.isUnsupportedChecksum(t.checksumAlgorithm))return m(y.UNSUPPORTED_CHECKSUM_ALGORITHM);if(e.Parts.length===0&&(!e.contentType||e.contentType==="application/octet-stream"))try{const d=t.body instanceof w?t.body:w.fromWeb(t.body),{fileType:g,stream:f}=await T(d);g?.mime&&(e.contentType=g.mime),t.body=f}catch{}if(e.Parts.length>this.MAX_PARTS)throw new Error(`Exceeded ${this.MAX_PARTS} as part of the upload to ${this.bucket}.`);const a=e.Parts.length+1,s=this.getS3Api(),c=e.UploadId;if(!c)throw new Error("UploadId is required");const n=t.body,o=n instanceof Uint8Array,{ETag:l}=await this.runOperation(i,d=>s.uploadPart({Body:n,Bucket:this.bucket,ContentLength:t.contentLength||0,Key:e.name,PartNumber:a,UploadId:c,...t.checksumAlgorithm==="md5"?{ContentMD5:t.checksum}:{}},{signal:d}),{replayable:o}),p={ETag:l,PartNumber:a,Size:t.contentLength};e.Parts=[...e.Parts,p],e.bytesWritten+=t.contentLength||0}if(this.cache.set(e.id,e),e.status=S(e),e.status==="completed"){const[a]=await this.internalOnComplete(e);delete e.Parts,e.uri=a.Location,e.ETag=a.ETag}}finally{await this.unlock(t.id,r)}return e})}async delete({id:t},i){return this.instrumentOperation("delete",async()=>{const e=await this.getMeta(t);e.status="deleted",await this.abortMultipartUpload(e,i),await this.deleteMeta(e.id);const r={...e};return await this.onDelete(r),r})}async copy(t,i,e){return this.instrumentOperation("copy",async()=>{b.assertSafeId(t),b.assertSafeId(i);const r=await this.getMeta(t),a=`${this.bucket}/${t}`,s=this.bucket,c=i,n=this.getS3Api();return await this.runOperation(e,o=>n.copyObject({Bucket:s,CopySource:a,Key:c,...e?.storageClass&&{StorageClass:e.storageClass}},{signal:o})),{...r,id:c,name:c}})}async move(t,i,e){return this.instrumentOperation("move",async()=>{await this.copy(t,i,e);const r=this.getS3Api();return await this.runOperation(e,a=>r.deleteObject({Bucket:this.bucket,Key:t},{signal:a})),await this.getMeta(i)})}async list(t=1e3,i){return this.instrumentOperation("list",async()=>{const e=this.getS3Api(),r=Math.min(t,1e3);let a={Bucket:this.bucket,MaxKeys:r};const s=[];let c=!0;for(;c&&s.length<t;)try{const n=await this.runOperation(i,o=>e.listObjectsV2(a,{signal:o}));for(const{Key:o,LastModified:l}of n?.Contents||[]){if(s.length>=t)break;o!==void 0&&s.push({id:o,...l&&{createdAt:l}})}c=n.IsTruncated||!1,c&&n.NextContinuationToken&&s.length<t&&(a={...a,ContinuationToken:n.NextContinuationToken,MaxKeys:Math.min(r,t-s.length)})}catch(n){const o=this.normalizeError(n instanceof Error?n:new Error(String(n)));throw await this.onError(o),n}return s},{limit:t})}async listDirectory(t){return this.instrumentOperation("listDirectory",async()=>{const i=this.getS3Api(),e=t?.limit??1e3,r=Math.min(e,1e3);let a={Bucket:this.bucket,Delimiter:t?.delimiter,MaxKeys:r,...t?.prefix!==void 0&&{Prefix:t.prefix}};const s=[],c=new Set;let n=!0;for(;n&&s.length<e;)try{const o=await this.runOperation(t,l=>i.listObjectsV2(a,{signal:l}));for(const{Prefix:l}of o?.CommonPrefixes||[])l!==void 0&&c.add(l);for(const{Key:l,LastModified:p}of o?.Contents||[]){if(s.length>=e)break;l!==void 0&&s.push({id:l,...p&&{createdAt:p}})}n=o.IsTruncated||!1,n&&o.NextContinuationToken&&s.length<e&&(a={...a,ContinuationToken:o.NextContinuationToken,MaxKeys:Math.min(r,e-s.length)})}catch(o){const l=this.normalizeError(o instanceof Error?o:new Error(String(o)));throw await this.onError(l),o}return{files:s,prefixes:[...c]}},{limit:t?.limit??1e3})}async exists({id:t},i){return this.instrumentOperation("exists",async()=>{try{await this.getMeta(t);const e=this.getS3Api();return await this.runOperation(i,r=>e.headObject({Bucket:this.bucket,Key:t},{signal:r})),!0}catch{return!1}})}async get({id:t},i){return this.instrumentOperation("get",async()=>{const e=this.getS3Api(),r=N(i?.range),{Body:a,ContentLength:s,ContentType:c,ETag:n,Expires:o,LastModified:l,Metadata:p}=await this.runOperation(i,h=>e.getObject({Bucket:this.bucket,Key:t,...r!==void 0&&{Range:r}},{signal:h}));await this.checkIfExpired({expiredAt:o});const d=[];if(a)if(a instanceof w)for await(const h of a)d.push(h instanceof Uint8Array?h:new Uint8Array(h));else{const h=a.getReader();try{for(;;){const{done:P,value:E}=await h.read();if(P)break;d.push(E)}}finally{h.releaseLock()}}const{originalName:g,...f}=p||{};return{content:Buffer.concat(d),contentType:c,ETag:n,expiredAt:o,id:t,metadata:f,modifiedAt:l,name:t,originalName:g||t,size:Number(s)}})}async buildPresigned(t){const i=t;if(i.Parts?.length||(i.Parts=await this.getParts(t)),i.bytesWritten=i.Parts.map(e=>e.Size||0).reduce((e,r)=>e+r,0),t.status=S(i),i.partsUrls?.length||(i.partsUrls=await this.getPartsPresignedUrls(t)),t.status==="completed"){const[e]=await this.internalOnComplete(t);return delete i.Parts,i.uri=e.Location,t}return t}async getPartsPresignedUrls(t){t.partSize??=this.partSize;const i=t.UploadId;if(!i)throw new Error("UploadId is required for getting presigned URLs");const e=Math.trunc(t.size/this.partSize)+1,r=[],a=Math.trunc(v(this.config.expiration?.maxAge||"6hrs")),s=this.getS3Api();for(let c=0;c<e;c++)r.push(s.getPresignedUrl({Bucket:this.bucket,expiresIn:a,Key:t.name,PartNumber:c+1,UploadId:i}));return Promise.all(r)}async getParts(t){const i=this.getS3Api(),e=t.UploadId;if(!e)throw new Error("UploadId is required");const{Parts:r=[]}=await this.runOperation(void 0,a=>i.listParts({Bucket:this.bucket,Key:t.name,UploadId:e},{signal:a}));return r}completeMultipartUpload(t){const i=this.getS3Api(),e=t.UploadId;if(!e)throw new Error("UploadId is required");const r=t.Parts?.map(({ETag:a,PartNumber:s})=>{if(!a||!s)throw new Error("ETag and PartNumber are required");return{ETag:a,PartNumber:s}})||[];return this.runOperation(void 0,a=>i.completeMultipartUpload({Bucket:this.bucket,Key:t.name,Parts:r,UploadId:e},{signal:a}))}async abortMultipartUpload(t,i){if(t.status!=="completed")try{const e=this.getS3Api(),r=t.UploadId;if(!r)return;await this.runOperation(i,a=>e.abortMultipartUpload({Bucket:this.bucket,Key:t.name,UploadId:r},{signal:a}))}catch(e){this.logger?.error("abortMultipartUploadError: ",e);const r=this.normalizeError(e instanceof Error?e:new Error(String(e)));await this.onError(r)}}internalOnComplete=async t=>{const[i]=await Promise.all([this.completeMultipartUpload(t),this.deleteMeta(t.id)]);return[i,t]}}export{b as S,N as b};
|
|
@@ -1 +0,0 @@
|
|
|
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};
|