@mdgate/iwork-common 0.5.2 → 0.5.4
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.d.ts +1 -0
- package/dist/index.js +3 -3
- package/dist/pre-iwa.d.ts +4 -0
- package/package.json +5 -5
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { deref, derefAll, detectIWorkKind, getObject, type IWorkArchive, openIWork, } from './archive.js';
|
|
2
2
|
export { bodyStorageFromPages, collectDrawableBlocks, collectDrawableObject, findDocumentObject, keynoteSlides, numbersSheets, slideToBlocks, } from './drawables.js';
|
|
3
3
|
export { buildIwa, type IwaObject, parseIwa } from './iwa.js';
|
|
4
|
+
export { detectPreIwaKind, parsePreIwa } from './pre-iwa.js';
|
|
4
5
|
export { decodeMessage, encodeBytesField, encodeMessageField, encodeStringField, encodeVarintField, fieldAllBytes, fieldBytes, fieldMessages, fieldString, fieldVarint, type ProtoField, readReference, readReferences, } from './protobuf.js';
|
|
5
6
|
export { snappyDecode, snappyEncodeLiterals } from './snappy.js';
|
|
6
7
|
export { shapeStorageBlocks, storageObjectToBlocks, storageToBlocks } from './storage.js';
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{Package as XW}from"@mdgate/containers";import{ConvertError as x}from"@mdgate/core";import{warn as TW}from"@mdgate/utils";import{ConvertError as r}from"@mdgate/core";import{ConvertError as B}from"@mdgate/core";import{ConvertError as HW}from"@mdgate/core";function c(W,H=Number.MAX_SAFE_INTEGER){let q=0,[J,Q]=E(W,0);if(q=Q,J>H)throw HW.malformed(`snappy block declares ${J} decompressed bytes`);let _=new Uint8Array(J),X=0;while(q<W.length&&X<J){let $=W[q];q+=1;let G=$&3;if(G===0){let U=$>>2;if(U<60)U+=1;else{let F=U-59;U=0;for(let A=0;A<F;A+=1){if(q>=W.length)throw L("truncated snappy literal length");U|=W[q]<<8*A,q+=1}U+=1}if(q+U>W.length||X+U>_.length)throw L("truncated snappy literal");_.set(W.subarray(q,q+U),X),q+=U,X+=U;continue}let K,z;if(G===1){if(q>=W.length)throw L("truncated snappy copy");K=($>>2&7)+4,z=$>>5<<8|W[q],q+=1}else if(G===2){if(q+2>W.length)throw L("truncated snappy copy");K=($>>2)+1,z=W[q]|W[q+1]<<8,q+=2}else{if(q+4>W.length)throw L("truncated snappy copy");K=($>>2)+1,z=W[q]|W[q+1]<<8|W[q+2]<<16|W[q+3]<<24,q+=4}if(z===0||z>X||X+K>_.length)throw L("invalid snappy copy");for(let U=0;U<K;U+=1)_[X]=_[X-z],X+=1}if(X!==J)throw L("snappy length mismatch");return _}function f(W){let H=[];n(H,W.length);let q=0;while(q<W.length){let J=W.length-q,Q=Math.min(J,65536);RW(H,W.subarray(q,q+Q)),q+=Q}return Uint8Array.from(H)}function RW(W,H){let q=H.length;if(q<=60)W.push(q-1<<2|0);else if(q<=256)W.push(240,q-1);else if(q<=65536)W.push(244,q-1&255,q-1>>8&255);else throw Error("literal too large");for(let J=0;J<H.length;J+=1)W.push(H[J])}function E(W,H){let q=0,J=0,Q=H;while(Q<W.length&&J<=63){let _=W[Q];if(Q+=1,q+=(_&127)*2**J,(_&128)===0)return[q,Q];J+=7}throw L("truncated varint")}function n(W,H){let q=H>>>0;while(q>=128)W.push(q&127|128),q>>>=7;W.push(q)}function L(W){return HW.malformed(W)}function M(W){let H=[],q=0;while(q<W.length){let[J,Q]=E(W,q);q=Q;let _=J>>>3,X=J&7;if(_===0)break;if(X===0){let[$,G]=E(W,q);q=G,H.push({field:_,value:{kind:"varint",value:$}})}else if(X===1){if(q+8>W.length)throw B.malformed("truncated fixed64");let $=new DataView(W.buffer,W.byteOffset+q,8);H.push({field:_,value:{kind:"fixed64",value:$.getBigUint64(0,!0)}}),q+=8}else if(X===5){if(q+4>W.length)throw B.malformed("truncated fixed32");let $=new DataView(W.buffer,W.byteOffset+q,4);H.push({field:_,value:{kind:"fixed32",value:$.getUint32(0,!0)}}),q+=4}else if(X===2){let[$,G]=E(W,q);if(q=G,q+$>W.length)throw B.malformed("truncated length-delimited");H.push({field:_,value:{kind:"bytes",value:W.subarray(q,q+$)}}),q+=$}else throw B.malformed(`unsupported protobuf wire type ${X}`)}return H}function Z(W,H){for(let q of W)if(q.field===H&&q.value.kind==="bytes")return q.value.value;return}function D(W,H){for(let q of W)if(q.field===H&&q.value.kind==="varint")return q.value.value;return}function k(W,H){let q=Z(W,H);if(q===void 0)return;return new TextDecoder("utf-8").decode(q)}function S(W,H){let q=[];for(let J of W)if(J.field===H&&J.value.kind==="bytes")q.push(M(J.value.value));return q}function LW(W,H){let q=[];for(let J of W)if(J.field===H&&J.value.kind==="bytes")q.push(J.value.value);return q}function Y(W){if(W===void 0)return;return D(M(W),1)}function R(W,H){let q=[];for(let J of S(W,H)){let Q=D(J,1);if(Q!==void 0)q.push(Q)}return q}function EW(W,H){let q=[];return JW(q,W,0),l(q,H),q}function d(W,H){let q=[];JW(q,W,2),l(q,H.length);for(let J=0;J<H.length;J+=1)q.push(H[J]);return q}function IW(W,H){return d(W,new TextEncoder().encode(H))}function wW(W,H){return d(W,Uint8Array.from(H))}function JW(W,H,q){l(W,H<<3|q)}function l(W,H){let q=H>>>0;while(q>=128)W.push(q&127|128),q>>>=7;W.push(q)}function a(W){let H=[],q=[],J=0,Q=0;while(Q+4<=W.length){let $=W[Q],G=W[Q+1]|W[Q+2]<<8|W[Q+3]<<16;if(Q+=4,G===0)continue;if(Q+G>W.length)throw r.malformed("truncated IWA snappy chunk");let K=W.subarray(Q,Q+G);if(Q+=G,$!==0)continue;let z=c(K);J+=z.length,q.push(z)}if(q.length===0)return H;if(q.length===1)return QW(q[0],H),H;let _=new Uint8Array(J),X=0;for(let $ of q)_.set($,X),X+=$.length;return QW(_,H),H}function QW(W,H){let q=0;while(q<W.length){let[J,Q]=E(W,q);if(J===0)break;if(Q+J>W.length)throw r.malformed("truncated ArchiveInfo");let _=W.subarray(Q,Q+J);q=Q+J;let X=M(_),$=D(X,1)??0,G=S(X,2);for(let K of G){let z=D(K,1)??0,U=D(K,3)??0;if(q+U>W.length)throw r.malformed("truncated IWA payload");let F=W.subarray(q,q+U);q+=U,H.push({id:$,type:z,payload:F,fields:M(F)})}}}function BW(W){let H=[];for(let Q of W){let _=[...o(1,Q.type),...o(3,Q.payload.length)],X=[...o(1,Q.id),...kW(2,Uint8Array.from(_))];n(H,X.length);for(let $ of X)H.push($);for(let $=0;$<Q.payload.length;$+=1)H.push(Q.payload[$])}let q=f(Uint8Array.from(H)),J=new Uint8Array(4+q.length);return J[0]=0,J[1]=q.length&255,J[2]=q.length>>8&255,J[3]=q.length>>16&255,J.set(q,4),J}function o(W,H){let q=[];return T(q,W<<3|0),T(q,H),q}function kW(W,H){let q=[];T(q,W<<3|2),T(q,H.length);for(let J=0;J<H.length;J+=1)q.push(H[J]);return q}function T(W,H){let q=H>>>0;while(q>=128)W.push(q&127|128),q>>>=7;W.push(q)}var N={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 GW(W,H){if(!UW(W))throw x.malformed("not a readable iWork package");let q;try{q=XW.open(W)}catch(X){if(X instanceof x)throw X;throw x.malformed(`not a readable iWork package: ${X instanceof Error?X.message:String(X)}`)}if(gW(q))throw x.encrypted();let J=new Map;_W(q,J);let Q=q.optionalPart("Index.zip");if(Q!==void 0){let X;try{X=XW.open(Q)}catch($){throw x.malformed(`unreadable Index.zip: ${$ instanceof Error?$.message:String($)}`)}_W(X,J)}if(J.size===0)throw x.malformed("no IWA objects found");let _=jW(J)??H;if(_===void 0)throw x.malformed("unrecognized iWork document kind");if(H!==void 0&&_!==H)throw x.malformed(`expected ${H} document, found ${_}`);return{kind:_,objects:J}}function mW(W){if(!UW(W))return;try{return GW(W).kind}catch(H){if(H instanceof x&&H.code==="encrypted")return;return}}function O(W,H){if(H===void 0)return;return W.objects.get(H)}function V(W,H,q){let J=Y(Z(H,q));return O(W,J)}function m(W,H,q){let J=[];for(let Q of R(H,q)){let _=W.objects.get(Q);if(_!==void 0)J.push(_)}return J}function _W(W,H){for(let q of W.partNames()){if(!q.toLowerCase().endsWith(".iwa"))continue;let J=W.optionalPart(q);if(J===void 0)continue;let Q;try{Q=a(J)}catch(_){if(_ instanceof x&&(_.code==="encrypted"||_.isFatal()))throw _;TW(`skipping unreadable IWA ${q}: ${_ instanceof Error?_.message:String(_)}`);continue}for(let _ of Q)if(!H.has(_.id))H.set(_.id,_)}}function jW(W){for(let q of W.values())if(q.type===N.TP_DOCUMENT)return"pages";let H=W.get(1);if(H!==void 0&&H.type===1)return $W(H.fields);for(let q of W.values())if(q.type===1){let J=$W(q.fields);if(J!==void 0)return J}for(let q of W.values()){if(q.type===N.KN_SLIDE||q.type===N.KN_SLIDE_ALT||q.type===N.KN_SHOW)return"keynote";if(q.type===N.TN_SHEET)return"numbers"}return}function $W(W){let H=R(W,1),q=Y(Z(W,2)),J=Z(W,8)!==void 0,Q=Z(W,3)!==void 0&&!J;if(H.length>0||J)return"numbers";if(q!==void 0||Q)return"keynote";return}function gW(W){for(let H of W.partNames()){let q=H.toLowerCase();if(q.includes("encrypted")||q.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}import{inlinesAreEmpty as KW,inlinesToPlainText as hW,PLAIN as j,plain as Oq}from"@mdgate/document";function I(W,H){let q=vW(H,3);if(q.length===0)return[];let Q=[...q.join("")],_=i(H,5),X=i(H,8),$=i(H,7),G=[];if(_.length===0){let K=ZW(W,Q,0,Q.length,X);if(!KW(K))G.push({type:"paragraph",inlines:K});return G}for(let K=0;K<_.length;K+=1){let z=_[K].index,U=K+1<_.length?_[K+1].index:Q.length;if(z>=U||z>=Q.length)continue;let F=O(W,_[K].objectId),{level:A,emphasis:C}=zW(W,F?.fields),P=ZW(W,Q,z,U,X,C);if(KW(P))continue;if(A!==void 0&&A>=1&&A<=6)G.push({type:"heading",level:A,anchor:hW(P),content:P});else G.push({type:"paragraph",inlines:P})}return G}function uW(W,H){let q=O(W,H);if(q===void 0)return[];if(q.type!==N.TSWP_STORAGE&&q.type!==N.TSWP_STORAGE_ALT);return I(W,q.fields)}function i(W,H){let q=Z(W,H);if(q===void 0)return[];let J=[];for(let Q of S(M(q),1)){let _=D(Q,1);if(_===void 0)continue;J.push({index:_,objectId:Y(Z(Q,2))})}return J}function vW(W,H){let q=[];for(let J of W){if(J.field!==H||J.value.kind!=="bytes")continue;q.push(new TextDecoder("utf-8").decode(J.value.value))}return q}function ZW(W,H,q,J,Q,_=j){let X=[],$=q,G=Q.filter((z)=>z.index>=q&&z.index<J),K=(z,U,F)=>{if(z>=U)return;let A=H.slice(z,U).join("");if(A.length===0)return;X.push({type:"text",text:A,style:F})};if(G.length===0)return K(q,Math.min(J,H.length),_),X;for(let z=0;z<G.length;z+=1){let U=G[z].index,F=z+1<G.length?G[z+1].index:J,A=Math.min(F,J);if(U>$)K($,Math.min(U,J),_),$=U;if(U>=J)break;let C=O(W,G[z].objectId),P=t(_,FW(W,C?.fields));K(U,A,P),$=A}if($<J)K($,Math.min(J,H.length),_);return pW(X)}function pW(W){let H=W.map((J)=>{if(J.type!=="text")return J;return{...J,text:J.text.replace(/\u2029/g,"").replace(/\u2028/g,`
|
|
2
|
-
`)}}),
|
|
3
|
-
`)){let
|
|
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=$[$.length-1];if(X?.type==="text"&&X.text.endsWith(`
|
|
3
|
+
`)){let U=X.text.replace(/\n+$/,"");if(U.length===0)return $.slice(0,-1);return[...$.slice(0,-1),{...X,text:U}]}return $}function SW(W,$){if($===void 0)return{level:void 0,emphasis:g};let X=Z($,12),U=Z($,11),q;if(X!==void 0)q=N(O(X),27);let K=Z($,1);if(K!==void 0){let _=x(Z(O(K),3)),H=Y(W,_);if(H!==void 0){let J=SW(W,H.fields);if(q===void 0)q=J.level;return{level:q,emphasis:XW(J.emphasis,WW(U))}}}return{level:q,emphasis:WW(U)}}function kW(W,$){if($===void 0)return g;let X=Z($,11),U=WW(X),q=Z($,1);if(q!==void 0){let K=x(Z(O(q),3)),_=Y(W,K);if(_!==void 0)return XW(kW(W,_.fields),U)}return U}function WW(W){if(W===void 0)return g;let $=O(W),X=N($,1)===1,U=N($,2)===1,q=(N($,12)??0)>0;return{bold:X,italic:U,strike:q,code:!1}}function XW(W,$){return{bold:$.bold||W.bold,italic:$.italic||W.italic,strike:$.strike||W.strike,code:$.code||W.code}}function p(W,$){if($.type===D.TSWP_SHAPE_INFO||$.type===D.TP_PLACEHOLDER||$.type===D.KN_PLACEHOLDER){let X=$.fields;if($.type===D.TP_PLACEHOLDER||$.type===D.KN_PLACEHOLDER){let q=M(W,X,1);if(q!==void 0)X=q.fields}let U=M(W,X,2);if(U!==void 0)return w(W,U.fields)}return[]}import{cellFromInlines as U0,emptyDocument as q0,heading as K0,plain as LW,tableFromRows as _0}from"@mdgate/document";function mW(W,$){let X=$,U=M(W,$,1),q=M(W,X,2);if(q===void 0&&U!==void 0)X=U.fields,q=M(W,X,2);if(q===void 0)return[];return H0(W,q.fields)}function H0(W,$){let X=N($,6)??0,U=N($,7)??0;if(X===0||U===0)return[];let q=Z($,4);if(q===void 0)return[];let K=O(q),_=J0(W,x(Z(K,4))),H=Q0(W,x(Z(K,17))),J=Array.from({length:X},()=>Array.from({length:U},()=>"")),G=Z(K,3);if(G===void 0)return J;let A=O(G);for(let Q of P(A,1)){let z=Y(W,x(Z(Q,2)));if(z===void 0)continue;let F=P(z.fields,5);for(let C of F){let V=N(C,1)??0,uW=Z(C,6)??Z(C,3)??new Uint8Array,v=Z(C,7)??Z(C,4)??new Uint8Array;if(v.length<2)continue;let b=new Uint8Array(v.byteLength);b.set(v);let qW=new Uint16Array(b.buffer,0,Math.floor(b.length/2));for(let E=0;E<qW.length&&E<U;E+=1){let KW=qW[E];if(KW===65535)continue;let c=V;if(c<0||c>=X)continue;J[c][E]=G0(uW,KW,_,H,W)}}}return A0(J)}function wW(W){let $=q0(),X=W.length>1;for(let U of W){if(U.rows.length===0)continue;if(X)$.blocks.push(K0(2,[LW(U.name)]));let q=U.rows.map((_)=>_.map((H)=>U0([LW(H)]))),K=U.rows.length>1?1:0;$.blocks.push({type:"table",table:_0(q,K,"data")})}return $}function EW(W,$){let X=mW(W,$);if(X.length===0)return[];return wW([{name:"",rows:X}]).blocks}function J0(W,$){let X=new Map,U=Y(W,$);if(U===void 0)return X;for(let q of P(U.fields,3)){let K=N(q,1),_=T(q,3);if(K!==void 0&&_!==void 0)X.set(K,_)}return X}function Q0(W,$){let X=new Map,U=Y(W,$);if(U===void 0)return X;for(let q of P(U.fields,3)){let K=N(q,1),_=x(Z(q,9));if(K!==void 0&&_!==void 0)X.set(K,_)}return X}function G0(W,$,X,U,q){if($+8>W.length)return"";let K=W[$],_,H,J,G;if(K===5||W[$]>=5)return _=W[$+1],H=W[$+8]|W[$+9]<<8|W[$+10]<<16|W[$+11]<<24,J=4,G=$+12,Z0(W,_,H,G,X,U,q);if(W[$]===4)_=W[$+1],H=W[$+4]|W[$+5]<<8,J=2,G=$+8;else _=W[$+2],H=W[$+4]|W[$+5]<<8,J=2,G=$+8;let A=RW(H&65535),Q=G+A*4;if(Q=G+RW(H)*4,_===0)return"";if(_===2||_===5||_===6||_===7){if(Q+8>W.length)return"";let z=h(W,Q);if(_===6)return z!==0?"TRUE":"FALSE";if(_===5)return BW(z);return TW(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 X.get(z>>>0)??"";let F=U.get(z>>>0);return IW(q,F)}return""}function Z0(W,$,X,U,q,K,_){let H=U,J=(F,C)=>{if((X&F)===0)return;if(H+C>W.length)return;let V=W.subarray(H,H+C);return H+=C,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),$===0)return"";if($===2&&G!==void 0)return TW(h(G,0));if($===5&&A!==void 0)return BW(h(A,0));if($===6&&G!==void 0)return h(G,0)!==0?"TRUE":"FALSE";if($===3&&Q!==void 0){let F=Q[0]|Q[1]<<8|Q[2]<<16|Q[3]<<24;return q.get(F>>>0)??""}if($===9&&z!==void 0){let F=z[0]|z[1]<<8|z[2]<<16|z[3]<<24;return IW(_,K.get(F>>>0))}if(Q!==void 0){let F=Q[0]|Q[1]<<8|Q[2]<<16|Q[3]<<24,C=q.get(F>>>0);if(C!==void 0)return C}return""}function IW(W,$){let X=Y(W,$);if(X===void 0)return"";let U=x(Z(X.fields,1)),q=Y(W,U);if(q===void 0)return"";return w(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 h(W,$){let X=new Uint8Array(8);return X.set(W.subarray($,$+8)),new DataView(X.buffer).getFloat64(0,!0)}function A0(W){let $=-1,X=-1;for(let U=0;U<W.length;U+=1)for(let q=0;q<W[U].length;q+=1)if(W[U][q]!==""){if(U>$)$=U;if(q>X)X=q}if($<0)return[];return W.slice(0,$+1).map((U)=>U.slice(0,X+1))}function RW(W){let $=W&65535,X=0;while($)$&=$-1,X+=1;return X}function TW(W){if(!Number.isFinite(W))return"";if(Number.isInteger(W))return String(W);return String(Number(W.toPrecision(12)))}function BW(W){let $=(W+978307200)*1000,X=new Date($);if(Number.isNaN(X.getTime()))return"";return X.toISOString().slice(0,10)}function jW(W,$){if($.type===D.TST_TABLE_INFO||$.type===D.TST_WP_TABLE_INFO)return EW(W,$.fields);return[]}function y(W,$){let X=Y(W,$);if(X===void 0)return[];return UW(W,X)}function UW(W,$){let X=jW(W,$);if(X.length>0)return X;let U=p(W,$);if(U.length>0)return U;if($.type===D.TSD_GROUP){let q=[];for(let K of u(W,$.fields,2))q.push(...UW(W,K));return q}if($.type===D.TSWP_DRAWABLE_ATTACHMENT){let q=x(Z($.fields,1));return y(W,q)}return[]}function n(W,$){let X=W.objects.get(1);if(X!==void 0&&X.type===$)return X;for(let U of W.objects.values())if(U.type===$)return U;return}function z0(W){let $=n(W,D.TP_DOCUMENT);if($===void 0)return;return M(W,$.fields,4)?.fields}function F0(W){let $=n(W,D.TN_DOCUMENT)??[...W.objects.values()].find((U)=>U.type===1&&S(U.fields,1).length>0);if($===void 0)return[];let X=[];for(let U of u(W,$.fields,1)){let q=Z(U.fields,1),K=q!==void 0?new TextDecoder().decode(q):"Sheet";X.push({name:K,drawables:S(U.fields,2)})}return X}function D0(W){let $=n(W,D.KN_DOCUMENT)??[...W.objects.values()].find((H)=>{if(H.type!==1)return!1;return x(Z(H.fields,2))!==void 0});if($===void 0)return[];let X=M(W,$.fields,2);if(X===void 0)return[];let U=Z(X.fields,3),q,K=[];if(U!==void 0){let H=x(U);if(H!==void 0&&Y(W,H)?.type===D.KN_SLIDE_NODE)q=H;else{let J=O(U);q=x(Z(J,1))??H,K=S(J,2)}}let _=[];if(K.length>0)for(let H of K)$W(W,H,_);else $W(W,q,_);return _}function $W(W,$,X){let U=Y(W,$);if(U===void 0)return;let q=x(Z(U.fields,2));if(q!==void 0){let K=Y(W,q);if(K!==void 0){let _=N(K.fields,19);if(_===void 0||_!==0)X.push(q)}}for(let K of S(U.fields,1))$W(W,K,X)}function N0(W,$){let X=Y(W,$);if(X===void 0)return[];let U=[],q=(_)=>{U.push(...y(W,x(Z(X.fields,_))))};q(5),q(6),q(30);for(let _ of S(X.fields,7))U.push(...y(W,_));let K=M(W,X.fields,27);if(K!==void 0){let _=p(W,K);if(_.length>0)U.push({type:"blockQuote",blocks:_});else{let H=w(W,K.fields);if(H.length>0)U.push({type:"blockQuote",blocks:H})}}return U}export{mW as tableInfoToRows,EW as tableBlocksFromInfo,w as storageToBlocks,W0 as storageObjectToBlocks,d as snappyEncodeLiterals,f as snappyDecode,N0 as slideToBlocks,wW as sheetsToDocument,p as shapeStorageBlocks,S as readReferences,x as readReference,oW as parsePreIwa,s as parseIwa,CW as openIWork,F0 as numbersSheets,D0 as keynoteSlides,Y as getObject,n as findDocumentObject,N as fieldVarint,T as fieldString,P as fieldMessages,Z as fieldBytes,pW as fieldAllBytes,hW as encodeVarintField,yW as encodeStringField,nW as encodeMessageField,o as encodeBytesField,j as detectPreIwaKind,iW as detectIWorkKind,u as derefAll,M as deref,O as decodeMessage,UW as collectDrawableObject,y as collectDrawableBlocks,vW as buildIwa,z0 as bodyStorageFromPages,D as TYPE};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mdgate/iwork-common",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.4",
|
|
4
4
|
"description": "mdgate shared Apple iWork (Pages/Numbers/Keynote) IWA parsing",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -22,10 +22,10 @@
|
|
|
22
22
|
"prepublishOnly": "bun run build"
|
|
23
23
|
},
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@mdgate/containers": "0.5.
|
|
26
|
-
"@mdgate/core": "0.5.
|
|
27
|
-
"@mdgate/document": "0.5.
|
|
28
|
-
"@mdgate/utils": "0.5.
|
|
25
|
+
"@mdgate/containers": "0.5.4",
|
|
26
|
+
"@mdgate/core": "0.5.4",
|
|
27
|
+
"@mdgate/document": "0.5.4",
|
|
28
|
+
"@mdgate/utils": "0.5.4"
|
|
29
29
|
},
|
|
30
30
|
"publishConfig": {
|
|
31
31
|
"access": "public"
|