@mdgate/iwork-common 0.6.12 → 0.6.14
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 +3 -3
- package/dist/pre-iwa.d.ts +1 -0
- package/package.json +5 -5
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{Package as xW}from"@mdgate/containers";import{ConvertError as k}from"@mdgate/core";import{warn as aW}from"@mdgate/utils";import{ConvertError as i}from"@mdgate/core";import{ConvertError as I}from"@mdgate/core";import{ConvertError as _W}from"@mdgate/core";function f(W,$=Number.MAX_SAFE_INTEGER){let X=0,[U,q]=R(W,0);if(X=q,U>$)throw _W.malformed(`snappy block declares ${U} decompressed bytes`);let K=new Uint8Array(U),_=0;while(X<W.length&&_<U){let H=W[X];X+=1;let J=H&3;if(J===0){let Q=H>>2;if(Q<60)Q+=1;else{let z=Q-59;Q=0;for(let F=0;F<z;F+=1){if(X>=W.length)throw L("truncated snappy literal length");Q|=W[X]<<8*F,X+=1}Q+=1}if(X+Q>W.length||_+Q>K.length)throw L("truncated snappy literal");K.set(W.subarray(X,X+Q),_),X+=Q,_+=Q;continue}let G,A;if(J===1){if(X>=W.length)throw L("truncated snappy copy");G=(H>>2&7)+4,A=H>>5<<8|W[X],X+=1}else if(J===2){if(X+2>W.length)throw L("truncated snappy copy");G=(H>>2)+1,A=W[X]|W[X+1]<<8,X+=2}else{if(X+4>W.length)throw L("truncated snappy copy");G=(H>>2)+1,A=W[X]|W[X+1]<<8|W[X+2]<<16|W[X+3]<<24,X+=4}if(A===0||A>_||_+G>K.length)throw L("invalid snappy copy");for(let Q=0;Q<G;Q+=1)K[_]=K[_-A],_+=1}if(_!==U)throw L("snappy length mismatch");return K}function d(W){let $=[];l($,W.length);let X=0;while(X<W.length){let U=W.length-X,q=Math.min(U,65536);gW($,W.subarray(X,X+q)),X+=q}return Uint8Array.from($)}function gW(W,$){let X=$.length;if(X<=60)W.push(X-1<<2|0);else if(X<=256)W.push(240,X-1);else if(X<=65536)W.push(244,X-1&255,X-1>>8&255);else throw Error("literal too large");for(let U=0;U<$.length;U+=1)W.push($[U])}function R(W,$){let X=0,U=0,q=$;while(q<W.length&&U<=63){let K=W[q];if(q+=1,X+=(K&127)*2**U,(K&128)===0)return[X,q];U+=7}throw L("truncated varint")}function l(W,$){let X=$>>>0;while(X>=128)W.push(X&127|128),X>>>=7;W.push(X)}function L(W){return _W.malformed(W)}function O(W){let $=[],X=0;while(X<W.length){let[U,q]=R(W,X);X=q;let K=U>>>3,_=U&7;if(K===0)break;if(_===0){let[H,J]=R(W,X);X=J,$.push({field:K,value:{kind:"varint",value:H}})}else if(_===1){if(X+8>W.length)throw I.malformed("truncated fixed64");let H=new DataView(W.buffer,W.byteOffset+X,8);$.push({field:K,value:{kind:"fixed64",value:H.getBigUint64(0,!0)}}),X+=8}else if(_===5){if(X+4>W.length)throw I.malformed("truncated fixed32");let H=new DataView(W.buffer,W.byteOffset+X,4);$.push({field:K,value:{kind:"fixed32",value:H.getUint32(0,!0)}}),X+=4}else if(_===2){let[H,J]=R(W,X);if(X=J,X+H>W.length)throw I.malformed("truncated length-delimited");$.push({field:K,value:{kind:"bytes",value:W.subarray(X,X+H)}}),X+=H}else if(_!==3&&_!==4)throw I.malformed(`unsupported protobuf wire type ${_}`)}return $}function Z(W,$){for(let X of W)if(X.field===$&&X.value.kind==="bytes")return X.value.value;return}function N(W,$){for(let X of W)if(X.field===$&&X.value.kind==="varint")return X.value.value;return}function T(W,$){let X=Z(W,$);if(X===void 0)return;return new TextDecoder("utf-8").decode(X)}function P(W,$){let X=[];for(let U of W)if(U.field===$&&U.value.kind==="bytes")X.push(O(U.value.value));return X}function pW(W,$){let X=[];for(let U of W)if(U.field===$&&U.value.kind==="bytes")X.push(U.value.value);return X}function x(W){if(W===void 0)return;return N(O(W),1)}function S(W,$){let X=[];for(let U of P(W,$)){let q=N(U,1);if(q!==void 0)X.push(q)}return X}function hW(W,$){let X=[];return HW(X,W,0),r(X,$),X}function o(W,$){let X=[];HW(X,W,2),r(X,$.length);for(let U=0;U<$.length;U+=1)X.push($[U]);return X}function yW(W,$){return o(W,new TextEncoder().encode($))}function nW(W,$){return o(W,Uint8Array.from($))}function HW(W,$,X){r(W,$<<3|X)}function r(W,$){let X=$>>>0;while(X>=128)W.push(X&127|128),X>>>=7;W.push(X)}function s(W){let $=[],X=[],U=0,q=0;while(q+4<=W.length){let H=W[q],J=W[q+1]|W[q+2]<<8|W[q+3]<<16;if(q+=4,J===0)continue;if(q+J>W.length)throw i.malformed("truncated IWA snappy chunk");let G=W.subarray(q,q+J);if(q+=J,H!==0)continue;let A=f(G);U+=A.length,X.push(A)}if(X.length===0)return $;if(X.length===1)return JW(X[0],$),$;let K=new Uint8Array(U),_=0;for(let H of X)K.set(H,_),_+=H.length;return JW(K,$),$}function JW(W,$){let X=0;while(X<W.length){let[U,q]=R(W,X);if(U===0)break;if(q+U>W.length)throw i.malformed("truncated ArchiveInfo");let K=W.subarray(q,q+U);X=q+U;let _=O(K),H=N(_,1)??0,J=P(_,2);for(let G of J){let A=N(G,1)??0,Q=N(G,3)??0;if(X+Q>W.length)throw i.malformed("truncated IWA payload");let z=W.subarray(X,X+Q);X+=Q,$.push({id:H,type:A,payload:z,fields:O(z)})}}}function vW(W){let $=[];for(let q of W){let K=[...a(1,q.type),...a(3,q.payload.length)],_=[...a(1,q.id),...bW(2,Uint8Array.from(K))];l($,_.length);for(let H of _)$.push(H);for(let H=0;H<q.payload.length;H+=1)$.push(q.payload[H])}let X=d(Uint8Array.from($)),U=new Uint8Array(4+X.length);return U[0]=0,U[1]=X.length&255,U[2]=X.length>>8&255,U[3]=X.length>>16&255,U.set(X,4),U}function a(W,$){let X=[];return B(X,W<<3|0),B(X,$),X}function bW(W,$){let X=[];B(X,W<<3|2),B(X,$.length);for(let U=0;U<$.length;U+=1)X.push($[U]);return X}function B(W,$){let X=$>>>0;while(X>=128)W.push(X&127|128),X>>>=7;W.push(X)}import{Package as ZW,parseXml as cW}from"@mdgate/containers";import{ConvertError as m}from"@mdgate/core";import{emptyDocument as fW,heading as dW,plain as t}from"@mdgate/document";import{trim as QW}from"@mdgate/utils";var lW=["index.xml","index.apxl","presentation.apxl"];function j(W){if(!NW(W))return;let $;try{$=ZW.open(W)}catch{return}if(DW($))return zW($)??"pages";return AW($)}function oW(W,$){if(!NW(W))throw m.malformed("not a readable iWork package");let X;try{X=ZW.open(W)}catch(H){if(H instanceof m)throw H;throw m.malformed(`not a readable iWork package: ${H instanceof Error?H.message:String(H)}`)}if(DW(X))throw m.encrypted();let U=AW(X)??$;if(U===void 0)throw m.malformed("unrecognized iWork document kind");if($!==void 0&&U!==$)throw m.malformed(`expected ${$} document, found ${U}`);let q=FW(X);if(q===void 0)throw m.malformed("no IWA objects found");let K=rW(q),_=fW();if(K.length===0)return _;if(U==="keynote"||U==="numbers"){_.blocks.push(dW(2,[t(K[0])]));for(let H of K.slice(1))_.blocks.push({type:"paragraph",inlines:[t(H)]});return _}for(let H of K)_.blocks.push({type:"paragraph",inlines:[t(H)]});return _}function AW(W){let $=[...W.partNames()].map((q)=>q.toLowerCase()),X=zW(W),U=FW(W);if(U!==void 0){let q=U.childElems()[0]??U,K=q.ns??"",_=q.local;if(K.includes("/ls")||_==="workbook")return"numbers";if(K.includes("/key")||_==="presentation"||_==="slideshow")return"keynote";if(K.includes("/sl")&&_==="presentation")return"keynote";if(K.includes("/pg")||K.includes("/sl")||_==="document")return X??"pages"}if(X!==void 0)return X;if($.some((q)=>q.endsWith("index.xml")||q.endsWith("index.apxl")))return"pages";return}function zW(W){let $=!1,X=!1,U=!1;for(let q of W.partNames()){let K=q.toLowerCase();if(K.endsWith("presentation.apxl")||K.includes("slide"))$=!0;if(K.includes("calculation")||K.includes("tables/"))X=!0;if(K.endsWith("index.xml")||K.endsWith("index.apxl"))U=!0}if($&&!X)return"keynote";if(X&&!$)return"numbers";if(U)return"pages";return}function FW(W){for(let $ of lW){let X=GW(W,$);if(X!==void 0)return X}for(let $ of W.partNames()){let X=$.toLowerCase();if(!(X.endsWith(".xml")||X.endsWith(".apxl")))continue;if(X.includes("preview")||X.includes("quicklook")||X.includes("thumbnail"))continue;if(X.includes("index")||X.includes("presentation")||X.includes("document")){let U=GW(W,$);if(U!==void 0)return U}}return}function GW(W,$){try{let X=W.optionalPart($);if(X===void 0)return;return cW(X)}catch{return}}function rW(W){let $=[],X=new Set;for(let q of W.descendantElems()){if(q.local!=="p"&&q.local!=="text")continue;let K=QW(q.text().replace(/\s+/g," "));if(K.length===0||X.has(K))continue;X.add(K),$.push(K)}if($.length>0)return $;let U=QW(W.text().replace(/\s+/g," "));return U.length===0?[]:[U]}function DW(W){for(let $ of W.partNames()){let X=$.toLowerCase();if(X.includes("encrypted")||X.endsWith(".iwae"))return!0}return!1}function NW(W){return W.length>=4&&W[0]===80&&W[1]===75&&W[2]===3&&W[3]===4}var D={TP_DOCUMENT:1e4,TP_PLACEHOLDER:7,TN_DOCUMENT:1,TN_SHEET:2,KN_DOCUMENT:1,KN_SHOW:2,KN_SLIDE_NODE:4,KN_SLIDE:5,KN_SLIDE_ALT:6,KN_PLACEHOLDER:12,TSWP_STORAGE:2001,TSWP_STORAGE_ALT:2005,TSWP_SHAPE_INFO:2011,TSWP_CHARACTER_STYLE:2021,TSWP_PARAGRAPH_STYLE:2022,TSWP_LIST_STYLE:2023,TSWP_HYPERLINK:2032,TSWP_DRAWABLE_ATTACHMENT:2003,TSD_DRAWABLE:3002,TSD_SHAPE:3004,TSD_IMAGE:3005,TSD_GROUP:3008,TST_TABLE_INFO:6000,TST_TABLE_MODEL:6001,TST_TILE:6002,TST_TABLE_DATA_LIST:6005,TST_TABLE_DATA_LIST_ALT:6201,TST_RICH_TEXT_PAYLOAD:6218,TST_WP_TABLE_INFO:6007};function CW(W,$){if(!MW(W))throw k.malformed("not a readable iWork package");let X;try{X=xW.open(W)}catch(_){if(_ instanceof k)throw _;throw k.malformed(`not a readable iWork package: ${_ instanceof Error?_.message:String(_)}`)}if(tW(X))throw k.encrypted();let U=new Map;YW(X,U);let q=X.optionalPart("Index.zip");if(q!==void 0){let _;try{_=xW.open(q)}catch(H){throw k.malformed(`unreadable Index.zip: ${H instanceof Error?H.message:String(H)}`)}YW(_,U)}if(U.size===0)throw k.malformed("no IWA objects found");let K=sW(U)??$;if(K===void 0)throw k.malformed("unrecognized iWork document kind");if($!==void 0&&K!==$)throw k.malformed(`expected ${$} document, found ${K}`);return{kind:K,objects:U}}function iW(W){if(!MW(W))return;try{return CW(W).kind}catch($){if($ instanceof k&&$.code==="encrypted")return j(W);return j(W)}}function Y(W,$){if($===void 0)return;return W.objects.get($)}function M(W,$,X){let U=x(Z($,X));return Y(W,U)}function u(W,$,X){let U=[];for(let q of S($,X)){let K=W.objects.get(q);if(K!==void 0)U.push(K)}return U}function YW(W,$){for(let X of W.partNames()){if(!X.toLowerCase().endsWith(".iwa"))continue;let U=W.optionalPart(X);if(U===void 0)continue;let q;try{q=s(U)}catch(K){if(K instanceof k&&(K.code==="encrypted"||K.isFatal()))throw K;aW(`skipping unreadable IWA ${X}: ${K instanceof Error?K.message:String(K)}`);continue}for(let K of q)if(!$.has(K.id))$.set(K.id,K)}}function sW(W){for(let X of W.values())if(X.type===D.TP_DOCUMENT)return"pages";let $=W.get(1);if($!==void 0&&$.type===1)return OW($.fields);for(let X of W.values())if(X.type===1){let U=OW(X.fields);if(U!==void 0)return U}for(let X of W.values()){if(X.type===D.KN_SLIDE||X.type===D.KN_SLIDE_ALT||X.type===D.KN_SHOW)return"keynote";if(X.type===D.TN_SHEET)return"numbers"}return}function OW(W){let $=S(W,1),X=x(Z(W,2)),U=Z(W,8)!==void 0,q=Z(W,3)!==void 0&&!U;if($.length>0||U)return"numbers";if(X!==void 0||q)return"keynote";return}function tW(W){for(let $ of W.partNames()){let X=$.toLowerCase();if(X.includes("encrypted")||X.endsWith(".iwae"))return!0}return!1}function MW(W){return W.length>=4&&W[0]===80&&W[1]===75&&W[2]===3&&W[3]===4}import{inlinesAreEmpty as PW,inlinesToPlainText as eW,PLAIN as g,plain as v0}from"@mdgate/document";function w(W,$){let X=X0($,3);if(X.length===0)return[];let q=[...X.join("")],K=e($,5),_=e($,8),H=e($,7),J=[];if(K.length===0){let G=VW(W,q,0,q.length,_);if(!PW(G))J.push({type:"paragraph",inlines:G});return J}for(let G=0;G<K.length;G+=1){let A=K[G].index,Q=G+1<K.length?K[G+1].index:q.length;if(A>=Q||A>=q.length)continue;let z=Y(W,K[G].objectId),{level:F,emphasis:C}=SW(W,z?.fields),V=VW(W,q,A,Q,_,C);if(PW(V))continue;if(F!==void 0&&F>=1&&F<=6)J.push({type:"heading",level:F,anchor:eW(V),content:V});else J.push({type:"paragraph",inlines:V})}return J}function W0(W,$){let X=Y(W,$);if(X===void 0)return[];if(X.type!==D.TSWP_STORAGE&&X.type!==D.TSWP_STORAGE_ALT);return w(W,X.fields)}function e(W,$){let X=Z(W,$);if(X===void 0)return[];let U=[];for(let q of P(O(X),1)){let K=N(q,1);if(K===void 0)continue;U.push({index:K,objectId:x(Z(q,2))})}return U}function X0(W,$){let X=[];for(let U of W){if(U.field!==$||U.value.kind!=="bytes")continue;X.push(new TextDecoder("utf-8").decode(U.value.value))}return X}function VW(W,$,X,U,q,K=g){let _=[],H=X,J=q.filter((A)=>A.index>=X&&A.index<U),G=(A,Q,z)=>{if(A>=Q)return;let F=$.slice(A,Q).join("");if(F.length===0)return;_.push({type:"text",text:F,style:z})};if(J.length===0)return G(X,Math.min(U,$.length),K),_;for(let A=0;A<J.length;A+=1){let Q=J[A].index,z=A+1<J.length?J[A+1].index:U,F=Math.min(z,U);if(Q>H)G(H,Math.min(Q,U),K),H=Q;if(Q>=U)break;let C=Y(W,J[A].objectId),V=XW(K,kW(W,C?.fields));G(Q,F,V),H=F}if(H<U)G(H,Math.min(U,$.length),K);return $0(_)}function $0(W){let $=W.map((U)=>{if(U.type!=="text")return U;return{...U,text:U.text.replace(/\u2029/g,"").replace(/\u2028/g,`
|
|
2
|
-
`)}}),X
|
|
3
|
-
`)){let U
|
|
1
|
+
import{Package as MW}from"@mdgate/containers";import{ConvertError as L}from"@mdgate/core";import{warn as sW}from"@mdgate/utils";import{ConvertError as s}from"@mdgate/core";import{ConvertError as I}from"@mdgate/core";import{ConvertError as QW}from"@mdgate/core";function d(W,X=Number.MAX_SAFE_INTEGER){let U=0,[$,q]=m(W,0);if(U=q,$>X)throw QW.malformed(`snappy block declares ${$} decompressed bytes`);let K=new Uint8Array($),_=0;while(U<W.length&&_<$){let H=W[U];U+=1;let J=H&3;if(J===0){let Q=H>>2;if(Q<60)Q+=1;else{let z=Q-59;Q=0;for(let F=0;F<z;F+=1){if(U>=W.length)throw k("truncated snappy literal length");Q|=W[U]<<8*F,U+=1}Q+=1}if(U+Q>W.length||_+Q>K.length)throw k("truncated snappy literal");K.set(W.subarray(U,U+Q),_),U+=Q,_+=Q;continue}let G,A;if(J===1){if(U>=W.length)throw k("truncated snappy copy");G=(H>>2&7)+4,A=H>>5<<8|W[U],U+=1}else if(J===2){if(U+2>W.length)throw k("truncated snappy copy");G=(H>>2)+1,A=W[U]|W[U+1]<<8,U+=2}else{if(U+4>W.length)throw k("truncated snappy copy");G=(H>>2)+1,A=W[U]|W[U+1]<<8|W[U+2]<<16|W[U+3]<<24,U+=4}if(A===0||A>_||_+G>K.length)throw k("invalid snappy copy");for(let Q=0;Q<G;Q+=1)K[_]=K[_-A],_+=1}if(_!==$)throw k("snappy length mismatch");return K}function l(W){let X=[];o(X,W.length);let U=0;while(U<W.length){let $=W.length-U,q=Math.min($,65536);hW(X,W.subarray(U,U+q)),U+=q}return Uint8Array.from(X)}function hW(W,X){let U=X.length;if(U<=60)W.push(U-1<<2|0);else if(U<=256)W.push(240,U-1);else if(U<=65536)W.push(244,U-1&255,U-1>>8&255);else throw Error("literal too large");for(let $=0;$<X.length;$+=1)W.push(X[$])}function m(W,X){let U=0,$=0,q=X;while(q<W.length&&$<=63){let K=W[q];if(q+=1,U+=(K&127)*2**$,(K&128)===0)return[U,q];$+=7}throw k("truncated varint")}function o(W,X){let U=X>>>0;while(U>=128)W.push(U&127|128),U>>>=7;W.push(U)}function k(W){return QW.malformed(W)}function M(W){let X=[],U=0;while(U<W.length){let[$,q]=m(W,U);U=q;let K=$>>>3,_=$&7;if(K===0)break;if(_===0){let[H,J]=m(W,U);U=J,X.push({field:K,value:{kind:"varint",value:H}})}else if(_===1){if(U+8>W.length)throw I.malformed("truncated fixed64");let H=new DataView(W.buffer,W.byteOffset+U,8);X.push({field:K,value:{kind:"fixed64",value:H.getBigUint64(0,!0)}}),U+=8}else if(_===5){if(U+4>W.length)throw I.malformed("truncated fixed32");let H=new DataView(W.buffer,W.byteOffset+U,4);X.push({field:K,value:{kind:"fixed32",value:H.getUint32(0,!0)}}),U+=4}else if(_===2){let[H,J]=m(W,U);if(U=J,U+H>W.length)throw I.malformed("truncated length-delimited");X.push({field:K,value:{kind:"bytes",value:W.subarray(U,U+H)}}),U+=H}else if(_!==3&&_!==4)throw I.malformed(`unsupported protobuf wire type ${_}`)}return X}function Z(W,X){for(let U of W)if(U.field===X&&U.value.kind==="bytes")return U.value.value;return}function D(W,X){for(let U of W)if(U.field===X&&U.value.kind==="varint")return U.value.value;return}function T(W,X){let U=Z(W,X);if(U===void 0)return;return new TextDecoder("utf-8").decode(U)}function P(W,X){let U=[];for(let $ of W)if($.field===X&&$.value.kind==="bytes")U.push(M($.value.value));return U}function nW(W,X){let U=[];for(let $ of W)if($.field===X&&$.value.kind==="bytes")U.push($.value.value);return U}function N(W){if(W===void 0)return;return D(M(W),1)}function S(W,X){let U=[];for(let $ of P(W,X)){let q=D($,1);if(q!==void 0)U.push(q)}return U}function yW(W,X){let U=[];return GW(U,W,0),a(U,X),U}function r(W,X){let U=[];GW(U,W,2),a(U,X.length);for(let $=0;$<X.length;$+=1)U.push(X[$]);return U}function vW(W,X){return r(W,new TextEncoder().encode(X))}function bW(W,X){return r(W,Uint8Array.from(X))}function GW(W,X,U){a(W,X<<3|U)}function a(W,X){let U=X>>>0;while(U>=128)W.push(U&127|128),U>>>=7;W.push(U)}function t(W){let X=[],U=[],$=0,q=0;while(q+4<=W.length){let H=W[q],J=W[q+1]|W[q+2]<<8|W[q+3]<<16;if(q+=4,J===0)continue;if(q+J>W.length)throw s.malformed("truncated IWA snappy chunk");let G=W.subarray(q,q+J);if(q+=J,H!==0)continue;let A=d(G);$+=A.length,U.push(A)}if(U.length===0)return X;if(U.length===1)return ZW(U[0],X),X;let K=new Uint8Array($),_=0;for(let H of U)K.set(H,_),_+=H.length;return ZW(K,X),X}function ZW(W,X){let U=0;while(U<W.length){let[$,q]=m(W,U);if($===0)break;if(q+$>W.length)throw s.malformed("truncated ArchiveInfo");let K=W.subarray(q,q+$);U=q+$;let _=M(K),H=D(_,1)??0,J=P(_,2);for(let G of J){let A=D(G,1)??0,Q=D(G,3)??0;if(U+Q>W.length)throw s.malformed("truncated IWA payload");let z=W.subarray(U,U+Q);U+=Q,X.push({id:H,type:A,payload:z,fields:M(z)})}}}function cW(W){let X=[];for(let q of W){let K=[...i(1,q.type),...i(3,q.payload.length)],_=[...i(1,q.id),...fW(2,Uint8Array.from(K))];o(X,_.length);for(let H of _)X.push(H);for(let H=0;H<q.payload.length;H+=1)X.push(q.payload[H])}let U=l(Uint8Array.from(X)),$=new Uint8Array(4+U.length);return $[0]=0,$[1]=U.length&255,$[2]=U.length>>8&255,$[3]=U.length>>16&255,$.set(U,4),$}function i(W,X){let U=[];return B(U,W<<3|0),B(U,X),U}function fW(W,X){let U=[];B(U,W<<3|2),B(U,X.length);for(let $=0;$<X.length;$+=1)U.push(X[$]);return U}function B(W,X){let U=X>>>0;while(U>=128)W.push(U&127|128),U>>>=7;W.push(U)}import{Package as WW,parseXml as dW}from"@mdgate/containers";import{ConvertError as R}from"@mdgate/core";import{emptyDocument as lW,heading as oW,plain as e}from"@mdgate/document";import{trim as u}from"@mdgate/utils";var rW=["index.xml","index.apxl","presentation.apxl"];function j(W){if(!UW(W))return;let X;try{X=WW.open(W)}catch{return}if(DW(X))return;if(YW(X))return FW(X)??"pages";return zW(X)}function aW(W,X){if(!UW(W))throw R.malformed("not a readable iWork package");let U;try{U=WW.open(W)}catch(H){if(H instanceof R)throw H;throw R.malformed(`not a readable iWork package: ${H instanceof Error?H.message:String(H)}`)}if(YW(U))throw R.encrypted();let $=zW(U)??X;if($===void 0)throw R.malformed("unrecognized iWork document kind");if(X!==void 0&&$!==X)throw R.malformed(`expected ${X} document, found ${$}`);let q=xW(U);if(q===void 0)throw R.malformed("no IWA objects found");let K=iW(q),_=lW();if(K.length===0)return _;if($==="keynote"||$==="numbers"){_.blocks.push(oW(2,[e(K[0])]));for(let H of K.slice(1))_.blocks.push({type:"paragraph",inlines:[e(H)]});return _}for(let H of K)_.blocks.push({type:"paragraph",inlines:[e(H)]});return _}function zW(W){let X=[...W.partNames()].map((q)=>q.toLowerCase()),U=FW(W),$=xW(W);if($!==void 0){let q=$.childElems()[0]??$,K=q.ns??"",_=q.local;if(K.includes("/ls")||_==="workbook")return"numbers";if(K.includes("/key")||_==="presentation"||_==="slideshow")return"keynote";if(K.includes("/sl")&&_==="presentation")return"keynote";if(K.includes("/pg")||K.includes("/sl")||_==="document")return U??"pages"}if(U!==void 0)return U;if(X.some((q)=>q.endsWith("index.xml")||q.endsWith("index.apxl")))return"pages";return}function FW(W){let X=!1,U=!1,$=!1;for(let q of W.partNames()){let K=q.toLowerCase();if(K.endsWith("presentation.apxl")||K.includes("slide"))X=!0;if(K.includes("calculation")||K.includes("tables/"))U=!0;if(K.endsWith("index.xml")||K.endsWith("index.apxl"))$=!0}if(X&&!U)return"keynote";if(U&&!X)return"numbers";if($)return"pages";return}function xW(W){for(let X of rW){let U=AW(W,X);if(U!==void 0)return U}for(let X of W.partNames()){let U=X.toLowerCase();if(!(U.endsWith(".xml")||U.endsWith(".apxl")))continue;if(U.includes("preview")||U.includes("quicklook")||U.includes("thumbnail"))continue;if(U.includes("index")||U.includes("presentation")||U.includes("document")){let $=AW(W,X);if($!==void 0)return $}}return}function AW(W,X){try{let U=W.optionalPart(X);if(U===void 0)return;return dW(U)}catch{return}}function iW(W){let X=[],U=new Set;for(let q of W.descendantElems()){if(q.local==="ct"){let _=u((q.attrAny("s")??"").replace(/\s+/g," "));if(_.length===0||U.has(_))continue;U.add(_),X.push(_);continue}if(q.local!=="p"&&q.local!=="text")continue;let K=u(q.text().replace(/\s+/g," "));if(K.length===0||U.has(K))continue;U.add(K),X.push(K)}if(X.length>0)return X;let $=u(W.text().replace(/\s+/g," "));return $.length===0?[]:[$]}function DW(W){let X=W.optionalPart("mimetype");if(X===void 0)return!1;let U=u(new TextDecoder().decode(X));return U==="application/epub+zip"||U==="application/x-ibooks+zip"}function NW(W){if(!UW(W))return!1;try{return DW(WW.open(W))}catch{return!1}}function YW(W){if(W.hasEncryptedEntries())return!0;for(let X of W.partNames()){let U=X.toLowerCase();if(U.includes("encrypted")||U.endsWith(".iwae"))return!0}return!1}function UW(W){return W.length>=4&&W[0]===80&&W[1]===75&&W[2]===3&&W[3]===4}var x={TP_DOCUMENT:1e4,TP_PLACEHOLDER:7,TN_DOCUMENT:1,TN_SHEET:2,KN_DOCUMENT:1,KN_SHOW:2,KN_SLIDE_NODE:4,KN_SLIDE:5,KN_SLIDE_ALT:6,KN_PLACEHOLDER:12,TSWP_STORAGE:2001,TSWP_STORAGE_ALT:2005,TSWP_SHAPE_INFO:2011,TSWP_CHARACTER_STYLE:2021,TSWP_PARAGRAPH_STYLE:2022,TSWP_LIST_STYLE:2023,TSWP_HYPERLINK:2032,TSWP_DRAWABLE_ATTACHMENT:2003,TSD_DRAWABLE:3002,TSD_SHAPE:3004,TSD_IMAGE:3005,TSD_GROUP:3008,TST_TABLE_INFO:6000,TST_TABLE_MODEL:6001,TST_TILE:6002,TST_TABLE_DATA_LIST:6005,TST_TABLE_DATA_LIST_ALT:6201,TST_RICH_TEXT_PAYLOAD:6218,TST_WP_TABLE_INFO:6007};function PW(W,X){if(!VW(W))throw L.malformed("not a readable iWork package");let U;try{U=MW.open(W)}catch(_){if(_ instanceof L)throw _;throw L.malformed(`not a readable iWork package: ${_ instanceof Error?_.message:String(_)}`)}if(W0(U))throw L.encrypted();let $=new Map;OW(U,$);let q=U.optionalPart("Index.zip");if(q!==void 0){let _;try{_=MW.open(q)}catch(H){throw L.malformed(`unreadable Index.zip: ${H instanceof Error?H.message:String(H)}`)}OW(_,$)}if($.size===0)throw L.malformed("no IWA objects found");let K=eW($)??X;if(K===void 0)throw L.malformed("unrecognized iWork document kind");if(X!==void 0&&K!==X)throw L.malformed(`expected ${X} document, found ${K}`);return{kind:K,objects:$}}function tW(W){if(!VW(W))return;if(NW(W))return;try{return PW(W).kind}catch(X){if(X instanceof L&&X.code==="encrypted")return j(W);return j(W)}}function Y(W,X){if(X===void 0)return;return W.objects.get(X)}function C(W,X,U){let $=N(Z(X,U));return Y(W,$)}function g(W,X,U){let $=[];for(let q of S(X,U)){let K=W.objects.get(q);if(K!==void 0)$.push(K)}return $}function OW(W,X){for(let U of W.partNames()){if(!U.toLowerCase().endsWith(".iwa"))continue;let $=W.optionalPart(U);if($===void 0)continue;let q;try{q=t($)}catch(K){if(K instanceof L&&(K.code==="encrypted"||K.isFatal()))throw K;sW(`skipping unreadable IWA ${U}: ${K instanceof Error?K.message:String(K)}`);continue}for(let K of q)if(!X.has(K.id))X.set(K.id,K)}}function eW(W){for(let U of W.values())if(U.type===x.TP_DOCUMENT)return"pages";let X=W.get(1);if(X!==void 0&&X.type===1)return CW(X.fields);for(let U of W.values())if(U.type===1){let $=CW(U.fields);if($!==void 0)return $}for(let U of W.values()){if(U.type===x.KN_SLIDE||U.type===x.KN_SLIDE_ALT||U.type===x.KN_SHOW)return"keynote";if(U.type===x.TN_SHEET)return"numbers"}return}function CW(W){let X=S(W,1),U=N(Z(W,2)),$=Z(W,8)!==void 0,q=Z(W,3)!==void 0&&!$;if(X.length>0||$)return"numbers";if(U!==void 0||q)return"keynote";return}function W0(W){if(W.hasEncryptedEntries())return!0;for(let X of W.partNames()){let U=X.toLowerCase();if(U.includes("encrypted")||U.endsWith(".iwae"))return!0}return!1}function VW(W){return W.length>=4&&W[0]===80&&W[1]===75&&W[2]===3&&W[3]===4}import{inlinesAreEmpty as SW,inlinesToPlainText as U0,PLAIN as p,plain as c0}from"@mdgate/document";function E(W,X){let U=$0(X,3);if(U.length===0)return[];let q=[...U.join("")],K=XW(X,5),_=XW(X,8),H=XW(X,7),J=[];if(K.length===0){let G=LW(W,q,0,q.length,_);if(!SW(G))J.push({type:"paragraph",inlines:G});return J}for(let G=0;G<K.length;G+=1){let A=K[G].index,Q=G+1<K.length?K[G+1].index:q.length;if(A>=Q||A>=q.length)continue;let z=Y(W,K[G].objectId),{level:F,emphasis:O}=kW(W,z?.fields),V=LW(W,q,A,Q,_,O);if(SW(V))continue;if(F!==void 0&&F>=1&&F<=6)J.push({type:"heading",level:F,anchor:U0(V),content:V});else J.push({type:"paragraph",inlines:V})}return J}function X0(W,X){let U=Y(W,X);if(U===void 0)return[];if(U.type!==x.TSWP_STORAGE&&U.type!==x.TSWP_STORAGE_ALT);return E(W,U.fields)}function XW(W,X){let U=Z(W,X);if(U===void 0)return[];let $=[];for(let q of P(M(U),1)){let K=D(q,1);if(K===void 0)continue;$.push({index:K,objectId:N(Z(q,2))})}return $}function $0(W,X){let U=[];for(let $ of W){if($.field!==X||$.value.kind!=="bytes")continue;U.push(new TextDecoder("utf-8").decode($.value.value))}return U}function LW(W,X,U,$,q,K=p){let _=[],H=U,J=q.filter((A)=>A.index>=U&&A.index<$),G=(A,Q,z)=>{if(A>=Q)return;let F=X.slice(A,Q).join("");if(F.length===0)return;_.push({type:"text",text:F,style:z})};if(J.length===0)return G(U,Math.min($,X.length),K),_;for(let A=0;A<J.length;A+=1){let Q=J[A].index,z=A+1<J.length?J[A+1].index:$,F=Math.min(z,$);if(Q>H)G(H,Math.min(Q,$),K),H=Q;if(Q>=$)break;let O=Y(W,J[A].objectId),V=qW(K,mW(W,O?.fields));G(Q,F,V),H=F}if(H<$)G(H,Math.min($,X.length),K);return q0(_)}function q0(W){let X=W.map(($)=>{if($.type!=="text")return $;return{...$,text:$.text.replace(/\u2029/g,"").replace(/\u2028/g,`
|
|
2
|
+
`)}}),U=X[X.length-1];if(U?.type==="text"&&U.text.endsWith(`
|
|
3
|
+
`)){let $=U.text.replace(/\n+$/,"");if($.length===0)return X.slice(0,-1);return[...X.slice(0,-1),{...U,text:$}]}return X}function kW(W,X){if(X===void 0)return{level:void 0,emphasis:p};let U=Z(X,12),$=Z(X,11),q;if(U!==void 0)q=D(M(U),27);let K=Z(X,1);if(K!==void 0){let _=N(Z(M(K),3)),H=Y(W,_);if(H!==void 0){let J=kW(W,H.fields);if(q===void 0)q=J.level;return{level:q,emphasis:qW(J.emphasis,$W($))}}}return{level:q,emphasis:$W($)}}function mW(W,X){if(X===void 0)return p;let U=Z(X,11),$=$W(U),q=Z(X,1);if(q!==void 0){let K=N(Z(M(q),3)),_=Y(W,K);if(_!==void 0)return qW(mW(W,_.fields),$)}return $}function $W(W){if(W===void 0)return p;let X=M(W),U=D(X,1)===1,$=D(X,2)===1,q=(D(X,12)??0)>0;return{bold:U,italic:$,strike:q,code:!1}}function qW(W,X){return{bold:X.bold||W.bold,italic:X.italic||W.italic,strike:X.strike||W.strike,code:X.code||W.code}}function h(W,X){if(X.type===x.TSWP_SHAPE_INFO||X.type===x.TP_PLACEHOLDER||X.type===x.KN_PLACEHOLDER){let U=X.fields;if(X.type===x.TP_PLACEHOLDER||X.type===x.KN_PLACEHOLDER){let q=C(W,U,1);if(q!==void 0)U=q.fields}let $=C(W,U,2);if($!==void 0)return E(W,$.fields)}return[]}import{cellFromInlines as K0,emptyDocument as _0,heading as H0,plain as RW,tableFromRows as J0}from"@mdgate/document";function wW(W,X){let U=X,$=C(W,X,1),q=C(W,U,2);if(q===void 0&&$!==void 0)U=$.fields,q=C(W,U,2);if(q===void 0)return[];return Q0(W,q.fields)}function Q0(W,X){let U=D(X,6)??0,$=D(X,7)??0;if(U===0||$===0)return[];let q=Z(X,4);if(q===void 0)return[];let K=M(q),_=G0(W,N(Z(K,4))),H=Z0(W,N(Z(K,17))),J=Array.from({length:U},()=>Array.from({length:$},()=>"")),G=Z(K,3);if(G===void 0)return J;let A=M(G);for(let Q of P(A,1)){let z=Y(W,N(Z(Q,2)));if(z===void 0)continue;let F=P(z.fields,5);for(let O of F){let V=D(O,1)??0,pW=Z(O,6)??Z(O,3)??new Uint8Array,b=Z(O,7)??Z(O,4)??new Uint8Array;if(b.length<2)continue;let c=new Uint8Array(b.byteLength);c.set(b);let HW=new Uint16Array(c.buffer,0,Math.floor(c.length/2));for(let w=0;w<HW.length&&w<$;w+=1){let JW=HW[w];if(JW===65535)continue;let f=V;if(f<0||f>=U)continue;J[f][w]=A0(pW,JW,_,H,W)}}}return F0(J)}function IW(W){let X=_0(),U=W.length>1;for(let $ of W){if($.rows.length===0)continue;if(U)X.blocks.push(H0(2,[RW($.name)]));let q=$.rows.map((_)=>_.map((H)=>K0([RW(H)]))),K=$.rows.length>1?1:0;X.blocks.push({type:"table",table:J0(q,K,"data")})}return X}function TW(W,X){let U=wW(W,X);if(U.length===0)return[];return IW([{name:"",rows:U}]).blocks}function G0(W,X){let U=new Map,$=Y(W,X);if($===void 0)return U;for(let q of P($.fields,3)){let K=D(q,1),_=T(q,3);if(K!==void 0&&_!==void 0)U.set(K,_)}return U}function Z0(W,X){let U=new Map,$=Y(W,X);if($===void 0)return U;for(let q of P($.fields,3)){let K=D(q,1),_=N(Z(q,9));if(K!==void 0&&_!==void 0)U.set(K,_)}return U}function A0(W,X,U,$,q){if(X+8>W.length)return"";let K=W[X],_,H,J,G;if(K===5||W[X]>=5)return _=W[X+1],H=W[X+8]|W[X+9]<<8|W[X+10]<<16|W[X+11]<<24,J=4,G=X+12,z0(W,_,H,G,U,$,q);if(W[X]===4)_=W[X+1],H=W[X+4]|W[X+5]<<8,J=2,G=X+8;else _=W[X+2],H=W[X+4]|W[X+5]<<8,J=2,G=X+8;let A=EW(H&65535),Q=G+A*4;if(Q=G+EW(H)*4,_===0)return"";if(_===2||_===5||_===6||_===7){if(Q+8>W.length)return"";let z=n(W,Q);if(_===6)return z!==0?"TRUE":"FALSE";if(_===5)return jW(z);return uW(z)}if(_===3||_===9){if(Q+4>W.length)return"";let z=W[Q]|W[Q+1]<<8|W[Q+2]<<16|W[Q+3]<<24;if(_===3)return U.get(z>>>0)??"";let F=$.get(z>>>0);return BW(q,F)}return""}function z0(W,X,U,$,q,K,_){let H=$,J=(F,O)=>{if((U&F)===0)return;if(H+O>W.length)return;let V=W.subarray(H,H+O);return H+=O,V};J(1,16);let G=J(2,8),A=J(4,8),Q=J(8,4),z=J(16,4);if(J(32,4),J(64,4),J(128,4),J(256,4),J(512,4),J(1024,4),J(2048,4),X===0)return"";if(X===2&&G!==void 0)return uW(n(G,0));if(X===5&&A!==void 0)return jW(n(A,0));if(X===6&&G!==void 0)return n(G,0)!==0?"TRUE":"FALSE";if(X===3&&Q!==void 0){let F=Q[0]|Q[1]<<8|Q[2]<<16|Q[3]<<24;return q.get(F>>>0)??""}if(X===9&&z!==void 0){let F=z[0]|z[1]<<8|z[2]<<16|z[3]<<24;return BW(_,K.get(F>>>0))}if(Q!==void 0){let F=Q[0]|Q[1]<<8|Q[2]<<16|Q[3]<<24,O=q.get(F>>>0);if(O!==void 0)return O}return""}function BW(W,X){let U=Y(W,X);if(U===void 0)return"";let $=N(Z(U.fields,1)),q=Y(W,$);if(q===void 0)return"";return E(W,q.fields).map((_)=>{if(_.type==="paragraph")return _.inlines.map((H)=>H.type==="text"?H.text:"").join("");if(_.type==="heading")return _.content.map((H)=>H.type==="text"?H.text:"").join("");return""}).filter(Boolean).join(" ")}function n(W,X){let U=new Uint8Array(8);return U.set(W.subarray(X,X+8)),new DataView(U.buffer).getFloat64(0,!0)}function F0(W){let X=-1,U=-1;for(let $=0;$<W.length;$+=1)for(let q=0;q<W[$].length;q+=1)if(W[$][q]!==""){if($>X)X=$;if(q>U)U=q}if(X<0)return[];return W.slice(0,X+1).map(($)=>$.slice(0,U+1))}function EW(W){let X=W&65535,U=0;while(X)X&=X-1,U+=1;return U}function uW(W){if(!Number.isFinite(W))return"";if(Number.isInteger(W))return String(W);return String(Number(W.toPrecision(12)))}function jW(W){let X=(W+978307200)*1000,U=new Date(X);if(Number.isNaN(U.getTime()))return"";return U.toISOString().slice(0,10)}function gW(W,X){if(X.type===x.TST_TABLE_INFO||X.type===x.TST_WP_TABLE_INFO)return TW(W,X.fields);return[]}function y(W,X){let U=Y(W,X);if(U===void 0)return[];return _W(W,U)}function _W(W,X){let U=gW(W,X);if(U.length>0)return U;let $=h(W,X);if($.length>0)return $;if(X.type===x.TSD_GROUP){let q=[];for(let K of g(W,X.fields,2))q.push(..._W(W,K));return q}if(X.type===x.TSWP_DRAWABLE_ATTACHMENT){let q=N(Z(X.fields,1));return y(W,q)}return[]}function v(W,X){let U=W.objects.get(1);if(U!==void 0&&U.type===X)return U;for(let $ of W.objects.values())if($.type===X)return $;return}function x0(W){let X=v(W,x.TP_DOCUMENT);if(X===void 0)return;return C(W,X.fields,4)?.fields}function D0(W){let X=v(W,x.TN_DOCUMENT)??[...W.objects.values()].find(($)=>$.type===1&&S($.fields,1).length>0);if(X===void 0)return[];let U=[];for(let $ of g(W,X.fields,1)){let q=Z($.fields,1),K=q!==void 0?new TextDecoder().decode(q):"Sheet";U.push({name:K,drawables:S($.fields,2)})}return U}function N0(W){let X=v(W,x.KN_DOCUMENT)??[...W.objects.values()].find((H)=>{if(H.type!==1)return!1;return N(Z(H.fields,2))!==void 0});if(X===void 0)return[];let U=C(W,X.fields,2);if(U===void 0)return[];let $=Z(U.fields,3),q,K=[];if($!==void 0){let H=N($);if(H!==void 0&&Y(W,H)?.type===x.KN_SLIDE_NODE)q=H;else{let J=M($);q=N(Z(J,1))??H,K=S(J,2)}}let _=[];if(K.length>0)for(let H of K)KW(W,H,_);else KW(W,q,_);return _}function KW(W,X,U){let $=Y(W,X);if($===void 0)return;let q=N(Z($.fields,2));if(q!==void 0){let K=Y(W,q);if(K!==void 0){let _=D(K.fields,19);if(_===void 0||_!==0)U.push(q)}}for(let K of S($.fields,1))KW(W,K,U)}function Y0(W,X){let U=Y(W,X);if(U===void 0)return[];let $=[],q=(_)=>{$.push(...y(W,N(Z(U.fields,_))))};q(5),q(6),q(30);for(let _ of S(U.fields,7))$.push(...y(W,_));let K=C(W,U.fields,27);if(K!==void 0){let _=h(W,K);if(_.length>0)$.push({type:"blockQuote",blocks:_});else{let H=E(W,K.fields);if(H.length>0)$.push({type:"blockQuote",blocks:H})}}return $}export{wW as tableInfoToRows,TW as tableBlocksFromInfo,E as storageToBlocks,X0 as storageObjectToBlocks,l as snappyEncodeLiterals,d as snappyDecode,Y0 as slideToBlocks,IW as sheetsToDocument,h as shapeStorageBlocks,S as readReferences,N as readReference,aW as parsePreIwa,t as parseIwa,PW as openIWork,D0 as numbersSheets,N0 as keynoteSlides,Y as getObject,v as findDocumentObject,D as fieldVarint,T as fieldString,P as fieldMessages,Z as fieldBytes,nW as fieldAllBytes,yW as encodeVarintField,vW as encodeStringField,bW as encodeMessageField,r as encodeBytesField,j as detectPreIwaKind,tW as detectIWorkKind,g as derefAll,C as deref,M as decodeMessage,_W as collectDrawableObject,y as collectDrawableBlocks,cW as buildIwa,x0 as bodyStorageFromPages,x as TYPE};
|
package/dist/pre-iwa.d.ts
CHANGED
|
@@ -2,3 +2,4 @@ import { type Document } from '@mdgate/document';
|
|
|
2
2
|
import type { IWorkKind } from './types.js';
|
|
3
3
|
export declare function detectPreIwaKind(bytes: Uint8Array): IWorkKind | undefined;
|
|
4
4
|
export declare function parsePreIwa(bytes: Uint8Array, expected?: IWorkKind): Document;
|
|
5
|
+
export declare function isEpubZip(bytes: Uint8Array): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdgate/iwork-common",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.14",
|
|
4
4
|
"description": "mdgate shared Apple iWork (Pages/Numbers/Keynote) IWA parsing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -28,10 +28,10 @@
|
|
|
28
28
|
"prepublishOnly": "bun run build"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@mdgate/containers": "0.6.
|
|
32
|
-
"@mdgate/core": "0.6.
|
|
33
|
-
"@mdgate/document": "0.6.
|
|
34
|
-
"@mdgate/utils": "0.6.
|
|
31
|
+
"@mdgate/containers": "0.6.14",
|
|
32
|
+
"@mdgate/core": "0.6.14",
|
|
33
|
+
"@mdgate/document": "0.6.14",
|
|
34
|
+
"@mdgate/utils": "0.6.14"
|
|
35
35
|
},
|
|
36
36
|
"publishConfig": {
|
|
37
37
|
"access": "public"
|