pixel-serve-server
Version:
A robust Node.js utility for handling and processing images. This package provides features like resizing, format conversion and etc.
2 lines • 3.79 kB
JavaScript
;var D=Object.create;var h=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,B=Object.prototype.hasOwnProperty;var _=(e,r)=>{for(var a in r)h(e,a,{get:r[a],enumerable:!0})},U=(e,r,a,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of S(r))!B.call(e,t)&&t!==a&&h(e,t,{get:()=>r[t],enumerable:!(s=M(r,t))||s.enumerable});return e};var y=(e,r,a)=>(a=e!=null?D(P(e)):{},U(r||!e||!e.__esModule?h(a,"default",{value:e,enumerable:!0}):a,e)),C=e=>U(h({},"__esModule",{value:!0}),e);var W={};_(W,{isValidPath:()=>R,registerServe:()=>A});module.exports=C(W);var z=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,m=z();var F=y(require("path")),v=y(require("sharp"));var x=require("fs/promises"),G=new URL("./assets/noimage.jpg",m).pathname,$=new URL("./assets/noavatar.png",m).pathname,c={normal:async()=>(0,x.readFile)(G),avatar:async()=>(0,x.readFile)($)},w=/^\/api\/v1\//,O=["jpeg","jpg","png","webp","gif","tiff","avif","svg"],I={jpeg:"image/jpeg",jpg:"image/jpeg",png:"image/png",webp:"image/webp",gif:"image/gif",tiff:"image/tiff",avif:"image/avif",svg:"image/svg+xml"};var o=y(require("path")),g=y(require("fs/promises")),L=y(require("axios"));var R=async(e,r)=>{try{if(!e||!r||r.includes("\0")||o.default.isAbsolute(r)||!/^[^\x00-\x1F]+$/.test(r))return!1;let a=o.default.resolve(e),s=o.default.resolve(a,r),[t,i]=await Promise.all([g.realpath(a),g.realpath(s)]);if(!(await g.stat(t)).isDirectory())return!1;let f=t+o.default.sep,u=(i+o.default.sep).startsWith(f)||i===t,d=o.default.relative(t,i);return!d.startsWith("..")&&!o.default.isAbsolute(d)&&u}catch{return!1}},k=async(e,r="normal")=>{try{let a=await L.default.get(e,{responseType:"arraybuffer",timeout:5e3}),s=a.headers["content-type"]?.toLowerCase();return Object.values(I).includes(s??"")?Buffer.from(a.data):await c[r]()}catch{return await c[r]()}},b=async(e,r,a="normal")=>{if(!await R(r,e))return await c[a]();try{return await g.readFile(o.default.resolve(r,e))}catch{return await c[a]()}},T=(e,r,a,s="normal",t=w,i=[])=>{let n=new URL(e);if([a,`www.${a}`].includes(n.host)){let p=n.pathname.replace(t,"");return b(p,r,s)}else return i.includes(n.host)?k(e,s):c[s]()};var j=e=>({...{baseDir:"",idHandler:a=>a,getUserFolder:async()=>"",websiteURL:"",apiRegex:w,allowedNetworkList:[]},...e}),N=e=>({...{quality:80,format:"jpeg",src:"/placeholder/noimage.jpg",folder:"public",type:"normal",width:void 0,height:void 0,userId:void 0},...e,quality:e.quality?Math.min(Math.max(Number(e.quality)||80,1),100):100,width:e.width?Math.min(Math.max(Number(e.width),50),2e3):void 0,height:e.height?Math.min(Math.max(Number(e.height),50),2e3):void 0});var H=async(e,r,a,s)=>{try{let t=N(e.query),i=j(s),n,f=i.baseDir,p;if(t.userId){let l=typeof t.userId=="object"?String(Object.values(t.userId)[0]):String(t.userId);i.idHandler?p=i.idHandler(l):p=l}if(t.folder==="private"){let l=await i?.getUserFolder?.(e,p);l&&(f=l)}let u=O.includes(t?.format?.toLowerCase())?t?.format?.toLowerCase():"jpeg";t?.src?.startsWith("http")?n=await T(t?.src??"",f,i?.websiteURL??"",t?.type,i?.apiRegex,i?.allowedNetworkList):n=await b(t?.src??"",f,t?.type);let d=(0,v.default)(n);if(t?.width||t?.height){let l={width:t?.width??void 0,height:t?.height??void 0,fit:v.default.fit.cover};d=d.resize(l)}let q=await d.toFormat(u,{quality:t?.quality?Number(t?.quality):80}).toBuffer(),E=`${F.default.basename(t?.src??"",F.default.extname(t?.src??""))}.${u}`;r.type(I[u]),r.setHeader("Content-Disposition",`inline; filename="${E}"`),r.send(q)}catch(t){a(t)}},V=e=>async(r,a,s)=>H(r,a,s,e),A=V;0&&(module.exports={isValidPath,registerServe});
//# sourceMappingURL=index.js.map