jbrowse-plugin-graphgenomeviewer 8.7.0 → 8.7.2

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.
Files changed (92) hide show
  1. package/dist/chunks/AddTrackWorkflow-FANMD3WB.js +2 -0
  2. package/dist/chunks/{AddTrackWorkflow-IOPTETLH.js.map → AddTrackWorkflow-FANMD3WB.js.map} +2 -2
  3. package/dist/chunks/{GbzBaseSyntenyAdapter-67NMRHWZ.js → GbzBaseSyntenyAdapter-SDYLJG5H.js} +2 -2
  4. package/dist/chunks/{GbzBaseSyntenyAdapter-67NMRHWZ.js.map → GbzBaseSyntenyAdapter-SDYLJG5H.js.map} +2 -2
  5. package/dist/chunks/{GraphGenomeView-RD2XGX6D.js → GraphGenomeView-HCN57HV4.js} +2 -2
  6. package/dist/chunks/{GraphTrackSettingsDialog-R3XOY32L.js → GraphTrackSettingsDialog-ZNZWUEN3.js} +2 -2
  7. package/dist/chunks/{HighlightColorDialog-AKPIC56I.js → HighlightColorDialog-3H2H2LPS.js} +2 -2
  8. package/dist/chunks/{LinearGraphDisplay-RRAXTQFC.js → LinearGraphDisplay-W5IT3HYI.js} +2 -2
  9. package/dist/chunks/{MinigraphBubbleAdapter-2YTXBZYS.js → MinigraphBubbleAdapter-TTGZ45BF.js} +2 -2
  10. package/dist/chunks/{RgfaTabixAdapter-RCGS6YVM.js → RgfaTabixAdapter-A274AVUU.js} +2 -2
  11. package/dist/chunks/{WalkFormsAdapter-3M5A4JL3.js → WalkFormsAdapter-7RD7ZAHG.js} +2 -2
  12. package/dist/chunks/WalkTabixSyntenyAdapter-CLC2CJJT.js +2 -0
  13. package/dist/chunks/{WalkTabixSyntenyAdapter-576RE5OE.js.map → WalkTabixSyntenyAdapter-CLC2CJJT.js.map} +2 -2
  14. package/dist/chunks/{chunk-CL4PYWKC.js → chunk-2FG67WIZ.js} +1 -1
  15. package/dist/chunks/{chunk-CL4PYWKC.js.map → chunk-2FG67WIZ.js.map} +1 -1
  16. package/dist/chunks/chunk-46O3IEW3.js +2 -0
  17. package/dist/chunks/{chunk-OPWSPSAE.js.map → chunk-46O3IEW3.js.map} +4 -4
  18. package/dist/chunks/{chunk-ULPW4VGT.js → chunk-5QJ2ANXK.js} +2 -2
  19. package/dist/chunks/chunk-5TT5TG4Q.js +2 -0
  20. package/dist/chunks/chunk-5TT5TG4Q.js.map +7 -0
  21. package/dist/chunks/{chunk-X2QGBINE.js → chunk-64OSFJLE.js} +1 -1
  22. package/dist/chunks/{chunk-X2QGBINE.js.map → chunk-64OSFJLE.js.map} +1 -1
  23. package/dist/chunks/chunk-7BKSSU2R.js +4 -0
  24. package/dist/chunks/chunk-7BKSSU2R.js.map +7 -0
  25. package/dist/chunks/{chunk-SVDQVLEU.js → chunk-7HJWQFKE.js} +2 -2
  26. package/dist/chunks/{chunk-DIGIM3XY.js → chunk-DQC5K7EW.js} +2 -2
  27. package/dist/chunks/{chunk-W5HHWDGZ.js → chunk-G6NFDDMN.js} +1 -1
  28. package/dist/chunks/{chunk-W5HHWDGZ.js.map → chunk-G6NFDDMN.js.map} +1 -1
  29. package/dist/chunks/{chunk-4XY7HUQR.js → chunk-HC2YPYTO.js} +2 -2
  30. package/dist/chunks/{chunk-4XY7HUQR.js.map → chunk-HC2YPYTO.js.map} +1 -1
  31. package/dist/chunks/{chunk-HRTRECXN.js → chunk-HTH7NAV4.js} +2 -2
  32. package/dist/chunks/chunk-KACKTX2U.js +2 -0
  33. package/dist/chunks/{chunk-Y7MQVQAS.js → chunk-OS52UJIX.js} +2 -2
  34. package/dist/chunks/{chunk-Y7MQVQAS.js.map → chunk-OS52UJIX.js.map} +1 -1
  35. package/dist/chunks/{chunk-UC2NHZ7E.js → chunk-S7DQGZX2.js} +1 -1
  36. package/dist/chunks/{chunk-UC2NHZ7E.js.map → chunk-S7DQGZX2.js.map} +1 -1
  37. package/dist/chunks/{chunk-4DQWDJG7.js → chunk-T3FHGWNW.js} +2 -2
  38. package/dist/chunks/{chunk-4DQWDJG7.js.map → chunk-T3FHGWNW.js.map} +2 -2
  39. package/dist/chunks/chunk-T7LVVBTT.js +2 -0
  40. package/dist/chunks/chunk-T7LVVBTT.js.map +7 -0
  41. package/dist/chunks/{chunk-E23AOQPE.js → chunk-VPZZ6XMM.js} +2 -2
  42. package/dist/chunks/{chunk-E23AOQPE.js.map → chunk-VPZZ6XMM.js.map} +2 -2
  43. package/dist/chunks/{chunk-XLVKVQJB.js → chunk-VQVQXMNM.js} +2 -2
  44. package/dist/chunks/{chunk-XLVKVQJB.js.map → chunk-VQVQXMNM.js.map} +2 -2
  45. package/dist/chunks/chunk-W4Y2JUP7.js +3 -0
  46. package/dist/chunks/chunk-W4Y2JUP7.js.map +7 -0
  47. package/dist/chunks/{chunk-ELC7POI6.js → chunk-WJHTNDTQ.js} +2 -2
  48. package/dist/chunks/{chunk-ELC7POI6.js.map → chunk-WJHTNDTQ.js.map} +4 -4
  49. package/dist/chunks/{chunk-VNWCN47G.js → chunk-YNMEZ4EZ.js} +2 -2
  50. package/dist/chunks/{renderSvg-GF64RZ6B.js → renderSvg-PEQY7XLR.js} +2 -2
  51. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js +4 -4
  52. package/dist/jbrowse-plugin-graphgenomeviewer.esm.js.map +4 -4
  53. package/package.json +2 -2
  54. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.test.tsx +7 -5
  55. package/src/GraphAddTrackWorkflow/AddTrackWorkflow.tsx +2 -2
  56. package/src/GraphAddTrackWorkflow/buildTrackConfig.ts +13 -6
  57. package/src/GraphTrack/GraphTrack.test.ts +68 -0
  58. package/src/GraphTrack/index.ts +8 -5
  59. package/src/RgfaTabixAdapter/index.ts +3 -2
  60. package/src/WalkTabixSyntenyAdapter/walkLanes.ts +1 -1
  61. package/src/graphTrackDefaults/graphTrackDefaults.test.ts +80 -3
  62. package/src/graphTrackDefaults/guessAdapter.ts +62 -0
  63. package/src/graphTrackDefaults/index.ts +16 -51
  64. package/src/panSNAliases/panSNAliases.test.ts +40 -6
  65. package/src/panSNAliases/trackAdapterConfig.ts +49 -10
  66. package/src/version.ts +1 -1
  67. package/dist/chunks/AddTrackWorkflow-IOPTETLH.js +0 -2
  68. package/dist/chunks/WalkTabixSyntenyAdapter-576RE5OE.js +0 -2
  69. package/dist/chunks/chunk-CGPYVMGQ.js +0 -2
  70. package/dist/chunks/chunk-CGPYVMGQ.js.map +0 -7
  71. package/dist/chunks/chunk-OPWSPSAE.js +0 -2
  72. package/dist/chunks/chunk-U6SNNNFV.js +0 -2
  73. package/dist/chunks/chunk-U6SNNNFV.js.map +0 -7
  74. package/dist/chunks/chunk-WE7XHNAH.js +0 -4
  75. package/dist/chunks/chunk-WE7XHNAH.js.map +0 -7
  76. package/dist/chunks/chunk-WO644UAC.js +0 -3
  77. package/dist/chunks/chunk-WO644UAC.js.map +0 -7
  78. package/dist/chunks/chunk-ZA5GPTUM.js +0 -2
  79. /package/dist/chunks/{GraphGenomeView-RD2XGX6D.js.map → GraphGenomeView-HCN57HV4.js.map} +0 -0
  80. /package/dist/chunks/{GraphTrackSettingsDialog-R3XOY32L.js.map → GraphTrackSettingsDialog-ZNZWUEN3.js.map} +0 -0
  81. /package/dist/chunks/{HighlightColorDialog-AKPIC56I.js.map → HighlightColorDialog-3H2H2LPS.js.map} +0 -0
  82. /package/dist/chunks/{LinearGraphDisplay-RRAXTQFC.js.map → LinearGraphDisplay-W5IT3HYI.js.map} +0 -0
  83. /package/dist/chunks/{MinigraphBubbleAdapter-2YTXBZYS.js.map → MinigraphBubbleAdapter-TTGZ45BF.js.map} +0 -0
  84. /package/dist/chunks/{RgfaTabixAdapter-RCGS6YVM.js.map → RgfaTabixAdapter-A274AVUU.js.map} +0 -0
  85. /package/dist/chunks/{WalkFormsAdapter-3M5A4JL3.js.map → WalkFormsAdapter-7RD7ZAHG.js.map} +0 -0
  86. /package/dist/chunks/{chunk-ULPW4VGT.js.map → chunk-5QJ2ANXK.js.map} +0 -0
  87. /package/dist/chunks/{chunk-SVDQVLEU.js.map → chunk-7HJWQFKE.js.map} +0 -0
  88. /package/dist/chunks/{chunk-DIGIM3XY.js.map → chunk-DQC5K7EW.js.map} +0 -0
  89. /package/dist/chunks/{chunk-HRTRECXN.js.map → chunk-HTH7NAV4.js.map} +0 -0
  90. /package/dist/chunks/{chunk-ZA5GPTUM.js.map → chunk-KACKTX2U.js.map} +0 -0
  91. /package/dist/chunks/{chunk-VNWCN47G.js.map → chunk-YNMEZ4EZ.js.map} +0 -0
  92. /package/dist/chunks/{renderSvg-GF64RZ6B.js.map → renderSvg-PEQY7XLR.js.map} +0 -0
@@ -1,5 +1,6 @@
1
1
  import { readConfObject } from '@jbrowse/core/configuration'
2
2
  import { getSession } from '@jbrowse/core/util'
3
+ import { getConfAssemblyNamesOrNone } from '@jbrowse/core/util/tracks'
3
4
 
4
5
  import { trackAdapterSnapshot, walkIndexed } from '../graphTrackConfig'
5
6
 
