UNPKG

piconvert

Version:

Convert pictures to other formats. Supports ai, cdr, vsd, pdf, and more formats. GitHub Actions & CLI Tool.

2 lines (1 loc) 5.18 kB
"use strict";var B=Object.create;var x=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var D=Object.getOwnPropertyNames;var L=Object.getPrototypeOf,N=Object.prototype.hasOwnProperty;var T=(r,s)=>{for(var t in s)x(r,t,{get:s[t],enumerable:!0})},$=(r,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let i of D(s))!N.call(r,i)&&i!==t&&x(r,i,{get:()=>s[i],enumerable:!(e=U(s,i))||e.enumerable});return r};var b=(r,s,t)=>(t=r!=null?B(L(r)):{},$(s||!r||!r.__esModule?x(t,"default",{value:r,enumerable:!0}):t,r)),q=r=>$(x({},"__esModule",{value:!0}),r);var K={};T(K,{Converter:()=>h,default:()=>J});module.exports=q(K);var l=require("fs"),a=require("path"),z=b(require("events")),F=b(require("js-yaml"));var E=require("child_process"),O=b(require("sharp"));function _(r){var t;return r=(((t=r.split("."))==null?void 0:t.pop())||"").toLowerCase().trim(),{jpg:"jpeg"}[r]||r}var A=["jpeg","png","webp","gif","avif","tiff"],G=["svg","png","ps","eps","pdf","emf","wmf","xaml"];async function C(r,s,t,e,i=!1){s=_(s);let o=`svg -> ${s} ${t||""}x${e||""}`;i&&(console.log(`Normalized Type: ${s}`),console.time(o));let p;if(["svg"].includes(s))p=Buffer.from(r);else if(A.includes(s)){i&&console.log("Use: sharp");let n=(0,O.default)(Buffer.from(r));(t===null||t<=0)&&(t=null),(e===null||e<=0)&&(e=null),(t||e)&&n.resize(t,e),p=await n[s]().toBuffer()}else if(G.includes(s)){i&&console.log("Use: inkscape");let n=["--export-area-page",`--export-type ${s}`];t!==null&&t>0&&n.push(`--export-width ${t}`),e!==null&&e>0&&n.push(`--export-height ${e}`),p=(0,E.execSync)(`inkscape --pipe ${n.join(" ")} --export-filename -`,{input:r,stdio:"pipe"})}else throw new Error(`Unsupported file type: ${s}`);return i&&console.timeEnd(o),p}var I=require("child_process"),S=require("svgo");var H=["ai","cdr","vsd","pdf","jpg","jpeg","png","gif","bmp"];async function w(r,s=!1){let t=_(r),e=`${t} -> svg`;s&&(console.log(`Normalized Type: ${t}`),console.time(e));let i="";if(H.includes(t)){let p=(0,I.spawn)("inkscape",["--pipe","--export-plain-svg","--pdf-poppler","--export-type","svg","--export-filename","-",r]);p.stdout.on("data",n=>i+=n.toString()),await new Promise(n=>p.on("close",()=>n(i)))}else throw new Error(`Unsupported file type: ${t}`);let o=(0,S.optimize)(i,{multipass:!0});return s&&console.timeEnd(e),o.data}var h=class extends z.default{constructor(){super(...arguments);this.imports=[];this.exports={}}emit(t,...e){return super.emit(t,...e)}on(t,e){return super.on(t,e)}async convert(t,e,i,o,p=!1){this.emit("task-start",e,i,o);try{let n=(0,a.resolve)(i,`${(0,a.basename)(e.split(".").slice(0,-1).join("."))}${o.width||o.height?`.${o.width||""}x${o.height||""}`:""}.${o.format}`);if(o.force||!(0,l.existsSync)(n)){(0,l.existsSync)(i)||(0,l.mkdirSync)(i,{recursive:!0});let c=await C(t,o.format,o.width,o.height,p);(0,l.writeFileSync)(n,c),this.emit("task-succeeded",e,i,o)}else this.emit("task-skipped",e,i,o)}catch(n){p&&console.error(n),this.emit("task-failed",e,i,o)}}async convert_file(t,e,i,o=!1,p=!1){this.emit("file-start",t,e,i,o,p);let n=(0,a.resolve)((0,a.dirname)(t),t.split(".").slice(0,-1).join(".")),c=(0,l.existsSync)(n+".yml")?n+".yml":(0,l.existsSync)(n+".yaml")?n+".yaml":null,g=i;c&&(g=F.default.load((0,l.readFileSync)(c,"utf8")));let k=Object.keys(g),v=[];for(let u of k){let m=g[u];if(m)for(let f of m){let j=typeof f=="number"?f:parseInt(f.split("x")[0])||0,P=typeof f=="number"?f:parseInt(f.split("x")[1])||0;v.push({format:u,width:j,height:P,force:o})}else v.push({format:u,width:0,height:0,force:o})}let y=await w(t,p);for(let u of v)await this.convert(y,t,e,u,p);this.emit("file-finish",t,e,i,o,p)}async convert_directory(t,e,i,o,p=!1,n=!1,c=!0){this.emit("directory-start",t,e,i,o,p,n,c);let g=(0,l.readdirSync)(t),k=g.filter(m=>(0,l.statSync)((0,a.resolve)(t,m)).isFile()).filter(m=>{var f;return i.includes((f=m.split(".").pop())==null?void 0:f.toLowerCase())}),v=g.filter(m=>(0,l.statSync)((0,a.resolve)(t,m)).isDirectory()),y=(0,l.existsSync)((0,a.resolve)(t,"piconvert.yml"))?(0,a.resolve)(t,"piconvert.yml"):(0,l.existsSync)((0,a.resolve)(t,"piconvert.yaml"))?(0,a.resolve)(t,"piconvert.yaml"):(0,l.existsSync)((0,a.resolve)(t,".piconvert.yml"))?(0,a.resolve)(t,".piconvert.yml"):(0,l.existsSync)((0,a.resolve)(t,".piconvert.yaml"))?(0,a.resolve)(t,".piconvert.yaml"):null,u=o;y&&(u=F.default.load((0,l.readFileSync)(y,"utf8")));for(let m of k)await this.convert_file((0,a.resolve)(t,m),e,u,p,n);if(this.emit("directory-finish",t,e,i,o,p,n,c),c){let m=v.filter(f=>f[0]&&f[0]!==".").map(f=>(0,a.resolve)(t,f));for(let f of m)await this.convert_directory(f,(0,a.resolve)(e,(0,a.basename)(f)),i,u,p,n,c)}}export(t,e=null){return this.exports[t]=e,this}clear_exports(){return this.exports={},this}import(t){return this.imports.push(t),this}clear_imports(){return this.imports=[],this}async run(t,e,i=!0,o=!1,p=!1){t=(0,a.resolve)(t),e=(0,a.resolve)(e),this.emit("conversion-start",t,e),(0,l.existsSync)(t)&&((0,l.statSync)(t).isDirectory()?await this.convert_directory(t,e,this.imports,this.exports,o,p,i):await this.convert_file(t,e,this.exports,o,p)),this.emit("conversion-finish",t,e)}};var J=new h;0&&(module.exports={Converter});