js-cfb/dist/cfb.min.js
SheetJS ec9ab57132 version bump 0.14.0: removed FullPathDir
- CLI tool properly handles empty files
- node 9 added to travis
2017-11-04 20:15:50 -04:00

3 lines
16 KiB
JavaScript
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* 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.14.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 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=[];d(f,y,E,A,n,S,m);o(m,B,A);A.shift();var k={FileIndex:m,FullPaths:B};if(r&&r.raw)k.raw={header:g,sectors:E};return k}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){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,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 R(e){var r={};F(r,e);return r}function P(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 z(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 D(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:R,cfb_add:P,cfb_del:z,cfb_mov:D,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}