@@ -19,12 +20,31 @@ export interface AssemblyAliases {
19
20
  // parts name a contig, not a haplotype.
20
21
  const PANSN_HAPLOTYPE = /^[^#]+#\d+$/
21
22
 
22
- // The config's `assemblyNameToPanSN` with each assembly's PanSN alias added
23
- // beneath it: an entry wins for its assembly and for its prefix. Unchanged when
24
- // no alias qualifies, so such a track keeps its adapter cache key.
23
+ // `HG00621.1`, as HPRC and the hosted configs name a haplotype's assembly, and
24
+ // as a MAF names its rows
25
+ const DOTTED_HAPLOTYPE = /^([^#]+)\.(\d+)$/
26
+
27
+ function aliasHaplotype({ aliases }: AssemblyAliases) {
28
+ return aliases.find(a => PANSN_HAPLOTYPE.test(a))
29
+ }
30
+
31
+ function dottedHaplotype({ name }: AssemblyAliases) {
32
+ const dotted = DOTTED_HAPLOTYPE.exec(name)
33
+ return dotted ? `${dotted[1]}#${dotted[2]}` : undefined
34
+ }
35
+
36
+ // The config's `assemblyNameToPanSN` with each assembly's PanSN haplotype
37
+ // added beneath it, so a lane on that haplotype draws on the assembly and its
38
+ // genes. An entry wins for its assembly and for its prefix, then a
39
+ // `sample#haplotype` alias, then the assembly's own name read as
40
+ // `sample.haplotype`. The anchor's name is never read so, since an accession
41
+ // such as GCA_000001405.15 has that shape and the anchor is the walk file's
42
+ // reference, not one of its lanes. Unchanged when no assembly qualifies, so
43
+ // such a track keeps its adapter cache key.
25
44
  export function withPanSNAliases(
26
45
  adapterConfig: Record<string, unknown>,
27
46
  assemblies: AssemblyAliases[],
47
+ anchor?: string,
28
48
  ) {
29
49
  const explicit = (adapterConfig.assemblyNameToPanSN ?? {}) as Record<
30
50
  string,
@@ -32,10 +52,22 @@ export function withPanSNAliases(
32
52
  >
33
53
  const claimed = new Set(Object.values(explicit))
34
54
  const fromAliases: Record<string, string> = {}
35
- for (const { name, aliases } of assemblies) {
36
- const prefix = aliases.find(alias => PANSN_HAPLOTYPE.test(alias))
37
- if (prefix !== undefined && !claimed.has(prefix)) {
38
- fromAliases[name] = prefix
55
+ const lanes = assemblies.filter(a => a.name !== anchor)
56
+ for (const [read, from] of [
57
+ [aliasHaplotype, assemblies],
58
+ [dottedHaplotype, lanes],
59
+ ] as const) {
60
+ for (const assembly of from) {
61
+ const prefix = read(assembly)
62
+ if (
63
+ prefix !== undefined &&
64
+ !claimed.has(prefix) &&
65
+ !(assembly.name in explicit) &&
66
+ !(assembly.name in fromAliases)
67
+ ) {
68
+ fromAliases[assembly.name] = prefix
69
+ claimed.add(prefix)
70
+ }
39
71
  }
40
72
  }
41
73
  return Object.keys(fromAliases).length === 0
@@ -46,6 +78,13 @@ export function withPanSNAliases(
46
78
  }
47
79
  }
48
80
 
81
+ function canonicalName(assemblies: AssemblyAliases[], name: string) {
82
+ return (
83
+ assemblies.find(a => a.name === name || a.aliases.includes(name))?.name ??
84
+ name
85
+ )
86
+ }
87
+
49
88
  // The config's `assemblyNames` and `assemblyNameToPanSN` keys by each
50
89
  // assembly's canonical name, the name a window arrives with. An alias renamed
51
90
  // here still resolves to itself as a PanSN prefix. Unchanged when every name is
@@ -54,9 +93,7 @@ export function withCanonicalAssemblyNames(
54
93
  adapterConfig: Record<string, unknown>,
55
94
  assemblies: AssemblyAliases[],
56
95
  ) {
57
- const canonical = (name: string) =>
58
- assemblies.find(a => a.name === name || a.aliases.includes(name))?.name ??
59
- name
96
+ const canonical = (name: string) => canonicalName(assemblies, name)
60
97
  const names = (adapterConfig.assemblyNames ?? []) as string[]
61
98
  const explicit = (adapterConfig.assemblyNameToPanSN ?? {}) as Record<
62
99
  string,
@@ -113,8 +150,10 @@ export function trackAdapterConfig(
113
150
  aliases: readConfObject(conf, 'aliases'),
114
151
  }),
115
152
  )
153
+ const [anchor] = getConfAssemblyNamesOrNone(track)
116
154
  return withPanSNAliases(
117
155
  withCanonicalAssemblyNames(adapterConfig, assemblies),
118
156
  assemblies,
157
+ anchor === undefined ? undefined : canonicalName(assemblies, anchor),
119
158
  )
120
159
  }
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '8.7.0'
1
+ export const version = '8.7.2'
@@ -1,2 +0,0 @@
1
- import{b as J,c as D,d as V,e as X,f as q,h as K}from"./chunk-CGPYVMGQ.js";import"./chunk-TMM73K4C.js";import"./chunk-6VNDP3UB.js";import"./chunk-D6TY2QEG.js";import{d as M,e as P}from"./chunk-FLKXKTS2.js";import{b as w,h as v,j as A,m as x}from"./chunk-TC265JAP.js";import{i as o}from"./chunk-J2PN6CG3.js";import{A as O,B as j,C as z,F as h,a as H,f as E,g as c,o as B,s as N,t as W,u as _}from"./chunk-WE7DQVXF.js";import{b as a,c as f,d as I}from"./chunk-DUU6T2I5.js";var n=JBrowseExports["@jbrowse/core/util/tss-react"],oe=s=>n!=null&&s in Object(n)?n[s]:Object.assign(function(){throw new Error("This JBrowse does not provide '"+s+"' from '@jbrowse/core/util/tss-react' to plugins: GraphGenomeView was built for a different JBrowse version, so update the plugin or JBrowse")},{jbrowseHostMissing:s});var Q=oe("makeStyles"),ie=n&&n.__esModule?n.default:n;var se=Q()(s=>({paper:{margin:s.spacing(),padding:s.spacing()},field:{marginTop:s.spacing(2)},submit:{marginTop:25,marginBottom:100,display:"block"}})),re=["RgfaTabixAdapter","RgfaTabixWalks","GbzBaseSyntenyAdapter","MinigraphBubbleAdapter"],ne=I(function({model:t}){let{classes:i}=se(),y=A(t),d=M(t),[r,U]=o("RgfaTabixAdapter"),[l,Y]=o(),[k,G]=o(),[T,Z]=o(),m=r==="GbzBaseSyntenyAdapter",u=r==="RgfaTabixWalks",[C,$]=o(""),[R,ee]=o(""),[b,ae]=o("Pangenome graph"),[S,g]=o(),[F,L]=o(!1);async function te(){if(!l||!t.assembly)return;g(void 0),L(!0);let e=r==="RgfaTabixAdapter"?await J(l,v(t).pluginManager):void 0;if(L(!1),!(!P(t)||!t.assembly))try{let p=b.trim();w({model:t,session:y,conf:K({choice:r,loc:l,indexLoc:k,readsLoc:m?T:void 0,manifest:e,assembly:t.assembly,sample:C,haplotypes:u?q(R):void 0,trackId:x({name:p}),name:p})})}catch(p){g(p)}}return f(O,{className:i.paper,children:[S?a(E,{error:S}):null,f(N,{children:[a(_,{children:"File type"}),a(z,{value:r,onChange:e=>{U(e.target.value),G(void 0),g(void 0)},children:re.map(e=>a(W,{value:e,control:a(j,{}),label:D[e]},e))})]}),a(c,{location:l,name:V[r],rootModel:d,setLocation:Y}),a(c,{location:k,name:X[r],rootModel:d,setLocation:G}),m?a(c,{location:T,name:"Path to reads aligned to the graph as GAF (optional; a .gz is read by the .tbi beside it)",rootModel:d,setLocation:Z}):null,a(h,{className:i.field,value:C,onChange:e=>{$(e.target.value)},label:"Sample name in the graph",slotProps:{htmlInput:{"data-testid":"graph-sample-input"}},helperText:m?"Optional. The graph's sample for this assembly, e.g. GRCh38 where the assembly is hg38; leave blank when they share a name or the graph has one reference sample":u?"Optional. The PanSN sample this assembly is in the graph; blank takes it from the file name, GRCh38 in chr22.GRCh38.walks.bed.gz":"Optional. The PanSN prefix the graph gives this assembly, e.g. GRCh38 for HPRC's GRCh38#0#chr1; leave blank when the graph's stable names are bare",placeholder:"GRCh38",fullWidth:!0}),u?a(h,{className:i.field,value:R,onChange:e=>{ee(e.target.value)},label:"Haplotypes",slotProps:{htmlInput:{"data-testid":"graph-haplotypes-input"}},helperText:"Optional. The haplotypes the track cuts for until you pick others in its menu, as PanSN names separated by commas (HG002#1, or HG002 for both); blank is every haplotype in the file",placeholder:"HG002, HG00733",fullWidth:!0}):null,a(h,{className:i.field,value:b,label:"Track name",slotProps:{htmlInput:{"data-testid":"graph-track-name-input"}},onChange:e=>{ae(e.target.value)}}),a(H,{session:y,helperText:"Select assembly to add track to",selected:t.assembly,onChange:e=>{t.setAssembly(e)},fullWidth:!0}),a(B,{variant:"contained",className:i.submit,disabled:!l||!b.trim()||!t.assembly||F,onClick:()=>{te()},children:F?"Reading graph.json\u2026":"Submit"})]})}),ye=ne;export{ye as default};
2
- //# sourceMappingURL=AddTrackWorkflow-IOPTETLH.js.map
@@ -1,2 +0,0 @@
1
- import{a as ee}from"./chunk-HRTRECXN.js";import{a as V,b as Z,d as q,e as J,f as B,g as Q,h as Y}from"./chunk-SVDQVLEU.js";import"./chunk-ZA5GPTUM.js";import{a as K}from"./chunk-V55TK2NP.js";import{p as L,q as H,r as U}from"./chunk-M2D7NUOY.js";import"./chunk-YBLNN5FU.js";import"./chunk-U6SNNNFV.js";import"./chunk-ELC7POI6.js";import{E as z,F as G,i as X}from"./chunk-VNWCN47G.js";import"./chunk-YBLNN5FU.js";import"./chunk-QUDJ7AM3.js";import{a as E,c as T,d as F,g as x,h as A,i as O}from"./chunk-CL4PYWKC.js";import"./chunk-AGUEPVOR.js";import"./chunk-TMM73K4C.js";import"./chunk-D6TY2QEG.js";import"./chunk-FLKXKTS2.js";import{o as M}from"./chunk-TC265JAP.js";var ce=50;function fe(r){let o=[];for(let e=0;e<r.length;e++){let[t,a]=r[e],[s,n]=r[e+1]??[];a===n&&a<=ce&&(t==="I"&&s==="D"||t==="D"&&s==="I")?(o.push(["X",a]),e++):o.push([t,a])}return o}function R(r){return Array.from(r.ids,(o,e)=>2*o+r.rev[e])}function P(r,o){let e=r.get(o);return e===void 0?0:e.end-e.start}function te(r){let o=new Map,e=s=>{let n=P(r,s),i=o.get(n);return i===void 0&&(i="N".repeat(n),o.set(n,i)),i},t=new Map,a=s=>{let n=t.get(s);return n===void 0&&(n=R(s),t.set(s,n)),n};return(s,n)=>H({query:a(s),target:a(n),sequenceOf:e,bases:!1})}var _=100;function I(r,o,e){let t=r.at(-1);e>0&&(t?.[0]===o?t[1]+=e:r.push([o,e]))}function ae(r){let o=t=>P(r,t>>1),e=t=>{let a=new Float64Array(t.length+1);return t.forEach((s,n)=>{a[n+1]=a[n]+o(s)}),a};return(t,a)=>{let s=R(a),n=R(t),[i,c]=L(n,s,o),[g,d]=L(n.map(y=>y^1).reverse(),s,o),l=d>c,f=l?g:i,b=Math.max(c,d);if(b<_)return[];let p=e(s),h=e(n),u=y=>l?n.length-1-f[y][0]:f[y][0],k=[];f.forEach(([,y],w)=>{if(w>0){let[v,m]=[u(w-1),u(w)].sort((W,C)=>W-C);I(k,"I",h[m]-h[v+1]),I(k,"D",p[y]-p[f[w-1][1]+1])}I(k,"=",o(s[y]))});let[N,S]=[u(0),u(f.length-1)].sort((y,w)=>y-w);return[{queryStart:h[N],queryEnd:h[S+1],targetStart:p[f[0][1]],targetEnd:p[f.at(-1)[1]+1],strand:l?"-":"+",edits:k,sharedBases:b}]}}function pe(r){let o=new Map,e=new Set;r.ids.forEach((t,a)=>{o.has(t)?e.add(t):o.set(t,r.rev[a])});for(let t of e)o.delete(t);return o}function ne(r){let o=new Map,e=t=>{let a=o.get(t);return a===void 0&&(a=pe(t),o.set(t,a)),a};return(t,a)=>{let s=e(a),n=0,i=0;for(let[c,g]of e(t)){let d=s.get(c);d===g?n+=P(r,c):d!==void 0&&(i+=P(r,c))}return{same:n,opposite:i}}}function se(r){let o=ae(r),e=te(r),t=ne(r);return(a,s)=>{let{same:n,opposite:i}=t(a,s);return n>=_&&i>=_?e(a,s):o(a,s)}}var ue=1e4;function re(r){let o=ae(r),e=te(r),t=ne(r);return(a,s)=>{let n=o(a,s),i=n[0]?.strand,{same:c,opposite:g}=t(a,s);return i===void 0||Math.min(c,g)<ue?n:[...n,...e(a,s).filter(d=>d.strand!==i)]}}function $({chain:r,target:o,query:e,assemblyName:t,refName:a,mateAssemblyName:s}){let n=fe(r.edits);return Y({target:{name:o.name,assemblyName:t,refName:a,start:o.hapStart+r.targetStart,end:o.hapStart+r.targetEnd},query:{name:e.name,assemblyName:s,refName:F(e.name),start:e.hapStart+r.queryStart,end:e.hapStart+r.queryEnd},strand:r.strand,cigar:U(n),matches:n.reduce((i,[c,g])=>i+(c==="="?g:0),0),columns:n.reduce((i,[,c])=>i+c,0)})}function ie(r,o,e,t,a){let s=a==="leave",n=i=>i.kind==="elsewhere"&&(s?i.chunk.start>=r.refStart:i.chunk.start<r.refStart);for(let i of e){let{name:c,fragStart:g,hapStart:d,ids:l,rev:f,before:b,after:p}=i;if(c===r.name&&g===r.fragStart){let h=d;for(let u=0;u<l.length;u++){let k=t.get(l[u]),N=k===void 0?0:k.end-k.start;if(k?.rank===0&&k.refName===o&&(s?k.end===r.refStart:k.start===r.refEnd)){let S=n(p)!==n(b)?n(p):u>0!=u<l.length-1?u>0:s!==(f[u]===1);return{skip:r,at:S?h+N:h,strand:S===s?"+":"-"}}h+=N}}}}function oe({crossing:r,refName:o,assemblyName:e,mateAssemblyName:t}){let{skip:a,at:s,strand:n}=r;return le({id:`${a.name}:${a.fragStart}:${a.piece}:skip`,assemblyName:e,refName:o,start:a.refStart,end:a.refEnd,reverse:n==="-",mate:{refName:F(a.name),start:s,end:s,assemblyName:t}})}function me({fragment:r,crossing:o,refName:e,assemblyName:t,mateAssemblyName:a}){let{name:s,fragStart:n,hapStart:i,hapEnd:c}=r;return le({id:`${s}:${n}:${i}:crossing`,assemblyName:t,refName:e,start:o.refStart,end:o.refEnd,reverse:o.reverse,mate:{refName:F(s),start:i,end:c,assemblyName:a}})}function le({id:r,assemblyName:o,refName:e,start:t,end:a,reverse:s,mate:n}){return new V({uniqueId:r,assemblyName:o,refName:e,start:t,end:a,type:"deletion",strand:s?-1:1,syntenyId:r,spansWindow:!0,mate:n})}var j=({name:r})=>T(r)??r,D=class extends Z{constructor(){super(...arguments);this.walks=new ee(z(this,["walksLocation"],["walksIndex"]),this);this.refNames=new G(this.walks.file,this)}get anchor(){let e=this.getConf("assemblyNames")[0];if(e===void 0)throw new Error("WalkTabixSyntenyAdapter needs assemblyNames: its first entry is the assembly the reference sample is loaded as");return e}async getHaplotypeNames(e={}){return this.walks.haplotypeNames(e)}async getHeader(e={}){let{haplotypes:t}=await this.walks.reader.header(e),{anchor:a}=this,s=A(this,a),n=O(this);return{hasCoarseTier:!1,anchorAssemblyName:a,lanes:t.filter(i=>i!==s&&E(i)!==s).map(i=>({name:B(n,i),label:i,group:E(i)}))}}async getRefNames(e={}){let{assemblyName:t}=e;return t===void 0||t===this.anchor?this.refNames.assemblyRefNames({...e,assemblyName:this.anchor}):[]}async getSubgraph(e,t={}){let a=await this.refNames.resolveForCut(e,{signal:t.signal});return this.walks.subgraph(a,e,t)}async laneWalks(e,t,a,s,n){let i=X(a,e);return M(n,s.statusCallback,()=>this.walks.reader.cut(e,t,{...this.walks.budgets(),signal:s.signal,keep:i,expand:i,links:!1}).catch(c=>{throw Q(c,t.end-t.start)}))}async skipCrossings(e,t,a){let s=[],n=t;for(let i of["leave","rejoin"]){let c=await this.sideCrossings(e,n,i,a);for(let d of c)s.push(d);let g=new Set(c.map(d=>d.skip));n=n.filter(d=>!g.has(d))}return s}async sideCrossings(e,t,a,s){let{signal:n}=s,{chunk:i}=await this.walks.reader.header({signal:n}),c=l=>a==="leave"?l.refStart-1:l.refEnd,g=new Map;for(let l of t){let f=c(l),b=Math.floor(f/i),p=g.get(b);p?(p.group.push(l),p.start=Math.min(p.start,f),p.end=Math.max(p.end,f+1)):g.set(b,{group:[l],start:f,end:f+1})}return(await Promise.all([...g.values()].map(async({group:l,start:f,end:b})=>{let p=new Set(l.map(u=>u.name)),h=u=>p.has(u);try{let{graph:u,fragments:k}=await this.walks.reader.cut(e,{start:f,end:b},{...this.walks.budgets(),signal:n,keep:h,expand:h,context:0,contained:!0,links:!1});return l.map(N=>ie(N,e,k,u.nodes,a))}catch(u){if(n?.aborted)throw u;return[]}}))).flat().filter(l=>l!==void 0)}async anchorFeatures(e,t,a){let s=a.haplotypes?.length?a.haplotypes.map(m=>A(this,m)):void 0,n=A(this,a.targetAssemblyName),i=n===void 0?s:s===void 0||s.some(m=>x(n,m)||x(m,n))?[n]:[];if(i?.length===0)return[];let{start:c,end:g}=t,d=`Reading walks ${t.refName}:${c.toLocaleString()}-${g.toLocaleString()}`,{graph:l,fragments:f,skips:b}=await this.laneWalks(e,t,i,a,d),p=({name:m})=>i===void 0?0:i.findIndex(W=>x(m,W)),h=new Set(f.map(j)),u=await M(d,a.statusCallback,()=>this.skipCrossings(e,b.filter(m=>p(m)>=0&&!h.has(j(m))&&m.refStart<=c&&m.refEnd>=g),a)),k=re(l.nodes),N=O(this),S=m=>B(N,j(m)),y=f.filter(m=>m.name===e),w=f.filter(m=>m.name!==e&&p(m)>=0).map(m=>({rank:p(m),features:m.crossing?[me({fragment:m,crossing:m.crossing,assemblyName:t.assemblyName,refName:t.refName,mateAssemblyName:S(m)})]:y.flatMap(W=>k(m,W).map(C=>$({chain:C,target:W,query:m,assemblyName:t.assemblyName,refName:t.refName,mateAssemblyName:S(m)})))})),v=u.map(m=>({rank:p(m.skip),features:[oe({crossing:m,refName:t.refName,assemblyName:t.assemblyName,mateAssemblyName:S(m.skip)})]}));return[...w,...v].sort((m,W)=>m.rank-W.rank).flatMap(m=>m.features)}async pairFeatures(e,t,a,s){let n=a.map(l=>({pair:l,featurePrefix:A(this,l.queryAssemblyName),matePrefix:A(this,l.targetAssemblyName)})),{graph:i,fragments:c}=await this.laneWalks(e,t,n.flatMap(l=>[l.featurePrefix,l.matePrefix]),s,J(a)),g=se(i.nodes),d=l=>c.filter(f=>x(f.name,l));return n.flatMap(({pair:l,featurePrefix:f,matePrefix:b})=>d(f).flatMap(p=>d(b).flatMap(h=>g(h,p).map(u=>$({chain:u,target:p,query:h,assemblyName:l.queryAssemblyName,refName:F(p.name),mateAssemblyName:l.targetAssemblyName})))))}getFeatures(e,t={}){return K(async a=>{let s=e.assemblyName===this.anchor?await this.refNames.resolve(e,t):void 0;if(s!==void 0){let n=q(t),i=n.length>0?await this.pairFeatures(s,e,n,t):await this.anchorFeatures(s,e,t);for(let c of i)a.next(c)}a.complete()},t.signal)}};export{D as default};
2
- //# sourceMappingURL=WalkTabixSyntenyAdapter-576RE5OE.js.map
@@ -1,2 +0,0 @@
1
- import{c as y}from"./chunk-TMM73K4C.js";import{a as p,b as f,c as x,d as A,h as a,i as g,j as d}from"./chunk-6VNDP3UB.js";import{a as T}from"./chunk-D6TY2QEG.js";var z=5e3;function G(e){return typeof e=="string"&&/^[\w+-][\w.+-]*$/.test(e)}function F(e){return e==null}function M(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function L(e){return M(e)&&G(e.prefix)&&typeof e.foldBelowBp=="number"&&Number.isFinite(e.foldBelowBp)&&e.foldBelowBp>0}function P(e){let n;try{n=JSON.parse(e)}catch{return}if(!M(n)||n.schema!==1)return;let{reference:t,tier:i,index:r,contig:o,bubbles:s,alleles:l}=n;if((F(t)||typeof t=="string"&&t.trim()!=="")&&(F(i)||L(i))&&[r,o,s,l].every(k=>F(k)||G(k)))return{...typeof t=="string"?{reference:t.trim()}:{},...L(i)?{tier:{prefix:i.prefix,foldBelowBp:i.foldBelowBp,...i.format===2?{format:2}:{}}}:{}}}function u(e,n){return d(e,t=>t.replace(/[^/\\]*$/,n))}function R(e){let n=a(e);return[p,f].find(t=>n.endsWith(t))}function N(e){return g(e)&&R(e)!==void 0}function B(e,n){let t=R(e)??p;return d(e,i=>`${i.slice(0,-t.length)}${n}`)}function _(e){return N(e)?B(e,".graph.json"):void 0}async function X(e,n){let t=_(e);if(t)try{let i=await T(t,n).readFile({encoding:"utf8",signal:AbortSignal.timeout(z)});return P(i)}catch{return}}var J={RgfaTabixAdapter:"Indexed GFA (gfa-to-tabix .segs.bed.gz or .graph.bed.gz)",RgfaTabixWalks:"Haplotype walks (.walks.bed.gz)",GbzBaseSyntenyAdapter:"GBZ database (.gbz.db)",MinigraphBubbleAdapter:"Minigraph bubbles (tabix BED)"},K={RgfaTabixAdapter:"Path to segments BED (.segs.bed.gz from gfa-to-tabix; the .links.bed.gz, its index and any .graph.json are read beside it), or format 2's .graph.bed.gz",RgfaTabixWalks:"Path to a walk file (<prefix>.<sample>.walks.bed.gz from gfa-to-tabix --walks, for the sample this assembly is)",GbzBaseSyntenyAdapter:"Path to the .gbz.db written by gbz-base construct",MinigraphBubbleAdapter:"Path to bubbles BED (.bed.gz from gfatools bubble)"},w="Path to tabix index (optional; the sibling .tbi is assumed, a .csi is recognised by name)",Z={RgfaTabixAdapter:w,RgfaTabixWalks:w,GbzBaseSyntenyAdapter:"Path to the haplotype index (optional; graph.haplotype-index.db beside the database is assumed)",MinigraphBubbleAdapter:w};function h(e,n){return d(e,t=>t+n)}function C(e){if(!a(e).endsWith(p))throw new Error(`Expected a segments BED ending in ${p}, got ${a(e)}`);return B(e,".links.bed.gz")}function b(e,n){return n?{location:n,indexType:y(a(n),"CSI","TBI")}:{location:h(e,".tbi"),indexType:"TBI"}}function c(e,n){return n!==void 0&&y(a(n),"CSI","TBI")==="CSI"?{location:h(e,".csi"),indexType:"CSI"}:{location:h(e,".tbi"),indexType:"TBI"}}function S(e,n){let t=n.trim();return t&&e?{assemblyNameToPanSN:{[e]:t}}:{}}function E(e,n,t){if(!t)return{};if(t.format===2){let o=u(e,`${t.prefix}${f}`);return{coarse:{foldBelowBp:t.foldBelowBp,graphLocation:o,graphIndex:c(o,n)}}}let i=u(e,`${t.prefix}${p}`),r=u(e,`${t.prefix}.links.bed.gz`);return{coarse:{foldBelowBp:t.foldBelowBp,segmentsLocation:i,segmentsIndex:c(i,n),linksLocation:r,linksIndex:c(r,n)}}}function I(e,n,t){let i=t===e?void 0:t;return S(e,n.trim()||i||"")}function $(e){return e?{readsLocation:e,...a(e).endsWith(".gz")&&g(e)?{readsIndex:{location:h(e,".tbi")}}:{}}:{}}function q(e){return e.split(/[\s,]+/).filter(n=>n!=="")}function W({choice:e,loc:n,indexLoc:t,readsLoc:i,manifest:r,assembly:o,sample:s,haplotypes:l=[]}){if(e==="RgfaTabixWalks"){if(!a(n).endsWith(x))throw new Error(`Expected a walk file ending in ${x}, got ${a(n)}`);return{type:"RgfaTabixAdapter",walksLocation:n,walksIndex:b(n,t),...I(o,s,A(n)),...l.length>0?{defaultHaplotypes:l}:{}}}if(e==="GbzBaseSyntenyAdapter")return{type:"GbzBaseSyntenyAdapter",gbzDbLocation:n,...t?{haplotypeIndexLocation:t}:{},...$(i),...S(o,s)};if(e==="MinigraphBubbleAdapter")return{type:"MinigraphBubbleAdapter",bubblesLocation:n,index:b(n,t),...S(o,s)};if(a(n).endsWith(f))return{type:"RgfaTabixAdapter",graphLocation:n,graphIndex:b(n,t),...I(o,s,r?.reference),...E(n,t,r?.tier)};let m=C(n);return{type:"RgfaTabixAdapter",segmentsLocation:n,segmentsIndex:b(n,t),linksLocation:m,linksIndex:c(m,t),...I(o,s,r?.reference),...E(n,t,r?.tier)}}function Q(e){let{choice:n,assembly:t,trackId:i,name:r}=e;return{type:n==="MinigraphBubbleAdapter"?"FeatureTrack":"GraphTrack",trackId:i,name:r,assemblyNames:[t],adapter:W(e),...n==="RgfaTabixAdapter"||n==="RgfaTabixWalks"?{displayDefaults:{labels:{name:{show:!1},description:{show:!1}}}}:{}}}export{N as a,X as b,J as c,K as d,Z as e,q as f,W as g,Q as h};
2
- //# sourceMappingURL=chunk-CGPYVMGQ.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/GraphAddTrackWorkflow/graphManifest.ts", "../../src/GraphAddTrackWorkflow/buildTrackConfig.ts"],
4
- "sourcesContent": ["import { openLocation } from '@jbrowse/core/util/io'\n\nimport {\n GRAPH_SUFFIX,\n SEGMENTS_SUFFIX,\n locationName,\n readsSiblings,\n renamed,\n} from '../locationName'\n\nimport type PluginManager from '@jbrowse/core/PluginManager'\nimport type { FileLocation } from '@jbrowse/core/util'\n\n// The part of `<prefix>.graph.json`, written by `gfa-to-tabix build`, that\n// Open track reads\nexport interface GraphManifest {\n reference?: string\n // `format: 2` when the tier is one `<prefix>.graph.bed.gz`, as gfa-to-tabix\n // 2 writes it, rather than a segments and links pair\n tier?: { prefix: string; foldBelowBp: number; format?: 2 }\n}\n\nconst FETCH_TIMEOUT_MS = 5000\n\n// A bare file name beside the manifest: no directory, scheme or leading dot\nfunction isSiblingName(name: unknown): name is string {\n return typeof name === 'string' && /^[\\w+-][\\w.+-]*$/.test(name)\n}\n\nfunction isAbsent(value: unknown) {\n return value === undefined || value === null\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\nfunction isTier(tier: unknown): tier is NonNullable<GraphManifest['tier']> {\n return (\n isPlainRecord(tier) &&\n isSiblingName(tier.prefix) &&\n typeof tier.foldBelowBp === 'number' &&\n Number.isFinite(tier.foldBelowBp) &&\n tier.foldBelowBp > 0\n )\n}\n\nexport function parseGraphManifest(text: string): GraphManifest | undefined {\n let json: unknown\n try {\n json = JSON.parse(text)\n } catch {\n return undefined\n }\n if (!isPlainRecord(json) || json.schema !== 1) {\n return undefined\n }\n const { reference, tier, index, contig, bubbles, alleles } = json\n const valid =\n (isAbsent(reference) ||\n (typeof reference === 'string' && reference.trim() !== '')) &&\n (isAbsent(tier) || isTier(tier)) &&\n [index, contig, bubbles, alleles].every(\n f => isAbsent(f) || isSiblingName(f),\n )\n if (!valid) {\n return undefined\n }\n return {\n ...(typeof reference === 'string' ? { reference: reference.trim() } : {}),\n ...(isTier(tier)\n ? {\n tier: {\n prefix: tier.prefix,\n foldBelowBp: tier.foldBelowBp,\n ...(tier.format === 2 ? { format: 2 as const } : {}),\n },\n }\n : {}),\n }\n}\n\n// A file the manifest names, in the directory of the segments file opened\nexport function besideSegments(segs: FileLocation, fileName: string) {\n return renamed(segs, name => name.replace(/[^/\\\\]*$/, fileName))\n}\n\n// The suffix of a gfa-to-tabix index file: format 1's segments BED or format\n// 2's graph BED\nfunction indexSuffix(loc: FileLocation) {\n const name = locationName(loc)\n return [SEGMENTS_SUFFIX, GRAPH_SUFFIX].find(suffix => name.endsWith(suffix))\n}\n\n// A segments BED, or format 2's graph BED, the rest of the index and the\n// manifest can be found beside\nexport function isGraphIndexLocation(loc: FileLocation) {\n return readsSiblings(loc) && indexSuffix(loc) !== undefined\n}\n\n// `<prefix><suffix>` beside `<prefix>.segs.bed.gz` or `<prefix>.graph.bed.gz`\nexport function segmentsSibling(segs: FileLocation, suffix: string) {\n const own = indexSuffix(segs) ?? SEGMENTS_SUFFIX\n return renamed(segs, name => `${name.slice(0, -own.length)}${suffix}`)\n}\n\nexport function manifestLocation(segs: FileLocation) {\n return isGraphIndexLocation(segs)\n ? segmentsSibling(segs, '.graph.json')\n : undefined\n}\n\n// Undefined for a manifest that is missing, unreadable or not schema 1, so\n// Open track falls back to the files beside the segments alone\nexport async function readGraphManifest(\n segs: FileLocation,\n pluginManager?: PluginManager,\n) {\n const loc = manifestLocation(segs)\n if (!loc) {\n return undefined\n }\n try {\n const text = await openLocation(loc, pluginManager).readFile({\n encoding: 'utf8',\n signal: AbortSignal.timeout(FETCH_TIMEOUT_MS),\n })\n return parseGraphManifest(text)\n } catch {\n return undefined\n }\n}\n", "import { makeIndexType } from '@jbrowse/core/util/tracks'\n\nimport { besideSegments, segmentsSibling } from './graphManifest'\nimport {\n GRAPH_SUFFIX,\n SEGMENTS_SUFFIX,\n WALKS_SUFFIX,\n locationName,\n readsSiblings,\n renamed,\n walkFileSample,\n} from '../locationName'\n\nimport type { GraphManifest } from './graphManifest'\nimport type { FileLocation } from '@jbrowse/core/util'\n\n// 'RgfaTabixWalks' is an RgfaTabixAdapter read from a walk file\nexport type GraphFileChoice =\n | 'RgfaTabixAdapter'\n | 'RgfaTabixWalks'\n | 'GbzBaseSyntenyAdapter'\n | 'MinigraphBubbleAdapter'\n\nexport const GRAPH_FILE_LABELS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter: 'Indexed GFA (gfa-to-tabix .segs.bed.gz or .graph.bed.gz)',\n RgfaTabixWalks: 'Haplotype walks (.walks.bed.gz)',\n GbzBaseSyntenyAdapter: 'GBZ database (.gbz.db)',\n MinigraphBubbleAdapter: 'Minigraph bubbles (tabix BED)',\n}\n\nexport const GRAPH_FILE_FIELDS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter:\n \"Path to segments BED (.segs.bed.gz from gfa-to-tabix; the .links.bed.gz, its index and any .graph.json are read beside it), or format 2's .graph.bed.gz\",\n RgfaTabixWalks:\n 'Path to a walk file (<prefix>.<sample>.walks.bed.gz from gfa-to-tabix --walks, for the sample this assembly is)',\n GbzBaseSyntenyAdapter: 'Path to the .gbz.db written by gbz-base construct',\n MinigraphBubbleAdapter: 'Path to bubbles BED (.bed.gz from gfatools bubble)',\n}\n\nconst TABIX_INDEX_FIELD =\n 'Path to tabix index (optional; the sibling .tbi is assumed, a .csi is recognised by name)'\n\nexport const GRAPH_INDEX_FIELDS: Record<GraphFileChoice, string> = {\n RgfaTabixAdapter: TABIX_INDEX_FIELD,\n RgfaTabixWalks: TABIX_INDEX_FIELD,\n GbzBaseSyntenyAdapter:\n 'Path to the haplotype index (optional; graph.haplotype-index.db beside the database is assumed)',\n MinigraphBubbleAdapter: TABIX_INDEX_FIELD,\n}\n\nfunction sibling(loc: FileLocation, suffix: string) {\n return renamed(loc, name => name + suffix)\n}\n\nfunction linksLocation(loc: FileLocation) {\n if (!locationName(loc).endsWith(SEGMENTS_SUFFIX)) {\n throw new Error(\n `Expected a segments BED ending in ${SEGMENTS_SUFFIX}, got ${locationName(loc)}`,\n )\n }\n return segmentsSibling(loc, '.links.bed.gz')\n}\n\nfunction tabixIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n return indexLoc\n ? {\n location: indexLoc,\n indexType: makeIndexType(locationName(indexLoc), 'CSI', 'TBI'),\n }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\n// The links file's index is assumed beside it, of the kind the segments' is.\nfunction siblingIndex(loc: FileLocation, indexLoc: FileLocation | undefined) {\n const csi =\n indexLoc !== undefined &&\n makeIndexType(locationName(indexLoc), 'CSI', 'TBI') === 'CSI'\n return csi\n ? { location: sibling(loc, '.csi'), indexType: 'CSI' }\n : { location: sibling(loc, '.tbi'), indexType: 'TBI' }\n}\n\n// none for a guessed config, which knows no assembly yet; see withWalkReference\nfunction panSN(assembly: string, sample: string) {\n const name = sample.trim()\n return name && assembly ? { assemblyNameToPanSN: { [assembly]: name } } : {}\n}\n\nfunction coarseTier(\n loc: FileLocation,\n indexLoc: FileLocation | undefined,\n tier: GraphManifest['tier'],\n) {\n if (!tier) {\n return {}\n }\n if (tier.format === 2) {\n const graph = besideSegments(loc, `${tier.prefix}${GRAPH_SUFFIX}`)\n return {\n coarse: {\n foldBelowBp: tier.foldBelowBp,\n graphLocation: graph,\n graphIndex: siblingIndex(graph, indexLoc),\n },\n }\n }\n const segs = besideSegments(loc, `${tier.prefix}${SEGMENTS_SUFFIX}`)\n const links = besideSegments(loc, `${tier.prefix}.links.bed.gz`)\n return {\n coarse: {\n foldBelowBp: tier.foldBelowBp,\n segmentsLocation: segs,\n segmentsIndex: siblingIndex(segs, indexLoc),\n linksLocation: links,\n linksIndex: siblingIndex(links, indexLoc),\n },\n }\n}\n\n// The user's sample wins; the reference the graph's files name (a manifest's,\n// or a walk file's own) stands in when blank\nfunction referencePanSN(\n assembly: string,\n sample: string,\n reference: string | undefined,\n) {\n const fromManifest = reference === assembly ? undefined : reference\n return panSN(assembly, sample.trim() || fromManifest || '')\n}\n\n// a bgzipped GAF is read by its tabix index, a plain one whole\nfunction readsConfig(readsLoc: FileLocation | undefined) {\n return readsLoc\n ? {\n readsLocation: readsLoc,\n ...(locationName(readsLoc).endsWith('.gz') && readsSiblings(readsLoc)\n ? { readsIndex: { location: sibling(readsLoc, '.tbi') } }\n : {}),\n }\n : {}\n}\n\n// Names typed as a list, by comma or space\nexport function parseHaplotypes(text: string) {\n return text.split(/[\\s,]+/).filter(name => name !== '')\n}\n\nexport function buildAdapterConfig({\n choice,\n loc,\n indexLoc,\n readsLoc,\n manifest,\n assembly,\n sample,\n haplotypes = [],\n}: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n // a GBZ track's GAF reads, which no other choice takes\n readsLoc?: FileLocation\n // the `.graph.json` beside an rGFA segments file\n manifest?: GraphManifest\n assembly: string\n sample: string\n // a walk file's haplotypes to cut for until the user picks others\n haplotypes?: string[]\n}) {\n if (choice === 'RgfaTabixWalks') {\n if (!locationName(loc).endsWith(WALKS_SUFFIX)) {\n throw new Error(\n `Expected a walk file ending in ${WALKS_SUFFIX}, got ${locationName(loc)}`,\n )\n }\n return {\n type: 'RgfaTabixAdapter',\n walksLocation: loc,\n walksIndex: tabixIndex(loc, indexLoc),\n ...referencePanSN(assembly, sample, walkFileSample(loc)),\n ...(haplotypes.length > 0 ? { defaultHaplotypes: haplotypes } : {}),\n }\n }\n if (choice === 'GbzBaseSyntenyAdapter') {\n return {\n type: 'GbzBaseSyntenyAdapter',\n gbzDbLocation: loc,\n ...(indexLoc ? { haplotypeIndexLocation: indexLoc } : {}),\n ...readsConfig(readsLoc),\n ...panSN(assembly, sample),\n }\n }\n if (choice === 'MinigraphBubbleAdapter') {\n return {\n type: 'MinigraphBubbleAdapter',\n bubblesLocation: loc,\n index: tabixIndex(loc, indexLoc),\n ...panSN(assembly, sample),\n }\n }\n if (locationName(loc).endsWith(GRAPH_SUFFIX)) {\n return {\n type: 'RgfaTabixAdapter',\n graphLocation: loc,\n graphIndex: tabixIndex(loc, indexLoc),\n ...referencePanSN(assembly, sample, manifest?.reference),\n ...coarseTier(loc, indexLoc, manifest?.tier),\n }\n }\n const links = linksLocation(loc)\n return {\n type: 'RgfaTabixAdapter',\n segmentsLocation: loc,\n segmentsIndex: tabixIndex(loc, indexLoc),\n linksLocation: links,\n linksIndex: siblingIndex(links, indexLoc),\n ...referencePanSN(assembly, sample, manifest?.reference),\n ...coarseTier(loc, indexLoc, manifest?.tier),\n }\n}\n\nexport function buildTrackConfig(args: {\n choice: GraphFileChoice\n loc: FileLocation\n indexLoc: FileLocation | undefined\n readsLoc?: FileLocation\n manifest?: GraphManifest\n assembly: string\n sample: string\n haplotypes?: string[]\n trackId: string\n name: string\n}) {\n const { choice, assembly, trackId, name } = args\n return {\n type: choice === 'MinigraphBubbleAdapter' ? 'FeatureTrack' : 'GraphTrack',\n trackId,\n name,\n assemblyNames: [assembly],\n adapter: buildAdapterConfig(args),\n ...(choice === 'RgfaTabixAdapter' || choice === 'RgfaTabixWalks'\n ? {\n displayDefaults: {\n labels: { name: { show: false }, description: { show: false } },\n },\n }\n : {}),\n }\n}\n"],
5
- "mappings": "kKAsBA,IAAMA,EAAmB,IAGzB,SAASC,EAAcC,EAA+B,CACpD,OAAO,OAAOA,GAAS,UAAY,mBAAmB,KAAKA,CAAI,CACjE,CAEA,SAASC,EAASC,EAAgB,CAChC,OAA8BA,GAAU,IAC1C,CAEA,SAASC,EAAcD,EAAkD,CACvE,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,CAAC,MAAM,QAAQA,CAAK,CAC5E,CAEA,SAASE,EAAOC,EAA2D,CACzE,OACEF,EAAcE,CAAI,GAClBN,EAAcM,EAAK,MAAM,GACzB,OAAOA,EAAK,aAAgB,UAC5B,OAAO,SAASA,EAAK,WAAW,GAChCA,EAAK,YAAc,CAEvB,CAEO,SAASC,EAAmBC,EAAyC,CAC1E,IAAIC,EACJ,GAAI,CACFA,EAAO,KAAK,MAAMD,CAAI,CACxB,MAAQ,CACN,MACF,CACA,GAAI,CAACJ,EAAcK,CAAI,GAAKA,EAAK,SAAW,EAC1C,OAEF,GAAM,CAAE,UAAAC,EAAW,KAAAJ,EAAM,MAAAK,EAAO,OAAAC,EAAQ,QAAAC,EAAS,QAAAC,CAAQ,EAAIL,EAQ7D,IANGP,EAASQ,CAAS,GAChB,OAAOA,GAAc,UAAYA,EAAU,KAAK,IAAM,MACxDR,EAASI,CAAI,GAAKD,EAAOC,CAAI,IAC9B,CAACK,EAAOC,EAAQC,EAASC,CAAO,EAAE,MAChCC,GAAKb,EAASa,CAAC,GAAKf,EAAce,CAAC,CACrC,EAIF,MAAO,CACL,GAAI,OAAOL,GAAc,SAAW,CAAE,UAAWA,EAAU,KAAK,CAAE,EAAI,CAAC,EACvE,GAAIL,EAAOC,CAAI,EACX,CACE,KAAM,CACJ,OAAQA,EAAK,OACb,YAAaA,EAAK,YAClB,GAAIA,EAAK,SAAW,EAAI,CAAE,OAAQ,CAAW,EAAI,CAAC,CACpD,CACF,EACA,CAAC,CACP,CACF,CAGO,SAASU,EAAeC,EAAoBC,EAAkB,CACnE,OAAOC,EAAQF,EAAMhB,GAAQA,EAAK,QAAQ,WAAYiB,CAAQ,CAAC,CACjE,CAIA,SAASE,EAAYC,EAAmB,CACtC,IAAMpB,EAAOqB,EAAaD,CAAG,EAC7B,MAAO,CAACE,EAAiBC,CAAY,EAAE,KAAKC,GAAUxB,EAAK,SAASwB,CAAM,CAAC,CAC7E,CAIO,SAASC,EAAqBL,EAAmB,CACtD,OAAOM,EAAcN,CAAG,GAAKD,EAAYC,CAAG,IAAM,MACpD,CAGO,SAASO,EAAgBX,EAAoBQ,EAAgB,CAClE,IAAMI,EAAMT,EAAYH,CAAI,GAAKM,EACjC,OAAOJ,EAAQF,EAAMhB,GAAQ,GAAGA,EAAK,MAAM,EAAG,CAAC4B,EAAI,MAAM,CAAC,GAAGJ,CAAM,EAAE,CACvE,CAEO,SAASK,EAAiBb,EAAoB,CACnD,OAAOS,EAAqBT,CAAI,EAC5BW,EAAgBX,EAAM,aAAa,EACnC,MACN,CAIA,eAAsBc,EACpBd,EACAe,EACA,CACA,IAAMX,EAAMS,EAAiBb,CAAI,EACjC,GAAKI,EAGL,GAAI,CACF,IAAMb,EAAO,MAAMyB,EAAaZ,EAAKW,CAAa,EAAE,SAAS,CAC3D,SAAU,OACV,OAAQ,YAAY,QAAQjC,CAAgB,CAC9C,CAAC,EACD,OAAOQ,EAAmBC,CAAI,CAChC,MAAQ,CACN,MACF,CACF,CC5GO,IAAM0B,EAAqD,CAChE,iBAAkB,2DAClB,eAAgB,kCAChB,sBAAuB,yBACvB,uBAAwB,+BAC1B,EAEaC,EAAqD,CAChE,iBACE,0JACF,eACE,kHACF,sBAAuB,oDACvB,uBAAwB,oDAC1B,EAEMC,EACJ,4FAEWC,EAAsD,CACjE,iBAAkBD,EAClB,eAAgBA,EAChB,sBACE,kGACF,uBAAwBA,CAC1B,EAEA,SAASE,EAAQC,EAAmBC,EAAgB,CAClD,OAAOC,EAAQF,EAAKG,GAAQA,EAAOF,CAAM,CAC3C,CAEA,SAASG,EAAcJ,EAAmB,CACxC,GAAI,CAACK,EAAaL,CAAG,EAAE,SAASM,CAAe,EAC7C,MAAM,IAAI,MACR,qCAAqCA,CAAe,SAASD,EAAaL,CAAG,CAAC,EAChF,EAEF,OAAOO,EAAgBP,EAAK,eAAe,CAC7C,CAEA,SAASQ,EAAWR,EAAmBS,EAAoC,CACzE,OAAOA,EACH,CACE,SAAUA,EACV,UAAWC,EAAcL,EAAaI,CAAQ,EAAG,MAAO,KAAK,CAC/D,EACA,CAAE,SAAUV,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,CACzD,CAGA,SAASW,EAAaX,EAAmBS,EAAoC,CAI3E,OAFEA,IAAa,QACbC,EAAcL,EAAaI,CAAQ,EAAG,MAAO,KAAK,IAAM,MAEtD,CAAE,SAAUV,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,EACnD,CAAE,SAAUD,EAAQC,EAAK,MAAM,EAAG,UAAW,KAAM,CACzD,CAGA,SAASY,EAAMC,EAAkBC,EAAgB,CAC/C,IAAMX,EAAOW,EAAO,KAAK,EACzB,OAAOX,GAAQU,EAAW,CAAE,oBAAqB,CAAE,CAACA,CAAQ,EAAGV,CAAK,CAAE,EAAI,CAAC,CAC7E,CAEA,SAASY,EACPf,EACAS,EACAO,EACA,CACA,GAAI,CAACA,EACH,MAAO,CAAC,EAEV,GAAIA,EAAK,SAAW,EAAG,CACrB,IAAMC,EAAQC,EAAelB,EAAK,GAAGgB,EAAK,MAAM,GAAGG,CAAY,EAAE,EACjE,MAAO,CACL,OAAQ,CACN,YAAaH,EAAK,YAClB,cAAeC,EACf,WAAYN,EAAaM,EAAOR,CAAQ,CAC1C,CACF,CACF,CACA,IAAMW,EAAOF,EAAelB,EAAK,GAAGgB,EAAK,MAAM,GAAGV,CAAe,EAAE,EAC7De,EAAQH,EAAelB,EAAK,GAAGgB,EAAK,MAAM,eAAe,EAC/D,MAAO,CACL,OAAQ,CACN,YAAaA,EAAK,YAClB,iBAAkBI,EAClB,cAAeT,EAAaS,EAAMX,CAAQ,EAC1C,cAAeY,EACf,WAAYV,EAAaU,EAAOZ,CAAQ,CAC1C,CACF,CACF,CAIA,SAASa,EACPT,EACAC,EACAS,EACA,CACA,IAAMC,EAAeD,IAAcV,EAAW,OAAYU,EAC1D,OAAOX,EAAMC,EAAUC,EAAO,KAAK,GAAKU,GAAgB,EAAE,CAC5D,CAGA,SAASC,EAAYC,EAAoC,CACvD,OAAOA,EACH,CACE,cAAeA,EACf,GAAIrB,EAAaqB,CAAQ,EAAE,SAAS,KAAK,GAAKC,EAAcD,CAAQ,EAChE,CAAE,WAAY,CAAE,SAAU3B,EAAQ2B,EAAU,MAAM,CAAE,CAAE,EACtD,CAAC,CACP,EACA,CAAC,CACP,CAGO,SAASE,EAAgBC,EAAc,CAC5C,OAAOA,EAAK,MAAM,QAAQ,EAAE,OAAO1B,GAAQA,IAAS,EAAE,CACxD,CAEO,SAAS2B,EAAmB,CACjC,OAAAC,EACA,IAAA/B,EACA,SAAAS,EACA,SAAAiB,EACA,SAAAM,EACA,SAAAnB,EACA,OAAAC,EACA,WAAAmB,EAAa,CAAC,CAChB,EAYG,CACD,GAAIF,IAAW,iBAAkB,CAC/B,GAAI,CAAC1B,EAAaL,CAAG,EAAE,SAASkC,CAAY,EAC1C,MAAM,IAAI,MACR,kCAAkCA,CAAY,SAAS7B,EAAaL,CAAG,CAAC,EAC1E,EAEF,MAAO,CACL,KAAM,mBACN,cAAeA,EACf,WAAYQ,EAAWR,EAAKS,CAAQ,EACpC,GAAGa,EAAeT,EAAUC,EAAQqB,EAAenC,CAAG,CAAC,EACvD,GAAIiC,EAAW,OAAS,EAAI,CAAE,kBAAmBA,CAAW,EAAI,CAAC,CACnE,CACF,CACA,GAAIF,IAAW,wBACb,MAAO,CACL,KAAM,wBACN,cAAe/B,EACf,GAAIS,EAAW,CAAE,uBAAwBA,CAAS,EAAI,CAAC,EACvD,GAAGgB,EAAYC,CAAQ,EACvB,GAAGd,EAAMC,EAAUC,CAAM,CAC3B,EAEF,GAAIiB,IAAW,yBACb,MAAO,CACL,KAAM,yBACN,gBAAiB/B,EACjB,MAAOQ,EAAWR,EAAKS,CAAQ,EAC/B,GAAGG,EAAMC,EAAUC,CAAM,CAC3B,EAEF,GAAIT,EAAaL,CAAG,EAAE,SAASmB,CAAY,EACzC,MAAO,CACL,KAAM,mBACN,cAAenB,EACf,WAAYQ,EAAWR,EAAKS,CAAQ,EACpC,GAAGa,EAAeT,EAAUC,EAAQkB,GAAU,SAAS,EACvD,GAAGjB,EAAWf,EAAKS,EAAUuB,GAAU,IAAI,CAC7C,EAEF,IAAMX,EAAQjB,EAAcJ,CAAG,EAC/B,MAAO,CACL,KAAM,mBACN,iBAAkBA,EAClB,cAAeQ,EAAWR,EAAKS,CAAQ,EACvC,cAAeY,EACf,WAAYV,EAAaU,EAAOZ,CAAQ,EACxC,GAAGa,EAAeT,EAAUC,EAAQkB,GAAU,SAAS,EACvD,GAAGjB,EAAWf,EAAKS,EAAUuB,GAAU,IAAI,CAC7C,CACF,CAEO,SAASI,EAAiBC,EAW9B,CACD,GAAM,CAAE,OAAAN,EAAQ,SAAAlB,EAAU,QAAAyB,EAAS,KAAAnC,CAAK,EAAIkC,EAC5C,MAAO,CACL,KAAMN,IAAW,yBAA2B,eAAiB,aAC7D,QAAAO,EACA,KAAAnC,EACA,cAAe,CAACU,CAAQ,EACxB,QAASiB,EAAmBO,CAAI,EAChC,GAAIN,IAAW,oBAAsBA,IAAW,iBAC5C,CACE,gBAAiB,CACf,OAAQ,CAAE,KAAM,CAAE,KAAM,EAAM,EAAG,YAAa,CAAE,KAAM,EAAM,CAAE,CAChE,CACF,EACA,CAAC,CACP,CACF",
6
- "names": ["FETCH_TIMEOUT_MS", "isSiblingName", "name", "isAbsent", "value", "isPlainRecord", "isTier", "tier", "parseGraphManifest", "text", "json", "reference", "index", "contig", "bubbles", "alleles", "f", "besideSegments", "segs", "fileName", "renamed", "indexSuffix", "loc", "locationName", "SEGMENTS_SUFFIX", "GRAPH_SUFFIX", "suffix", "isGraphIndexLocation", "readsSiblings", "segmentsSibling", "own", "manifestLocation", "readGraphManifest", "pluginManager", "openLocation", "GRAPH_FILE_LABELS", "GRAPH_FILE_FIELDS", "TABIX_INDEX_FIELD", "GRAPH_INDEX_FIELDS", "sibling", "loc", "suffix", "renamed", "name", "linksLocation", "locationName", "SEGMENTS_SUFFIX", "segmentsSibling", "tabixIndex", "indexLoc", "makeIndexType", "siblingIndex", "panSN", "assembly", "sample", "coarseTier", "tier", "graph", "besideSegments", "GRAPH_SUFFIX", "segs", "links", "referencePanSN", "reference", "fromManifest", "readsConfig", "readsLoc", "readsSiblings", "parseHaplotypes", "text", "buildAdapterConfig", "choice", "manifest", "haplotypes", "WALKS_SUFFIX", "walkFileSample", "buildTrackConfig", "args", "trackId"]
7
- }
@@ -1,2 +0,0 @@
1
- import{a as dt,c as ht,d as yt,g as C,j as K,l as xt,q as Mt,r as $,w as bt,x as vt}from"./chunk-ELC7POI6.js";import{b as pt,c as mt}from"./chunk-CL4PYWKC.js";var gt=20;function be(t){let n=e=>Math.round(e*100)/100;return t.map((e,o)=>`${o?"L":"M"}${n(e.x)},${n(e.y)}`).join("")}function wt(t,n,e,o,r){let s=Math.hypot(o-n,e-t);if(s===0)return[e,o];let a=(e-t)/s,c=(o-n)/s;return[e+r*a,o+r*c]}function Y(t,n){let e=1-n,o=e*e*e,r=3*e*e*n,s=3*e*n*n,a=n*n*n;return{x:o*t.x0+r*t.cx0+s*t.cx1+a*t.x1,y:o*t.y0+r*t.cy0+s*t.cy1+a*t.y1}}function Pt(t){let n=t[Math.floor(t.length/2)];return n?Y(n,.5):void 0}function Nt(t){let n=1/0,e=1/0,o=-1/0,r=-1/0;for(let s of t)n=Math.min(n,s.x0,s.cx0,s.cx1,s.x1),o=Math.max(o,s.x0,s.cx0,s.cx1,s.x1),e=Math.min(e,s.y0,s.cy0,s.cy1,s.y1),r=Math.max(r,s.y0,s.cy0,s.cy1,s.y1);return{minX:n,minY:e,maxX:o,maxY:r}}function tn(t,n,e){let o=Y(t,n),r=Y(t,e),s=(e-n)/3,a=At(t,n),c=At(t,e);return{x0:o.x,y0:o.y,cx0:o.x+a.x*s,cy0:o.y+a.y*s,cx1:r.x-c.x*s,cy1:r.y-c.y*s,x1:r.x,y1:r.y}}function At(t,n){let e=1-n,o=3*e*e,r=6*e*n,s=3*n*n;return{x:o*(t.cx0-t.x0)+r*(t.cx1-t.cx0)+s*(t.x1-t.cx1),y:o*(t.cy0-t.y0)+r*(t.cy1-t.cy0)+s*(t.y1-t.cy1)}}var H=32;function nn(t,n,e,o){let r=[],s=0;return t.forEach((a,c)=>{let i=n[c],l=i/H,d=Y(a,0);for(let u=1;u<=H;u++){let y=Y(a,u/H);if(Math.max(d.x,y.x)+l>=e.minX&&Math.min(d.x,y.x)-l<=e.maxX&&Math.max(d.y,y.y)+l/o>=e.minY&&Math.min(d.y,y.y)-l/o<=e.maxY){let f=s+i*(u-1)/H,h=s+i*u/H,x=r.at(-1);x&&x[1]>=f?x[1]=h:r.push([f,h])}d=y}s+=i}),r}function ve(t,n,e=1,o){let r=t.map(u=>Math.hypot(u.cx0-u.x0,(u.cy0-u.y0)*e)+Math.hypot(u.cx1-u.cx0,(u.cy1-u.cy0)*e)+Math.hypot(u.x1-u.cx1,(u.y1-u.cy1)*e)),s=r.reduce((u,y)=>u+y,0),a=Math.round(s/n),c=Math.max(3,a%2?a:a+1),i=o?nn(t,r,o,e):void 0,l=0,d=[];for(let u=0;u<c;u+=2){let y=u/c*s,f=(u+1)/c*s;if(i){for(;l<i.length&&i[l][1]<y;)l++;if(l===i.length)break;if(i[l][0]>f)continue}let h=[],x=[],p=0;t.forEach((b,m)=>{let M=r[m],g=p+M;if(M>0&&g>y&&p<f){let v=Math.max(0,(y-p)/M),w=Math.min(1,(f-p)/M);h.push(tn(b,v,w)),x.push((m+v)/t.length,(m+w)/t.length)}p=g}),h.length&&d.push({curves:h,startAlong:x[0],endAlong:x.at(-1)})}return d}function ge(t,n,e,o,r){let s=t.length,a=new Array(s);for(let c=0;c<s;c++){let i=t[c],l=c/s,d=(c+1)/s,u=n+(o-n)*l,y=e+(r-e)*l,f=n+(o-n)*d,h=e+(r-e)*d;a[c]={x0:i.x0+u,y0:i.y0+y,cx0:i.cx0+u,cy0:i.cy0+y,cx1:i.cx1+f,cy1:i.cy1+h,x1:i.x1+f,y1:i.y1+h}}return a}function we(t,n,e){let o=new Array(t.length);for(let r=0;r<t.length;r++){let s=t[r];o[r]={x0:s.x0+n,y0:s.y0+e,cx0:s.cx0+n,cy0:s.cy0+e,cx1:s.cx1+n,cy1:s.cy1+e,x1:s.x1+n,y1:s.y1+e}}return o}function W(t,n){let e=t.length-1;return n==="end"?{at:t[e],inward:t[e-1]}:{at:t[0],inward:t[1]}}var en=.5,on=80;function F(t){return t.endsWith("-")?"-":"+"}function q(t){let n=(e,o)=>(o??F(e))===F(e);return{from:n(t.from,t.fromStrand)?"end":"start",to:n(t.to,t.toStrand)?"start":"end"}}function _t(t){let n=1/0,e=-1/0;for(let o of t)n=Math.min(n,o.x),e=Math.max(e,o.x);return{min:n,max:e}}function Et(t,n){return Math.max(0,n.min-t,t-n.max)}function It(t,n,e){let o=Et(t[0].x,n),r=Et(t[t.length-1].x,n);return o===r?e:o<r?"start":"end"}function rn(t,n){return{from:It(t,_t(n),"end"),to:It(n,_t(t),"start")}}var Lt=new WeakMap;function sn(t,n){let e=Lt.get(t);e||(e=new WeakMap,Lt.set(t,e));let o=e.get(n);return o||(o=rn(t,n),e.set(n,o)),o}var cn=.75,an=1.15,fn=.35,un=3*gt;function ln(t,n,e,o,r,s){let a=Math.hypot(e-t,o-n),c=a===0?1:(e-t)/a,i=a===0?0:(o-n)/a,l=0,d=1/0,u=-1/0;for(let x of r){let p=x.x-t,b=x.y-n,m=p*-i+b*c;Math.abs(m)>Math.abs(l)&&(l=m);let M=p*c+b*i;d=Math.min(d,M),u=Math.max(u,M)}let y=r.length?u-d:0,f=Math.max(Math.abs(l)*an/cn,y*fn),h=s===void 0?f:Math.min(f,s);return l<0?-h:h}function Xt({scaleX:t,scaleY:n}){return n/t}var dn=3;function J(t,n,e){let o=n.x-t.x,r=(n.y-t.y)*e,s=Math.hypot(o,r);return s===0?void 0:{x:o/s,y:r/s}}function Ae(t,n,e,o){let r=Xt(o),s=dn/Math.max(o.scaleX,1e-6),a=J(t[t.length-1],n[0],r)??J(t[0],t.at(-1),r)??J(n[0],n.at(-1),r)??{x:1,y:0},c=[];for(let i=0;i<e;i++){let l=(i-(e-1)/2)*s;c.push({x:-a.y*l,y:a.x*l/r})}return c}function Q(t,n){return t.map(e=>({x:e.x,y:e.y*n}))}function hn(t,n){for(let e of t)e.y0/=n,e.cy0/=n,e.cy1/=n,e.y1/=n;return t}function Z(t,n,e){let o=0;for(let r=1;r<t.length;r++){let s=t[r-1],a=t[r];o+=Math.hypot((a.x-s.x)*n,(a.y-s.y)*e)}return o}var yn=12,xn=40;function Ot(t,n){let e=Z(t,n,n);return Math.min(xn,Math.max(yn,e/2))/Math.max(n,Number.EPSILON)}function pn(t){return t.from!==t.to?!1:t.fromStrand&&t.toStrand&&t.fromStrand!==t.toStrand?t.fromStrand==="+"?"end":"start":!0}function Ct(t,n=!1){let e=pn(t);if(!n)return e;let o=q(t);return e===!1?o:o.from===o.to?o.from:!0}function mn(t,n){let{at:e,inward:o}=t,r=o?e.x-o.x:1,s=o?e.y-o.y:0,a=Math.hypot(r,s)||1,c=r/a,i=s/a,l=e.x,d=e.y,u=l+c*n/3,y=d+i*n/3,f=l+c*n,h=d+i*n,x=-i*n/2,p=c*n/2;return[{x0:l,y0:d,cx0:u,cy0:y,cx1:f+x,cy1:h+p,x1:f,y1:h},{x0:f,y0:h,cx0:f-x,cy0:h-p,cx1:u,cy1:y,x1:l,y1:d}]}function tt(t,n,e,o,r=[],s){let a=o.scaleX,c=Xt(o),i=s??(o.pixelRows?un:void 0);if(e===!1&&(e=sn(t,n)),c!==1)return hn(tt(Q(t,c),Q(n,c),e,{scaleX:a,scaleY:a},Q(r,c),i===void 0?void 0:i*c),c);if(typeof e=="string")return mn(W(t,e),Ot(t,a));let l=e===!0,d=e===!0?{from:"end",to:"start"}:e,u=W(t,d.from),y=W(n,d.to),f=u.at,h=y.at,x=f.x,p=f.y,b=h.x,m=h.y;if(l){let M=1,g=0;if(u.inward){let S=f.x-u.inward.x,P=f.y-u.inward.y,X=Math.hypot(S,P);X>0&&(M=S/X,g=P/X)}let v=Ot(t,a),w=-g,_=M,I=(f.x+h.x)/2+w*v,E=(f.y+h.y)/2+_*v,A=x+M*v,N=p+g*v,O=b-M*v,L=m-g*v;return[{x0:x,y0:p,cx0:A,cy0:N,cx1:A+w*v,cy1:N+_*v,x1:I,y1:E},{x0:I,y0:E,cx0:O+w*v,cy0:L+_*v,cx1:O,cy1:L,x1:b,y1:m}]}else{let M=u.inward??{x:f.x-(h.x-f.x),y:f.y-(h.y-f.y)},g=y.inward??{x:h.x-(f.x-h.x),y:h.y-(f.y-h.y)},v=Math.hypot(b-x,m-p),w=(at,it,Jt,Qt)=>{let ft=it.x-at.x,ut=it.y-at.y,lt=Math.hypot(ft,ut),Zt=lt===0?0:(Jt*ft+Qt*ut)/lt;return Math.max(0,Math.min(v*en,on,Zt*.5))},_=h.x-f.x,I=h.y-f.y,[E,A]=wt(M.x,M.y,f.x,f.y,w(M,f,_,I)),[N,O]=wt(g.x,g.y,h.x,h.y,w(g,h,-_,-I)),L=r.length?ln(x,p,b,m,r,i):0,S=v===0?1:v,P=(b-x)/S,X=(m-p)/S,T=-X*L,B=P*L,R=P*Math.abs(L),ct=X*Math.abs(L);return[{x0:x,y0:p,cx0:E+T-R,cy0:A+B-ct,cx1:N+T+R,cy1:O+B+ct,x1:b,y1:m}]}}function St(t,n){let e=t[0],o=t.at(-1);return Math.hypot(e.x-n.x,e.y-n.y)<Math.hypot(o.x-n.x,o.y-n.y)?"start":"end"}function kt(t,n,e,o){let r=W(t,o?.from??St(t,e[0])),s=W(n,o?.to??St(n,e.at(-1))),a=[r.at,...e,s.at],c=l=>{let d=a[l],u=f=>Math.hypot(f.x-d.x,f.y-d.y),y=(f,h)=>{let x=f?u(f):0,p=u(h);return x===0?{x:h.x-d.x,y:h.y-d.y}:{x:(d.x-f.x)/x*p,y:(d.y-f.y)/x*p}};if(l===0)return y(r.inward,a[1]);if(l===a.length-1){let f=y(s.inward,a[l-1]);return{x:-f.x,y:-f.y}}return{x:(a[l+1].x-a[l-1].x)/2,y:(a[l+1].y-a[l-1].y)/2}},i=[];for(let l=0;l<a.length-1;l++){let d=a[l],u=a[l+1],y=c(l),f=c(l+1);i.push({x0:d.x,y0:d.y,cx0:d.x+y.x/3,cy0:d.y+y.y/3,cx1:u.x-f.x/3,cy1:u.y-f.y/3,x1:u.x,y1:u.y})}return i}function nt(){let t=new WeakMap;return(n,e,o)=>{let r=t.get(n);if(r?.deps.length===e.length&&r.deps.every((a,c)=>Object.is(a,e[c])))return r.value;let s=o();return t.set(n,{deps:e,value:s}),s}}var Bt=11,Mn=6.2,D=4;function et(t){return t.length*Mn+D*2}function bn(t,n){return t.x0<n.x1&&t.x1>n.x0&&t.y0<n.y1&&t.y1>n.y0}function Tt(t,n){return t.x1<=0||t.x0>=n.width||t.y1<=0||t.y0>=n.height}function vn(t,n){return t.x0>=0&&t.x1<=n.width&&t.y0>=0&&t.y1<=n.height}function Rt(t,n=[]){let e=[...n];return o=>Tt(o,t)||e.some(r=>bn(r,o))?!1:(e.push(o),!0)}function Ie(t,n,e){let o=[],r=Bt+D*2,s=(c,i,l,d)=>{let u=et(i),y=!1;for(let f=0;f<=(c.stack??0);f++){let h=l+d*f*r,x={x0:c.x-u/2,x1:c.x+u/2,y0:h-Bt-D,y1:h+D};if(Tt(x,n))break;if(vn(x,n)&&(c.fits?.(x)??!0)){if(e(x))return{placed:{...c,text:i,y:h,w:u},crowded:y};y=!0}}return{placed:void 0,crowded:y}},a=(c,i)=>{let l=s(c,i,c.y,c.y>n.height/2?-1:1);return l.placed??(c.flipY===void 0||l.crowded?void 0:s(c,i,c.flipY,c.flipY<c.y?-1:1).placed)};for(let c of t){let i=a(c,c.text)??(c.fallback===void 0?void 0:a(c,c.fallback));i&&o.push(i)}return o}function $t(t){return t==="+"?"-":"+"}function Ne(t,n=new Set){let e=t.edges.map(q),o=new Map,r=(f,h,x)=>{dt(o,`${f}|${h}`,x)};t.edges.forEach((f,h)=>{r(f.from,e[h].from,h),r(f.to,e[h].to,h)});let s=f=>{let h=o.get(`${f}|end`);if(h?.length!==1)return;let x=h[0],p=t.edges[x];return p.from===f&&p.to!==f&&!n.has(f)&&!n.has(p.to)&&e[x].from==="end"&&e[x].to==="start"&&o.get(`${p.to}|start`)?.length===1?x:void 0},a=new Set,c=new Map,i=new Map;for(let f of t.nodes){let h=o.get(`${f.id}|start`),x=h?.length===1?t.edges[h[0]].from:void 0;if(c.has(f.id)||x!==void 0&&s(x)===h[0])continue;let p=[f.id];for(;;){let b=s(p.at(-1)),m=b===void 0?void 0:t.edges[b].to;if(m===void 0||c.has(m))break;a.add(b),p.push(m)}for(let b of p)c.set(b,f.id);p.length>1&&i.set(f.id,p)}for(let f of t.nodes)c.has(f.id)||c.set(f.id,f.id);let l=new Map(t.nodes.map(f=>[f.id,f])),d=[];for(let f of t.nodes){if(c.get(f.id)!==f.id)continue;let h=i.get(f.id);if(!h){d.push(f);continue}let x=h.map(m=>l.get(m)),p=x.filter(C),b=p.length?p.reduce((m,M)=>m.stable.start<=M.stable.start?m:M):x[0];d.push({id:f.id,name:f.name,length:x.reduce((m,M)=>m+M.length,0),depth:f.depth,stable:b.stable})}let u=new Set,y=[];return t.edges.forEach((f,h)=>{let x=c.get(f.from),p=c.get(f.to),b=e[h],m=`${x}|${b.from}>${p}|${b.to}`;a.has(h)||u.has(m)||(u.add(m),y.push({from:x,to:p,...b.from==="start"?{fromStrand:$t(F(x))}:{},...b.to==="end"?{toStrand:$t(F(p))}:{}}))}),{graph:{...t,nodes:d,edges:y,paths:void 0,pathVisits:void 0},runs:i}}function Xe(t,n,e){let o={...t};for(let[r,s]of n){let a=t[r];if(!a?.length)continue;delete o[r];let c=rt(a),i=c.at(-1),l=s.map(y=>Math.max(e(y),0)),d=l.reduce((y,f)=>y+f,0),u=0;s.forEach((y,f)=>{let h=d?l[f]/d*i:i/s.length,x=f===s.length-1?i:u+h;o[y]=Yt(a,c,u,x),u=x})}return o}function Ce(t,n,e){if(t.length===0)return[];let o=rt(t),r=o.at(-1);return Yt(t,o,n*r,e*r)}function Ht(t){let n=rt(t);return ot(t,n,n.at(-1)/2)}function rt(t){let n=[0];for(let e=1;e<t.length;e++)n.push(n[e-1]+Math.hypot(t[e].x-t[e-1].x,t[e].y-t[e-1].y));return n}function Wt(t,n){let e=0,o=t.length;for(;e<o;){let r=e+o>>1;t[r]<n?e=r+1:o=r}return e}function ot(t,n,e){if(e<=0)return{...t[0]};let o=Wt(n,e);if(o>=n.length)return{...t.at(-1)};let r=n[o]-n[o-1],s=r>0?(e-n[o-1])/r:0,a=t[o-1],c=t[o];return{x:a.x+(c.x-a.x)*s,y:a.y+(c.y-a.y)*s}}function Yt(t,n,e,o){let r=[ot(t,n,e)];for(let s=Wt(n,e);s<t.length&&n[s]<o;s++)n[s]>e&&r.push({...t[s]});return r.push(ot(t,n,o)),r}function $e(t,n){let e=new Set(t.nodes.filter(i=>C(i)&&K(i,n)).map(i=>i.id)),o=t.paths??[];if(e.size===0||o.length===0)return t;let r=o.map(i=>{let l=-1,d=-1;return i.nodeIds.forEach((u,y)=>{e.has(u)&&(l<0&&(l=y),d=y)}),l<0?void 0:{first:l,last:d}});if(r.every((i,l)=>i?.first===0&&i.last===o[l].nodeIds.length-1))return t;let s=new Set,a=[],c=new Map;return o.forEach((i,l)=>{let d=r[l];if(d){let u=i.nodeIds.slice(d.first,d.last+1);for(let y of u)s.add(y);a.push({...i,nodeIds:u}),c.set(i.name,{first:d.first,nodeIds:u})}}),{...t,nodes:t.nodes.filter(i=>s.has(i.id)),edges:t.edges.filter(i=>s.has(i.from)&&s.has(i.to)),paths:a,pathVisits:t.pathVisits&&gn(t.pathVisits,o,r,new Map(t.nodes.map(i=>[i.id,i.name]))),anchorPaths:bt(t,c)}}function gn(t,n,e,o){let r=t.replay(),s=new Mt;return n.forEach((a,c)=>{let i=t.pathIndex($(a.name).name),l=e[c];a.nodeIds.forEach((d,u)=>{let y=o.get(d)??d,f=r(t.slot(y),i);f>=0&&l&&u>=l.first&&u<=l.last&&s.add(y,t.paths[i],t.samples[i],t.start[f],t.reversed[f]===1)})}),s.build()}function He(t,n,e){let o=t.nodes.map(r=>{if(!C(r))return r;let s=r.stable.start,a=s+r.length,[c,i]=K(r,n)?[Math.max(s,n.start),Math.min(a,n.end)]:a<=n.start?[Math.max(s,a-e),a]:[s,Math.min(a,s+e)];return c===s&&i===a?r:{...r,length:i-c,stable:{...r.stable,start:c},unclipped:{start:s,length:r.length}}});return o.some((r,s)=>r!==t.nodes[s])?{...t,nodes:o}:t}function Ft(t){return t.nodes.some(n=>n.unclipped)?{...t,nodes:t.nodes.map(({unclipped:n,...e})=>n&&e.stable?{...e,length:n.length,stable:{...e.stable,start:n.start}}:e)}:t}var wn=1,ze=t=>`skips ${t??"the reference"} sequence (a deletion)`;function An(t,n){return n.flatMap(e=>t[e]??[])}function Gt(t,n,e,o,r,s){let a=t[n.from],c=t[n.to];if(!(!a?.length||!c?.length))return r?kt(a,c,r,s?q(n):void 0):tt(a,c,Ct(n,s),e,o?An(t,o):[])}function _n(t){let n=ht(t.nodes.filter(C),e=>e.stable.refName);for(let e of n.values())e.sort((o,r)=>o.stable.start-r.stable.start);return n}function En(t,n,e){let o=[];if(t)for(let r=xt(t,n);r<t.length;r++){let s=t[r];if(s.stable.start>=e)break;s.stable.start+s.length<=e&&o.push(s.id)}return o}function In(t,n,e,o){let{fromStrand:r,toStrand:s}=t;if(r===void 0||s===void 0)return!0;let a=r===(n.stable.strand??"+"),c=s===(e.stable.strand??"+");return o?a&&c:!a&&!c}function Ln(t,n,e,o){let r;for(let s of o(n))for(let a of o(e)){let c=s<=a,i=c?{start:s+n.length,end:a}:{start:a+e.length,end:s};In(t,n,e,c)&&(!r||Math.abs(i.end-i.start)<Math.abs(r.end-r.start))&&(r=i)}return r}var On=.01;function Sn(t,n){let e=new Map;for(let[o,r]of t){let s=r.flatMap(a=>{let c=n(a);return c.slice(1).map((i,l)=>({at:c[l],copy:i-c[l]}))});s.length&&e.set(o,s.sort((a,c)=>a.at-c.at))}return e}function Pn(t,n,e){if(!t)return!1;let o=yt(t.length,s=>t[s].at<n),r=[t[o-1],t[o]].filter(s=>s!==void 0).sort((s,a)=>Math.abs(s.at-n)-Math.abs(a.at-n))[0];return r!==void 0&&Math.abs(r.at-n)<=r.copy&&Math.abs(e-r.copy)<=r.copy*On}function je(t){let n=Ft(t),e=new Map(n.nodes.map(c=>[c.id,c])),o=_n(n),r=vt(n),s=Sn(o,r),a=[];for(let c=0;c<n.edges.length;c++){let i=n.edges[c],l=e.get(i.from),d=e.get(i.to);if(!i.foldBridge&&l!==void 0&&d!==void 0&&C(l)&&C(d)&&l.stable.refName===d.stable.refName){let u=Ln(i,l,d,r),y=l.stable.refName,f=u?u.end-u.start:0;if(u&&f>=wn&&!Pn(s.get(y),u.start,f)){let{start:h,end:x}=u;a.push({edgeIndex:c,from:i.from,to:i.to,...i.fromStrand?{fromStrand:i.fromStrand}:{},...i.toStrand?{toStrand:i.toStrand}:{},refName:y,start:h,end:x,bp:f,bypassed:En(o.get(y),h,x)})}}}return a}function Nn(t,n){let e=new Map,o=a=>{let c=a;for(;e.has(c);)c=e.get(c);return c!==a&&e.set(a,c),c},r=(a,c)=>{let[i,l]=[o(a),o(c)];return i!==l&&e.set(i,l),i!==l},s=new Set(n.map(a=>a.edgeIndex));return t.edges.forEach((a,c)=>{s.has(c)||r(a.from,a.to)}),new Set(n.filter(a=>!r(a.from,a.to)).map(a=>a.edgeIndex))}function Ue(t,n){return n?.walks.length?t.filter(e=>!n.edgeIndexes.has(e.edgeIndex)):t}var qt=new WeakMap;function Ke(t,n,e=!0){let o=qt.get(n);o||(o=new Map,qt.set(n,o));let r=o.get(e);if(!r){let s=e?new Set:Nn(t,n);r={shown:n.filter(a=>!s.has(a.edgeIndex)),bypassed:new Map(n.map(a=>[a.edgeIndex,a.bypassed])),hidden:s},o.set(e,r)}return r}var Xn=26,Cn=4e4,kn=8,Bn=8,Tn=5.7,Rn=6,$n=13,G=3,V=2;function U(t){return(t.length*Tn+Rn+G)/2}var k=($n+G)/2,Hn=U("1 bp");function z(t,n,e){return{x0:n-t,x1:n+t,y0:e-k,y1:e+k}}function oo(t,n){return{x0:6,x1:6+et(t)+G,y0:n-8-G/2,y1:n+8+G/2}}function j(t,n,e){return e<n?t:Math.min(Math.max(t,n),e)}function zt(t){return String(t).replace(/\B(?=(\d{3})+$)/g,",")}function jt(t){let[n,e]=t>=999500?[t/1e6,"Mb"]:t>=1e3?[t/1e3,"kb"]:[];return n===void 0?`${t} bp`:`${+n.toFixed(n>=100?0:1)} ${e}`}function Dt(t){return`${jt(t)} del`}function Wn(t,n,e,o){let r=t[0],s=t[t.length-1],a=(n.x-(r.x0+s.x1)/2)*e,c=(n.y-(r.y0+s.y1)/2)*o,i=Math.hypot(a,c);return i===0?{x:0,y:-1}:{x:a/i,y:c/i}}function Yn(t,n){return Math.abs(n.x)*(t.x1-t.x0)/2+Math.abs(n.y)*(t.y1-t.y0)/2}function Fn(t,n){let e=(t.x1-t.x0)/2,o=(t.y1-t.y0)/2;return Math.min(n.x===0?1/0:e/Math.abs(n.x),n.y===0?1/0:o/Math.abs(n.y))}function qn(t,n){let e=1/0,o=1/0,r=-1/0,s=-1/0;for(let a of t)for(let c of n[a]??[])e=Math.min(e,c.x),r=Math.max(r,c.x),o=Math.min(o,c.y),s=Math.max(s,c.y);return e===1/0?void 0:{minX:e,minY:o,maxX:r,maxY:s}}var Gn=nt();function Dn(t,n){return Gn(t,[n],()=>Object.entries(t).filter(([e,o])=>o.length>0&&n.has(e)).sort(([e],[o])=>n.get(o)-n.get(e)))}var Vn=nt();function zn(t,n,e,o,r,s){let{scaleX:a,scaleY:c}=e;return Vn(t,[n,r,s,a,c,o],()=>{let i=[];for(let l of[...n].sort((d,u)=>u.bp-d.bp)){let d=Gt(t,l,e,l.bypassed,r?.[l.edgeIndex],s),u=d?Pt(d):void 0;if(d&&u){let{minX:y,minY:f,maxX:h,maxY:x}=Nt(d);i.push({deletion:l,curves:d,apex:u,extent:Math.max((h-y)*a,(x-f)*c)})}}return i})}function jn({nodePositions:t,nodeLengths:n,deletions:e,deletionRoutes:o,stranded:r=!1,alleleDeletions:s,axis:a,translateX:c,translateY:i,width:l,height:d,version:u=0}){let{scaleX:y,scaleY:f}=a,h=[],x=[];for(let{deletion:m,curves:M,apex:g,extent:v}of zn(t,e,a,u,o,r))if(v>=Xn){let w=Dt(m.bp),_=U(w),I=z(_,0,0),E=g.x*y+c,A=g.y*f+i;if(E<0||E>l||A<0||A>d)continue;let N=v>=_*2/V,O=Wn(M,g,y,f),L=Yn(I,O)+Bn,S=N?E:j(E+O.x*L,_,l-_),P=N?A:j(A+O.y*L,k,d-k),X=Math.hypot(S-E,P-A),T;if(X>0){let B={x:(S-E)/X,y:(P-A)/X},R=Fn(I,B);T={arcX:E,arcY:A,labelX:S-B.x*R,labelY:P-B.y*R}}h.push({label:{key:`del:${m.edgeIndex}`,text:w,x:S,y:P,kind:"deletion",leader:T},box:z(_,S,P)})}let p=new Set,b=[...s??[]].sort((m,M)=>M.bp-m.bp);for(let m of b){let M=qn(m.nodeIds,t);if(!M)continue;let g=Math.max(M.minX*y+c,0),v=Math.min(M.maxX*y+c,l),w=Math.max(M.minY*f+i,0),_=Math.min(M.maxY*f+i,d);if(v<g||_<w)continue;let I=Math.max(v-g,_-w),E=Dt(m.bp),A=U(E);if(I>=A*2/V){for(let L of m.nodeIds)p.add(L);let N=j((g+v)/2,A,l-A),O=j((w+_)/2,k,d-k);h.push({label:{key:`alleledel:${m.nodeIds.join(",")}`,text:E,x:N,y:O,kind:"deletion"},box:z(A,N,O)})}}for(let[m,M]of Dn(t,n)){if(p.has(m))continue;let{x:g,y:v}=Ht(M),w=v*f+i;if(w+k<=0||w-k>=d)continue;let _=Z(M,y,f);if(_<Hn*2/V)continue;let I=jt(n.get(m)),E=U(I);if(_>=E*2/V){let A=g*y+c;x.push({label:{key:`node:${m}`,text:I,x:A,y:w,kind:"node"},box:z(E,A,w)})}}return{deletions:h,nodes:x}}function Un(t,n){return Math.max(kn,Math.floor(t*n/Cn))}function Vt(t,n,e=1/0){let o=[];for(let{label:r,box:s}of t){if(o.length>=e)break;n(s)&&o.push(r)}return o}function ro({reserved:t,take:n,...e}){n??=Rt(e,t);let{deletions:o,nodes:r}=jn(e);return[...Vt(o,n),...Vt(r,n,Un(e.width,e.height))]}function fo(t){let n=0;for(let e=0;e<t.length;e++)n=t.charCodeAt(e)+((n<<5)-n);return Math.abs(n%360)}function Kn(t,n){return t*360/n}var Jn=.7,Qn=.5,Zn=16;function uo(t){return t>0&&t<=Zn}function te(t,n){return`hsl(${Kn(t,n)}, ${Jn*100}%, ${Qn*100}%)`}function lo(t,n){return`hsl(0, 0%, ${n>1?25+45*t/(n-1):45}%)`}function ne(t){let n=$(t).name.split("#"),e=n.join("#");if(n.length>=3&&pt(n[0])){let o=n.slice(2).join("#");return[o,o,e]}return[n[0],n.slice(0,2).join("#"),e]}function ee(t,n){let{start:e}=$(t);return n.map(o=>`${o} @${zt(e)}`)}function ho(t,n){let e=new Map;t.forEach((d,u)=>{e.has(d.name)||e.set(d.name,u)});let o=[...e].map(([d,u])=>({name:d,i:u})),r=o.map(d=>ne(d.name)),s=d=>o.map((u,y)=>r[y][d]),a=d=>o.map((u,y)=>ee(u.name,r[y])[d]),c=[s(0),s(1),a(0),s(2),a(1),a(2)],l=c.find(d=>new Set(d).size===o.length)??c.at(-1);return o.map(({name:d,i:u},y)=>({name:d,label:l[y],color:n?.[u]??te(u,t.length)}))}function yo(t){let n=new Map;return new Map([...t].sort((e,o)=>e.label.localeCompare(o.label)).map(e=>{let o=(n.get(e.label)??0)+1;return n.set(e.label,o),[e.name,o>1?`${e.label} (${o})`:e.label]}))}var mo=[{value:"depth",label:"By depth",description:"Thicker the more paths carry a node, on the square root of its depth against the mean. A graph with one depth everywhere draws uniform."},{value:"frequency",label:"By frequency",description:"As wide as the share of haplotypes that pass a node, or its AF tag: full width at 100%, half at 50%, and wider where a haplotype passes it more than once."},{value:"uniform",label:"Uniform",description:"Every node the same thickness."}],oe=.3,st=3,re=.05;function se(t){let n=0,e=0;for(let o of t.nodes)n+=o.depth*o.length,e+=o.length;return e>0?n/e:0}function ce(t){return t.sample===void 0?mt(t.name)??t.name:`${t.sample}#${t.haplotype??0}`}function ae(t){return new Set((t.paths??[]).map(ce)).size}function ie(t,n){return t.frequency??(n>0?t.depth/n:void 0)}function fe(t,n){return n==="depth"?se(t):n==="frequency"?ae(t):0}function Ut(t){return Math.min(st,Math.max(re,t))}function ue(t,n){let e=ie(t,n);return e===void 0?1:Ut(e)}function Mo(t){return[1,.5,.1].map(n=>({label:`${n*100}%`,widthPx:t*Ut(n)}))}function le(t,n){return!(n>0)||!(t.depth>0)?1:Math.min(st,Math.max(oe,Math.sqrt(t.depth/n)))}function de(t,n,e,o){return n*(e==="depth"?le(t,o):e==="frequency"?ue(t,o):1)}function he(t,n){return t*(n==="uniform"?1:st)}var ye=4;function xe(t,n){return Math.max(t/n,ye)}function bo(t,n,e,o,r=0){let s=t?fe(t,o):0,a=c=>r>0?xe(c,r)*r/2:c/2;return{maxHalfWidthPx:a(he(e,o)),halfWidthPx:c=>{let i=n?.get(c);return a(i?de(i,e,o,s):e)}}}var go=[{value:"uniform",label:"Uniform",description:"Every link the same thickness."},{value:"walks",label:"By walks",description:"Thicker the more walks take a link, on the square root of its count against the busiest link in the cut. A graph without walks draws uniform."}],Kt=.5,pe=4;function wo(t){let n=0;for(let e of t.edges)n=Math.max(n,e.pathIds?.length??0);return n}function Ao(t,n,e){return e==="uniform"||n===0?1:Kt+(pe-Kt)*Math.sqrt(t/n)}export{gt as a,be as b,Nt as c,ve as d,ge as e,we as f,F as g,q as h,Xt as i,Ae as j,Z as k,nt as l,Bt as m,Mn as n,D as o,et as p,Rt as q,Ie as r,Ne as s,Xe as t,Ce as u,$e as v,He as w,ze as x,Gt as y,je as z,Ue as A,Ke as B,oo as C,zt as D,jt as E,ro as F,fo as G,Kn as H,Jn as I,Qn as J,Zn as K,uo as L,te as M,lo as N,ho as O,yo as P,mo as Q,se as R,fe as S,Mo as T,de as U,xe as V,bo as W,go as X,wo as Y,Ao as Z};
2
- //# sourceMappingURL=chunk-OPWSPSAE.js.map
@@ -1,2 +0,0 @@
1
- import{c as se,o as re,r as ht}from"./chunk-ELC7POI6.js";import{a as Tt,c as ne,d as Gt,e as Pt}from"./chunk-CL4PYWKC.js";var Se="ws",Ae="we",oe=["elsewhere","break","end"],Te={missing:"not in the graph",elsewhere:"on nodes filed elsewhere",unknown:"gap, cause unknown",abridged:"abridged: steps not loaded",deleted:"deleted in this haplotype"},Pe="outside the extracted subgraph";function ie(t,e,s){if(!e&&!s)return[{bp:t}];let n=Math.min(e?.trimmed??0,t),r=Math.min(s?.trimmed??0,t-n),a=t-n-r,p=e?.kind==="break"?Math.min(e.bp,a):0;a-=p;let l=s?.kind==="break"?Math.min(s.bp,a):0;a-=l;let d=[e,s].find(f=>f?.kind==="elsewhere");return[{bp:n},{bp:p,cause:"missing"},d?.kind==="elsewhere"?{bp:a,cause:"elsewhere",chunk:d.chunk}:{bp:a,cause:"unknown"},{bp:l,cause:"missing"},{bp:r}].filter(f=>f.bp>0)}function Lt(t,e){let s=t.bp[e],n=t.chunkRefs[e];return ce(t.kindNames[t.kinds[e]],Number.isNaN(s)?void 0:s,t.trimmed[e],n<0?void 0:{refName:t.chunkRefNames[n],start:t.chunkStarts[e]})}function ce(t,e,s,n){let r=s>0?{trimmed:s}:{};return t==="elsewhere"&&n?{kind:t,chunk:n,...e===void 0?{}:{bp:e},...r}:t==="break"&&e!==void 0?{kind:t,bp:e,...n?{chunk:n}:{},...r}:t==="end"?{kind:t,...r}:void 0}function ae(t){let[e,...s]=t.split(","),n,r=0,a;for(let p of s)if(p.startsWith("bp="))n=+p.slice(3);else if(p.startsWith("trimmed="))r=+p.slice(8);else if(p.startsWith("chunk=")){let l=p.lastIndexOf(":");a={refName:p.slice(6,l),start:+p.slice(l+1)}}return ce(e,n,r,a)}function Wt(t,e){return{...t?{before:t}:{},...e?{after:e}:{}}}function _e(t){let e=t[Se],s=t[Ae];return Wt(typeof e=="string"?ae(e):void 0,typeof s=="string"?ae(s):void 0)}var Ue=class{constructor(){this.kinds=[],this.bp=[],this.trimmed=[],this.chunkRefs=[],this.chunkStarts=[],this.chunkRefNames=[],this.refIndex=new Map}push(t){this.kinds.push(oe.indexOf(t.kind)),this.bp.push("bp"in t&&t.bp!==void 0?t.bp:NaN),this.trimmed.push(t.trimmed??0);let e="chunk"in t?t.chunk:void 0;if(e){let s=this.refIndex.get(e.refName);s===void 0&&(s=this.chunkRefNames.length,this.refIndex.set(e.refName,s),this.chunkRefNames.push(e.refName)),this.chunkRefs.push(s),this.chunkStarts.push(e.start)}else this.chunkRefs.push(-1),this.chunkStarts.push(NaN)}table(){return{kinds:Uint8Array.from(this.kinds),kindNames:[...oe],bp:Float64Array.from(this.bp),trimmed:Float64Array.from(this.trimmed),chunkRefs:Int32Array.from(this.chunkRefs),chunkStarts:Float64Array.from(this.chunkStarts),chunkRefNames:this.chunkRefNames}}};function Ie(t,e,s){return e===0?t:`${t}:${e}-${s}`}function Dt(t,e){let s=t.names[e],n=Pt(s),r=t.starts[e],a=t.abridgedSteps?.[e]??Number.NaN,p=Number.isNaN(a)?{}:{abridged:{steps:a,bp:t.abridgedBp?.[e]??0}};return n?{name:`${n.sample}#${n.haplotype}#${n.contig}`,start:r,...n,...Wt(t.before&&Lt(t.before,e),t.after&&Lt(t.after,e)),...p}:{name:Ie(s,r,t.ends[e]),start:r}}function Re(t,e,s,n){let r=new Int32Array(s+1);for(let d of t)r[d+1]++;for(let d=0;d<s;d++)r[d+1]+=r[d];let a=r.slice(0,s),p=new Int32Array(t.length);t.forEach((d,k)=>{p[a[d]++]=e[k]});let l=new Int32Array(n.length).fill(-1);return Array.from({length:s},(d,k)=>{let f=[];for(let T=r[k];T<r[k+1];T++){let b=p[T];l[b]!==k&&(l[b]=k,f.push(n[b]))}return f})}function Vt({nodes:t,links:e,walks:s},n){let r=new Uint8Array(t.names.length),a=(l,d)=>{r[l]===0&&(r[l]=d?2:1)};for(let l=0;l<e.from.length;l++)a(e.from[l],e.strands[l]&1),a(e.to[l],e.strands[l]&2);let p=s.offsets[s.names.length]??0;for(let l=0;l<p;l++){let d=s.steps[l];a(d,s.reversed[l]),n&&n[d]++}return t.names.map((l,d)=>`${l}${r[d]===2?"-":"+"}`)}function De({nodes:t,links:e,walks:s,skips:n},r="Imported GFA"){let a=t.names.length,p=t.lengths.length,l=[];for(let o=0;o<s.names.length;o++)s.offsets[o+1]>s.offsets[o]&&l.push(o);let d=new Int32Array(a),k=Vt({nodes:t,links:e,walks:s},d),f=[];for(let o=0;o<p;o++){let w=t.refs[o];f.push({id:k[o],name:t.names[o],length:t.lengths[o],depth:Math.max(d[o],1),stable:w<0?void 0:{refName:t.refNames[w],start:t.starts[o],rank:t.ranks[o]},samples:void 0})}let T=[],b=new Array(a),O=(o,w)=>{let g=b[o];if(g){for(let I=0;I<g.length;I+=2)if(g[I]===w)return g[I+1]}},B=(o,w,g)=>{let I=b[o];I?I.push(w,g):b[o]=[w,g]},dt=[],Y=0;for(let o=0;o<e.from.length;o++){let w=e.from[o],g=e.to[o];T.push({from:k[w],to:k[g],fromStrand:e.strands[o]&1?"-":"+",toStrand:e.strands[o]&2?"-":"+"});let I=O(w,g);I===void 0&&(I=Y++,B(w,g,I),B(g,w,I)),dt.push(I)}let U=new Int32Array(a+1);for(let o=0;o<a;o++)U[o+1]=U[o]+(b[o]?.length??0)/2;let pt=new Int32Array(U[a]),mt=new Int32Array(U[a]);b.forEach((o,w)=>{for(let g=0;g<o.length;g+=2)pt[U[w]+g/2]=o[g],mt[U[w]+g/2]=o[g+1]});let tt=(o,w)=>{for(let g=U[o];g<U[o+1];g++)if(pt[g]===w)return mt[g];return-1},ut=new Map,P=[],et=new Int32Array(s.offsets[s.names.length]??0),st=new Int32Array(et.length),Z=0,X=new Int32Array(Y).fill(-1),F=[],wt=[],_=s.offsets[s.names.length]??0,nt=new Int32Array(_),gt=new Float64Array(_),St=new Uint8Array(_),C=new Int32Array(a).fill(-1),$=[],E=[0],rt=[],At=new Map,L=[];for(let o of l){let w=Dt(s,o),{start:g,name:I}=w,z=w.sample===void 0?s.names[o]:I,K=ut.get(z);K===void 0&&(K=P.length,ut.set(z,K),P.push(z),rt.push(Tt(z)));let at=At.get(I);at===void 0&&(at=L.length,At.set(I,at),L.push(I));let _t=rt[K],Nt=s.offsets[o],It=new Array(s.offsets[o+1]-Nt),bt=g,i=-1;for(let h=Nt;h<s.offsets[o+1];h++){let N=s.steps[h];It[h-Nt]=k[N],C[N]===-1&&(C[N]=E.at(-1),E.push(C[N]+d[N]),$.push(N));let M=C[N]++;if(nt[M]=K,gt[M]=bt,St[M]=s.reversed[h],bt+=N<p?t.lengths[N]:0,i>=0){let x=tt(i,N);x>=0&&X[x]!==o&&(X[x]=o,et[Z]=x,st[Z++]=at)}i=N}F.push({...w,nodeIds:It}),wt.push({name:z,sample:_t,start:g,length:bt-g})}let H=Re(et.subarray(0,Z),st,Y,L);T.forEach((o,w)=>{let g=H[dt[w]];g.length>0&&(o.pathIds=g)});let ot=l.length>0;return{name:r,nodes:f,edges:T,paths:ot?F:void 0,anchorPaths:ot?wt:void 0,pathVisits:ot?new re({segments:$.map(o=>t.names[o]),offsets:Int32Array.from(E),path:nt.subarray(0,E.at(-1)),start:gt.subarray(0,E.at(-1)),reversed:St.subarray(0,E.at(-1)),paths:P,samples:rt}):void 0,anchoredBy:f.some(o=>o.stable)?"tags":void 0,...n?.names.length?{skips:n}:{}}}var Zt=1,de=2,kt=4,pe=[void 0,"missing","elsewhere","unknown","abridged","deleted"],me=3,fe=t=>pe.indexOf(t)<<me;function ue(t,e,s){return e!==void 0&&t.includes(e)?e:t.find(n=>s.has(n))??t[0]}function $e(t){return ue((t.paths??[]).map(e=>ht(e.name).name),t.referencePath,new Set(t.nodes.flatMap(e=>e.stable?.rank===0?[e.stable.refName]:[])))}var ge=t=>{let e=t&&Gt(t);return s=>s!==void 0&&(s===t||s===e)};function xe(t){let e=new Map,s=[],n=[],r=b=>{let O=e.get(b);return O===void 0&&(O=s.length,e.set(b,O),s.push(b),n.push(0)),O},a=$e(t),p=ge(a),l=new Map;for(let b of t.nodes){let O=r(b.id);n[O]=b.length,b.stable?.rank===0&&p(b.stable.refName)&&l.set(O,b.stable.start)}let d=t.paths??[],k=new Int32Array(d.length),f=new Int32Array(d.length),T=[];return d.forEach((b,O)=>{k[O]=T.length;for(let B of b.nodeIds)T.push(r(B));f[O]=T.length}),{heads:d,from:k,to:f,steps:Int32Array.from(T),lengths:Int32Array.from(n),names:s,reference:a,stableStart:b=>l.get(b)??Number.NaN}}function Me(t,e,s){let{nodes:n,walks:r}=t,a=[];for(let f=0;f<r.names.length;f++)r.offsets[f+1]>r.offsets[f]&&a.push(f);let p=a.map(f=>Dt(r,f)),l=new Set;for(let f=0;f<n.lengths.length;f++)n.refs[f]>=0&&n.ranks[f]===0&&l.add(n.refNames[n.refs[f]]);let d=ue(p.map(f=>ht(f.name).name),e,l),k=ge(d);return{heads:p,from:Int32Array.from(a,f=>r.offsets[f]),to:Int32Array.from(a,f=>r.offsets[f+1]),steps:r.steps,lengths:n.lengths,names:s?Vt(t):n.names,reference:d,stableStart:f=>f<n.lengths.length&&n.ranks[f]===0&&k(n.refNames[n.refs[f]])?n.starts[f]:Number.NaN}}function Ht(t){return t.sample??Tt(t.name)}function le(t){return t.haplotype!==void 0&&t.sample!==void 0?`${t.sample}#${t.haplotype}`:Ht(t)}var he=class{constructor(t){this.offsets=[0],this.values=Array.from({length:t},()=>[])}get length(){return this.values[0].length}push(t,e,s,n,r){let a=this.values;a[0].push(t),a[1].push(e),a[2].push(s),a[3].push(n),r!==void 0&&a[4].push(r)}endRow(){this.offsets.push(this.length)}reorder(t,e){let s=new Uint32Array(t.length+1);t.forEach((r,a)=>{s[a+1]=s[a]+this.offsets[r+1]-this.offsets[r]});let n=e.map((r,a)=>{let p=this.values[a],l=r(this.length),d=0;for(let k of t)for(let f=this.offsets[k];f<this.offsets[k+1];f++)l[d++]=p[f];return l});return{offsets:s,columns:n}}},yt=t=>new Float64Array(t);function qe(t,e,s={}){let{heads:n,from:r,to:a,steps:p,lengths:l,names:d,reference:k,stableStart:f}="walks"in t?Me(t,s.referencePath,s.visits):xe(t),T=l.length,b=i=>i<T?l[i]:0,O=i=>ht(n[i].name).name,B=i=>n[i].start,dt=(i,h)=>(B(i)??0)-(B(h)??0),Y=n.map((i,h)=>h),U=Y.filter(i=>O(i)===k).sort(dt),pt=U[0],mt=Y.filter(i=>O(i)!==k),{skips:tt}=t;if(pt===void 0||mt.length===0&&!tt?.names.length)return;let ut=se(mt,O),P=new Float64Array(d.length).fill(Number.NaN),et=new Float64Array(d.length),st=new Map,Z=-1/0,X=1/0,F=e&&e.end>e.start?e:void 0;for(let i of U){let h=B(i)??0;for(let N=r[i],M=a[i];N<M;N++){let x=p[N],A=b(x);if(Number.isNaN(P[x]))P[x]=h,et[x]=h+A,F&&(h+A<=F.start&&(Z=Math.max(Z,h+A)),h>=F.end&&(X=Math.min(X,h)));else{let W=st.get(x);W?W.push(h):st.set(x,[P[x],h])}h+=A}}let wt=F===void 0||Z>-1/0&&X<1/0,_=new he(5),nt=[],gt=new Map,St=i=>{if(!i)return-1;let h=`${i.refName}:${i.start}`,N=gt.get(h);return N===void 0&&(N=nt.length,gt.set(h,N),nt.push(i)),N},C=s.visits?new he(4):void 0,$=new Int32Array(0),E=new Float64Array(0),rt=i=>{let h=n[i[0]],N=[...i].sort(dt),M=N.length-1,x=0;for(let c of N)M+=a[c]-r[c]+(n[c].abridged?1:0),x+=n[c].abridged?.steps??0;M>$.length&&($=new Int32Array(M*2),E=new Float64Array(M*2));let A=0,W=!1,Rt,$t,q=new Map,Ut=0;for(let c of N){let m=B(c),y=m===void 0||Rt===void 0?0:m-Rt;(m===void 0||y<0)&&(W=!0),y<0&&n[$t].abridged&&(Ut-=y);let S=Math.min(Ut,Math.max(y,0));Ut-=S;let u=y-S;u>0&&(q.set(A,ie(u,$t===void 0?void 0:n[$t].after,n[c].before)),$[A]=-u,E[A++]=Rt);let v=m??0,R=n[c].abridged;for(let j=r[c],Q=a[c];j<Q;j++){let G=p[j],V=R?R.bp-(v-(m??0))-b(G):0;V>0&&j===Q-1&&j>r[c]&&(q.set(A,[{bp:V,cause:"abridged"}]),$[A]=-V,E[A++]=v,v+=V),$[A]=G,E[A++]=v,v+=b(G)}Rt=m===void 0?void 0:v,$t=c}let Xt=c=>c>=0&&c<A&&$[c]>=0&&!Number.isNaN(P[$[c]]),jt=c=>{let m=$[c];return E[c]+(m<0?-m:b(m))},Ne=(c,m)=>{let y=c>=0?c:m,S=-1;for(let G=1;S<0&&G<A;G++)S=[y-G,y+G].find(Xt)??-1;if(S<0)return;let u=S>y==P[$[S]]>P[$[y]],v=u===(y===c),R=v?A-1:0,j=Xt(R);return{stop:{contigEnds:j,shortBp:j?Math.max(0,F.start-et[$[R]],P[$[R]]-F.end):0},lo:v?y+1:0,hi:v?A:y,backward:!u,axisStart:u?v?jt(y):E[0]:v?jt(A-1):E[y]}},xt=0,Mt=A,it=!1,zt=!0,vt=-1,Kt=-1,Bt,qt,Jt=(c,m)=>{let S=q.get(c)?.[0];if(m<=0||S?.cause!=="abridged")return 0;let u=Math.min(m,S.bp);return q.set(c,S.bp>u?[{...S,bp:S.bp-u}]:[]),$[c]+=u,u},Qt=c=>q.get(c)?.[0]?.cause==="abridged",be=c=>{let m=$[c];return m<0||q.has(c)?Number.NaN:Number.isNaN(P[m])&&(Qt(c-1)||Qt(c+1))?f(m):P[m]},Ot=0,Yt=0;if(F&&wt){let c=-1,m=-1,y=-1/0,S=1/0;for(let u=0;u<A;u++){let v=be(u);if(!Number.isNaN(v)){let R=v+b($[u]);R<=F.start&&R>y&&(y=R,c=u),v>=F.end&&v<S&&(S=v,m=u)}}if(c<0||m<0){zt=!1;let u=c>=0||m>=0?Ne(c,m):void 0;u&&({lo:xt,hi:Mt,backward:it,axisStart:Bt,stop:qt}=u)}else{xt=Math.min(c,m)+1,Mt=Math.max(c,m),it=c>m,vt=c,Kt=m;let u=it?-1:1;Ot=Jt(c+u,Z-y),Yt=Jt(m-u,S-X)}}let Et=h.contig??Gt(ht(h.name).name),ve=W||A===0?void 0:Bt!==void 0?{contig:Et,start:Bt,reversed:it}:vt<0?{contig:Et,start:E[0],reversed:!1}:vt<Kt?{contig:Et,start:jt(vt)+Ot,reversed:!1}:{contig:Et,start:E[vt]-Ot,reversed:!0},ct=0,te=0,ee=0,ft=0,D=-1,lt=0,J=Number.NaN,Ft=Number.NaN,ke=c=>{let m=st.get(c);if(!m||Number.isNaN(Ft))return P[c];let y=b(c),S=m[0],u=1/0;for(let v of m){let R=Math.min(Math.abs(v-Ft),Math.abs(v+y-Ft));R<u&&(S=v,u=R)}return S},[,Ct,ye,we]=_.values;for(let c=xt;c<Mt;c++){let m=it?Mt-1-(c-xt):c,y=$[m],S=q.get(m);if(S){for(let V of it?[...S].reverse():S)_.push(ct,V.bp,Number.NaN,kt|fe(V.cause),St(V.chunk)),ct+=V.bp;D=_.length-1,lt=kt,J=Number.NaN,ee+=-y,ft=0;continue}let u=b(y),v=ke(y),R=!Number.isNaN(v);C?.push(y,ct,u,R?1:0);let j=D>=0&&!Number.isNaN(J),Q=R&&j&&ft>=0&&J+(Ct[D]??0)===v,G=R&&j&&ft<=0&&v+u===J;!R&&D>=0&&!(lt&(Zt|kt))?Ct[D]+=u:Q||G?(Ct[D]+=u,Q||(J=v,ye[D]=v,lt|=de,we[D]=lt),ft=Q?1:-1):(lt=R?Zt:0,J=R?v:Number.NaN,_.push(ct,u,J,lt,-1),D=_.length-1,ft=0),ct+=u,R?Ft=ft<0?v:v+u:te+=u}return _.endRow(),C?.endRow(),{name:h.name,label:le(h),sample:Ht(h),haplotype:h.haplotype,bp:ct,offReferenceBp:te,gapBp:ee,complete:zt,stop:qt,axis:ve,...x>0?{abridgedSteps:x}:{},...Ot+Yt>0?{estimated:!0}:{}}},At=(i,h,N,M)=>{let x=M?Math.max(h,M.start):h,A=Math.max((M?Math.min(N,M.end):N)-x,0);_.push(x-(M?M.start:h),A,Number.NaN,kt|fe("deleted"),-1),_.endRow(),C?.endRow();let W={name:i,...Pt(i)};return{name:i,label:le(W),sample:Ht(W),haplotype:W.haplotype,bp:0,offReferenceBp:0,gapBp:A,complete:!0,stop:void 0,axis:void 0,deletionBp:N-h}},L=rt(U),H=[...ut.values()].map((i,h)=>({meta:rt(i),row:h+1})),ot=new Set(ut.keys()),{axis:o}=L,w=o?{start:o.start,end:o.start+L.bp+L.gapBp}:F;tt?.names.forEach((i,h)=>{let N=ht(i).name;ot.has(N)||(ot.add(N),H.push({meta:At(N,tt.starts[h],tt.ends[h],w),row:H.length+1}))});let g=[L,...H.map(i=>i.meta)];if(new Set(g.map(i=>i.label)).size<g.length)for(let i of g)i.label=ne(i.name)??i.label;H.sort((i,h)=>Number(h.meta.complete)-Number(i.meta.complete)||h.meta.bp-i.meta.bp||i.meta.label.localeCompare(h.meta.label));let I=[0,...H.map(i=>i.row)],{offsets:z,columns:K}=_.reorder(I,[yt,yt,yt,i=>new Uint8Array(i),i=>new Int32Array(i)]),[at,_t,Nt,It,bt]=K;return{origin:F?F.start:B(pt)??0,rows:[L,...H.map(i=>i.meta)],offsets:z,start:at,bp:_t,referenceStart:Nt,flags:It,chunk:bt,chunks:nt,visits:C&&Oe(C,I,d)}}function Oe(t,e,s){let{offsets:n,columns:r}=t.reorder(e,[k=>new Int32Array(k),yt,yt,k=>new Uint8Array(k)]),[a,p,l,d]=r;return{offsets:n,node:a,start:p,bp:l,onReference:d,names:s}}function Ee(t,e){let s=t.flags[e],n={start:t.start[e],bp:t.bp[e],onReference:(s&Zt)!==0};if(s&kt){n.gap=!0;let r=pe[s>>me&7];r&&(n.cause=r);let a=t.chunks[t.chunk[e]];a&&(n.chunk=a)}else n.referenceStart=Number.isNaN(t.referenceStart[e])?void 0:t.referenceStart[e];return s&de&&(n.reversed=!0),n}function Fe(t,e){let s=[];for(let n=t.offsets[e];n<t.offsets[e+1];n++)s.push({node:t.names[t.node[n]],start:t.start[n],bp:t.bp[n],onReference:t.onReference[n]===1});return s}function Je(t,e){let s=t.rows.map((n,r)=>{let a=[];for(let p=t.offsets[r];p<t.offsets[r+1];p++)a.push(Ee(t,p));return{...n,runs:a,visits:t.visits&&Fe(t.visits,r)}});return{origin:t.origin,unit:e,reference:s[0],rows:s.slice(1)}}export{Se as a,Ae as b,Te as c,Pe as d,ie as e,ae as f,_e as g,Ue as h,Dt as i,De as j,$e as k,qe as l,Je as m};
2
- //# sourceMappingURL=chunk-U6SNNNFV.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../node_modules/.pnpm/@jbrowse+bandage-core@12.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-VA5U4F23.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-FTVESWXT.js", "../../node_modules/.pnpm/@jbrowse+bandage-core@12.5.1/node_modules/@jbrowse/bandage-core/dist/chunks/chunk-YI7CEK4W.js"],
4
- "sourcesContent": ["// src/gfa/walkStops.ts\nvar START_STOP_TAG = \"ws\";\nvar END_STOP_TAG = \"we\";\nvar STOP_KINDS = [\"elsewhere\", \"break\", \"end\"];\nvar GAP_CAUSE_TEXT = {\n missing: \"not in the graph\",\n elsewhere: \"on nodes filed elsewhere\",\n unknown: \"gap, cause unknown\",\n abridged: \"abridged: steps not loaded\",\n // a walk file's skip row: the haplotype jumps over the window\n deleted: \"deleted in this haplotype\"\n};\nvar OUTSIDE_TEXT = \"outside the extracted subgraph\";\nfunction gapParts(bp, after, before) {\n if (!after && !before) {\n return [{ bp }];\n }\n const left = Math.min(after?.trimmed ?? 0, bp);\n const right = Math.min(before?.trimmed ?? 0, bp - left);\n let rest = bp - left - right;\n const lead = after?.kind === \"break\" ? Math.min(after.bp, rest) : 0;\n rest -= lead;\n const trail = before?.kind === \"break\" ? Math.min(before.bp, rest) : 0;\n rest -= trail;\n const elsewhere = [after, before].find((s) => s?.kind === \"elsewhere\");\n const parts = [\n { bp: left },\n { bp: lead, cause: \"missing\" },\n elsewhere?.kind === \"elsewhere\" ? { bp: rest, cause: \"elsewhere\", chunk: elsewhere.chunk } : { bp: rest, cause: \"unknown\" },\n { bp: trail, cause: \"missing\" },\n { bp: right }\n ];\n return parts.filter((part) => part.bp > 0);\n}\nfunction stopAt(table, i) {\n const bp = table.bp[i];\n const ref = table.chunkRefs[i];\n return stopOf(\n table.kindNames[table.kinds[i]],\n Number.isNaN(bp) ? void 0 : bp,\n table.trimmed[i],\n ref < 0 ? void 0 : { refName: table.chunkRefNames[ref], start: table.chunkStarts[i] }\n );\n}\nfunction stopOf(kind, bp, trimmed, chunk) {\n const cut = trimmed > 0 ? { trimmed } : {};\n if (kind === \"elsewhere\" && chunk) {\n return { kind, chunk, ...bp === void 0 ? {} : { bp }, ...cut };\n }\n if (kind === \"break\" && bp !== void 0) {\n return { kind, bp, ...chunk ? { chunk } : {}, ...cut };\n }\n return kind === \"end\" ? { kind, ...cut } : void 0;\n}\nfunction stopTag(stop) {\n const parts = [stop.kind];\n if (\"bp\" in stop && stop.bp !== void 0) {\n parts.push(`bp=${stop.bp}`);\n }\n if (stop.trimmed) {\n parts.push(`trimmed=${stop.trimmed}`);\n }\n if (\"chunk\" in stop && stop.chunk) {\n parts.push(`chunk=${stop.chunk.refName}:${stop.chunk.start}`);\n }\n return parts.join(\",\");\n}\nfunction parseStopTag(value) {\n const [kind, ...fields] = value.split(\",\");\n let bp;\n let trimmed = 0;\n let chunk;\n for (const field of fields) {\n if (field.startsWith(\"bp=\")) {\n bp = +field.slice(3);\n } else if (field.startsWith(\"trimmed=\")) {\n trimmed = +field.slice(8);\n } else if (field.startsWith(\"chunk=\")) {\n const at = field.lastIndexOf(\":\");\n chunk = { refName: field.slice(6, at), start: +field.slice(at + 1) };\n }\n }\n return stopOf(kind, bp, trimmed, chunk);\n}\nfunction stopFields(before, after) {\n return {\n ...before ? { before } : {},\n ...after ? { after } : {}\n };\n}\nfunction walkStopFields(tags) {\n const before = tags[START_STOP_TAG];\n const after = tags[END_STOP_TAG];\n return stopFields(\n typeof before === \"string\" ? parseStopTag(before) : void 0,\n typeof after === \"string\" ? parseStopTag(after) : void 0\n );\n}\nfunction walkStopTags(walks, p) {\n const tags = [];\n for (const [tag, table] of [\n [START_STOP_TAG, walks.before],\n [END_STOP_TAG, walks.after]\n ]) {\n const stop = table && stopAt(table, p);\n if (stop) {\n tags.push(`\t${tag}:Z:${stopTag(stop)}`);\n }\n }\n return tags.join(\"\");\n}\nvar StopColumns = class {\n constructor() {\n this.kinds = [];\n this.bp = [];\n this.trimmed = [];\n this.chunkRefs = [];\n this.chunkStarts = [];\n this.chunkRefNames = [];\n this.refIndex = /* @__PURE__ */ new Map();\n }\n push(stop) {\n this.kinds.push(STOP_KINDS.indexOf(stop.kind));\n this.bp.push(\"bp\" in stop && stop.bp !== void 0 ? stop.bp : NaN);\n this.trimmed.push(stop.trimmed ?? 0);\n const chunk = \"chunk\" in stop ? stop.chunk : void 0;\n if (chunk) {\n let ref = this.refIndex.get(chunk.refName);\n if (ref === void 0) {\n ref = this.chunkRefNames.length;\n this.refIndex.set(chunk.refName, ref);\n this.chunkRefNames.push(chunk.refName);\n }\n this.chunkRefs.push(ref);\n this.chunkStarts.push(chunk.start);\n } else {\n this.chunkRefs.push(-1);\n this.chunkStarts.push(NaN);\n }\n }\n table() {\n return {\n kinds: Uint8Array.from(this.kinds),\n kindNames: [...STOP_KINDS],\n bp: Float64Array.from(this.bp),\n trimmed: Float64Array.from(this.trimmed),\n chunkRefs: Int32Array.from(this.chunkRefs),\n chunkStarts: Float64Array.from(this.chunkStarts),\n chunkRefNames: this.chunkRefNames\n };\n }\n};\n\nexport {\n START_STOP_TAG,\n END_STOP_TAG,\n GAP_CAUSE_TEXT,\n OUTSIDE_TEXT,\n gapParts,\n stopAt,\n stopTag,\n parseStopTag,\n stopFields,\n walkStopFields,\n walkStopTags,\n StopColumns\n};\n", "import {\n stopAt,\n stopFields,\n walkStopTags\n} from \"./chunk-VA5U4F23.js\";\nimport {\n PathVisits\n} from \"./chunk-BEUTROKU.js\";\nimport {\n panSNFields,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/gfa/graphTables.ts\nfunction pLineName(name, start, end) {\n return start === 0 ? name : `${name}:${start}-${end}`;\n}\nfunction tablePath(w, p) {\n const walkName = w.names[p];\n const fields = panSNFields(walkName);\n const start = w.starts[p];\n const steps = w.abridgedSteps?.[p] ?? Number.NaN;\n const abridged = Number.isNaN(steps) ? {} : { abridged: { steps, bp: w.abridgedBp?.[p] ?? 0 } };\n return fields ? {\n name: `${fields.sample}#${fields.haplotype}#${fields.contig}`,\n start,\n ...fields,\n ...stopFields(\n w.before && stopAt(w.before, p),\n w.after && stopAt(w.after, p)\n ),\n ...abridged\n } : { name: pLineName(walkName, start, w.ends[p]), start };\n}\nfunction namesByList(lists, names, listCount, pathNames) {\n const starts = new Int32Array(listCount + 1);\n for (const list of lists) {\n starts[list + 1]++;\n }\n for (let i = 0; i < listCount; i++) {\n starts[i + 1] += starts[i];\n }\n const fill = starts.slice(0, listCount);\n const grouped = new Int32Array(lists.length);\n lists.forEach((list, i) => {\n grouped[fill[list]++] = names[i];\n });\n const listed = new Int32Array(pathNames.length).fill(-1);\n return Array.from({ length: listCount }, (_, list) => {\n const out = [];\n for (let i = starts[list]; i < starts[list + 1]; i++) {\n const k = grouped[i];\n if (listed[k] !== list) {\n listed[k] = list;\n out.push(pathNames[k]);\n }\n }\n return out;\n });\n}\nfunction tableNodeIds({ nodes: n, links: l, walks: w }, traversals) {\n const canonical = new Uint8Array(n.names.length);\n const claim = (node, reversed) => {\n if (canonical[node] === 0) {\n canonical[node] = reversed ? 2 : 1;\n }\n };\n for (let i = 0; i < l.from.length; i++) {\n claim(l.from[i], l.strands[i] & 1);\n claim(l.to[i], l.strands[i] & 2);\n }\n const stepCount = w.offsets[w.names.length] ?? 0;\n for (let s = 0; s < stepCount; s++) {\n const node = w.steps[s];\n claim(node, w.reversed[s]);\n if (traversals) {\n traversals[node]++;\n }\n }\n return n.names.map(\n (segment, i) => `${segment}${canonical[i] === 2 ? \"-\" : \"+\"}`\n );\n}\nfunction graphFromTables({ nodes: n, links: l, walks: w, skips }, name = \"Imported GFA\") {\n const count = n.names.length;\n const declared = n.lengths.length;\n const drawnWalks = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n drawnWalks.push(p);\n }\n }\n const traversals = new Int32Array(count);\n const ids = tableNodeIds({ nodes: n, links: l, walks: w }, traversals);\n const nodes = [];\n for (let i = 0; i < declared; i++) {\n const ref = n.refs[i];\n nodes.push({\n id: ids[i],\n name: n.names[i],\n length: n.lengths[i],\n depth: Math.max(traversals[i], 1),\n stable: ref < 0 ? void 0 : {\n refName: n.refNames[ref],\n start: n.starts[i],\n rank: n.ranks[i]\n },\n samples: void 0\n });\n }\n const edges = [];\n const neighbours = new Array(count);\n const pairList = (a, b) => {\n const near = neighbours[a];\n if (near) {\n for (let j = 0; j < near.length; j += 2) {\n if (near[j] === b) {\n return near[j + 1];\n }\n }\n }\n return void 0;\n };\n const addPair = (a, b, list) => {\n const near = neighbours[a];\n if (near) {\n near.push(b, list);\n } else {\n neighbours[a] = [b, list];\n }\n };\n const edgeLists = [];\n let lists = 0;\n for (let i = 0; i < l.from.length; i++) {\n const a = l.from[i];\n const b = l.to[i];\n edges.push({\n from: ids[a],\n to: ids[b],\n fromStrand: l.strands[i] & 1 ? \"-\" : \"+\",\n toStrand: l.strands[i] & 2 ? \"-\" : \"+\"\n });\n let list = pairList(a, b);\n if (list === void 0) {\n list = lists++;\n addPair(a, b, list);\n addPair(b, a, list);\n }\n edgeLists.push(list);\n }\n const adjacency = new Int32Array(count + 1);\n for (let a = 0; a < count; a++) {\n adjacency[a + 1] = adjacency[a] + (neighbours[a]?.length ?? 0) / 2;\n }\n const adjacentNode = new Int32Array(adjacency[count]);\n const adjacentList = new Int32Array(adjacency[count]);\n neighbours.forEach((near, a) => {\n for (let j = 0; j < near.length; j += 2) {\n adjacentNode[adjacency[a] + j / 2] = near[j];\n adjacentList[adjacency[a] + j / 2] = near[j + 1];\n }\n });\n const listOf = (a, b) => {\n for (let j = adjacency[a]; j < adjacency[a + 1]; j++) {\n if (adjacentNode[j] === b) {\n return adjacentList[j];\n }\n }\n return -1;\n };\n const nameIndex = /* @__PURE__ */ new Map();\n const pathNames = [];\n const crossedList = new Int32Array(w.offsets[w.names.length] ?? 0);\n const crossedName = new Int32Array(crossedList.length);\n let crossings = 0;\n const lastWalk = new Int32Array(lists).fill(-1);\n const paths = [];\n const anchorPaths = [];\n const totalSteps = w.offsets[w.names.length] ?? 0;\n const visitPath = new Int32Array(totalSteps);\n const visitStart = new Float64Array(totalSteps);\n const visitReversed = new Uint8Array(totalSteps);\n const fill = new Int32Array(count).fill(-1);\n const visitOrder = [];\n const blocks = [0];\n const pathSamples = [];\n const edgeNameIndex = /* @__PURE__ */ new Map();\n const edgeNames = [];\n for (const p of drawnWalks) {\n const head = tablePath(w, p);\n const { start, name: pathName } = head;\n const visitName = head.sample === void 0 ? w.names[p] : pathName;\n let named = nameIndex.get(visitName);\n if (named === void 0) {\n named = pathNames.length;\n nameIndex.set(visitName, named);\n pathNames.push(visitName);\n pathSamples.push(panSNSample(visitName));\n }\n let edgeNamed = edgeNameIndex.get(pathName);\n if (edgeNamed === void 0) {\n edgeNamed = edgeNames.length;\n edgeNameIndex.set(pathName, edgeNamed);\n edgeNames.push(pathName);\n }\n const visitSample = pathSamples[named];\n const first = w.offsets[p];\n const nodeIds = new Array(w.offsets[p + 1] - first);\n let pos = start;\n let prev = -1;\n for (let s = first; s < w.offsets[p + 1]; s++) {\n const node = w.steps[s];\n nodeIds[s - first] = ids[node];\n if (fill[node] === -1) {\n fill[node] = blocks.at(-1);\n blocks.push(fill[node] + traversals[node]);\n visitOrder.push(node);\n }\n const at = fill[node]++;\n visitPath[at] = named;\n visitStart[at] = pos;\n visitReversed[at] = w.reversed[s];\n pos += node < declared ? n.lengths[node] : 0;\n if (prev >= 0) {\n const list = listOf(prev, node);\n if (list >= 0 && lastWalk[list] !== p) {\n lastWalk[list] = p;\n crossedList[crossings] = list;\n crossedName[crossings++] = edgeNamed;\n }\n }\n prev = node;\n }\n paths.push({ ...head, nodeIds });\n anchorPaths.push({\n name: visitName,\n sample: visitSample,\n start,\n length: pos - start\n });\n }\n const listNames = namesByList(\n crossedList.subarray(0, crossings),\n crossedName,\n lists,\n edgeNames\n );\n edges.forEach((edge, i) => {\n const names = listNames[edgeLists[i]];\n if (names.length > 0) {\n edge.pathIds = names;\n }\n });\n const walked = drawnWalks.length > 0;\n return {\n name,\n nodes,\n edges,\n paths: walked ? paths : void 0,\n anchorPaths: walked ? anchorPaths : void 0,\n pathVisits: walked ? new PathVisits({\n segments: visitOrder.map((node) => n.names[node]),\n offsets: Int32Array.from(blocks),\n path: visitPath.subarray(0, blocks.at(-1)),\n start: visitStart.subarray(0, blocks.at(-1)),\n reversed: visitReversed.subarray(0, blocks.at(-1)),\n paths: pathNames,\n samples: pathSamples\n }) : void 0,\n anchoredBy: nodes.some((node) => node.stable) ? \"tags\" : void 0,\n ...skips?.names.length ? { skips } : {}\n };\n}\nfunction graphTablesGFA({ nodes, links, walks }) {\n const { names } = nodes;\n const lines = [\"H\tVN:Z:1.1\"];\n for (let i = 0; i < nodes.lengths.length; i++) {\n const ref = nodes.refs[i];\n const stable = ref < 0 ? \"\" : `\tSN:Z:${nodes.refNames[ref]}\tSO:i:${nodes.starts[i]}\tSR:i:${nodes.ranks[i]}`;\n lines.push(`S\t${names[i]}\t*\tLN:i:${nodes.lengths[i]}${stable}`);\n }\n for (let i = 0; i < links.from.length; i++) {\n const strands = links.strands[i];\n lines.push(\n `L\t${names[links.from[i]]}\t${strands & 1 ? \"-\" : \"+\"}\t${names[links.to[i]]}\t${strands & 2 ? \"-\" : \"+\"}\t0M`\n );\n }\n for (let p = 0; p < walks.names.length; p++) {\n const name = walks.names[p];\n const fields = panSNFields(name);\n const start = walks.starts[p];\n const end = walks.ends[p];\n const steps = [];\n for (let s = walks.offsets[p]; s < walks.offsets[p + 1]; s++) {\n steps.push([names[walks.steps[s]], walks.reversed[s]]);\n }\n lines.push(\n fields ? `W\t${fields.sample}\t${fields.haplotype}\t${fields.contig}\t${start}\t${end}\t${steps.map(([id, rev]) => (rev ? \"<\" : \">\") + id).join(\"\")}${walkStopTags(walks, p)}` : `P\t${pLineName(name, start, end)}\t${steps.map(([id, rev]) => id + (rev ? \"-\" : \"+\")).join(\",\")}\t*`\n );\n }\n return lines.join(\"\\n\");\n}\n\nexport {\n tablePath,\n tableNodeIds,\n graphFromTables,\n graphTablesGFA\n};\n", "import {\n tableNodeIds,\n tablePath\n} from \"./chunk-FTVESWXT.js\";\nimport {\n gapParts\n} from \"./chunk-VA5U4F23.js\";\nimport {\n pathOrigin\n} from \"./chunk-BRH73RCH.js\";\nimport {\n groupBy\n} from \"./chunk-BSOZW3FC.js\";\nimport {\n panSNContig,\n panSNFields,\n panSNHaplotype,\n panSNSample\n} from \"./chunk-2JL2JVZ2.js\";\n\n// src/layout/walkRowRuns.ts\nvar RUN_ON_REFERENCE = 1;\nvar RUN_REVERSED = 2;\nvar RUN_GAP = 4;\nvar GAP_CAUSES = [\n void 0,\n \"missing\",\n \"elsewhere\",\n \"unknown\",\n \"abridged\",\n \"deleted\"\n];\nvar CAUSE_SHIFT = 3;\nvar causeFlags = (cause) => GAP_CAUSES.indexOf(cause) << CAUSE_SHIFT;\nfunction referenceOf(names, referencePath, rankZero) {\n return referencePath !== void 0 && names.includes(referencePath) ? referencePath : names.find((n) => rankZero.has(n)) ?? names[0];\n}\nfunction referenceWalkName(graph) {\n return referenceOf(\n (graph.paths ?? []).map((p) => pathOrigin(p.name).name),\n graph.referencePath,\n new Set(\n graph.nodes.flatMap(\n (n) => n.stable?.rank === 0 ? [n.stable.refName] : []\n )\n )\n );\n}\nvar namesReference = (reference) => {\n const contig = reference && panSNContig(reference);\n return (name) => name !== void 0 && (name === reference || name === contig);\n};\nfunction graphPieces(graph) {\n const index = /* @__PURE__ */ new Map();\n const names = [];\n const lengths = [];\n const indexOf = (id) => {\n let i = index.get(id);\n if (i === void 0) {\n i = names.length;\n index.set(id, i);\n names.push(id);\n lengths.push(0);\n }\n return i;\n };\n const reference = referenceWalkName(graph);\n const onReferenceContig = namesReference(reference);\n const stable = /* @__PURE__ */ new Map();\n for (const node of graph.nodes) {\n const i = indexOf(node.id);\n lengths[i] = node.length;\n if (node.stable?.rank === 0 && onReferenceContig(node.stable.refName)) {\n stable.set(i, node.stable.start);\n }\n }\n const heads = graph.paths ?? [];\n const from = new Int32Array(heads.length);\n const to = new Int32Array(heads.length);\n const steps = [];\n heads.forEach((path, p) => {\n from[p] = steps.length;\n for (const id of path.nodeIds) {\n steps.push(indexOf(id));\n }\n to[p] = steps.length;\n });\n return {\n heads,\n from,\n to,\n steps: Int32Array.from(steps),\n lengths: Int32Array.from(lengths),\n names,\n reference,\n stableStart: (node) => stable.get(node) ?? Number.NaN\n };\n}\nfunction tablePieces(tables, referencePath, visits) {\n const { nodes: n, walks: w } = tables;\n const kept = [];\n for (let p = 0; p < w.names.length; p++) {\n if (w.offsets[p + 1] > w.offsets[p]) {\n kept.push(p);\n }\n }\n const heads = kept.map((p) => tablePath(w, p));\n const rankZero = /* @__PURE__ */ new Set();\n for (let i = 0; i < n.lengths.length; i++) {\n if (n.refs[i] >= 0 && n.ranks[i] === 0) {\n rankZero.add(n.refNames[n.refs[i]]);\n }\n }\n const reference = referenceOf(\n heads.map((h) => pathOrigin(h.name).name),\n referencePath,\n rankZero\n );\n const onReferenceContig = namesReference(reference);\n return {\n heads,\n from: Int32Array.from(kept, (p) => w.offsets[p]),\n to: Int32Array.from(kept, (p) => w.offsets[p + 1]),\n steps: w.steps,\n lengths: n.lengths,\n // a visit names its node as the Graph does, which costs a pass over the\n // steps\n names: visits ? tableNodeIds(tables) : n.names,\n reference,\n stableStart: (node) => node < n.lengths.length && n.ranks[node] === 0 && onReferenceContig(n.refNames[n.refs[node]]) ? n.starts[node] : Number.NaN\n };\n}\nfunction sampleOf(path) {\n return path.sample ?? panSNSample(path.name);\n}\nfunction labelOf(path) {\n return path.haplotype !== void 0 && path.sample !== void 0 ? `${path.sample}#${path.haplotype}` : sampleOf(path);\n}\nvar Columns = class {\n constructor(width) {\n this.offsets = [0];\n this.values = Array.from({ length: width }, () => []);\n }\n get length() {\n return this.values[0].length;\n }\n push(a, b, c, d, e) {\n const v = this.values;\n v[0].push(a);\n v[1].push(b);\n v[2].push(c);\n v[3].push(d);\n if (e !== void 0) {\n v[4].push(e);\n }\n }\n endRow() {\n this.offsets.push(this.length);\n }\n // the rows in `order`, column i in the array `make[i]` makes\n reorder(order, make) {\n const offsets = new Uint32Array(order.length + 1);\n order.forEach((row, i) => {\n offsets[i + 1] = offsets[i] + this.offsets[row + 1] - this.offsets[row];\n });\n const columns = make.map((m, c) => {\n const from = this.values[c];\n const out = m(this.length);\n let at = 0;\n for (const row of order) {\n for (let k = this.offsets[row]; k < this.offsets[row + 1]; k++) {\n out[at++] = from[k];\n }\n }\n return out;\n });\n return { offsets, columns };\n }\n};\nvar float64 = (n) => new Float64Array(n);\nfunction walkRowRuns(source, region, o = {}) {\n const {\n heads,\n from,\n to,\n steps: all,\n lengths,\n names,\n reference,\n stableStart\n } = \"walks\" in source ? tablePieces(source, o.referencePath, o.visits) : graphPieces(source);\n const declared = lengths.length;\n const lengthOf = (node) => node < declared ? lengths[node] : 0;\n const nameOf = (p) => pathOrigin(heads[p].name).name;\n const startOf = (p) => heads[p].start;\n const byStart = (a, b) => (startOf(a) ?? 0) - (startOf(b) ?? 0);\n const pieceIds = heads.map((_, p) => p);\n const referencePieces = pieceIds.filter((p) => nameOf(p) === reference).sort(byStart);\n const first = referencePieces[0];\n const others = pieceIds.filter((p) => nameOf(p) !== reference);\n const { skips } = source;\n if (first === void 0 || others.length === 0 && !skips?.names.length) {\n return void 0;\n }\n const walks = groupBy(others, nameOf);\n const spanStart = new Float64Array(names.length).fill(Number.NaN);\n const spanEnd = new Float64Array(names.length);\n const revisits = /* @__PURE__ */ new Map();\n let flankEnd = -Infinity;\n let flankStart = Infinity;\n const cut = region && region.end > region.start ? region : void 0;\n for (const piece of referencePieces) {\n let pos = startOf(piece) ?? 0;\n for (let s = from[piece], stop = to[piece]; s < stop; s++) {\n const node = all[s];\n const len = lengthOf(node);\n if (!Number.isNaN(spanStart[node])) {\n const starts = revisits.get(node);\n if (starts) {\n starts.push(pos);\n } else {\n revisits.set(node, [spanStart[node], pos]);\n }\n } else {\n spanStart[node] = pos;\n spanEnd[node] = pos + len;\n if (cut) {\n if (pos + len <= cut.start) {\n flankEnd = Math.max(flankEnd, pos + len);\n }\n if (pos >= cut.end) {\n flankStart = Math.min(flankStart, pos);\n }\n }\n }\n pos += len;\n }\n }\n const flanked = cut === void 0 || flankEnd > -Infinity && flankStart < Infinity;\n const runs = new Columns(5);\n const chunks = [];\n const chunkIndex = /* @__PURE__ */ new Map();\n const chunkOf = (chunk2) => {\n if (!chunk2) {\n return -1;\n }\n const key = `${chunk2.refName}:${chunk2.start}`;\n let i = chunkIndex.get(key);\n if (i === void 0) {\n i = chunks.length;\n chunkIndex.set(key, i);\n chunks.push(chunk2);\n }\n return i;\n };\n const visits = o.visits ? new Columns(4) : void 0;\n let steps = new Int32Array(0);\n let stepStart = new Float64Array(0);\n const rowOf = (pieces) => {\n const head = heads[pieces[0]];\n const ordered = [...pieces].sort(byStart);\n let count = ordered.length - 1;\n let abridgedSteps = 0;\n for (const piece of ordered) {\n count += to[piece] - from[piece] + (heads[piece].abridged ? 1 : 0);\n abridgedSteps += heads[piece].abridged?.steps ?? 0;\n }\n if (count > steps.length) {\n steps = new Int32Array(count * 2);\n stepStart = new Float64Array(count * 2);\n }\n let length = 0;\n let unplaced = false;\n let end;\n let previous;\n const partsAt = /* @__PURE__ */ new Map();\n let owed = 0;\n for (const piece of ordered) {\n const start2 = startOf(piece);\n const jump = start2 === void 0 || end === void 0 ? 0 : start2 - end;\n if (start2 === void 0 || jump < 0) {\n unplaced = true;\n }\n if (jump < 0 && heads[previous].abridged) {\n owed -= jump;\n }\n const covered = Math.min(owed, Math.max(jump, 0));\n owed -= covered;\n const gap = jump - covered;\n if (gap > 0) {\n partsAt.set(\n length,\n gapParts(\n gap,\n previous === void 0 ? void 0 : heads[previous].after,\n heads[piece].before\n )\n );\n steps[length] = -gap;\n stepStart[length++] = end;\n }\n let pos = start2 ?? 0;\n const abridged = heads[piece].abridged;\n for (let s = from[piece], stop2 = to[piece]; s < stop2; s++) {\n const node = all[s];\n const bp3 = abridged ? abridged.bp - (pos - (start2 ?? 0)) - lengthOf(node) : 0;\n if (bp3 > 0 && s === stop2 - 1 && s > from[piece]) {\n partsAt.set(length, [{ bp: bp3, cause: \"abridged\" }]);\n steps[length] = -bp3;\n stepStart[length++] = pos;\n pos += bp3;\n }\n steps[length] = node;\n stepStart[length++] = pos;\n pos += lengthOf(node);\n }\n end = start2 === void 0 ? void 0 : pos;\n previous = piece;\n }\n const onReference = (i) => i >= 0 && i < length && steps[i] >= 0 && !Number.isNaN(spanStart[steps[i]]);\n const stepEnd = (i) => {\n const id = steps[i];\n return stepStart[i] + (id < 0 ? -id : lengthOf(id));\n };\n const partialSide = (i0, i1) => {\n const flank = i0 >= 0 ? i0 : i1;\n let near = -1;\n for (let d = 1; near < 0 && d < length; d++) {\n near = [flank - d, flank + d].find(onReference) ?? -1;\n }\n if (near < 0) {\n return void 0;\n }\n const forward = near > flank === spanStart[steps[near]] > spanStart[steps[flank]];\n const after = forward === (flank === i0);\n const last2 = after ? length - 1 : 0;\n const contigEnds = onReference(last2);\n const stop2 = {\n contigEnds,\n shortBp: contigEnds ? Math.max(\n 0,\n cut.start - spanEnd[steps[last2]],\n spanStart[steps[last2]] - cut.end\n ) : 0\n };\n return {\n stop: stop2,\n lo: after ? flank + 1 : 0,\n hi: after ? length : flank,\n backward: !forward,\n axisStart: forward ? after ? stepEnd(flank) : stepStart[0] : after ? stepEnd(length - 1) : stepStart[flank]\n };\n };\n let lo = 0;\n let hi = length;\n let backward = false;\n let complete = true;\n let flankFrom = -1;\n let flankTo = -1;\n let axisStart;\n let stop;\n const trimAbridged = (inner, bp3) => {\n const parts = partsAt.get(inner);\n const gap = parts?.[0];\n if (bp3 <= 0 || gap?.cause !== \"abridged\") {\n return 0;\n }\n const trimmed = Math.min(bp3, gap.bp);\n partsAt.set(\n inner,\n gap.bp > trimmed ? [{ ...gap, bp: gap.bp - trimmed }] : []\n );\n steps[inner] += trimmed;\n return trimmed;\n };\n const abridgedAt = (i) => partsAt.get(i)?.[0]?.cause === \"abridged\";\n const placeStart = (i) => {\n const id = steps[i];\n if (id < 0 || partsAt.has(i)) {\n return Number.NaN;\n }\n return Number.isNaN(spanStart[id]) && (abridgedAt(i - 1) || abridgedAt(i + 1)) ? stableStart(id) : spanStart[id];\n };\n let leftTrim = 0;\n let rightTrim = 0;\n if (cut && flanked) {\n let i0 = -1;\n let i1 = -1;\n let bestEnd = -Infinity;\n let bestStart = Infinity;\n for (let i = 0; i < length; i++) {\n const start2 = placeStart(i);\n if (!Number.isNaN(start2)) {\n const end2 = start2 + lengthOf(steps[i]);\n if (end2 <= cut.start && end2 > bestEnd) {\n bestEnd = end2;\n i0 = i;\n }\n if (start2 >= cut.end && start2 < bestStart) {\n bestStart = start2;\n i1 = i;\n }\n }\n }\n if (i0 < 0 || i1 < 0) {\n complete = false;\n const inside = i0 >= 0 || i1 >= 0 ? partialSide(i0, i1) : void 0;\n if (inside) {\n ;\n ({ lo, hi, backward, axisStart, stop } = inside);\n }\n } else {\n lo = Math.min(i0, i1) + 1;\n hi = Math.max(i0, i1);\n backward = i0 > i1;\n flankFrom = i0;\n flankTo = i1;\n const inward = backward ? -1 : 1;\n leftTrim = trimAbridged(i0 + inward, flankEnd - bestEnd);\n rightTrim = trimAbridged(i1 - inward, bestStart - flankStart);\n }\n }\n const contig = head.contig ?? panSNContig(pathOrigin(head.name).name);\n const axis2 = unplaced || length === 0 ? void 0 : axisStart !== void 0 ? { contig, start: axisStart, reversed: backward } : flankFrom < 0 ? { contig, start: stepStart[0], reversed: false } : flankFrom < flankTo ? {\n contig,\n start: stepEnd(flankFrom) + leftTrim,\n reversed: false\n } : {\n contig,\n start: stepStart[flankFrom] - leftTrim,\n reversed: true\n };\n let bp2 = 0;\n let offReferenceBp = 0;\n let gapBp = 0;\n let step = 0;\n let last = -1;\n let lastFlags = 0;\n let lastRef = Number.NaN;\n let cursor = Number.NaN;\n const placeOf = (id) => {\n const starts = revisits.get(id);\n if (!starts || Number.isNaN(cursor)) {\n return spanStart[id];\n }\n const len = lengthOf(id);\n let best = starts[0];\n let bestGap = Infinity;\n for (const start2 of starts) {\n const gap = Math.min(\n Math.abs(start2 - cursor),\n Math.abs(start2 + len - cursor)\n );\n if (gap < bestGap) {\n best = start2;\n bestGap = gap;\n }\n }\n return best;\n };\n const [, runBp, runRef, runFlags] = runs.values;\n for (let k = lo; k < hi; k++) {\n const index = backward ? hi - 1 - (k - lo) : k;\n const id = steps[index];\n const parts = partsAt.get(index);\n if (parts) {\n for (const part of backward ? [...parts].reverse() : parts) {\n runs.push(\n bp2,\n part.bp,\n Number.NaN,\n RUN_GAP | causeFlags(part.cause),\n chunkOf(part.chunk)\n );\n bp2 += part.bp;\n }\n last = runs.length - 1;\n lastFlags = RUN_GAP;\n lastRef = Number.NaN;\n gapBp += -id;\n step = 0;\n continue;\n }\n const len = lengthOf(id);\n const at = placeOf(id);\n const on = !Number.isNaN(at);\n visits?.push(id, bp2, len, on ? 1 : 0);\n const placed = last >= 0 && !Number.isNaN(lastRef);\n const forward = on && placed && step >= 0 && lastRef + (runBp[last] ?? 0) === at;\n const back = on && placed && step <= 0 && at + len === lastRef;\n if (!on && last >= 0 && !(lastFlags & (RUN_ON_REFERENCE | RUN_GAP))) {\n runBp[last] += len;\n } else if (forward || back) {\n runBp[last] += len;\n if (!forward) {\n lastRef = at;\n runRef[last] = at;\n lastFlags |= RUN_REVERSED;\n runFlags[last] = lastFlags;\n }\n step = forward ? 1 : -1;\n } else {\n lastFlags = on ? RUN_ON_REFERENCE : 0;\n lastRef = on ? at : Number.NaN;\n runs.push(bp2, len, lastRef, lastFlags, -1);\n last = runs.length - 1;\n step = 0;\n }\n bp2 += len;\n if (on) {\n cursor = step < 0 ? at : at + len;\n } else {\n offReferenceBp += len;\n }\n }\n runs.endRow();\n visits?.endRow();\n return {\n name: head.name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: bp2,\n offReferenceBp,\n gapBp,\n complete,\n stop,\n axis: axis2,\n ...abridgedSteps > 0 ? { abridgedSteps } : {},\n ...leftTrim + rightTrim > 0 ? { estimated: true } : {}\n };\n };\n const skipRowOf = (name, start2, end, bar2) => {\n const from2 = bar2 ? Math.max(start2, bar2.start) : start2;\n const bp2 = Math.max((bar2 ? Math.min(end, bar2.end) : end) - from2, 0);\n runs.push(\n from2 - (bar2 ? bar2.start : start2),\n bp2,\n Number.NaN,\n RUN_GAP | causeFlags(\"deleted\"),\n -1\n );\n runs.endRow();\n visits?.endRow();\n const head = { name, ...panSNFields(name) };\n return {\n name,\n label: labelOf(head),\n sample: sampleOf(head),\n haplotype: head.haplotype,\n bp: 0,\n offReferenceBp: 0,\n gapBp: bp2,\n complete: true,\n stop: void 0,\n axis: void 0,\n deletionBp: end - start2\n };\n };\n const referenceRow = rowOf(referencePieces);\n const rows = [...walks.values()].map((pieces, i) => ({\n meta: rowOf(pieces),\n row: i + 1\n }));\n const drawn = new Set(walks.keys());\n const { axis } = referenceRow;\n const bar = axis ? {\n start: axis.start,\n end: axis.start + referenceRow.bp + referenceRow.gapBp\n } : cut;\n skips?.names.forEach((name, k) => {\n const contig = pathOrigin(name).name;\n if (!drawn.has(contig)) {\n drawn.add(contig);\n rows.push({\n meta: skipRowOf(contig, skips.starts[k], skips.ends[k], bar),\n row: rows.length + 1\n });\n }\n });\n const metas = [referenceRow, ...rows.map((r) => r.meta)];\n if (new Set(metas.map((m) => m.label)).size < metas.length) {\n for (const meta of metas) {\n meta.label = panSNHaplotype(meta.name) ?? meta.label;\n }\n }\n rows.sort(\n (a, b) => Number(b.meta.complete) - Number(a.meta.complete) || b.meta.bp - a.meta.bp || a.meta.label.localeCompare(b.meta.label)\n );\n const order = [0, ...rows.map((r) => r.row)];\n const { offsets, columns } = runs.reorder(order, [\n float64,\n float64,\n float64,\n (n) => new Uint8Array(n),\n (n) => new Int32Array(n)\n ]);\n const [start, bp, referenceStart, flags, chunk] = columns;\n return {\n origin: cut ? cut.start : startOf(first) ?? 0,\n rows: [referenceRow, ...rows.map((r) => r.meta)],\n offsets,\n start,\n bp,\n referenceStart,\n flags,\n chunk,\n chunks,\n visits: visits && visitColumns(visits, order, names)\n };\n}\nfunction visitColumns(visits, order, names) {\n const { offsets, columns } = visits.reorder(order, [\n (n) => new Int32Array(n),\n float64,\n float64,\n (n) => new Uint8Array(n)\n ]);\n const [node, start, bp, onReference] = columns;\n return { offsets, node, start, bp, onReference, names };\n}\nfunction runAt(t, k) {\n const f = t.flags[k];\n const run = {\n start: t.start[k],\n bp: t.bp[k],\n onReference: (f & RUN_ON_REFERENCE) !== 0\n };\n if (f & RUN_GAP) {\n run.gap = true;\n const cause = GAP_CAUSES[f >> CAUSE_SHIFT & 7];\n if (cause) {\n run.cause = cause;\n }\n const chunk = t.chunks[t.chunk[k]];\n if (chunk) {\n run.chunk = chunk;\n }\n } else {\n run.referenceStart = Number.isNaN(t.referenceStart[k]) ? void 0 : t.referenceStart[k];\n }\n if (f & RUN_REVERSED) {\n run.reversed = true;\n }\n return run;\n}\nfunction visitsOf(v, row) {\n const out = [];\n for (let k = v.offsets[row]; k < v.offsets[row + 1]; k++) {\n out.push({\n node: v.names[v.node[k]],\n start: v.start[k],\n bp: v.bp[k],\n onReference: v.onReference[k] === 1\n });\n }\n return out;\n}\nfunction walkRowsOf(t, unit) {\n const rows = t.rows.map((meta, i) => {\n const runs = [];\n for (let k = t.offsets[i]; k < t.offsets[i + 1]; k++) {\n runs.push(runAt(t, k));\n }\n return {\n ...meta,\n runs,\n visits: t.visits && visitsOf(t.visits, i)\n };\n });\n return { origin: t.origin, unit, reference: rows[0], rows: rows.slice(1) };\n}\n\nexport {\n referenceWalkName,\n walkRowRuns,\n runAt,\n walkRowsOf\n};\n"],
5
- "mappings": "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",
6
- "names": ["START_STOP_TAG", "END_STOP_TAG", "STOP_KINDS", "GAP_CAUSE_TEXT", "OUTSIDE_TEXT", "gapParts", "bp", "after", "before", "left", "right", "rest", "lead", "trail", "elsewhere", "s", "part", "stopAt", "table", "i", "ref", "stopOf", "kind", "trimmed", "chunk", "cut", "parseStopTag", "value", "kind", "fields", "bp", "trimmed", "chunk", "field", "at", "stopOf", "stopFields", "before", "after", "walkStopFields", "tags", "START_STOP_TAG", "END_STOP_TAG", "StopColumns", "stop", "STOP_KINDS", "chunk", "ref", "pLineName", "name", "start", "end", "tablePath", "w", "p", "walkName", "fields", "panSNFields", "steps", "abridged", "stopFields", "stopAt", "namesByList", "lists", "names", "listCount", "pathNames", "starts", "list", "i", "fill", "grouped", "listed", "_", "out", "k", "tableNodeIds", "n", "l", "traversals", "canonical", "claim", "node", "reversed", "stepCount", "s", "segment", "graphFromTables", "skips", "count", "declared", "drawnWalks", "ids", "nodes", "ref", "edges", "neighbours", "pairList", "a", "b", "near", "j", "addPair", "edgeLists", "adjacency", "adjacentNode", "adjacentList", "listOf", "nameIndex", "crossedList", "crossedName", "crossings", "lastWalk", "paths", "anchorPaths", "totalSteps", "visitPath", "visitStart", "visitReversed", "visitOrder", "blocks", "pathSamples", "edgeNameIndex", "edgeNames", "head", "pathName", "visitName", "named", "panSNSample", "edgeNamed", "visitSample", "first", "nodeIds", "pos", "prev", "at", "listNames", "edge", "walked", "PathVisits", "RUN_ON_REFERENCE", "RUN_REVERSED", "RUN_GAP", "GAP_CAUSES", "CAUSE_SHIFT", "causeFlags", "cause", "referenceOf", "names", "referencePath", "rankZero", "referenceWalkName", "graph", "p", "pathOrigin", "n", "namesReference", "reference", "contig", "panSNContig", "name", "graphPieces", "index", "lengths", "indexOf", "id", "i", "onReferenceContig", "stable", "node", "heads", "from", "to", "steps", "path", "tablePieces", "tables", "visits", "w", "kept", "tablePath", "h", "tableNodeIds", "sampleOf", "panSNSample", "labelOf", "Columns", "width", "a", "b", "c", "d", "e", "v", "order", "make", "offsets", "row", "columns", "m", "out", "at", "k", "float64", "walkRowRuns", "source", "region", "o", "all", "stableStart", "declared", "lengthOf", "nameOf", "startOf", "byStart", "pieceIds", "_", "referencePieces", "first", "others", "skips", "walks", "groupBy", "spanStart", "spanEnd", "revisits", "flankEnd", "flankStart", "cut", "piece", "pos", "s", "stop", "len", "starts", "flanked", "runs", "chunks", "chunkIndex", "chunkOf", "chunk2", "key", "stepStart", "rowOf", "pieces", "head", "ordered", "count", "abridgedSteps", "length", "unplaced", "end", "previous", "partsAt", "owed", "start2", "jump", "covered", "gap", "gapParts", "abridged", "stop2", "bp3", "onReference", "stepEnd", "partialSide", "i0", "i1", "flank", "near", "forward", "after", "last2", "contigEnds", "lo", "hi", "backward", "complete", "flankFrom", "flankTo", "axisStart", "trimAbridged", "inner", "trimmed", "abridgedAt", "placeStart", "leftTrim", "rightTrim", "bestEnd", "bestStart", "end2", "inside", "inward", "axis2", "bp2", "offReferenceBp", "gapBp", "step", "last", "lastFlags", "lastRef", "cursor", "placeOf", "best", "bestGap", "runBp", "runRef", "runFlags", "parts", "part", "on", "placed", "back", "skipRowOf", "bar2", "from2", "panSNFields", "referenceRow", "rows", "drawn", "axis", "bar", "metas", "r", "meta", "panSNHaplotype", "start", "bp", "referenceStart", "flags", "chunk", "visitColumns", "runAt", "f", "run", "visitsOf", "walkRowsOf", "unit"]
7
- }