@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.js CHANGED
@@ -1,12 +1,14 @@
1
- 'use strict';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
+ 'use strict';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]}exports.ENTRY_SIZE=N;exports.HEADER_SIZE=z;exports.MAX_PHRED=Xe;exports.averagePeakSpacing=Ge;exports.channelMaxLength=Me;exports.cropAbif=De;exports.dataChannelRole=Ae;exports.ensureRawDataChannels=We;exports.findEntries=ge;exports.findEntry=S;exports.formatFasta=Ye;exports.formatFastq=Ze;exports.formatQual=Je;exports.getChannelMap=Ce;exports.getConfidences=Ne;exports.getConfidencesForVersion=v;exports.getDataChannel=ye;exports.getFwo=B;exports.getPositions=xe;exports.getPositionsForVersion=R;exports.getReverseComplemented=Se;exports.getSamplingRate=Te;exports.getSequence=we;exports.getSequenceForVersion=U;exports.hasData9To12Block=L;exports.hasSignals=ke;exports.hasUsableQuality=Ke;exports.insertEntrySorted=M;exports.isFwoPermutation=P;exports.parseAbif=Oe;exports.readAbif=G;exports.setAveragePeakSpacing=je;exports.setConfidences=_e;exports.setPositions=qe;exports.setSequence=Ve;exports.tagNameFromInt32=Y;exports.upsertEntry=$;exports.writeAbif=de;//# sourceMappingURL=index.js.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
+ exports.ENTRY_SIZE=x;exports.HEADER_SIZE=z;exports.MAX_PHRED=se;exports.averagePeakSpacing=bt;exports.channelMaxLength=ut;exports.cropAbif=tt;exports.dataChannelRole=We;exports.detectFormat=wt;exports.ensureRawDataChannels=At;exports.findEntries=Be;exports.findEntry=S;exports.formatFasta=It;exports.formatFastq=Ot;exports.formatQual=zt;exports.getChannelMap=Ge;exports.getConfidences=Qe;exports.getConfidencesForVersion=B;exports.getDataChannel=He;exports.getFwo=j;exports.getPositions=Ye;exports.getPositionsForVersion=q;exports.getReverseComplemented=je;exports.getSamplingRate=Ke;exports.getSequence=_e;exports.getSequenceForVersion=D;exports.hasData9To12Block=P;exports.hasSignals=st;exports.hasUsableQuality=vt;exports.insertEntrySorted=W;exports.isFwoPermutation=G;exports.makeSeqRecord=$;exports.parseAbif=ot;exports.parseClustal=Kt;exports.parseEmbl=Et;exports.parseFasta=ce;exports.parseFastq=Lt;exports.parseGenbank=Pt;exports.parseGff=jt;exports.parseMsf=en;exports.parseNexus=Jt;exports.parsePhylip=Zt;exports.parsePir=on;exports.parseStockholm=Xt;exports.parseSwissprot=Ut;exports.readAbif=ne;exports.setAveragePeakSpacing=ht;exports.setConfidences=gt;exports.setPositions=pt;exports.setSequence=dt;exports.tagNameFromInt32=me;exports.upsertEntry=L;exports.writeAbif=De;//# sourceMappingURL=index.js.map
12
14
  //# sourceMappingURL=index.js.map