@forward-software/gulp-sharp
Version:
Custom plugin for gulp toolkit to convert images using sharp library
2 lines (1 loc) • 3.36 kB
JavaScript
import t from"sharp";import{Transform as e}from"node:stream";import s from"node:tty";const r=s?.WriteStream?.prototype?.hasColors?.()??!1,n=(t,e)=>{if(!r)return t=>t;const s=`[${t}m`,n=`[${e}m`;return t=>{const e=t+"";let r=e.indexOf(n);if(-1===r)return s+e+n;let o=s,i=0;for(;-1!==r;)o+=e.slice(i,r)+s,i=r+n.length,r=e.indexOf(n,i);return o+=e.slice(i)+n,o}},o=n(31,39),i=n(36,39),a=new Set(["message","name","stack","__safety","_stack","plugin","showProperties","showStack","domain","domainEmitter","domainThrown"]),c=["fileName","lineNumber","message","name","plugin","showProperties","showStack","stack"];class p extends Error{constructor(t,e,s){super();const r=function(t,e,s){if("object"==typeof t)return{...t};s=e instanceof Error?{...s,error:e}:"object"==typeof e?{...e}:{...s,message:e};return s.plugin=t,{showStack:!1,showProperties:!0,...s}}(t,e,s);Object.assign(this,r),"object"==typeof r.error&&(this.message=r.error.message,this.stack=r.error.stack,this.cause=r.error.cause,Object.assign(this,r.error));for(const t of c)t in r&&(this[t]=r[t]);if(!this.stack){const t={toString:this._messageWithDetails.bind(this)+"\nStack:"};Error.captureStackTrace(t,this.constructor),this.__safety=t}if(!this.plugin)throw new Error("Missing plugin name");if(!this.message)throw new Error("Missing error message");e instanceof Error&&r.error.isPresentable&&(this.showStack=!1,this.showProperties=!1)}_messageWithDetails(){let t=`Message:\n ${this.message}`;const e=this._messageDetails();return e&&(t+=`\n${e}`),t}_messageDetails(){if(!this.showProperties)return"";const t=Object.keys(this).filter((t=>!a.has(t)));return t.length>0?`Details:\n${t.map((t=>` ${t}: ${this[t]}`)).join("\n")}`:""}toString(){const t=this.showStack?this.__safety?this.__safety.stack:this.stack:this._messageWithDetails();return e=t,`${o((s=this).name)} in plugin "${i(s.plugin)}"\n${e}`;var e,s}}function h(t,s){return r=e=>{if(e.isNull()||e.isDirectory())return Promise.resolve(e);if(e.isStream())return Promise.reject(new p(t,"Streaming not supported"));try{return s(e)}catch(s){return Promise.reject(new p(t,s,{fileName:e.path,showStack:!0}))}},new e({objectMode:!0,transform(t,e,s){r(t,e,this).then((t=>function(t,...e){try{return t(...e)}catch(t){}}(s,void 0,t))).catch(s)},flush(t){t()}});var r}const u=["avif","gif","jpg","jpeg","png","svg","tif","tiff","webp"];function f(t){const{extensions:e,...s}=t||{};return{supportedExtensions:new Set(e??u),sharpOptions:s}}function m(e){const{sharpOptions:s,supportedExtensions:r}=f(e);return h("gulp-sharp-webp",(async e=>r.has(e.extname.slice(1).toLowerCase())?(e.contents=await t(e.contents).webp(s).toBuffer(),e.extname=".webp",e):e))}function g(e){const{sharpOptions:s,supportedExtensions:r}=f(e);return h("gulp-sharp-png",(async e=>r.has(e.extname.slice(1).toLowerCase())?(e.contents=await t(e.contents).png(s).toBuffer(),e.extname=".png",e):e))}function l(e){const{sharpOptions:s,supportedExtensions:r}=f(e);return h("gulp-sharp-jpeg",(async e=>r.has(e.extname.slice(1).toLowerCase())?(e.contents=await t(e.contents).jpeg(s).toBuffer(),e.extname=".jpeg",e):e))}function w(e){const{sharpOptions:s,supportedExtensions:r}=f(e);return h("gulp-sharp-tiff",(async e=>r.has(e.extname.slice(1).toLowerCase())?(e.contents=await t(e.contents).tiff(s).toBuffer(),e.extname=".tiff",e):e))}export{l as jpeg,g as png,w as tiff,m as webp};