"use strict";var t=require("stream");const e={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},i=e.TU_READ|e.TU_WRITE|e.TG_READ|e.TO_READ,s=e.TU_READ|e.TU_WRITE|e.TU_EXEC|e.TG_READ|e.TG_EXEC|e.TO_READ|e.TO_EXEC,r={GNUTYPE_DUMPDIR:"D",GNUTYPE_LONGLINK:"K",GNUTYPE_LONGNAME:"L",GNUTYPE_MULTIVOL:"M",GNUTYPE_SPARSE:"S",GNUTYPE_VOLHDR:"V",SOLARIS_XHDTYPE:"X"},h={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"},n=new Set([h.REG_TYPE,h.LINK_TYPE,h.SYM_TYPE,h.CHR_TYPE,h.BLK_TYPE,h.DIR_TYPE,h.FIFO_TYPE,h.CONT_TYPE]),a={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?"},l=new TextEncoder,E=l.encode.bind(l);function d(t,e,i,s="utf-8"){for(;t[e+i-1]===a.NULL_CHAR;)i--;return new TextDecoder(s).decode(t.subarray(e,e+i))}function u(t,e){let i=t.toString(8);return e?i.length<=e?"0".repeat(e-i.length)+i+" ":"7".repeat(e)+" ":i}function _(t,e,i){let s=t.subarray(e,e+i);if(s[0]&a.POSITIVE_256){if(s[0]===a.POSITIVE_256||s[0]===a.NEGATIVE_256)return function(t){let e=t[0]===a.POSITIVE_256;return t.slice(1).reduceRight((i,s,r)=>i+(e?s:a.NEGATIVE_256-s)*Math.pow(256,t.length-r-2),0)*(e?1:-1)}(s);throw Error(o.INVALID_BASE256)}let r=0;for(;s[r]!==a.WHITE_SPACE&&s[r]!==a.NULL_CHAR;){if(r>=i)throw Error(o.INVALID_OCTAL_FORMAT);r++}return parseInt(d(s,0,r),8)}function f(t){return t.subarray(0,512).reduce((t,e,i)=>i>=148&&i<156?t+a.WHITE_SPACE:t+e,0)}function c(t,e){let i=" "+t+"="+e+"\n",s=E(i);return s.length+String(s.length).length+i}function T(t){let e=new Uint8Array(512),i=t.name;t.typeflag===h.DIR_TYPE&&"/"!==i[i.length-1]&&(i+="/");let s="",r=!1;for(;i.length>100;){let t=i.indexOf("/");if(-1===t){r=!0;break}{let e=i.slice(0,t);s+=s?"/"+e:e,i=i.slice(t+1)}}if(r)throw Error(o.INVALID_ENCODING_NAME);let n=E(i);if(n.length+s.length>255)throw Error(o.INVALID_ENCODING_NAME_LEN);if(t.linkname&&E(t.linkname).length>100)throw Error(o.INVALID_ENCODING_LINKNAME);if(e.set(n,0),e.set(E(u(t.mode,6)),100),e.set(E(u(t.uid,6)),108),e.set(E(u(t.gid,6)),116),t.size.toString(8).length>11){let i=t.size,s=[a.POSITIVE_256];for(let t=11;t>0;t--)s[t]=i&a.NEGATIVE_256,i=Math.floor(i/256);e.set(s,124)}else e.set(E(u(t.size,11)),124);return e.set(E(u(t.mtime,11)),136),e.set(E(t.typeflag),156),t.linkname&&e.set(E(t.linkname),157),e.set(E(a.T_MAGIC),257),e.set(E(a.T_VERSION),263),t.uname&&e.set(E(t.uname),265),t.gname&&e.set(E(t.gname),297),e.set(E(u(t.devmajor,6)),329),e.set(E(u(t.devminor,6)),337),s&&e.set(E(s),345),e.set(E(u(f(e),6)),148),e}function p(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 E(e)}const N={filenameEncoding:"utf-8"};function g(t,e){let{filenameEncoding:i}=e={...N,...e},s=d(t,0,100,i),n=_(t,100,8),l=_(t,108,8),E=_(t,116,8),u=_(t,124,12),c=_(t,136,12),T=function(t){switch(t){case 0:return h.REG_TYPE;case 120:return h.XHD_TYPE;case 103:return h.XGL_TYPE;case 75:return r.GNUTYPE_LONGLINK;case 76:return r.GNUTYPE_LONGNAME;default:return t-48+""}}(t[156]),p=t[157]===a.NULL_CHAR?null:d(t,157,100,i),g=d(t,265,32),I=d(t,297,32),m=_(t,329,8),A=_(t,337,8),L=f(t);if(256===L)throw Error(o.NOT_INIT);if(L!==_(t,148,8))throw Error(o.INVALID_CHKSUM);return a.T_MAGIC===d(t,257,6)&&t[345]&&(s=d(t,345,155,i)+"/"+s),T===h.REG_TYPE&&"/"===s[s.length-1]&&0===u&&(T=h.DIR_TYPE),{name:s,mode:n,uid:l,gid:E,size:u,mtime:c,typeflag:T,linkname:p,uname:g,gname:I,devmajor:m,devminor:A}}function I(t){let e={},i=[],s=t.length,r=0;i[0]||(i[r]=[]);let h=0;for(;s>0;){if(i[r].push(t[h]),t[h]===a.NEW_LINE){if(h+1===t.length)break;i[++r]=[],h++;continue}h++,s--}for(let t=0;t0&&this.reader.push(new Uint8Array(e))}transport(t,e){let i=t=>{if(e.pax){let t=p({name:e.name,linkname:e.linkname||"",pax:{...e.pax}}),i=T({...e,name:"pax_header",typeflag:h.XHD_TYPE,size:t.length});this.reader.push(i),this.reader.push(t),this.reader.push(this.fix(t.length)),e.name="pax_header"}this.reader.push(T(e)),this.reader.push(t)},s=v({write:(t,e,s)=>{try{i(t),s()}catch(t){s(t)}},final:t=>{this.reader.push(this.fix(e.size)),t()}});s.write(t,t=>{t&&this.reader.emit("error",t)}),s.end()}get receiver(){return this.reader}constructor(){var e;P(this,"reader",void 0),P(this,"finished",void 0),this.reader=(e={read(){}},new t.Readable(e)),this.finished=!1}}const R={EXCEED_BYTES_LEN:"The size of bytes exceeds the length of whole bytes."};class G{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(){P(this,"queue",void 0),P(this,"bytesLen",void 0),P(this,"insertedBytesLen",void 0),this.queue=new L(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 w{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=g(this.matrix.shift(512),this.decodeOptions),t=this.head.typeflag,!n.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=I(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=d(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},o=()=>{switch(this.head.typeflag){case h.XGL_TYPE:case h.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){o();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]===a.NULL_CHAR&&i[511]===a.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){P(this,"writer",void 0),P(this,"decodeOptions",void 0),P(this,"matrix",void 0),P(this,"head",void 0),P(this,"missing",void 0),P(this,"offset",void 0),P(this,"flag",void 0),P(this,"elt",void 0),P(this,"total",void 0),P(this,"isNonUSTAR",void 0),P(this,"paxMeta",void 0),P(this,"gnuMeta",void 0),P(this,"pause",void 0),this.decodeOptions=t,this.matrix=new G,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=v({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()}})}}exports.D_MODE=s,exports.ERROR_MESSAGES=o,exports.F_MODE=i,exports.GnuTypeFlag=r,exports.Magic=a,exports.Mode=e,exports.STANDARD_TYPE_FLAG_SET=n,exports.TypeFlag=h,exports.createExtract=function(t={}){return new w(t)},exports.createPack=function(){return new y},exports.decode=g,exports.decodePax=I,exports.decodeString=d,exports.encode=T,exports.encodePax=p;