@fishka/seqio 0.6.0 → 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 X(e){return String.fromCharCode(e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var z=128,N=28;function j(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=_(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(_(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=Y(e,n,u,y,d,t);return {version:a,tdir:o,entries:d,macBinaryOffset:t,macBinaryHeader:A,headerReserved:g,unreferencedRanges:C}}function Y(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 _(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 fe(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),q(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;q(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 q(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 ce(e,t){return e.entries.filter(n=>n.tagName===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):e.entries.push({tagName:t,tagNumber:n,elementType:a.elementType,elementSize:a.elementSize,elementCount:a.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),a=w(n.payload);for(let i=0;i<n.elementCount;i++)r[i]=a.getInt16(i*2,false);return r}function M(e){let t=S(e,"FWO_",1);return t?E(t.payload.subarray(0,t.elementCount)):"GATC"}function B(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 pe(e){return e>=5&&e<=8?"telemetry":e>=1&&e<=4||e>=9&&e<=12||e===105||e===205?"trace":"other"}function ye(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 Ae(e){let t=M(e);if(!B(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 Se(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 Ce(e){return R(e,2)??R(e,1)}function R(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 we(e){return v(e,2)??v(e,1)}function v(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 Ne(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 $e(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(Z(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 J(e))m.push(...K(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 Z(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 J(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 K(e,t,n,r){let a=U(e,t);if(a===void 0)return [];let i=v(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=R(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:ee(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 ee(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 te={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 I(e){return te[e]??(e>=1024?`user${e}`:`type${e}`)}function ne(e,t=10){return e.length<=t?`[${e.join(", ")}]`:`[${e.slice(0,t).join(", ")}, \u2026 +${e.length-t}] (n=${e.length})`}function re(e,t=80){return e.length>t?e.slice(0,t)+"\u2026":e}function G(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 P(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 W(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 ae(e,t){switch(e.kind){case "number":return String(e.value);case "numbers":return ne(e.value);case "string":return re(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 `${I(t)} ${G(e.value)}`;case "unknown":return `${I(t)} ${G(e.value)}`}}function ve(e,t=""){let n=e instanceof Uint8Array?e:new Uint8Array(e),r=j(n),a=r.entries.map(s=>{let l=s.tagName==="PCON"&&s.elementSize===1?W(1,s.elementCount,s.payload):W(s.elementType,s.elementCount,s.payload);return {tag:s.tagName,tagNumber:s.tagNumber,elementType:s.elementType,elementTypeName:I(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:ae(l,s.elementType)}}),i=M(r);B(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=P(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)):P(p);b&&(f[l.tagNumber]=b);}else if(l.tagName==="PLOC"){let b=P(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 Le(e){return e.A.length>0||e.C.length>0||e.G.length>0||e.T.length>0}function Oe(e){return Math.max(e.A.length,e.C.length,e.G.length,e.T.length)}function Ie(e,t){$(e,"PBAS",2,F(t),{elementType:2,elementSize:1,elementCount:t.length});}function He(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 Ve(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 _e(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 qe(e){return e.length<2?0:(e[e.length-1]-e[0])/(e.length-1)}function je(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)||e.entries.push({tagName:"DATA",tagNumber:r,elementType:n.elementType,elementSize:n.elementSize,elementCount:n.elementCount,payload:new Uint8Array(n.payload),dataHandle:0});}}var We=93;function Qe(e,t){let n=t?.lineWidth??60;return V(e).map(r=>`${H(">",r.id,r.description)}
2
- ${oe(r.sequence,n)}`).join("")}function Xe(e){return V(e).map(ie).join("")}function Ye(e,t){let n=t?.lineWidth??60;return V(e).map(r=>`${H(">",r.id,r.description)}
3
- ${se(r.qualities,n)}`).join("")}function Ze(e){return !!e&&e.length>0&&!e.every(t=>t===255)}function ie(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(ue).join("");return `${H("@",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 H(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 oe(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 se(e,t){if(e.length===0)return "";let n=e.map(Q),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 Q(e){let t=Math.round(e);return t<0?0:t>93?93:t}function ue(e){return String.fromCharCode(Q(e)+33)}function V(e){return Array.isArray(e)?e:[e]}export{N as ENTRY_SIZE,z as HEADER_SIZE,We as MAX_PHRED,qe as averagePeakSpacing,Oe as channelMaxLength,$e as cropAbif,pe as dataChannelRole,je as ensureRawDataChannels,ce as findEntries,S as findEntry,Qe as formatFasta,Xe as formatFastq,Ye as formatQual,Ae as getChannelMap,Ce as getConfidences,R as getConfidencesForVersion,he as getDataChannel,M as getFwo,we as getPositions,v as getPositionsForVersion,ye as getReverseComplemented,Ne as getSamplingRate,Se as getSequence,U as getSequenceForVersion,L as hasData9To12Block,Le as hasSignals,Ze as hasUsableQuality,B as isFwoPermutation,ve as parseAbif,j as readAbif,_e as setAveragePeakSpacing,He as setConfidences,Ve as setPositions,Ie as setSequence,X as tagNameFromInt32,$ as upsertEntry,fe 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