UNPKG

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.86 kB
"use strict";var S=Object.create;var h=Object.defineProperty;var _=Object.getOwnPropertyDescriptor;var B=Object.getOwnPropertyNames;var C=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty;var G=(e,r)=>{for(var a in r)h(e,a,{get:r[a],enumerable:!0})},O=(e,r,a,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of B(r))!z.call(e,t)&&t!==a&&h(e,t,{get:()=>r[t],enumerable:!(s=_(r,t))||s.enumerable});return e};var c=(e,r,a)=>(a=e!=null?S(C(e)):{},O(r||!e||!e.__esModule?h(a,"default",{value:e,enumerable:!0}):a,e)),$=e=>O(h({},"__esModule",{value:!0}),e);var Q={};G(Q,{isValidPath:()=>b,registerServe:()=>D});module.exports=$(Q);var k=()=>typeof document>"u"?new URL(`file:${__filename}`).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href,l=k();var v=c(require("path")),U=c(require("sharp"));var x=require("fs/promises"),R=c(require("path")),T=require("url"),H=R.default.dirname((0,T.fileURLToPath)(l)),L=e=>R.default.join(H,"assets",e),V=L("noimage.jpg"),W=L("noavatar.png"),u={normal:async()=>(0,x.readFile)(V),avatar:async()=>(0,x.readFile)(W)},w=/^\/api\/v1\//,j=["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=c(require("path")),g=c(require("fs/promises")),A=c(require("axios"));var b=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,y=(i+o.default.sep).startsWith(f)||i===t,d=o.default.relative(t,i);return!d.startsWith("..")&&!o.default.isAbsolute(d)&&y}catch{return!1}},X=async(e,r="normal")=>{try{let a=await A.default.get(e,{responseType:"arraybuffer",timeout:5e3}),s=a.headers["content-type"]?.toLowerCase();return Object.values(I).includes(s??"")?Buffer.from(a.data):await u[r]()}catch{return await u[r]()}},F=async(e,r,a="normal")=>{if(!await b(r,e))return await u[a]();try{return await g.readFile(o.default.resolve(r,e))}catch{return await u[a]()}},N=(e,r,a,s="normal",t=w,i=[])=>{let n=new URL(e);if([a,`www.${a}`].includes(n.host)){let m=n.pathname.replace(t,"");return F(m,r,s)}else return i.includes(n.host)?X(e,s):u[s]()};var q=e=>({...{baseDir:"",idHandler:a=>a,getUserFolder:async()=>"",websiteURL:"",apiRegex:w,allowedNetworkList:[]},...e}),E=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 K=async(e,r,a,s)=>{try{let t=E(e.query),i=q(s),n,f=i.baseDir,m;if(t.userId){let p=typeof t.userId=="object"?String(Object.values(t.userId)[0]):String(t.userId);i.idHandler?m=i.idHandler(p):m=p}if(t.folder==="private"){let p=await i?.getUserFolder?.(e,m);p&&(f=p)}let y=j.includes(t?.format?.toLowerCase())?t?.format?.toLowerCase():"jpeg";t?.src?.startsWith("http")?n=await N(t?.src??"",f,i?.websiteURL??"",t?.type,i?.apiRegex,i?.allowedNetworkList):n=await F(t?.src??"",f,t?.type);let d=(0,U.default)(n);if(t?.width||t?.height){let p={width:t?.width??void 0,height:t?.height??void 0,fit:U.default.fit.cover};d=d.resize(p)}let M=await d.toFormat(y,{quality:t?.quality?Number(t?.quality):80}).toBuffer(),P=`${v.default.basename(t?.src??"",v.default.extname(t?.src??""))}.${y}`;r.type(I[y]),r.setHeader("Content-Disposition",`inline; filename="${P}"`),r.send(M)}catch(t){a(t)}},J=e=>async(r,a,s)=>K(r,a,s,e),D=J;0&&(module.exports={isValidPath,registerServe}); //# sourceMappingURL=index.js.map