@fishka/seqio 0.6.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.mjs CHANGED
@@ -1,12 +1,14 @@
1
- function E(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function F(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}function w(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function x(e,t,n){return e.subarray(t,t+n)}function Y(e){return String.fromCharCode(e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var z=128,N=28;function G(e){if(e.byteLength<z)throw new Error(`ABIF too small: ${e.byteLength} bytes`);let t=0;if(E(x(e,0,4))!=="ABIF")if(e.byteLength>=132&&E(x(e,128,4))==="ABIF")t=128;else throw new Error('Not an ABIF file: missing "ABIF" magic.');let n=t;if(e.byteLength-n<z)throw new Error(`ABIF too small: ${e.byteLength-n} bytes after offset ${n}`);let r=w(e),a=r.getInt16(n+4,false),i=q(e,r,n+6,n);if(i.tagName!=="tdir")throw new Error(`Expected "tdir" header entry, got "${i.tagName}"`);if(i.elementSize!==N)throw new Error(`Expected dir element size ${N}, got ${i.elementSize}`);let c=i.raw?.elementCount??i.elementCount,m=Math.max(0,c),u=r.getInt32(n+6+20,false);if(u<0||u+m*N>e.byteLength-n)throw new Error(`Directory out of bounds: offset=${u}, entries=${m}, file=${e.byteLength-n}`);let d=[];for(let T=0;T<m;T++)d.push(q(e,r,n+u+T*N,n));let y=i.raw?.dataSize??m*N,f=n+u+m*N,h=Math.min(Math.max(0,y-m*N),Math.max(0,e.byteLength-f)),o={entryCount:m,rawEntryCount:c,elementType:i.elementType,tagNumber:i.tagNumber,entrySize:i.elementSize,dataSize:y,dataOffset:u,dataOffsetBytes:i.raw?.dataOffsetBytes??new Uint8Array(4),dataHandle:i.dataHandle,paddingBytes:new Uint8Array(x(e,f,h))},g=new Uint8Array(x(e,n+6+N,z-6-N)),A=t===128?new Uint8Array(x(e,0,128)):void 0,C=Z(e,n,u,y,d,t);return {version:a,tdir:o,entries:d,macBinaryOffset:t,macBinaryHeader:A,headerReserved:g,unreferencedRanges:C}}function Z(e,t,n,r,a,i){let c=e.byteLength,m=[];i===128&&m.push([0,128]),m.push([t,t+z]);let u=Math.max(a.length*N,Math.max(0,r));m.push([t+n,t+n+u]);for(let o of a)if(o.raw&&!o.raw.inline){let g=t+o.raw.dataOffset;m.push([g,g+o.payload.byteLength]);}let d=m.map(([o,g])=>[Math.max(0,Math.min(o,c)),Math.max(0,Math.min(g,c))]).filter(([o,g])=>g>o).sort((o,g)=>o[0]-g[0]),y=[];for(let[o,g]of d){let A=y[y.length-1];A&&o<=A[1]?A[1]=Math.max(A[1],g):y.push([o,g]);}let f=[],h=0;for(let[o,g]of y)o>h&&f.push({offset:h,bytes:new Uint8Array(x(e,h,o-h))}),h=Math.max(h,g);return h<c&&f.push({offset:h,bytes:new Uint8Array(x(e,h,c-h))}),f}function q(e,t,n,r){let a=E(x(e,n,4)),i=t.getInt32(n+4,false),c=t.getInt16(n+8,false),m=t.getInt16(n+10,false),u=t.getInt32(n+12,false),d=t.getInt32(n+16,false),y=t.getInt32(n+24,false),f=Math.max(0,u*Math.max(0,m)),h=d>=0?d:f,o=d>=0?d<=4:f<=4,g=Math.max(0,m>0?Math.min(u,Math.floor(h/m)):Math.min(u,h)),A,C;if(o)C=-1,A=new Uint8Array(x(e,n+20,Math.min(4,h)));else {C=t.getInt32(n+20,false);let s=r+C;if(C<0||s+h>e.byteLength)throw new Error(`Entry ${a}${i}: payload out of bounds (offset=${C}, size=${h})`);A=new Uint8Array(x(e,s,h));}let T=new Uint8Array(x(e,n+20,4));return {tagName:a,tagNumber:i,elementType:c,elementSize:m,elementCount:g,payload:A,dataHandle:y,raw:{elementCount:u,dataSize:d,dataOffset:C,inline:o,dataOffsetBytes:T}}}function de(e){let t=e.macBinaryOffset,n=e.entries.length,r=e.tdir.entryCount,a=e.entries.map(o=>o.raw&&o.payload.byteLength===o.raw.dataSize?o.raw:void 0),i=z;i=Math.max(i,e.tdir.dataOffset+Math.max(e.tdir.dataSize,r*N));for(let o of a)o&&!o.inline&&(i=Math.max(i,o.dataOffset+o.dataSize));for(let o of e.unreferencedRanges)i=Math.max(i,o.offset-t+o.bytes.length);let c=n>r,m=i,u=c?m:e.tdir.dataOffset,d=n===r?e.tdir.dataSize:n*N;c&&(m+=d);let y=new Array(n);for(let o=0;o<n;o++){let g=e.entries[o].payload.byteLength;if(a[o]||g<=4){y[o]=-1;continue}y[o]=m,m+=g;}let f=new Uint8Array(m),h=w(f);f.set(F("ABIF"),0),h.setInt16(4,e.version,false),f.set(e.headerReserved,6+N),j(f,h,6,{tagName:"tdir",tagNumber:e.tdir.tagNumber,elementType:e.tdir.elementType,elementSize:e.tdir.entrySize,elementCount:n,dataSize:d,dataHandle:e.tdir.dataHandle,offsetSlot:{kind:"external",value:u}}),n===r&&e.tdir.paddingBytes.length>0&&f.set(e.tdir.paddingBytes,u+n*N);for(let o=0;o<n;o++){let g=e.entries[o],A=a[o],C=u+o*N,T=g.payload.byteLength;j(f,h,C,{tagName:g.tagName,tagNumber:g.tagNumber,elementType:g.elementType,elementSize:g.elementSize,elementCount:A?A.elementCount:g.elementCount,dataSize:A?A.dataSize:T,dataHandle:g.dataHandle,offsetSlot:T<=4?{kind:"inline",payload:g.payload,dataSize:T,staleTail:A?.dataOffsetBytes}:{kind:"external",value:A?A.dataOffset:y[o]}}),T>4&&f.set(g.payload,A?A.dataOffset:y[o]);}for(let o of e.unreferencedRanges)f.set(o.bytes,o.offset-t);return f}function j(e,t,n,r){if(r.tagName.length!==4)throw new Error(`tagName must be 4 chars: "${r.tagName}"`);if(e.set(F(r.tagName),n),t.setInt32(n+4,r.tagNumber,false),t.setInt16(n+8,r.elementType,false),t.setInt16(n+10,r.elementSize,false),t.setInt32(n+12,r.elementCount,false),t.setInt32(n+16,r.dataSize,false),r.offsetSlot.kind==="external")t.setInt32(n+20,r.offsetSlot.value,false);else {let{payload:a,dataSize:i,staleTail:c}=r.offsetSlot;e.fill(0,n+20,n+24),e.set(a.subarray(0,i),n+20),c&&i<4&&e.set(c.subarray(i,4),n+20+i);}t.setInt32(n+24,r.dataHandle,false);}function S(e,t,n){return e.entries.find(r=>r.tagName===t&&r.tagNumber===n)}function ge(e,t){return e.entries.filter(n=>n.tagName===t)}function J(e,t){return e.tagName!==t.tagName?e.tagName<t.tagName?-1:1:e.tagNumber-t.tagNumber}function M(e,t){let n=e.findIndex(r=>J(r,t)>0);e.splice(n<0?e.length:n,0,t);}function $(e,t,n,r,a){if(r.byteLength!==a.elementCount*a.elementSize)throw new Error(`upsertEntry ${t}${n}: payload length ${r.byteLength} != count*size`);let i=S(e,t,n);i?(i.elementType=a.elementType,i.elementSize=a.elementSize,i.elementCount=a.elementCount,i.payload=r,i.raw=void 0):M(e.entries,{tagName:t,tagNumber:n,elementType:a.elementType,elementSize:a.elementSize,elementCount:a.elementCount,payload:r,dataHandle:0});}function ye(e,t){let n=S(e,"DATA",t);if(!n)return;if(n.elementSize!==2)throw new Error(`DATA${t}: expected elementSize=2, got ${n.elementSize}`);let r=new Int16Array(n.elementCount),a=w(n.payload);for(let i=0;i<n.elementCount;i++)r[i]=a.getInt16(i*2,false);return r}function B(e){let t=S(e,"FWO_",1);return t?E(t.payload.subarray(0,t.elementCount)):"GATC"}function P(e){return /^[ACGT]{4}$/.test(e)&&new Set(e).size===4}function L(e){return !!(S(e,"DATA",9)&&S(e,"DATA",10)&&S(e,"DATA",11)&&S(e,"DATA",12))}function Ae(e){return e>=5&&e<=8?"telemetry":e>=1&&e<=4||e>=9&&e<=12||e===105||e===205?"trace":"other"}function Se(e){let t=S(e,"RevC",1);if(!t)return;let n=w(t.payload);return t.payload.byteLength>=2?n.getInt16(0,false)!==0:t.payload.some(r=>r!==0)}function Ce(e){let t=B(e);if(!P(t))throw new Error(`FWO_ is not a permutation of A/C/G/T: "${t}"`);return {[t[0]]:1,[t[1]]:2,[t[2]]:3,[t[3]]:4}}function we(e){return U(e,2)??U(e,1)}function U(e,t){let n=S(e,"PBAS",t);if(n)return E(n.payload.subarray(0,n.elementCount)).replace(/\0+$/g,"")}function Ne(e){return v(e,2)??v(e,1)}function v(e,t){let n=S(e,"PCON",t);if(!n)return;let r=new Array(n.elementCount);for(let a=0;a<n.elementCount;a++)r[a]=n.payload[a];return r}function xe(e){return R(e,2)??R(e,1)}function R(e,t){let n=S(e,"PLOC",t);if(!n)return;if(n.elementSize!==2)throw new Error(`PLOC${t}: expected elementSize=2, got ${n.elementSize}`);let r=w(n.payload),a=new Array(n.elementCount);for(let i=0;i<n.elementCount;i++)a[i]=r.getUint16(i*2,false);return a}function Te(e){let t=S(e,"SPAC",1);if(!t||t.elementSize!==4||t.payload.byteLength<4)return;let n=w(t.payload).getFloat32(0,false);return Number.isFinite(n)&&n>0?n:void 0}function De(e,t,n={}){let{start:r,end:a}=t;if(!Number.isInteger(r)||!Number.isInteger(a)||r<0||a<=r)throw new Error(`cropAbif: invalid range [${r}, ${a})`);if(!L(e))throw new Error("cropAbif: no DATA9..12 block to crop \u2014 the range has nothing to apply to");let i=Math.min(O(e,9),O(e,10),O(e,11),O(e,12));if(a>i)throw new Error(`cropAbif: range end ${a} exceeds the processed trace length ${i}`);let c=n.rawTrace??"omit",m=[];for(let u of e.entries)u.tagName==="DATA"&&u.tagNumber>=9&&u.tagNumber<=12?m.push(K(u,r,a)):u.tagName==="DATA"&&u.tagNumber>=1&&u.tagNumber<=8?c==="full"&&m.push({...u}):u.tagName==="PBAS"||u.tagName==="PCON"||u.tagName==="PLOC"||m.push({...u});for(let u of ee(e))m.push(...te(e,u,r,a));return {version:e.version,tdir:e.tdir,entries:m,macBinaryOffset:0,macBinaryHeader:void 0,headerReserved:e.headerReserved,unreferencedRanges:[]}}function O(e,t){return S(e,"DATA",t)?.elementCount??0}function K(e,t,n){if(e.elementSize!==2)throw new Error(`cropAbif: DATA${e.tagNumber} expected elementSize=2, got ${e.elementSize}`);let r=new Uint8Array(e.payload.subarray(t*2,n*2));return {tagName:"DATA",tagNumber:e.tagNumber,elementType:e.elementType,elementSize:2,elementCount:n-t,payload:r,dataHandle:e.dataHandle}}function ee(e){let t=new Set;for(let n of e.entries)n.tagName==="PBAS"&&t.add(n.tagNumber);return Array.from(t).sort((n,r)=>n-r)}function te(e,t,n,r){let a=U(e,t);if(a===void 0)return [];let i=R(e,t);if(i===void 0)throw new Error(`cropAbif: PBAS${t} has no PLOC${t} to crop by`);if(i.length!==a.length)throw new Error(`cropAbif: PBAS${t}/PLOC${t} length mismatch (${a.length} vs ${i.length})`);let c=v(e,t);if(c!==void 0&&c.length!==a.length)throw new Error(`cropAbif: PBAS${t}/PCON${t} length mismatch`);let m=[];for(let f=0;f<i.length;f++)i[f]>=n&&i[f]<r&&m.push(f);let u=m.map(f=>a[f]).join(""),d=m.map(f=>i[f]-n),y=[{tagName:"PBAS",tagNumber:t,elementType:2,elementSize:1,elementCount:u.length,payload:F(u),dataHandle:0},{tagName:"PLOC",tagNumber:t,elementType:4,elementSize:2,elementCount:d.length,payload:ne(d),dataHandle:0}];if(c!==void 0){let f=m.map(h=>c[h]);y.push({tagName:"PCON",tagNumber:t,elementType:2,elementSize:1,elementCount:f.length,payload:Uint8Array.from(f),dataHandle:0});}return y}function ne(e){let t=new Uint8Array(e.length*2),n=w(t);for(let r=0;r<e.length;r++)n.setUint16(r*2,Math.max(0,Math.min(65535,e[r])),false);return t}var re={1:"byte",2:"char",3:"word",4:"short",5:"long",7:"float",8:"double",10:"date",11:"time",12:"thumb",13:"bool",18:"pString",19:"cString",1023:"tdir"};function H(e){return re[e]??(e>=1024?`user${e}`:`type${e}`)}function ae(e,t=10){return e.length<=t?`[${e.join(", ")}]`:`[${e.slice(0,t).join(", ")}, \u2026 +${e.length-t}] (n=${e.length})`}function ie(e,t=80){return e.length>t?e.slice(0,t)+"\u2026":e}function W(e){let t=e.subarray(0,16),n=Array.from(t,r=>r.toString(16).padStart(2,"0")).join(" ");return `${e.byteLength}B [${n}${e.byteLength>16?" \u2026":""}]`}function I(e){if(e.kind==="numbers")return e.value;if(e.kind==="number")return [e.value]}function D(e,t,n,r){let a=Math.max(0,Math.min(t,Math.floor(e/n))),i=[];for(let c=0;c<a;c++)i.push(r(c*n));return i.length===1?{kind:"number",value:i[0]}:{kind:"numbers",value:i}}function Q(e,t,n){let r=w(n);switch(e){case 1:return {kind:"numbers",value:Array.from(n.subarray(0,t))};case 2:case 19:return {kind:"string",value:E(n.subarray(0,t)).replace(/\0+$/g,"")};case 3:return D(n.byteLength,t,2,a=>r.getUint16(a,false));case 4:return D(n.byteLength,t,2,a=>r.getInt16(a,false));case 5:return D(n.byteLength,t,4,a=>r.getInt32(a,false));case 7:return D(n.byteLength,t,4,a=>r.getFloat32(a,false));case 8:return D(n.byteLength,t,8,a=>r.getFloat64(a,false));case 10:{if(n.byteLength<4)return {kind:"unknown",value:n};let a=r.getInt16(0,false),i=r.getUint8(2),c=r.getUint8(3);return {kind:"date",value:{year:a,month:i,day:c}}}case 11:return n.byteLength<4?{kind:"unknown",value:n}:{kind:"time",value:{hour:r.getUint8(0),minute:r.getUint8(1),second:r.getUint8(2),hsec:r.getUint8(3)}};case 13:{let a=[];for(let i=0;i<Math.min(t,n.byteLength);i++)a.push(r.getUint8(i)!==0);return {kind:"bools",value:a}}case 18:{if(n.byteLength<1)return {kind:"string",value:""};let a=r.getUint8(0);return {kind:"string",value:E(x(n,1,Math.min(a,Math.max(0,t-1))))}}default:return {kind:"unknown",value:n}}}function oe(e,t){switch(e.kind){case "number":return String(e.value);case "numbers":return ae(e.value);case "string":return ie(JSON.stringify(e.value));case "bools":return e.value.length===1?String(e.value[0]):`[${e.value.join(", ")}]`;case "date":{let{year:n,month:r,day:a}=e.value;return `${n}-${String(r).padStart(2,"0")}-${String(a).padStart(2,"0")}`}case "time":{let{hour:n,minute:r,second:a}=e.value;return `${String(n).padStart(2,"0")}:${String(r).padStart(2,"0")}:${String(a).padStart(2,"0")}`}case "bytes":return `${H(t)} ${W(e.value)}`;case "unknown":return `${H(t)} ${W(e.value)}`}}function Oe(e,t=""){let n=e instanceof Uint8Array?e:new Uint8Array(e),r=G(n),a=r.entries.map(s=>{let l=s.tagName==="PCON"&&s.elementSize===1?Q(1,s.elementCount,s.payload):Q(s.elementType,s.elementCount,s.payload);return {tag:s.tagName,tagNumber:s.tagNumber,elementType:s.elementType,elementTypeName:H(s.elementType),elementSize:s.elementSize,elementCount:s.elementCount,rawElementCount:s.raw?.elementCount??s.elementCount,dataSize:s.raw?.dataSize??s.elementCount*s.elementSize,dataOffset:s.raw?.dataOffset??-1,inline:s.raw?.inline??s.elementCount*s.elementSize<=4,decoded:l,preview:oe(l,s.elementType)}}),i=B(r);P(i)||(i="GATC");let c={},m={A:[],C:[],G:[],T:[]},u={A:[],C:[],G:[],T:[]},d={comments:[]},y={},f={},h={},o=s=>i[s];for(let s=0;s<r.entries.length;s++){let l=r.entries[s],p=a[s].decoded;if(l.tagName==="DATA"){let b=I(p);b&&(c[l.tagNumber]=b,l.tagNumber>=1&&l.tagNumber<=4?m[o(l.tagNumber-1)]=b:l.tagNumber>=9&&l.tagNumber<=12&&(u[o(l.tagNumber-9)]=b));}else if(l.tagName==="PBAS"&&p.kind==="string")y[l.tagNumber]=p.value;else if(l.tagName==="PCON"){let b=l.elementSize===1?Array.from(l.payload.subarray(0,l.elementCount)):I(p);b&&(f[l.tagNumber]=b);}else if(l.tagName==="PLOC"){let b=I(p);b&&(h[l.tagNumber]=b.map(k=>k<0?k+65536:k));}else if(l.tagName==="SPAC")if(l.elementSize===4&&l.payload.byteLength>=4){let b=w(l.payload).getFloat32(0,false);Number.isFinite(b)&&b>0&&(d.samplingRate=b);}else p.kind==="number"&&(d.samplingRate=p.value);else if(l.tagName==="SMPL"&&p.kind==="string")d.sampleName=p.value;else if(l.tagName==="LANE"&&p.kind==="number")d.laneNumber=p.value;else if(l.tagName==="TUBE"&&p.kind==="string")d.tube=p.value;else if(l.tagName==="MCHN"&&p.kind==="string")d.machineName=p.value;else if(l.tagName==="MODL"&&p.kind==="string")d.machineModel=p.value;else if(l.tagName==="RUND"&&p.kind==="date"){let b=p.value;d.runDate=`${b.year}-${String(b.month).padStart(2,"0")}-${String(b.day).padStart(2,"0")}`;}else if(l.tagName==="RUNT"&&p.kind==="time"){let b=p.value;d.runTime=`${String(b.hour).padStart(2,"0")}:${String(b.minute).padStart(2,"0")}:${String(b.second).padStart(2,"0")}`;}else l.tagName==="CMNT"&&p.kind==="string"?d.comments.push(p.value):l.tagName==="RevC"&&l.tagNumber===1&&(p.kind==="number"?d.reverseComplemented=p.value!==0:p.kind==="numbers"&&(d.reverseComplemented=p.value.some(b=>b!==0)));}let g=Object.keys(y).map(Number).sort((s,l)=>s-l).map(s=>({version:s,role:s===1?"edited":s===2?"called":"unknown",sequence:y[s],confidences:f[s]??[],positions:h[s]??[]})),A,C=2 in y?2:1 in y?1:Object.keys(y).map(Number)[0];if(C!==void 0&&y[C]!==void 0){let s=y[C].toUpperCase(),l=f[C]??[];l.length!==s.length&&(l=Object.keys(f).map(Number).map(b=>f[b]).find(b=>b.length===s.length)??[]);let p=h[C]??[];p.length!==s.length&&(p=Object.keys(h).map(Number).map(b=>h[b]).find(b=>b.length===s.length)??[]),A={sequence:s,confidences:l,positions:p,pbasVersion:C};}if(!Number.isFinite(d.samplingRate)||(d.samplingRate??0)<=0){let s=A?.positions,l=Math.max(u.A.length,u.C.length,u.G.length,u.T.length);s&&s.length>1?d.samplingRate=(s[s.length-1]-s[0])/(s.length-1):A&&A.sequence.length>0&&l>0&&(d.samplingRate=l/A.sequence.length);}let T={baseOrder:i,dataChannels:c,data1To4:m,data9To12:u};return {fileName:t,fileSize:n.byteLength,abifVersion:r.version,macBinaryOffset:r.macBinaryOffset,dirEntryCount:r.entries.length,metadata:d,chromatogram:T,baseCalls:A,baseCallVariants:g,entries:a}}function ke(e){return e.A.length>0||e.C.length>0||e.G.length>0||e.T.length>0}function Me(e){return Math.max(e.A.length,e.C.length,e.G.length,e.T.length)}function Ve(e,t){$(e,"PBAS",2,F(t),{elementType:2,elementSize:1,elementCount:t.length});}function _e(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=Math.max(0,Math.min(255,Math.round(t[r])));$(e,"PCON",2,n,{elementType:2,elementSize:1,elementCount:t.length});}function qe(e,t){let n=new Uint8Array(t.length*2),r=w(n);for(let a=0;a<t.length;a++)r.setUint16(a*2,Math.max(0,Math.min(65535,t[a])),false);$(e,"PLOC",2,n,{elementType:4,elementSize:2,elementCount:t.length});}function je(e,t,n){let r=new Uint8Array(4);w(r).setFloat32(0,t,false),$(e,"SPAC",1,r,{elementType:7,elementSize:4,elementCount:1});let a=F(n),i=Math.min(255,a.length),c=new Uint8Array(1+i);c[0]=i,c.set(a.subarray(0,i),1),$(e,"SPAC",2,c,{elementType:18,elementSize:1,elementCount:1+i});let m=new Uint8Array(4);w(m).setFloat32(0,t,false),$(e,"SPAC",3,m,{elementType:7,elementSize:4,elementCount:1});}function Ge(e){return e.length<2?0:(e[e.length-1]-e[0])/(e.length-1)}function We(e){if(!L(e))for(let t=1;t<=4;t++){let n=S(e,"DATA",t);if(!n)continue;let r=8+t;S(e,"DATA",r)||M(e.entries,{tagName:"DATA",tagNumber:r,elementType:n.elementType,elementSize:n.elementSize,elementCount:n.elementCount,payload:new Uint8Array(n.payload),dataHandle:0});}}var Xe=93;function Ye(e,t){let n=t?.lineWidth??60;return _(e).map(r=>`${V(">",r.id,r.description)}
2
- ${ue(r.sequence,n)}`).join("")}function Ze(e){return _(e).map(se).join("")}function Je(e,t){let n=t?.lineWidth??60;return _(e).map(r=>`${V(">",r.id,r.description)}
3
- ${le(r.qualities,n)}`).join("")}function Ke(e){return !!e&&e.length>0&&!e.every(t=>t===255)}function se(e){let{id:t,description:n,sequence:r,qualities:a}=e;if(a.length!==r.length)throw new Error(`FASTQ ${t}: ${a.length} quality scores for ${r.length} bases`);let i=a.map(me).join("");return `${V("@",t,n)}
1
+ function U(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function k(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}function w(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function F(e,t,n){return e.subarray(t,t+n)}function me(e){return String.fromCharCode(e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var z=128,x=28;function ne(e){if(e.byteLength<z)throw new Error(`ABIF too small: ${e.byteLength} bytes`);let t=0;if(U(F(e,0,4))!=="ABIF")if(e.byteLength>=132&&U(F(e,128,4))==="ABIF")t=128;else throw new Error('Not an ABIF file: missing "ABIF" magic.');let n=t;if(e.byteLength-n<z)throw new Error(`ABIF too small: ${e.byteLength-n} bytes after offset ${n}`);let r=w(e),i=r.getInt16(n+4,false),a=ee(e,r,n+6,n);if(a.tagName!=="tdir")throw new Error(`Expected "tdir" header entry, got "${a.tagName}"`);if(a.elementSize!==x)throw new Error(`Expected dir element size ${x}, got ${a.elementSize}`);let s=a.raw?.elementCount??a.elementCount,o=Math.max(0,s),c=r.getInt32(n+6+20,false);if(c<0||c+o*x>e.byteLength-n)throw new Error(`Directory out of bounds: offset=${c}, entries=${o}, file=${e.byteLength-n}`);let f=[];for(let T=0;T<o;T++)f.push(ee(e,r,n+c+T*x,n));let d=a.raw?.dataSize??o*x,u=n+c+o*x,p=Math.min(Math.max(0,d-o*x),Math.max(0,e.byteLength-u)),l={entryCount:o,rawEntryCount:s,elementType:a.elementType,tagNumber:a.tagNumber,entrySize:a.elementSize,dataSize:d,dataOffset:c,dataOffsetBytes:a.raw?.dataOffsetBytes??new Uint8Array(4),dataHandle:a.dataHandle,paddingBytes:new Uint8Array(F(e,u,p))},h=new Uint8Array(F(e,n+6+x,z-6-x)),y=t===128?new Uint8Array(F(e,0,128)):void 0,C=de(e,n,c,d,f,t);return {version:i,tdir:l,entries:f,macBinaryOffset:t,macBinaryHeader:y,headerReserved:h,unreferencedRanges:C}}function de(e,t,n,r,i,a){let s=e.byteLength,o=[];a===128&&o.push([0,128]),o.push([t,t+z]);let c=Math.max(i.length*x,Math.max(0,r));o.push([t+n,t+n+c]);for(let l of i)if(l.raw&&!l.raw.inline){let h=t+l.raw.dataOffset;o.push([h,h+l.payload.byteLength]);}let f=o.map(([l,h])=>[Math.max(0,Math.min(l,s)),Math.max(0,Math.min(h,s))]).filter(([l,h])=>h>l).sort((l,h)=>l[0]-h[0]),d=[];for(let[l,h]of f){let y=d[d.length-1];y&&l<=y[1]?y[1]=Math.max(y[1],h):d.push([l,h]);}let u=[],p=0;for(let[l,h]of d)l>p&&u.push({offset:p,bytes:new Uint8Array(F(e,p,l-p))}),p=Math.max(p,h);return p<s&&u.push({offset:p,bytes:new Uint8Array(F(e,p,s-p))}),u}function ee(e,t,n,r){let i=U(F(e,n,4)),a=t.getInt32(n+4,false),s=t.getInt16(n+8,false),o=t.getInt16(n+10,false),c=t.getInt32(n+12,false),f=t.getInt32(n+16,false),d=t.getInt32(n+24,false),u=Math.max(0,c*Math.max(0,o)),p=f>=0?f:u,l=f>=0?f<=4:u<=4,h=Math.max(0,o>0?Math.min(c,Math.floor(p/o)):Math.min(c,p)),y,C;if(l)C=-1,y=new Uint8Array(F(e,n+20,Math.min(4,p)));else {C=t.getInt32(n+20,false);let m=r+C;if(C<0||m+p>e.byteLength)throw new Error(`Entry ${i}${a}: payload out of bounds (offset=${C}, size=${p})`);y=new Uint8Array(F(e,m,p));}let T=new Uint8Array(F(e,n+20,4));return {tagName:i,tagNumber:a,elementType:s,elementSize:o,elementCount:h,payload:y,dataHandle:d,raw:{elementCount:c,dataSize:f,dataOffset:C,inline:l,dataOffsetBytes:T}}}function De(e){let t=e.macBinaryOffset,n=e.entries.length,r=e.tdir.entryCount,i=e.entries.map(l=>l.raw&&l.payload.byteLength===l.raw.dataSize?l.raw:void 0),a=z;a=Math.max(a,e.tdir.dataOffset+Math.max(e.tdir.dataSize,r*x));for(let l of i)l&&!l.inline&&(a=Math.max(a,l.dataOffset+l.dataSize));for(let l of e.unreferencedRanges)a=Math.max(a,l.offset-t+l.bytes.length);let s=n>r,o=a,c=s?o:e.tdir.dataOffset,f=n===r?e.tdir.dataSize:n*x;s&&(o+=f);let d=new Array(n);for(let l=0;l<n;l++){let h=e.entries[l].payload.byteLength;if(i[l]||h<=4){d[l]=-1;continue}d[l]=o,o+=h;}let u=new Uint8Array(o),p=w(u);u.set(k("ABIF"),0),p.setInt16(4,e.version,false),u.set(e.headerReserved,6+x),te(u,p,6,{tagName:"tdir",tagNumber:e.tdir.tagNumber,elementType:e.tdir.elementType,elementSize:e.tdir.entrySize,elementCount:n,dataSize:f,dataHandle:e.tdir.dataHandle,offsetSlot:{kind:"external",value:c}}),n===r&&e.tdir.paddingBytes.length>0&&u.set(e.tdir.paddingBytes,c+n*x);for(let l=0;l<n;l++){let h=e.entries[l],y=i[l],C=c+l*x,T=h.payload.byteLength;te(u,p,C,{tagName:h.tagName,tagNumber:h.tagNumber,elementType:h.elementType,elementSize:h.elementSize,elementCount:y?y.elementCount:h.elementCount,dataSize:y?y.dataSize:T,dataHandle:h.dataHandle,offsetSlot:T<=4?{kind:"inline",payload:h.payload,dataSize:T,staleTail:y?.dataOffsetBytes}:{kind:"external",value:y?y.dataOffset:d[l]}}),T>4&&u.set(h.payload,y?y.dataOffset:d[l]);}for(let l of e.unreferencedRanges)u.set(l.bytes,l.offset-t);return u}function te(e,t,n,r){if(r.tagName.length!==4)throw new Error(`tagName must be 4 chars: "${r.tagName}"`);if(e.set(k(r.tagName),n),t.setInt32(n+4,r.tagNumber,false),t.setInt16(n+8,r.elementType,false),t.setInt16(n+10,r.elementSize,false),t.setInt32(n+12,r.elementCount,false),t.setInt32(n+16,r.dataSize,false),r.offsetSlot.kind==="external")t.setInt32(n+20,r.offsetSlot.value,false);else {let{payload:i,dataSize:a,staleTail:s}=r.offsetSlot;e.fill(0,n+20,n+24),e.set(i.subarray(0,a),n+20),s&&a<4&&e.set(s.subarray(a,4),n+20+a);}t.setInt32(n+24,r.dataHandle,false);}function S(e,t,n){return e.entries.find(r=>r.tagName===t&&r.tagNumber===n)}function Be(e,t){return e.entries.filter(n=>n.tagName===t)}function ge(e,t){return e.tagName!==t.tagName?e.tagName<t.tagName?-1:1:e.tagNumber-t.tagNumber}function W(e,t){let n=e.findIndex(r=>ge(r,t)>0);e.splice(n<0?e.length:n,0,t);}function L(e,t,n,r,i){if(r.byteLength!==i.elementCount*i.elementSize)throw new Error(`upsertEntry ${t}${n}: payload length ${r.byteLength} != count*size`);let a=S(e,t,n);a?(a.elementType=i.elementType,a.elementSize=i.elementSize,a.elementCount=i.elementCount,a.payload=r,a.raw=void 0):W(e.entries,{tagName:t,tagNumber:n,elementType:i.elementType,elementSize:i.elementSize,elementCount:i.elementCount,payload:r,dataHandle:0});}function He(e,t){let n=S(e,"DATA",t);if(!n)return;if(n.elementSize!==2)throw new Error(`DATA${t}: expected elementSize=2, got ${n.elementSize}`);let r=new Int16Array(n.elementCount),i=w(n.payload);for(let a=0;a<n.elementCount;a++)r[a]=i.getInt16(a*2,false);return r}function j(e){let t=S(e,"FWO_",1);return t?U(t.payload.subarray(0,t.elementCount)):"GATC"}function G(e){return /^[ACGT]{4}$/.test(e)&&new Set(e).size===4}function P(e){return !!(S(e,"DATA",9)&&S(e,"DATA",10)&&S(e,"DATA",11)&&S(e,"DATA",12))}function We(e){return e>=5&&e<=8?"telemetry":e>=1&&e<=4||e>=9&&e<=12||e===105||e===205?"trace":"other"}function je(e){let t=S(e,"RevC",1);if(!t)return;let n=w(t.payload);return t.payload.byteLength>=2?n.getInt16(0,false)!==0:t.payload.some(r=>r!==0)}function Ge(e){let t=j(e);if(!G(t))throw new Error(`FWO_ is not a permutation of A/C/G/T: "${t}"`);return {[t[0]]:1,[t[1]]:2,[t[2]]:3,[t[3]]:4}}function _e(e){return D(e,2)??D(e,1)}function D(e,t){let n=S(e,"PBAS",t);if(n)return U(n.payload.subarray(0,n.elementCount)).replace(/\0+$/g,"")}function Qe(e){return B(e,2)??B(e,1)}function B(e,t){let n=S(e,"PCON",t);if(!n)return;let r=new Array(n.elementCount);for(let i=0;i<n.elementCount;i++)r[i]=n.payload[i];return r}function Ye(e){return q(e,2)??q(e,1)}function q(e,t){let n=S(e,"PLOC",t);if(!n)return;if(n.elementSize!==2)throw new Error(`PLOC${t}: expected elementSize=2, got ${n.elementSize}`);let r=w(n.payload),i=new Array(n.elementCount);for(let a=0;a<n.elementCount;a++)i[a]=r.getUint16(a*2,false);return i}function Ke(e){let t=S(e,"SPAC",1);if(!t||t.elementSize!==4||t.payload.byteLength<4)return;let n=w(t.payload).getFloat32(0,false);return Number.isFinite(n)&&n>0?n:void 0}function tt(e,t,n={}){let{start:r,end:i}=t;if(!Number.isInteger(r)||!Number.isInteger(i)||r<0||i<=r)throw new Error(`cropAbif: invalid range [${r}, ${i})`);if(!P(e))throw new Error("cropAbif: no DATA9..12 block to crop \u2014 the range has nothing to apply to");let a=Math.min(V(e,9),V(e,10),V(e,11),V(e,12));if(i>a)throw new Error(`cropAbif: range end ${i} exceeds the processed trace length ${a}`);let s=n.rawTrace??"omit",o=[];for(let c of e.entries)c.tagName==="DATA"&&c.tagNumber>=9&&c.tagNumber<=12?o.push(pe(c,r,i)):c.tagName==="DATA"&&c.tagNumber>=1&&c.tagNumber<=8?s==="full"&&o.push({...c}):c.tagName==="PBAS"||c.tagName==="PCON"||c.tagName==="PLOC"||o.push({...c});for(let c of he(e))o.push(...be(e,c,r,i));return {version:e.version,tdir:e.tdir,entries:o,macBinaryOffset:0,macBinaryHeader:void 0,headerReserved:e.headerReserved,unreferencedRanges:[]}}function V(e,t){return S(e,"DATA",t)?.elementCount??0}function pe(e,t,n){if(e.elementSize!==2)throw new Error(`cropAbif: DATA${e.tagNumber} expected elementSize=2, got ${e.elementSize}`);let r=new Uint8Array(e.payload.subarray(t*2,n*2));return {tagName:"DATA",tagNumber:e.tagNumber,elementType:e.elementType,elementSize:2,elementCount:n-t,payload:r,dataHandle:e.dataHandle}}function he(e){let t=new Set;for(let n of e.entries)n.tagName==="PBAS"&&t.add(n.tagNumber);return Array.from(t).sort((n,r)=>n-r)}function be(e,t,n,r){let i=D(e,t);if(i===void 0)return [];let a=q(e,t);if(a===void 0)throw new Error(`cropAbif: PBAS${t} has no PLOC${t} to crop by`);if(a.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PLOC${t} length mismatch (${i.length} vs ${a.length})`);let s=B(e,t);if(s!==void 0&&s.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PCON${t} length mismatch`);let o=[];for(let u=0;u<a.length;u++)a[u]>=n&&a[u]<r&&o.push(u);let c=o.map(u=>i[u]).join(""),f=o.map(u=>a[u]-n),d=[{tagName:"PBAS",tagNumber:t,elementType:2,elementSize:1,elementCount:c.length,payload:k(c),dataHandle:0},{tagName:"PLOC",tagNumber:t,elementType:4,elementSize:2,elementCount:f.length,payload:Ae(f),dataHandle:0}];if(s!==void 0){let u=o.map(p=>s[p]);d.push({tagName:"PCON",tagNumber:t,elementType:2,elementSize:1,elementCount:u.length,payload:Uint8Array.from(u),dataHandle:0});}return d}function Ae(e){let t=new Uint8Array(e.length*2),n=w(t);for(let r=0;r<e.length;r++)n.setUint16(r*2,Math.max(0,Math.min(65535,e[r])),false);return t}var ye={1:"byte",2:"char",3:"word",4:"short",5:"long",7:"float",8:"double",10:"date",11:"time",12:"thumb",13:"bool",18:"pString",19:"cString",1023:"tdir"};function Q(e){return ye[e]??(e>=1024?`user${e}`:`type${e}`)}function Se(e,t=10){return e.length<=t?`[${e.join(", ")}]`:`[${e.slice(0,t).join(", ")}, \u2026 +${e.length-t}] (n=${e.length})`}function Ce(e,t=80){return e.length>t?e.slice(0,t)+"\u2026":e}function re(e){let t=e.subarray(0,16),n=Array.from(t,r=>r.toString(16).padStart(2,"0")).join(" ");return `${e.byteLength}B [${n}${e.byteLength>16?" \u2026":""}]`}function _(e){if(e.kind==="numbers")return e.value;if(e.kind==="number")return [e.value]}function v(e,t,n,r){let i=Math.max(0,Math.min(t,Math.floor(e/n))),a=[];for(let s=0;s<i;s++)a.push(r(s*n));return a.length===1?{kind:"number",value:a[0]}:{kind:"numbers",value:a}}function ie(e,t,n){let r=w(n);switch(e){case 1:return {kind:"numbers",value:Array.from(n.subarray(0,t))};case 2:case 19:return {kind:"string",value:U(n.subarray(0,t)).replace(/\0+$/g,"")};case 3:return v(n.byteLength,t,2,i=>r.getUint16(i,false));case 4:return v(n.byteLength,t,2,i=>r.getInt16(i,false));case 5:return v(n.byteLength,t,4,i=>r.getInt32(i,false));case 7:return v(n.byteLength,t,4,i=>r.getFloat32(i,false));case 8:return v(n.byteLength,t,8,i=>r.getFloat64(i,false));case 10:{if(n.byteLength<4)return {kind:"unknown",value:n};let i=r.getInt16(0,false),a=r.getUint8(2),s=r.getUint8(3);return {kind:"date",value:{year:i,month:a,day:s}}}case 11:return n.byteLength<4?{kind:"unknown",value:n}:{kind:"time",value:{hour:r.getUint8(0),minute:r.getUint8(1),second:r.getUint8(2),hsec:r.getUint8(3)}};case 13:{let i=[];for(let a=0;a<Math.min(t,n.byteLength);a++)i.push(r.getUint8(a)!==0);return {kind:"bools",value:i}}case 18:{if(n.byteLength<1)return {kind:"string",value:""};let i=r.getUint8(0);return {kind:"string",value:U(F(n,1,Math.min(i,Math.max(0,t-1))))}}default:return {kind:"unknown",value:n}}}function we(e,t){switch(e.kind){case "number":return String(e.value);case "numbers":return Se(e.value);case "string":return Ce(JSON.stringify(e.value));case "bools":return e.value.length===1?String(e.value[0]):`[${e.value.join(", ")}]`;case "date":{let{year:n,month:r,day:i}=e.value;return `${n}-${String(r).padStart(2,"0")}-${String(i).padStart(2,"0")}`}case "time":{let{hour:n,minute:r,second:i}=e.value;return `${String(n).padStart(2,"0")}:${String(r).padStart(2,"0")}:${String(i).padStart(2,"0")}`}case "bytes":return `${Q(t)} ${re(e.value)}`;case "unknown":return `${Q(t)} ${re(e.value)}`}}function ot(e,t=""){let n=e instanceof Uint8Array?e:new Uint8Array(e),r=ne(n),i=r.entries.map(m=>{let g=m.tagName==="PCON"&&m.elementSize===1?ie(1,m.elementCount,m.payload):ie(m.elementType,m.elementCount,m.payload);return {tag:m.tagName,tagNumber:m.tagNumber,elementType:m.elementType,elementTypeName:Q(m.elementType),elementSize:m.elementSize,elementCount:m.elementCount,rawElementCount:m.raw?.elementCount??m.elementCount,dataSize:m.raw?.dataSize??m.elementCount*m.elementSize,dataOffset:m.raw?.dataOffset??-1,inline:m.raw?.inline??m.elementCount*m.elementSize<=4,decoded:g,preview:we(g,m.elementType)}}),a=j(r);G(a)||(a="GATC");let s={},o={A:[],C:[],G:[],T:[]},c={A:[],C:[],G:[],T:[]},f={comments:[]},d={},u={},p={},l=m=>a[m];for(let m=0;m<r.entries.length;m++){let g=r.entries[m],A=i[m].decoded;if(g.tagName==="DATA"){let b=_(A);b&&(s[g.tagNumber]=b,g.tagNumber>=1&&g.tagNumber<=4?o[l(g.tagNumber-1)]=b:g.tagNumber>=9&&g.tagNumber<=12&&(c[l(g.tagNumber-9)]=b));}else if(g.tagName==="PBAS"&&A.kind==="string")d[g.tagNumber]=A.value;else if(g.tagName==="PCON"){let b=g.elementSize===1?Array.from(g.payload.subarray(0,g.elementCount)):_(A);b&&(u[g.tagNumber]=b);}else if(g.tagName==="PLOC"){let b=_(A);b&&(p[g.tagNumber]=b.map(H=>H<0?H+65536:H));}else if(g.tagName==="SPAC")if(g.elementSize===4&&g.payload.byteLength>=4){let b=w(g.payload).getFloat32(0,false);Number.isFinite(b)&&b>0&&(f.samplingRate=b);}else A.kind==="number"&&(f.samplingRate=A.value);else if(g.tagName==="SMPL"&&A.kind==="string")f.sampleName=A.value;else if(g.tagName==="LANE"&&A.kind==="number")f.laneNumber=A.value;else if(g.tagName==="TUBE"&&A.kind==="string")f.tube=A.value;else if(g.tagName==="MCHN"&&A.kind==="string")f.machineName=A.value;else if(g.tagName==="MODL"&&A.kind==="string")f.machineModel=A.value;else if(g.tagName==="RUND"&&A.kind==="date"){let b=A.value;f.runDate=`${b.year}-${String(b.month).padStart(2,"0")}-${String(b.day).padStart(2,"0")}`;}else if(g.tagName==="RUNT"&&A.kind==="time"){let b=A.value;f.runTime=`${String(b.hour).padStart(2,"0")}:${String(b.minute).padStart(2,"0")}:${String(b.second).padStart(2,"0")}`;}else g.tagName==="CMNT"&&A.kind==="string"?f.comments.push(A.value):g.tagName==="RevC"&&g.tagNumber===1&&(A.kind==="number"?f.reverseComplemented=A.value!==0:A.kind==="numbers"&&(f.reverseComplemented=A.value.some(b=>b!==0)));}let h=Object.keys(d).map(Number).sort((m,g)=>m-g).map(m=>({version:m,role:m===1?"edited":m===2?"called":"unknown",sequence:d[m],confidences:u[m]??[],positions:p[m]??[]})),y,C=2 in d?2:1 in d?1:Object.keys(d).map(Number)[0];if(C!==void 0&&d[C]!==void 0){let m=d[C].toUpperCase(),g=u[C]??[];g.length!==m.length&&(g=Object.keys(u).map(Number).map(b=>u[b]).find(b=>b.length===m.length)??[]);let A=p[C]??[];A.length!==m.length&&(A=Object.keys(p).map(Number).map(b=>p[b]).find(b=>b.length===m.length)??[]),y={sequence:m,confidences:g,positions:A,pbasVersion:C};}if(!Number.isFinite(f.samplingRate)||(f.samplingRate??0)<=0){let m=y?.positions,g=Math.max(c.A.length,c.C.length,c.G.length,c.T.length);m&&m.length>1?f.samplingRate=(m[m.length-1]-m[0])/(m.length-1):y&&y.sequence.length>0&&g>0&&(f.samplingRate=g/y.sequence.length);}let T={baseOrder:a,dataChannels:s,data1To4:o,data9To12:c};return {fileName:t,fileSize:n.byteLength,abifVersion:r.version,macBinaryOffset:r.macBinaryOffset,dirEntryCount:r.entries.length,metadata:f,chromatogram:T,baseCalls:y,baseCallVariants:h,entries:i}}function st(e){return e.A.length>0||e.C.length>0||e.G.length>0||e.T.length>0}function ut(e){return Math.max(e.A.length,e.C.length,e.G.length,e.T.length)}function dt(e,t){L(e,"PBAS",2,k(t),{elementType:2,elementSize:1,elementCount:t.length});}function gt(e,t){let n=new Uint8Array(t.length);for(let r=0;r<t.length;r++)n[r]=Math.max(0,Math.min(255,Math.round(t[r])));L(e,"PCON",2,n,{elementType:2,elementSize:1,elementCount:t.length});}function pt(e,t){let n=new Uint8Array(t.length*2),r=w(n);for(let i=0;i<t.length;i++)r.setUint16(i*2,Math.max(0,Math.min(65535,t[i])),false);L(e,"PLOC",2,n,{elementType:4,elementSize:2,elementCount:t.length});}function ht(e,t,n){let r=new Uint8Array(4);w(r).setFloat32(0,t,false),L(e,"SPAC",1,r,{elementType:7,elementSize:4,elementCount:1});let i=k(n),a=Math.min(255,i.length),s=new Uint8Array(1+a);s[0]=a,s.set(i.subarray(0,a),1),L(e,"SPAC",2,s,{elementType:18,elementSize:1,elementCount:1+a});let o=new Uint8Array(4);w(o).setFloat32(0,t,false),L(e,"SPAC",3,o,{elementType:7,elementSize:4,elementCount:1});}function bt(e){return e.length<2?0:(e[e.length-1]-e[0])/(e.length-1)}function At(e){if(!P(e))for(let t=1;t<=4;t++){let n=S(e,"DATA",t);if(!n)continue;let r=8+t;S(e,"DATA",r)||W(e.entries,{tagName:"DATA",tagNumber:r,elementType:n.elementType,elementSize:n.elementSize,elementCount:n.elementCount,payload:new Uint8Array(n.payload),dataHandle:0});}}function M(e){let t=typeof e=="string"?e:new TextDecoder().decode(e);return t.charCodeAt(0)===65279&&(t=t.slice(1)),t}function N(e){return M(e).split(/\r\n|\r|\n/)}function R(e){return e.replace(/\s+/g,"")}function E(e){return e.trim().length===0}function I(e){let t=e.trim(),n=t.search(/\s/);return n<0?t:t.slice(0,n)}var Ne=128,ae=8192;function wt(e){if(Y(e,0,"ABIF")||Y(e,Ne,"ABIF"))return "abif";if(Y(e,0,".scf"))return "scf";let t=Fe(e);return t===void 0?"unknown":xe(t)}function xe(e){let t=e.trimStart();if(/^LOCUS\s/.test(t))return "genbank";if(/^ID\s/.test(t))return /(Reviewed|Unreviewed);| AA\.\s*$/.test(t)?"swissprot":"embl";if(/^#\s*STOCKHOLM/i.test(t))return "stockholm";if(/^#NEXUS/i.test(t))return "nexus";if(/^(CLUSTAL|MUSCLE|MAFFT|T-?COFFEE|PROBCONS|KALIGN|MVIEW|PROMALS)\b/i.test(t)||/multiple (sequence )?alignment/i.test(t)&&!/^[>@#]/.test(t))return "clustal";if(/^!!(NA|AA)_MULTIPLE_ALIGNMENT/i.test(t)||/\bMSF:\s*\d/.test(t))return "msf";if(/^\d+\s+\d+\s*$/.test(t))return "phylip";if(/^##gff-version/i.test(t))return "gff";if(/^>(P1|F1|DL|DC|RL|RC|N1|N3|XX);/i.test(t))return "pir";switch(t.charCodeAt(0)){case 62:case 59:return "fasta";case 64:return "fastq";default:return "unknown"}}function Fe(e){let t=e.length>ae?e.subarray(0,ae):e;for(let n of M(t).split(/\r\n|\r|\n/))if(n.trim().length>0)return n}function Y(e,t,n){if(e.length<t+n.length)return false;for(let r=0;r<n.length;r++)if(e[t+r]!==n.charCodeAt(r))return false;return true}function $(e,t,n){return t?{id:e,description:t,sequence:n}:{id:e,sequence:n}}function Et(e){return oe(e,"embl")}function Ut(e){return oe(e,"swissprot")}function oe(e,t){let n=N(e),r=[],i=false,a="",s="",o=[],c=[],f="header",d=()=>{i&&(r.push($(Te(t,a,s),o.join(" ").trim(),R(c.join("")))),i=false,a="",s="",o=[],c=[],f="header");};for(let u of n){if(u.startsWith("//")){d();continue}if(f==="sequence"){if(u.length===0||/^\s/.test(u)){c.push(u.replace(/[\s\d]/g,""));continue}f="header";}let p=u.slice(0,2);p==="ID"?(i&&d(),i=true,a=u.slice(2).trim()):p==="AC"?(s||(s=u.slice(2).split(";")[0].trim()),i=true):p==="DE"?(o.push(u.slice(2).trim()),i=true):p==="SQ"&&(f="sequence",i=true);}return d(),r}function Te(e,t,n){if(e==="swissprot")return n||I(t);let r=t.split(";"),i=I(r[0]),a="";for(let s of r){let o=/^\s*SV\s+(\d+)/.exec(s);o&&(a=o[1]);}return (a?`${i}.${a}`:i)||n}var se=93,K=33,le=60,Re=255;function ce(e){let t=N(e),n=[],r,i=[],a=()=>{r!==void 0&&n.push(Ee(r,i.join("")));};for(let s of t)if(s[0]===">")a(),r=s.slice(1),i=[];else {if(E(s)||s[0]===";")continue;if(r===void 0)continue;i.push(s);}return a(),n}function Lt(e){let t=N(e),n=[],r=0;for(;r<t.length;){if(E(t[r])||t[r][0]!=="@"){r++;continue}let i=t[r].slice(1);r++;let a=[];for(;r<t.length&&t[r][0]!=="+"&&t[r][0]!=="@";)a.push(t[r]),r++;let s=R(a.join(""));if(r>=t.length||t[r][0]==="@"){n.push(ue(i,s,""));continue}r++;let o="";for(;r<t.length&&o.length<s.length&&!(t[r][0]==="@"&&Ue(t,r));)o+=R(t[r]),r++;n.push(ue(i,s,o));}return n}function It(e,t){let n=t?.lineWidth??le;return J(e).map(r=>`${X(">",r.id,r.description)}
2
+ ${ke(r.sequence,n)}`).join("")}function Ot(e){return J(e).map($e).join("")}function zt(e,t){let n=t?.lineWidth??le;return J(e).map(r=>`${X(">",r.id,r.description)}
3
+ ${Le(r.qualities,n)}`).join("")}function vt(e){return !!e&&e.length>0&&!e.every(t=>t===Re)}function Ee(e,t){let{id:n,description:r}=fe(e),i=R(t);return r===void 0?{id:n,sequence:i}:{id:n,description:r,sequence:i}}function ue(e,t,n){let{id:r,description:i}=fe(e),a=new Array(t.length);for(let s=0;s<t.length;s++){let o=s<n.length?n.charCodeAt(s):K;a[s]=Z(o-K);}return i===void 0?{id:r,sequence:t,qualities:a}:{id:r,description:i,sequence:t,qualities:a}}function fe(e){let t=e.trim(),n=t.search(/\s/);return n<0?{id:t}:{id:t.slice(0,n),description:t.slice(n+1).trim()||void 0}}function Ue(e,t){let n=t+1;for(;n<e.length&&e[n][0]!=="+"&&e[n][0]!=="@";)n++;return e[n]?.[0]==="+"}function $e(e){let{id:t,description:n,sequence:r,qualities:i}=e;if(i.length!==r.length)throw new Error(`FASTQ ${t}: ${i.length} quality scores for ${r.length} bases`);let a=i.map(Ie).join("");return `${X("@",t,n)}
4
4
  ${r}
5
5
  +
6
- ${i}
7
- `}function V(e,t,n){let r=n?`${t} ${n}`:t;if(r.includes(`
8
- `))throw new Error("FASTX header must not contain a newline");return e+r}function ue(e,t){if(e.length===0)return "";if(t<=0||e.length<=t)return `${e}
6
+ ${a}
7
+ `}function X(e,t,n){let r=n?`${t} ${n}`:t;if(r.includes(`
8
+ `))throw new Error("FASTX header must not contain a newline");return e+r}function ke(e,t){if(e.length===0)return "";if(t<=0||e.length<=t)return `${e}
9
9
  `;let n="";for(let r=0;r<e.length;r+=t)n+=`${e.slice(r,r+t)}
10
- `;return n}function le(e,t){if(e.length===0)return "";let n=e.map(X),r=t<=0?n.length:t,a="";for(let i=0;i<n.length;i+=r)a+=`${n.slice(i,i+r).join(" ")}
11
- `;return a}function X(e){let t=Math.round(e);return t<0?0:t>93?93:t}function me(e){return String.fromCharCode(X(e)+33)}function _(e){return Array.isArray(e)?e:[e]}export{N as ENTRY_SIZE,z as HEADER_SIZE,Xe as MAX_PHRED,Ge as averagePeakSpacing,Me as channelMaxLength,De as cropAbif,Ae as dataChannelRole,We as ensureRawDataChannels,ge as findEntries,S as findEntry,Ye as formatFasta,Ze as formatFastq,Je as formatQual,Ce as getChannelMap,Ne as getConfidences,v as getConfidencesForVersion,ye as getDataChannel,B as getFwo,xe as getPositions,R as getPositionsForVersion,Se as getReverseComplemented,Te as getSamplingRate,we as getSequence,U as getSequenceForVersion,L as hasData9To12Block,ke as hasSignals,Ke as hasUsableQuality,M as insertEntrySorted,P as isFwoPermutation,Oe as parseAbif,G as readAbif,je as setAveragePeakSpacing,_e as setConfidences,qe as setPositions,Ve as setSequence,Y as tagNameFromInt32,$ as upsertEntry,de as writeAbif};//# sourceMappingURL=index.mjs.map
10
+ `;return n}function Le(e,t){if(e.length===0)return "";let n=e.map(Z),r=t<=0?n.length:t,i="";for(let a=0;a<n.length;a+=r)i+=`${n.slice(a,a+r).join(" ")}
11
+ `;return i}function Z(e){let t=Math.round(e);return t<0?0:t>se?se:t}function Ie(e){return String.fromCharCode(Z(e)+K)}function J(e){return Array.isArray(e)?e:[e]}var Oe=/^([A-Za-z][A-Za-z0-9_]*)/;function Pt(e){let t=N(e),n=[],r=false,i="",a="",s="",o=[],c=[],f="header",d=()=>{if(!r)return;let u=s||a||i;n.push($(u,o.join(" ").trim(),R(c.join("")))),r=false,i=a=s="",o=[],c=[],f="header";};for(let u of t){if(u.startsWith("//")){d();continue}let p=u.length>0&&!/^\s/.test(u);if(f==="origin")if(p)f="header";else {c.push(u.replace(/[\s\d]/g,""));continue}if(f==="definition"&&!p){o.push(u.trim());continue}if(!p)continue;let l=(Oe.exec(u)?.[1]??"").toUpperCase(),h=u.slice(l.length).trim();l==="LOCUS"&&r&&d(),r=true,f="header",l==="LOCUS"?i=I(h):l==="ACCESSION"?a=I(h):l==="VERSION"?s=I(h):l==="DEFINITION"?(o=[h],f="definition"):l==="ORIGIN"&&(f="origin");}return d(),n}function jt(e){let t=N(e),n=t.findIndex(r=>/^##FASTA\s*$/i.test(r.trim()));return n<0?[]:ce(t.slice(n+1).join(`
12
+ `))}var O=class{constructor(){this.order=[];this.blocks=new Map;}add(t,n){let r=this.blocks.get(t);r?r.push(n):(this.blocks.set(t,[n]),this.order.push(t));}toRecords(){return this.order.map(t=>$(t,"",R((this.blocks.get(t)??[]).join(""))))}},ze=/^[A-Za-z0-9.*?~-]+$/;function Kt(e){let t=new O,n=false;for(let r of N(e)){if(E(r)||/^\s/.test(r)||!n&&(n=true,/multiple (sequence )?alignment/i.test(r)||/^(CLUSTAL|MUSCLE|MAFFT|T-?COFFEE|PROBCONS|KALIGN|MVIEW|PROMALS)/i.test(r)))continue;let i=/^(\S+)\s+(\S+)/.exec(r);i&&ze.test(i[2])&&t.add(i[1],i[2]);}return t.toRecords()}function Xt(e){let t=[],n=new O;for(let r of N(e)){if(r.startsWith("//")){t.push(...n.toRecords()),n=new O;continue}if(E(r)||r.startsWith("#"))continue;let i=/^(\S+)\s+(\S+)/.exec(r);i&&n.add(i[1],i[2]);}return t.push(...n.toRecords()),t}function Zt(e){let t=N(e),n=0;for(;n<t.length&&E(t[n]);)n++;let r=(t[n]??"").trim().split(/\s+/),i=Number.parseInt(r[0]??"",10),a=Number.parseInt(r[1]??"",10);if(!Number.isFinite(i)||i<=0)return [];n++;let s=[],o=[];for(;n<t.length&&s.length<i;n++){if(E(t[n]))continue;let d=/^(\S+)\s+(.*)$/.exec(t[n]);d&&(s.push(d[1]),o.push(d[2].replace(/\s+/g,"")));}let c=s.length;if(c===0)return [];let f=Number.isFinite(a)&&a>0?a:Number.POSITIVE_INFINITY;for(let d=0;n<t.length;n++){if(E(t[n]))continue;let u=d%c;o[u].length<f&&(o[u]+=t[n].replace(/\s+/g,"")),d++;}return s.map((d,u)=>$(d,"",f===Number.POSITIVE_INFINITY?o[u]:o[u].slice(0,f)))}function Jt(e){let t=M(e).replace(/\[[^\]]*\]/g,""),n=new O,r=false;for(let i of t.split(/\r\n|\r|\n/)){if(!r){/^\s*matrix\b/i.test(i)&&(r=true);continue}let a=i.trim();if(a===";")break;if(E(a))continue;let s=a.endsWith(";"),o=s?a.slice(0,-1).trim():a,c=/^("[^"]+"|'[^']+'|\S+)\s+(.+)$/.exec(o);if(c&&n.add(c[1].replace(/^['"]|['"]$/g,""),c[2].replace(/\s+/g,"")),s)break}return n.toRecords()}function en(e){let t=new O,n=false;for(let r of N(e)){if(!n){r.trimStart().startsWith("//")&&(n=true);continue}if(E(r))continue;let i=/^\s*(\S+)\s+(.+)$/.exec(r);i&&t.add(i[1],i[2].replace(/\s+/g,""));}return t.toRecords()}function on(e){let t=[],n,r="",i=[],a=false,s=()=>{if(n===void 0)return;let o=R(i.join(""));o.endsWith("*")&&(o=o.slice(0,-1)),t.push($(n,r,o)),n=void 0,r="",i=[],a=false;};for(let o of N(e))if(o.startsWith(">")){s();let c=o.slice(1),f=c.indexOf(";");n=(f>=0?c.slice(f+1):c).trim(),a=true;}else {if(n===void 0)continue;a?(r=o.trim(),a=false):i.push(o);}return s(),t}
13
+ export{x as ENTRY_SIZE,z as HEADER_SIZE,se as MAX_PHRED,bt as averagePeakSpacing,ut as channelMaxLength,tt as cropAbif,We as dataChannelRole,wt as detectFormat,At as ensureRawDataChannels,Be as findEntries,S as findEntry,It as formatFasta,Ot as formatFastq,zt as formatQual,Ge as getChannelMap,Qe as getConfidences,B as getConfidencesForVersion,He as getDataChannel,j as getFwo,Ye as getPositions,q as getPositionsForVersion,je as getReverseComplemented,Ke as getSamplingRate,_e as getSequence,D as getSequenceForVersion,P as hasData9To12Block,st as hasSignals,vt as hasUsableQuality,W as insertEntrySorted,G as isFwoPermutation,$ as makeSeqRecord,ot as parseAbif,Kt as parseClustal,Et as parseEmbl,ce as parseFasta,Lt as parseFastq,Pt as parseGenbank,jt as parseGff,en as parseMsf,Jt as parseNexus,Zt as parsePhylip,on as parsePir,Xt as parseStockholm,Ut as parseSwissprot,ne as readAbif,ht as setAveragePeakSpacing,gt as setConfidences,pt as setPositions,dt as setSequence,me as tagNameFromInt32,L as upsertEntry,De as writeAbif};//# sourceMappingURL=index.mjs.map
12
14
  //# sourceMappingURL=index.mjs.map