@jacktea/pdf-viewer-core 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ function z(n){return n.type==="url"?{type:"url",url:n.url}:{type:"data"}}function he(n){return n===1?"need-password":n===2?"incorrect-password":"unknown"}function ge(n){return!!n&&typeof n=="object"&&"promise"in n}function ye(n,e){return async t=>{let o=typeof e=="function"?e():e,r={};if(t.type==="url")r.url=t.url,t.headers&&(r.httpHeaders=t.headers);else{let i=t.data;i instanceof Uint8Array?r.data=new Uint8Array(i):i instanceof ArrayBuffer?r.data=new Uint8Array(i).slice(0):r.data=i}o?.cMapUrl&&(r.cMapUrl=o.cMapUrl,r.cMapPacked=o.cMapPacked??!0),o?.standardFontDataUrl&&(r.standardFontDataUrl=o.standardFontDataUrl),o?.wasmUrl&&(r.wasmUrl=o.wasmUrl),o?.password&&(r.password=o.password);let a=n(r);if(ge(a)&&a.promise){let i=!1;return o?.onPasswordRequest&&(a.onPassword=(d,c)=>{Promise.resolve(o.onPasswordRequest?.(he(c))).then(u=>{if(typeof u=="string"){d(u);return}i=!0,a.destroy?.()}).catch(()=>{i=!0,a.destroy?.()})}),a.promise.catch(d=>{throw i?new Error(o?.passwordCancelErrorMessage??"Password entry was cancelled."):d})}return a}}var g=class{constructor(e){this.order=Array.from({length:e},(t,o)=>o)}getPageCount(){return this.order.length}getOrder(){return[...this.order]}deletePage(e){if(!Number.isFinite(e)||this.order.length===0)return;let t=k(Math.floor(e),0,this.order.length-1),[o]=this.order.splice(t,1);if(o!==void 0)return{visibleIndex:t,sourceIndex:o}}insertPage(e,t){if(!Number.isFinite(e))return;let o=k(Math.floor(e),0,this.order.length);this.order.splice(o,0,t)}movePage(e,t){if(!Number.isFinite(e)||!Number.isFinite(t)||this.order.length<=1)return;let o=k(Math.floor(e),0,this.order.length-1),[r]=this.order.splice(o,1);if(r===void 0)return;let a=k(Math.floor(t),0,this.order.length);if(this.order.splice(a,0,r),o!==a)return{from:o,to:a}}};function k(n,e,t){return Math.max(e,Math.min(t,n))}function be(n,e){let t=w(n,s.__wbindgen_malloc),o=l,r=G(e,s.__wbindgen_malloc,s.__wbindgen_realloc),a=l,i=s.embed_watermark_wasm(t,o,r,a);if(i[3])throw b(i[2]);var d=q(i[0],i[1]).slice();return s.__wbindgen_free(i[0],i[1]*1,1),d}function j(n,e){let t=w(n,s.__wbindgen_malloc),o=l,r=xe(e,s.__wbindgen_malloc),a=l,i=s.extract_pages_wasm(t,o,r,a);if(i[3])throw b(i[2]);var d=q(i[0],i[1]).slice();return s.__wbindgen_free(i[0],i[1]*1,1),d}function ve(n){let e=w(n,s.__wbindgen_malloc),t=l,o=s.get_page_count_wasm(e,t);if(o[2])throw b(o[1]);return o[0]>>>0}function Ae(n){let e=w(n,s.__wbindgen_malloc),t=l,o=s.read_pdf_data_wasm(e,t);if(o[2])throw b(o[1]);return b(o[0])}function Se(n,e){let t=w(n,s.__wbindgen_malloc),o=l,r=G(e,s.__wbindgen_malloc,s.__wbindgen_realloc),a=l,i=s.write_pdf_data_wasm(t,o,r,a);if(i[3])throw b(i[2]);var d=q(i[0],i[1]).slice();return s.__wbindgen_free(i[0],i[1]*1,1),d}function Pe(){return{__proto__:null,"./pdf_tools_bg.js":{__proto__:null,__wbg___wbindgen_throw_be289d5034ed271b:function(e,t){throw new Error(H(e,t))},__wbg_error_7534b8e9a36f1ab4:function(e,t){let o,r;try{o=e,r=t,console.error(H(e,t))}finally{s.__wbindgen_free(o,r,1)}},__wbg_log_6b5ca2e6124b2808:function(e){console.log(e)},__wbg_new_8a6f238a6ece86ea:function(){return new Error},__wbg_stack_0ed75d68575b0f3c:function(e,t){let o=t.stack,r=G(o,s.__wbindgen_malloc,s.__wbindgen_realloc),a=l;oe().setInt32(e+4,a,!0),oe().setInt32(e+0,r,!0)},__wbindgen_cast_0000000000000001:function(e,t){return H(e,t)},__wbindgen_init_externref_table:function(){let e=s.__wbindgen_externrefs,t=e.grow(4);e.set(0,void 0),e.set(t+0,void 0),e.set(t+1,null),e.set(t+2,!0),e.set(t+3,!1)}}}}function q(n,e){return n=n>>>0,y().subarray(n/1,n/1+e)}var f=null;function oe(){return(f===null||f.buffer.detached===!0||f.buffer.detached===void 0&&f.buffer!==s.memory.buffer)&&(f=new DataView(s.memory.buffer)),f}function H(n,e){return n=n>>>0,Te(n,e)}var A=null;function we(){return(A===null||A.byteLength===0)&&(A=new Uint32Array(s.memory.buffer)),A}var S=null;function y(){return(S===null||S.byteLength===0)&&(S=new Uint8Array(s.memory.buffer)),S}function xe(n,e){let t=e(n.length*4,4)>>>0;return we().set(n,t/4),l=n.length,t}function w(n,e){let t=e(n.length*1,1)>>>0;return y().set(n,t/1),l=n.length,t}function G(n,e,t){if(t===void 0){let d=P.encode(n),c=e(d.length,1)>>>0;return y().subarray(c,c+d.length).set(d),l=d.length,c}let o=n.length,r=e(o,1)>>>0,a=y(),i=0;for(;i<o;i++){let d=n.charCodeAt(i);if(d>127)break;a[r+i]=d}if(i!==o){i!==0&&(n=n.slice(i)),r=t(r,o,o=i+n.length*3,1)>>>0;let d=y().subarray(r+i,r+o),c=P.encodeInto(n,d);i+=c.written,r=t(r,o,i,1)>>>0}return l=i,r}function b(n){let e=s.__wbindgen_externrefs.get(n);return s.__externref_table_dealloc(n),e}var E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});E.decode();var Ce=2146435072,V=0;function Te(n,e){return V+=e,V>=Ce&&(E=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),E.decode(),V=e),E.decode(y().subarray(n,n+e))}var P=new TextEncoder;"encodeInto"in P||(P.encodeInto=function(n,e){let t=P.encode(n);return e.set(t),{read:n.length,written:t.length}});var l=0,_e,s;function Me(n,e){return s=n.exports,_e=e,f=null,A=null,S=null,s.__wbindgen_start(),s}async function De(n,e){if(typeof Response=="function"&&n instanceof Response){if(typeof WebAssembly.instantiateStreaming=="function")try{return await WebAssembly.instantiateStreaming(n,e)}catch(r){if(n.ok&&t(n.type)&&n.headers.get("Content-Type")!=="application/wasm")console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",r);else throw r}let o=await n.arrayBuffer();return await WebAssembly.instantiate(o,e)}else{let o=await WebAssembly.instantiate(n,e);return o instanceof WebAssembly.Instance?{instance:o,module:n}:o}function t(o){switch(o){case"basic":case"cors":case"default":return!0}return!1}}async function re(n){if(s!==void 0)return s;n!==void 0&&(Object.getPrototypeOf(n)===Object.prototype?{module_or_path:n}=n:console.warn("using deprecated parameters for the initialization function; pass a single object instead")),n===void 0&&(n=new URL("pdf_tools_bg.wasm",import.meta.url));let e=Pe();(typeof n=="string"||typeof Request=="function"&&n instanceof Request||typeof URL=="function"&&n instanceof URL)&&(n=fetch(n));let{instance:t,module:o}=await De(await n,e);return Me(t,o)}var ie=!1,O=null;async function mt(){if(!ie)return O||(O=(async()=>{await re(),ie=!0})(),O)}async function K(n,e){try{let t=new Uint32Array(e);return j(n,t)}catch(t){throw new Error(`Failed to export pages: ${t}`)}}var Re="Untitled";async function $(n){if(!n.getOutline)return[];try{let e=await n.getOutline();return!e||e.length===0?[]:await ae(e,n)}catch{return[]}}async function ae(n,e){let t=[];for(let o of n){let r=Ie(o),a=await ke(o,e),i=await Ue(o,e);t.push({title:r,pageIndex:a,children:i})}return t}async function Ue(n,e){return n.items?.length?await ae(n.items,e):[]}function Ie(n){return n.title?.trim()||Re}async function ke(n,e){if(!n.dest)return;let t=await Ee(n,e);if(Oe(t))return Le(t,e)}async function Ee(n,e){if(typeof n.dest!="string")return n.dest;if(e.getDestination)return await e.getDestination(n.dest)}function Oe(n){return Array.isArray(n)&&n.length>0}async function Le(n,e){let t=n[0];if(!(!t||!e.getPageIndex))try{let o=await e.getPageIndex(t);return Number.isFinite(o)?o:void 0}catch{return}}async function X(n,e={}){let t=e.scale??1,o=n.numPages??0,r=[];for(let a=0;a<o;a+=1){let i=await We(n,a,t);r.push(i)}return r}async function We(n,e,t){try{let o=await n.getPage(e+1);if(!o?.getViewport)return se(e,t);let r=o.rotate??0,a=o.getViewport({scale:t,rotation:r});return{pageIndex:e,width:a.width,height:a.height,viewportScale:t,rotation:r}}catch{return se(e,t)}}function se(n,e){return{pageIndex:n,width:0,height:0,viewportScale:e,rotation:0}}var x=class{constructor(e,t){this.store=e;this.annotation=t}execute(){return this.store.applyAdd(this.annotation)}undo(){this.store.applyRemove(this.annotation.id)}};var C=class{constructor(e,t){this.manager=e;this.pageIndex=t}execute(){let e=this.manager.deletePage(this.pageIndex);return e?(this.lastDeleted=e,!0):!1}undo(){this.lastDeleted&&this.manager.insertPage(this.lastDeleted.visibleIndex,this.lastDeleted.sourceIndex)}};var T=class{constructor(e,t){this.store=e;this.annotationId=t}execute(){if(!this.removed){let t=this.store.getById(this.annotationId);if(!t)return!1;this.removed=t}return!!this.store.applyRemove(this.annotationId)}undo(){this.removed&&this.store.applyAdd(this.removed)}};var _=class{constructor(e,t,o){this.manager=e;this.fromIndex=t;this.toIndex=o}execute(){let e=this.manager.movePage(this.fromIndex,this.toIndex);return e?(this.lastMove=e,!0):!1}undo(){this.lastMove&&this.manager.movePage(this.lastMove.to,this.lastMove.from)}};var M=class{constructor(e,t){this.store=e;this.next=t}execute(){if(!this.previous){let e=this.store.getById(this.next.id);if(!e)return!1;this.previous=e}return this.store.applyUpdate(this.next)}undo(){this.previous&&this.store.applyUpdate(this.previous)}};var D=class{constructor(e={}){this.undoStack=[];this.redoStack=[];this.maxStackSize=e.maxStackSize??100}execute(e){return e.execute()?(this.undoStack.push(e),this.undoStack.length>this.maxStackSize&&this.undoStack.shift(),this.redoStack=[],!0):!1}undo(){let e=this.undoStack.pop();return e?(e.undo(),this.redoStack.push(e),!0):!1}redo(){let e=this.redoStack.pop();return!e||!e.execute()?!1:(this.undoStack.push(e),this.undoStack.length>this.maxStackSize&&this.undoStack.shift(),!0)}canUndo(){return this.undoStack.length>0}canRedo(){return this.redoStack.length>0}reset(){this.undoStack=[],this.redoStack=[]}getUndoStackSize(){return this.undoStack.length}getRedoStackSize(){return this.redoStack.length}getMaxStackSize(){return this.maxStackSize}};function Ne(n){return{x:v(n.x),y:v(n.y)}}function Be(n){let e=v(n.x),t=v(n.y),o=v(n.width),r=v(n.height);return{x:e,y:t,width:Math.min(o,1-e),height:Math.min(r,1-t)}}function v(n){return Number.isFinite(n)?Math.max(0,Math.min(1,n)):0}var Fe={strokeColor:"#0f172a",strokeWidth:2,opacity:1,lineCap:"round",lineJoin:"round",dash:"solid"};var R=class{constructor(){this.annotations=[];this.listeners=new Set}getAll(){return[...this.annotations]}getById(e){return this.annotations.find(t=>t.id===e)}getByPage(e){return this.annotations.filter(t=>t.pageIndex===e)}subscribe(e){return this.listeners.add(e),e({type:"replace",annotations:this.getAll()}),()=>{this.listeners.delete(e)}}replaceAll(e){this.annotations=[...e],this.emit({type:"replace"})}applyAdd(e){return this.getById(e.id)?!1:(this.annotations=[...this.annotations,e],this.emit({type:"add",annotation:e}),!0)}applyUpdate(e){let t=this.annotations.findIndex(r=>r.id===e.id);if(t===-1)return!1;let o=this.annotations[t];return this.updateAnnotationAt(t,e),this.emit({type:"update",annotation:e,previous:o}),!0}applyRemove(e){let t=this.annotations.findIndex(r=>r.id===e);if(t===-1)return;let o=this.annotations[t];return this.annotations=this.annotations.filter(r=>r.id!==e),this.emit({type:"remove",annotation:o}),o}emit(e){let t={...e,annotations:this.getAll()};for(let o of this.listeners)o(t)}updateAnnotationAt(e,t){let o=[...this.annotations];o[e]=t,this.annotations=o}};var U=class{constructor(){this.threadsByAnnotation=new Map;this.listeners=new Set}getThreads(){return Array.from(this.threadsByAnnotation.values())}getThreadByAnnotationId(e){return this.threadsByAnnotation.get(e)}subscribe(e){return this.listeners.add(e),e({type:"replace",threads:this.getThreads()}),()=>{this.listeners.delete(e)}}replaceAll(e){this.threadsByAnnotation.clear();for(let t of e)this.threadsByAnnotation.set(t.targetAnnotationId,this.cloneThread(t));this.emit({type:"replace"})}ensureThread(e){let t=this.threadsByAnnotation.get(e);if(t)return t;let o=this.createThread(e);return this.threadsByAnnotation.set(e,o),this.emit({type:"replace"}),o}addComment(e){let t=this.ensureThread(e.targetAnnotationId),o=this.addCommentToThread(t,e);return this.threadsByAnnotation.set(t.targetAnnotationId,o),this.emit({type:"add",thread:o,comment:e}),o}updateComment(e){let t=this.threadsByAnnotation.get(e.targetAnnotationId);if(!t)return;let o=t.comments.findIndex(i=>i.id===e.id);if(o===-1)return;let r=t.comments[o],a=this.updateCommentInThread(t,o,e);return this.threadsByAnnotation.set(t.targetAnnotationId,a),this.emit({type:"update",thread:a,comment:e,previous:r}),a}removeComment(e,t){let o=this.threadsByAnnotation.get(e);if(!o)return;let r=this.findCommentById(o,t);if(!r)return;let a=this.removeCommentFromThread(o,t);return this.threadsByAnnotation.set(o.targetAnnotationId,a),this.emit({type:"remove",thread:a,comment:r}),a}resolveThread(e){return this.threadsByAnnotation.get(e)}reopenThread(e){return this.threadsByAnnotation.get(e)}emit(e){let t={...e,threads:this.getThreads()};for(let o of this.listeners)o(t)}createThread(e){return{id:e,targetAnnotationId:e,comments:[]}}cloneThread(e){return{...e,comments:[...e.comments]}}addCommentToThread(e,t){return{...e,comments:[...e.comments,t]}}updateCommentInThread(e,t,o){let r=[...e.comments];return r[t]=o,{...e,comments:r}}findCommentById(e,t){return e.comments.find(o=>o.id===t)}removeCommentFromThread(e,t){let o=e.comments.filter(r=>r.id!==t);return{...e,comments:o}}};var I=class{constructor(){this.fields=[];this.elements=[]}loadBusinessSchema(e){this.fields=e}getFields(){return this.fields}addElement(e){this.elements.push(e)}updateElement(e){let t=this.elements.findIndex(o=>o.id===e.id);t!==-1&&(this.elements[t]=e)}removeElement(e){this.elements=this.elements.filter(t=>t.id!==e)}getElements(){return this.elements}getElementsByPage(e){return this.elements.filter(t=>t.pageIndex===e)}getElement(e){return this.elements.find(t=>t.id===e)}};var L={page:1,pageCount:0,pageOrder:[],canUndo:!1,canRedo:!1,scale:1,scaleMode:"width",rotation:0,status:"idle",outline:[],thumbnails:[]};function h(n,e){if(!Number.isFinite(e)||e<=0)return 1;let t=Math.max(1,Math.floor(n));return Math.min(t,e)}function Q(n,e,t){let o=Math.max(e,Math.min(t,n));return Math.round(o*1e3)/1e3}function Y(n){let e=(n%360+360)%360;return e===90||e===180||e===270?e:0}var J=class{constructor(e){this.templateManager=new I;this.listeners=new Set;this.annotationStore=new R;this.commentStore=new U;this.loadToken=0;this.loader=e.loader,this.minScale=e.minScale??.25,this.maxScale=e.maxScale??4,this.zoomStep=e.zoomStep??.1,this.initialScale=e.initialScale??1,this.initialRotation=e.initialRotation??0,this.undoManager=new D({maxStackSize:e.maxUndoStackSize}),this.state={...L,scale:this.initialScale,scaleMode:e.initialScaleMode??L.scaleMode,rotation:this.initialRotation}}async loadDocument(e){let t=++this.loadToken;this.doc?.destroy?.(),this.doc=void 0,this.pageManager=void 0,this.undoManager.reset(),this.annotationStore.replaceAll([]),this.commentStore.replaceAll([]);try{this.updateState({status:"loading",source:z(e),error:void 0,pageCount:0,page:1,pageOrder:[],canUndo:!1,canRedo:!1,scale:this.initialScale,rotation:this.initialRotation,outline:[],thumbnails:[]});let o=await this.loader(e);if(t!==this.loadToken){o.destroy?.();return}this.doc=o;let r=o.numPages??0;this.pageManager=new g(r),this.updateState({status:"ready",pageCount:r,page:h(1,r),pageOrder:this.pageManager.getOrder(),canUndo:this.undoManager.canUndo(),canRedo:this.undoManager.canRedo()}),this.loadSupplemental(o,t)}catch(o){if(t!==this.loadToken)return;let r=o instanceof Error?o.message:String(o);this.updateState({status:"error",error:r,outline:[],thumbnails:[],pageOrder:[],canUndo:!1,canRedo:!1})}}getDocument(){return this.doc}getTemplateManager(){return this.templateManager}setPage(e){let t=h(e,this.state.pageCount);t!==this.state.page&&this.updateState({page:t})}zoomIn(){this.setScale(this.state.scale+this.zoomStep)}zoomOut(){this.setScale(this.state.scale-this.zoomStep)}rotate(){let e=(this.state.rotation+90)%360;this.setRotation(e)}setScale(e){let t=Q(e,this.minScale,this.maxScale);t!==this.state.scale&&this.updateState({scale:t})}setRotation(e){let t=Y(e);t!==this.state.rotation&&this.updateState({rotation:t})}setScaleMode(e){e!==this.state.scaleMode&&this.updateState({scaleMode:e})}getState(){return{...this.state}}getAnnotationStore(){return this.annotationStore}getCommentStore(){return this.commentStore}setAnnotations(e){this.annotationStore.replaceAll(e)}setCommentThreads(e){this.commentStore.replaceAll(e)}subscribe(e){return this.listeners.add(e),e(this.getState()),()=>this.listeners.delete(e)}destroy(){this.doc?.destroy?.(),this.doc=void 0,this.pageManager=void 0,this.undoManager.reset(),this.annotationStore.replaceAll([]),this.commentStore.replaceAll([]),this.loadToken+=1,this.updateState({status:"idle",pageCount:0,page:1,error:void 0,outline:[],thumbnails:[],pageOrder:[],canUndo:!1,canRedo:!1})}async syncPageManager(e={}){let t=this.doc?.numPages??0,o=e.preserveOrder===!0,a=(this.pageManager?.getOrder()??[]).some(u=>u<0||u>=t);(!this.pageManager||!o&&a)&&(this.pageManager=new g(t),this.undoManager.reset());let i=this.pageManager.getOrder(),d=!ze(this.state.pageOrder,i),c=this.state.pageCount!==this.pageManager.getPageCount();(d||c)&&this.updateState({pageCount:this.pageManager.getPageCount(),pageOrder:i,page:h(this.state.page,i.length),canUndo:this.undoManager.canUndo(),canRedo:this.undoManager.canRedo()})}deletePage(e){if(!this.pageManager)return!1;let t=this.pageManager.getOrder();return this.undoManager.execute(new C(this.pageManager,e))?(this.applyPageOrderChange(t),!0):!1}movePage(e,t){if(!this.pageManager)return!1;let o=this.pageManager.getOrder();return this.undoManager.execute(new _(this.pageManager,e,t))?(this.applyPageOrderChange(o),!0):!1}undo(){if(!this.pageManager)return!1;let e=this.pageManager.getOrder();return this.undoManager.undo()?(this.applyPageOrderChange(e),!0):!1}redo(){if(!this.pageManager)return!1;let e=this.pageManager.getOrder();return this.undoManager.redo()?(this.applyPageOrderChange(e),!0):!1}canUndo(){return this.undoManager.canUndo()}canRedo(){return this.undoManager.canRedo()}hasEditableDocumentData(){return!!this.doc}async exportPdf(){if(!this.doc||!this.pageManager)throw new Error("No editable document loaded.");let e=await this.doc.getData?.();if(!e)throw new Error("Unable to retrieve source data from worker.");let t=e instanceof Uint8Array?e:new Uint8Array(e);return K(t,this.pageManager.getOrder())}addAnnotation(e){if(!this.isValidAnnotationPage(e.pageIndex))return!1;let t=this.undoManager.execute(new x(this.annotationStore,e));return t&&this.updateUndoState(),t}updateAnnotation(e){if(!this.isValidAnnotationPage(e.pageIndex))return!1;let t=this.undoManager.execute(new M(this.annotationStore,e));return t&&this.updateUndoState(),t}removeAnnotation(e){let t=this.undoManager.execute(new T(this.annotationStore,e));return t&&this.updateUndoState(),t}addComment(e){return this.commentStore.addComment(e)}updateComment(e){return this.commentStore.updateComment(e)}removeComment(e,t){return this.commentStore.removeComment(e,t)}resolveCommentThread(e){return this.setAnnotationStatus(e,"resolved"),this.commentStore.getThreadByAnnotationId(e)}reopenCommentThread(e){return this.setAnnotationStatus(e,"open"),this.commentStore.getThreadByAnnotationId(e)}setAnnotationStatus(e,t){let o=this.annotationStore.getById(e);return o?(o.metadata.status==="resolved"?"resolved":"open")===t?!0:this.updateAnnotation({...o,metadata:{...o.metadata,status:t}}):!1}updateState(e){this.state={...this.state,...e};for(let t of this.listeners)t(this.getState())}applyPageOrderChange(e){if(!this.pageManager)return;let t=this.pageManager.getOrder(),o=h(this.state.page,e.length)-1,r=e[o]??o,a=t.indexOf(r);a<0&&(a=Math.min(o,t.length-1));let i=h(a+1,t.length);this.updateState({pageCount:this.pageManager.getPageCount(),pageOrder:t,page:i,canUndo:this.undoManager.canUndo(),canRedo:this.undoManager.canRedo()})}updateUndoState(){this.updateState({canUndo:this.undoManager.canUndo(),canRedo:this.undoManager.canRedo()})}isValidAnnotationPage(e){return!Number.isFinite(e)||this.state.pageCount<=0?!1:e>=0&&e<this.state.pageCount}async loadSupplemental(e,t){let[o,r]=await Promise.all([$(e),X(e)]);t===this.loadToken&&this.updateState({outline:o,thumbnails:r})}};function ze(n,e){if(n===e)return!0;if(n.length!==e.length)return!1;for(let t=0;t<n.length;t+=1)if(n[t]!==e[t])return!1;return!0}var W={type:"text",content:"CONFIDENTIAL",fontSize:72,color:"#808080",opacity:.25,rotation:-45,position:"center",textAlign:"center"},N={type:"image",scale:.5,opacity:.2,rotation:0,position:"center"};function de(n){let e=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(n);return e?{r:parseInt(e[1],16)/255,g:parseInt(e[2],16)/255,b:parseInt(e[3],16)/255}:{r:.5,g:.5,b:.5}}function me(n){return/[^\x20-\x7E]/.test(n)}function B(n){if(typeof n=="number"&&Number.isFinite(n))return n;if(typeof n=="string"){let e=n.trim();if(!e)return;let t=Number(e);if(Number.isFinite(t))return t;let o=Date.parse(e);if(!Number.isNaN(o))return o}}function He(n){let e="",t=n.byteLength;for(let o=0;o<t;o++)e+=String.fromCharCode(n[o]);return globalThis.btoa?globalThis.btoa(e):globalThis.Buffer.from(e,"binary").toString("base64")}function Ve(n){let e=globalThis.atob?globalThis.atob(n):globalThis.Buffer.from(n,"base64").toString("binary"),t=e.length,o=new Uint8Array(t);for(let r=0;r<t;r++)o[r]=e.charCodeAt(r);return o}function F(n,e){if(!n)return e;let t=n.toLowerCase().split(";")[0]?.trim();return t==="image/jpeg"||t==="image/jpg"?"image/jpeg":t==="image/png"?"image/png":e}function je(n){return n?/^(https?:)?\/\//.test(n)||n.startsWith("data:")||n.startsWith("blob:"):!1}function qe(n){if(typeof n=="string")return{ref:n};if(n?.ref)return n;if(n?.url)return{ref:n.url,url:n.url};throw new Error("Invalid watermark upload result: expected ref or url")}function Ge(n){return typeof n=="object"&&n!==null&&"data"in n}async function ce(n){return n instanceof Uint8Array?n:n instanceof ArrayBuffer?new Uint8Array(n):new Uint8Array(await n.arrayBuffer())}async function Ke(n){if(typeof fetch!="function")throw new Error("Unable to load watermark image URL without fetch support");let e=await fetch(n);if(!e.ok)throw new Error(`Failed to load watermark image: ${e.status} ${e.statusText}`);let t=new Uint8Array(await e.arrayBuffer()),o=F(e.headers.get("content-type")||void 0);return{data:t,mimeType:o}}async function $e(n,e={}){if(!n)return;let t={opacity:n.opacity,rotation:n.rotation,position:n.position};if(n.type==="text")return{type:"text",...t,content:n.content,fontSize:n.fontSize,color:n.color,textAlign:n.textAlign};if(e.uploadImage){let o=qe(await e.uploadImage({data:n.imageData,mimeType:n.mimeType}));return{type:"image",...t,mimeType:n.mimeType,scale:n.scale,imageRef:o.ref,imageUrl:o.url}}return{type:"image",...t,mimeType:n.mimeType,scale:n.scale,imageDataBase64:He(n.imageData)}}async function Xe(n,e={}){if(!n)return null;if(n.type==="text")return{...W,type:"text",opacity:n.opacity,rotation:n.rotation,position:n.position??"center",content:n.content??"",fontSize:n.fontSize??12,color:n.color??"#000000",textAlign:n.textAlign??"left"};if(n.type==="image"){let t=null,o=F(n.mimeType,"image/png")??"image/png";if(n.imageDataBase64)t=Ve(n.imageDataBase64);else if(e.loadImage&&(n.imageRef||n.imageUrl)){let r=await e.loadImage({ref:n.imageRef,url:n.imageUrl,mimeType:n.mimeType});Ge(r)?(t=await ce(r.data),o=F(r.mimeType,o)??o):t=await ce(r)}else{let r=n.imageUrl||(je(n.imageRef)?n.imageRef:void 0);if(r){let a=await Ke(r);t=a.data,o=F(a.mimeType,o)??o}}return t?{...N,type:"image",opacity:n.opacity,rotation:n.rotation,position:n.position??"center",mimeType:o,scale:n.scale??1,imageData:t}:null}return null}function Qe(n,e){return n.map(t=>{let o=e.find(r=>r.targetAnnotationId===t.id);return o?{...t,commentThread:{id:o.id,targetAnnotationId:o.targetAnnotationId,comments:o.comments}}:t})}function Ye(n){let e=[],t=[];for(let o of n){let{commentThread:r,...a}=o,i={...a,metadata:{...a.metadata,createdAt:B(a.metadata?.createdAt)??Date.now()}},d=B(a.metadata?.updatedAt);d!==void 0?i.metadata.updatedAt=d:delete i.metadata.updatedAt,e.push(i),r&&t.push({id:r.id,targetAnnotationId:r.targetAnnotationId,comments:r.comments.map(c=>{let u=B(c.createdAt)??Date.now(),p=B(c.updatedAt);return{...c,createdAt:u,...p!==void 0?{updatedAt:p}:{},targetAnnotationId:r.targetAnnotationId}})})}return{annotations:e,threads:t}}var Z=class{constructor(e,t,o=null,r){this.annotationStore=e;this.commentStore=t;this.provider=o;this.userManager=r;this.isApplyingRemote=!1;this.localUnsubscribers=[];this.remoteHandlers=[];this.interactionListeners=new Set;this.documentModeListeners=new Set;this.documentMode="normal";this.isDestroyed=!1;o&&this.setProvider(o)}setProvider(e){if(this.isDestroyed){console.warn("CollaborationManager: Cannot set provider on destroyed instance");return}this.cleanupLocalListeners(),this.cleanupRemoteListeners(),this.provider&&this.provider.disconnect(),this.provider=e,this.setupLocalListeners(),this.setupRemoteListeners()}getProvider(){return this.provider}cleanupLocalListeners(){for(let e of this.localUnsubscribers)e();this.localUnsubscribers=[]}cleanupRemoteListeners(){if(this.provider){for(let{event:e,handler:t}of this.remoteHandlers)this.provider.off(e,t);this.remoteHandlers=[]}}async connect(e){if(this.isDestroyed)throw new Error("CollaborationManager: Cannot connect on destroyed instance");let t=this.userManager.currentUser;if(!t)throw new Error("User must be set before connecting");if(!this.provider){console.warn("CollaborationManager: No provider set, cannot connect");return}await this.provider.connect({documentId:e,user:t})}disconnect(){this.provider&&this.provider.disconnect()}destroy(){this.isDestroyed||(this.isDestroyed=!0,this.cleanupLocalListeners(),this.cleanupRemoteListeners(),this.interactionListeners.clear(),this.documentModeListeners.clear(),this.provider&&(this.provider.disconnect(),this.provider=null))}setupLocalListeners(){if(!this.provider||this.isDestroyed)return;let e=this.annotationStore.subscribe(o=>{if(this.isApplyingRemote||this.isDestroyed)return;let{annotations:r,...a}=o;this.provider?.sendAnnotationChange(a)});this.localUnsubscribers.push(e);let t=this.commentStore.subscribe(o=>{if(this.isApplyingRemote||this.isDestroyed)return;let{threads:r,...a}=o;this.provider?.sendCommentChange(a)});this.localUnsubscribers.push(t)}sendInteraction(e){this.isDestroyed||this.provider?.sendInteraction(e)}setDocumentMode(e){this.isDestroyed||this.provider?.setDocumentMode?.(e)}getDocumentMode(){return this.documentMode}setupRemoteListeners(){if(!this.provider||this.isDestroyed)return;let e=i=>{this.isDestroyed||this.applyRemoteChange(i)};this.provider.on("remote:change",e),this.remoteHandlers.push({event:"remote:change",handler:e});let t=i=>{this.isDestroyed||this.applyRemoteInteraction(i)};this.provider.on("remote:interaction",t),this.remoteHandlers.push({event:"remote:interaction",handler:t});let o=i=>{this.isDestroyed||this.applySyncState(i)};this.provider.on("sync",o),this.remoteHandlers.push({event:"sync",handler:o});let r=i=>{this.isDestroyed||this.userManager.updateUsers(i)};this.provider.on("users:update",r),this.remoteHandlers.push({event:"users:update",handler:r});let a=i=>{this.isDestroyed||this.applyDocumentMode(i)};this.provider.on("document:mode:changed",a),this.remoteHandlers.push({event:"document:mode:changed",handler:a})}applyRemoteChange(e){if(!this.isDestroyed){this.isApplyingRemote=!0;try{if(e.type==="annotation"){let{change:t}=e;switch(t.type){case"add":t.annotation&&this.annotationStore.applyAdd(t.annotation);break;case"update":t.annotation&&this.annotationStore.applyUpdate(t.annotation);break;case"remove":t.annotation&&this.annotationStore.applyRemove(t.annotation.id);break}}else if(e.type==="comment"){let{change:t}=e;switch(t.type){case"add":t.comment&&this.commentStore.addComment(t.comment);break;case"update":t.comment&&this.commentStore.updateComment(t.comment);break;case"remove":t.comment&&this.commentStore.removeComment(t.comment.targetAnnotationId,t.comment.id);break}}}finally{this.isApplyingRemote=!1}}}applySyncState(e){if(!this.isDestroyed){this.isApplyingRemote=!0;try{this.annotationStore.replaceAll(e.annotations),this.commentStore.replaceAll(e.comments),this.userManager.updateUsers(e.activeUsers),e.documentMode&&this.applyDocumentMode(e.documentMode)}finally{this.isApplyingRemote=!1}}}applyDocumentMode(e){if(this.documentMode!==e){this.documentMode=e;for(let t of this.documentModeListeners)try{t(e)}catch(o){console.error("CollaborationManager: Error in document mode listener:",o)}}}applyRemoteInteraction(e){if(!this.isDestroyed)for(let t of this.interactionListeners)try{t(e)}catch(o){console.error("CollaborationManager: Error in interaction listener:",o)}}onInteraction(e){return this.isDestroyed?(console.warn("CollaborationManager: Cannot add listener on destroyed instance"),()=>{}):(this.interactionListeners.add(e),()=>{this.interactionListeners.delete(e)})}clearInteractionListeners(){this.interactionListeners.clear()}onDocumentModeChange(e){return this.isDestroyed?()=>{}:(this.documentModeListeners.add(e),()=>{this.documentModeListeners.delete(e)})}};var ee=class{constructor(e){this._currentUser=null;this.users=new Map;e&&(this._currentUser=e,this.users.set(e.id,e))}get currentUser(){return this._currentUser}setCurrentUser(e){this._currentUser=e,this.users.set(e.id,e)}getUser(e){return this.users.get(e)}updateUsers(e){e.forEach(t=>this.users.set(t.id,t))}canEditAnnotation(e){return this._currentUser?this._currentUser.role==="admin"?!0:e.metadata.authorId===this._currentUser.id:!1}canEditComment(e){return this._currentUser?this._currentUser.role==="admin"?!0:e.authorId===this._currentUser.id:!1}};var te=class{constructor(){this.channel=null;this.listeners={};this.currentUser=null;this._status="disconnected"}get status(){return this._status}setStatus(e){this._status!==e&&(this._status=e,this.emit("status:change",e))}async connect(e){this.setStatus("connecting"),this.currentUser=e.user,this.channel=new BroadcastChannel(`pdf-viewer:doc:${e.documentId}`),this.channel.onmessage=t=>{this.handleMessage(t.data)},this.setStatus("connected")}disconnect(){this.channel&&(this.channel.close(),this.channel=null),this.setStatus("disconnected")}sendAnnotationChange(e){this.broadcast({type:"remote:change",payload:{type:"annotation",change:e},sourceUser:this.currentUser})}sendCommentChange(e){this.broadcast({type:"remote:change",payload:{type:"comment",change:e},sourceUser:this.currentUser})}sendInteraction(e){this.broadcast({type:"remote:interaction",payload:e,sourceUser:this.currentUser})}setDocumentMode(e){this.currentUser&&(this.broadcast({type:"document:mode:changed",mode:e,sourceUser:this.currentUser}),this.emit("document:mode:changed",e))}on(e,t){this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)}off(e,t){this.listeners[e]&&(this.listeners[e]=this.listeners[e].filter(o=>o!==t))}broadcast(e){this.channel?(console.log("[BroadcastProvider] Broadcasting:",e),this.channel.postMessage(e)):console.warn("[BroadcastProvider] Cannot broadcast, channel is null")}handleMessage(e){console.log("[BroadcastProvider] Received:",e);let t=e.sourceUser?.id||e.user?.id;if(t&&t===this.currentUser?.id){console.log("[BroadcastProvider] Ignoring own message from",t);return}e.type==="remote:change"?(console.log("[BroadcastProvider] Emitting remote:change"),this.emit("remote:change",e.payload)):e.type==="remote:interaction"?this.emit("remote:interaction",e.payload):e.type==="document:mode:changed"&&this.emit("document:mode:changed",e.mode)}emit(e,...t){let o=this.listeners[e];o&&o.forEach(r=>r(...t))}};import{io as Je}from"socket.io-client";var ne=class{constructor(e,t={}){this.url=e;this.socket=null;this.listeners=new Map;this._status="disconnected";this.pendingMessages=[];this.isDestroyed=!1;this.authToken=t.authToken,this.options={reconnection:t.reconnection??!0,reconnectionAttempts:t.reconnectionAttempts??10,reconnectionDelay:t.reconnectionDelay??1e3,reconnectionDelayMax:t.reconnectionDelayMax??5e3,timeout:t.timeout??2e4,authToken:t.authToken??""}}get status(){return this._status}setStatus(e){this._status!==e&&(this._status=e,this.emit("status:change",e))}async connect(e){if(this.isDestroyed)throw new Error("[WebSocketProvider] Cannot connect: provider has been destroyed");if(this._status==="connected"||this._status==="connecting"){console.warn("[WebSocketProvider] Already connected or connecting");return}return this.connectOptions=e,this.setStatus("connecting"),new Promise((t,o)=>{let{reconnection:r,reconnectionAttempts:a,reconnectionDelay:i,reconnectionDelayMax:d,timeout:c}=this.options,u=!0,p=!1;this.socket=Je(this.url,{query:{documentId:e.documentId,userId:e.user.id,userName:e.user.name,authToken:this.authToken},transports:["websocket"],reconnection:r,reconnectionAttempts:a,reconnectionDelay:i,reconnectionDelayMax:d,timeout:c}),this.socket.on("connect",()=>{this.isDestroyed||(console.log("[WebSocketProvider] Connected to server (initial:",u,")"),this.setStatus("connected"),u&&(u=!1,this.socket?.emit("join-document",{documentId:e.documentId,user:e.user,token:this.authToken}),this.flushQueue(),p||(p=!0,t())))}),this.socket.on("connect_error",m=>{if(!this.isDestroyed&&(console.error("[WebSocketProvider] Connection error:",m.message),this.emit("error",m),this._status==="connecting")){if(/unauthorized/i.test(m.message)){this.setStatus("disconnected"),this.socket?.disconnect(),p||(p=!0,o(m));return}r||(this.setStatus("disconnected"),p||(p=!0,o(m)))}}),this.socket.on("disconnect",m=>{this.isDestroyed||(console.log("[WebSocketProvider] Disconnected:",m),m==="io server disconnect"||m==="io client disconnect"?this.setStatus("disconnected"):this.setStatus("reconnecting"))}),this.socket.io.on("reconnect_attempt",m=>{this.isDestroyed||(console.log(`[WebSocketProvider] Reconnection attempt ${m}/${a}`),this.setStatus("reconnecting"))}),this.socket.io.on("reconnect",()=>{this.isDestroyed||(console.log("[WebSocketProvider] Reconnected successfully"),this.setStatus("connected"),this.connectOptions&&this.socket?.emit("join-document",{documentId:this.connectOptions.documentId,user:this.connectOptions.user,token:this.authToken}),this.flushQueue())}),this.socket.io.on("reconnect_failed",()=>{this.isDestroyed||(console.error("[WebSocketProvider] Reconnection failed after all attempts"),this.setStatus("disconnected"),this.emit("error",new Error("Reconnection failed after maximum attempts")),p||(p=!0,o(new Error("Failed to connect after all reconnection attempts"))))}),this.socket.on("remote:change",m=>{this.isDestroyed||this.emit("remote:change",m)}),this.socket.on("sync",m=>{this.isDestroyed||this.emit("sync",m)}),this.socket.on("remote:interaction",m=>{this.isDestroyed||this.emit("remote:interaction",m)}),this.socket.on("users:update",m=>{this.isDestroyed||this.emit("users:update",m)}),this.socket.on("document:mode:changed",m=>{this.isDestroyed||this.emit("document:mode:changed",m)}),this.socket.on("error",m=>{this.isDestroyed||(console.error("[WebSocketProvider] Server error:",m.message),this.emit("error",new Error(m.message)))})})}disconnect(){this.socket&&(this.socket.removeAllListeners(),this.socket.disconnect(),this.socket=null),this.setStatus("disconnected"),this.pendingMessages=[],this.connectOptions=void 0}destroy(){this.disconnect(),this.listeners.clear(),this.isDestroyed=!0}sendAnnotationChange(e){this.sendOrQueue("client:change",{type:"annotation",change:e})}sendCommentChange(e){this.sendOrQueue("client:change",{type:"comment",change:e})}sendInteraction(e){this._status==="connected"&&this.socket&&this.socket.emit("client:interaction",e)}setDocumentMode(e){this._status==="connected"&&this.socket&&this.socket.emit("document:set-mode",{mode:e})}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}off(e,t){let o=this.listeners.get(e);o&&(o.delete(t),o.size===0&&this.listeners.delete(e))}offAll(e){this.listeners.delete(e)}removeAllListeners(){this.listeners.clear()}emit(e,t){let o=this.listeners.get(e);if(o)for(let r of Array.from(o))try{r(t)}catch(a){console.error(`[WebSocketProvider] Error in event handler for "${e}":`,a)}}sendOrQueue(e,t){this._status==="connected"&&this.socket?this.socket.emit(e,t):(this.pendingMessages.push({event:e,data:t}),console.log(`[WebSocketProvider] Message queued (status: ${this._status}):`,e))}flushQueue(){if(this.pendingMessages.length===0)return;console.log(`[WebSocketProvider] Flushing ${this.pendingMessages.length} queued messages`);let e=[...this.pendingMessages];this.pendingMessages=[];for(let t of e)this.socket&&this._status==="connected"&&this.socket.emit(t.event,t.data)}};var le=["annotation.view","comment.view"];function Ze(n){return le.includes(n)}function et(n,e){return n.actions==="*"?!0:n.actions.includes(e)}function tt(n,e,t){let o=Array.isArray(n.roles)&&n.roles.length>0,r=Array.isArray(n.users)&&n.users.length>0,a=!o||n.roles.some(d=>t.includes(d)),i=!r||n.users.includes(e);return a&&i}function nt(n,e,t){return n.owner?e.ownerId?e.ownerId===t:!1:!0}function ue(n,e,t,o,r){if(!n||n.length===0)return;let a=!1;for(let i of n)if(et(i,e)&&tt(i,t,o)&&nt(i,r,t)){if(i.effect==="deny")return"deny";a=!0}return a?"allow":void 0}function pe(n){let{action:e,principal:t,globalPolicy:o,resourcePolicy:r,context:a}=n;if(a.previewMode&&!Ze(e))return{allowed:!1,reason:"preview_mode",source:"preview"};let i=ue(r?.rules,e,t.userId,t.roles,a);if(i==="deny")return{allowed:!1,reason:"resource_explicit_deny",source:"resource"};if(i==="allow")return{allowed:!0,source:"resource"};let d=ue(o.rules,e,t.userId,t.roles,a);return d==="deny"?{allowed:!1,reason:"global_explicit_deny",source:"global"}:d==="allow"?{allowed:!0,source:"global"}:{allowed:!1,reason:"no_matching_allow",source:"default"}}var fe={rules:[{effect:"allow",actions:"*",roles:["admin"]},{effect:"allow",actions:["annotation.view","comment.view"],roles:["viewer"]},{effect:"allow",actions:["annotation.view","annotation.create","annotation.comment.create","comment.view"],roles:["user"]},{effect:"allow",actions:["annotation.update","annotation.delete"],roles:["user"],owner:!0},{effect:"allow",actions:["comment.update","comment.delete","comment.reply","thread.resolve","thread.reopen"],roles:["user"],owner:!0}]};export{x as AddAnnotationCommand,R as AnnotationStore,te as BroadcastChannelProvider,Z as CollaborationManager,U as CommentStore,Fe as DEFAULT_ANNOTATION_STYLE,N as DEFAULT_IMAGE_WATERMARK_SETTINGS,fe as DEFAULT_PERMISSION_POLICY,W as DEFAULT_TEXT_WATERMARK,L as DEFAULT_VIEWER_STATE,C as DeletePageCommand,g as PageManager,T as RemoveAnnotationCommand,_ as ReorderPageCommand,I as TemplateManager,D as UndoManager,M as UpdateAnnotationCommand,ee as UserManager,J as ViewerController,ne as WebSocketProvider,Ne as clampNormalizedPoint,Be as clampNormalizedRect,h as clampPage,Q as clampScale,ye as createPdfLoader,Xe as dataToWatermark,be as embed_watermark_wasm,pe as evaluatePermission,K as exportPdf,Ye as extractComments,$ as extractPdfOutline,X as extractPdfThumbnails,j as extract_pages_wasm,ve as get_page_count_wasm,me as hasNonAsciiChars,de as hexToRgb,mt as loadPdfTools,Qe as mergeComments,Y as normalizeRotation,Ae as read_pdf_data_wasm,z as toDocumentSourceRef,$e as watermarkToData,Se as write_pdf_data_wasm};
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "pdf-tools",
3
+ "type": "module",
4
+ "description": "PDF manipulation tools with WASM support for pdf-viewer",
5
+ "version": "0.1.0",
6
+ "license": "MIT",
7
+ "files": [
8
+ "pdf_tools_bg.wasm",
9
+ "pdf_tools.js",
10
+ "pdf_tools.d.ts"
11
+ ],
12
+ "main": "pdf_tools.js",
13
+ "types": "pdf_tools.d.ts",
14
+ "sideEffects": [
15
+ "./snippets/*"
16
+ ]
17
+ }
@@ -0,0 +1,74 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+
4
+ /**
5
+ * Embed watermark (Text or Image) into PDF
6
+ *
7
+ * config_json examples:
8
+ * Text: {"type": "text", "content": "Hello", "opacity": 0.5, ...}
9
+ * Image: {"type": "image", "imageDataBase64": "...", ...}
10
+ */
11
+ export function embed_watermark_wasm(pdf_bytes: Uint8Array, config_json: string): Uint8Array;
12
+
13
+ /**
14
+ * Extract specific pages from PDF
15
+ * page_indices should be a Uint32Array from JS side
16
+ */
17
+ export function extract_pages_wasm(pdf_bytes: Uint8Array, page_indices: Uint32Array): Uint8Array;
18
+
19
+ /**
20
+ * Get number of pages in PDF
21
+ */
22
+ export function get_page_count_wasm(pdf_bytes: Uint8Array): number;
23
+
24
+ export function init(): void;
25
+
26
+ /**
27
+ * Read PdfData JSON from PDF bytes
28
+ */
29
+ export function read_pdf_data_wasm(pdf_bytes: Uint8Array): any;
30
+
31
+ /**
32
+ * Write PdfData JSON to PDF bytes
33
+ */
34
+ export function write_pdf_data_wasm(pdf_bytes: Uint8Array, json_data: string): Uint8Array;
35
+
36
+ export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
37
+
38
+ export interface InitOutput {
39
+ readonly memory: WebAssembly.Memory;
40
+ readonly embed_watermark_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
41
+ readonly extract_pages_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
42
+ readonly get_page_count_wasm: (a: number, b: number) => [number, number, number];
43
+ readonly init: () => void;
44
+ readonly read_pdf_data_wasm: (a: number, b: number) => [number, number, number];
45
+ readonly write_pdf_data_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
46
+ readonly __wbindgen_free: (a: number, b: number, c: number) => void;
47
+ readonly __wbindgen_malloc: (a: number, b: number) => number;
48
+ readonly __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
49
+ readonly __wbindgen_externrefs: WebAssembly.Table;
50
+ readonly __externref_table_dealloc: (a: number) => void;
51
+ readonly __wbindgen_start: () => void;
52
+ }
53
+
54
+ export type SyncInitInput = BufferSource | WebAssembly.Module;
55
+
56
+ /**
57
+ * Instantiates the given `module`, which can either be bytes or
58
+ * a precompiled `WebAssembly.Module`.
59
+ *
60
+ * @param {{ module: SyncInitInput }} module - Passing `SyncInitInput` directly is deprecated.
61
+ *
62
+ * @returns {InitOutput}
63
+ */
64
+ export function initSync(module: { module: SyncInitInput } | SyncInitInput): InitOutput;
65
+
66
+ /**
67
+ * If `module_or_path` is {RequestInfo} or {URL}, makes a request and
68
+ * for everything else, calls `WebAssembly.instantiate` directly.
69
+ *
70
+ * @param {{ module_or_path: InitInput | Promise<InitInput> }} module_or_path - Passing `InitInput` directly is deprecated.
71
+ *
72
+ * @returns {Promise<InitOutput>}
73
+ */
74
+ export default function __wbg_init (module_or_path?: { module_or_path: InitInput | Promise<InitInput> } | InitInput | Promise<InitInput>): Promise<InitOutput>;
@@ -0,0 +1,366 @@
1
+ /* @ts-self-types="./pdf_tools.d.ts" */
2
+
3
+ /**
4
+ * Embed watermark (Text or Image) into PDF
5
+ *
6
+ * config_json examples:
7
+ * Text: {"type": "text", "content": "Hello", "opacity": 0.5, ...}
8
+ * Image: {"type": "image", "imageDataBase64": "...", ...}
9
+ * @param {Uint8Array} pdf_bytes
10
+ * @param {string} config_json
11
+ * @returns {Uint8Array}
12
+ */
13
+ export function embed_watermark_wasm(pdf_bytes, config_json) {
14
+ const ptr0 = passArray8ToWasm0(pdf_bytes, wasm.__wbindgen_malloc);
15
+ const len0 = WASM_VECTOR_LEN;
16
+ const ptr1 = passStringToWasm0(config_json, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
17
+ const len1 = WASM_VECTOR_LEN;
18
+ const ret = wasm.embed_watermark_wasm(ptr0, len0, ptr1, len1);
19
+ if (ret[3]) {
20
+ throw takeFromExternrefTable0(ret[2]);
21
+ }
22
+ var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
23
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
24
+ return v3;
25
+ }
26
+
27
+ /**
28
+ * Extract specific pages from PDF
29
+ * page_indices should be a Uint32Array from JS side
30
+ * @param {Uint8Array} pdf_bytes
31
+ * @param {Uint32Array} page_indices
32
+ * @returns {Uint8Array}
33
+ */
34
+ export function extract_pages_wasm(pdf_bytes, page_indices) {
35
+ const ptr0 = passArray8ToWasm0(pdf_bytes, wasm.__wbindgen_malloc);
36
+ const len0 = WASM_VECTOR_LEN;
37
+ const ptr1 = passArray32ToWasm0(page_indices, wasm.__wbindgen_malloc);
38
+ const len1 = WASM_VECTOR_LEN;
39
+ const ret = wasm.extract_pages_wasm(ptr0, len0, ptr1, len1);
40
+ if (ret[3]) {
41
+ throw takeFromExternrefTable0(ret[2]);
42
+ }
43
+ var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
44
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
45
+ return v3;
46
+ }
47
+
48
+ /**
49
+ * Get number of pages in PDF
50
+ * @param {Uint8Array} pdf_bytes
51
+ * @returns {number}
52
+ */
53
+ export function get_page_count_wasm(pdf_bytes) {
54
+ const ptr0 = passArray8ToWasm0(pdf_bytes, wasm.__wbindgen_malloc);
55
+ const len0 = WASM_VECTOR_LEN;
56
+ const ret = wasm.get_page_count_wasm(ptr0, len0);
57
+ if (ret[2]) {
58
+ throw takeFromExternrefTable0(ret[1]);
59
+ }
60
+ return ret[0] >>> 0;
61
+ }
62
+
63
+ export function init() {
64
+ wasm.init();
65
+ }
66
+
67
+ /**
68
+ * Read PdfData JSON from PDF bytes
69
+ * @param {Uint8Array} pdf_bytes
70
+ * @returns {any}
71
+ */
72
+ export function read_pdf_data_wasm(pdf_bytes) {
73
+ const ptr0 = passArray8ToWasm0(pdf_bytes, wasm.__wbindgen_malloc);
74
+ const len0 = WASM_VECTOR_LEN;
75
+ const ret = wasm.read_pdf_data_wasm(ptr0, len0);
76
+ if (ret[2]) {
77
+ throw takeFromExternrefTable0(ret[1]);
78
+ }
79
+ return takeFromExternrefTable0(ret[0]);
80
+ }
81
+
82
+ /**
83
+ * Write PdfData JSON to PDF bytes
84
+ * @param {Uint8Array} pdf_bytes
85
+ * @param {string} json_data
86
+ * @returns {Uint8Array}
87
+ */
88
+ export function write_pdf_data_wasm(pdf_bytes, json_data) {
89
+ const ptr0 = passArray8ToWasm0(pdf_bytes, wasm.__wbindgen_malloc);
90
+ const len0 = WASM_VECTOR_LEN;
91
+ const ptr1 = passStringToWasm0(json_data, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
92
+ const len1 = WASM_VECTOR_LEN;
93
+ const ret = wasm.write_pdf_data_wasm(ptr0, len0, ptr1, len1);
94
+ if (ret[3]) {
95
+ throw takeFromExternrefTable0(ret[2]);
96
+ }
97
+ var v3 = getArrayU8FromWasm0(ret[0], ret[1]).slice();
98
+ wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
99
+ return v3;
100
+ }
101
+
102
+ function __wbg_get_imports() {
103
+ const import0 = {
104
+ __proto__: null,
105
+ __wbg___wbindgen_throw_be289d5034ed271b: function(arg0, arg1) {
106
+ throw new Error(getStringFromWasm0(arg0, arg1));
107
+ },
108
+ __wbg_error_7534b8e9a36f1ab4: function(arg0, arg1) {
109
+ let deferred0_0;
110
+ let deferred0_1;
111
+ try {
112
+ deferred0_0 = arg0;
113
+ deferred0_1 = arg1;
114
+ console.error(getStringFromWasm0(arg0, arg1));
115
+ } finally {
116
+ wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
117
+ }
118
+ },
119
+ __wbg_log_6b5ca2e6124b2808: function(arg0) {
120
+ console.log(arg0);
121
+ },
122
+ __wbg_new_8a6f238a6ece86ea: function() {
123
+ const ret = new Error();
124
+ return ret;
125
+ },
126
+ __wbg_stack_0ed75d68575b0f3c: function(arg0, arg1) {
127
+ const ret = arg1.stack;
128
+ const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
129
+ const len1 = WASM_VECTOR_LEN;
130
+ getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
131
+ getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
132
+ },
133
+ __wbindgen_cast_0000000000000001: function(arg0, arg1) {
134
+ // Cast intrinsic for `Ref(String) -> Externref`.
135
+ const ret = getStringFromWasm0(arg0, arg1);
136
+ return ret;
137
+ },
138
+ __wbindgen_init_externref_table: function() {
139
+ const table = wasm.__wbindgen_externrefs;
140
+ const offset = table.grow(4);
141
+ table.set(0, undefined);
142
+ table.set(offset + 0, undefined);
143
+ table.set(offset + 1, null);
144
+ table.set(offset + 2, true);
145
+ table.set(offset + 3, false);
146
+ },
147
+ };
148
+ return {
149
+ __proto__: null,
150
+ "./pdf_tools_bg.js": import0,
151
+ };
152
+ }
153
+
154
+ function getArrayU8FromWasm0(ptr, len) {
155
+ ptr = ptr >>> 0;
156
+ return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);
157
+ }
158
+
159
+ let cachedDataViewMemory0 = null;
160
+ function getDataViewMemory0() {
161
+ if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {
162
+ cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
163
+ }
164
+ return cachedDataViewMemory0;
165
+ }
166
+
167
+ function getStringFromWasm0(ptr, len) {
168
+ ptr = ptr >>> 0;
169
+ return decodeText(ptr, len);
170
+ }
171
+
172
+ let cachedUint32ArrayMemory0 = null;
173
+ function getUint32ArrayMemory0() {
174
+ if (cachedUint32ArrayMemory0 === null || cachedUint32ArrayMemory0.byteLength === 0) {
175
+ cachedUint32ArrayMemory0 = new Uint32Array(wasm.memory.buffer);
176
+ }
177
+ return cachedUint32ArrayMemory0;
178
+ }
179
+
180
+ let cachedUint8ArrayMemory0 = null;
181
+ function getUint8ArrayMemory0() {
182
+ if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
183
+ cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
184
+ }
185
+ return cachedUint8ArrayMemory0;
186
+ }
187
+
188
+ function passArray32ToWasm0(arg, malloc) {
189
+ const ptr = malloc(arg.length * 4, 4) >>> 0;
190
+ getUint32ArrayMemory0().set(arg, ptr / 4);
191
+ WASM_VECTOR_LEN = arg.length;
192
+ return ptr;
193
+ }
194
+
195
+ function passArray8ToWasm0(arg, malloc) {
196
+ const ptr = malloc(arg.length * 1, 1) >>> 0;
197
+ getUint8ArrayMemory0().set(arg, ptr / 1);
198
+ WASM_VECTOR_LEN = arg.length;
199
+ return ptr;
200
+ }
201
+
202
+ function passStringToWasm0(arg, malloc, realloc) {
203
+ if (realloc === undefined) {
204
+ const buf = cachedTextEncoder.encode(arg);
205
+ const ptr = malloc(buf.length, 1) >>> 0;
206
+ getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);
207
+ WASM_VECTOR_LEN = buf.length;
208
+ return ptr;
209
+ }
210
+
211
+ let len = arg.length;
212
+ let ptr = malloc(len, 1) >>> 0;
213
+
214
+ const mem = getUint8ArrayMemory0();
215
+
216
+ let offset = 0;
217
+
218
+ for (; offset < len; offset++) {
219
+ const code = arg.charCodeAt(offset);
220
+ if (code > 0x7F) break;
221
+ mem[ptr + offset] = code;
222
+ }
223
+ if (offset !== len) {
224
+ if (offset !== 0) {
225
+ arg = arg.slice(offset);
226
+ }
227
+ ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
228
+ const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
229
+ const ret = cachedTextEncoder.encodeInto(arg, view);
230
+
231
+ offset += ret.written;
232
+ ptr = realloc(ptr, len, offset, 1) >>> 0;
233
+ }
234
+
235
+ WASM_VECTOR_LEN = offset;
236
+ return ptr;
237
+ }
238
+
239
+ function takeFromExternrefTable0(idx) {
240
+ const value = wasm.__wbindgen_externrefs.get(idx);
241
+ wasm.__externref_table_dealloc(idx);
242
+ return value;
243
+ }
244
+
245
+ let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
246
+ cachedTextDecoder.decode();
247
+ const MAX_SAFARI_DECODE_BYTES = 2146435072;
248
+ let numBytesDecoded = 0;
249
+ function decodeText(ptr, len) {
250
+ numBytesDecoded += len;
251
+ if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {
252
+ cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
253
+ cachedTextDecoder.decode();
254
+ numBytesDecoded = len;
255
+ }
256
+ return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
257
+ }
258
+
259
+ const cachedTextEncoder = new TextEncoder();
260
+
261
+ if (!('encodeInto' in cachedTextEncoder)) {
262
+ cachedTextEncoder.encodeInto = function (arg, view) {
263
+ const buf = cachedTextEncoder.encode(arg);
264
+ view.set(buf);
265
+ return {
266
+ read: arg.length,
267
+ written: buf.length
268
+ };
269
+ };
270
+ }
271
+
272
+ let WASM_VECTOR_LEN = 0;
273
+
274
+ let wasmModule, wasm;
275
+ function __wbg_finalize_init(instance, module) {
276
+ wasm = instance.exports;
277
+ wasmModule = module;
278
+ cachedDataViewMemory0 = null;
279
+ cachedUint32ArrayMemory0 = null;
280
+ cachedUint8ArrayMemory0 = null;
281
+ wasm.__wbindgen_start();
282
+ return wasm;
283
+ }
284
+
285
+ async function __wbg_load(module, imports) {
286
+ if (typeof Response === 'function' && module instanceof Response) {
287
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
288
+ try {
289
+ return await WebAssembly.instantiateStreaming(module, imports);
290
+ } catch (e) {
291
+ const validResponse = module.ok && expectedResponseType(module.type);
292
+
293
+ if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {
294
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
295
+
296
+ } else { throw e; }
297
+ }
298
+ }
299
+
300
+ const bytes = await module.arrayBuffer();
301
+ return await WebAssembly.instantiate(bytes, imports);
302
+ } else {
303
+ const instance = await WebAssembly.instantiate(module, imports);
304
+
305
+ if (instance instanceof WebAssembly.Instance) {
306
+ return { instance, module };
307
+ } else {
308
+ return instance;
309
+ }
310
+ }
311
+
312
+ function expectedResponseType(type) {
313
+ switch (type) {
314
+ case 'basic': case 'cors': case 'default': return true;
315
+ }
316
+ return false;
317
+ }
318
+ }
319
+
320
+ function initSync(module) {
321
+ if (wasm !== undefined) return wasm;
322
+
323
+
324
+ if (module !== undefined) {
325
+ if (Object.getPrototypeOf(module) === Object.prototype) {
326
+ ({module} = module)
327
+ } else {
328
+ console.warn('using deprecated parameters for `initSync()`; pass a single object instead')
329
+ }
330
+ }
331
+
332
+ const imports = __wbg_get_imports();
333
+ if (!(module instanceof WebAssembly.Module)) {
334
+ module = new WebAssembly.Module(module);
335
+ }
336
+ const instance = new WebAssembly.Instance(module, imports);
337
+ return __wbg_finalize_init(instance, module);
338
+ }
339
+
340
+ async function __wbg_init(module_or_path) {
341
+ if (wasm !== undefined) return wasm;
342
+
343
+
344
+ if (module_or_path !== undefined) {
345
+ if (Object.getPrototypeOf(module_or_path) === Object.prototype) {
346
+ ({module_or_path} = module_or_path)
347
+ } else {
348
+ console.warn('using deprecated parameters for the initialization function; pass a single object instead')
349
+ }
350
+ }
351
+
352
+ if (module_or_path === undefined) {
353
+ module_or_path = new URL('pdf_tools_bg.wasm', import.meta.url);
354
+ }
355
+ const imports = __wbg_get_imports();
356
+
357
+ if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {
358
+ module_or_path = fetch(module_or_path);
359
+ }
360
+
361
+ const { instance, module } = await __wbg_load(await module_or_path, imports);
362
+
363
+ return __wbg_finalize_init(instance, module);
364
+ }
365
+
366
+ export { initSync, __wbg_init as default };
@@ -0,0 +1,15 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ export const memory: WebAssembly.Memory;
4
+ export const embed_watermark_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
5
+ export const extract_pages_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
6
+ export const get_page_count_wasm: (a: number, b: number) => [number, number, number];
7
+ export const init: () => void;
8
+ export const read_pdf_data_wasm: (a: number, b: number) => [number, number, number];
9
+ export const write_pdf_data_wasm: (a: number, b: number, c: number, d: number) => [number, number, number, number];
10
+ export const __wbindgen_free: (a: number, b: number, c: number) => void;
11
+ export const __wbindgen_malloc: (a: number, b: number) => number;
12
+ export const __wbindgen_realloc: (a: number, b: number, c: number, d: number) => number;
13
+ export const __wbindgen_externrefs: WebAssembly.Table;
14
+ export const __externref_table_dealloc: (a: number) => void;
15
+ export const __wbindgen_start: () => void;
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@jacktea/pdf-viewer-core",
3
+ "version": "0.1.5",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "files": [
9
+ "dist"
10
+ ],
11
+ "exports": {
12
+ ".": {
13
+ "types": "./dist/index.d.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.js"
16
+ }
17
+ },
18
+ "dependencies": {
19
+ "socket.io-client": "^4.8.3"
20
+ },
21
+ "devDependencies": {
22
+ "typescript": "^5.5.4"
23
+ },
24
+ "scripts": {
25
+ "build": "tsup src/index.ts --format esm --dts --minify --clean && mkdir -p dist/pdf-tools && cp -r src/pdf-tools/pkg dist/pdf-tools/pkg",
26
+ "typecheck": "tsc -p tsconfig.json --noEmit"
27
+ }
28
+ }