@obsidize/tar-browserify
Version:
Browser-based tar utility for packing and unpacking tar files (stream-capable)
1 lines • 31.3 kB
JavaScript
(()=>{"use strict";var e={d:(t,r)=>{for(var i in r)e.o(r,i)&&!e.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:r[i]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};e.r(t),e.d(t,{Archive:()=>p,ArchiveReadError:()=>S,ArchiveReader:()=>b,ArchiveWriter:()=>T,AsyncUint8ArrayIterator:()=>u,Constants:()=>s,InMemoryAsyncUint8Array:()=>i,PaxTarHeader:()=>E,PaxTarHeaderKey:()=>l,PaxTarHeaderSegment:()=>g,TarEntry:()=>I,TarHeader:()=>N,TarHeaderUtility:()=>m,TarUtility:()=>n,UstarHeader:()=>_,UstarHeaderField:()=>y,UstarHeaderFieldTransformType:()=>h,UstarHeaderFieldType:()=>f,UstarHeaderLinkIndicatorType:()=>d});const r=require("tslib");class i{constructor(e){this.input=e}byteLength(){return Promise.resolve(this.input.byteLength)}read(e,t){const r=this.input.byteLength,i=Math.min(e,r),s=Math.min(i+t,r);return Promise.resolve(this.input.slice(i,s))}}var s,n;!function(e){e.SECTOR_SIZE=512,e.OCTAL_RADIX=8,e.USTAR_TAG="ustar",e.USTAR_INDICATOR_VALUE=`${e.USTAR_TAG}\0`,e.USTAR_VERSION_VALUE="00",e.HEADER_SIZE=e.SECTOR_SIZE,e.FILE_MODE_DEFAULT=511,e.TERMINAL_PADDING_SIZE=2*e.SECTOR_SIZE,e.PAX_HEADER_PREFIX="PaxHeader"}(s||(s={})),function(e){function t(e){return"number"==typeof e&&!Number.isNaN(e)}function r(e){return"string"==typeof e}function i(e){return void 0===e}function n(e){return r(e)&&e.length>0}function a(e){return!!(e&&e instanceof Uint8Array)}function o(e){return(1+Math.floor(e/s.SECTOR_SIZE))*s.SECTOR_SIZE}function u(e){return Math.ceil(e/s.SECTOR_SIZE)*s.SECTOR_SIZE}function f(e){return Math.floor(d(e)/1e3)}function h(e){return 1e3*Math.floor(d(e))}function l(e){return h(f(e))}function c(){return l(Date.now())}function d(e,r=10,i=0){if(t(e))return Math.floor(e);const s=parseInt(e,r);return t(s)?s:i}e.isNumber=t,e.isString=r,e.isUndefined=i,e.isObject=function(e){return"object"==typeof e&&null!==e},e.isDefined=function(e){return!i(e)},e.isPopulatedString=n,e.isUint8Array=a,e.sizeofUint8Array=function(e){return a(e)?e.byteLength:0},e.encodeString=function(e){return n(e)?(new TextEncoder).encode(e):new Uint8Array(0)},e.decodeString=function(e){return a(e)?(new TextDecoder).decode(e):""},e.generateChecksum=function(e){return a(e)?e.reduce(((e,t)=>e+t),0):0},e.clamp=function(e,t,r){return Math.max(t,Math.min(e,r))},e.advanceSectorOffset=function(e,t){return Math.min(t,o(e))},e.advanceSectorOffsetUnclamped=o,e.roundUpSectorOffset=u,e.getSectorOffsetDelta=function(e){return u(e)-e},e.parseIntOctal=function(e){return d(e,s.OCTAL_RADIX)},e.dateTimeToUstar=f,e.ustarTimeToDate=h,e.sanitizeDateTimeAsUstar=l,e.getUstarTimestamp=c,e.paxTimeToDate=function(e){return Math.floor(1e3*e)},e.paxTimeToUstar=function(e){return Math.floor(e)},e.encodeTimestamp=f,e.decodeTimestamp=h,e.sanitizeTimestamp=l,e.getTarTimestamp=c,e.getDebugHexString=function(e){return a(e)?Array.from(e).map((e=>e.toString(16).padStart(2,"0").toUpperCase())).join(" "):""},e.removeTrailingZeros=function(e){const t=/^([^\0]*)[\0]*$/.exec(e);return t?t[1]:e},e.parseIntSafe=d,e.parseFloatSafe=function(e,r=0){if(t(e))return e;const i=parseFloat(e);return t(i)?i:r},e.cloneUint8Array=function(e,t,r){if(!a(e))return new Uint8Array(0);const i=e.slice(t,r),s=Array.from(i);return Uint8Array.from(s)},e.concatUint8Arrays=function(e,t){if(!a(t))return e;if(!a(e))return t;const r=e.byteLength,i=t.byteLength,s=new Uint8Array(r+i);return r>0&&s.set(e,0),i>0&&s.set(t,r),s}}(n||(n={}));const a=s.SECTOR_SIZE,o=1e4*s.SECTOR_SIZE;class u{constructor(e,t={}){this.mInput=e,this.mOffset=0;let{blockSize:r}=function(e){return Object.assign({blockSize:16*s.SECTOR_SIZE},e)}(t);r=n.clamp(r,a,o),r=n.roundUpSectorOffset(r),this.blockSize=r}[Symbol.asyncIterator](){return this}get input(){return this.mInput}get byteLength(){return this.mByteLength}get currentOffset(){return this.mOffset}initialize(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){this.mByteLength=yield this.input.byteLength(),this.mOffset=0}))}tryNext(){var e;return(0,r.__awaiter)(this,void 0,void 0,(function*(){const t=yield this.next();return(null===(e=null==t?void 0:t.value)||void 0===e?void 0:e.buffer)?t.value.buffer:null}))}next(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const e=this.input,t=this.mOffset,r=this.mByteLength;if(n.isNumber(r)&&t<r){const i=Math.min(this.blockSize,r-t),s=yield e.read(t,i);return this.mOffset+=i,{done:!1,value:{source:e,buffer:s,offset:t}}}return{done:!0,value:null}}))}}var f,h,l,c,d,m;!function(e){e.ASCII="ASCII",e.ASCII_PADDED_END="ASCII_PADDED_END",e.INTEGER_OCTAL="INTEGER_OCTAL",e.INTEGER_OCTAL_TIMESTAMP="INTEGER_OCTAL_TIMESTAMP"}(f||(f={})),function(e){function t(e,t,r){const i=function(e,t){return n.parseIntSafe(e).toString(s.OCTAL_RADIX).padStart(t,"0").substring(0,t)}(e,Math.max(0,t-1-r.length))+r;return n.encodeString(i)}function r(e,t,r){return e.slice(r,r+t)}function i(e,t,i){const a=r(e,t,i);return n.parseIntSafe(n.decodeString(a).trim(),s.OCTAL_RADIX)}e.ASCII=Object.freeze({serialize:function(e,t){return n.encodeString(String(e).substring(0,t))},deserialize:function(e,t,i){const s=r(e,t,i);return n.decodeString(s)}}),e.ASCII_PADDED_END=Object.freeze({serialize:function(e,t){return(e=String(e)).length>t?n.encodeString(e.substring(0,t-1)+"\0"):n.encodeString(e.padEnd(t,"\0"))},deserialize:function(e,t,i){const s=r(e,t,i);return n.removeTrailingZeros(n.decodeString(s))}}),e.INTEGER_OCTAL=Object.freeze({serialize:function(e,r){return t(e,r," ")},deserialize:i}),e.INTEGER_OCTAL_TIMESTAMP=Object.freeze({serialize:function(e,r){return t(n.dateTimeToUstar(e),r,"")},deserialize:function(e,t,r){return n.ustarTimeToDate(i(e,t,r))}}),e.from=function(t){switch(t){case f.ASCII:return e.ASCII;case f.ASCII_PADDED_END:return e.ASCII_PADDED_END;case f.INTEGER_OCTAL:return e.INTEGER_OCTAL;case f.INTEGER_OCTAL_TIMESTAMP:return e.INTEGER_OCTAL_TIMESTAMP;default:return}}}(h||(h={}));class y{constructor(e){this.name=e.name,this.offset=e.offset,this.size=e.size,this.type=e.type,this.constantValue=e.constantValue||void 0,this.transform=h.from(this.type)}static frozen(e){return Object.freeze(new y(e))}static all(){return[y.fileName,y.fileMode,y.ownerUserId,y.groupUserId,y.fileSize,y.lastModified,y.headerChecksum,y.typeFlag,y.linkedFileName,y.ustarIndicator,y.ustarVersion,y.ownerUserName,y.ownerGroupName,y.deviceMajorNumber,y.deviceMinorNumber,y.fileNamePrefix]}static checksumSet(){return y.all().filter((e=>e!==y.headerChecksum))}sliceString(e,t){return n.decodeString(this.slice(e,t))}slice(e,t=0){if(!n.isUint8Array(e))return new Uint8Array(0);const r=t+this.offset,i=r+this.size;return e.slice(r,i)}deserialize(e,t=0){if(n.isUint8Array(e))return this.transform.deserialize(e,this.size,t)}serialize(e){const t=new Uint8Array(this.size),r=this.transform.serialize(e,this.size);return t.set(r,0),t}readFrom(e,t){return this.deserialize(e,t+this.offset)}writeTo(e,t,r){t=Math.max(t,0);const i=this.serialize(r),s=i.byteLength,a=t+this.offset;return!!(s>0&&n.isUint8Array(e)&&e.byteLength>=a+s)&&(e.set(i,a),!0)}calculateChecksum(e,t=0){let r=0;if(!n.isUint8Array(e))return r;const i=t+this.offset,s=i+this.size;for(let t=i;t<s;t++)r+=e[t];return r}}y.fileName=y.frozen({name:"fileName",offset:0,size:100,type:f.ASCII_PADDED_END}),y.fileMode=y.frozen({name:"fileMode",offset:100,size:8,type:f.INTEGER_OCTAL}),y.ownerUserId=y.frozen({name:"ownerUserId",offset:108,size:8,type:f.INTEGER_OCTAL}),y.groupUserId=y.frozen({name:"groupUserId",offset:116,size:8,type:f.INTEGER_OCTAL}),y.fileSize=y.frozen({name:"fileSize",offset:124,size:12,type:f.INTEGER_OCTAL}),y.lastModified=y.frozen({name:"lastModified",offset:136,size:12,type:f.INTEGER_OCTAL_TIMESTAMP}),y.headerChecksum=y.frozen({name:"headerChecksum",offset:148,size:8,type:f.INTEGER_OCTAL}),y.typeFlag=y.frozen({name:"typeFlag",offset:156,size:1,type:f.ASCII}),y.linkedFileName=y.frozen({name:"linkedFileName",offset:157,size:100,type:f.ASCII_PADDED_END}),y.ustarIndicator=y.frozen({name:"ustarIndicator",offset:257,size:6,type:f.ASCII,constantValue:s.USTAR_INDICATOR_VALUE}),y.ustarVersion=y.frozen({name:"ustarVersion",offset:263,size:2,type:f.ASCII,constantValue:s.USTAR_VERSION_VALUE}),y.ownerUserName=y.frozen({name:"ownerUserName",offset:265,size:32,type:f.ASCII_PADDED_END}),y.ownerGroupName=y.frozen({name:"ownerGroupName",offset:297,size:32,type:f.ASCII_PADDED_END}),y.deviceMajorNumber=y.frozen({name:"deviceMajorNumber",offset:329,size:8,type:f.ASCII_PADDED_END}),y.deviceMinorNumber=y.frozen({name:"deviceMinorNumber",offset:337,size:8,type:f.ASCII_PADDED_END}),y.fileNamePrefix=y.frozen({name:"fileNamePrefix",offset:345,size:155,type:f.ASCII_PADDED_END}),function(e){e.ACCESS_TIME="atime",e.CHARSET="charset",e.COMMENT="comment",e.GROUP_ID="gid",e.GROUP_NAME="gname",e.HDR_CHARSET="hdrcharset",e.LINK_PATH="linkpath",e.MODIFICATION_TIME="mtime",e.PATH="path",e.SIZE="size",e.USER_ID="uid",e.USER_NAME="uname"}(l||(l={}));class g{constructor(e="",t="",r=null){this.mKey=e,this.mValue=t,this.mBytes=r}static serialize(e,t){if(!e||!t)return new Uint8Array(0);const r=` ${e}=${t}\n`,i=r.length.toString().length;let s=r.length+i;s<s.toString().length+r.length&&(s+=1);const a=s.toString()+r;return n.encodeString(a)}static tryParse(e,t=0){if(!n.isUint8Array(e))return null;const r=g.findNextLengthEndIndex(e,t);if(r<0)return null;const i=n.decodeString(e.slice(t,r)),s=parseInt(i,10);if(isNaN(s))return null;const a=r+1,o=t+s,u=n.decodeString(e.slice(a,o)),f=u.indexOf("="),h=u.substring(0,f),l=u.substring(f+1).replace(/\n$/,""),c=n.cloneUint8Array(e,t,t+s);return new g(h,l,c)}static findNextLengthEndIndex(e,t){let r=t+1,i=!1;for(;r<e.byteLength&&!i;)32===e[r]?i=!0:r+=1;return i?r:-1}get key(){return this.mKey}get value(){return this.mValue}get bytes(){return this.toUint8Array()}get intValue(){const e=parseInt(this.value);return isNaN(e)?void 0:e}get floatValue(){const e=parseFloat(this.value);return isNaN(e)?void 0:e}toUint8Array(){return n.isUint8Array(this.mBytes)||(this.mBytes=g.serialize(this.key,this.value)),this.mBytes}toJSON(){const{key:e,value:t,bytes:r}=this;return{key:e,value:t,content:n.getDebugHexString(r)}}}!function(e){const t=[l.COMMENT,l.GROUP_ID,l.GROUP_NAME,l.HDR_CHARSET,l.LINK_PATH,l.MODIFICATION_TIME,l.PATH,l.SIZE,l.USER_ID,l.USER_NAME];e.isKnownHeaderKey=function(e){return t.includes(e)}}(c||(c={}));class E{constructor(e=[]){this.valueMap={};for(const t of e)this.valueMap[t.key]=t}static from(e,t=0){const r=E.parseSegments(e,t);return new E(r)}static fromAttributes(e){const t=E.parseSegmentsFromAttributes(e);return new E(t)}static serializeAttributes(e){const t=E.parseSegmentsFromAttributes(e);return E.serialize(t)}static parseSegmentsFromAttributes(e){if(!n.isObject(e))return[];const t=[];for(const[r,i]of Object.entries(e)){const e=n.isString(i)?i:String(i);t.push(new g(r,e))}return t}static serialize(e){if(!Array.isArray(e)||e.length<=0)return new Uint8Array(0);let t=0,r=[];for(const i of e){const e=i.toUint8Array();r.push(e),t+=e.byteLength}const i=new Uint8Array(t);let s=0;for(const e of r)i.set(e,s),s+=e.byteLength;return i}static wrapFileName(e){if(!n.isString(e)||e.includes(s.PAX_HEADER_PREFIX))return e;let t=e.lastIndexOf("/");return t>=0?E.insertPaxAt(e,"/",t):(t=e.lastIndexOf("\\"),t>=0?E.insertPaxAt(e,"\\",t):E.makeTopLevelPrefix(e,"/",0))}static insertPaxAt(e,t,r){const i=y.fileName.size;return e.length<i?e.substring(0,r)+t+s.PAX_HEADER_PREFIX+e.substring(r):E.makeTopLevelPrefix(e,"/",r+1)}static makeTopLevelPrefix(e,t,r){const i=y.fileName.size;let n=s.PAX_HEADER_PREFIX+t+e.substring(r);return n.length>i&&(n=n.substring(0,i-2)+"\0\0"),n}static parseSegments(e,t){const r=[];let i=t,s=g.tryParse(e,i);for(;null!==s;)r.push(s),i+=s.bytes.byteLength,s=g.tryParse(e,i);return r}get accessTime(){return this.getFloat(l.ACCESS_TIME)}get charset(){return this.get(l.CHARSET)}get comment(){return this.get(l.COMMENT)}get groupId(){return this.getInt(l.GROUP_ID)}get groupName(){return this.get(l.GROUP_NAME)}get hdrCharset(){return this.get(l.HDR_CHARSET)}get linkPath(){return this.get(l.LINK_PATH)}get modificationTime(){return this.getFloat(l.MODIFICATION_TIME)}get path(){return this.get(l.PATH)}get size(){return this.getInt(l.SIZE)}get userId(){return this.getInt(l.USER_ID)}get userName(){return this.get(l.USER_NAME)}get lastModified(){const e=this.modificationTime;return e?n.paxTimeToDate(e):void 0}keys(){return Object.keys(this.valueMap)}values(){return Object.values(this.valueMap)}clean(){for(const e of this.keys())c.isKnownHeaderKey(e)||delete this.valueMap[e];return this}has(e){return n.isDefined(this.valueMap[e])}get(e){var t;return null===(t=this.valueMap[e])||void 0===t?void 0:t.value}getInt(e){var t;return null===(t=this.valueMap[e])||void 0===t?void 0:t.intValue}getFloat(e){var t;return null===(t=this.valueMap[e])||void 0===t?void 0:t.floatValue}toUint8Array(){return E.serialize(this.values())}toUint8ArrayPadded(){const e=this.toUint8Array();let t=n.getSectorOffsetDelta(e.byteLength);return t>0?n.concatUint8Arrays(e,new Uint8Array(t)):e}toJSON(){const{valueMap:e}=this,t=this.toUint8Array();return{valueMap:e,byteLength:t.byteLength,content:n.getDebugHexString(t)}}}!function(e){e.UNKNOWN="UNKNOWN",e.NORMAL_FILE="0",e.NORMAL_FILE_ALT1="\0",e.NORMAL_FILE_ALT2="",e.HARD_LINK="1",e.SYMBOLIC_LINK="2",e.CHARACTER_SPECIAL="3",e.BLOCK_SPECIAL="4",e.DIRECTORY="5",e.FIFO="6",e.CONTIGUOUS_FILE="7",e.GLOBAL_EXTENDED_HEADER="g",e.LOCAL_EXTENDED_HEADER="x"}(d||(d={})),function(e){function t(e,t){return y.ustarIndicator.sliceString(e,t).startsWith(s.USTAR_TAG)}e.CHECKSUM_SEED_STRING="".padStart(y.headerChecksum.size," "),e.CHECKSUM_SEED=n.generateChecksum(n.encodeString(e.CHECKSUM_SEED_STRING)),e.ALL_FIELDS=y.all(),e.CHECKSUM_FIELDS=y.checksumSet(),e.isUstarSector=t,e.isTarHeaderLinkIndicatorTypeDirectory=function(e){return e===d.DIRECTORY},e.isTarHeaderLinkIndicatorTypeFile=function(e){switch(e){case d.NORMAL_FILE:case d.NORMAL_FILE_ALT1:case d.NORMAL_FILE_ALT2:case d.CONTIGUOUS_FILE:return!0;default:return!1}},e.isTarHeaderLinkIndicatorTypePax=function(e){switch(e){case d.LOCAL_EXTENDED_HEADER:case d.GLOBAL_EXTENDED_HEADER:return!0;default:return!1}},e.findNextUstarSectorOffset=function(e,r=0){if(!n.isUint8Array(e))return-1;const i=e.byteLength;let s=Math.max(0,r);for(;s<i&&!t(e,s);)s=n.advanceSectorOffset(s,i);return s<i?s:-1}}(m||(m={}));class _{constructor(e=new Uint8Array(s.HEADER_SIZE),t=0){this.bytes=e,this.offset=t}static defaultValues(){return{fileName:"",fileMode:s.FILE_MODE_DEFAULT,groupUserId:0,ownerUserId:0,fileSize:0,lastModified:n.getUstarTimestamp(),headerChecksum:0,linkedFileName:"",typeFlag:d.NORMAL_FILE,ustarIndicator:s.USTAR_INDICATOR_VALUE,ustarVersion:s.USTAR_VERSION_VALUE,ownerUserName:"",ownerGroupName:"",deviceMajorNumber:"00",deviceMinorNumber:"00",fileNamePrefix:""}}static isUstarHeader(e){return!!(e&&e instanceof _)}static from(e){return _.isUstarHeader(e)?e:(new _).initialize(e)}static serialize(e){return _.isUstarHeader(e)?e.toUint8Array():_.from(e).toUint8Array()}static seeded(){return _.from({})}get byteLength(){return this.bytes.byteLength}get fileName(){return y.fileName.readFrom(this.bytes,this.offset)}set fileName(e){y.fileName.writeTo(this.bytes,this.offset,e)}get fileMode(){return y.fileMode.readFrom(this.bytes,this.offset)}set fileMode(e){y.fileMode.writeTo(this.bytes,this.offset,e)}get ownerUserId(){return y.ownerUserId.readFrom(this.bytes,this.offset)}set ownerUserId(e){y.ownerUserId.writeTo(this.bytes,this.offset,e)}get groupUserId(){return y.groupUserId.readFrom(this.bytes,this.offset)}set groupUserId(e){y.groupUserId.writeTo(this.bytes,this.offset,e)}get fileSize(){return y.fileSize.readFrom(this.bytes,this.offset)}set fileSize(e){y.fileSize.writeTo(this.bytes,this.offset,e)}get lastModified(){return y.lastModified.readFrom(this.bytes,this.offset)}set lastModified(e){y.lastModified.writeTo(this.bytes,this.offset,e)}get headerChecksum(){return y.headerChecksum.readFrom(this.bytes,this.offset)}set headerChecksum(e){y.headerChecksum.writeTo(this.bytes,this.offset,e)}get linkedFileName(){return y.linkedFileName.readFrom(this.bytes,this.offset)}set linkedFileName(e){y.linkedFileName.writeTo(this.bytes,this.offset,e)}get typeFlag(){return y.typeFlag.readFrom(this.bytes,this.offset)||d.UNKNOWN}set typeFlag(e){y.typeFlag.writeTo(this.bytes,this.offset,e)}get ustarIndicator(){return y.ustarIndicator.readFrom(this.bytes,this.offset)}get ustarVersion(){return y.ustarVersion.readFrom(this.bytes,this.offset)}set ustarVersion(e){y.ustarVersion.writeTo(this.bytes,this.offset,e)}get ownerUserName(){return y.ownerUserName.readFrom(this.bytes,this.offset)}set ownerUserName(e){y.ownerUserName.writeTo(this.bytes,this.offset,e)}get ownerGroupName(){return y.ownerGroupName.readFrom(this.bytes,this.offset)}set ownerGroupName(e){y.ownerGroupName.writeTo(this.bytes,this.offset,e)}get deviceMajorNumber(){return y.deviceMajorNumber.readFrom(this.bytes,this.offset)}set deviceMajorNumber(e){y.deviceMajorNumber.writeTo(this.bytes,this.offset,e)}get deviceMinorNumber(){return y.deviceMinorNumber.readFrom(this.bytes,this.offset)}set deviceMinorNumber(e){y.deviceMinorNumber.writeTo(this.bytes,this.offset,e)}get fileNamePrefix(){return y.fileNamePrefix.readFrom(this.bytes,this.offset)}set fileNamePrefix(e){y.fileNamePrefix.writeTo(this.bytes,this.offset,e)}get isPaxHeader(){return this.isLocalPaxHeader||this.isGlobalPaxHeader}get isGlobalPaxHeader(){return this.typeFlag===d.GLOBAL_EXTENDED_HEADER}get isLocalPaxHeader(){return this.typeFlag===d.LOCAL_EXTENDED_HEADER}get isFileHeader(){return m.isTarHeaderLinkIndicatorTypeFile(this.typeFlag)}get isDirectoryHeader(){return m.isTarHeaderLinkIndicatorTypeDirectory(this.typeFlag)}toUint8Array(){return this.updateChecksum(),this.bytes.slice(this.offset,this.offset+s.HEADER_SIZE)}toJSON(){const e=this.toAttributes(),{bytes:t,offset:r}=this;return{offset:r,attributes:e,buffer:{byteLength:t.byteLength,content:n.getDebugHexString(t)}}}toAttributes(){const{fileName:e,fileMode:t,groupUserId:r,ownerUserId:i,fileSize:s,lastModified:n,headerChecksum:a,linkedFileName:o,typeFlag:u,ustarIndicator:f,ustarVersion:h,ownerUserName:l,ownerGroupName:c,deviceMajorNumber:d,deviceMinorNumber:m,fileNamePrefix:y}=this;return{fileName:e,fileMode:t,groupUserId:r,ownerUserId:i,fileSize:s,lastModified:n,headerChecksum:a,linkedFileName:o,typeFlag:u,ustarIndicator:f,ustarVersion:h,ownerUserName:l,ownerGroupName:c,deviceMajorNumber:d,deviceMinorNumber:m,fileNamePrefix:y}}initialize(e={}){const t=Object.assign(_.defaultValues(),e||{});return this.update(t),this}updateChecksum(){let e=m.CHECKSUM_SEED;for(const t of m.CHECKSUM_FIELDS)e+=t.calculateChecksum(this.bytes,this.offset);return this.headerChecksum=e,this}update(e){if(!e)return this;let t=!1;for(const r of m.ALL_FIELDS){const i=e[r.name];if(n.isDefined(i)){const e=r.writeTo(this.bytes,this.offset,i);t=t||e}}return t&&this.updateChecksum(),this}}class N{constructor(e){const{ustar:t,pax:r,preamble:i,isPaxGlobal:s}=e;this.ustar=t,this.pax=r,this.mPreamble=i,this.mIsGlobal=!!s,this.trySyncPaxHeader()}static isTarHeader(e){return!!(e&&e instanceof N)}static seeded(){return N.from({})}static from(e){if(N.isTarHeader(e))return e;const t=_.from(e),r=N.collectPaxRequiredAttributes(e);let i;if(r){const[e,s]=N.splitBaseFileName(r.path);t.fileName=s,t.fileNamePrefix=e,i=E.fromAttributes(r)}return new N({ustar:t,pax:i})}static serialize(e){return N.isTarHeader(e)?e.toUint8Array():N.from(e).toUint8Array()}static collectPaxRequiredAttributes(e){if(n.isObject(e)){let t={};if(e.fileName&&e.fileName.length>y.fileName.size&&(t.path=e.fileName),Object.keys(t).length>0)return t}return null}static splitBaseFileName(e){let t=e.lastIndexOf("/");return t>=0?[e.substring(0,t),e.substring(t+1)]:(t=e.lastIndexOf("\\"),t>=0?[e.substring(0,t),e.substring(t+1)]:["",e])}get preamble(){return this.mPreamble}get byteLength(){var e,t,r,i;return this.ustar.byteLength+(null!==(t=null===(e=this.pax)||void 0===e?void 0:e.toUint8ArrayPadded().byteLength)&&void 0!==t?t:0)+(null!==(i=null===(r=this.preamble)||void 0===r?void 0:r.byteLength)&&void 0!==i?i:0)}get fileName(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.path)||this.ustar.fileName}get fileMode(){return this.ustar.fileMode}get ownerUserId(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.userId)||this.ustar.ownerUserId}get groupUserId(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.groupId)||this.ustar.groupUserId}get fileSize(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.size)||this.ustar.fileSize}get lastModified(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.lastModified)||this.ustar.lastModified}get headerChecksum(){return this.ustar.headerChecksum}get linkedFileName(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.linkPath)||this.ustar.linkedFileName}get typeFlag(){return this.ustar.typeFlag}get ustarIndicator(){return this.ustar.ustarIndicator}get ustarVersion(){return this.ustar.ustarVersion}get ownerUserName(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.userName)||this.ustar.ownerUserName}get ownerGroupName(){var e;return(null===(e=this.pax)||void 0===e?void 0:e.groupName)||this.ustar.ownerGroupName}get deviceMajorNumber(){return this.ustar.deviceMajorNumber}get deviceMinorNumber(){return this.ustar.deviceMinorNumber}get fileNamePrefix(){return this.ustar.fileNamePrefix}get isPaxHeader(){return this.isLocalPaxHeader||this.isGlobalPaxHeader}get isGlobalPaxHeader(){return this.isGlobalPaxPreHeader||this.isGlobalPaxPostHeader}get isLocalPaxHeader(){return this.isLocalPaxPreHeader||this.isLocalPaxPostHeader}get isGlobalPaxPreHeader(){return this.ustar.isGlobalPaxHeader}get isLocalPaxPreHeader(){return this.ustar.isLocalPaxHeader}get isGlobalPaxPostHeader(){var e,t;return null!==(t=null===(e=this.preamble)||void 0===e?void 0:e.isGlobalPaxHeader)&&void 0!==t&&t}get isLocalPaxPostHeader(){var e,t;return null!==(t=null===(e=this.preamble)||void 0===e?void 0:e.isLocalPaxHeader)&&void 0!==t&&t}get isFileHeader(){return this.ustar.isFileHeader}get isDirectoryHeader(){return this.ustar.isDirectoryHeader}clean(){var e;return null===(e=this.pax)||void 0===e||e.clean(),this}normalize(){return this.ustar.updateChecksum(),this.trySyncPaxHeader(),this}toUint8Array(){if(this.normalize(),!(this.isPaxHeader&&this.pax&&this.preamble))return this.ustar.bytes;const e=this.preamble.bytes,t=this.pax.toUint8ArrayPadded(),r=this.ustar.bytes,i=e.byteLength+t.byteLength+r.byteLength,s=new Uint8Array(i);let n=0;return s.set(this.preamble.bytes,n),n+=e.byteLength,s.set(t,n),n+=t.byteLength,s.set(r,n),s}toJSON(){const e=this.ustar.toAttributes(),{pax:t,preamble:r,ustar:i}=this,{bytes:s,offset:a}=i;return{offset:a,attributes:e,buffer:{byteLength:s.byteLength,content:n.getDebugHexString(s)},preamble:r,pax:t}}trySyncPaxHeader(){if(!this.pax)return;const e=this.fileName,t=this.pax.toUint8Array().byteLength,r=this.pax.lastModified,i={fileName:e,typeFlag:this.mIsGlobal?d.GLOBAL_EXTENDED_HEADER:d.LOCAL_EXTENDED_HEADER,lastModified:r,fileSize:t};this.mPreamble?this.mPreamble.update(i):this.mPreamble=_.from(i)}}class I{constructor(e={}){this.initialize(e)}static isTarEntry(e){return!!(e&&e instanceof I)}static from(e,t=null){return new I({header:N.from(e),content:t})}initialize(e){let{header:t,content:r,offset:i,context:s}=e;t||(t=N.seeded()),r||(r=null),i||(i=0),s||(s=null);const a=n.sizeofUint8Array(r);return!t.pax&&t.fileSize!==a&&a>0&&(t.ustar.fileSize=a,t.ustar.updateChecksum()),this.mHeader=t,this.mContent=r,this.mOffset=i,this.mContext=s,this}get fileName(){return this.header.fileName}get fileSize(){return this.header.fileSize}get fileMode(){return this.header.fileMode}get ownerUserId(){return this.header.ownerUserId}get groupUserId(){return this.header.groupUserId}get lastModified(){return this.header.lastModified}get headerChecksum(){return this.header.headerChecksum}get linkedFileName(){return this.header.linkedFileName}get typeFlag(){return this.header.typeFlag}get ustarIndicator(){return this.header.ustarIndicator}get ustarVersion(){return this.header.ustarVersion}get ownerUserName(){return this.header.ownerUserName}get ownerGroupName(){return this.header.ownerGroupName}get deviceMajorNumber(){return this.header.deviceMajorNumber}get deviceMinorNumber(){return this.header.deviceMinorNumber}get fileNamePrefix(){return this.header.fileNamePrefix}get header(){return this.mHeader}get content(){return this.mContent}get context(){return this.mContext}get bufferStartIndex(){return this.mOffset}get bufferEndIndex(){return this.bufferStartIndex+this.sectorByteLength}get byteLength(){return this.header.byteLength+this.fileSize}get sectorByteLength(){return n.roundUpSectorOffset(this.byteLength)}get contentStartIndex(){return this.header.byteLength+this.bufferStartIndex}get contentEndIndex(){return this.contentStartIndex+this.fileSize}getContentAsText(){return n.decodeString(this.content)}isDirectory(){return this.header.isDirectoryHeader}isFile(){return this.header.isFileHeader}readContentFrom(e,t=0,i=0){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const{contentStartIndex:r,contentEndIndex:s,fileSize:a}=this,o=n.clamp(t,0,a)+r,u=Math.max(0,s-o),f=i>0?Math.min(i,u):u;return e.read(o,f)}))}writeTo(e,t){if(!n.isUint8Array(e)||e.byteLength<t+this.sectorByteLength)return!1;const r=this.header.toUint8Array();return e.set(r,t),t+=r.byteLength,this.content&&e.set(this.content,t),!0}toUint8Array(){const e=this.header.toUint8Array(),t=new Uint8Array(this.sectorByteLength);return t.set(e,0),this.content&&t.set(this.content,e.byteLength),t}toJSON(){const{header:e,fileName:t,fileSize:r,content:i}=this,s=this.isFile(),a=this.isDirectory();return{name:t,size:r,type:s?"file":a?"directory":"complex",header:e,contentType:i?"Uint8Array["+i.byteLength+"]":"null",content:n.getDebugHexString(i)}}}const A=1e5*s.SECTOR_SIZE;var S;!function(e){e.ERR_ENTRY_CONTENT_MIN_BUFFER_LENGTH_NOT_MET="ERR_ENTRY_CONTENT_MIN_BUFFER_LENGTH_NOT_MET",e.ERR_HEADER_PAX_MIN_BUFFER_LENGTH_NOT_MET="ERR_HEADER_PAX_MIN_BUFFER_LENGTH_NOT_MET",e.ERR_HEADER_MISSING_POST_PAX_SEGMENT="ERR_HEADER_MISSING_POST_PAX_SEGMENT"}(S||(S={}));class b{constructor(e){this.bufferIterator=e,this.mGlobalPaxHeaders=[],this.mBufferCache=null,this.mOffset=0,this.mHasSyncInput=!1}static wrap(e){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const t=n.isUint8Array(e)?new i(e):e,r=new u(t),s=new b(r);return yield s.initialize(),s}))}[Symbol.asyncIterator](){return this}get source(){return this.bufferIterator.input}get globalPaxHeaders(){return this.mGlobalPaxHeaders}initialize(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){this.mBufferCache=null,this.mOffset=0,this.mHasSyncInput=this.bufferIterator.input instanceof i,yield this.bufferIterator.initialize()}))}readAllEntries(){var e,t,i,s;return(0,r.__awaiter)(this,void 0,void 0,(function*(){const n=[];yield this.initialize();try{for(var a,o=!0,u=(0,r.__asyncValues)(this);a=yield u.next(),!(e=a.done);){s=a.value,o=!1;try{const e=s;n.push(e)}finally{o=!0}}}catch(e){t={error:e}}finally{try{o||e||!(i=u.return)||(yield i.call(u))}finally{if(t)throw t.error}}return n}))}next(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const e=yield this.tryParseNextEntry();return null!==e?{done:!1,value:e}:{done:!0,value:null}}))}clearBufferCache(){this.mBufferCache=null,this.mOffset=0}getBufferCacheSlice(e,t){return n.cloneUint8Array(this.mBufferCache,e,t)}tryRequireBufferSize(e){return(0,r.__awaiter)(this,void 0,void 0,(function*(){return null!==(yield this.requireBufferSize(e))}))}requireBufferSize(e){return(0,r.__awaiter)(this,void 0,void 0,(function*(){for(;!this.mBufferCache||this.mBufferCache.byteLength<e;)if(!(yield this.loadNextChunk()))return this.clearBufferCache(),null;return this.mBufferCache}))}loadNextChunk(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const e=yield this.bufferIterator.tryNext();return!!e&&(this.mBufferCache?this.mBufferCache=n.concatUint8Arrays(this.mBufferCache,e):(this.mBufferCache=e,this.mOffset=0),!0)}))}tryParseNextEntry(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const e=yield this.tryParseNextHeader();if(null===e)return this.clearBufferCache(),null;const{header:t,headerOffset:r,contentOffset:i}=e,a=i+t.fileSize,o=r,u=n.roundUpSectorOffset(a);let f=null;if(this.mHasSyncInput&&t.fileSize>0){if(!(yield this.tryRequireBufferSize(u)))throw S.ERR_ENTRY_CONTENT_MIN_BUFFER_LENGTH_NOT_MET;f=this.getBufferCacheSlice(i,a)}return u+s.SECTOR_SIZE<=this.mBufferCache.byteLength?(this.mBufferCache=this.getBufferCacheSlice(u),this.mOffset=0):this.mOffset=u,new I({header:t,offset:o,content:f,context:this})}))}tryParseNextHeader(){return(0,r.__awaiter)(this,void 0,void 0,(function*(){if(!(yield this.tryRequireBufferSize(this.mOffset+s.HEADER_SIZE)))return null;let e=m.findNextUstarSectorOffset(this.mBufferCache,this.mOffset);for(;e<0&&this.mBufferCache.byteLength<A&&(yield this.loadNextChunk());)e=m.findNextUstarSectorOffset(this.mBufferCache,this.mOffset);if(e<0)return this.clearBufferCache(),null;let t=e,r=this.getBufferCacheSlice(t,t+s.HEADER_SIZE),i=new _(r),a=new N({ustar:i}),o=n.advanceSectorOffset(t,this.mBufferCache.byteLength);if(i.isPaxHeader){const e=o+n.roundUpSectorOffset(a.fileSize),u=e+s.HEADER_SIZE,f=a.isGlobalPaxHeader,h=i;if(!(yield this.tryRequireBufferSize(u)))throw S.ERR_HEADER_PAX_MIN_BUFFER_LENGTH_NOT_MET;const l=E.from(this.mBufferCache,o);if(o=e,!m.isUstarSector(this.mBufferCache,o))throw S.ERR_HEADER_MISSING_POST_PAX_SEGMENT;t=o,r=this.getBufferCacheSlice(t,t+s.HEADER_SIZE),i=new _(r),o=n.advanceSectorOffsetUnclamped(o),a=new N({ustar:i,pax:l,preamble:h}),f&&this.mGlobalPaxHeaders.push(a)}return{header:a,headerOffset:t,contentOffset:o}}))}}class T{constructor(e=[]){this.entries=e}static serialize(e){let t=s.TERMINAL_PADDING_SIZE;for(const r of e)t+=r.sectorByteLength;const r=new Uint8Array(t);let i=0;for(const t of e)t.writeTo(r,i),i+=t.sectorByteLength;return r}toUint8Array(){return T.serialize(this.entries)}addEntry(e){return this.entries.push(e),this}addEntryWith(e,t){return this.addEntry(I.from(e,t))}addTextFile(e,t,r){return this.addBinaryFile(e,n.encodeString(t),r)}addBinaryFile(e,t,r={}){const i=Object.assign({fileName:e,fileSize:t.byteLength,typeFlag:d.NORMAL_FILE},r);return this.addEntryWith(i,t)}addDirectory(e,t={}){const r=Object.assign({fileName:e,typeFlag:d.DIRECTORY},t);return this.addEntryWith(r)}removeEntriesWhere(e){return this.entries=this.entries.filter((t=>!e(t))),this}cleanAllHeaders(){for(const e of this.entries)e.header.clean();return this}}class p extends T{constructor(e){super(e)}static extract(e){return(0,r.__awaiter)(this,void 0,void 0,(function*(){const t=yield b.wrap(e),r=yield t.readAllEntries();return new p(r)}))}static read(e){return(0,r.__asyncGenerator)(this,arguments,(function*(){var t,i,s,n;const a=yield(0,r.__await)(b.wrap(e));try{for(var o,u=!0,f=(0,r.__asyncValues)(a);!(t=(o=yield(0,r.__await)(f.next())).done);){n=o.value,u=!1;try{const e=n;yield yield(0,r.__await)(e)}finally{u=!0}}}catch(e){i={error:e}}finally{try{u||t||!(s=f.return)||(yield(0,r.__await)(s.call(f)))}finally{if(i)throw i.error}}}))}}module.exports=t})();