@genome-spy/core 0.36.1 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (523) hide show
  1. package/README.md +1 -0
  2. package/dist/{index.es.js → bundled/index.es.js} +2253 -2115
  3. package/dist/{index.js → bundled/index.js} +180 -44
  4. package/dist/src/data/collector.d.ts +36 -0
  5. package/dist/src/data/collector.d.ts.map +1 -0
  6. package/dist/src/data/collector.js +184 -0
  7. package/dist/src/data/collector.test.js +84 -0
  8. package/dist/src/data/dataFlow.d.ts +65 -0
  9. package/dist/src/data/dataFlow.d.ts.map +1 -0
  10. package/dist/src/data/dataFlow.js +142 -0
  11. package/dist/src/data/dataFlow.test.js +5 -0
  12. package/dist/src/data/facetNode.d.ts +17 -0
  13. package/dist/src/data/facetNode.d.ts.map +1 -0
  14. package/dist/src/data/facetNode.js +17 -0
  15. package/dist/src/data/flow.test.js +72 -0
  16. package/dist/src/data/flowNode.d.ts +136 -0
  17. package/dist/src/data/flowNode.d.ts.map +1 -0
  18. package/dist/src/data/flowNode.js +286 -0
  19. package/dist/src/data/flowNode.test.js +50 -0
  20. package/dist/src/data/flowOptimizer.d.ts +27 -0
  21. package/dist/src/data/flowOptimizer.d.ts.map +1 -0
  22. package/dist/src/data/flowOptimizer.js +133 -0
  23. package/dist/src/data/flowOptimizer.test.js +193 -0
  24. package/dist/src/data/flowTestUtils.d.ts +30 -0
  25. package/dist/src/data/flowTestUtils.d.ts.map +1 -0
  26. package/dist/src/data/flowTestUtils.js +63 -0
  27. package/dist/src/data/formats/fasta.d.ts +20 -0
  28. package/dist/src/data/formats/fasta.d.ts.map +1 -0
  29. package/dist/src/data/formats/fasta.js +32 -0
  30. package/dist/src/data/formats/fasta.test.js +27 -0
  31. package/dist/src/data/sources/dataSource.d.ts +12 -0
  32. package/dist/src/data/sources/dataSource.d.ts.map +1 -0
  33. package/dist/src/data/sources/dataSource.js +25 -0
  34. package/dist/src/data/sources/dataSourceFactory.d.ts +16 -0
  35. package/dist/src/data/sources/dataSourceFactory.d.ts.map +1 -0
  36. package/dist/src/data/sources/dataSourceFactory.js +127 -0
  37. package/dist/src/data/sources/dataUtils.d.ts +50 -0
  38. package/dist/src/data/sources/dataUtils.d.ts.map +1 -0
  39. package/dist/src/data/sources/dataUtils.js +83 -0
  40. package/dist/src/data/sources/dynamic/README.md +3 -0
  41. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts +13 -0
  42. package/dist/src/data/sources/dynamic/axisGenomeSource.d.ts.map +1 -0
  43. package/dist/src/data/sources/dynamic/axisGenomeSource.js +19 -0
  44. package/dist/src/data/sources/dynamic/axisTickSource.d.ts +18 -0
  45. package/dist/src/data/sources/dynamic/axisTickSource.d.ts.map +1 -0
  46. package/dist/src/data/sources/dynamic/axisTickSource.js +73 -0
  47. package/dist/src/data/sources/dynamic/bamSource.d.ts +46 -0
  48. package/dist/src/data/sources/dynamic/bamSource.d.ts.map +1 -0
  49. package/dist/src/data/sources/dynamic/bamSource.js +115 -0
  50. package/dist/src/data/sources/dynamic/bigBedSource.d.ts +51 -0
  51. package/dist/src/data/sources/dynamic/bigBedSource.d.ts.map +1 -0
  52. package/dist/src/data/sources/dynamic/bigBedSource.js +128 -0
  53. package/dist/src/data/sources/dynamic/bigWigSource.d.ts +58 -0
  54. package/dist/src/data/sources/dynamic/bigWigSource.d.ts.map +1 -0
  55. package/dist/src/data/sources/dynamic/bigWigSource.js +166 -0
  56. package/dist/src/data/sources/dynamic/gff3Source.d.ts +8 -0
  57. package/dist/src/data/sources/dynamic/gff3Source.d.ts.map +1 -0
  58. package/dist/src/data/sources/dynamic/gff3Source.js +19 -0
  59. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts +30 -0
  60. package/dist/src/data/sources/dynamic/indexedFastaSource.d.ts.map +1 -0
  61. package/dist/src/data/sources/dynamic/indexedFastaSource.js +86 -0
  62. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts +42 -0
  63. package/dist/src/data/sources/dynamic/singleAxisLazySource.d.ts.map +1 -0
  64. package/dist/src/data/sources/dynamic/singleAxisLazySource.js +129 -0
  65. package/dist/src/data/sources/dynamic/tabixSource.d.ts +54 -0
  66. package/dist/src/data/sources/dynamic/tabixSource.d.ts.map +1 -0
  67. package/dist/src/data/sources/dynamic/tabixSource.js +140 -0
  68. package/dist/src/data/sources/dynamic/windowedMixin.d.ts +32 -0
  69. package/dist/src/data/sources/dynamic/windowedMixin.d.ts.map +1 -0
  70. package/dist/src/data/sources/dynamic/windowedMixin.js +53 -0
  71. package/dist/src/data/sources/inlineSource.d.ts +16 -0
  72. package/dist/src/data/sources/inlineSource.d.ts.map +1 -0
  73. package/dist/src/data/sources/inlineSource.js +68 -0
  74. package/dist/src/data/sources/inlineSource.test.js +56 -0
  75. package/dist/src/data/sources/namedSource.d.ts +25 -0
  76. package/dist/src/data/sources/namedSource.d.ts.map +1 -0
  77. package/dist/src/data/sources/namedSource.js +80 -0
  78. package/dist/src/data/sources/sequenceSource.d.ts +17 -0
  79. package/dist/src/data/sources/sequenceSource.d.ts.map +1 -0
  80. package/dist/src/data/sources/sequenceSource.js +47 -0
  81. package/dist/src/data/sources/sequenceSource.test.js +46 -0
  82. package/dist/src/data/sources/urlSource.d.ts +16 -0
  83. package/dist/src/data/sources/urlSource.d.ts.map +1 -0
  84. package/dist/src/data/sources/urlSource.js +74 -0
  85. package/dist/src/data/transforms/aggregate.d.ts +18 -0
  86. package/dist/src/data/transforms/aggregate.d.ts.map +1 -0
  87. package/dist/src/data/transforms/aggregate.js +67 -0
  88. package/dist/src/data/transforms/clone.d.ts +15 -0
  89. package/dist/src/data/transforms/clone.d.ts.map +1 -0
  90. package/dist/src/data/transforms/clone.js +40 -0
  91. package/dist/src/data/transforms/clone.test.js +11 -0
  92. package/dist/src/data/transforms/coverage.d.ts +30 -0
  93. package/dist/src/data/transforms/coverage.d.ts.map +1 -0
  94. package/dist/src/data/transforms/coverage.js +183 -0
  95. package/dist/src/data/transforms/coverage.test.js +123 -0
  96. package/dist/src/data/transforms/filter.d.ts +12 -0
  97. package/dist/src/data/transforms/filter.d.ts.map +1 -0
  98. package/dist/src/data/transforms/filter.js +33 -0
  99. package/dist/src/data/transforms/filter.test.js +18 -0
  100. package/dist/src/data/transforms/filterScoredLabels.d.ts +29 -0
  101. package/dist/src/data/transforms/filterScoredLabels.d.ts.map +1 -0
  102. package/dist/src/data/transforms/filterScoredLabels.js +134 -0
  103. package/dist/src/data/transforms/flatten.d.ts +10 -0
  104. package/dist/src/data/transforms/flatten.d.ts.map +1 -0
  105. package/dist/src/data/transforms/flatten.js +68 -0
  106. package/dist/src/data/transforms/flatten.test.js +93 -0
  107. package/dist/src/data/transforms/flattenCompressedExons.d.ts +19 -0
  108. package/dist/src/data/transforms/flattenCompressedExons.d.ts.map +1 -0
  109. package/dist/src/data/transforms/flattenCompressedExons.js +53 -0
  110. package/dist/src/data/transforms/flattenDelimited.d.ts +10 -0
  111. package/dist/src/data/transforms/flattenDelimited.d.ts.map +1 -0
  112. package/dist/src/data/transforms/flattenDelimited.js +66 -0
  113. package/dist/src/data/transforms/flattenDelimited.test.js +87 -0
  114. package/dist/src/data/transforms/flattenSequence.d.ts +11 -0
  115. package/dist/src/data/transforms/flattenSequence.d.ts.map +1 -0
  116. package/dist/src/data/transforms/flattenSequence.js +35 -0
  117. package/dist/src/data/transforms/flattenSequence.test.js +34 -0
  118. package/dist/src/data/transforms/formula.d.ts +13 -0
  119. package/dist/src/data/transforms/formula.d.ts.map +1 -0
  120. package/dist/src/data/transforms/formula.js +35 -0
  121. package/dist/src/data/transforms/formula.test.js +19 -0
  122. package/dist/src/data/transforms/identifier.d.ts +40 -0
  123. package/dist/src/data/transforms/identifier.d.ts.map +1 -0
  124. package/dist/src/data/transforms/identifier.js +106 -0
  125. package/dist/src/data/transforms/identifier.test.js +83 -0
  126. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts +10 -0
  127. package/dist/src/data/transforms/linearizeGenomicCoordinate.d.ts.map +1 -0
  128. package/dist/src/data/transforms/linearizeGenomicCoordinate.js +97 -0
  129. package/dist/src/data/transforms/measureText.d.ts +18 -0
  130. package/dist/src/data/transforms/measureText.d.ts.map +1 -0
  131. package/dist/src/data/transforms/measureText.js +42 -0
  132. package/dist/src/data/transforms/pileup.d.ts +10 -0
  133. package/dist/src/data/transforms/pileup.d.ts.map +1 -0
  134. package/dist/src/data/transforms/pileup.js +126 -0
  135. package/dist/src/data/transforms/pileup.test.js +70 -0
  136. package/dist/src/data/transforms/project.d.ts +13 -0
  137. package/dist/src/data/transforms/project.d.ts.map +1 -0
  138. package/dist/src/data/transforms/project.js +38 -0
  139. package/dist/src/data/transforms/project.test.js +32 -0
  140. package/dist/src/data/transforms/regexExtract.d.ts +13 -0
  141. package/dist/src/data/transforms/regexExtract.d.ts.map +1 -0
  142. package/dist/src/data/transforms/regexExtract.js +57 -0
  143. package/dist/src/data/transforms/regexExtract.test.js +67 -0
  144. package/dist/src/data/transforms/regexFold.d.ts +14 -0
  145. package/dist/src/data/transforms/regexFold.d.ts.map +1 -0
  146. package/dist/src/data/transforms/regexFold.js +139 -0
  147. package/dist/src/data/transforms/regexFold.test.js +160 -0
  148. package/dist/src/data/transforms/sample.d.ts +42 -0
  149. package/dist/src/data/transforms/sample.d.ts.map +1 -0
  150. package/dist/src/data/transforms/sample.js +99 -0
  151. package/dist/src/data/transforms/sample.test.js +38 -0
  152. package/dist/src/data/transforms/stack.d.ts +11 -0
  153. package/dist/src/data/transforms/stack.d.ts.map +1 -0
  154. package/dist/src/data/transforms/stack.js +134 -0
  155. package/dist/src/data/transforms/stack.test.js +91 -0
  156. package/dist/src/data/transforms/transformFactory.d.ts +12 -0
  157. package/dist/src/data/transforms/transformFactory.d.ts.map +1 -0
  158. package/dist/src/data/transforms/transformFactory.js +59 -0
  159. package/dist/src/encoder/accessor.d.ts +15 -0
  160. package/dist/src/encoder/accessor.d.ts.map +1 -0
  161. package/dist/src/encoder/accessor.js +76 -0
  162. package/dist/src/encoder/accessor.test.js +47 -0
  163. package/dist/src/encoder/encoder.d.ts +144 -0
  164. package/dist/src/encoder/encoder.d.ts.map +1 -0
  165. package/dist/src/encoder/encoder.js +400 -0
  166. package/dist/src/encoder/encoder.test.js +98 -0
  167. package/dist/src/fonts/Lato-Regular.json +1267 -0
  168. package/dist/src/fonts/Lato-Regular.png +0 -0
  169. package/dist/src/fonts/OFL.txt +93 -0
  170. package/dist/src/fonts/README.md +3 -0
  171. package/dist/src/fonts/bmFontManager.d.ts +182 -0
  172. package/dist/src/fonts/bmFontManager.d.ts.map +1 -0
  173. package/dist/src/fonts/bmFontManager.js +359 -0
  174. package/dist/src/fonts/bmFontMetrics.d.ts +45 -0
  175. package/dist/src/fonts/bmFontMetrics.d.ts.map +1 -0
  176. package/dist/src/fonts/bmFontMetrics.js +108 -0
  177. package/dist/src/genome/genome.d.ts +172 -0
  178. package/dist/src/genome/genome.d.ts.map +1 -0
  179. package/dist/src/genome/genome.js +379 -0
  180. package/dist/src/genome/genome.test.js +226 -0
  181. package/dist/src/genome/genomeStore.d.ts +20 -0
  182. package/dist/src/genome/genomeStore.d.ts.map +1 -0
  183. package/dist/src/genome/genomeStore.js +54 -0
  184. package/dist/src/genome/locusFormat.d.ts +14 -0
  185. package/dist/src/genome/locusFormat.d.ts.map +1 -0
  186. package/dist/src/genome/locusFormat.js +37 -0
  187. package/dist/src/genome/scaleIndex.d.ts +6 -0
  188. package/dist/src/genome/scaleIndex.d.ts.map +1 -0
  189. package/dist/src/genome/scaleIndex.js +165 -0
  190. package/dist/src/genome/scaleIndex.test.js +78 -0
  191. package/dist/src/genome/scaleLocus.d.ts +3 -0
  192. package/dist/src/genome/scaleLocus.d.ts.map +1 -0
  193. package/dist/src/genome/scaleLocus.js +101 -0
  194. package/dist/src/genome/scaleLocus.test.js +4 -0
  195. package/dist/src/genomeSpy.d.ts +141 -0
  196. package/dist/src/genomeSpy.d.ts.map +1 -0
  197. package/dist/src/genomeSpy.js +788 -0
  198. package/dist/src/gl/arrayBuilder.d.ts +71 -0
  199. package/dist/src/gl/arrayBuilder.d.ts.map +1 -0
  200. package/dist/src/gl/arrayBuilder.js +199 -0
  201. package/dist/src/gl/dataToVertices.d.ts +194 -0
  202. package/dist/src/gl/dataToVertices.d.ts.map +1 -0
  203. package/dist/src/gl/dataToVertices.js +639 -0
  204. package/dist/src/gl/includes/common.glsl.js +2 -0
  205. package/dist/src/gl/includes/picking.fragment.glsl.js +2 -0
  206. package/dist/src/gl/includes/picking.vertex.glsl.js +2 -0
  207. package/dist/src/gl/includes/sampleFacet.glsl.js +2 -0
  208. package/dist/src/gl/includes/scales.glsl.js +2 -0
  209. package/dist/src/gl/link.fragment.glsl.js +2 -0
  210. package/dist/src/gl/link.vertex.glsl.js +2 -0
  211. package/dist/src/gl/point.fragment.glsl.js +2 -0
  212. package/dist/src/gl/point.vertex.glsl.js +2 -0
  213. package/dist/src/gl/rect.fragment.glsl.js +2 -0
  214. package/dist/src/gl/rect.vertex.glsl.js +2 -0
  215. package/dist/src/gl/rule.fragment.glsl.js +2 -0
  216. package/dist/src/gl/rule.vertex.glsl.js +2 -0
  217. package/dist/src/gl/text.fragment.glsl.js +2 -0
  218. package/dist/src/gl/text.vertex.glsl.js +2 -0
  219. package/dist/src/gl/webGLHelper.d.ts +118 -0
  220. package/dist/src/gl/webGLHelper.d.ts.map +1 -0
  221. package/dist/src/gl/webGLHelper.js +513 -0
  222. package/dist/src/img/bowtie.svg +1 -0
  223. package/dist/src/img/genomespy-favicon.svg +34 -0
  224. package/dist/src/index.d.ts +15 -0
  225. package/dist/src/index.d.ts.map +1 -0
  226. package/dist/src/index.html +11 -0
  227. package/dist/src/index.js +129 -0
  228. package/dist/src/marks/link.d.ts +11 -0
  229. package/dist/src/marks/link.d.ts.map +1 -0
  230. package/dist/src/marks/link.js +175 -0
  231. package/dist/src/marks/mark.d.ts +226 -0
  232. package/dist/src/marks/mark.d.ts.map +1 -0
  233. package/dist/src/marks/mark.js +1004 -0
  234. package/dist/src/marks/markUtils.d.ts +23 -0
  235. package/dist/src/marks/markUtils.d.ts.map +1 -0
  236. package/dist/src/marks/markUtils.js +125 -0
  237. package/dist/src/marks/pointMark.d.ts +11 -0
  238. package/dist/src/marks/pointMark.d.ts.map +1 -0
  239. package/dist/src/marks/pointMark.js +251 -0
  240. package/dist/src/marks/rectMark.d.ts +18 -0
  241. package/dist/src/marks/rectMark.d.ts.map +1 -0
  242. package/dist/src/marks/rectMark.js +255 -0
  243. package/dist/src/marks/rule.d.ts +6 -0
  244. package/dist/src/marks/rule.d.ts.map +1 -0
  245. package/dist/src/marks/rule.js +250 -0
  246. package/dist/src/marks/text.d.ts +13 -0
  247. package/dist/src/marks/text.d.ts.map +1 -0
  248. package/dist/src/marks/text.js +279 -0
  249. package/dist/src/scale/colorUtils.d.ts +34 -0
  250. package/dist/src/scale/colorUtils.d.ts.map +1 -0
  251. package/dist/src/scale/colorUtils.js +184 -0
  252. package/dist/src/scale/glslScaleGenerator.d.ts +45 -0
  253. package/dist/src/scale/glslScaleGenerator.d.ts.map +1 -0
  254. package/dist/src/scale/glslScaleGenerator.js +506 -0
  255. package/dist/src/scale/scale.d.ts +10 -0
  256. package/dist/src/scale/scale.d.ts.map +1 -0
  257. package/dist/src/scale/scale.js +456 -0
  258. package/dist/src/scale/scale.test.js +324 -0
  259. package/dist/src/scale/ticks.d.ts +47 -0
  260. package/dist/src/scale/ticks.d.ts.map +1 -0
  261. package/dist/src/scale/ticks.js +203 -0
  262. package/dist/src/scale/ticks.test.js +40 -0
  263. package/dist/src/singlePageApp.d.ts +2 -0
  264. package/dist/src/singlePageApp.d.ts.map +1 -0
  265. package/dist/src/singlePageApp.js +13 -0
  266. package/dist/src/spec/axis.d.ts +402 -0
  267. package/dist/src/spec/channel.d.ts +440 -0
  268. package/dist/src/spec/data.d.ts +370 -0
  269. package/dist/src/spec/font.d.ts +15 -0
  270. package/dist/src/spec/genome.d.ts +35 -0
  271. package/dist/src/spec/mark.d.ts +435 -0
  272. package/dist/src/spec/root.d.ts +22 -0
  273. package/dist/src/spec/sampleView.d.ts +185 -0
  274. package/dist/src/spec/scale.d.ts +273 -0
  275. package/dist/src/spec/title.d.ts +102 -0
  276. package/dist/src/spec/tooltip.d.ts +9 -0
  277. package/dist/src/spec/transform.d.ts +504 -0
  278. package/dist/src/spec/view.d.ts +214 -0
  279. package/dist/src/styles/genome-spy.css.d.ts +3 -0
  280. package/dist/src/styles/genome-spy.css.d.ts.map +1 -0
  281. package/dist/src/styles/genome-spy.css.js +114 -0
  282. package/dist/src/styles/genome-spy.scss +153 -0
  283. package/dist/src/tooltip/dataTooltipHandler.d.ts +2 -0
  284. package/dist/src/tooltip/dataTooltipHandler.d.ts.map +1 -0
  285. package/dist/src/tooltip/dataTooltipHandler.js +64 -0
  286. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts +2 -0
  287. package/dist/src/tooltip/refseqGeneTooltipHandler.d.ts.map +1 -0
  288. package/dist/src/tooltip/refseqGeneTooltipHandler.js +78 -0
  289. package/dist/src/tooltip/tooltipHandler.d.ts +9 -0
  290. package/dist/src/tooltip/tooltipHandler.d.ts.map +1 -0
  291. package/dist/src/tooltip/tooltipHandler.ts +12 -0
  292. package/dist/src/types/bmFont.d.ts +58 -0
  293. package/dist/src/types/embedApi.d.ts +67 -0
  294. package/dist/src/types/encoder.d.ts +84 -0
  295. package/dist/src/types/flowBatch.d.ts +40 -0
  296. package/dist/src/types/rendering.d.ts +65 -0
  297. package/dist/src/types/scaleResolutionApi.d.ts +40 -0
  298. package/dist/src/types/viewContext.d.ts +85 -0
  299. package/dist/src/utils/addBaseUrl.d.ts +6 -0
  300. package/dist/src/utils/addBaseUrl.d.ts.map +1 -0
  301. package/dist/src/utils/addBaseUrl.js +19 -0
  302. package/dist/src/utils/addBaseUrl.test.js +22 -0
  303. package/dist/src/utils/animator.d.ts +41 -0
  304. package/dist/src/utils/animator.d.ts.map +1 -0
  305. package/dist/src/utils/animator.js +83 -0
  306. package/dist/src/utils/arrayUtils.d.ts +34 -0
  307. package/dist/src/utils/arrayUtils.d.ts.map +1 -0
  308. package/dist/src/utils/arrayUtils.js +61 -0
  309. package/dist/src/utils/binnedIndex.d.ts +23 -0
  310. package/dist/src/utils/binnedIndex.d.ts.map +1 -0
  311. package/dist/src/utils/binnedIndex.js +167 -0
  312. package/dist/src/utils/binnedIndex.test.js +155 -0
  313. package/dist/src/utils/clamp.d.ts +7 -0
  314. package/dist/src/utils/clamp.d.ts.map +1 -0
  315. package/dist/src/utils/clamp.js +8 -0
  316. package/dist/src/utils/cloner.d.ts +16 -0
  317. package/dist/src/utils/cloner.d.ts.map +1 -0
  318. package/dist/src/utils/cloner.js +34 -0
  319. package/dist/src/utils/cloner.test.js +24 -0
  320. package/dist/src/utils/coalesce.d.ts +6 -0
  321. package/dist/src/utils/coalesce.d.ts.map +1 -0
  322. package/dist/src/utils/coalesce.js +11 -0
  323. package/dist/src/utils/coalesce.test.js +16 -0
  324. package/dist/src/utils/concatIterables.d.ts +8 -0
  325. package/dist/src/utils/concatIterables.d.ts.map +1 -0
  326. package/dist/src/utils/concatIterables.js +26 -0
  327. package/dist/src/utils/concatIterables.test.js +8 -0
  328. package/dist/src/utils/debounce.d.ts +8 -0
  329. package/dist/src/utils/debounce.d.ts.map +1 -0
  330. package/dist/src/utils/debounce.js +37 -0
  331. package/dist/src/utils/domainArray.d.ts +61 -0
  332. package/dist/src/utils/domainArray.d.ts.map +1 -0
  333. package/dist/src/utils/domainArray.js +216 -0
  334. package/dist/src/utils/domainArray.test.js +130 -0
  335. package/dist/src/utils/eerp.d.ts +12 -0
  336. package/dist/src/utils/eerp.d.ts.map +1 -0
  337. package/dist/src/utils/eerp.js +13 -0
  338. package/dist/src/utils/expression.d.ts +9 -0
  339. package/dist/src/utils/expression.d.ts.map +1 -0
  340. package/dist/src/utils/expression.js +32 -0
  341. package/dist/src/utils/field.d.ts +17 -0
  342. package/dist/src/utils/field.d.ts.map +1 -0
  343. package/dist/src/utils/field.js +28 -0
  344. package/dist/src/utils/formatObject.d.ts +7 -0
  345. package/dist/src/utils/formatObject.d.ts.map +1 -0
  346. package/dist/src/utils/formatObject.js +37 -0
  347. package/dist/src/utils/indexer.d.ts +16 -0
  348. package/dist/src/utils/indexer.d.ts.map +1 -0
  349. package/dist/src/utils/indexer.js +43 -0
  350. package/dist/src/utils/indexer.test.js +47 -0
  351. package/dist/src/utils/inertia.d.ts +42 -0
  352. package/dist/src/utils/inertia.d.ts.map +1 -0
  353. package/dist/src/utils/inertia.js +124 -0
  354. package/dist/src/utils/interactionEvent.d.ts +26 -0
  355. package/dist/src/utils/interactionEvent.d.ts.map +1 -0
  356. package/dist/src/utils/interactionEvent.js +33 -0
  357. package/dist/src/utils/iterateNestedMaps.d.ts +11 -0
  358. package/dist/src/utils/iterateNestedMaps.d.ts.map +1 -0
  359. package/dist/src/utils/iterateNestedMaps.js +21 -0
  360. package/dist/src/utils/iterateNestedMaps.test.js +33 -0
  361. package/dist/src/utils/kWayMerge.d.ts +9 -0
  362. package/dist/src/utils/kWayMerge.d.ts.map +1 -0
  363. package/dist/src/utils/kWayMerge.js +42 -0
  364. package/dist/src/utils/kWayMerge.test.js +26 -0
  365. package/dist/src/utils/layout/flexLayout.d.ts +182 -0
  366. package/dist/src/utils/layout/flexLayout.d.ts.map +1 -0
  367. package/dist/src/utils/layout/flexLayout.js +381 -0
  368. package/dist/src/utils/layout/flexLayout.test.js +323 -0
  369. package/dist/src/utils/layout/grid.d.ts +29 -0
  370. package/dist/src/utils/layout/grid.d.ts.map +1 -0
  371. package/dist/src/utils/layout/grid.js +95 -0
  372. package/dist/src/utils/layout/grid.test.js +71 -0
  373. package/dist/src/utils/layout/padding.d.ts +83 -0
  374. package/dist/src/utils/layout/padding.d.ts.map +1 -0
  375. package/dist/src/utils/layout/padding.js +155 -0
  376. package/dist/src/utils/layout/point.d.ts +16 -0
  377. package/dist/src/utils/layout/point.d.ts.map +1 -0
  378. package/dist/src/utils/layout/point.js +23 -0
  379. package/dist/src/utils/layout/rectangle.d.ts +142 -0
  380. package/dist/src/utils/layout/rectangle.d.ts.map +1 -0
  381. package/dist/src/utils/layout/rectangle.js +296 -0
  382. package/dist/src/utils/layout/rectangle.test.js +172 -0
  383. package/dist/src/utils/mergeObjects.d.ts +15 -0
  384. package/dist/src/utils/mergeObjects.d.ts.map +1 -0
  385. package/dist/src/utils/mergeObjects.js +99 -0
  386. package/dist/src/utils/mergeObjects.test.js +42 -0
  387. package/dist/src/utils/numberExtractor.d.ts +9 -0
  388. package/dist/src/utils/numberExtractor.d.ts.map +1 -0
  389. package/dist/src/utils/numberExtractor.js +24 -0
  390. package/dist/src/utils/numberExtractor.test.js +6 -0
  391. package/dist/src/utils/point.d.ts +9 -0
  392. package/dist/src/utils/point.d.ts.map +1 -0
  393. package/dist/src/utils/point.js +14 -0
  394. package/dist/src/utils/propertyCacher.d.ts +30 -0
  395. package/dist/src/utils/propertyCacher.d.ts.map +1 -0
  396. package/dist/src/utils/propertyCacher.js +70 -0
  397. package/dist/src/utils/propertyCacher.test.js +85 -0
  398. package/dist/src/utils/propertyCoalescer.d.ts +15 -0
  399. package/dist/src/utils/propertyCoalescer.d.ts.map +1 -0
  400. package/dist/src/utils/propertyCoalescer.js +42 -0
  401. package/dist/src/utils/propertyCoalescer.test.js +22 -0
  402. package/dist/src/utils/reservationMap.d.ts +42 -0
  403. package/dist/src/utils/reservationMap.d.ts.map +1 -0
  404. package/dist/src/utils/reservationMap.js +103 -0
  405. package/dist/src/utils/reservationMap.test.js +20 -0
  406. package/dist/src/utils/scaleNull.d.ts +13 -0
  407. package/dist/src/utils/scaleNull.d.ts.map +1 -0
  408. package/dist/src/utils/scaleNull.js +21 -0
  409. package/dist/src/utils/setOperations.d.ts +31 -0
  410. package/dist/src/utils/setOperations.d.ts.map +1 -0
  411. package/dist/src/utils/setOperations.js +75 -0
  412. package/dist/src/utils/smoothstep.d.ts +7 -0
  413. package/dist/src/utils/smoothstep.d.ts.map +1 -0
  414. package/dist/src/utils/smoothstep.js +10 -0
  415. package/dist/src/utils/throttle.d.ts +8 -0
  416. package/dist/src/utils/throttle.d.ts.map +1 -0
  417. package/dist/src/utils/throttle.js +34 -0
  418. package/dist/src/utils/topK.d.ts +22 -0
  419. package/dist/src/utils/topK.d.ts.map +1 -0
  420. package/dist/src/utils/topK.js +76 -0
  421. package/dist/src/utils/topK.test.js +64 -0
  422. package/dist/src/utils/transition.d.ts +44 -0
  423. package/dist/src/utils/transition.d.ts.map +1 -0
  424. package/dist/src/utils/transition.js +74 -0
  425. package/dist/src/utils/trees.d.ts +56 -0
  426. package/dist/src/utils/trees.d.ts.map +1 -0
  427. package/dist/src/utils/trees.js +92 -0
  428. package/dist/src/utils/trees.test.js +130 -0
  429. package/dist/src/utils/ui/tooltip.d.ts +50 -0
  430. package/dist/src/utils/ui/tooltip.d.ts.map +1 -0
  431. package/dist/src/utils/ui/tooltip.js +189 -0
  432. package/dist/src/utils/url.d.ts +9 -0
  433. package/dist/src/utils/url.d.ts.map +1 -0
  434. package/dist/src/utils/url.js +22 -0
  435. package/dist/src/utils/variableTools.d.ts +14 -0
  436. package/dist/src/utils/variableTools.d.ts.map +1 -0
  437. package/dist/src/utils/variableTools.js +24 -0
  438. package/dist/src/utils/variableTools.test.js +13 -0
  439. package/dist/src/view/axisGridView.d.ts +39 -0
  440. package/dist/src/view/axisGridView.d.ts.map +1 -0
  441. package/dist/src/view/axisGridView.js +246 -0
  442. package/dist/src/view/axisResolution.d.ts +24 -0
  443. package/dist/src/view/axisResolution.d.ts.map +1 -0
  444. package/dist/src/view/axisResolution.js +141 -0
  445. package/dist/src/view/axisResolution.test.js +201 -0
  446. package/dist/src/view/axisView.d.ts +49 -0
  447. package/dist/src/view/axisView.d.ts.map +1 -0
  448. package/dist/src/view/axisView.js +629 -0
  449. package/dist/src/view/concatView.d.ts +16 -0
  450. package/dist/src/view/concatView.d.ts.map +1 -0
  451. package/dist/src/view/concatView.js +84 -0
  452. package/dist/src/view/containerView.d.ts +43 -0
  453. package/dist/src/view/containerView.d.ts.map +1 -0
  454. package/dist/src/view/containerView.js +137 -0
  455. package/dist/src/view/facetView.d.ts +71 -0
  456. package/dist/src/view/facetView.d.ts.map +1 -0
  457. package/dist/src/view/facetView.js +492 -0
  458. package/dist/src/view/flowBuilder.d.ts +37 -0
  459. package/dist/src/view/flowBuilder.d.ts.map +1 -0
  460. package/dist/src/view/flowBuilder.js +383 -0
  461. package/dist/src/view/flowBuilder.test.js +125 -0
  462. package/dist/src/view/gridView.d.ts +111 -0
  463. package/dist/src/view/gridView.d.ts.map +1 -0
  464. package/dist/src/view/gridView.js +1086 -0
  465. package/dist/src/view/implicitRootView.d.ts +9 -0
  466. package/dist/src/view/implicitRootView.d.ts.map +1 -0
  467. package/dist/src/view/implicitRootView.js +23 -0
  468. package/dist/src/view/importView.d.ts +17 -0
  469. package/dist/src/view/importView.d.ts.map +1 -0
  470. package/dist/src/view/importView.js +22 -0
  471. package/dist/src/view/layerView.d.ts +25 -0
  472. package/dist/src/view/layerView.d.ts.map +1 -0
  473. package/dist/src/view/layerView.js +77 -0
  474. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts +30 -0
  475. package/dist/src/view/renderingContext/bufferedViewRenderingContext.d.ts.map +1 -0
  476. package/dist/src/view/renderingContext/bufferedViewRenderingContext.js +175 -0
  477. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts +14 -0
  478. package/dist/src/view/renderingContext/compositeViewRenderingContext.d.ts.map +1 -0
  479. package/dist/src/view/renderingContext/compositeViewRenderingContext.js +51 -0
  480. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts +51 -0
  481. package/dist/src/view/renderingContext/debuggingViewRenderingContext.d.ts.map +1 -0
  482. package/dist/src/view/renderingContext/debuggingViewRenderingContext.js +94 -0
  483. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts +60 -0
  484. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.d.ts.map +1 -0
  485. package/dist/src/view/renderingContext/layoutRecorderViewRenderingContext.js +128 -0
  486. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts +19 -0
  487. package/dist/src/view/renderingContext/simpleViewRenderingContext.d.ts.map +1 -0
  488. package/dist/src/view/renderingContext/simpleViewRenderingContext.js +64 -0
  489. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts +22 -0
  490. package/dist/src/view/renderingContext/svgViewRenderingContext.d.ts.map +1 -0
  491. package/dist/src/view/renderingContext/svgViewRenderingContext.js +125 -0
  492. package/dist/src/view/renderingContext/viewRenderingContext.d.ts +33 -0
  493. package/dist/src/view/renderingContext/viewRenderingContext.d.ts.map +1 -0
  494. package/dist/src/view/renderingContext/viewRenderingContext.js +41 -0
  495. package/dist/src/view/scaleResolution.d.ts +170 -0
  496. package/dist/src/view/scaleResolution.d.ts.map +1 -0
  497. package/dist/src/view/scaleResolution.js +874 -0
  498. package/dist/src/view/scaleResolution.test.js +658 -0
  499. package/dist/src/view/testUtils.d.ts +30 -0
  500. package/dist/src/view/testUtils.d.ts.map +1 -0
  501. package/dist/src/view/testUtils.js +101 -0
  502. package/dist/src/view/title.d.ts +6 -0
  503. package/dist/src/view/title.d.ts.map +1 -0
  504. package/dist/src/view/title.js +165 -0
  505. package/dist/src/view/unitView.d.ts +93 -0
  506. package/dist/src/view/unitView.d.ts.map +1 -0
  507. package/dist/src/view/unitView.js +345 -0
  508. package/dist/src/view/view.d.ts +291 -0
  509. package/dist/src/view/view.d.ts.map +1 -0
  510. package/dist/src/view/view.js +691 -0
  511. package/dist/src/view/view.test.js +214 -0
  512. package/dist/src/view/viewFactory.d.ts +76 -0
  513. package/dist/src/view/viewFactory.d.ts.map +1 -0
  514. package/dist/src/view/viewFactory.js +178 -0
  515. package/dist/src/view/viewFactory.test.js +17 -0
  516. package/dist/src/view/viewUtils.d.ts +90 -0
  517. package/dist/src/view/viewUtils.d.ts.map +1 -0
  518. package/dist/src/view/viewUtils.js +326 -0
  519. package/dist/src/view/zoom.d.ts +23 -0
  520. package/dist/src/view/zoom.d.ts.map +1 -0
  521. package/dist/src/view/zoom.js +89 -0
  522. package/package.json +15 -12
  523. package/dist/style.css +0 -1
