UNPKG

@bonhomie/cloudinary-super-uploader

Version:

A powerful React + Node Cloudinary toolkit with drag & drop, browser compression, EXIF checks, duplicate detection, signed uploads, and more.

2 lines (1 loc) 3.19 kB
var _=Object.defineProperty;var f=(t,e)=>{for(var r in e)_(t,r,{get:e[r],enumerable:!0})};var S={};f(S,{default:()=>g});import k from"crypto";function g(t,e){try{let r=Object.keys(t).sort().map(i=>`${i}=${t[i]}`).join("&");return{success:!0,signature:k.createHash("sha256").update(r+e).digest("hex")}}catch(r){return{success:!1,error:r.message}}}var j={};f(j,{default:()=>d});import b from"cloudinary";async function d(t,e={}){let{cloud_name:r,api_key:o,api_secret:i,folder:m="uploads",public_id:n,useSigned:a=!1,transformation:s={},tags:h=[],resource_type:w="image"}=e;try{b.v2.config({cloud_name:r,api_key:o,api_secret:i});let u={folder:m,public_id:n,tags:h,resource_type:w,transformation:s};if(a){let p=Math.floor(Date.now()/1e3),x={timestamp:p,folder:m,public_id:n,...s},l=g(x,i);if(!l.success)throw new Error(l.error);u={...u,timestamp:p,signature:l.signature,api_key:o}}let c=await b.v2.uploader.upload(t,u);return{success:!0,data:{url:c.secure_url,publicId:c.public_id,width:c.width,height:c.height,size:c.bytes,format:c.format,folder:c.folder,etag:c.etag}}}catch(u){return{success:!1,error:u.message}}}var v={};f(v,{default:()=>D});async function D(t,e={}){try{return{success:!0,data:await Promise.all(t.map(async o=>{let i=await d(o,e);return{file:o,...i}}))}}catch(r){return{success:!1,error:r.message}}}var F={};f(F,{default:()=>y});import I from"fs";import E from"exif-parser";function y(t){try{let e=I.readFileSync(t);return{success:!0,data:E.create(e).parse().tags}}catch(e){return{success:!1,error:e.message}}}var z={};f(z,{default:()=>O});import M from"sharp";async function O(t,e,r={}){let{quality:o=80,maxWidth:i=2e3,maxHeight:m=2e3,format:n="jpeg",removeMetadata:a=!0}=r;try{let s=M(t).rotate();return s=s.resize({width:i,height:m,fit:"inside",withoutEnlargement:!0}),a&&(s=s.withMetadata({exif:!1})),n==="jpeg"&&(s=s.jpeg({quality:o})),n==="png"&&(s=s.png({quality:o})),n==="webp"&&(s=s.webp({quality:o})),await s.toFile(e),{success:!0,output:e}}catch(s){return{success:!1,error:s.message}}}var q={};f(q,{hashPHash:()=>$,hashSHA256:()=>W});import A from"fs";import B from"crypto";import{imageHash as T}from"image-hash";function W(t){try{let e=A.readFileSync(t);return{success:!0,hash:B.createHash("sha256").update(e).digest("hex")}}catch(e){return{success:!1,error:e.message}}}async function $(t){try{return new Promise((e,r)=>{T(t,16,!0,(o,i)=>{o?r({success:!1,error:o.message}):e({success:!0,hash:i})})})}catch(e){return{success:!1,error:e.message}}}var P={};f(P,{default:()=>H});import N from"sharp";async function H(t,e={}){let{minWidth:r=600,minHeight:o=600,maxAgeDays:i=365,minBrightness:m=20,minSharpness:n=15}=e;try{let a=await N(t).metadata(),s=a.width>=r&&a.height>=o,h=(a==null?void 0:a.brightness)||null,w=h?h>=m:!0,u=a!=null&&a.sharpness?a.sharpness>=n:!0,c=y(t),p=!0;if(c.success&&c.data.DateTimeOriginal){let x=new Date(c.data.DateTimeOriginal*1e3);p=(Date.now()-x.getTime())/(1e3*3600*24)<=i}return{success:!0,data:{resolutionOk:s,brightnessOk:w,sharpnessOk:u,ageOk:p,width:a.width,height:a.height,exif:c.data||{}}}}catch(a){return{success:!1,error:a.message}}}export{f as a,S as b,d as c,j as d,D as e,v as f,F as g,z as h,W as i,$ as j,q as k,P as l};