@fishka/seqio 0.8.0 → 0.8.1
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 +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
function U(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function $(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}function C(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function T(e,t,n){return e.subarray(t,t+n)}function be(e){return String.fromCharCode(e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var D=128,R=28;function oe(e){if(e.byteLength<D)throw new Error(`ABIF too small: ${e.byteLength} bytes`);let t=0;if(U(T(e,0,4))!=="ABIF")if(e.byteLength>=132&&U(T(e,128,4))==="ABIF")t=128;else throw new Error('Not an ABIF file: missing "ABIF" magic.');let n=t;if(e.byteLength-n<D)throw new Error(`ABIF too small: ${e.byteLength-n} bytes after offset ${n}`);let r=C(e),i=r.getInt16(n+4,false),o=re(e,r,n+6,n);if(o.tagName!=="tdir")throw new Error(`Expected "tdir" header entry, got "${o.tagName}"`);if(o.elementSize!==R)throw new Error(`Expected dir element size ${R}, got ${o.elementSize}`);let a=o.raw?.elementCount??o.elementCount,s=Math.max(0,a),c=r.getInt32(n+6+20,false);if(c<0||c+s*R>e.byteLength-n)throw new Error(`Directory out of bounds: offset=${c}, entries=${s}, file=${e.byteLength-n}`);let m=[];for(let w=0;w<s;w++)m.push(re(e,r,n+c+w*R,n));let d=o.raw?.dataSize??s*R,u=n+c+s*R,p=Math.min(Math.max(0,d-s*R),Math.max(0,e.byteLength-u)),l={entryCount:s,rawEntryCount:a,elementType:o.elementType,tagNumber:o.tagNumber,entrySize:o.elementSize,dataSize:d,dataOffset:c,dataOffsetBytes:o.raw?.dataOffsetBytes??new Uint8Array(4),dataHandle:o.dataHandle,paddingBytes:new Uint8Array(T(e,u,p))},h=new Uint8Array(T(e,n+6+R,D-6-R)),y=t===128?new Uint8Array(T(e,0,128)):void 0,S=Ae(e,n,c,d,m,t);return {version:i,tdir:l,entries:m,macBinaryOffset:t,macBinaryHeader:y,headerReserved:h,unreferencedRanges:S}}function Ae(e,t,n,r,i,o){let a=e.byteLength,s=[];o===128&&s.push([0,128]),s.push([t,t+D]);let c=Math.max(i.length*R,Math.max(0,r));s.push([t+n,t+n+c]);for(let l of i)if(l.raw&&!l.raw.inline){let h=t+l.raw.dataOffset;s.push([h,h+l.payload.byteLength]);}let m=s.map(([l,h])=>[Math.max(0,Math.min(l,a)),Math.max(0,Math.min(h,a))]).filter(([l,h])=>h>l).sort((l,h)=>l[0]-h[0]),d=[];for(let[l,h]of m){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(T(e,p,l-p))}),p=Math.max(p,h);return p<a&&u.push({offset:p,bytes:new Uint8Array(T(e,p,a-p))}),u}function re(e,t,n,r){let i=U(T(e,n,4)),o=t.getInt32(n+4,false),a=t.getInt16(n+8,false),s=t.getInt16(n+10,false),c=t.getInt32(n+12,false),m=t.getInt32(n+16,false),d=t.getInt32(n+24,false),u=Math.max(0,c*Math.max(0,s)),p=m>=0?m:u,l=m>=0?m<=4:u<=4,h=Math.max(0,s>0?Math.min(c,Math.floor(p/s)):Math.min(c,p)),y,S;if(l)S=-1,y=new Uint8Array(T(e,n+20,Math.min(4,p)));else {S=t.getInt32(n+20,false);let f=r+S;if(S<0||f+p>e.byteLength)throw new Error(`Entry ${i}${o}: payload out of bounds (offset=${S}, size=${p})`);y=new Uint8Array(T(e,f,p));}let w=new Uint8Array(T(e,n+20,4));return {tagName:i,tagNumber:o,elementType:a,elementSize:s,elementCount:h,payload:y,dataHandle:d,raw:{elementCount:c,dataSize:m,dataOffset:S,inline:l,dataOffsetBytes:w}}}function Qe(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),o=D;o=Math.max(o,e.tdir.dataOffset+Math.max(e.tdir.dataSize,r*R));for(let l of i)l&&!l.inline&&(o=Math.max(o,l.dataOffset+l.dataSize));for(let l of e.unreferencedRanges)o=Math.max(o,l.offset-t+l.bytes.length);let a=n>r,s=o,c=a?s:e.tdir.dataOffset,m=n===r?e.tdir.dataSize:n*R;a&&(s+=m);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]=s,s+=h;}let u=new Uint8Array(s),p=C(u);u.set($("ABIF"),0),p.setInt16(4,e.version,false),u.set(e.headerReserved,6+R),ie(u,p,6,{tagName:"tdir",tagNumber:e.tdir.tagNumber,elementType:e.tdir.elementType,elementSize:e.tdir.entrySize,elementCount:n,dataSize:m,dataHandle:e.tdir.dataHandle,offsetSlot:{kind:"external",value:c}}),n===r&&e.tdir.paddingBytes.length>0&&u.set(e.tdir.paddingBytes,c+n*R);for(let l=0;l<n;l++){let h=e.entries[l],y=i[l],S=c+l*R,w=h.payload.byteLength;ie(u,p,S,{tagName:h.tagName,tagNumber:h.tagNumber,elementType:h.elementType,elementSize:h.elementSize,elementCount:y?y.elementCount:h.elementCount,dataSize:y?y.dataSize:w,dataHandle:h.dataHandle,offsetSlot:w<=4?{kind:"inline",payload:h.payload,dataSize:w,staleTail:y?.dataOffsetBytes}:{kind:"external",value:y?y.dataOffset:d[l]}}),w>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 ie(e,t,n,r){if(r.tagName.length!==4)throw new Error(`tagName must be 4 chars: "${r.tagName}"`);if(e.set($(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:o,staleTail:a}=r.offsetSlot;e.fill(0,n+20,n+24),e.set(i.subarray(0,o),n+20),a&&o<4&&e.set(a.subarray(o,4),n+20+o);}t.setInt32(n+24,r.dataHandle,false);}function N(e,t,n){return e.entries.find(r=>r.tagName===t&&r.tagNumber===n)}function Ke(e,t){return e.entries.filter(n=>n.tagName===t)}function ye(e,t){return e.tagName!==t.tagName?e.tagName<t.tagName?-1:1:e.tagNumber-t.tagNumber}function Y(e,t){let n=e.findIndex(r=>ye(r,t)>0);e.splice(n<0?e.length:n,0,t);}function I(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 o=N(e,t,n);o?(o.elementType=i.elementType,o.elementSize=i.elementSize,o.elementCount=i.elementCount,o.payload=r,o.raw=void 0):Y(e.entries,{tagName:t,tagNumber:n,elementType:i.elementType,elementSize:i.elementSize,elementCount:i.elementCount,payload:r,dataHandle:0});}function et(e,t){let n=N(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=C(n.payload);for(let o=0;o<n.elementCount;o++)r[o]=i.getInt16(o*2,false);return r}function Q(e){let t=N(e,"FWO_",1);return t?U(t.payload.subarray(0,t.elementCount)):"GATC"}function K(e){return /^[ACGT]{4}$/.test(e)&&new Set(e).size===4}function B(e){return !!(N(e,"DATA",9)&&N(e,"DATA",10)&&N(e,"DATA",11)&&N(e,"DATA",12))}function tt(e){return e>=5&&e<=8?"telemetry":e>=1&&e<=4||e>=9&&e<=12||e===105||e===205?"trace":"other"}function nt(e){let t=N(e,"RevC",1);if(!t)return;let n=C(t.payload);return t.payload.byteLength>=2?n.getInt16(0,false)!==0:t.payload.some(r=>r!==0)}function rt(e){let t=Q(e);if(!K(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 it(e){return M(e,2)??M(e,1)}function M(e,t){let n=N(e,"PBAS",t);if(n)return U(n.payload.subarray(0,n.elementCount)).replace(/\0+$/g,"")}function ot(e){return v(e,2)??v(e,1)}function v(e,t){let n=N(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 at(e){return P(e,2)??P(e,1)}function P(e,t){let n=N(e,"PLOC",t);if(!n)return;if(n.elementSize!==2)throw new Error(`PLOC${t}: expected elementSize=2, got ${n.elementSize}`);let r=C(n.payload),i=new Array(n.elementCount);for(let o=0;o<n.elementCount;o++)i[o]=r.getUint16(o*2,false);return i}function st(e){let t=N(e,"SPAC",1);if(!t||t.elementSize!==4||t.payload.byteLength<4)return;let n=C(t.payload).getFloat32(0,false);return Number.isFinite(n)&&n>0?n:void 0}function mt(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(!B(e))throw new Error("cropAbif: no DATA9..12 block to crop \u2014 the range has nothing to apply to");let o=Math.min(G(e,9),G(e,10),G(e,11),G(e,12));if(i>o)throw new Error(`cropAbif: range end ${i} exceeds the processed trace length ${o}`);let a=n.rawTrace??"omit",s=[];for(let c of e.entries)c.tagName==="DATA"&&c.tagNumber>=9&&c.tagNumber<=12?s.push(Se(c,r,i)):c.tagName==="DATA"&&c.tagNumber>=1&&c.tagNumber<=8?a==="full"&&s.push({...c}):c.tagName==="PBAS"||c.tagName==="PCON"||c.tagName==="PLOC"||s.push({...c});for(let c of xe(e))s.push(...Ne(e,c,r,i));return {version:e.version,tdir:e.tdir,entries:s,macBinaryOffset:0,macBinaryHeader:void 0,headerReserved:e.headerReserved,unreferencedRanges:[]}}function G(e,t){return N(e,"DATA",t)?.elementCount??0}function Se(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 xe(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 Ne(e,t,n,r){let i=M(e,t);if(i===void 0)return [];let o=P(e,t);if(o===void 0)throw new Error(`cropAbif: PBAS${t} has no PLOC${t} to crop by`);if(o.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PLOC${t} length mismatch (${i.length} vs ${o.length})`);let a=v(e,t);if(a!==void 0&&a.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PCON${t} length mismatch`);let s=[];for(let u=0;u<o.length;u++)o[u]>=n&&o[u]<r&&s.push(u);let c=s.map(u=>i[u]).join(""),m=s.map(u=>o[u]-n),d=[{tagName:"PBAS",tagNumber:t,elementType:2,elementSize:1,elementCount:c.length,payload:$(c),dataHandle:0},{tagName:"PLOC",tagNumber:t,elementType:4,elementSize:2,elementCount:m.length,payload:Ce(m),dataHandle:0}];if(a!==void 0){let u=s.map(p=>a[p]);d.push({tagName:"PCON",tagNumber:t,elementType:2,elementSize:1,elementCount:u.length,payload:Uint8Array.from(u),dataHandle:0});}return d}function Ce(e){let t=new Uint8Array(e.length*2),n=C(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 we={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 Z(e){return we[e]??(e>=1024?`user${e}`:`type${e}`)}function Re(e,t=10){return e.length<=t?`[${e.join(", ")}]`:`[${e.slice(0,t).join(", ")}, \u2026 +${e.length-t}] (n=${e.length})`}function Fe(e,t=80){return e.length>t?e.slice(0,t)+"\u2026":e}function ae(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 X(e){if(e.kind==="numbers")return e.value;if(e.kind==="number")return [e.value]}function q(e,t,n,r){let i=Math.max(0,Math.min(t,Math.floor(e/n))),o=[];for(let a=0;a<i;a++)o.push(r(a*n));return o.length===1?{kind:"number",value:o[0]}:{kind:"numbers",value:o}}function se(e,t,n){let r=C(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 q(n.byteLength,t,2,i=>r.getUint16(i,false));case 4:return q(n.byteLength,t,2,i=>r.getInt16(i,false));case 5:return q(n.byteLength,t,4,i=>r.getInt32(i,false));case 7:return q(n.byteLength,t,4,i=>r.getFloat32(i,false));case 8:return q(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),o=r.getUint8(2),a=r.getUint8(3);return {kind:"date",value:{year:i,month:o,day:a}}}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 o=0;o<Math.min(t,n.byteLength);o++)i.push(r.getUint8(o)!==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(T(n,1,Math.min(i,Math.max(0,t-1))))}}default:return {kind:"unknown",value:n}}}function Te(e,t){switch(e.kind){case "number":return String(e.value);case "numbers":return Re(e.value);case "string":return Fe(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 `${Z(t)} ${ae(e.value)}`;case "unknown":return `${Z(t)} ${ae(e.value)}`}}function bt(e,t=""){let n=e instanceof Uint8Array?e:new Uint8Array(e),r=oe(n),i=r.entries.map(f=>{let g=f.tagName==="PCON"&&f.elementSize===1?se(1,f.elementCount,f.payload):se(f.elementType,f.elementCount,f.payload);return {tag:f.tagName,tagNumber:f.tagNumber,elementType:f.elementType,elementTypeName:Z(f.elementType),elementSize:f.elementSize,elementCount:f.elementCount,rawElementCount:f.raw?.elementCount??f.elementCount,dataSize:f.raw?.dataSize??f.elementCount*f.elementSize,dataOffset:f.raw?.dataOffset??-1,inline:f.raw?.inline??f.elementCount*f.elementSize<=4,decoded:g,preview:Te(g,f.elementType)}}),o=Q(r);K(o)||(o="GATC");let a={},s={A:[],C:[],G:[],T:[]},c={A:[],C:[],G:[],T:[]},m={comments:[]},d={},u={},p={},l=f=>o[f];for(let f=0;f<r.entries.length;f++){let g=r.entries[f],A=i[f].decoded;if(g.tagName==="DATA"){let b=X(A);b&&(a[g.tagNumber]=b,g.tagNumber>=1&&g.tagNumber<=4?s[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)):X(A);b&&(u[g.tagNumber]=b);}else if(g.tagName==="PLOC"){let b=X(A);b&&(p[g.tagNumber]=b.map(j=>j<0?j+65536:j));}else if(g.tagName==="SPAC")if(g.elementSize===4&&g.payload.byteLength>=4){let b=C(g.payload).getFloat32(0,false);Number.isFinite(b)&&b>0&&(m.samplingRate=b);}else A.kind==="number"&&(m.samplingRate=A.value);else if(g.tagName==="SMPL"&&A.kind==="string")m.sampleName=A.value;else if(g.tagName==="LANE"&&A.kind==="number")m.laneNumber=A.value;else if(g.tagName==="TUBE"&&A.kind==="string")m.tube=A.value;else if(g.tagName==="MCHN"&&A.kind==="string")m.machineName=A.value;else if(g.tagName==="MODL"&&A.kind==="string")m.machineModel=A.value;else if(g.tagName==="RUND"&&A.kind==="date"){let b=A.value;m.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;m.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"?m.comments.push(A.value):g.tagName==="RevC"&&g.tagNumber===1&&(A.kind==="number"?m.reverseComplemented=A.value!==0:A.kind==="numbers"&&(m.reverseComplemented=A.value.some(b=>b!==0)));}let h=Object.keys(d).map(Number).sort((f,g)=>f-g).map(f=>({version:f,role:f===1?"edited":f===2?"called":"unknown",sequence:d[f],confidences:u[f]??[],positions:p[f]??[]})),y,S=2 in d?2:1 in d?1:Object.keys(d).map(Number)[0];if(S!==void 0&&d[S]!==void 0){let f=d[S].toUpperCase(),g=u[S]??[];g.length!==f.length&&(g=Object.keys(u).map(Number).map(b=>u[b]).find(b=>b.length===f.length)??[]);let A=p[S]??[];A.length!==f.length&&(A=Object.keys(p).map(Number).map(b=>p[b]).find(b=>b.length===f.length)??[]),y={sequence:f,confidences:g,positions:A,pbasVersion:S};}if(!Number.isFinite(m.samplingRate)||(m.samplingRate??0)<=0){let f=y?.positions,g=Math.max(c.A.length,c.C.length,c.G.length,c.T.length);f&&f.length>1?m.samplingRate=(f[f.length-1]-f[0])/(f.length-1):y&&y.sequence.length>0&&g>0&&(m.samplingRate=g/y.sequence.length);}let w={baseOrder:o,dataChannels:a,data1To4:s,data9To12:c};return {fileName:t,fileSize:n.byteLength,abifVersion:r.version,macBinaryOffset:r.macBinaryOffset,dirEntryCount:r.entries.length,metadata:m,chromatogram:w,baseCalls:y,baseCallVariants:h,entries:i}}function At(e){return e.A.length>0||e.C.length>0||e.G.length>0||e.T.length>0}function yt(e){return Math.max(e.A.length,e.C.length,e.G.length,e.T.length)}function wt(e,t){I(e,"PBAS",2,$(t),{elementType:2,elementSize:1,elementCount:t.length});}function Rt(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])));I(e,"PCON",2,n,{elementType:2,elementSize:1,elementCount:t.length});}function Ft(e,t){let n=new Uint8Array(t.length*2),r=C(n);for(let i=0;i<t.length;i++)r.setUint16(i*2,Math.max(0,Math.min(65535,t[i])),false);I(e,"PLOC",2,n,{elementType:4,elementSize:2,elementCount:t.length});}function Tt(e,t,n){let r=new Uint8Array(4);C(r).setFloat32(0,t,false),I(e,"SPAC",1,r,{elementType:7,elementSize:4,elementCount:1});let i=$(n),o=Math.min(255,i.length),a=new Uint8Array(1+o);a[0]=o,a.set(i.subarray(0,o),1),I(e,"SPAC",2,a,{elementType:18,elementSize:1,elementCount:1+o});let s=new Uint8Array(4);C(s).setFloat32(0,t,false),I(e,"SPAC",3,s,{elementType:7,elementSize:4,elementCount:1});}function Et(e){return e.length<2?0:(e[e.length-1]-e[0])/(e.length-1)}function Lt(e){if(!B(e))for(let t=1;t<=4;t++){let n=N(e,"DATA",t);if(!n)continue;let r=8+t;N(e,"DATA",r)||Y(e.entries,{tagName:"DATA",tagNumber:r,elementType:n.elementType,elementSize:n.elementSize,elementCount:n.elementCount,payload:new Uint8Array(n.payload),dataHandle:0});}}function z(e){let t=typeof e=="string"?e:new TextDecoder().decode(e);return t.charCodeAt(0)===65279&&(t=t.slice(1)),t}function x(e){return z(e).split(/\r\n|\r|\n/)}function E(e){return e.replace(/\s+/g,"")}function L(e){return e.trim().length===0}function k(e){let t=e.trim(),n=t.search(/\s/);return n<0?t:t.slice(0,n)}var Ee=128,ue=8192;function kt(e){if(V(e,0,"ABIF")||V(e,Ee,"ABIF"))return "abif";if(V(e,0,".scf"))return "scf";if(V(e,0,"BAM"))return "bam";let t=$e(e);return t===void 0?"unknown":Le(t)}function Le(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(/^H\t(?:[^\t]*\t)*VN:Z:[12]\./.test(t))return "gfa";if(/^@(HD|SQ|RG|PG|CO)\t/.test(t))return "sam";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"}return Ue(t)?"sam":/^S\t[!-~]+\t/.test(t)?"gfa":"unknown"}function Ue(e){let t=e.split(" ");if(t.length<11)return false;let[,n,,r,i,o]=t;return /^\d+$/.test(n)&&/^\d+$/.test(r)&&/^\d+$/.test(i)&&/^(\*|(\d+[MIDNSHPX=])+)$/.test(o)}function $e(e){let t=e.length>ue?e.subarray(0,ue):e;for(let n of z(t).split(/\r\n|\r|\n/))if(n.trim().length>0)return n}function V(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 F(e,t,n){return t?{id:e,description:t,sequence:n}:{id:e,sequence:n}}function vt(e){return ce(e,"embl")}function Pt(e){return ce(e,"swissprot")}function ce(e,t){let n=x(e),r=[],i=false,o="",a="",s=[],c=[],m="header",d=()=>{i&&(r.push(F(Ie(t,o,a),s.join(" ").trim(),E(c.join("")))),i=false,o="",a="",s=[],c=[],m="header");};for(let u of n){if(u.startsWith("//")){d();continue}if(m==="sequence"){if(u.length===0||/^\s/.test(u)){c.push(u.replace(/[\s\d]/g,""));continue}m="header";}let p=u.slice(0,2);p==="ID"?(i&&d(),i=true,o=u.slice(2).trim()):p==="AC"?(a||(a=u.slice(2).split(";")[0].trim()),i=true):p==="DE"?(s.push(u.slice(2).trim()),i=true):p==="SQ"&&(m="sequence",i=true);}return d(),r}function Ie(e,t,n){if(e==="swissprot")return n||k(t);let r=t.split(";"),i=k(r[0]),o="";for(let a of r){let s=/^\s*SV\s+(\d+)/.exec(a);s&&(o=s[1]);}return (o?`${i}.${o}`:i)||n}var le=93,J=33,me=60,ke=255;function de(e){let t=x(e),n=[],r,i=[],o=()=>{r!==void 0&&n.push(Oe(r,i.join("")));};for(let a of t)if(a[0]===">")o(),r=a.slice(1),i=[];else {if(L(a)||a[0]===";")continue;if(r===void 0)continue;i.push(a);}return o(),n}function Vt(e){let t=x(e),n=[],r=0;for(;r<t.length;){if(L(t[r])||t[r][0]!=="@"){r++;continue}let i=t[r].slice(1);r++;let o=[];for(;r<t.length&&t[r][0]!=="+"&&t[r][0]!=="@";)o.push(t[r]),r++;let a=E(o.join(""));if(r>=t.length||t[r][0]==="@"){n.push(fe(i,a,""));continue}r++;let s="";for(;r<t.length&&s.length<a.length&&!(t[r][0]==="@"&&De(t,r));)s+=E(t[r]),r++;n.push(fe(i,a,s));}return n}function _t(e,t){let n=t?.lineWidth??me;return ne(e).map(r=>`${ee(">",r.id,r.description)}
|
|
2
|
-
${
|
|
3
|
-
${
|
|
1
|
+
function U(e){let t="";for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function $(e){let t=new Uint8Array(e.length);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n)&255;return t}function C(e){return new DataView(e.buffer,e.byteOffset,e.byteLength)}function T(e,t,n){return e.subarray(t,t+n)}function Ae(e){return String.fromCharCode(e>>>24&255,e>>>16&255,e>>>8&255,e&255)}var M=128,R=28;function ae(e){if(e.byteLength<M)throw new Error(`ABIF too small: ${e.byteLength} bytes`);let t=0;if(U(T(e,0,4))!=="ABIF")if(e.byteLength>=132&&U(T(e,128,4))==="ABIF")t=128;else throw new Error('Not an ABIF file: missing "ABIF" magic.');let n=t;if(e.byteLength-n<M)throw new Error(`ABIF too small: ${e.byteLength-n} bytes after offset ${n}`);let r=C(e),i=r.getInt16(n+4,false),o=ie(e,r,n+6,n);if(o.tagName!=="tdir")throw new Error(`Expected "tdir" header entry, got "${o.tagName}"`);if(o.elementSize!==R)throw new Error(`Expected dir element size ${R}, got ${o.elementSize}`);let a=o.raw?.elementCount??o.elementCount,s=Math.max(0,a),c=r.getInt32(n+6+20,false);if(c<0||c+s*R>e.byteLength-n)throw new Error(`Directory out of bounds: offset=${c}, entries=${s}, file=${e.byteLength-n}`);let m=[];for(let w=0;w<s;w++)m.push(ie(e,r,n+c+w*R,n));let d=o.raw?.dataSize??s*R,u=n+c+s*R,p=Math.min(Math.max(0,d-s*R),Math.max(0,e.byteLength-u)),l={entryCount:s,rawEntryCount:a,elementType:o.elementType,tagNumber:o.tagNumber,entrySize:o.elementSize,dataSize:d,dataOffset:c,dataOffsetBytes:o.raw?.dataOffsetBytes??new Uint8Array(4),dataHandle:o.dataHandle,paddingBytes:new Uint8Array(T(e,u,p))},h=new Uint8Array(T(e,n+6+R,M-6-R)),y=t===128?new Uint8Array(T(e,0,128)):void 0,S=ye(e,n,c,d,m,t);return {version:i,tdir:l,entries:m,macBinaryOffset:t,macBinaryHeader:y,headerReserved:h,unreferencedRanges:S}}function ye(e,t,n,r,i,o){let a=e.byteLength,s=[];o===128&&s.push([0,128]),s.push([t,t+M]);let c=Math.max(i.length*R,Math.max(0,r));s.push([t+n,t+n+c]);for(let l of i)if(l.raw&&!l.raw.inline){let h=t+l.raw.dataOffset;s.push([h,h+l.payload.byteLength]);}let m=s.map(([l,h])=>[Math.max(0,Math.min(l,a)),Math.max(0,Math.min(h,a))]).filter(([l,h])=>h>l).sort((l,h)=>l[0]-h[0]),d=[];for(let[l,h]of m){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(T(e,p,l-p))}),p=Math.max(p,h);return p<a&&u.push({offset:p,bytes:new Uint8Array(T(e,p,a-p))}),u}function ie(e,t,n,r){let i=U(T(e,n,4)),o=t.getInt32(n+4,false),a=t.getInt16(n+8,false),s=t.getInt16(n+10,false),c=t.getInt32(n+12,false),m=t.getInt32(n+16,false),d=t.getInt32(n+24,false),u=Math.max(0,c*Math.max(0,s)),p=m>=0?m:u,l=m>=0?m<=4:u<=4,h=Math.max(0,s>0?Math.min(c,Math.floor(p/s)):Math.min(c,p)),y,S;if(l)S=-1,y=new Uint8Array(T(e,n+20,Math.min(4,p)));else {S=t.getInt32(n+20,false);let f=r+S;if(S<0||f+p>e.byteLength)throw new Error(`Entry ${i}${o}: payload out of bounds (offset=${S}, size=${p})`);y=new Uint8Array(T(e,f,p));}let w=new Uint8Array(T(e,n+20,4));return {tagName:i,tagNumber:o,elementType:a,elementSize:s,elementCount:h,payload:y,dataHandle:d,raw:{elementCount:c,dataSize:m,dataOffset:S,inline:l,dataOffsetBytes:w}}}function Xe(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),o=M;o=Math.max(o,e.tdir.dataOffset+Math.max(e.tdir.dataSize,r*R));for(let l of i)l&&!l.inline&&(o=Math.max(o,l.dataOffset+l.dataSize));for(let l of e.unreferencedRanges)o=Math.max(o,l.offset-t+l.bytes.length);let a=n>r,s=o,c=a?s:e.tdir.dataOffset,m=n===r?e.tdir.dataSize:n*R;a&&(s+=m);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]=s,s+=h;}let u=new Uint8Array(s),p=C(u);u.set($("ABIF"),0),p.setInt16(4,e.version,false),u.set(e.headerReserved,6+R),oe(u,p,6,{tagName:"tdir",tagNumber:e.tdir.tagNumber,elementType:e.tdir.elementType,elementSize:e.tdir.entrySize,elementCount:n,dataSize:m,dataHandle:e.tdir.dataHandle,offsetSlot:{kind:"external",value:c}}),n===r&&e.tdir.paddingBytes.length>0&&u.set(e.tdir.paddingBytes,c+n*R);for(let l=0;l<n;l++){let h=e.entries[l],y=i[l],S=c+l*R,w=h.payload.byteLength;oe(u,p,S,{tagName:h.tagName,tagNumber:h.tagNumber,elementType:h.elementType,elementSize:h.elementSize,elementCount:y?y.elementCount:h.elementCount,dataSize:y?y.dataSize:w,dataHandle:h.dataHandle,offsetSlot:w<=4?{kind:"inline",payload:h.payload,dataSize:w,staleTail:y?.dataOffsetBytes}:{kind:"external",value:y?y.dataOffset:d[l]}}),w>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 oe(e,t,n,r){if(r.tagName.length!==4)throw new Error(`tagName must be 4 chars: "${r.tagName}"`);if(e.set($(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:o,staleTail:a}=r.offsetSlot;e.fill(0,n+20,n+24),e.set(i.subarray(0,o),n+20),a&&o<4&&e.set(a.subarray(o,4),n+20+o);}t.setInt32(n+24,r.dataHandle,false);}function N(e,t,n){return e.entries.find(r=>r.tagName===t&&r.tagNumber===n)}function Ze(e,t){return e.entries.filter(n=>n.tagName===t)}function Se(e,t){return e.tagName!==t.tagName?e.tagName<t.tagName?-1:1:e.tagNumber-t.tagNumber}function Q(e,t){let n=e.findIndex(r=>Se(r,t)>0);e.splice(n<0?e.length:n,0,t);}function I(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 o=N(e,t,n);o?(o.elementType=i.elementType,o.elementSize=i.elementSize,o.elementCount=i.elementCount,o.payload=r,o.raw=void 0):Q(e.entries,{tagName:t,tagNumber:n,elementType:i.elementType,elementSize:i.elementSize,elementCount:i.elementCount,payload:r,dataHandle:0});}function nt(e,t){let n=N(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=C(n.payload);for(let o=0;o<n.elementCount;o++)r[o]=i.getInt16(o*2,false);return r}function K(e){let t=N(e,"FWO_",1);return t?U(t.payload.subarray(0,t.elementCount)):"GATC"}function X(e){return /^[ACGT]{4}$/.test(e)&&new Set(e).size===4}function B(e){return !!(N(e,"DATA",9)&&N(e,"DATA",10)&&N(e,"DATA",11)&&N(e,"DATA",12))}function rt(e){return e>=5&&e<=8?"telemetry":e>=1&&e<=4||e>=9&&e<=12||e===105||e===205?"trace":"other"}function it(e){let t=N(e,"RevC",1);if(!t)return;let n=C(t.payload);return t.payload.byteLength>=2?n.getInt16(0,false)!==0:t.payload.some(r=>r!==0)}function ot(e){let t=K(e);if(!X(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 at(e){return z(e,2)??z(e,1)}function z(e,t){let n=N(e,"PBAS",t);if(n)return U(n.payload.subarray(0,n.elementCount)).replace(/\0+$/g,"")}function st(e){return v(e,2)??v(e,1)}function v(e,t){let n=N(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 ut(e){return P(e,2)??P(e,1)}function P(e,t){let n=N(e,"PLOC",t);if(!n)return;if(n.elementSize!==2)throw new Error(`PLOC${t}: expected elementSize=2, got ${n.elementSize}`);let r=C(n.payload),i=new Array(n.elementCount);for(let o=0;o<n.elementCount;o++)i[o]=r.getUint16(o*2,false);return i}function ct(e){let t=N(e,"SPAC",1);if(!t||t.elementSize!==4||t.payload.byteLength<4)return;let n=C(t.payload).getFloat32(0,false);return Number.isFinite(n)&&n>0?n:void 0}function gt(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(!B(e))throw new Error("cropAbif: no DATA9..12 block to crop \u2014 the range has nothing to apply to");let o=Math.min(G(e,9),G(e,10),G(e,11),G(e,12));if(i>o)throw new Error(`cropAbif: range end ${i} exceeds the processed trace length ${o}`);let a=n.rawTrace??"omit",s=[];for(let c of e.entries)c.tagName==="DATA"&&c.tagNumber>=9&&c.tagNumber<=12?s.push(xe(c,r,i)):c.tagName==="DATA"&&c.tagNumber>=1&&c.tagNumber<=8?a==="full"&&s.push({...c}):c.tagName==="PBAS"||c.tagName==="PCON"||c.tagName==="PLOC"||s.push({...c});for(let c of Ne(e))s.push(...Ce(e,c,r,i));return {version:e.version,tdir:e.tdir,entries:s,macBinaryOffset:0,macBinaryHeader:void 0,headerReserved:e.headerReserved,unreferencedRanges:[]}}function G(e,t){return N(e,"DATA",t)?.elementCount??0}function xe(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 Ne(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 Ce(e,t,n,r){let i=z(e,t);if(i===void 0)return [];let o=P(e,t);if(o===void 0)throw new Error(`cropAbif: PBAS${t} has no PLOC${t} to crop by`);if(o.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PLOC${t} length mismatch (${i.length} vs ${o.length})`);let a=v(e,t);if(a!==void 0&&a.length!==i.length)throw new Error(`cropAbif: PBAS${t}/PCON${t} length mismatch`);let s=[];for(let u=0;u<o.length;u++)o[u]>=n&&o[u]<r&&s.push(u);let c=s.map(u=>i[u]).join(""),m=s.map(u=>o[u]-n),d=[{tagName:"PBAS",tagNumber:t,elementType:2,elementSize:1,elementCount:c.length,payload:$(c),dataHandle:0},{tagName:"PLOC",tagNumber:t,elementType:4,elementSize:2,elementCount:m.length,payload:we(m),dataHandle:0}];if(a!==void 0){let u=s.map(p=>a[p]);d.push({tagName:"PCON",tagNumber:t,elementType:2,elementSize:1,elementCount:u.length,payload:Uint8Array.from(u),dataHandle:0});}return d}function we(e){let t=new Uint8Array(e.length*2),n=C(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 J(e){return Re[e]??(e>=1024?`user${e}`:`type${e}`)}function Fe(e,t=10){return e.length<=t?`[${e.join(", ")}]`:`[${e.slice(0,t).join(", ")}, \u2026 +${e.length-t}] (n=${e.length})`}function Te(e,t=80){return e.length>t?e.slice(0,t)+"\u2026":e}function se(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 Z(e){if(e.kind==="numbers")return e.value;if(e.kind==="number")return [e.value]}function q(e,t,n,r){let i=Math.max(0,Math.min(t,Math.floor(e/n))),o=[];for(let a=0;a<i;a++)o.push(r(a*n));return o.length===1?{kind:"number",value:o[0]}:{kind:"numbers",value:o}}function ue(e,t,n){let r=C(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 q(n.byteLength,t,2,i=>r.getUint16(i,false));case 4:return q(n.byteLength,t,2,i=>r.getInt16(i,false));case 5:return q(n.byteLength,t,4,i=>r.getInt32(i,false));case 7:return q(n.byteLength,t,4,i=>r.getFloat32(i,false));case 8:return q(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),o=r.getUint8(2),a=r.getUint8(3);return {kind:"date",value:{year:i,month:o,day:a}}}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 o=0;o<Math.min(t,n.byteLength);o++)i.push(r.getUint8(o)!==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(T(n,1,Math.min(i,Math.max(0,t-1))))}}default:return {kind:"unknown",value:n}}}function Ee(e,t){switch(e.kind){case "number":return String(e.value);case "numbers":return Fe(e.value);case "string":return Te(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 `${J(t)} ${se(e.value)}`;case "unknown":return `${J(t)} ${se(e.value)}`}}function yt(e,t=""){let n=e instanceof Uint8Array?e:new Uint8Array(e),r=ae(n),i=r.entries.map(f=>{let g=f.tagName==="PCON"&&f.elementSize===1?ue(1,f.elementCount,f.payload):ue(f.elementType,f.elementCount,f.payload);return {tag:f.tagName,tagNumber:f.tagNumber,elementType:f.elementType,elementTypeName:J(f.elementType),elementSize:f.elementSize,elementCount:f.elementCount,rawElementCount:f.raw?.elementCount??f.elementCount,dataSize:f.raw?.dataSize??f.elementCount*f.elementSize,dataOffset:f.raw?.dataOffset??-1,inline:f.raw?.inline??f.elementCount*f.elementSize<=4,decoded:g,preview:Ee(g,f.elementType)}}),o=K(r);X(o)||(o="GATC");let a={},s={A:[],C:[],G:[],T:[]},c={A:[],C:[],G:[],T:[]},m={comments:[]},d={},u={},p={},l=f=>o[f];for(let f=0;f<r.entries.length;f++){let g=r.entries[f],A=i[f].decoded;if(g.tagName==="DATA"){let b=Z(A);b&&(a[g.tagNumber]=b,g.tagNumber>=1&&g.tagNumber<=4?s[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)):Z(A);b&&(u[g.tagNumber]=b);}else if(g.tagName==="PLOC"){let b=Z(A);b&&(p[g.tagNumber]=b.map(Y=>Y<0?Y+65536:Y));}else if(g.tagName==="SPAC")if(g.elementSize===4&&g.payload.byteLength>=4){let b=C(g.payload).getFloat32(0,false);Number.isFinite(b)&&b>0&&(m.samplingRate=b);}else A.kind==="number"&&(m.samplingRate=A.value);else if(g.tagName==="SMPL"&&A.kind==="string")m.sampleName=A.value;else if(g.tagName==="LANE"&&A.kind==="number")m.laneNumber=A.value;else if(g.tagName==="TUBE"&&A.kind==="string")m.tube=A.value;else if(g.tagName==="MCHN"&&A.kind==="string")m.machineName=A.value;else if(g.tagName==="MODL"&&A.kind==="string")m.machineModel=A.value;else if(g.tagName==="RUND"&&A.kind==="date"){let b=A.value;m.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;m.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"?m.comments.push(A.value):g.tagName==="RevC"&&g.tagNumber===1&&(A.kind==="number"?m.reverseComplemented=A.value!==0:A.kind==="numbers"&&(m.reverseComplemented=A.value.some(b=>b!==0)));}let h=Object.keys(d).map(Number).sort((f,g)=>f-g).map(f=>({version:f,role:f===1?"edited":f===2?"called":"unknown",sequence:d[f],confidences:u[f]??[],positions:p[f]??[]})),y,S=2 in d?2:1 in d?1:Object.keys(d).map(Number)[0];if(S!==void 0&&d[S]!==void 0){let f=d[S].toUpperCase(),g=u[S]??[];g.length!==f.length&&(g=Object.keys(u).map(Number).map(b=>u[b]).find(b=>b.length===f.length)??[]);let A=p[S]??[];A.length!==f.length&&(A=Object.keys(p).map(Number).map(b=>p[b]).find(b=>b.length===f.length)??[]),y={sequence:f,confidences:g,positions:A,pbasVersion:S};}if(!Number.isFinite(m.samplingRate)||(m.samplingRate??0)<=0){let f=y?.positions,g=Math.max(c.A.length,c.C.length,c.G.length,c.T.length);f&&f.length>1?m.samplingRate=(f[f.length-1]-f[0])/(f.length-1):y&&y.sequence.length>0&&g>0&&(m.samplingRate=g/y.sequence.length);}let w={baseOrder:o,dataChannels:a,data1To4:s,data9To12:c};return {fileName:t,fileSize:n.byteLength,abifVersion:r.version,macBinaryOffset:r.macBinaryOffset,dirEntryCount:r.entries.length,metadata:m,chromatogram:w,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 xt(e){return Math.max(e.A.length,e.C.length,e.G.length,e.T.length)}function Ft(e,t){I(e,"PBAS",2,$(t),{elementType:2,elementSize:1,elementCount:t.length});}function Tt(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])));I(e,"PCON",2,n,{elementType:2,elementSize:1,elementCount:t.length});}function Et(e,t){let n=new Uint8Array(t.length*2),r=C(n);for(let i=0;i<t.length;i++)r.setUint16(i*2,Math.max(0,Math.min(65535,t[i])),false);I(e,"PLOC",2,n,{elementType:4,elementSize:2,elementCount:t.length});}function Lt(e,t,n){let r=new Uint8Array(4);C(r).setFloat32(0,t,false),I(e,"SPAC",1,r,{elementType:7,elementSize:4,elementCount:1});let i=$(n),o=Math.min(255,i.length),a=new Uint8Array(1+o);a[0]=o,a.set(i.subarray(0,o),1),I(e,"SPAC",2,a,{elementType:18,elementSize:1,elementCount:1+o});let s=new Uint8Array(4);C(s).setFloat32(0,t,false),I(e,"SPAC",3,s,{elementType:7,elementSize:4,elementCount:1});}function Ut(e){return e.length<2?0:(e[e.length-1]-e[0])/(e.length-1)}function $t(e){if(!B(e))for(let t=1;t<=4;t++){let n=N(e,"DATA",t);if(!n)continue;let r=8+t;N(e,"DATA",r)||Q(e.entries,{tagName:"DATA",tagNumber:r,elementType:n.elementType,elementSize:n.elementSize,elementCount:n.elementCount,payload:new Uint8Array(n.payload),dataHandle:0});}}function D(e){let t=typeof e=="string"?e:new TextDecoder().decode(e);return t.charCodeAt(0)===65279&&(t=t.slice(1)),t}function x(e){return D(e).split(/\r\n|\r|\n/)}function E(e){return e.replace(/\s+/g,"")}function L(e){return e.trim().length===0}function k(e){let t=e.trim(),n=t.search(/\s/);return n<0?t:t.slice(0,n)}var Le=128,_=8192;function Dt(e){if(V(e,0,"ABIF")||V(e,Le,"ABIF"))return "abif";if(V(e,0,".scf"))return "scf";if(V(e,0,"BAM"))return "bam";let t=ke(e);if(t===void 0)return "unknown";let n=$e(t),r=n==="clustal"&&!ce.test(t.trimStart());return (n==="unknown"||r)&&Ue(e)?"msf":n}function Ue(e){let t=e.length>_?e.subarray(0,_):e,n=D(t),r=/\bMSF:\s*\d+\b[^\n]*\bCheck:\s*\d/.test(n)&&/^\s*Name:\s+.*\bLen:\s*\d/im.test(n),i=/^\s*Name:\s+\S+\s+Len:\s*\d+\s+Check:\s*\d+\s+Weight:/im.test(n);return r||i}var ce=/^(CLUSTAL|MUSCLE|MAFFT|T-?COFFEE|PROBCONS|KALIGN|MVIEW|PROMALS)\b/i;function $e(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(ce.test(t)||/multiple (sequence )?alignment/i.test(t)&&!/^[>@#]/.test(t)&&!/genedoc/i.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(/^H\t(?:[^\t]*\t)*VN:Z:[12]\./.test(t))return "gfa";if(/^@(HD|SQ|RG|PG|CO)\t/.test(t))return "sam";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"}return Ie(t)?"sam":/^S\t[!-~]+\t/.test(t)?"gfa":"unknown"}function Ie(e){let t=e.split(" ");if(t.length<11)return false;let[,n,,r,i,o]=t;return /^\d+$/.test(n)&&/^\d+$/.test(r)&&/^\d+$/.test(i)&&/^(\*|(\d+[MIDNSHPX=])+)$/.test(o)}function ke(e){let t=e.length>_?e.subarray(0,_):e;for(let n of D(t).split(/\r\n|\r|\n/))if(n.trim().length>0)return n}function V(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 F(e,t,n){return t?{id:e,description:t,sequence:n}:{id:e,sequence:n}}function Bt(e){return le(e,"embl")}function Gt(e){return le(e,"swissprot")}function le(e,t){let n=x(e),r=[],i=false,o="",a="",s=[],c=[],m="header",d=()=>{i&&(r.push(F(Oe(t,o,a),s.join(" ").trim(),E(c.join("")))),i=false,o="",a="",s=[],c=[],m="header");};for(let u of n){if(u.startsWith("//")){d();continue}if(m==="sequence"){if(u.length===0||/^\s/.test(u)){c.push(u.replace(/[\s\d]/g,""));continue}m="header";}let p=u.slice(0,2);p==="ID"?(i&&d(),i=true,o=u.slice(2).trim()):p==="AC"?(a||(a=u.slice(2).split(";")[0].trim()),i=true):p==="DE"?(s.push(u.slice(2).trim()),i=true):p==="SQ"&&(m="sequence",i=true);}return d(),r}function Oe(e,t,n){if(e==="swissprot")return n||k(t);let r=t.split(";"),i=k(r[0]),o="";for(let a of r){let s=/^\s*SV\s+(\d+)/.exec(a);s&&(o=s[1]);}return (o?`${i}.${o}`:i)||n}var fe=93,ee=33,de=60,De=255;function ge(e){let t=x(e),n=[],r,i=[],o=()=>{r!==void 0&&n.push(Me(r,i.join("")));};for(let a of t)if(a[0]===">")o(),r=a.slice(1),i=[];else {if(L(a)||a[0]===";")continue;if(r===void 0)continue;i.push(a);}return o(),n}function Ht(e){let t=x(e),n=[],r=0;for(;r<t.length;){if(L(t[r])||t[r][0]!=="@"){r++;continue}let i=t[r].slice(1);r++;let o=[];for(;r<t.length&&t[r][0]!=="+"&&t[r][0]!=="@";)o.push(t[r]),r++;let a=E(o.join(""));if(r>=t.length||t[r][0]==="@"){n.push(me(i,a,""));continue}r++;let s="";for(;r<t.length&&s.length<a.length&&!(t[r][0]==="@"&&qe(t,r));)s+=E(t[r]),r++;n.push(me(i,a,s));}return n}function Wt(e,t){let n=t?.lineWidth??de;return re(e).map(r=>`${te(">",r.id,r.description)}
|
|
2
|
+
${ve(r.sequence,n)}`).join("")}function jt(e){return re(e).map(ze).join("")}function Yt(e,t){let n=t?.lineWidth??de;return re(e).map(r=>`${te(">",r.id,r.description)}
|
|
3
|
+
${Pe(r.qualities,n)}`).join("")}function Qt(e){return !!e&&e.length>0&&!e.every(t=>t===De)}function Me(e,t){let{id:n,description:r}=pe(e),i=E(t);return r===void 0?{id:n,sequence:i}:{id:n,description:r,sequence:i}}function me(e,t,n){let{id:r,description:i}=pe(e),o=new Array(t.length);for(let a=0;a<t.length;a++){let s=a<n.length?n.charCodeAt(a):ee;o[a]=ne(s-ee);}return i===void 0?{id:r,sequence:t,qualities:o}:{id:r,description:i,sequence:t,qualities:o}}function pe(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 qe(e,t){let n=t+1;for(;n<e.length&&e[n][0]!=="+"&&e[n][0]!=="@";)n++;return e[n]?.[0]==="+"}function ze(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 o=i.map(Be).join("");return `${te("@",t,n)}
|
|
4
4
|
${r}
|
|
5
5
|
+
|
|
6
6
|
${o}
|
|
7
|
-
`}function
|
|
8
|
-
`))throw new Error("FASTX header must not contain a newline");return e+r}function
|
|
7
|
+
`}function te(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 ve(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
|
|
11
|
-
`;return i}function
|
|
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=>F(t,"",E((this.blocks.get(t)??[]).join(""))))}},
|
|
13
|
-
export{R as ENTRY_SIZE,
|
|
10
|
+
`;return n}function Pe(e,t){if(e.length===0)return "";let n=e.map(ne),r=t<=0?n.length:t,i="";for(let o=0;o<n.length;o+=r)i+=`${n.slice(o,o+r).join(" ")}
|
|
11
|
+
`;return i}function ne(e){let t=Math.round(e);return t<0?0:t>fe?fe:t}function Be(e){return String.fromCharCode(ne(e)+ee)}function re(e){return Array.isArray(e)?e:[e]}var Ge=/^([A-Za-z][A-Za-z0-9_]*)/;function en(e){let t=x(e),n=[],r=false,i="",o="",a="",s=[],c=[],m="header",d=()=>{if(!r)return;let u=a||o||i;n.push(F(u,s.join(" ").trim(),E(c.join("")))),r=false,i=o=a="",s=[],c=[],m="header";};for(let u of t){if(u.startsWith("//")){d();continue}let p=u.length>0&&!/^\s/.test(u);if(m==="origin")if(p)m="header";else {c.push(u.replace(/[\s\d]/g,""));continue}if(m==="definition"&&!p){s.push(u.trim());continue}if(!p)continue;let l=(Ge.exec(u)?.[1]??"").toUpperCase(),h=u.slice(l.length).trim();l==="LOCUS"&&r&&d(),r=true,m="header",l==="LOCUS"?i=k(h):l==="ACCESSION"?o=k(h):l==="VERSION"?a=k(h):l==="DEFINITION"?(s=[h],m="definition"):l==="ORIGIN"&&(m="origin");}return d(),n}function Ve(e){let t=[];for(let n of x(e)){if(n.charCodeAt(0)!==83||n.charCodeAt(1)!==9)continue;let r=n.split(" "),i=r[1];if(!i)continue;let o=/^\d+$/.test(r[2]??"")&&r[3]!==void 0?r[3]:r[2];!o||o==="*"||t.push(F(i,"",o));}return t}function fn(e){let t=x(e),n=t.findIndex(r=>/^##FASTA\s*$/i.test(r.trim()));return n<0?[]:ge(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=>F(t,"",E((this.blocks.get(t)??[]).join(""))))}},_e=/^[A-Za-z0-9.*?~-]+$/;function hn(e){let t=new O,n=false;for(let r of x(e)){if(L(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&&_e.test(i[2])&&t.add(i[1],i[2]);}return t.toRecords()}function bn(e){let t=[],n=new O;for(let r of x(e)){if(r.startsWith("//")){t.push(...n.toRecords()),n=new O;continue}if(L(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 An(e){let t=x(e),n=0;for(;n<t.length&&L(t[n]);)n++;let r=(t[n]??"").trim().split(/\s+/),i=Number.parseInt(r[0]??"",10),o=Number.parseInt(r[1]??"",10);if(!Number.isFinite(i)||i<=0)return [];n++;let a=[],s=[];for(;n<t.length&&a.length<i;n++){if(L(t[n]))continue;let d=/^(\S+)\s+(.*)$/.exec(t[n]);d&&(a.push(d[1]),s.push(d[2].replace(/\s+/g,"")));}let c=a.length;if(c===0)return [];let m=Number.isFinite(o)&&o>0?o:Number.POSITIVE_INFINITY;for(let d=0;n<t.length;n++){if(L(t[n]))continue;let u=d%c;s[u].length<m&&(s[u]+=t[n].replace(/\s+/g,"")),d++;}return a.map((d,u)=>F(d,"",m===Number.POSITIVE_INFINITY?s[u]:s[u].slice(0,m)))}function yn(e){let t=D(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 o=i.trim();if(o===";")break;if(L(o))continue;let a=o.endsWith(";"),s=a?o.slice(0,-1).trim():o,c=/^("[^"]+"|'[^']+'|\S+)\s+(.+)$/.exec(s);if(c&&n.add(c[1].replace(/^['"]|['"]$/g,""),c[2].replace(/\s+/g,"")),a)break}return n.toRecords()}function Sn(e){let t=new O,n=false;for(let r of x(e)){if(!n){r.trimStart().startsWith("//")&&(n=true);continue}if(L(r))continue;let i=/^\s*(\S+)\s+(.+)$/.exec(r);if(!i)continue;let o=i[2].replace(/\s+/g,"");/\d/.test(o)||t.add(i[1],o);}return t.toRecords()}function Rn(e){let t=[],n,r="",i=[],o=false,a=()=>{if(n===void 0)return;let s=E(i.join(""));s.endsWith("*")&&(s=s.slice(0,-1)),t.push(F(n,r,s)),n=void 0,r="",i=[],o=false;};for(let s of x(e))if(s.startsWith(">")){a();let c=s.slice(1),m=c.indexOf(";");n=(m>=0?c.slice(m+1):c).trim(),o=true;}else {if(n===void 0)continue;o?(r=s.trim(),o=false):i.push(s);}return a(),t}function H(e){return (e&2304)!==0}function W(e,t){if(t&1){if(t&64)return `${e}/1`;if(t&128)return `${e}/2`}return e}function j(e,t,n){return n&4||!e||e==="*"?"unmapped":`${e}:${t} (${n&16?"-":"+"})`}var He="=ACMGRSVTWYHKDBN",he=32;function We(e){let t=[];if(!(e[0]===66&&e[1]===65&&e[2]===77&&e[3]===1))return t;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new TextDecoder,i=(o,a)=>r.decode(e.subarray(o,o+Math.max(0,a-1)));try{let o=e.length,a=4;if(a+4>o)return t;let s=n.getInt32(a,!0);if(a+=4,s<0||a+s+4>o)return t;a+=s;let c=n.getInt32(a,!0);if(a+=4,c<0)return t;let m=[];for(let d=0;d<c;d++){if(a+4>o)return t;let u=n.getInt32(a,!0);if(a+=4,u<=0||a+u+4>o)return t;m.push(i(a,u)),a+=u+4;}for(;a+4<=e.length;){let d=n.getInt32(a,!0);if(a+=4,d<he||a+d>e.length)break;let u=a+d,p=n.getInt32(a,!0),l=n.getInt32(a+4,!0),h=n.getUint8(a+8),y=n.getUint16(a+12,!0),S=n.getUint16(a+14,!0),w=n.getInt32(a+16,!0),f=a+he,g=i(f,h);f+=h+y*4;let A=w+1>>1;if(w>0&&f+A<=u&&!H(S)){let b=p>=0&&p<m.length?m[p]:"*";t.push(F(W(g,S),j(b,l+1,S),je(e,f,w)));}a=u;}}catch{}return t}function je(e,t,n){let r="";for(let i=0;i<n;i++){let o=e[t+(i>>1)];r+=He[i&1?o&15:o>>4];}return r}function Ye(e){let t=[];for(let n of x(e)){if(n.length===0||n.charCodeAt(0)===64)continue;let r=n.split(" ");if(r.length<11)continue;let i=r[9];if(!i||i==="*")continue;let o=be(r[1]);H(o)||t.push(F(W(r[0],o),j(r[2],be(r[3]),o),i));}return t}function be(e){let t=Number.parseInt(e,10);return Number.isFinite(t)?t:0}
|
|
13
|
+
export{R as ENTRY_SIZE,M as HEADER_SIZE,fe as MAX_PHRED,Ut as averagePeakSpacing,xt as channelMaxLength,gt as cropAbif,rt as dataChannelRole,Dt as detectFormat,$t as ensureRawDataChannels,Ze as findEntries,N as findEntry,Wt as formatFasta,jt as formatFastq,Yt as formatQual,ot as getChannelMap,st as getConfidences,v as getConfidencesForVersion,nt as getDataChannel,K as getFwo,ut as getPositions,P as getPositionsForVersion,it as getReverseComplemented,ct as getSamplingRate,at as getSequence,z as getSequenceForVersion,B as hasData9To12Block,St as hasSignals,Qt as hasUsableQuality,Q as insertEntrySorted,X as isFwoPermutation,F as makeSeqRecord,yt as parseAbif,We as parseBam,hn as parseClustal,Bt as parseEmbl,ge as parseFasta,Ht as parseFastq,en as parseGenbank,Ve as parseGfa,fn as parseGff,Sn as parseMsf,yn as parseNexus,An as parsePhylip,Rn as parsePir,Ye as parseSam,bn as parseStockholm,Gt as parseSwissprot,ae as readAbif,Lt as setAveragePeakSpacing,Tt as setConfidences,Et as setPositions,Ft as setSequence,Ae as tagNameFromInt32,I as upsertEntry,Xe as writeAbif};//# sourceMappingURL=index.mjs.map
|
|
14
14
|
//# sourceMappingURL=index.mjs.map
|