import{Readable as t,Writable as e}from"stream";let i={TS_UID:2048,TS_GID:1024,TS_VTX:512,TU_READ:256,TU_WRITE:128,TU_EXEC:64,TG_READ:32,TG_WRITE:16,TG_EXEC:8,TO_READ:4,TO_WRITE:2,TO_EXEC:1},s=i.TU_READ|i.TU_WRITE|i.TG_READ|i.TO_READ,h=i.TU_READ|i.TU_WRITE|i.TU_EXEC|i.TG_READ|i.TG_EXEC|i.TO_READ|i.TO_EXEC,r={GNUTYPE_DUMPDIR:"D",GNUTYPE_LONGLINK:"K",GNUTYPE_LONGNAME:"L",GNUTYPE_MULTIVOL:"M",GNUTYPE_SPARSE:"S",GNUTYPE_VOLHDR:"V",SOLARIS_XHDTYPE:"X"},n={REG_TYPE:"0",AREG_TYPE:"\0",LINK_TYPE:"1",SYM_TYPE:"2",CHR_TYPE:"3",BLK_TYPE:"4",DIR_TYPE:"5",FIFO_TYPE:"6",CONT_TYPE:"7",XHD_TYPE:"x",XGL_TYPE:"g"},a=new Set([n.REG_TYPE,n.LINK_TYPE,n.SYM_TYPE,n.CHR_TYPE,n.BLK_TYPE,n.DIR_TYPE,n.FIFO_TYPE,n.CONT_TYPE]),l={T_MAGIC:"ustar",T_VERSION:"00",WHITE_SPACE:32,EQ_CHAR:61,NULL_CHAR:0,NEW_LINE:10,NEGATIVE_256:255,POSITIVE_256:128,GNU_LONG_NAME:"././@LongLink"},o={INVALID_ENCODING_NAME:"Invalid name. Invalid name. Please check 'name' is a directory type.",INVALID_ENCODING_NAME_LEN:"Invalid name. Please check 'name' length is less than 255 byte.",INVALID_ENCODING_LINKNAME:"Invalid linkname. Please check 'linkname' length is less than 100 byte.",INVALID_BASE256:"Invalid base256 format",INVALID_OCTAL_FORMAT:"Invalid octal format",NOT_INIT:"Not init",INVALID_CHKSUM:"Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?"},E=new TextEncoder,d=E.encode.bind(E);function u(t,e,i,s="utf-8"){for(;t[e+i-1]===l.NULL_CHAR;)i--;return new TextDecoder(s).decode(t.subarray(e,e+i))}function _(t,e){let i=t.toString(8);return e?i.length<=e?"0".repeat(e-i.length)+i+" ":"7".repeat(e)+" ":i}function f(t,e,i){let s=t.subarray(e,e+i);if(s[0]&l.POSITIVE_256){if(s[0]===l.POSITIVE_256||s[0]===l.NEGATIVE_256)return function(t){let e=t[0]===l.POSITIVE_256;return t.slice(1).reduceRight((i,s,h)=>i+(e?s:l.NEGATIVE_256-s)*Math.pow(256,t.length-h-2),0)*(e?1:-1)}(s);throw Error(o.INVALID_BASE256)}let h=0;for(;s[h]!==l.WHITE_SPACE&&s[h]!==l.NULL_CHAR;){if(h>=i)throw Error(o.INVALID_OCTAL_FORMAT);h++}return parseInt(u(s,0,h),8)}function T(t){return t.subarray(0,512).reduce((t,e,i)=>i>=148&&i<156?t+l.WHITE_SPACE:t+e,0)}function c(t,e){let i=" "+t+"="+e+"\n",s=d(i);return s.length+String(s.length).length+i}function p(t){let e=new Uint8Array(512),i=t.name;t.typeflag===n.DIR_TYPE&&"/"!==i[i.length-1]&&(i+="/");let s="",h=!1;for(;i.length>100;){let t=i.indexOf("/");if(-1===t){h=!0;break}{let e=i.slice(0,t);s+=s?"/"+e:e,i=i.slice(t+1)}}if(h)throw Error(o.INVALID_ENCODING_NAME);let r=d(i);if(r.length+s.length>255)throw Error(o.INVALID_ENCODING_NAME_LEN);if(t.linkname&&d(t.linkname).length>100)throw Error(o.INVALID_ENCODING_LINKNAME);if(e.set(r,0),e.set(d(_(t.mode,6)),100),e.set(d(_(t.uid,6)),108),e.set(d(_(t.gid,6)),116),t.size.toString(8).length>11){let i=t.size,s=[l.POSITIVE_256];for(let t=11;t>0;t--)s[t]=i&l.NEGATIVE_256,i=Math.floor(i/256);e.set(s,124)}else e.set(d(_(t.size,11)),124);return e.set(d(_(t.mtime,11)),136),e.set(d(t.typeflag),156),t.linkname&&e.set(d(t.linkname),157),e.set(d(l.T_MAGIC),257),e.set(d(l.T_VERSION),263),t.uname&&e.set(d(t.uname),265),t.gname&&e.set(d(t.gname),297),e.set(d(_(t.devmajor,6)),329),e.set(d(_(t.devminor,6)),337),s&&e.set(d(s),345),e.set(d(_(T(e),6)),148),e}function N(t){let e="";if(e+=c("path",t.name)+c("linkpath",t.linkname),t.pax&&"object"==typeof t.pax)for(let i in t.pax)e+=c(i,t.pax[i]);return d(e)}let g={filenameEncoding:"utf-8"};function I(t,e){let{filenameEncoding:i}=e={...g,...e},s=u(t,0,100,i),h=f(t,100,8),a=f(t,108,8),E=f(t,116,8),d=f(t,124,12),_=f(t,136,12),c=function(t){switch(t){case 0:return n.REG_TYPE;case 120:return n.XHD_TYPE;case 103:return n.XGL_TYPE;case 75:return r.GNUTYPE_LONGLINK;case 76:return r.GNUTYPE_LONGNAME;default:return t-48+""}}(t[156]),p=t[157]===l.NULL_CHAR?null:u(t,157,100,i),N=u(t,265,32),I=u(t,297,32),m=f(t,329,8),A=f(t,337,8),L=T(t);if(256===L)throw Error(o.NOT_INIT);if(L!==f(t,148,8))throw Error(o.INVALID_CHKSUM);return l.T_MAGIC===u(t,257,6)&&t[345]&&(s=u(t,345,155,i)+"/"+s),c===n.REG_TYPE&&"/"===s[s.length-1]&&0===d&&(c=n.DIR_TYPE),{name:s,mode:h,uid:a,gid:E,size:d,mtime:_,typeflag:c,linkname:p,uname:N,gname:I,devmajor:m,devminor:A}}function m(t){let e={},i=[],s=t.length,h=0;i[0]||(i[h]=[]);let r=0;for(;s>0;){if(i[h].push(t[r]),t[r]===l.NEW_LINE){if(r+1===t.length)break;i[++h]=[],r++;continue}r++,s--}for(let t=0;t0&&this.reader.push(new Uint8Array(e))}transport(t,i){let s=t=>{if(i.pax){let t=N({name:i.name,linkname:i.linkname||"",pax:{...i.pax}}),e=p({...i,name:"pax_header",typeflag:n.XHD_TYPE,size:t.length});this.reader.push(e),this.reader.push(t),this.reader.push(this.fix(t.length)),i.name="pax_header"}this.reader.push(p(i)),this.reader.push(t)},h=new e({write:(t,e,i)=>{try{s(t),i()}catch(t){i(t)}},final:t=>{this.reader.push(this.fix(i.size)),t()}});h.write(t,t=>{t&&this.reader.emit("error",t)}),h.end()}get receiver(){return this.reader}constructor(){O(this,"reader",void 0),O(this,"finished",void 0),this.reader=new t({read(){}}),this.finished=!1}}function G(){return new y}let R={EXCEED_BYTES_LEN:"The size of bytes exceeds the length of whole bytes."};class w{push(t){this.bytesLen+=t.length,this.insertedBytesLen+=t.length,this.queue.push(t)}shift(t){if(t>this.bytesLen)throw Error(R.EXCEED_BYTES_LEN);if(0===t)return new Uint8Array(0);let e=this.queue.peek();if(!e)throw Error(R.EXCEED_BYTES_LEN);let i=new Uint8Array(t);this.queue.shift();let s=e.subarray(t);return s.length>0&&this.queue.push(s),i.set(e.subarray(0,t)),this.bytesLen-=t,i}peek(t){if(t>this.bytesLen)throw Error(R.EXCEED_BYTES_LEN);let e=this.queue.peek();if(!e)throw Error(R.EXCEED_BYTES_LEN);return e.subarray(0,t)}constructor(){O(this,"queue",void 0),O(this,"bytesLen",void 0),O(this,"insertedBytesLen",void 0),this.queue=new P(16),this.bytesLen=0,this.insertedBytesLen=0}}function Y(t,e){let i={...e},s=!1;return{namespace:t,produce:t=>{i=t,s=!0},reset:()=>{i={...e},s=!1},get c(){return i},get has(){return s}}}class M{removePadding(t){let e=(512-t%512)%512;return e>0?(this.matrix.shift(e),e):0}transport(){let t=()=>{try{var t;if(this.head=I(this.matrix.shift(512),this.decodeOptions),t=this.head.typeflag,!a.has(t))return this.isNonUSTAR=!0,!0;return this.gnuMeta.has&&(this.head={...this.head,...this.gnuMeta.c},this.gnuMeta.reset()),this.paxMeta.has&&(this.head.name=this.paxMeta.c.path||this.head.name,this.head.linkname=this.paxMeta.c.linkpath,this.head.pax=this.paxMeta,this.paxMeta.reset()),this.missing=this.head.size,this.elt=new Uint8Array(this.head.size),this.flag=!0,this.offset=0,!0}catch(t){return this.writer.emit("error",t),!1}},e=()=>{if(this.missing>this.matrix.bytesLen){let t=this.matrix.shift(this.matrix.bytesLen);this.missing-=t.length,this.elt.set(t,this.offset),this.offset+=t.length;return}this.elt.set(this.matrix.shift(this.missing),this.offset),this.total+=this.elt.length+512,this.writer.emit("entry",this.head,this.elt),this.flag=!1},i=()=>{let t=m(this.matrix.shift(this.head.size));this.paxMeta.produce({...this.paxMeta.c,...t}),this.total+=this.head.size+512},s=()=>{let t=this.matrix.shift(this.head.size),e=u(t,0,t.length,this.decodeOptions.filenameEncoding);this.gnuMeta.produce({[this.head.typeflag===r.GNUTYPE_LONGNAME?"name":"linkname"]:e}),this.total+=this.head.size+512},h=()=>{switch(this.head.typeflag){case n.XGL_TYPE:case n.XHD_TYPE:i();break;case r.GNUTYPE_LONGLINK:case r.GNUTYPE_LONGNAME:s()}this.isNonUSTAR=!1};for(;this.matrix.bytesLen>0;){if(this.matrix.bytesLen<512){this.pause=!0;return}if(this.isNonUSTAR){h();continue}if(this.flag){e();continue}if(this.head&&this.head.size&&!this.flag){let t=this.removePadding(this.head.size);this.total+=t,this.head=Object.create(null);continue}let i=this.matrix.peek(512);if(i[0]===l.NULL_CHAR&&i[511]===l.NULL_CHAR){this.matrix.shift(512);continue}if(!t())return}}get receiver(){return this.writer}on(t,e=x){this.writer.on(t,e)}constructor(t){O(this,"writer",void 0),O(this,"decodeOptions",void 0),O(this,"matrix",void 0),O(this,"head",void 0),O(this,"missing",void 0),O(this,"offset",void 0),O(this,"flag",void 0),O(this,"elt",void 0),O(this,"total",void 0),O(this,"isNonUSTAR",void 0),O(this,"paxMeta",void 0),O(this,"gnuMeta",void 0),O(this,"pause",void 0),this.decodeOptions=t,this.matrix=new w,this.head=Object.create(null),this.missing=0,this.flag=!1,this.offset=0,this.elt=null,this.total=0,this.isNonUSTAR=!1,this.paxMeta=Y("pax",Object.create(null)),this.gnuMeta=Y("gnu",Object.create(null)),this.pause=!1,this.writer=new e({write:(t,e,i)=>{if(this.pause){let e=this.matrix.shift(this.matrix.bytesLen),i=new Uint8Array(e.length+t.length);i.set(e),i.set(t,e.length),this.matrix.push(i),this.pause=!1}else this.matrix.push(t);this.transport(),i()}})}}function S(t={}){return new M(t)}export{h as D_MODE,o as ERROR_MESSAGES,s as F_MODE,r as GnuTypeFlag,l as Magic,i as Mode,a as STANDARD_TYPE_FLAG_SET,n as TypeFlag,S as createExtract,G as createPack,I as decode,m as decodePax,u as decodeString,p as encode,N as encodePax};