@@ -0,0 +1,83 @@
1
+ import { isInlineData } from "./inlineSource";
2
+
3
+ /**
4
+ * Validates data source params, infers format if not specified explicitly,
5
+ * returns a complete DataSource params object.
6
+ *
7
+ * @param {import("../../spec/data").DataSource} params
8
+ * DataSource parameters
9
+ */
10
+ export function getFormat(params) {
11
+ if (!isInlineData(params) && !isUrlData(params)) {
12
+ return;
13
+ }
14
+ const format = { ...params.format };
15
+
16
+ format.type ??= isUrlData(params) && extractTypeFromUrl(params.url);
17
+ // @ts-ignore TODO: Fix typing
18
+ format.parse ??= "auto";
19
+
20
+ if (!format.type) {
21
+ throw new Error(
22
+ "Format for the data source was not defined and it could not be inferred: " +
23
+ JSON.stringify(params)
24
+ );
25
+ }
26
+
27
+ return format;
28
+ }
29
+
30
+ /**
31
+ * @param {string | string[]} url
32
+ */
33
+ export function extractTypeFromUrl(url) {
34
+ if (Array.isArray(url)) {
35
+ url = url[0];
36
+ }
37
+
38
+ if (url) {
39
+ return url.match(/\.(csv|tsv|json)/)?.[1];
40
+ }
41
+ }
42
+
43
+ export const makeWrapper = (/** @type {any} */ d) =>
44
+ typeof d != "object" ? scalarWrapper : nopWrapper;
45
+
46
+ const scalarWrapper = (
47
+ /** @type {import("@genome-spy/core/spec/channel").Scalar} */ x
48
+ ) => ({ data: x });
49
+
50
+ const nopWrapper = (/** @type {import("../flowNode").Datum} */ x) => x;
51
+
52
+ /**
53
+ * @param {import("../../spec/data").DataFormat} dataFormat
54
+ * @return {dataFormat is import("../../spec/data").CsvDataFormat}
55
+ */
56
+ export function isCsvDataFormat(dataFormat) {
57
+ return dataFormat.type == "csv" || dataFormat.type == "tsv";
58
+ }
59
+
60
+ /**
61
+ * @param {import("../../spec/data").DataFormat} dataFormat
62
+ * @return {dataFormat is import("../../spec/data").DsvDataFormat}
63
+ */
64
+ export function isDsvDataFormat(dataFormat) {
65
+ return dataFormat.type == "dsv";
66
+ }
67
+
68
+ /**
69
+ * @param {import("../../spec/data").DataFormat} dataFormat
70
+ * @return {dataFormat is import("../../spec/data").JsonDataFormat}
71
+ */
72
+ export function isJsonDataFormat(dataFormat) {
73
+ return dataFormat.type == "json";
74
+ }
75
+
76
+ /**
77
+ *
78
+ * @param {import("../../spec/data").DataSource} dataSource
79
+ * @return {dataSource is import("../../spec/data").UrlData}
80
+ */
81
+ export function isUrlData(dataSource) {
82
+ return "url" in dataSource;
83
+ }
@@ -0,0 +1,3 @@
1
+ # Dynamic data sources
2
+
3
+ ... that listen to changes in scale domains and propagates data dynamically.
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Propagates the genome (chromosome) data associated with the channel.
3
+ * Can be used to generate a genome axis or fancy background grid.
4
+ */
5
+ export default class AxisGenomeSource extends SingleAxisLazySource {
6
+ /**
7
+ * @param {import("../../../spec/data").AxisGenomeData} params
8
+ * @param {import("../../../view/view").default} view
9
+ */
10
+ constructor(params: import("../../../spec/data").AxisGenomeData, view: import("../../../view/view").default);
11
+ }
12
+ import SingleAxisLazySource from "./singleAxisLazySource";
13
+ //# sourceMappingURL=axisGenomeSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisGenomeSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/axisGenomeSource.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH;IACI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,cAAc,QAC3C,OAAO,oBAAoB,EAAE,OAAO,EAI9C;CAKJ;iCAlBgC,wBAAwB"}
@@ -0,0 +1,19 @@
1
+ import SingleAxisLazySource from "./singleAxisLazySource";
2
+
3
+ /**
4
+ * Propagates the genome (chromosome) data associated with the channel.
5
+ * Can be used to generate a genome axis or fancy background grid.
6
+ */
7
+ export default class AxisGenomeSource extends SingleAxisLazySource {
8
+ /**
9
+ * @param {import("../../../spec/data").AxisGenomeData} params
10
+ * @param {import("../../../view/view").default} view
11
+ */
12
+ constructor(params, view) {
13
+ super(view, params.channel);
14
+ }
15
+
16
+ async load() {
17
+ this.publishData(this.genome.chromosomes);
18
+ }
19
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ *
3
+ */
4
+ export default class AxisTickSource extends SingleAxisLazySource {
5
+ /**
6
+ * @param {import("../../../spec/data").AxisTicksData} params
7
+ * @param {import("../../../view/view").default} view
8
+ */
9
+ constructor(params: import("../../../spec/data").AxisTicksData, view: import("../../../view/view").default);
10
+ /**
11
+ * @type {import("../../../spec/channel").Scalar[]}
12
+ */
13
+ ticks: import("../../../spec/channel").Scalar[];
14
+ params: import("../../../spec/data").AxisTicksData;
15
+ onDomainChanged(): Promise<void>;
16
+ }
17
+ import SingleAxisLazySource from "./singleAxisLazySource";
18
+ //# sourceMappingURL=axisTickSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"axisTickSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/axisTickSource.js"],"names":[],"mappings":"AAYA;;GAEG;AACH;IAMI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,aAAa,QAC1C,OAAO,oBAAoB,EAAE,OAAO,EAY9C;IAnBD;;OAEG;IACH,OAFU,OAAO,uBAAuB,EAAE,MAAM,EAAE,CAEvC;IAeP,mDAAoB;IAGxB,iCAkCC;CACJ;iCA9DgC,wBAAwB"}
@@ -0,0 +1,73 @@
1
+ import { isNumber } from "vega-util";
2
+
3
+ import { shallowArrayEquals } from "../../../utils/arrayUtils";
4
+ import smoothstep from "../../../utils/smoothstep";
5
+ import {
6
+ validTicks,
7
+ tickValues,
8
+ tickFormat,
9
+ tickCount,
10
+ } from "../../../scale/ticks";
11
+ import SingleAxisLazySource from "./singleAxisLazySource";
12
+
13
+ /**
14
+ *
15
+ */
16
+ export default class AxisTickSource extends SingleAxisLazySource {
17
+ /**
18
+ * @type {import("../../../spec/channel").Scalar[]}
19
+ */
20
+ ticks = [];
21
+
22
+ /**
23
+ * @param {import("../../../spec/data").AxisTicksData} params
24
+ * @param {import("../../../view/view").default} view
25
+ */
26
+ constructor(params, view) {
27
+ /** @type {import("../../../spec/data").AxisTicksData} params */
28
+ const paramsWithDefaults = {
29
+ axis: {},
30
+ ...params,
31
+ };
32
+
33
+ super(view, paramsWithDefaults.channel);
34
+
35
+ this.params = params;
36
+ }
37
+
38
+ async onDomainChanged() {
39
+ // Note, although this function is async, it is not awaited. Data are updated
40
+ // synchronously to ensure that the new ticks are available before the next frame is drawn.
41
+
42
+ const scale = this.scaleResolution.getScale();
43
+ const axisParams = this.params.axis;
44
+ const axisLength = this.getAxisLength();
45
+
46
+ /**
47
+ * Make ticks more dense in small plots.
48
+ * TODO: Make configurable
49
+ *
50
+ * @param {number} length
51
+ */
52
+ const tickSpacing = (length) => 25 + 60 * smoothstep(100, 700, length);
53
+
54
+ const requestedCount = isNumber(axisParams.tickCount)
55
+ ? axisParams.tickCount
56
+ : Math.round(axisLength / tickSpacing(axisLength));
57
+
58
+ const count = tickCount(scale, requestedCount, axisParams.tickMinStep);
59
+
60
+ const ticks = axisParams.values
61
+ ? validTicks(scale, axisParams.values, count)
62
+ : tickValues(scale, count);
63
+
64
+ if (!shallowArrayEquals(ticks, this.ticks)) {
65
+ this.ticks = ticks;
66
+
67
+ const format = tickFormat(scale, requestedCount, axisParams.format);
68
+ this.publishData(
69
+ ticks.map((tick) => ({ value: tick, label: format(tick) }))
70
+ );
71
+ }
72
+ }
73
+ }
@@ -0,0 +1,46 @@
1
+ declare const BamSource_base: {
2
+ new (...args: any[]): {
3
+ [x: string]: any;
4
+ lastQuantizedInterval: number[];
5
+ quantizeInterval(interval: number[], windowSize: number): number[];
6
+ checkAndUpdateLastInterval(interval: number[]): boolean;
7
+ };
8
+ } & typeof SingleAxisLazySource;
9
+ export default class BamSource extends BamSource_base {
10
+ /**
11
+ * @param {import("../../../spec/data").BamData} params
12
+ * @param {import("../../../view/view").default} view
13
+ */
14
+ constructor(params: import("../../../spec/data").BamData, view: import("../../../view/view").default);
15
+ /** Keep track of the order of the requests */
16
+ lastRequestId: number;
17
+ /**
18
+ * Some BAM files lack the "chr" prefix on their reference names. For example:
19
+ * http://genome.ucsc.edu/goldenPath/help/examples/bamExample.bam
20
+ *
21
+ * N.B. @SN AN records in SAM header may have alternative names for chromosomes.
22
+ * TODO: Explore their usage
23
+ *
24
+ * @type {(chr: string) => string}
25
+ */
26
+ chrPrefixFixer: (chr: string) => string;
27
+ params: import("../../../spec/data").BamData;
28
+ bam: BamFile;
29
+ headerPromise: Promise<{
30
+ tag: string;
31
+ data: {
32
+ tag: string;
33
+ value: string;
34
+ }[];
35
+ }[]>;
36
+ /**
37
+ * Listen to the domain change event and update data when the covered windows change.
38
+ *
39
+ * @param {number[]} domain Linearized domain
40
+ */
41
+ onDomainChanged(domain: number[]): Promise<void>;
42
+ }
43
+ import SingleAxisLazySource from "./singleAxisLazySource";
44
+ import { BamFile } from "@gmod/bam";
45
+ export {};
46
+ //# sourceMappingURL=bamSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bamSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bamSource.js"],"names":[],"mappings":";;;;;;;;AAOA;IAeI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,OAAO,QACpC,OAAO,oBAAoB,EAAE,OAAO,EAuC9C;IAvDD,8CAA8C;IAC9C,sBAAkB;IAElB;;;;;;;;OAQG;IACH,sBAFgB,MAAM,KAAK,MAAM,CAEH;IAgB1B,6CAAgC;IAShC,aAKE;IAEF;;;;;;SAAyC;IAa7C;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBA6ClB;CACJ;iCA/GgC,wBAAwB;wBAFjC,WAAW"}
@@ -0,0 +1,115 @@
1
+ import { RemoteFile } from "generic-filehandle";
2
+ import { BamFile } from "@gmod/bam";
3
+
4
+ import SingleAxisLazySource from "./singleAxisLazySource";
5
+ import windowedMixin from "./windowedMixin";
6
+ import addBaseUrl from "@genome-spy/core/utils/addBaseUrl";
7
+
8
+ export default class BamSource extends windowedMixin(SingleAxisLazySource) {
9
+ /** Keep track of the order of the requests */
10
+ lastRequestId = 0;
11
+
12
+ /**
13
+ * Some BAM files lack the "chr" prefix on their reference names. For example:
14
+ * http://genome.ucsc.edu/goldenPath/help/examples/bamExample.bam
15
+ *
16
+ * N.B. @SN AN records in SAM header may have alternative names for chromosomes.
17
+ * TODO: Explore their usage
18
+ *
19
+ * @type {(chr: string) => string}
20
+ */
21
+ chrPrefixFixer = (chr) => chr;
22
+
23
+ /**
24
+ * @param {import("../../../spec/data").BamData} params
25
+ * @param {import("../../../view/view").default} view
26
+ */
27
+ constructor(params, view) {
28
+ /** @type {import("../../../spec/data").BamData} */
29
+ const paramsWithDefaults = {
30
+ channel: "x",
31
+ windowSize: 20000,
32
+ ...params,
33
+ };
34
+
35
+ super(view, paramsWithDefaults.channel);
36
+
37
+ this.params = paramsWithDefaults;
38
+
39
+ if (!this.params.url) {
40
+ throw new Error("No URL provided for BamSource");
41
+ }
42
+
43
+ const withBase = (/** @type {string} */ uri) =>
44
+ new RemoteFile(addBaseUrl(uri, this.view.getBaseUrl()));
45
+
46
+ this.bam = new BamFile({
47
+ bamFilehandle: withBase(this.params.url),
48
+ baiFilehandle: withBase(
49
+ this.params.indexUrl ?? this.params.url + ".bai"
50
+ ),
51
+ });
52
+
53
+ this.headerPromise = this.bam.getHeader();
54
+ this.headerPromise.then((_header) => {
55
+ const g = this.genome.hasChrPrefix();
56
+ // @ts-expect-error protected property
57
+ const b = this.bam.indexToChr?.[0]?.refName.startsWith("chr");
58
+ if (g && !b) {
59
+ this.chrPrefixFixer = (chr) => chr.replace("chr", "");
60
+ } else if (!g && b) {
61
+ this.chrPrefixFixer = (chr) => "chr" + chr;
62
+ }
63
+ });
64
+ }
65
+
66
+ /**
67
+ * Listen to the domain change event and update data when the covered windows change.
68
+ *
69
+ * @param {number[]} domain Linearized domain
70
+ */
71
+ async onDomainChanged(domain) {
72
+ const windowSize = this.params.windowSize;
73
+
74
+ if (domain[1] - domain[0] > windowSize) {
75
+ return;
76
+ }
77
+
78
+ await this.headerPromise;
79
+
80
+ const quantizedInterval = this.quantizeInterval(domain, windowSize);
81
+
82
+ if (this.checkAndUpdateLastInterval(quantizedInterval)) {
83
+ const discreteChromosomeIntervals =
84
+ this.genome.continuousToDiscreteChromosomeIntervals(
85
+ quantizedInterval
86
+ );
87
+
88
+ // TODO: Error handling
89
+ const sequencesWithChrom = await Promise.all(
90
+ discreteChromosomeIntervals.map((d) =>
91
+ this.bam
92
+ .getRecordsForRange(
93
+ this.chrPrefixFixer(d.chrom),
94
+ d.startPos,
95
+ d.endPos
96
+ )
97
+ .then((records) =>
98
+ records.map((record) => ({
99
+ chrom: d.chrom,
100
+ start: record.get("start"),
101
+ end: record.get("end"),
102
+ name: record.get("name"),
103
+ MD: record.get("MD"),
104
+ cigar: record.get("cigar"),
105
+ mapq: record.get("mq"),
106
+ strand: record.get("strand") === 1 ? "+" : "-",
107
+ }))
108
+ )
109
+ )
110
+ );
111
+
112
+ this.publishData(sequencesWithChrom.flat());
113
+ }
114
+ }
115
+ }
@@ -0,0 +1,51 @@
1
+ declare const BigBedSource_base: {
2
+ new (...args: any[]): {
3
+ [x: string]: any;
4
+ lastQuantizedInterval: number[];
5
+ quantizeInterval(interval: number[], windowSize: number): number[];
6
+ checkAndUpdateLastInterval(interval: number[]): boolean;
7
+ };
8
+ } & typeof SingleAxisLazySource;
9
+ export default class BigBedSource extends BigBedSource_base {
10
+ /**
11
+ * @param {import("../../../spec/data").BigBedData} params
12
+ * @param {import("../../../view/view").default} view
13
+ */
14
+ constructor(params: import("../../../spec/data").BigBedData, view: import("../../../view/view").default);
15
+ /** Keep track of the order of the requests */
16
+ lastRequestId: number;
17
+ /** @type {BED} */
18
+ parser: BED;
19
+ params: import("../../../spec/data").BigBedData;
20
+ bbi: BigBed;
21
+ doDebouncedRequest: (...args: any[]) => Promise<any>;
22
+ headerPromise: Promise<import("@gmod/bbi").Header>;
23
+ /**
24
+ * Listen to the domain change event and update data when the covered windows change.
25
+ *
26
+ * @param {number[]} domain Linearized domain
27
+ */
28
+ onDomainChanged(domain: number[]): Promise<void>;
29
+ /**
30
+ * Listen to the domain change event and update data when the covered windows change.
31
+ *
32
+ * @param {number[]} interval linearized domain
33
+ */
34
+ doRequest(interval: number[]): Promise<void>;
35
+ /**
36
+ *
37
+ * @param {number[]} interval
38
+ */
39
+ getFeatures(interval: number[]): Promise<{
40
+ requestId: number;
41
+ abort: () => void;
42
+ features: {
43
+ [key: string]: any;
44
+ }[];
45
+ }>;
46
+ }
47
+ import SingleAxisLazySource from "./singleAxisLazySource";
48
+ import BED from "@gmod/bed";
49
+ import { BigBed } from "@gmod/bbi";
50
+ export {};
51
+ //# sourceMappingURL=bigBedSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigBedSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bigBedSource.js"],"names":[],"mappings":";;;;;;;;AASA;IAOI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,UAAU,QACvC,OAAO,oBAAoB,EAAE,OAAO,EAmC9C;IA3CD,8CAA8C;IAC9C,sBAAkB;IAElB,kBAAkB;IAClB,QADW,GAAG,CACP;IAgBH,gDAAgC;IAMhC,YAIE;IAEF,qDAIC;IAED,mDAAyC;IAO7C;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAclB;IAED;;;;OAIG;IACH,oBAFW,MAAM,EAAE,iBAWlB;IAED;;;OAGG;IACH,sBAFW,MAAM,EAAE;;;;;;OAkClB;CACJ;iCA3HgC,wBAAwB;gBAFzC,WAAW;uBAFJ,WAAW"}
@@ -0,0 +1,128 @@
1
+ import { BigBed } from "@gmod/bbi";
2
+ import { RemoteFile } from "generic-filehandle";
3
+ import BED from "@gmod/bed";
4
+
5
+ import SingleAxisLazySource from "./singleAxisLazySource";
6
+ import windowedMixin from "./windowedMixin";
7
+ import { debounce } from "../../../utils/debounce";
8
+ import addBaseUrl from "@genome-spy/core/utils/addBaseUrl";
9
+
10
+ export default class BigBedSource extends windowedMixin(SingleAxisLazySource) {
11
+ /** Keep track of the order of the requests */
12
+ lastRequestId = 0;
13
+
14
+ /** @type {BED} */
15
+ parser;
16
+
17
+ /**
18
+ * @param {import("../../../spec/data").BigBedData} params
19
+ * @param {import("../../../view/view").default} view
20
+ */
21
+ constructor(params, view) {
22
+ /** @type {import("../../../spec/data").BigBedData} */
23
+ const paramsWithDefaults = {
24
+ channel: "x",
25
+ windowSize: 1000000,
26
+ ...params,
27
+ };
28
+
29
+ super(view, paramsWithDefaults.channel);
30
+
31
+ this.params = paramsWithDefaults;
32
+
33
+ if (!this.params.url) {
34
+ throw new Error("No URL provided for BigBedSource");
35
+ }
36
+
37
+ this.bbi = new BigBed({
38
+ filehandle: new RemoteFile(
39
+ addBaseUrl(this.params.url, this.view.getBaseUrl())
40
+ ),
41
+ });
42
+
43
+ this.doDebouncedRequest = debounce(
44
+ this.doRequest.bind(this),
45
+ 200,
46
+ false
47
+ );
48
+
49
+ this.headerPromise = this.bbi.getHeader();
50
+
51
+ this.headerPromise.then((header) => {
52
+ this.parser = new BED({ autoSql: header.autoSql });
53
+ });
54
+ }
55
+
56
+ /**
57
+ * Listen to the domain change event and update data when the covered windows change.
58
+ *
59
+ * @param {number[]} domain Linearized domain
60
+ */
61
+ async onDomainChanged(domain) {
62
+ const windowSize = this.params.windowSize;
63
+
64
+ if (domain[1] - domain[0] > windowSize) {
65
+ return;
66
+ }
67
+
68
+ const quantizedInterval = this.quantizeInterval(domain, windowSize);
69
+
70
+ if (this.checkAndUpdateLastInterval(quantizedInterval)) {
71
+ this.doDebouncedRequest(quantizedInterval);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Listen to the domain change event and update data when the covered windows change.
77
+ *
78
+ * @param {number[]} interval linearized domain
79
+ */
80
+ async doRequest(interval) {
81
+ const featureResponse = await this.getFeatures(interval);
82
+
83
+ // Discard late responses
84
+ if (featureResponse.requestId < this.lastRequestId) {
85
+ return;
86
+ }
87
+
88
+ this.publishData(featureResponse.features);
89
+ }
90
+
91
+ /**
92
+ *
93
+ * @param {number[]} interval
94
+ */
95
+ async getFeatures(interval) {
96
+ let requestId = ++this.lastRequestId;
97
+
98
+ // TODO: Abort previous requests
99
+ const abortController = new AbortController();
100
+
101
+ const discreteChromosomeIntervals =
102
+ this.genome.continuousToDiscreteChromosomeIntervals(interval);
103
+
104
+ // TODO: Error handling
105
+ const featuresWithChrom = await Promise.all(
106
+ discreteChromosomeIntervals.map((d) =>
107
+ this.bbi
108
+ .getFeatures(d.chrom, d.startPos, d.endPos, {
109
+ signal: abortController.signal,
110
+ })
111
+ .then((features) =>
112
+ features.map((f) =>
113
+ this.parser.parseLine(
114
+ `${d.chrom}\t${f.start}\t${f.end}\t${f.rest}`,
115
+ { uniqueId: f.uniqueId }
116
+ )
117
+ )
118
+ )
119
+ )
120
+ );
121
+
122
+ return {
123
+ requestId,
124
+ abort: () => abortController.abort(),
125
+ features: featuresWithChrom.flat(), // TODO: Use batches, not flat
126
+ };
127
+ }
128
+ }
@@ -0,0 +1,58 @@
1
+ declare const BigWigSource_base: {
2
+ new (...args: any[]): {
3
+ [x: string]: any;
4
+ lastQuantizedInterval: number[];
5
+ quantizeInterval(interval: number[], windowSize: number): number[];
6
+ checkAndUpdateLastInterval(interval: number[]): boolean;
7
+ };
8
+ } & typeof SingleAxisLazySource;
9
+ /**
10
+ *
11
+ */
12
+ export default class BigWigSource extends BigWigSource_base {
13
+ /**
14
+ * @param {import("../../../spec/data").BigWigData} params
15
+ * @param {import("../../../view/view").default} view
16
+ */
17
+ constructor(params: import("../../../spec/data").BigWigData, view: import("../../../view/view").default);
18
+ /** @type {number[]} */
19
+ reductionLevels: number[];
20
+ /** Keep track of the order of the requests */
21
+ lastRequestId: number;
22
+ params: import("../../../spec/data").BigWigData;
23
+ bbi: BigWig;
24
+ doDebouncedRequest: (...args: any[]) => Promise<any>;
25
+ headerPromise: Promise<import("@gmod/bbi").Header>;
26
+ /**
27
+ * Listen to the domain change event and update data when the covered windows change.
28
+ *
29
+ * @param {number[]} domain Linearized domain
30
+ */
31
+ onDomainChanged(domain: number[]): Promise<void>;
32
+ /**
33
+ * Listen to the domain change event and update data when the covered windows change.
34
+ *
35
+ * @param {number[]} interval linearized domain
36
+ * @param {number} reductionLevel
37
+ */
38
+ doRequest(interval: number[], reductionLevel: number): Promise<void>;
39
+ /**
40
+ *
41
+ * @param {number[]} interval
42
+ * @param {number} scale
43
+ */
44
+ getFeatures(interval: number[], scale: number): Promise<{
45
+ requestId: number;
46
+ abort: () => void;
47
+ features: {
48
+ chrom: string;
49
+ start: number;
50
+ end: number;
51
+ score: number;
52
+ }[];
53
+ }>;
54
+ }
55
+ import SingleAxisLazySource from "./singleAxisLazySource";
56
+ import { BigWig } from "@gmod/bbi";
57
+ export {};
58
+ //# sourceMappingURL=bigWigSource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bigWigSource.d.ts","sourceRoot":"","sources":["../../../../../src/data/sources/dynamic/bigWigSource.js"],"names":[],"mappings":";;;;;;;;AAQA;;GAEG;AACH;IAOI;;;OAGG;IACH,oBAHW,OAAO,oBAAoB,EAAE,UAAU,QACvC,OAAO,oBAAoB,EAAE,OAAO,EA2C9C;IAnDD,uBAAuB;IACvB,iBADW,MAAM,EAAE,CACE;IAErB,8CAA8C;IAC9C,sBAAkB;IAgBd,gDAAgC;IAMhC,YAIE;IAEF,qDAIC;IAED,mDAAyC;IAe7C;;;;OAIG;IACH,wBAFW,MAAM,EAAE,iBAwBlB;IAED;;;;;OAKG;IACH,oBAHW,MAAM,EAAE,kBACR,MAAM,iBAchB;IAED;;;;OAIG;IACH,sBAHW,MAAM,EAAE,SACR,MAAM;;;;;;;;;OAmChB;CACJ;iCArJgC,wBAAwB;uBAJlC,WAAW"}