smart-dropzone-react
Version:
🚀 A production-ready React dropzone component with smart defaults, drag & drop reordering, chunked uploads, resume functionality, and comprehensive provider support (Cloudinary, AWS S3, Supabase)
1 lines • 26.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/core/validation.ts"],"names":["InputValidator","file","result","pattern","FILE_SIZE","files","UPLOAD","index","fileValidation","error","warning","options","opts","ConfigValidator","type","allowedFormats","config","cfg","field","fromIndex","toIndex","arrayLength","input","maxLength","UploadError","sanitized","element","inputs","optionsValidation","previewValidation","dragValidation","configValidation","validateInput","validationFn","_target","_propertyName","descriptor","method","args","validation","validation_default"],"mappings":"qHAgBO,IAAMA,CAAAA,CAAN,KAAqB,CAI1B,OAAO,YAAA,CAAaC,CAAAA,CAAiC,CACnD,IAAMC,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,OAAKD,CAAAA,CAMCA,CAAAA,YAAgB,IAAA,EAAA,CAOlB,CAACA,CAAAA,CAAK,IAAA,EAAQA,CAAAA,CAAK,IAAA,CAAK,MAAK,CAAE,MAAA,GAAW,CAAA,IAC5CC,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,uBAAuB,CAAA,CAAA,CAIxCD,CAAAA,CAAK,IAAA,CAAK,MAAA,CAAS,GAAA,GACrBC,CAAAA,CAAO,QAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,gDAAgD,CAAA,CAAA,CAI3C,CACxB,OAAA,CACA,WAAA,CACA,IAAA,CACA,OACF,CAAA,CAEsB,IAAA,CAAMC,CAAAA,EAAYA,CAAAA,CAAQ,IAAA,CAAKF,EAAK,IAAI,CAAC,CAAA,GAC7DC,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,uCAAuC,CAAA,CAAA,CAAA,CAIxDD,CAAAA,CAAK,IAAA,CAAO,CAAA,EAAKA,CAAAA,CAAK,IAAA,CAAOG,oBAAU,YAAA,IACzCF,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,sBAAsB,CAAA,CAAA,CAGvCD,CAAAA,CAAK,IAAA,GAAS,CAAA,EAChBC,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,0BAA0B,EAG1CA,CAAAA,GAxCLA,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAA,CACjCA,CAAAA,CAAAA,EARPA,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,kBAAkB,CAAA,CAC9BA,CAAAA,CA6CX,CAKA,OAAO,gBAAA,CAAiBG,CAAAA,CAAkC,CACxD,IAAMH,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,OAAK,KAAA,CAAM,OAAA,CAAQG,CAAK,CAAA,CAMpBA,CAAAA,CAAM,MAAA,GAAW,CAAA,EACnBH,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,mBAAmB,CAAA,CACjCA,CAAAA,GAGLG,CAAAA,CAAM,MAAA,CAASC,mBAAAA,CAAO,iBAAA,GACxBJ,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CACZ,CAAA,wBAAA,EAA2BI,mBAAAA,CAAO,iBAAiB,CAAA,CAAA,CACrD,CAAA,CAAA,CAIFD,CAAAA,CAAM,QAAQ,CAACJ,CAAAA,CAAMM,CAAAA,GAAU,CAC7B,IAAMC,CAAAA,CAAiB,IAAA,CAAK,YAAA,CAAaP,CAAI,CAAA,CACxCO,CAAAA,CAAe,OAAA,GAClBN,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBM,CAAAA,CAAe,OAAO,OAAA,CAASC,CAAAA,EAAU,CACvCP,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,KAAA,EAAQK,CAAAA,CAAQ,CAAC,CAAA,EAAA,EAAKE,CAAK,CAAA,CAAE,EAClD,CAAC,CAAA,CAAA,CAEHD,CAAAA,CAAe,SAAS,OAAA,CAASE,CAAAA,EAAY,CAC3CR,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,CAAA,KAAA,EAAQK,CAAAA,CAAQ,CAAC,CAAA,EAAA,EAAKG,CAAO,CAAA,CAAE,EACtD,CAAC,EACH,CAAC,EAEMR,CAAAA,CAAAA,EA/BLA,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,wBAAwB,CAAA,CACpCA,CAAAA,CA8BX,CAKA,OAAO,qBAAA,CAAsBS,CAAAA,CAAoC,CAC/D,IAAMT,EAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,GAAI,CAACS,CAAAA,EAAW,OAAOA,CAAAA,EAAY,QAAA,CACjC,OAAAT,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,4CAA4C,CAAA,CAC1DA,CAAAA,CAGT,IAAMU,CAAAA,CAAOD,CAAAA,CAGb,OAAIC,CAAAA,CAAK,WAAA,GAAgB,MAAA,GACnB,OAAOA,CAAAA,CAAK,WAAA,EAAgB,UAAYA,CAAAA,CAAK,WAAA,EAAe,CAAA,EAC9DV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,uCAAuC,CAAA,EAChDW,mBAAAA,CAAgB,gBAAA,CAAiBD,CAAAA,CAAK,WAAW,CAAA,GAC3DV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,0CAA0C,CAAA,CAAA,CAAA,CAK7DU,CAAAA,CAAK,QAAA,GAAa,MAAA,GAElB,OAAOA,CAAAA,CAAK,QAAA,EAAa,QAAA,EACzBA,CAAAA,CAAK,UAAY,CAAA,EACjBA,CAAAA,CAAK,QAAA,CAAW,GAAA,CAAA,GAEhBV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,6CAA6C,CAAA,CAAA,CAKhEU,CAAAA,CAAK,YAAA,GAAiB,MAAA,GACnB,KAAA,CAAM,QAAQA,CAAAA,CAAK,YAAY,CAAA,CAGzBA,CAAAA,CAAK,YAAA,CAAa,MAAA,GAAW,CAAA,CACtCV,CAAAA,CAAO,QAAA,CAAS,IAAA,CACd,yDACF,CAAA,CAEAU,CAAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,CAACE,EAAWP,CAAAA,GAAkB,CAClD,OAAOO,CAAAA,EAAS,QAAA,GAClBZ,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,aAAA,EAAgBK,CAAK,CAAA,kBAAA,CAAoB,CAAA,EAEhE,CAAC,GAZDL,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,+BAA+B,CAAA,CAAA,CAAA,CAe/CA,CACT,CAKA,OAAO,sBAAA,CAAuBS,CAAAA,CAAoC,CAChE,IAAMT,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,GAAI,CAACS,CAAAA,EAAW,OAAOA,CAAAA,EAAY,QAAA,CACjC,OAAOT,EAGT,IAAMU,CAAAA,CAAOD,CAAAA,CAgCb,GA7BIC,CAAAA,CAAK,QAAA,GAAa,MAAA,GAChB,OAAOA,CAAAA,CAAK,QAAA,EAAa,QAAA,EAAYA,CAAAA,CAAK,QAAA,EAAY,CAAA,EACxDV,CAAAA,CAAO,OAAA,CAAU,MACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,oCAAoC,CAAA,EAC7CW,mBAAAA,CAAgB,kBAAA,CAAmBD,CAAAA,CAAK,QAAA,CAAU,GAAG,CAAA,GAC/DV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,6CAA6C,CAAA,CAAA,CAAA,CAIhEU,CAAAA,CAAK,SAAA,GAAc,MAAA,GACjB,OAAOA,CAAAA,CAAK,SAAA,EAAc,QAAA,EAAYA,CAAAA,CAAK,SAAA,EAAa,CAAA,EAC1DV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,EAAO,MAAA,CAAO,IAAA,CAAK,qCAAqC,CAAA,EAC9CW,mBAAAA,CAAgB,kBAAA,CAAmB,GAAA,CAAKD,CAAAA,CAAK,SAAS,CAAA,GAChEV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,8CAA8C,CAAA,CAAA,CAAA,CAKjEU,CAAAA,CAAK,OAAA,GAAY,MAAA,GACdC,mBAAAA,CAAgB,eAAA,CAAgBD,CAAAA,CAAK,OAAO,CAAA,GAC/CV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,0CAA0C,IAK7DU,CAAAA,CAAK,MAAA,GAAW,MAAA,CAAW,CAC7B,IAAMG,CAAAA,CAAiB,CAAC,MAAA,CAAQ,MAAA,CAAQ,KAAK,CAAA,CACxCA,CAAAA,CAAe,QAAA,CAASH,CAAAA,CAAK,MAAM,CAAA,GACtCV,EAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CACZ,CAAA,uBAAA,EAA0Ba,CAAAA,CAAe,IAAA,CAAK,IAAI,CAAC,CAAA,CACrD,CAAA,EAEJ,CAEA,OAAOb,CACT,CAKA,OAAO,mBAAA,CAAoBS,CAAAA,CAAoC,CAC7D,IAAMT,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,GAAI,CAACS,CAAAA,EAAW,OAAOA,CAAAA,EAAY,QAAA,CACjC,OAAOT,CAAAA,CAGT,IAAMU,CAAAA,CAAOD,CAAAA,CAGb,OAAIC,CAAAA,CAAK,iBAAA,GAAsB,MAAA,GAE3B,OAAOA,CAAAA,CAAK,iBAAA,EAAsB,UAClCA,CAAAA,CAAK,iBAAA,CAAoB,CAAA,EAEzBV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,iDAAiD,CAAA,EAC3DU,CAAAA,CAAK,iBAAA,CAAoB,GAAA,EAClCV,CAAAA,CAAO,QAAA,CAAS,IAAA,CACd,8DACF,CAAA,CAAA,CAKAU,CAAAA,CAAK,aAAA,GAAkB,MAAA,GACrB,OAAOA,CAAAA,CAAK,aAAA,EAAkB,QAAA,EAAYA,CAAAA,CAAK,aAAA,CAAgB,CAAA,CAAA,GACjEV,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,EAAO,MAAA,CAAO,IAAA,CAAK,6CAA6C,CAAA,CAAA,CAKhEU,CAAAA,CAAK,QAAA,GAAa,MAAA,GAChB,OAAOA,CAAAA,CAAK,QAAA,EAAa,QAAA,EAAYA,CAAAA,CAAK,QAAA,EAAY,CAAA,CAAA,GACxDV,CAAAA,CAAO,OAAA,CAAU,MACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,oCAAoC,CAAA,CAAA,CAIpDA,CACT,CAKA,OAAO,sBAAA,CAAuBc,CAAAA,CAAmC,CAC/D,IAAMd,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,OAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,GAAI,CAACc,CAAAA,EAAU,OAAOA,CAAAA,EAAW,QAAA,CAC/B,OAAAd,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,EAAO,MAAA,CAAO,IAAA,CAAK,oCAAoC,CAAA,CAChDA,CAAAA,CAGT,IAAMe,CAAAA,CAAMD,CAAAA,CAGZ,OAAI,CAACC,CAAAA,CAAI,MAAA,EAAU,CAACA,CAAAA,CAAI,WAAA,EAAe,CAACA,EAAI,WAAA,EAC1Cf,CAAAA,CAAO,QAAA,CAAS,IAAA,CACd,sDACF,CAAA,CAImB,CAAC,QAAA,CAAU,WAAA,CAAa,cAAA,CAAgB,QAAQ,CAAA,CACxD,OAAA,CAASgB,CAAAA,EAAU,CAC1BD,CAAAA,CAAIC,CAAK,CAAA,GAAM,MAAA,EAAa,OAAOD,CAAAA,CAAIC,CAAK,CAAA,EAAM,QAAA,GACpDhB,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,CAAA,EAAGgB,CAAK,CAAA,iBAAA,CAAmB,GAElD,CAAC,CAAA,CAEMhB,CACT,CAKA,OAAO,sBAAA,CACLiB,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CACkB,CAClB,IAAMnB,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAEA,OAAI,CAAC,MAAA,CAAO,SAAA,CAAUiB,CAAS,CAAA,EAAK,CAAC,MAAA,CAAO,SAAA,CAAUC,CAAO,GAC3DlB,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,0BAA0B,CAAA,CACtCA,CAAAA,GAAAA,CAGLiB,CAAAA,CAAY,CAAA,EAAKC,CAAAA,CAAU,CAAA,IAC7BlB,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,EAAO,MAAA,CAAO,IAAA,CAAK,4BAA4B,CAAA,CAAA,CAAA,CAG7CiB,CAAAA,EAAaE,CAAAA,EAAeD,CAAAA,EAAWC,CAAAA,IACzCnB,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,6BAA6B,CAAA,CAAA,CAG9CiB,IAAcC,CAAAA,EAChBlB,CAAAA,CAAO,QAAA,CAAS,IAAA,CACd,8DACF,CAAA,CAGKA,CAAAA,CACT,CAKA,OAAO,cAAA,CAAeoB,CAAAA,CAAgBC,CAAAA,CAAoB,GAAA,CAAc,CACtE,GAAI,OAAOD,GAAU,QAAA,CACnB,MAAME,mBAAAA,CAAY,eAAA,CAAgB,wBAAwB,CAAA,CAI5D,IAAIC,CAAAA,CAAYH,CAAAA,CACb,OAAA,CAAQ,OAAA,CAAS,EAAE,CAAA,CACnB,OAAA,CAAQ,eAAA,CAAiB,EAAE,EAC3B,OAAA,CAAQ,SAAA,CAAW,EAAE,CAAA,CACrB,IAAA,EAAK,CAGR,OAAIG,CAAAA,CAAU,MAAA,CAASF,CAAAA,GACrBE,CAAAA,CAAYA,CAAAA,CAAU,SAAA,CAAU,CAAA,CAAGF,CAAS,CAAA,CAAA,CAGvCE,CACT,CAKA,OAAO,eAAA,CAAgBC,CAAAA,CAAoC,CACzD,IAAMxB,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,EAEA,OAAKwB,CAAAA,CAMCA,CAAAA,YAAmB,WAAA,EAMpBA,CAAAA,CAAQ,WAAA,EACXxB,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,qCAAqC,CAAA,CAGrDA,CAAAA,GATLA,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,8BAA8B,CAAA,CAC1CA,CAAAA,CAAAA,EARPA,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,qBAAqB,CAAA,CACjCA,CAAAA,CAcX,CAKA,OAAO,kBAAkByB,CAAAA,CAMJ,CACnB,IAAMzB,CAAAA,CAA2B,CAC/B,OAAA,CAAS,IAAA,CACT,MAAA,CAAQ,EAAC,CACT,QAAA,CAAU,EACZ,CAAA,CAGA,GAAIyB,CAAAA,CAAO,QAAU,MAAA,CAAW,CAC9B,IAAMnB,CAAAA,CAAiB,IAAA,CAAK,gBAAA,CAAiBmB,CAAAA,CAAO,KAAK,CAAA,CACpDnB,CAAAA,CAAe,OAAA,GAClBN,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,KAAK,GAAGM,CAAAA,CAAe,MAAM,CAAA,CAAA,CAE7CN,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAGM,CAAAA,CAAe,QAAQ,EACjD,CAEA,GAAImB,CAAAA,CAAO,OAAA,GAAY,MAAA,CAAW,CAChC,IAAMC,CAAAA,CAAoB,IAAA,CAAK,qBAAA,CAAsBD,CAAAA,CAAO,OAAO,CAAA,CAC9DC,CAAAA,CAAkB,OAAA,GACrB1B,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG0B,EAAkB,MAAM,CAAA,CAAA,CAEhD1B,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG0B,CAAAA,CAAkB,QAAQ,EACpD,CAEA,GAAID,CAAAA,CAAO,cAAA,GAAmB,MAAA,CAAW,CACvC,IAAME,EAAoB,IAAA,CAAK,sBAAA,CAC7BF,CAAAA,CAAO,cACT,CAAA,CACKE,CAAAA,CAAkB,OAAA,GACrB3B,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG2B,CAAAA,CAAkB,MAAM,GAEhD3B,CAAAA,CAAO,QAAA,CAAS,IAAA,CAAK,GAAG2B,CAAAA,CAAkB,QAAQ,EACpD,CAEA,GAAIF,CAAAA,CAAO,WAAA,GAAgB,MAAA,CAAW,CACpC,IAAMG,CAAAA,CAAiB,IAAA,CAAK,mBAAA,CAAoBH,CAAAA,CAAO,WAAW,CAAA,CAC7DG,CAAAA,CAAe,OAAA,GAClB5B,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG4B,CAAAA,CAAe,MAAM,CAAA,CAAA,CAE7C5B,EAAO,QAAA,CAAS,IAAA,CAAK,GAAG4B,CAAAA,CAAe,QAAQ,EACjD,CAEA,GAAIH,CAAAA,CAAO,cAAA,GAAmB,MAAA,CAAW,CACvC,IAAMI,CAAAA,CAAmB,IAAA,CAAK,sBAAA,CAC5BJ,EAAO,cACT,CAAA,CACKI,CAAAA,CAAiB,OAAA,GACpB7B,CAAAA,CAAO,OAAA,CAAU,KAAA,CACjBA,CAAAA,CAAO,MAAA,CAAO,IAAA,CAAK,GAAG6B,CAAAA,CAAiB,MAAM,CAAA,CAAA,CAE/C7B,CAAAA,CAAO,QAAA,CAAS,KAAK,GAAG6B,CAAAA,CAAiB,QAAQ,EACnD,CAEA,OAAO7B,CACT,CACF,EAKO,SAAS8B,CAAAA,CAAcC,CAAAA,CAAgD,CAC5E,OAAO,SACLC,CAAAA,CACAC,EACAC,CAAAA,CACA,CACA,IAAMC,CAAAA,CAASD,CAAAA,CAAW,KAAA,CAE1BA,CAAAA,CAAW,KAAA,CAAQ,SAAA,GAAaE,CAAAA,CAAa,CAE3C,GAAIA,CAAAA,CAAK,MAAA,CAAS,CAAA,CAAG,CACnB,IAAMC,CAAAA,CAAaN,CAAAA,CAAaK,CAAAA,CAAK,CAAC,CAAC,CAAA,CACvC,GAAI,CAACC,CAAAA,CAAW,OAAA,CACd,MAAMf,mBAAAA,CAAY,eAAA,CAAgBe,CAAAA,CAAW,MAAA,CAAO,IAAA,CAAK,IAAI,CAAC,CAAA,CAI5DA,CAAAA,CAAW,QAAA,CAAS,MAAA,CAAS,EAGnC,CAEA,OAAOF,CAAAA,CAAO,KAAA,CAAM,IAAA,CAAMC,CAAI,CAChC,EACF,CACF,KAEOE,CAAAA,CAAQxC","file":"chunk-WYTPI37C.cjs","sourcesContent":["/**\r\n * Comprehensive validation utilities for Smart Dropzone\r\n *\r\n * This module provides robust input validation for all user inputs,\r\n * file operations, and configuration parameters throughout the package.\r\n */\r\n\r\nimport { ConfigValidator, UPLOAD, FILE_SIZE } from \"./config\";\r\nimport { UploadError } from \"./error-handler\";\r\n\r\nexport interface ValidationResult {\r\n isValid: boolean;\r\n errors: string[];\r\n warnings: string[];\r\n}\r\n\r\nexport class InputValidator {\r\n /**\r\n * Validate file objects\r\n */\r\n static validateFile(file: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!file) {\r\n result.isValid = false;\r\n result.errors.push(\"File is required\");\r\n return result;\r\n }\r\n\r\n if (!(file instanceof File)) {\r\n result.isValid = false;\r\n result.errors.push(\"Invalid file object\");\r\n return result;\r\n }\r\n\r\n // Check file name\r\n if (!file.name || file.name.trim().length === 0) {\r\n result.isValid = false;\r\n result.errors.push(\"File name is required\");\r\n }\r\n\r\n // Check file name length\r\n if (file.name.length > 255) {\r\n result.isValid = false;\r\n result.errors.push(\"File name is too long (maximum 255 characters)\");\r\n }\r\n\r\n // Check for potentially dangerous file names\r\n const dangerousPatterns = [\r\n /^\\.+$/, // Only dots\r\n /[<>:\"|?*]/, // Windows forbidden characters\r\n /\\0/, // Null character\r\n /^\\s+$/, // Only whitespace\r\n ];\r\n\r\n if (dangerousPatterns.some((pattern) => pattern.test(file.name))) {\r\n result.isValid = false;\r\n result.errors.push(\"File name contains invalid characters\");\r\n }\r\n\r\n // Check file size (allow zero-byte files but warn)\r\n if (file.size < 0 || file.size > FILE_SIZE.BYTES_PER_TB) {\r\n result.isValid = false;\r\n result.errors.push(\"File size is invalid\");\r\n }\r\n\r\n if (file.size === 0) {\r\n result.warnings.push(\"File appears to be empty\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate file arrays\r\n */\r\n static validateFileList(files: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!Array.isArray(files)) {\r\n result.isValid = false;\r\n result.errors.push(\"Files must be an array\");\r\n return result;\r\n }\r\n\r\n if (files.length === 0) {\r\n result.warnings.push(\"No files provided\");\r\n return result;\r\n }\r\n\r\n if (files.length > UPLOAD.DEFAULT_MAX_FILES) {\r\n result.isValid = false;\r\n result.errors.push(\r\n `Too many files (maximum ${UPLOAD.DEFAULT_MAX_FILES})`\r\n );\r\n }\r\n\r\n // Validate each file\r\n files.forEach((file, index) => {\r\n const fileValidation = this.validateFile(file);\r\n if (!fileValidation.isValid) {\r\n result.isValid = false;\r\n fileValidation.errors.forEach((error) => {\r\n result.errors.push(`File ${index + 1}: ${error}`);\r\n });\r\n }\r\n fileValidation.warnings.forEach((warning) => {\r\n result.warnings.push(`File ${index + 1}: ${warning}`);\r\n });\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate upload options\r\n */\r\n static validateUploadOptions(options: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!options || typeof options !== \"object\") {\r\n result.warnings.push(\"No upload options provided, using defaults\");\r\n return result;\r\n }\r\n\r\n const opts = options as Record<string, any>;\r\n\r\n // Validate maxFileSize\r\n if (opts.maxFileSize !== undefined) {\r\n if (typeof opts.maxFileSize !== \"number\" || opts.maxFileSize <= 0) {\r\n result.isValid = false;\r\n result.errors.push(\"maxFileSize must be a positive number\");\r\n } else if (!ConfigValidator.validateFileSize(opts.maxFileSize)) {\r\n result.isValid = false;\r\n result.errors.push(\"maxFileSize exceeds maximum allowed size\");\r\n }\r\n }\r\n\r\n // Validate maxFiles\r\n if (opts.maxFiles !== undefined) {\r\n if (\r\n typeof opts.maxFiles !== \"number\" ||\r\n opts.maxFiles <= 0 ||\r\n opts.maxFiles > 100\r\n ) {\r\n result.isValid = false;\r\n result.errors.push(\"maxFiles must be a number between 1 and 100\");\r\n }\r\n }\r\n\r\n // Validate allowedTypes\r\n if (opts.allowedTypes !== undefined) {\r\n if (!Array.isArray(opts.allowedTypes)) {\r\n result.isValid = false;\r\n result.errors.push(\"allowedTypes must be an array\");\r\n } else if (opts.allowedTypes.length === 0) {\r\n result.warnings.push(\r\n \"allowedTypes is empty - all file types will be rejected\"\r\n );\r\n } else {\r\n opts.allowedTypes.forEach((type: any, index: number) => {\r\n if (typeof type !== \"string\") {\r\n result.isValid = false;\r\n result.errors.push(`allowedTypes[${index}] must be a string`);\r\n }\r\n });\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate preview options\r\n */\r\n static validatePreviewOptions(options: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!options || typeof options !== \"object\") {\r\n return result; // Optional parameter\r\n }\r\n\r\n const opts = options as Record<string, any>;\r\n\r\n // Validate dimensions\r\n if (opts.maxWidth !== undefined) {\r\n if (typeof opts.maxWidth !== \"number\" || opts.maxWidth <= 0) {\r\n result.isValid = false;\r\n result.errors.push(\"maxWidth must be a positive number\");\r\n } else if (!ConfigValidator.validateDimensions(opts.maxWidth, 100)) {\r\n result.isValid = false;\r\n result.errors.push(\"maxWidth exceeds maximum allowed dimensions\");\r\n }\r\n }\r\n\r\n if (opts.maxHeight !== undefined) {\r\n if (typeof opts.maxHeight !== \"number\" || opts.maxHeight <= 0) {\r\n result.isValid = false;\r\n result.errors.push(\"maxHeight must be a positive number\");\r\n } else if (!ConfigValidator.validateDimensions(100, opts.maxHeight)) {\r\n result.isValid = false;\r\n result.errors.push(\"maxHeight exceeds maximum allowed dimensions\");\r\n }\r\n }\r\n\r\n // Validate quality\r\n if (opts.quality !== undefined) {\r\n if (!ConfigValidator.validateQuality(opts.quality)) {\r\n result.isValid = false;\r\n result.errors.push(\"quality must be a number between 0 and 1\");\r\n }\r\n }\r\n\r\n // Validate format\r\n if (opts.format !== undefined) {\r\n const allowedFormats = [\"webp\", \"jpeg\", \"png\"];\r\n if (!allowedFormats.includes(opts.format)) {\r\n result.isValid = false;\r\n result.errors.push(\r\n `format must be one of: ${allowedFormats.join(\", \")}`\r\n );\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate drag and drop options\r\n */\r\n static validateDragOptions(options: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!options || typeof options !== \"object\") {\r\n return result; // Optional parameter\r\n }\r\n\r\n const opts = options as Record<string, any>;\r\n\r\n // Validate animationDuration\r\n if (opts.animationDuration !== undefined) {\r\n if (\r\n typeof opts.animationDuration !== \"number\" ||\r\n opts.animationDuration < 0\r\n ) {\r\n result.isValid = false;\r\n result.errors.push(\"animationDuration must be a non-negative number\");\r\n } else if (opts.animationDuration > 5000) {\r\n result.warnings.push(\r\n \"animationDuration is quite long - may affect user experience\"\r\n );\r\n }\r\n }\r\n\r\n // Validate dragThreshold\r\n if (opts.dragThreshold !== undefined) {\r\n if (typeof opts.dragThreshold !== \"number\" || opts.dragThreshold < 0) {\r\n result.isValid = false;\r\n result.errors.push(\"dragThreshold must be a non-negative number\");\r\n }\r\n }\r\n\r\n // Validate gridSize\r\n if (opts.gridSize !== undefined) {\r\n if (typeof opts.gridSize !== \"number\" || opts.gridSize <= 0) {\r\n result.isValid = false;\r\n result.errors.push(\"gridSize must be a positive number\");\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate provider configuration\r\n */\r\n static validateProviderConfig(config: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!config || typeof config !== \"object\") {\r\n result.isValid = false;\r\n result.errors.push(\"Provider configuration is required\");\r\n return result;\r\n }\r\n\r\n const cfg = config as Record<string, any>;\r\n\r\n // Check for required fields (these will vary by provider)\r\n if (!cfg.apiKey && !cfg.accessToken && !cfg.credentials) {\r\n result.warnings.push(\r\n \"No authentication credentials found in configuration\"\r\n );\r\n }\r\n\r\n // Validate string fields\r\n const stringFields = [\"apiKey\", \"cloudName\", \"uploadPreset\", \"folder\"];\r\n stringFields.forEach((field) => {\r\n if (cfg[field] !== undefined && typeof cfg[field] !== \"string\") {\r\n result.isValid = false;\r\n result.errors.push(`${field} must be a string`);\r\n }\r\n });\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate array indices and ranges\r\n */\r\n static validateArrayOperation(\r\n fromIndex: number,\r\n toIndex: number,\r\n arrayLength: number\r\n ): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!Number.isInteger(fromIndex) || !Number.isInteger(toIndex)) {\r\n result.isValid = false;\r\n result.errors.push(\"Indices must be integers\");\r\n return result;\r\n }\r\n\r\n if (fromIndex < 0 || toIndex < 0) {\r\n result.isValid = false;\r\n result.errors.push(\"Indices cannot be negative\");\r\n }\r\n\r\n if (fromIndex >= arrayLength || toIndex >= arrayLength) {\r\n result.isValid = false;\r\n result.errors.push(\"Indices exceed array bounds\");\r\n }\r\n\r\n if (fromIndex === toIndex) {\r\n result.warnings.push(\r\n \"Source and target indices are the same - no operation needed\"\r\n );\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Validate and sanitize user input strings\r\n */\r\n static sanitizeString(input: unknown, maxLength: number = 1000): string {\r\n if (typeof input !== \"string\") {\r\n throw UploadError.validationError(\"Input must be a string\");\r\n }\r\n\r\n // Remove potentially dangerous characters\r\n let sanitized = input\r\n .replace(/[<>]/g, \"\") // Remove angle brackets\r\n .replace(/javascript:/gi, \"\") // Remove javascript: protocol\r\n .replace(/data:/gi, \"\") // Remove data: protocol\r\n .trim();\r\n\r\n // Truncate if too long\r\n if (sanitized.length > maxLength) {\r\n sanitized = sanitized.substring(0, maxLength);\r\n }\r\n\r\n return sanitized;\r\n }\r\n\r\n /**\r\n * Validate HTML element references\r\n */\r\n static validateElement(element: unknown): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n if (!element) {\r\n result.isValid = false;\r\n result.errors.push(\"Element is required\");\r\n return result;\r\n }\r\n\r\n if (!(element instanceof HTMLElement)) {\r\n result.isValid = false;\r\n result.errors.push(\"Must be a valid HTML element\");\r\n return result;\r\n }\r\n\r\n if (!element.isConnected) {\r\n result.warnings.push(\"Element is not connected to the DOM\");\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Comprehensive validation for all inputs\r\n */\r\n static validateAllInputs(inputs: {\r\n files?: unknown;\r\n options?: unknown;\r\n previewOptions?: unknown;\r\n dragOptions?: unknown;\r\n providerConfig?: unknown;\r\n }): ValidationResult {\r\n const result: ValidationResult = {\r\n isValid: true,\r\n errors: [],\r\n warnings: [],\r\n };\r\n\r\n // Validate each input type\r\n if (inputs.files !== undefined) {\r\n const fileValidation = this.validateFileList(inputs.files);\r\n if (!fileValidation.isValid) {\r\n result.isValid = false;\r\n result.errors.push(...fileValidation.errors);\r\n }\r\n result.warnings.push(...fileValidation.warnings);\r\n }\r\n\r\n if (inputs.options !== undefined) {\r\n const optionsValidation = this.validateUploadOptions(inputs.options);\r\n if (!optionsValidation.isValid) {\r\n result.isValid = false;\r\n result.errors.push(...optionsValidation.errors);\r\n }\r\n result.warnings.push(...optionsValidation.warnings);\r\n }\r\n\r\n if (inputs.previewOptions !== undefined) {\r\n const previewValidation = this.validatePreviewOptions(\r\n inputs.previewOptions\r\n );\r\n if (!previewValidation.isValid) {\r\n result.isValid = false;\r\n result.errors.push(...previewValidation.errors);\r\n }\r\n result.warnings.push(...previewValidation.warnings);\r\n }\r\n\r\n if (inputs.dragOptions !== undefined) {\r\n const dragValidation = this.validateDragOptions(inputs.dragOptions);\r\n if (!dragValidation.isValid) {\r\n result.isValid = false;\r\n result.errors.push(...dragValidation.errors);\r\n }\r\n result.warnings.push(...dragValidation.warnings);\r\n }\r\n\r\n if (inputs.providerConfig !== undefined) {\r\n const configValidation = this.validateProviderConfig(\r\n inputs.providerConfig\r\n );\r\n if (!configValidation.isValid) {\r\n result.isValid = false;\r\n result.errors.push(...configValidation.errors);\r\n }\r\n result.warnings.push(...configValidation.warnings);\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\n/**\r\n * Validation decorators for method parameters\r\n */\r\nexport function validateInput(validationFn: (input: any) => ValidationResult) {\r\n return function (\r\n _target: any,\r\n _propertyName: string,\r\n descriptor: PropertyDescriptor\r\n ) {\r\n const method = descriptor.value;\r\n\r\n descriptor.value = function (...args: any[]) {\r\n // Validate first argument (most common case)\r\n if (args.length > 0) {\r\n const validation = validationFn(args[0]);\r\n if (!validation.isValid) {\r\n throw UploadError.validationError(validation.errors.join(\"; \"));\r\n }\r\n\r\n // Log warnings if any\r\n if (validation.warnings.length > 0) {\r\n console.warn(\"Validation warnings:\", validation.warnings);\r\n }\r\n }\r\n\r\n return method.apply(this, args);\r\n };\r\n };\r\n}\r\n\r\nexport default InputValidator;\r\n"]}