Comparing version 0.13.2 to 1.0.0
32
cfb.js
@@ -164,3 +164,3 @@ /* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||
var exports = {}; | ||
exports.version = '0.13.2'; | ||
exports.version = '1.0.0'; | ||
/* [MS-CFB] 2.6.4 */ | ||
@@ -268,6 +268,6 @@ function namecmp(l, r) { | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {}; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); | ||
var files = {}, Paths = [], FileIndex = [], FullPaths = []; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start); | ||
build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); | ||
build_full_paths(FileIndex, FullPaths, Paths); | ||
Paths.shift(); | ||
@@ -277,4 +277,3 @@ | ||
FileIndex: FileIndex, | ||
FullPaths: FullPaths, | ||
FullPathDir: FullPathDir | ||
FullPaths: FullPaths | ||
}; | ||
@@ -331,3 +330,3 @@ | ||
/* [MS-CFB] 2.6.4 Red-Black Tree */ | ||
function build_full_paths(FI, FPD, FP, Paths) { | ||
function build_full_paths(FI, FP, Paths) { | ||
var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; | ||
@@ -368,6 +367,19 @@ var dad = [], q = []; | ||
if(FI[i].type !== 2 /* stream */) FP[i] += "/"; | ||
FPD[FP[i]] = FI[i]; | ||
} | ||
} | ||
function get_mfat_entry(entry, payload, mini) { | ||
var start = entry.start, size = entry.size; | ||
//return (payload.slice(start*MSSZ, start*MSSZ + size)); | ||
var o = []; | ||
var idx = start; | ||
while(mini && size > 0 && idx >= 0) { | ||
o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ)); | ||
size -= MSSZ; | ||
idx = __readInt32LE(mini, idx * 4); | ||
} | ||
if(o.length === 0) return (new_buf(0)); | ||
return (bconcat(o).slice(0, entry.size)); | ||
} | ||
/** Chase down the rest of the DIFAT chain to build a comprehensive list | ||
@@ -434,3 +446,3 @@ DIFAT chains by storing the next sector number as the last 32 bits */ | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) { | ||
function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) { | ||
var minifat_store = 0, pl = (Paths.length?2:0); | ||
@@ -477,3 +489,3 @@ var sector = sector_list[dir_start].data; | ||
if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) { | ||
o.content = (sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size)); | ||
o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data); | ||
prep_blob(o.content, 0); | ||
@@ -480,0 +492,0 @@ } |
@@ -164,3 +164,3 @@ /* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||
var exports = {}; | ||
exports.version = '0.13.2'; | ||
exports.version = '1.0.0'; | ||
/* [MS-CFB] 2.6.4 */ | ||
@@ -268,6 +268,6 @@ function namecmp(l, r) { | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
var files = {}, Paths = [], FileIndex = [], FullPaths = [], FullPathDir = {}; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); | ||
var files = {}, Paths = [], FileIndex = [], FullPaths = []; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start); | ||
build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); | ||
build_full_paths(FileIndex, FullPaths, Paths); | ||
Paths.shift(); | ||
@@ -277,4 +277,3 @@ | ||
FileIndex: FileIndex, | ||
FullPaths: FullPaths, | ||
FullPathDir: FullPathDir | ||
FullPaths: FullPaths | ||
}; | ||
@@ -331,3 +330,3 @@ | ||
/* [MS-CFB] 2.6.4 Red-Black Tree */ | ||
function build_full_paths(FI, FPD, FP, Paths) { | ||
function build_full_paths(FI, FP, Paths) { | ||
var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; | ||
@@ -368,6 +367,19 @@ var dad = [], q = []; | ||
if(FI[i].type !== 2 /* stream */) FP[i] += "/"; | ||
FPD[FP[i]] = FI[i]; | ||
} | ||
} | ||
function get_mfat_entry(entry, payload, mini) { | ||
var start = entry.start, size = entry.size; | ||
//return (payload.slice(start*MSSZ, start*MSSZ + size)); | ||
var o = []; | ||
var idx = start; | ||
while(mini && size > 0 && idx >= 0) { | ||
o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ)); | ||
size -= MSSZ; | ||
idx = __readInt32LE(mini, idx * 4); | ||
} | ||
if(o.length === 0) return (new_buf(0)); | ||
return (bconcat(o).slice(0, entry.size)); | ||
} | ||
/** Chase down the rest of the DIFAT chain to build a comprehensive list | ||
@@ -434,3 +446,3 @@ DIFAT chains by storing the next sector number as the last 32 bits */ | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex) { | ||
function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) { | ||
var minifat_store = 0, pl = (Paths.length?2:0); | ||
@@ -477,3 +489,3 @@ var sector = sector_list[dir_start].data; | ||
if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) { | ||
o.content = (sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size)); | ||
o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data); | ||
prep_blob(o.content, 0); | ||
@@ -480,0 +492,0 @@ } |
/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */ | ||
var Base64=function e(){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(r){var t="";var i,n,a;var f,s,h,l;for(var o=0;o<r.length;){i=r.charCodeAt(o++);f=i>>2;n=r.charCodeAt(o++);s=(i&3)<<4|n>>4;a=r.charCodeAt(o++);h=(n&15)<<2|a>>6;l=a&63;if(isNaN(n)){h=l=64}else if(isNaN(a)){l=64}t+=e.charAt(f)+e.charAt(s)+e.charAt(h)+e.charAt(l)}return t},decode:function r(t){var i="";var n,a,f;var s,h,l,o;t=t.replace(/[^\w\+\/\=]/g,"");for(var c=0;c<t.length;){s=e.indexOf(t.charAt(c++));h=e.indexOf(t.charAt(c++));n=s<<2|h>>4;i+=String.fromCharCode(n);l=e.indexOf(t.charAt(c++));a=(h&15)<<4|l>>2;if(l!==64){i+=String.fromCharCode(a)}o=e.indexOf(t.charAt(c++));f=(l&3)<<6|o;if(o!==64){i+=String.fromCharCode(f)}}return i}}}();var has_buf=typeof Buffer!=="undefined"&&typeof process!=="undefined"&&typeof process.versions!=="undefined"&&process.versions.node;function new_raw_buf(e){return new(has_buf?Buffer:Array)(e)}var s2a=function r(e){if(has_buf)return new Buffer(e,"binary");return e.split("").map(function(e){return e.charCodeAt(0)&255})};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var __toBuffer=function(e){var r=[];for(var t=0;t<e[0].length;++t){r.push.apply(r,e[0][t])}return r};var ___toBuffer=__toBuffer;var __utf16le=function(e,r,t){var i=[];for(var n=r;n<t;n+=2)i.push(String.fromCharCode(__readUInt16LE(e,n)));return i.join("").replace(chr0,"")};var ___utf16le=__utf16le;var __hexlify=function(e,r,t){var i=[];for(var n=r;n<r+t;++n)i.push(("0"+e[n].toString(16)).slice(-2));return i.join("")};var ___hexlify=__hexlify;var __bconcat=function(e){if(Array.isArray(e[0]))return[].concat.apply([],e);var r=0,t=0;for(t=0;t<e.length;++t)r+=e[t].length;var i=new Uint8Array(r);for(t=0,r=0;t<e.length;r+=e[t].length,++t)i.set(e[t],r);return i};var bconcat=__bconcat;if(has_buf){__utf16le=function(e,r,t){if(!Buffer.isBuffer(e))return ___utf16le(e,r,t);return e.toString("utf16le",r,t).replace(chr0,"")};__hexlify=function(e,r,t){return Buffer.isBuffer(e)?e.toString("hex",r,r+t):___hexlify(e,r,t)};__toBuffer=function(e){return e[0].length>0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0]):___toBuffer(e)};s2a=function(e){return new Buffer(e,"binary")};bconcat=function(e){return Buffer.isBuffer(e[0])?Buffer.concat(e):__bconcat(e)}}var __readUInt8=function(e,r){return e[r]};var __readUInt16LE=function(e,r){return e[r+1]*(1<<8)+e[r]};var __readInt16LE=function(e,r){var t=e[r+1]*(1<<8)+e[r];return t<32768?t:(65535-t+1)*-1};var __readUInt32LE=function(e,r){return e[r+3]*(1<<24)+(e[r+2]<<16)+(e[r+1]<<8)+e[r]};var __readInt32LE=function(e,r){return(e[r+3]<<24)+(e[r+2]<<16)+(e[r+1]<<8)+e[r]};function ReadShift(e,r){var t,i,n=0;switch(e){case 1:t=__readUInt8(this,this.l);break;case 2:t=(r!=="i"?__readUInt16LE:__readInt16LE)(this,this.l);break;case 4:t=__readInt32LE(this,this.l);break;case 16:n=2;i=__hexlify(this,this.l,e);}this.l+=e;if(n===0)return t;return i}var __writeUInt32LE=function(e,r,t){e[t]=r&255;e[t+1]=r>>>8&255;e[t+2]=r>>>16&255;e[t+3]=r>>>24&255};var __writeInt32LE=function(e,r,t){e[t]=r&255;e[t+1]=r>>8&255;e[t+2]=r>>16&255;e[t+3]=r>>24&255};function WriteShift(e,r,t){var i=0,n=0;switch(t){case"hex":for(;n<e;++n){this[this.l++]=parseInt(r.slice(2*n,2*n+2),16)||0}return this;case"utf16le":var a=this.l+e;for(n=0;n<Math.min(r.length,e);++n){var f=r.charCodeAt(n);this[this.l++]=f&255;this[this.l++]=f>>8}while(this.l<a)this[this.l++]=0;return this;}switch(e){case 1:i=1;this[this.l]=r&255;break;case 2:i=2;this[this.l]=r&255;r>>>=8;this[this.l+1]=r&255;break;case 4:i=4;__writeUInt32LE(this,r,this.l);break;case-4:i=4;__writeInt32LE(this,r,this.l);break;}this.l+=i;return this}function CheckField(e,r){var t=__hexlify(this,this.l,e.length>>1);if(t!==e)throw new Error(r+"Expected "+e+" saw "+t);this.l+=e.length>>1}function prep_blob(e,r){e.l=r;e.read_shift=ReadShift;e.chk=CheckField;e.write_shift=WriteShift}function new_buf(e){var r=new_raw_buf(e);prep_blob(r,0);return r}var CFB=function t(){var e={};e.version="0.13.2";function r(e,r){var t=e.split("/"),i=r.split("/");for(var n=0,a=0,f=Math.min(t.length,i.length);n<f;++n){if(a=t[n].length-i[n].length)return a;if(t[n]!=i[n])return t[n]<i[n]?-1:1}return t.length-i.length}function t(e){if(e.charAt(e.length-1)=="/")return e.slice(0,-1).indexOf("/")===-1?e:t(e.slice(0,-1));var r=e.lastIndexOf("/");return r===-1?e:e.slice(0,r+1)}function i(e){if(e.charAt(e.length-1)=="/")return i(e.slice(0,-1));var r=e.lastIndexOf("/");return r===-1?e:e.slice(r+1)}var n;function a(){return n||(n=require("fs"))}function f(e,r){var t=3;var i=512;var n=0;var a=0;var f=0;var u=0;var v=0;var w=[];var p=e.slice(0,512);prep_blob(p,0);var F=s(p);t=F[0];switch(t){case 3:i=512;break;case 4:i=4096;break;default:throw new Error("Major Version: Expected 3 or 4 saw "+t);}if(i!==512){p=e.slice(0,i);prep_blob(p,28)}var g=e.slice(0,i);h(p,t);var I=p.read_shift(4,"i");if(t===3&&I!==0)throw new Error("# Directory Sectors: Expected 0 saw "+I);p.l+=4;f=p.read_shift(4,"i");p.l+=4;p.chk("00100000","Mini Stream Cutoff Size: ");u=p.read_shift(4,"i");n=p.read_shift(4,"i");v=p.read_shift(4,"i");a=p.read_shift(4,"i");for(var b=-1,x=0;x<109;++x){b=p.read_shift(4,"i");if(b<0)break;w[x]=b}var E=l(e,i);c(v,a,E,i,w);var y=_(E,f,w,i);y[f].name="!Directory";if(n>0&&u!==C)y[u].name="!MiniFAT";y[w[0]].name="!FAT";y.fat_addrs=w;y.ssz=i;var S={},A=[],m=[],B=[],k={};d(f,y,E,A,n,S,m);o(m,k,B,A);A.shift();var L={FileIndex:m,FullPaths:B,FullPathDir:k};if(r&&r.raw)L.raw={header:g,sectors:E};return L}function s(e){e.chk(y,"Header Signature: ");e.chk(A,"CLSID: ");var r=e.read_shift(2,"u");return[e.read_shift(2,"u"),r]}function h(e,r){var t=9;e.l+=2;switch(t=e.read_shift(2)){case 9:if(r!=3)throw new Error("Sector Shift: Expected 9 saw "+t);break;case 12:if(r!=4)throw new Error("Sector Shift: Expected 12 saw "+t);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+t);}e.chk("0600","Mini Sector Shift: ");e.chk("000000000000","Reserved: ")}function l(e,r){var t=Math.ceil(e.length/r)-1;var i=[];for(var n=1;n<t;++n)i[n-1]=e.slice(n*r,(n+1)*r);i[t-1]=e.slice(t*r);return i}function o(e,r,t,i){var n=0,a=0,f=0,s=0,h=0,l=i.length;var o=[],c=[];for(;n<l;++n){o[n]=c[n]=n;t[n]=i[n]}for(;h<c.length;++h){n=c[h];a=e[n].L;f=e[n].R;s=e[n].C;if(o[n]===n){if(a!==-1&&o[a]!==a)o[n]=o[a];if(f!==-1&&o[f]!==f)o[n]=o[f]}if(s!==-1)o[s]=n;if(a!==-1){o[a]=o[n];c.push(a)}if(f!==-1){o[f]=o[n];c.push(f)}}for(n=1;n!==l;++n)if(o[n]===n){if(f!==-1&&o[f]!==f)o[n]=o[f];else if(a!==-1&&o[a]!==a)o[n]=o[a]}for(n=1;n<l;++n){if(e[n].type===0)continue;h=o[n];if(h===0)t[n]=t[0]+"/"+t[n];else while(h!==0&&h!==o[h]){t[n]=t[h]+"/"+t[n];h=o[h]}o[n]=0}t[0]+="/";for(n=1;n<l;++n){if(e[n].type!==2)t[n]+="/";r[t[n]]=e[n]}}function c(e,r,t,i,n){var a=C;if(e===C){if(r!==0)throw new Error("DIFAT chain shorter than expected")}else if(e!==-1){var f=t[e],s=(i>>>2)-1;if(!f)return;for(var h=0;h<s;++h){if((a=__readInt32LE(f,h*4))===C)break;n.push(a)}c(__readInt32LE(f,i-4),r-1,t,i,n)}}function u(e,r,t,i,n){var a=[],f=[];if(!n)n=[];var s=i-1,h=0,l=0;for(h=r;h>=0;){n[h]=true;a[a.length]=h;f.push(e[h]);var o=t[Math.floor(h*4/i)];l=h*4&s;if(i<4+l)throw new Error("FAT boundary crossed: "+h+" 4 "+i);if(!e[o])break;h=__readInt32LE(e[o],l)}return{nodes:a,data:__toBuffer([f])}}function _(e,r,t,i){var n=e.length,a=[];var f=[],s=[],h=[];var l=i-1,o=0,c=0,u=0,_=0;for(o=0;o<n;++o){s=[];u=o+r;if(u>=n)u-=n;if(f[u])continue;h=[];for(c=u;c>=0;){f[c]=true;s[s.length]=c;h.push(e[c]);var d=t[Math.floor(c*4/i)];_=c*4&l;if(i<4+_)throw new Error("FAT boundary crossed: "+c+" 4 "+i);if(!e[d])break;c=__readInt32LE(e[d],_)}a[u]={nodes:s,data:__toBuffer([h])}}return a}function d(e,r,t,i,n,a,f){var s=0,h=i.length?2:0;var l=r[e].data;var o=0,c=0,_;for(;o<l.length;o+=128){var d=l.slice(o,o+128);prep_blob(d,64);c=d.read_shift(2);_=__utf16le(d,0,c-h);i.push(_);var w={name:_,type:d.read_shift(1),color:d.read_shift(1),L:d.read_shift(4,"i"),R:d.read_shift(4,"i"),C:d.read_shift(4,"i"),clsid:d.read_shift(16),state:d.read_shift(4,"i"),start:0,size:0};var p=d.read_shift(2)+d.read_shift(2)+d.read_shift(2)+d.read_shift(2);if(p!==0)w.ct=v(d,d.l-8);var F=d.read_shift(2)+d.read_shift(2)+d.read_shift(2)+d.read_shift(2);if(F!==0)w.mt=v(d,d.l-8);w.start=d.read_shift(4,"i");w.size=d.read_shift(4,"i");if(w.size<0&&w.start<0){w.size=w.type=0;w.start=C;w.name=""}if(w.type===5){s=w.start;if(n>0&&s!==C)r[s].name="!StreamData"}else if(w.size>=4096){w.storage="fat";if(r[w.start]===undefined)r[w.start]=u(t,w.start,r.fat_addrs,r.ssz);r[w.start].name=w.name;w.content=r[w.start].data.slice(0,w.size);prep_blob(w.content,0)}else{w.storage="minifat";if(s!==C&&w.start!==C&&r[s]){w.content=r[s].data.slice(w.start*E,w.start*E+w.size);prep_blob(w.content,0)}}a[_]=w;f.push(w)}}function v(e,r){return new Date((__readUInt32LE(e,r+4)/1e7*Math.pow(2,32)+__readUInt32LE(e,r)/1e7-11644473600)*1e3)}function w(e,r){a();return f(n.readFileSync(e),r)}function p(e,r){switch(r&&r.type||"base64"){case"file":return w(e,r);case"base64":return f(s2a(Base64.decode(e)),r);case"binary":return f(s2a(e),r);}return f(e,r)}function F(e,r){var t=r||{},i=t.root||"Root Entry";if(!e.FullPaths)e.FullPaths=[];if(!e.FileIndex)e.FileIndex=[];if(e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");if(e.FullPaths.length===0){e.FullPaths[0]=i+"/";e.FileIndex[0]={name:i,type:5}}if(t.CLSID)e.FileIndex[0].clsid=t.CLSID;g(e)}function g(e){var r="Sh33tJ5";if(CFB.find(e,"/"+r))return;var t=new_buf(4);t[0]=55;t[1]=t[3]=50;t[2]=54;e.FileIndex.push({name:r,type:2,content:t,size:4,L:69,R:69,C:69});e.FullPaths.push(e.FullPaths[0]+r);I(e)}function I(e,n){F(e);var a=false,f=false;for(var s=e.FullPaths.length-1;s>=0;--s){var h=e.FileIndex[s];switch(h.type){case 0:if(f)a=true;else{e.FileIndex.pop();e.FullPaths.pop()}break;case 1:;case 2:;case 5:f=true;if(isNaN(h.R*h.L*h.C))a=true;if(h.R>-1&&h.L>-1&&h.R==h.L)a=true;break;default:a=true;break;}}if(!a&&!n)return;var l=new Date(1987,1,19),o=0;var c=[];for(s=0;s<e.FullPaths.length;++s){if(e.FileIndex[s].type===0)continue;c.push([e.FullPaths[s],e.FileIndex[s]])}for(s=0;s<c.length;++s){var u=t(c[s][0]);f=false;for(o=0;o<c.length;++o)if(c[o][0]===u)f=true;if(!f)c.push([u,{name:i(u).replace("/",""),type:1,clsid:A,ct:l,mt:l,content:null}])}c.sort(function(e,t){return r(e[0],t[0])});e.FullPaths=[];e.FileIndex=[];for(s=0;s<c.length;++s){e.FullPaths[s]=c[s][0];e.FileIndex[s]=c[s][1]}for(s=0;s<c.length;++s){var _=e.FileIndex[s];var d=e.FullPaths[s];_.name=i(d).replace("/","");_.L=_.R=_.C=-(_.color=1);_.size=_.content?_.content.length:0;_.start=0;_.clsid=_.clsid||A;if(s===0){_.C=c.length>1?1:-1;_.size=0;_.type=5}else if(d.slice(-1)=="/"){for(o=s+1;o<c.length;++o)if(t(e.FullPaths[o])==d)break;_.C=o>=c.length?-1:o;for(o=s+1;o<c.length;++o)if(t(e.FullPaths[o])==t(d))break;_.R=o>=c.length?-1:o;_.type=1}else{if(t(e.FullPaths[s+1]||"")==t(d))_.R=s+1;_.type=2}}}function b(e,r){I(e);var t=function(e){var r=0,t=0;for(var i=0;i<e.FileIndex.length;++i){var n=e.FileIndex[i];if(!n.content)continue;var a=n.content.length;if(a===0){}else if(a<4096)r+=a+63>>6;else t+=a+511>>9}var f=e.FullPaths.length+3>>2;var s=r+7>>3;var h=r+127>>7;var l=s+t+f+h;var o=l+127>>7;var c=o<=109?0:Math.ceil((o-109)/127);while(l+o+c+127>>7>o)c=++o<=109?0:Math.ceil((o-109)/127);var u=[1,c,o,h,f,t,r,0];e.FileIndex[0].size=r<<6;u[7]=(e.FileIndex[0].start=u[0]+u[1]+u[2]+u[3]+u[4]+u[5])+(u[6]+7>>3);return u}(e);var i=new_buf(t[7]<<9);var n=0,a=0;{for(n=0;n<8;++n)i.write_shift(1,S[n]);for(n=0;n<8;++n)i.write_shift(2,0);i.write_shift(2,62);i.write_shift(2,3);i.write_shift(2,65534);i.write_shift(2,9);i.write_shift(2,6);for(n=0;n<3;++n)i.write_shift(2,0);i.write_shift(4,0);i.write_shift(4,t[2]);i.write_shift(4,t[0]+t[1]+t[2]+t[3]-1);i.write_shift(4,0);i.write_shift(4,1<<12);i.write_shift(4,t[3]?t[0]+t[1]+t[2]-1:C);i.write_shift(4,t[3]);i.write_shift(-4,t[1]?t[0]-1:C);i.write_shift(4,t[1]);for(n=0;n<109;++n)i.write_shift(-4,n<t[2]?t[1]+n:-1)}if(t[1]){for(a=0;a<t[1];++a){for(;n<236+a*127;++n)i.write_shift(-4,n<t[2]?t[1]+n:-1);i.write_shift(-4,a===t[1]-1?C:a+1)}}var f=function(e){for(a+=e;n<a-1;++n)i.write_shift(-4,n+1);if(e){++n;i.write_shift(-4,C)}};a=n=0;for(a+=t[1];n<a;++n)i.write_shift(-4,m.DIFSECT);for(a+=t[2];n<a;++n)i.write_shift(-4,m.FATSECT);f(t[3]);f(t[4]);var s=0,h=0;var l=e.FileIndex[0];for(;s<e.FileIndex.length;++s){l=e.FileIndex[s];if(!l.content)continue;h=l.content.length;if(h<4096)continue;l.start=a;f(h+511>>9)}f(t[6]+7>>3);while(i.l&511)i.write_shift(-4,m.ENDOFCHAIN);a=n=0;for(s=0;s<e.FileIndex.length;++s){l=e.FileIndex[s];if(!l.content)continue;h=l.content.length;if(!h||h>=4096)continue;l.start=a;f(h+63>>6)}while(i.l&511)i.write_shift(-4,m.ENDOFCHAIN);for(n=0;n<t[4]<<2;++n){var o=e.FullPaths[n];if(!o||o.length===0){for(s=0;s<17;++s)i.write_shift(4,0);for(s=0;s<3;++s)i.write_shift(4,-1);for(s=0;s<12;++s)i.write_shift(4,0);continue}l=e.FileIndex[n];if(n===0)l.start=l.size?l.start-1:C;h=2*(l.name.length+1);i.write_shift(64,l.name,"utf16le");i.write_shift(2,h);i.write_shift(1,l.type);i.write_shift(1,l.color);i.write_shift(-4,l.L);i.write_shift(-4,l.R);i.write_shift(-4,l.C);if(!l.clsid)for(s=0;s<4;++s)i.write_shift(4,0);else i.write_shift(16,l.clsid,"hex");i.write_shift(4,l.state||0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,l.start);i.write_shift(4,l.size);i.write_shift(4,0)}for(n=1;n<e.FileIndex.length;++n){l=e.FileIndex[n];if(l.size>=4096){i.l=l.start+1<<9;for(s=0;s<l.size;++s)i.write_shift(1,l.content[s]);for(;s&511;++s)i.write_shift(1,0)}}for(n=1;n<e.FileIndex.length;++n){l=e.FileIndex[n];if(l.size>0&&l.size<4096){for(s=0;s<l.size;++s)i.write_shift(1,l.content[s]);for(;s&63;++s)i.write_shift(1,0)}}while(i.l<i.length)i.write_shift(1,0);return i}function x(e,r){var t=e.FullPaths.map(function(e){return e.toUpperCase()});var i=t.map(function(e){var r=e.split("/");return r[r.length-(e.slice(-1)=="/"?2:1)]});var n=false;if(r.charCodeAt(0)===47){n=true;r=t[0].slice(0,-1)+r}else n=r.indexOf("/")!==-1;var a=r.toUpperCase();var f=n===true?t.indexOf(a):i.indexOf(a);if(f!==-1)return e.FileIndex[f];a=a.replace(chr0,"").replace(chr1,"!");for(f=0;f<t.length;++f){if(t[f].replace(chr0,"").replace(chr1,"!")==a)return e.FileIndex[f];if(i[f].replace(chr0,"").replace(chr1,"!")==a)return e.FileIndex[f]}return null}var E=64;var C=-2;var y="d0cf11e0a1b11ae1";var S=[208,207,17,224,161,177,26,225];var A="00000000000000000000000000000000";var m={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:C,FREESECT:-1,HEADER_SIGNATURE:y,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:A,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};function B(e,r,t){a();var i=b(e,t);n.writeFileSync(r,i)}function k(e){var r=new Array(e.length);for(var t=0;t<e.length;++t)r[t]=String.fromCharCode(e[t]);return r.join("")}function L(e,r){var t=b(e,r);switch(r&&r.type){case"file":a();n.writeFileSync(r.filename,t);return t;case"binary":return k(t);case"base64":return Base64.encode(k(t));}return t}function P(e){var r={};F(r,e);return r}function R(e,r,t,n){F(e);var a=CFB.find(e,r);if(!a){var f=e.FullPaths[0];if(r.slice(0,f.length)==f)f=r;else{if(f.slice(-1)!="/")f+="/";f=(f+r).replace("//","/")}a={name:i(r),type:2};e.FileIndex.push(a);e.FullPaths.push(f);CFB.utils.cfb_gc(e)}a.content=t;a.size=t?t.length:0;if(n){if(n.CLSID)a.clsid=n.CLSID}return a}function D(e,r){F(e);var t=CFB.find(e,r);if(t)for(var i=0;i<e.FileIndex.length;++i)if(e.FileIndex[i]==t){e.FileIndex.splice(i,1);e.FullPaths.splice(i,1);return true}return false}function z(e,r,t){F(e);var n=CFB.find(e,r);if(n)for(var a=0;a<e.FileIndex.length;++a)if(e.FileIndex[a]==n){e.FileIndex[a].name=i(t);e.FullPaths[a]=t;return true}return false}function O(e){I(e,true)}e.find=x;e.read=p;e.parse=f;e.write=L;e.writeFile=B;e.utils={cfb_new:P,cfb_add:R,cfb_del:D,cfb_mov:z,cfb_gc:O,ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:m};return e}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB} | ||
var Base64=function e(){var e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(r){var t="";var i,n,a;var f,s,h,l;for(var o=0;o<r.length;){i=r.charCodeAt(o++);f=i>>2;n=r.charCodeAt(o++);s=(i&3)<<4|n>>4;a=r.charCodeAt(o++);h=(n&15)<<2|a>>6;l=a&63;if(isNaN(n)){h=l=64}else if(isNaN(a)){l=64}t+=e.charAt(f)+e.charAt(s)+e.charAt(h)+e.charAt(l)}return t},decode:function r(t){var i="";var n,a,f;var s,h,l,o;t=t.replace(/[^\w\+\/\=]/g,"");for(var c=0;c<t.length;){s=e.indexOf(t.charAt(c++));h=e.indexOf(t.charAt(c++));n=s<<2|h>>4;i+=String.fromCharCode(n);l=e.indexOf(t.charAt(c++));a=(h&15)<<4|l>>2;if(l!==64){i+=String.fromCharCode(a)}o=e.indexOf(t.charAt(c++));f=(l&3)<<6|o;if(o!==64){i+=String.fromCharCode(f)}}return i}}}();var has_buf=typeof Buffer!=="undefined"&&typeof process!=="undefined"&&typeof process.versions!=="undefined"&&process.versions.node;function new_raw_buf(e){return new(has_buf?Buffer:Array)(e)}var s2a=function r(e){if(has_buf)return new Buffer(e,"binary");return e.split("").map(function(e){return e.charCodeAt(0)&255})};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var __toBuffer=function(e){var r=[];for(var t=0;t<e[0].length;++t){r.push.apply(r,e[0][t])}return r};var ___toBuffer=__toBuffer;var __utf16le=function(e,r,t){var i=[];for(var n=r;n<t;n+=2)i.push(String.fromCharCode(__readUInt16LE(e,n)));return i.join("").replace(chr0,"")};var ___utf16le=__utf16le;var __hexlify=function(e,r,t){var i=[];for(var n=r;n<r+t;++n)i.push(("0"+e[n].toString(16)).slice(-2));return i.join("")};var ___hexlify=__hexlify;var __bconcat=function(e){if(Array.isArray(e[0]))return[].concat.apply([],e);var r=0,t=0;for(t=0;t<e.length;++t)r+=e[t].length;var i=new Uint8Array(r);for(t=0,r=0;t<e.length;r+=e[t].length,++t)i.set(e[t],r);return i};var bconcat=__bconcat;if(has_buf){__utf16le=function(e,r,t){if(!Buffer.isBuffer(e))return ___utf16le(e,r,t);return e.toString("utf16le",r,t).replace(chr0,"")};__hexlify=function(e,r,t){return Buffer.isBuffer(e)?e.toString("hex",r,r+t):___hexlify(e,r,t)};__toBuffer=function(e){return e[0].length>0&&Buffer.isBuffer(e[0][0])?Buffer.concat(e[0]):___toBuffer(e)};s2a=function(e){return new Buffer(e,"binary")};bconcat=function(e){return Buffer.isBuffer(e[0])?Buffer.concat(e):__bconcat(e)}}var __readUInt8=function(e,r){return e[r]};var __readUInt16LE=function(e,r){return e[r+1]*(1<<8)+e[r]};var __readInt16LE=function(e,r){var t=e[r+1]*(1<<8)+e[r];return t<32768?t:(65535-t+1)*-1};var __readUInt32LE=function(e,r){return e[r+3]*(1<<24)+(e[r+2]<<16)+(e[r+1]<<8)+e[r]};var __readInt32LE=function(e,r){return(e[r+3]<<24)+(e[r+2]<<16)+(e[r+1]<<8)+e[r]};function ReadShift(e,r){var t,i,n=0;switch(e){case 1:t=__readUInt8(this,this.l);break;case 2:t=(r!=="i"?__readUInt16LE:__readInt16LE)(this,this.l);break;case 4:t=__readInt32LE(this,this.l);break;case 16:n=2;i=__hexlify(this,this.l,e);}this.l+=e;if(n===0)return t;return i}var __writeUInt32LE=function(e,r,t){e[t]=r&255;e[t+1]=r>>>8&255;e[t+2]=r>>>16&255;e[t+3]=r>>>24&255};var __writeInt32LE=function(e,r,t){e[t]=r&255;e[t+1]=r>>8&255;e[t+2]=r>>16&255;e[t+3]=r>>24&255};function WriteShift(e,r,t){var i=0,n=0;switch(t){case"hex":for(;n<e;++n){this[this.l++]=parseInt(r.slice(2*n,2*n+2),16)||0}return this;case"utf16le":var a=this.l+e;for(n=0;n<Math.min(r.length,e);++n){var f=r.charCodeAt(n);this[this.l++]=f&255;this[this.l++]=f>>8}while(this.l<a)this[this.l++]=0;return this;}switch(e){case 1:i=1;this[this.l]=r&255;break;case 2:i=2;this[this.l]=r&255;r>>>=8;this[this.l+1]=r&255;break;case 4:i=4;__writeUInt32LE(this,r,this.l);break;case-4:i=4;__writeInt32LE(this,r,this.l);break;}this.l+=i;return this}function CheckField(e,r){var t=__hexlify(this,this.l,e.length>>1);if(t!==e)throw new Error(r+"Expected "+e+" saw "+t);this.l+=e.length>>1}function prep_blob(e,r){e.l=r;e.read_shift=ReadShift;e.chk=CheckField;e.write_shift=WriteShift}function new_buf(e){var r=new_raw_buf(e);prep_blob(r,0);return r}var CFB=function t(){var e={};e.version="1.0.0";function r(e,r){var t=e.split("/"),i=r.split("/");for(var n=0,a=0,f=Math.min(t.length,i.length);n<f;++n){if(a=t[n].length-i[n].length)return a;if(t[n]!=i[n])return t[n]<i[n]?-1:1}return t.length-i.length}function t(e){if(e.charAt(e.length-1)=="/")return e.slice(0,-1).indexOf("/")===-1?e:t(e.slice(0,-1));var r=e.lastIndexOf("/");return r===-1?e:e.slice(0,r+1)}function i(e){if(e.charAt(e.length-1)=="/")return i(e.slice(0,-1));var r=e.lastIndexOf("/");return r===-1?e:e.slice(r+1)}var n;function a(){return n||(n=require("fs"))}function f(e,r){var t=3;var i=512;var n=0;var a=0;var f=0;var c=0;var _=0;var w=[];var p=e.slice(0,512);prep_blob(p,0);var F=s(p);t=F[0];switch(t){case 3:i=512;break;case 4:i=4096;break;default:throw new Error("Major Version: Expected 3 or 4 saw "+t);}if(i!==512){p=e.slice(0,i);prep_blob(p,28)}var g=e.slice(0,i);h(p,t);var I=p.read_shift(4,"i");if(t===3&&I!==0)throw new Error("# Directory Sectors: Expected 0 saw "+I);p.l+=4;f=p.read_shift(4,"i");p.l+=4;p.chk("00100000","Mini Stream Cutoff Size: ");c=p.read_shift(4,"i");n=p.read_shift(4,"i");_=p.read_shift(4,"i");a=p.read_shift(4,"i");for(var b=-1,x=0;x<109;++x){b=p.read_shift(4,"i");if(b<0)break;w[x]=b}var E=l(e,i);u(_,a,E,i,w);var C=d(E,f,w,i);C[f].name="!Directory";if(n>0&&c!==y)C[c].name="!MiniFAT";C[w[0]].name="!FAT";C.fat_addrs=w;C.ssz=i;var S={},A=[],m=[],B=[];v(f,C,E,A,n,S,m,c);o(m,B,A);A.shift();var L={FileIndex:m,FullPaths:B};if(r&&r.raw)L.raw={header:g,sectors:E};return L}function s(e){e.chk(S,"Header Signature: ");e.chk(m,"CLSID: ");var r=e.read_shift(2,"u");return[e.read_shift(2,"u"),r]}function h(e,r){var t=9;e.l+=2;switch(t=e.read_shift(2)){case 9:if(r!=3)throw new Error("Sector Shift: Expected 9 saw "+t);break;case 12:if(r!=4)throw new Error("Sector Shift: Expected 12 saw "+t);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+t);}e.chk("0600","Mini Sector Shift: ");e.chk("000000000000","Reserved: ")}function l(e,r){var t=Math.ceil(e.length/r)-1;var i=[];for(var n=1;n<t;++n)i[n-1]=e.slice(n*r,(n+1)*r);i[t-1]=e.slice(t*r);return i}function o(e,r,t){var i=0,n=0,a=0,f=0,s=0,h=t.length;var l=[],o=[];for(;i<h;++i){l[i]=o[i]=i;r[i]=t[i]}for(;s<o.length;++s){i=o[s];n=e[i].L;a=e[i].R;f=e[i].C;if(l[i]===i){if(n!==-1&&l[n]!==n)l[i]=l[n];if(a!==-1&&l[a]!==a)l[i]=l[a]}if(f!==-1)l[f]=i;if(n!==-1){l[n]=l[i];o.push(n)}if(a!==-1){l[a]=l[i];o.push(a)}}for(i=1;i!==h;++i)if(l[i]===i){if(a!==-1&&l[a]!==a)l[i]=l[a];else if(n!==-1&&l[n]!==n)l[i]=l[n]}for(i=1;i<h;++i){if(e[i].type===0)continue;s=l[i];if(s===0)r[i]=r[0]+"/"+r[i];else while(s!==0&&s!==l[s]){r[i]=r[s]+"/"+r[i];s=l[s]}l[i]=0}r[0]+="/";for(i=1;i<h;++i){if(e[i].type!==2)r[i]+="/"}}function c(e,r,t){var i=e.start,n=e.size;var a=[];var f=i;while(t&&n>0&&f>=0){a.push(r.slice(f*C,f*C+C));n-=C;f=__readInt32LE(t,f*4)}if(a.length===0)return new_buf(0);return bconcat(a).slice(0,e.size)}function u(e,r,t,i,n){var a=y;if(e===y){if(r!==0)throw new Error("DIFAT chain shorter than expected")}else if(e!==-1){var f=t[e],s=(i>>>2)-1;if(!f)return;for(var h=0;h<s;++h){if((a=__readInt32LE(f,h*4))===y)break;n.push(a)}u(__readInt32LE(f,i-4),r-1,t,i,n)}}function _(e,r,t,i,n){var a=[],f=[];if(!n)n=[];var s=i-1,h=0,l=0;for(h=r;h>=0;){n[h]=true;a[a.length]=h;f.push(e[h]);var o=t[Math.floor(h*4/i)];l=h*4&s;if(i<4+l)throw new Error("FAT boundary crossed: "+h+" 4 "+i);if(!e[o])break;h=__readInt32LE(e[o],l)}return{nodes:a,data:__toBuffer([f])}}function d(e,r,t,i){var n=e.length,a=[];var f=[],s=[],h=[];var l=i-1,o=0,c=0,u=0,_=0;for(o=0;o<n;++o){s=[];u=o+r;if(u>=n)u-=n;if(f[u])continue;h=[];for(c=u;c>=0;){f[c]=true;s[s.length]=c;h.push(e[c]);var d=t[Math.floor(c*4/i)];_=c*4&l;if(i<4+_)throw new Error("FAT boundary crossed: "+c+" 4 "+i);if(!e[d])break;c=__readInt32LE(e[d],_)}a[u]={nodes:s,data:__toBuffer([h])}}return a}function v(e,r,t,i,n,a,f,s){var h=0,l=i.length?2:0;var o=r[e].data;var u=0,d=0,v;for(;u<o.length;u+=128){var p=o.slice(u,u+128);prep_blob(p,64);d=p.read_shift(2);v=__utf16le(p,0,d-l);i.push(v);var F={name:v,type:p.read_shift(1),color:p.read_shift(1),L:p.read_shift(4,"i"),R:p.read_shift(4,"i"),C:p.read_shift(4,"i"),clsid:p.read_shift(16),state:p.read_shift(4,"i"),start:0,size:0};var g=p.read_shift(2)+p.read_shift(2)+p.read_shift(2)+p.read_shift(2);if(g!==0)F.ct=w(p,p.l-8);var I=p.read_shift(2)+p.read_shift(2)+p.read_shift(2)+p.read_shift(2);if(I!==0)F.mt=w(p,p.l-8);F.start=p.read_shift(4,"i");F.size=p.read_shift(4,"i");if(F.size<0&&F.start<0){F.size=F.type=0;F.start=y;F.name=""}if(F.type===5){h=F.start;if(n>0&&h!==y)r[h].name="!StreamData"}else if(F.size>=4096){F.storage="fat";if(r[F.start]===undefined)r[F.start]=_(t,F.start,r.fat_addrs,r.ssz);r[F.start].name=F.name;F.content=r[F.start].data.slice(0,F.size);prep_blob(F.content,0)}else{F.storage="minifat";if(h!==y&&F.start!==y&&r[h]){F.content=c(F,r[h].data,(r[s]||{}).data);prep_blob(F.content,0)}}a[v]=F;f.push(F)}}function w(e,r){return new Date((__readUInt32LE(e,r+4)/1e7*Math.pow(2,32)+__readUInt32LE(e,r)/1e7-11644473600)*1e3)}function p(e,r){a();return f(n.readFileSync(e),r)}function F(e,r){switch(r&&r.type||"base64"){case"file":return p(e,r);case"base64":return f(s2a(Base64.decode(e)),r);case"binary":return f(s2a(e),r);}return f(e,r)}function g(e,r){var t=r||{},i=t.root||"Root Entry";if(!e.FullPaths)e.FullPaths=[];if(!e.FileIndex)e.FileIndex=[];if(e.FullPaths.length!==e.FileIndex.length)throw new Error("inconsistent CFB structure");if(e.FullPaths.length===0){e.FullPaths[0]=i+"/";e.FileIndex[0]={name:i,type:5}}if(t.CLSID)e.FileIndex[0].clsid=t.CLSID;I(e)}function I(e){var r="Sh33tJ5";if(CFB.find(e,"/"+r))return;var t=new_buf(4);t[0]=55;t[1]=t[3]=50;t[2]=54;e.FileIndex.push({name:r,type:2,content:t,size:4,L:69,R:69,C:69});e.FullPaths.push(e.FullPaths[0]+r);b(e)}function b(e,n){g(e);var a=false,f=false;for(var s=e.FullPaths.length-1;s>=0;--s){var h=e.FileIndex[s];switch(h.type){case 0:if(f)a=true;else{e.FileIndex.pop();e.FullPaths.pop()}break;case 1:;case 2:;case 5:f=true;if(isNaN(h.R*h.L*h.C))a=true;if(h.R>-1&&h.L>-1&&h.R==h.L)a=true;break;default:a=true;break;}}if(!a&&!n)return;var l=new Date(1987,1,19),o=0;var c=[];for(s=0;s<e.FullPaths.length;++s){if(e.FileIndex[s].type===0)continue;c.push([e.FullPaths[s],e.FileIndex[s]])}for(s=0;s<c.length;++s){var u=t(c[s][0]);f=false;for(o=0;o<c.length;++o)if(c[o][0]===u)f=true;if(!f)c.push([u,{name:i(u).replace("/",""),type:1,clsid:m,ct:l,mt:l,content:null}])}c.sort(function(e,t){return r(e[0],t[0])});e.FullPaths=[];e.FileIndex=[];for(s=0;s<c.length;++s){e.FullPaths[s]=c[s][0];e.FileIndex[s]=c[s][1]}for(s=0;s<c.length;++s){var _=e.FileIndex[s];var d=e.FullPaths[s];_.name=i(d).replace("/","");_.L=_.R=_.C=-(_.color=1);_.size=_.content?_.content.length:0;_.start=0;_.clsid=_.clsid||m;if(s===0){_.C=c.length>1?1:-1;_.size=0;_.type=5}else if(d.slice(-1)=="/"){for(o=s+1;o<c.length;++o)if(t(e.FullPaths[o])==d)break;_.C=o>=c.length?-1:o;for(o=s+1;o<c.length;++o)if(t(e.FullPaths[o])==t(d))break;_.R=o>=c.length?-1:o;_.type=1}else{if(t(e.FullPaths[s+1]||"")==t(d))_.R=s+1;_.type=2}}}function x(e,r){b(e);var t=function(e){var r=0,t=0;for(var i=0;i<e.FileIndex.length;++i){var n=e.FileIndex[i];if(!n.content)continue;var a=n.content.length;if(a===0){}else if(a<4096)r+=a+63>>6;else t+=a+511>>9}var f=e.FullPaths.length+3>>2;var s=r+7>>3;var h=r+127>>7;var l=s+t+f+h;var o=l+127>>7;var c=o<=109?0:Math.ceil((o-109)/127);while(l+o+c+127>>7>o)c=++o<=109?0:Math.ceil((o-109)/127);var u=[1,c,o,h,f,t,r,0];e.FileIndex[0].size=r<<6;u[7]=(e.FileIndex[0].start=u[0]+u[1]+u[2]+u[3]+u[4]+u[5])+(u[6]+7>>3);return u}(e);var i=new_buf(t[7]<<9);var n=0,a=0;{for(n=0;n<8;++n)i.write_shift(1,A[n]);for(n=0;n<8;++n)i.write_shift(2,0);i.write_shift(2,62);i.write_shift(2,3);i.write_shift(2,65534);i.write_shift(2,9);i.write_shift(2,6);for(n=0;n<3;++n)i.write_shift(2,0);i.write_shift(4,0);i.write_shift(4,t[2]);i.write_shift(4,t[0]+t[1]+t[2]+t[3]-1);i.write_shift(4,0);i.write_shift(4,1<<12);i.write_shift(4,t[3]?t[0]+t[1]+t[2]-1:y);i.write_shift(4,t[3]);i.write_shift(-4,t[1]?t[0]-1:y);i.write_shift(4,t[1]);for(n=0;n<109;++n)i.write_shift(-4,n<t[2]?t[1]+n:-1)}if(t[1]){for(a=0;a<t[1];++a){for(;n<236+a*127;++n)i.write_shift(-4,n<t[2]?t[1]+n:-1);i.write_shift(-4,a===t[1]-1?y:a+1)}}var f=function(e){for(a+=e;n<a-1;++n)i.write_shift(-4,n+1);if(e){++n;i.write_shift(-4,y)}};a=n=0;for(a+=t[1];n<a;++n)i.write_shift(-4,B.DIFSECT);for(a+=t[2];n<a;++n)i.write_shift(-4,B.FATSECT);f(t[3]);f(t[4]);var s=0,h=0;var l=e.FileIndex[0];for(;s<e.FileIndex.length;++s){l=e.FileIndex[s];if(!l.content)continue;h=l.content.length;if(h<4096)continue;l.start=a;f(h+511>>9)}f(t[6]+7>>3);while(i.l&511)i.write_shift(-4,B.ENDOFCHAIN);a=n=0;for(s=0;s<e.FileIndex.length;++s){l=e.FileIndex[s];if(!l.content)continue;h=l.content.length;if(!h||h>=4096)continue;l.start=a;f(h+63>>6)}while(i.l&511)i.write_shift(-4,B.ENDOFCHAIN);for(n=0;n<t[4]<<2;++n){var o=e.FullPaths[n];if(!o||o.length===0){for(s=0;s<17;++s)i.write_shift(4,0);for(s=0;s<3;++s)i.write_shift(4,-1);for(s=0;s<12;++s)i.write_shift(4,0);continue}l=e.FileIndex[n];if(n===0)l.start=l.size?l.start-1:y;h=2*(l.name.length+1);i.write_shift(64,l.name,"utf16le");i.write_shift(2,h);i.write_shift(1,l.type);i.write_shift(1,l.color);i.write_shift(-4,l.L);i.write_shift(-4,l.R);i.write_shift(-4,l.C);if(!l.clsid)for(s=0;s<4;++s)i.write_shift(4,0);else i.write_shift(16,l.clsid,"hex");i.write_shift(4,l.state||0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,0);i.write_shift(4,l.start);i.write_shift(4,l.size);i.write_shift(4,0)}for(n=1;n<e.FileIndex.length;++n){l=e.FileIndex[n];if(l.size>=4096){i.l=l.start+1<<9;for(s=0;s<l.size;++s)i.write_shift(1,l.content[s]);for(;s&511;++s)i.write_shift(1,0)}}for(n=1;n<e.FileIndex.length;++n){l=e.FileIndex[n];if(l.size>0&&l.size<4096){for(s=0;s<l.size;++s)i.write_shift(1,l.content[s]);for(;s&63;++s)i.write_shift(1,0)}}while(i.l<i.length)i.write_shift(1,0);return i}function E(e,r){var t=e.FullPaths.map(function(e){return e.toUpperCase()});var i=t.map(function(e){var r=e.split("/");return r[r.length-(e.slice(-1)=="/"?2:1)]});var n=false;if(r.charCodeAt(0)===47){n=true;r=t[0].slice(0,-1)+r}else n=r.indexOf("/")!==-1;var a=r.toUpperCase();var f=n===true?t.indexOf(a):i.indexOf(a);if(f!==-1)return e.FileIndex[f];a=a.replace(chr0,"").replace(chr1,"!");for(f=0;f<t.length;++f){if(t[f].replace(chr0,"").replace(chr1,"!")==a)return e.FileIndex[f];if(i[f].replace(chr0,"").replace(chr1,"!")==a)return e.FileIndex[f]}return null}var C=64;var y=-2;var S="d0cf11e0a1b11ae1";var A=[208,207,17,224,161,177,26,225];var m="00000000000000000000000000000000";var B={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:y,FREESECT:-1,HEADER_SIGNATURE:S,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:m,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};function L(e,r,t){a();var i=x(e,t);n.writeFileSync(r,i)}function k(e){var r=new Array(e.length);for(var t=0;t<e.length;++t)r[t]=String.fromCharCode(e[t]);return r.join("")}function R(e,r){var t=x(e,r);switch(r&&r.type){case"file":a();n.writeFileSync(r.filename,t);return t;case"binary":return k(t);case"base64":return Base64.encode(k(t));}return t}function P(e){var r={};g(r,e);return r}function z(e,r,t,n){g(e);var a=CFB.find(e,r);if(!a){var f=e.FullPaths[0];if(r.slice(0,f.length)==f)f=r;else{if(f.slice(-1)!="/")f+="/";f=(f+r).replace("//","/")}a={name:i(r),type:2};e.FileIndex.push(a);e.FullPaths.push(f);CFB.utils.cfb_gc(e)}a.content=t;a.size=t?t.length:0;if(n){if(n.CLSID)a.clsid=n.CLSID}return a}function D(e,r){g(e);var t=CFB.find(e,r);if(t)for(var i=0;i<e.FileIndex.length;++i)if(e.FileIndex[i]==t){e.FileIndex.splice(i,1);e.FullPaths.splice(i,1);return true}return false}function O(e,r,t){g(e);var n=CFB.find(e,r);if(n)for(var a=0;a<e.FileIndex.length;++a)if(e.FileIndex[a]==n){e.FileIndex[a].name=i(t);e.FullPaths[a]=t;return true}return false}function T(e){b(e,true)}e.find=E;e.read=F;e.parse=f;e.write=R;e.writeFile=L;e.utils={cfb_new:P,cfb_add:z,cfb_del:D,cfb_mov:O,cfb_gc:T,ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:B};return e}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB} |
@@ -41,3 +41,3 @@ var DO_NOT_EXPORT_CFB = true; | ||
var exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/; | ||
exports.version = '0.13.2'; | ||
exports.version = '1.0.0'; | ||
/* [MS-CFB] 2.6.4 */ | ||
@@ -145,6 +145,6 @@ function namecmp(l/*:string*/, r/*:string*/)/*:number*/ { | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
var files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [], FullPathDir = {}; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); | ||
var files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = []; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start); | ||
build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); | ||
build_full_paths(FileIndex, FullPaths, Paths); | ||
Paths.shift(); | ||
@@ -154,4 +154,3 @@ | ||
FileIndex: FileIndex, | ||
FullPaths: FullPaths, | ||
FullPathDir: FullPathDir | ||
FullPaths: FullPaths | ||
}; | ||
@@ -208,3 +207,3 @@ | ||
/* [MS-CFB] 2.6.4 Red-Black Tree */ | ||
function build_full_paths(FI/*:CFBFileIndex*/, FPD/*:CFBFullPathDir*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ { | ||
function build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ { | ||
var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; | ||
@@ -245,6 +244,19 @@ var dad/*:Array<number>*/ = [], q/*:Array<number>*/ = []; | ||
if(FI[i].type !== 2 /* stream */) FP[i] += "/"; | ||
FPD[FP[i]] = FI[i]; | ||
} | ||
} | ||
function get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ { | ||
var start = entry.start, size = entry.size; | ||
//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/); | ||
var o = []; | ||
var idx = start; | ||
while(mini && size > 0 && idx >= 0) { | ||
o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ)); | ||
size -= MSSZ; | ||
idx = __readInt32LE(mini, idx * 4); | ||
} | ||
if(o.length === 0) return (new_buf(0)/*:any*/); | ||
return (bconcat(o).slice(0, entry.size)/*:any*/); | ||
} | ||
/** Chase down the rest of the DIFAT chain to build a comprehensive list | ||
@@ -311,3 +323,3 @@ DIFAT chains by storing the next sector number as the last 32 bits */ | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex) { | ||
function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex, mini) { | ||
var minifat_store = 0, pl = (Paths.length?2:0); | ||
@@ -354,3 +366,3 @@ var sector = sector_list[dir_start].data; | ||
if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) { | ||
o.content = (sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size)/*:any*/); | ||
o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data); | ||
prep_blob(o.content, 0); | ||
@@ -357,0 +369,0 @@ } |
{ | ||
"name": "cfb", | ||
"version": "0.13.2", | ||
"version": "1.0.0", | ||
"author": "sheetjs", | ||
@@ -5,0 +5,0 @@ "description": "Compound File Binary File Format extractor", |
@@ -77,10 +77,2 @@ /* index.d.ts (C) 2013-present SheetJS */ | ||
/* cfb.FullPathDir Directory object */ | ||
export interface CFBDirectory { | ||
/* cfb.FullPathDir keys are paths; cfb.Directory keys are file names */ | ||
[key: string]: CFBEntry; | ||
} | ||
/* File object */ | ||
@@ -91,5 +83,2 @@ export interface CFBContainer { | ||
/* Path -> CFB object mapping */ | ||
FullPathDir: CFBDirectory; | ||
/* Array of entries in the same order as FullPaths */ | ||
@@ -96,0 +85,0 @@ FileIndex: CFBEntry[]; |
@@ -41,3 +41,3 @@ var DO_NOT_EXPORT_CFB = true; | ||
var exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/; | ||
exports.version = '0.13.2'; | ||
exports.version = '1.0.0'; | ||
/* [MS-CFB] 2.6.4 */ | ||
@@ -145,6 +145,6 @@ function namecmp(l/*:string*/, r/*:string*/)/*:number*/ { | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
var files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = [], FullPathDir = {}; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex); | ||
var files/*:CFBFiles*/ = {}, Paths/*:Array<string>*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array<string>*/ = []; | ||
read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start); | ||
build_full_paths(FileIndex, FullPathDir, FullPaths, Paths); | ||
build_full_paths(FileIndex, FullPaths, Paths); | ||
Paths.shift(); | ||
@@ -154,4 +154,3 @@ | ||
FileIndex: FileIndex, | ||
FullPaths: FullPaths, | ||
FullPathDir: FullPathDir | ||
FullPaths: FullPaths | ||
}; | ||
@@ -208,3 +207,3 @@ | ||
/* [MS-CFB] 2.6.4 Red-Black Tree */ | ||
function build_full_paths(FI/*:CFBFileIndex*/, FPD/*:CFBFullPathDir*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ { | ||
function build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array<string>*/, Paths/*:Array<string>*/)/*:void*/ { | ||
var i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length; | ||
@@ -245,6 +244,19 @@ var dad/*:Array<number>*/ = [], q/*:Array<number>*/ = []; | ||
if(FI[i].type !== 2 /* stream */) FP[i] += "/"; | ||
FPD[FP[i]] = FI[i]; | ||
} | ||
} | ||
function get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ { | ||
var start = entry.start, size = entry.size; | ||
//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/); | ||
var o = []; | ||
var idx = start; | ||
while(mini && size > 0 && idx >= 0) { | ||
o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ)); | ||
size -= MSSZ; | ||
idx = __readInt32LE(mini, idx * 4); | ||
} | ||
if(o.length === 0) return (new_buf(0)/*:any*/); | ||
return (bconcat(o).slice(0, entry.size)/*:any*/); | ||
} | ||
/** Chase down the rest of the DIFAT chain to build a comprehensive list | ||
@@ -311,3 +323,3 @@ DIFAT chains by storing the next sector number as the last 32 bits */ | ||
/* [MS-CFB] 2.6.1 Compound File Directory Entry */ | ||
function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex) { | ||
function read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array<RawBytes>*/, Paths/*:Array<string>*/, nmfs, files, FileIndex, mini) { | ||
var minifat_store = 0, pl = (Paths.length?2:0); | ||
@@ -354,3 +366,3 @@ var sector = sector_list[dir_start].data; | ||
if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) { | ||
o.content = (sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size)/*:any*/); | ||
o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data); | ||
prep_blob(o.content, 0); | ||
@@ -357,0 +369,0 @@ } |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
164161
14
3095
1