UNPKG

yq-pdf

Version:

High-performance PDF manipulation library with native processing capabilities. Supports encryption, decryption, merging, splitting, watermarking, optimization, and comprehensive PDF operations with both file and buffer support.

2 lines (1 loc) 14.5 kB
var Hk=Object.create;var{getPrototypeOf:Jk,defineProperty:y,getOwnPropertyNames:B,getOwnPropertyDescriptor:Lk}=Object,T=Object.prototype.hasOwnProperty;var w=(z,k,$)=>{$=z!=null?Hk(Jk(z)):{};let M=k||!z||!z.__esModule?y($,"default",{value:z,enumerable:!0}):$;for(let K of B(z))if(!T.call(M,K))y(M,K,{get:()=>z[K],enumerable:!0});return M},I=new WeakMap,Qk=(z)=>{var k=I.get(z),$;if(k)return k;if(k=y({},"__esModule",{value:!0}),z&&typeof z==="object"||typeof z==="function")B(z).map((M)=>!T.call(k,M)&&y(k,M,{get:()=>z[M],enumerable:!($=Lk(z,M))||$.enumerable}));return I.set(z,k),k};var Xk=(z,k)=>{for(var $ in k)y(z,$,{get:k[$],enumerable:!0,configurable:!0,set:(M)=>k[$]=()=>M})};var Vk={};Xk(Vk,{validatePDF:()=>o,splitPDF:()=>s,setMetadata:()=>Mk,rotatePDF:()=>O,resizePDF:()=>Uk,removeWatermarks:()=>r,removeAttachments:()=>zk,optimizePDF:()=>u,mergePDFs:()=>n,listPageMode:()=>Kk,listPageLayout:()=>Ek,getProperties:()=>Sk,getPDFInfo:()=>a,extractPages:()=>i,extractImages:()=>p,extractFonts:()=>t,extractAttachments:()=>kk,encryptPDF:()=>l,dumpObject:()=>Wk,decryptPDF:()=>h,cropPDF:()=>Ck,addWatermark:()=>e,addAttachments:()=>$k,YqPDF:()=>N});module.exports=Qk(Vk);var m=require("child_process");var F=require("node:crypto"),Y=require("node:fs"),c=require("node:fs/promises"),R=w(require("node:path")),f=w(require("node:os"));async function L(z){try{await c.access(z,Y.constants.F_OK)}catch{throw new Error(`File not found: ${z}`)}}function d(z){if(typeof z==="number")return z.toString();if(typeof z==="string")return z;if(Array.isArray(z))return z.join(",");return"1"}function Z(z=".pdf"){return R.default.join(f.default.tmpdir(),`${F.randomUUID()}${z}`)}async function j(z){let k=Z();return Y.writeFileSync(k,z),k}async function V(z){return Y.readFileSync(z)}function X(z){try{if(Y.existsSync(z))Y.unlinkSync(z)}catch{}}var P=require("url"),_=require("node:path"),v=require("node:fs"),Zk=P.fileURLToPath(import.meta.url),g=_.dirname(Zk),Dk=jk();function jk(){let k=["yq-pdf-windows-arm64.exe","yq-pdf-windows-amd64.exe","yq-pdf-windows-386.exe","yq-pdf-openbsd-amd64","yq-pdf-linux-arm64","yq-pdf-linux-arm","yq-pdf-linux-amd64","yq-pdf-linux-386","yq-pdf-freebsd-amd64","yq-pdf-darwin-arm64","yq-pdf-darwin-amd64"];for(let $ of k){let M=_.resolve(g,"scripts",$);if(v.existsSync(M))return M;if(M=_.resolve(g,$),v.existsSync(M))return M;if(M=_.resolve(process.cwd(),$),v.existsSync(M))return M}throw new Error("Could not find the yq-pdf binary. This is required for PDF operations. Please ensure the binary is installed in the correct location and matches your system architecture. Expected locations: /scripts directory or root directory")}class N{timeout;constructor(z=30000){this.timeout=z}async executeCommand(z){return new Promise((k)=>{let $=m.spawn(Dk,[...z],{stdio:["pipe","pipe","pipe"],timeout:this.timeout}),M="",K="";$.stdout.on("data",(S)=>{M+=S.toString()}),$.stderr.on("data",(S)=>{K+=S.toString()}),$.on("close",(S)=>{if(S!==0){k({success:!1,error:K||`Process exited with code ${S}`});return}try{let E=JSON.parse(M.trim());k(E)}catch{k({success:!0,message:M.trim()})}}),$.on("error",(S)=>{k({success:!1,error:S.message})})})}async encrypt(z,k,$,M){let K=null,S=null,E=!1;try{let W;if(Buffer.isBuffer(z))K=await j(z),W=K;else await L(z),W=z;let C,G,U;if(typeof k==="string")if(C=k,typeof $==="string")if(M)G=$,U=M;else if($.includes(".")||$.includes("/")||$.includes("\\"))U=$;else G=$,E=!0;else E=!0;else if(C=k.userPassword,G=k.ownerPassword,"output"in k)U=k.output;else E=!0;if(E)S=Z(),U=S;let J=["encrypt",W,U,C];if(G)J.push(G);let Q=await this.executeCommand(J);if(E){if(!Q.success)throw new Error(Q.error||"yq-pdf: encryption failed");return await V(U)}else return Q}catch(W){if(E)throw W;return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}finally{if(K)X(K);if(S)X(S)}}async decrypt(z,k,$){let M=null,K=null,S=!1;try{let E;if(Buffer.isBuffer(z))M=await j(z),E=M;else await L(z),E=z;let W,C;if(typeof k==="string")if(W=k,$)C=$;else S=!0;else if(W=k.password,"output"in k)C=k.output;else S=!0;if(S)K=Z(),C=K;let G=["decrypt",E,C,W],U=await this.executeCommand(G);if(S){if(!U.success)throw new Error(U.error||"yq-pdf: decryption failed");return await V(C)}else return U}catch(E){if(S)throw E;return{success:!1,error:E instanceof Error?E.message:"Unknown error"}}finally{if(M)X(M);if(K)X(K)}}async merge(z,k,...$){try{let M=Array.isArray(k)?k:[k,...$];for(let S of M)await L(S);let K=["merge",z,...M];return await this.executeCommand(K)}catch(M){return{success:!1,error:M instanceof Error?M.message:"Unknown error"}}}async split(z,k,$){try{await L(z);let M=typeof $==="number"?$:$.span,K=["split",z,k,M.toString()];return await this.executeCommand(K)}catch(M){return{success:!1,error:M instanceof Error?M.message:"Unknown error"}}}async extract(z,k,$){try{await L(z);let M;if(typeof $==="object"&&"pageRange"in $)M=$.pageRange;else M=d($);let K=["extract",z,k,M];return await this.executeCommand(K)}catch(M){return{success:!1,error:M instanceof Error?M.message:"Unknown error"}}}async rotate(z,k,$,M){let K=null,S=null,E=!1;try{let W;if(Buffer.isBuffer(z))K=await j(z),W=K;else await L(z),W=z;let C,G,U;if(typeof k==="number")if(C=k,$)if(M)G=$,U=M;else if($.includes(".")||$.includes("/")||$.includes("\\"))U=$;else G=$,E=!0;else E=!0;else if(C=k.rotation,G=k.pageRange,"output"in k)U=k.output;else E=!0;if(E)S=Z(),U=S;let J=["rotate",W,U,C.toString()],Q=G||"1-";J.push(Q);let D=await this.executeCommand(J);if(E){if(!D.success)throw new Error(D.error||"yq-pdf: rotation failed");return await V(U)}else return D}catch(W){if(E)throw W;return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}finally{if(K)X(K);if(S)X(S)}}async info(z){try{await L(z);let k=["info",z];return await this.executeCommand(k)}catch(k){return{success:!1,error:k instanceof Error?k.message:"Unknown error"}}}async validate(z,k){try{await L(z);let $;if(typeof k==="string")$=k;else if(k&&"mode"in k)$=k.mode;let M=["validate",z];if($)M.push($);return await this.executeCommand(M)}catch($){return{success:!1,error:$ instanceof Error?$.message:"Unknown error"}}}async optimize(z,k){let $=null,M=null,K=!1;try{let S;if(Buffer.isBuffer(z))$=await j(z),S=$;else await L(z),S=z;let E;if(!k)K=!0,M=Z(),E=M;else if(typeof k==="string")E=k;else E=k.output;let W=["optimize",S,E],C=await this.executeCommand(W);if(K){if(!C.success)throw new Error(C.error||"yq-pdf: optimization failed");return await V(E)}else return C}catch(S){if(K)throw S;return{success:!1,error:S instanceof Error?S.message:"Unknown error"}}finally{if($)X($);if(M)X(M)}}async watermark(z,k,$,M){let K=null,S=null,E=!1;try{let W;if(Buffer.isBuffer(z))K=await j(z),W=K;else await L(z),W=z;let C,G,U;if(typeof k==="string")if(C=k,$)if(M)G=$,U=M;else if($.includes(".")||$.includes("/")||$.includes("\\"))U=$;else G=$,E=!0;else E=!0;else if(C=k.text,G=k.pageRange,"output"in k)U=k.output;else E=!0;if(E)S=Z(),U=S;let J=["watermark",W,U,C],Q=G||"1-";J.push(Q);let D=await this.executeCommand(J);if(E){if(!D.success)throw new Error(D.error||"yq-pdf: watermarking failed");return await V(U)}else return D}catch(W){if(E)throw W;return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}finally{if(K)X(K);if(S)X(S)}}async removeWatermarks(z,k={}){let $=null,M=null,K=!k.output;try{let S;if(Buffer.isBuffer(z))$=await j(z),S=$;else await L(z),S=z;let E;if(K)M=Z(),E=M;else E=k.output;let W=["remove-watermarks",S,E],C=k.pageRange||"1-";W.push(C);let G=await this.executeCommand(W);if(K){if(!G.success)throw new Error(G.error||"yq-pdf: remove watermarks failed");return await V(E)}else return G}catch(S){if(K)throw S;return{success:!1,error:S instanceof Error?S.message:"Unknown error"}}finally{if($)X($);if(M)X(M)}}async extractImages(z,k,$){try{await L(z);let M;if(typeof $==="string")M=$;else if($&&"pageRange"in $)M=$.pageRange;let K=["extract-images",z,k],S=M||"1-";return K.push(S),await this.executeCommand(K)}catch(M){return{success:!1,error:M instanceof Error?M.message:"Unknown error"}}}async extractFonts(z,k,$){try{await L(z);let M;if(typeof $==="string")M=$;else if($&&"pageRange"in $)M=$.pageRange;let K=["extract-fonts",z,k],S=M||"1-";return K.push(S),await this.executeCommand(K)}catch(M){return{success:!1,error:M instanceof Error?M.message:"Unknown error"}}}async extractAttachments(z,k){try{await L(z);let $=["extract-attachments",z,k];return await this.executeCommand($)}catch($){return{success:!1,error:$ instanceof Error?$.message:"Unknown error"}}}async addAttachments(z,k,$,...M){let K=null,S=null,E=!1;try{let W;if(Buffer.isBuffer(z))K=await j(z),W=K;else await L(z),W=z;let C,G;if(!k)throw new Error("yq-pdf: at least one attachment path is required");if(typeof k==="string")if($)C=k,G=Array.isArray($)?$:[$,...M];else E=!0,S=Z(),C=S,G=[k];else if(Array.isArray(k))E=!0,S=Z(),C=S,G=k;else{if(C=k.output,!$)throw new Error("yq-pdf: at least one attachment path is required");G=Array.isArray($)?$:[$,...M]}for(let Q of G)await L(Q);let U=["add-attachments",W,C,...G],J=await this.executeCommand(U);if(E){if(!J.success)throw new Error(J.error||"yq-pdf: add attachments failed");return await V(C)}else return J}catch(W){if(E)throw W;return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}finally{if(K)X(K);if(S)X(S)}}async removeAttachments(z,k,$){let M=null,K=null,S=!1;try{let E;if(Buffer.isBuffer(z))M=await j(z),E=M;else await L(z),E=z;let W,C=[];if(!k)S=!0,K=Z(),W=K;else if(typeof k==="string")if($!==void 0)W=k,C=$||[];else if(k.includes(".")&&(k.includes("/")||k.includes("\\")))W=k;else S=!0,K=Z(),W=K,C=[k];else if(Array.isArray(k))S=!0,K=Z(),W=K,C=k;else W=k.output,C=k.fileNames||[];let G=["remove-attachments",E,W,...C],U=await this.executeCommand(G);if(S){if(!U.success)throw new Error(U.error||"yq-pdf: remove attachments failed");return await V(W)}else return U}catch(E){if(S)throw E;return{success:!1,error:E instanceof Error?E.message:"Unknown error"}}finally{if(M)X(M);if(K)X(K)}}async setMetadata(z,k,$,M,K){let S=null,E=null,W=!1;try{let C;if(Buffer.isBuffer(z))S=await j(z),C=S;else await L(z),C=z;let G,U;if(typeof k==="string"&&(k.includes(".")||k.includes("/")||k.includes("\\"))&&$)if(G=k,typeof $==="string"){if(U=[`title:${$}`],M)U.push(`author:${M}`);if(K)U.push(`subject:${K}`)}else{if(U=[],$.title)U.push(`title:${$.title}`);if($.author)U.push(`author:${$.author}`);if($.subject)U.push(`subject:${$.subject}`);if($.keywords)U.push(`keywords:${$.keywords}`);if($.creator)U.push(`creator:${$.creator}`);if($.producer)U.push(`producer:${$.producer}`)}else if(W=!0,E=Z(),G=E,typeof k==="string"){if(U=[`title:${k}`],typeof $==="string"){if(U.push(`author:${$}`),M)U.push(`subject:${M}`)}}else{if(U=[],k.title)U.push(`title:${k.title}`);if(k.author)U.push(`author:${k.author}`);if(k.subject)U.push(`subject:${k.subject}`);if(k.keywords)U.push(`keywords:${k.keywords}`);if(k.creator)U.push(`creator:${k.creator}`);if(k.producer)U.push(`producer:${k.producer}`)}let J=["set-metadata",C,G,...U],Q=await this.executeCommand(J);if(W){if(!Q.success)throw new Error(Q.error||"yq-pdf: set metadata failed");return await V(G)}else return Q}catch(C){if(W)throw C;return{success:!1,error:C instanceof Error?C.message:"Unknown error"}}finally{if(S)X(S);if(E)X(E)}}async properties(z){try{await L(z);let k=["properties",z];return await this.executeCommand(k)}catch(k){return{success:!1,error:k instanceof Error?k.message:"Unknown error"}}}async dump(z,k){try{await L(z);let $=["dump",z,k];return await this.executeCommand($)}catch($){return{success:!1,error:$ instanceof Error?$.message:"Unknown error"}}}async listPageLayout(z){try{await L(z);let k=["list-page-layout",z];return await this.executeCommand(k)}catch(k){return{success:!1,error:k instanceof Error?k.message:"Unknown error"}}}async listPageMode(z){try{await L(z);let k=["list-page-mode",z];return await this.executeCommand(k)}catch(k){return{success:!1,error:k instanceof Error?k.message:"Unknown error"}}}async resize(z,k,$,M,K){try{await L(z);let S,E,W;if(typeof $==="number")S=$,E=M,W=K;else S=$.width,E=$.height,W=$.pageRange;let C=["resize",z,k,S.toString(),E.toString()];if(W)C.push(W);return await this.executeCommand(C)}catch(S){return{success:!1,error:S instanceof Error?S.message:"Unknown error"}}}async resizePDF(z,k,$,M){let K=null,S=null,E=!1;try{let W;if(Buffer.isBuffer(z))K=await j(z),W=K;else await L(z),W=z;let C,G,U,J;if(typeof k==="number")if(C=k,G=$,M)if(U=M.pageRange,"output"in M)J=M.output;else E=!0;else E=!0;else if(C=k.width,G=k.height,U=k.pageRange,"output"in k)J=k.output;else E=!0;if(E)S=Z(),J=S;let Q=["resize",W,J,C.toString(),G.toString()],D=U||"1-";Q.push(D);let q=await this.executeCommand(Q);if(E){if(!q.success)throw new Error(q.error||"yq-pdf: resize failed");return await V(J)}else return q}catch(W){if(E)throw W;return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}finally{if(K)X(K);if(S)X(S)}}async crop(z,k,$,M,K,S,E){try{await L(z);let W,C,G,U,J;if(typeof $==="number")W=$,C=M,G=K,U=S,J=E;else W=$.x,C=$.y,G=$.width,U=$.height,J=$.pageRange;let Q=["crop",z,k,W.toString(),C.toString(),G.toString(),U.toString()],D=J||"1-";return Q.push(D),await this.executeCommand(Q)}catch(W){return{success:!1,error:W instanceof Error?W.message:"Unknown error"}}}async cropPDF(z,k,$,M,K,S){let E=null,W=null,C=!1;try{let G;if(Buffer.isBuffer(z))E=await j(z),G=E;else await L(z),G=z;let U,J,Q,D,q,b;if(typeof k==="number")if(U=k,J=$,Q=M,D=K,S)if(q=S.pageRange,"output"in S)b=S.output;else C=!0;else C=!0;else if(U=k.x,J=k.y,Q=k.width,D=k.height,q=k.pageRange,"output"in k)b=k.output;else C=!0;if(C)W=Z(),b=W;let A=["crop",G,b,U.toString(),J.toString(),Q.toString(),D.toString()],Gk=q||"1-";A.push(Gk);let x=await this.executeCommand(A);if(C){if(!x.success)throw new Error(x.error||"yq-pdf: crop failed");return await V(b)}else return x}catch(G){if(C)throw G;return{success:!1,error:G instanceof Error?G.message:"Unknown error"}}finally{if(E)X(E);if(W)X(W)}}}var H=new N,l=H.encrypt.bind(H),h=H.decrypt.bind(H),n=H.merge.bind(H),s=H.split.bind(H),i=H.extract.bind(H),O=H.rotate.bind(H),a=H.info.bind(H),o=H.validate.bind(H),u=H.optimize.bind(H),e=H.watermark.bind(H),r=H.removeWatermarks.bind(H),p=H.extractImages.bind(H),t=H.extractFonts.bind(H),kk=H.extractAttachments.bind(H),$k=H.addAttachments.bind(H),zk=H.removeAttachments.bind(H),Mk=H.setMetadata.bind(H),Sk=H.properties.bind(H),Wk=H.dump.bind(H),Ek=H.listPageLayout.bind(H),Kk=H.listPageMode.bind(H),Uk=H.resizePDF.bind(H),Ck=H.cropPDF.bind(H);