@sjcrh/proteinpaint-client 2.182.0 → 2.183.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 (1004) hide show
  1. package/dist/2dmaf-6ZTETSC5.js +1371 -0
  2. package/dist/AIProjectAdmin-ZT3XKBBT.js +830 -0
  3. package/dist/AIProjectAdmin-ZT3XKBBT.js.map +7 -0
  4. package/dist/AppHeader-U7SJPIBS.js +833 -0
  5. package/dist/BoxPlot-QGHLZ67V.js +1217 -0
  6. package/dist/BoxPlot-QGHLZ67V.js.map +7 -0
  7. package/dist/CorrelationVolcano-7SE4CTBW.js +617 -0
  8. package/dist/DE-PZ7RHPBS.js +93 -0
  9. package/dist/DEinput-UZEQIU2V.js +297 -0
  10. package/dist/DifferentialAnalysis-L6BOEYVO.js +238 -0
  11. package/dist/Disco-6FDT6KRM.js +3235 -0
  12. package/dist/Disco-6FDT6KRM.js.map +7 -0
  13. package/dist/Disco.UI-HKOUAD4P.js +242 -0
  14. package/dist/DmrPlot-3R24PTXP.js +640 -0
  15. package/dist/GB-SZVYZASR.js +1125 -0
  16. package/dist/HicApp-SEEJETVE.js +2248 -0
  17. package/dist/NumBinaryEditor-SDQFJ3FW.js +268 -0
  18. package/dist/NumBinaryEditor.unit.spec-76ZZXTYC.js +284 -0
  19. package/dist/NumContEditor-G75O4YZE.js +105 -0
  20. package/dist/NumContEditor.unit.spec-BFUZRBPL.js +167 -0
  21. package/dist/NumCustomBinEditor-ILTPHCEF.js +36 -0
  22. package/dist/NumCustomBinEditor.unit.spec-GFIYV55V.js +282 -0
  23. package/dist/NumDiscreteEditor-5K3OKUOE.js +177 -0
  24. package/dist/NumDiscreteEditor.unit.spec-NZ4KWPFK.js +200 -0
  25. package/dist/NumRegularBinEditor-7ZJ2MEMY.js +36 -0
  26. package/dist/NumRegularBinEditor.unit.spec-QGVJET65.js +225 -0
  27. package/dist/NumSplineEditor-KE4UPODZ.js +190 -0
  28. package/dist/NumSplineEditor.unit.spec-YQOOZA7S.js +197 -0
  29. package/dist/NumericDensity-RL42P4QC.js +36 -0
  30. package/dist/NumericDensity.unit.spec-Y6RMTYC7.js +219 -0
  31. package/dist/NumericHandler-4QIX324I.js +37 -0
  32. package/dist/NumericHandler.unit.spec-T6F5QYP6.js +217 -0
  33. package/dist/RunChart2-ASGCKKER.js +756 -0
  34. package/dist/RunChart2-ASGCKKER.js.map +7 -0
  35. package/dist/SC-H2YCKSBH.js +682 -0
  36. package/dist/SC-H2YCKSBH.js.map +7 -0
  37. package/dist/Volcano-QBYYJYVW.js +1185 -0
  38. package/dist/Volcano-QBYYJYVW.js.map +7 -0
  39. package/dist/WSIViewer-NDHWFVAB.js +47974 -0
  40. package/dist/WSIViewer-NDHWFVAB.js.map +7 -0
  41. package/dist/WsiSamplesPlot-CXGWPCDL.js +163 -0
  42. package/dist/adSandbox-DE4VRO4Z.js +36 -0
  43. package/dist/alphaGenome-FSIGC5ZT.js +173 -0
  44. package/dist/app-KZGKWQMU.js +47 -0
  45. package/dist/app-MQRJ7FVL.js +35 -0
  46. package/dist/app.js +22 -22
  47. package/dist/bam-BDWTA4O3.js +857 -0
  48. package/dist/barchart-4Q6LVJY4.js +45 -0
  49. package/dist/barchart.data-EXENRVMU.js +22 -0
  50. package/dist/barchart.events-XRGND6I7.js +45 -0
  51. package/dist/barchart.integration.spec-VQITP4YH.js +1675 -0
  52. package/dist/bars.renderer-S7A7I6BQ.js +12 -0
  53. package/dist/block-2MABX5QO.js +6200 -0
  54. package/dist/block-2MABX5QO.js.map +7 -0
  55. package/dist/block.init-NCNSE3HD.js +36 -0
  56. package/dist/block.mds.expressionrank-JYZARS7T.js +357 -0
  57. package/dist/block.mds.geneboxplot-FD2MCIHV.js +826 -0
  58. package/dist/block.mds.junction-LOHVQBIU.js +1543 -0
  59. package/dist/block.mds.svcnv-Z7SAYPQL.js +6799 -0
  60. package/dist/block.svg-LNJOKQNN.js +162 -0
  61. package/dist/block.tk.aicheck-IXCMMAGV.js +281 -0
  62. package/dist/block.tk.ase-WYRYFP6N.js +363 -0
  63. package/dist/block.tk.bam-EIVBNGAL.js +1904 -0
  64. package/dist/block.tk.bedgraphdot-3FHLNCU7.js +382 -0
  65. package/dist/block.tk.bigwig.ui-YDQU5PC4.js +209 -0
  66. package/dist/block.tk.hicstraw-S3ROL3CV.js +821 -0
  67. package/dist/block.tk.junction-DL7RNWX3.js +2362 -0
  68. package/dist/block.tk.junction.textmatrixui-Z6I7IEDY.js +197 -0
  69. package/dist/block.tk.ld-XHVU6L56.js +97 -0
  70. package/dist/block.tk.menu-FPLAEEFY.js +1027 -0
  71. package/dist/block.tk.pgv-6ZZ2QGNO.js +942 -0
  72. package/dist/brainImaging-VSOOMITW.js +421 -0
  73. package/dist/chat-LW23PIG5.js +148 -0
  74. package/dist/chunk-2A2KM5DU.js +117 -0
  75. package/dist/chunk-2A2KM5DU.js.map +7 -0
  76. package/dist/chunk-2K5DSRBJ.js +84 -0
  77. package/dist/chunk-2K5DSRBJ.js.map +7 -0
  78. package/dist/chunk-2LULD7RN.js +31 -0
  79. package/dist/chunk-36DYWBU7.js +514 -0
  80. package/dist/chunk-36DYWBU7.js.map +7 -0
  81. package/dist/chunk-3AGB6HL4.js +158 -0
  82. package/dist/chunk-3AVDNIDN.js +55 -0
  83. package/dist/chunk-3DCABJHB.js +381 -0
  84. package/dist/chunk-3JMB3OSC.js +102 -0
  85. package/dist/chunk-3UEMY45Y.js +215 -0
  86. package/dist/chunk-4RR4KPRJ.js +1205 -0
  87. package/dist/chunk-5HCB4HNL.js +147 -0
  88. package/dist/chunk-5RFB7TYT.js +92 -0
  89. package/dist/chunk-5UMPBVA6.js +534 -0
  90. package/dist/chunk-6C2SBTLR.js +407 -0
  91. package/dist/chunk-6ITDJ5UR.js +261 -0
  92. package/dist/chunk-6ITDJ5UR.js.map +7 -0
  93. package/dist/chunk-6LAE5AVA.js +13624 -0
  94. package/dist/chunk-77ZJGPK2.js +289 -0
  95. package/dist/chunk-77ZJGPK2.js.map +7 -0
  96. package/dist/chunk-7FKIAQ4K.js +17 -0
  97. package/dist/chunk-7FKIAQ4K.js.map +7 -0
  98. package/dist/chunk-7RN3L2BX.js +1788 -0
  99. package/dist/chunk-7RN3L2BX.js.map +7 -0
  100. package/dist/chunk-7VV43ICF.js +272 -0
  101. package/dist/chunk-A6TQGNDQ.js +421 -0
  102. package/dist/chunk-A6TQGNDQ.js.map +7 -0
  103. package/dist/chunk-A742TQD2.js +615 -0
  104. package/dist/chunk-A7E3JZ5P.js +56 -0
  105. package/dist/chunk-A7E3JZ5P.js.map +7 -0
  106. package/dist/chunk-AFLFPYJI.js +480 -0
  107. package/dist/chunk-APOHXHKH.js +526 -0
  108. package/dist/chunk-APOHXHKH.js.map +7 -0
  109. package/dist/chunk-AQ4OP4GR.js +39 -0
  110. package/dist/chunk-BAY47D5E.js +226 -0
  111. package/dist/chunk-CFHKYLDY.js +26 -0
  112. package/dist/chunk-CTAKX5CT.js +129 -0
  113. package/dist/chunk-CVBQWXLH.js +455 -0
  114. package/dist/chunk-CVBQWXLH.js.map +7 -0
  115. package/dist/chunk-D4QFQQWJ.js +170 -0
  116. package/dist/chunk-DGMK7SXX.js +203 -0
  117. package/dist/chunk-DNCSPTOQ.js +446 -0
  118. package/dist/chunk-DTDQKGIQ.js +2672 -0
  119. package/dist/chunk-E4NVHKWD.js +142 -0
  120. package/dist/chunk-E6KEZENR.js +4207 -0
  121. package/dist/chunk-EY2KBPHJ.js +261 -0
  122. package/dist/chunk-EY2KBPHJ.js.map +7 -0
  123. package/dist/chunk-FRBYOOWT.js +229 -0
  124. package/dist/chunk-FVWCYGJL.js +121 -0
  125. package/dist/chunk-HWHG63LH.js +148 -0
  126. package/dist/chunk-HWHG63LH.js.map +7 -0
  127. package/dist/chunk-HYZG6OPC.js +467 -0
  128. package/dist/chunk-HYZG6OPC.js.map +7 -0
  129. package/dist/chunk-I4IKRKYJ.js +2815 -0
  130. package/dist/chunk-IEQSUAIO.js +6364 -0
  131. package/dist/chunk-IET6P5MV.js +335 -0
  132. package/dist/chunk-IET6P5MV.js.map +7 -0
  133. package/dist/chunk-JMPSZMDD.js +52 -0
  134. package/dist/chunk-JXOL73PT.js +2784 -0
  135. package/dist/chunk-K62XUHA4.js +100 -0
  136. package/dist/chunk-KQMEJUWI.js +815 -0
  137. package/dist/chunk-L4QG7XZE.js +46 -0
  138. package/dist/chunk-L4QG7XZE.js.map +7 -0
  139. package/dist/chunk-L4YGMXLX.js +37 -0
  140. package/dist/chunk-L4YGMXLX.js.map +7 -0
  141. package/dist/chunk-LI7FE335.js +371 -0
  142. package/dist/chunk-M7W2GYSM.js +4961 -0
  143. package/dist/chunk-M7W2GYSM.js.map +7 -0
  144. package/dist/chunk-MV6O4I2B.js +441 -0
  145. package/dist/chunk-MXNSW55L.js +148 -0
  146. package/dist/chunk-NB7NLFGZ.js +228 -0
  147. package/dist/chunk-NGGWK6HX.js +302 -0
  148. package/dist/chunk-OGGFS66K.js +1087 -0
  149. package/dist/chunk-OSM7YS23.js +276 -0
  150. package/dist/chunk-OSM7YS23.js.map +7 -0
  151. package/dist/chunk-OXJ2TWDO.js +20644 -0
  152. package/dist/chunk-OXJ2TWDO.js.map +7 -0
  153. package/dist/chunk-Q7PYFSNU.js +107 -0
  154. package/dist/chunk-QMI222IJ.js +386 -0
  155. package/dist/chunk-QRIRWDIW.js +252 -0
  156. package/dist/chunk-R6L6NVEC.js +14 -0
  157. package/dist/chunk-RLTLYKHO.js +34 -0
  158. package/dist/chunk-S5ZI6N2I.js +293 -0
  159. package/dist/chunk-S7T7OZC7.js +158 -0
  160. package/dist/chunk-SEQLC4AD.js +177 -0
  161. package/dist/chunk-TEZLFSOV.js +54 -0
  162. package/dist/chunk-TFI7ZZJG.js +50 -0
  163. package/dist/chunk-TFI7ZZJG.js.map +7 -0
  164. package/dist/chunk-TV74I3Y5.js +43 -0
  165. package/dist/chunk-TV74I3Y5.js.map +7 -0
  166. package/dist/chunk-UEMTP6ZC.js +824 -0
  167. package/dist/chunk-UJU3Q7QJ.js +119 -0
  168. package/dist/chunk-V245THQC.js +2370 -0
  169. package/dist/chunk-V245THQC.js.map +7 -0
  170. package/dist/chunk-V6DLLX4N.js +176 -0
  171. package/dist/chunk-V6DLLX4N.js.map +7 -0
  172. package/dist/chunk-VIPMLSZP.js +217 -0
  173. package/dist/chunk-VQPS4SXU.js +97 -0
  174. package/dist/chunk-VQPS4SXU.js.map +7 -0
  175. package/dist/chunk-VUUZJANK.js +1150 -0
  176. package/dist/chunk-VYIO7T6J.js +82 -0
  177. package/dist/chunk-VYIO7T6J.js.map +7 -0
  178. package/dist/chunk-W345H42C.js +273 -0
  179. package/dist/chunk-W345H42C.js.map +7 -0
  180. package/dist/chunk-WGHO2NCP.js +205 -0
  181. package/dist/chunk-WGL6FIUE.js +330 -0
  182. package/dist/chunk-WGL6FIUE.js.map +7 -0
  183. package/dist/chunk-WPHOEG56.js +194 -0
  184. package/dist/chunk-WS5XVKPJ.js +470 -0
  185. package/dist/chunk-X6URQAFD.js +1271 -0
  186. package/dist/chunk-XYFDBYOY.js +1658 -0
  187. package/dist/chunk-XYFDBYOY.js.map +7 -0
  188. package/dist/chunk-Y6RCKITI.js +1155 -0
  189. package/dist/chunk-Y6RCKITI.js.map +7 -0
  190. package/dist/chunk-YALAQWX4.js +368 -0
  191. package/dist/chunk-YK5NFMHR.js +269 -0
  192. package/dist/chunk-YK5NFMHR.js.map +7 -0
  193. package/dist/chunk-YY4CKQJ6.js +95 -0
  194. package/dist/chunk-Z3KV6SC2.js +629 -0
  195. package/dist/chunk-ZGT4XP5J.js +1426 -0
  196. package/dist/chunk-ZGT4XP5J.js.map +7 -0
  197. package/dist/condition-JKQIRMMW.js +330 -0
  198. package/dist/controls-324AGOZG.js +39 -0
  199. package/dist/controls.config-TA4NNARU.js +37 -0
  200. package/dist/correlation-3Z36TKC2.js +96 -0
  201. package/dist/cuminc-4DY2CSZF.js +1147 -0
  202. package/dist/cuminc.integration.spec-SFQPLMSF.js +676 -0
  203. package/dist/customdata.inputui-IKGPEBXV.js +287 -0
  204. package/dist/customdata.inputui-IKGPEBXV.js.map +7 -0
  205. package/dist/dataDownload-3AE2N7KI.js +328 -0
  206. package/dist/dataDownload.integration.spec-DKOT6BJP.js +191 -0
  207. package/dist/databrowser.ui-ATODRS5P.js +419 -0
  208. package/dist/dictionary-WHDZBW5M.js +109 -0
  209. package/dist/dictionary-WHDZBW5M.js.map +7 -0
  210. package/dist/dnaMethylation-TVA5YMOR.js +36 -0
  211. package/dist/dnaMethylation.integration.spec-JTWQR6XY.js +165 -0
  212. package/dist/dnaMethylation.integration.spec-JTWQR6XY.js.map +7 -0
  213. package/dist/e2pca-KHVDNFEZ.js +348 -0
  214. package/dist/ep-B5GAAMNM.js +1254 -0
  215. package/dist/expclust.gdc.spec-EDPX7V6K.js +305 -0
  216. package/dist/facet-ZCSXKXIO.js +519 -0
  217. package/dist/geneExpClustering-ERNCMAED.js +246 -0
  218. package/dist/geneExpression-HUOXWETT.js +36 -0
  219. package/dist/geneExpression-X2KXJPND.js +312 -0
  220. package/dist/geneExpression.unit.spec-5QQB4ISW.js +100 -0
  221. package/dist/geneORA-B5UK77KL.js +276 -0
  222. package/dist/geneVariant-7MGUAIZ6.js +39 -0
  223. package/dist/geneVariant-FK3KZJ2K.js +37 -0
  224. package/dist/geneVariant.integration.spec-C6TYWKIC.js +196 -0
  225. package/dist/genefusion.ui-VKAINMY7.js +249 -0
  226. package/dist/geneset-673KAZVX.js +194 -0
  227. package/dist/genomeBrowser.spec-T6TQCJ3O.js +279 -0
  228. package/dist/grin2-376BD4XY.js +1554 -0
  229. package/dist/grin2-OALS75LC.js +1031 -0
  230. package/dist/gsea-25LD2LGP.js +45 -0
  231. package/dist/hierCluster-7KU3K52V.js +58 -0
  232. package/dist/hierCluster-M5VVWKQK.js +62 -0
  233. package/dist/hierCluster.config-EDO3SH2P.js +38 -0
  234. package/dist/hierCluster.integration.spec-UOX7J2XD.js +374 -0
  235. package/dist/hierCluster.interactivity-FEFZDXML.js +52 -0
  236. package/dist/hierCluster.renderers-A6MEGO2B.js +21 -0
  237. package/dist/imagePlot-FPXZ2H5Z.js +139 -0
  238. package/dist/importPlot-VKWPSFEK.js +8 -0
  239. package/dist/isoformExpression-2R2TOB6P.js +38 -0
  240. package/dist/isoformExpression.unit.spec-ZKFKOPKT.js +206 -0
  241. package/dist/isoformExpression.unit.spec-ZKFKOPKT.js.map +7 -0
  242. package/dist/jspdf.es.min-FC3BCETM.js +40 -0
  243. package/dist/launch.adhoc-242RS6DW.js +40 -0
  244. package/dist/leftlabel.sample-OJW3AE64.js +257 -0
  245. package/dist/legacyDataset-PBCPC5I7.js +119 -0
  246. package/dist/lollipop-TRQ3LK7Y.js +166 -0
  247. package/dist/maf-ZBOLN2FE.js +450 -0
  248. package/dist/maftimeline-GVX7NJP7.js +591 -0
  249. package/dist/matrix-73KRNXLM.js +57 -0
  250. package/dist/matrix-US3OXYRY.js +62 -0
  251. package/dist/matrix.cells-U7AQNEBP.js +28 -0
  252. package/dist/matrix.config-Q57D7C3F.js +39 -0
  253. package/dist/matrix.controls-AWXDRSWP.js +37 -0
  254. package/dist/matrix.data-EEIY6AO4.js +25 -0
  255. package/dist/matrix.dom-6QL3AJMW.js +11 -0
  256. package/dist/matrix.groups-CUB6UWC5.js +26 -0
  257. package/dist/matrix.integration.spec-PQH67KRM.js +3070 -0
  258. package/dist/matrix.interactivity-JW4AXAWO.js +40 -0
  259. package/dist/matrix.layout-I56KRVCO.js +42 -0
  260. package/dist/matrix.legend-42LQGAGX.js +22 -0
  261. package/dist/matrix.renderers-IX3FCNBK.js +36 -0
  262. package/dist/matrix.serieses-4B2WB526.js +21 -0
  263. package/dist/matrix.sort-BJACNR7G.js +27 -0
  264. package/dist/matrix.sort.unit.spec-3KKDKIPY.js +470 -0
  265. package/dist/matrix.sorterUi-W6XFYZY2.js +18 -0
  266. package/dist/matrix.sorterUi.unit.spec-CMJ7EBIW.js +340 -0
  267. package/dist/mavb-ROAE6WYA.js +730 -0
  268. package/dist/mds.fimo-UGK5OWCF.js +516 -0
  269. package/dist/mds.samplescatterplot-5KFUAYSB.js +1548 -0
  270. package/dist/mds.survivalplot-2EVNZUX5.js +481 -0
  271. package/dist/oncomatrix-UGFXSXQJ.js +293 -0
  272. package/dist/oncomatrix.spec-FEP7BR7L.js +446 -0
  273. package/dist/plot.2dvaf-WXGLWCOC.js +375 -0
  274. package/dist/plot.app-IZAFRTBU.js +39 -0
  275. package/dist/plot.barplot-Z4VWOPFJ.js +100 -0
  276. package/dist/plot.boxplot-QU2KZSB7.js +150 -0
  277. package/dist/plot.brainImaging-U643YIK7.js +51 -0
  278. package/dist/plot.disco-3BV6YEBC.js +101 -0
  279. package/dist/plot.disco-3BV6YEBC.js.map +7 -0
  280. package/dist/plot.dzi-DWXPOOQE.js +33 -0
  281. package/dist/plot.ssgq-GXB2GZO3.js +137 -0
  282. package/dist/plot.vaf2cov-EKRIADPB.js +257 -0
  283. package/dist/plot.wsi-E2LLE6HI.js +36 -0
  284. package/dist/polar-MZLIUXHO.js +184 -0
  285. package/dist/polar2-IUVHNQM4.js +226 -0
  286. package/dist/profile.spec-JRW6KYUI.js +78 -0
  287. package/dist/profileBarchart-N7HJMYZ5.js +265 -0
  288. package/dist/profileForms-Q5TPGPQP.js +438 -0
  289. package/dist/profilePlot-TXTUYDVE.js +52 -0
  290. package/dist/profileRadar-ICEASI7W.js +261 -0
  291. package/dist/profileRadarFacility-NFMRNJYX.js +261 -0
  292. package/dist/profileRadarFacility-NFMRNJYX.js.map +7 -0
  293. package/dist/proteinView-K3JFNORQ.js +633 -0
  294. package/dist/proteinView-K3JFNORQ.js.map +7 -0
  295. package/dist/proteomeAbundance-DE4NVBCN.js +21 -0
  296. package/dist/proteomeAbundance-LTB3QR3G.js +63 -0
  297. package/dist/qualitative-DFGWQURY.js +41 -0
  298. package/dist/regression-TTQTAEGD.js +54 -0
  299. package/dist/regression.inputs-2LU2XRGC.js +46 -0
  300. package/dist/regression.inputs.term-G57GL57T.js +46 -0
  301. package/dist/regression.inputs.values.table-JSEM3PXL.js +43 -0
  302. package/dist/regression.integration.spec-XJQJAIC3.js +782 -0
  303. package/dist/regression.integration.spec-XJQJAIC3.js.map +7 -0
  304. package/dist/regression.results-3YNM6LLQ.js +38 -0
  305. package/dist/regression.spec-S6WFCPSW.js +706 -0
  306. package/dist/report-YRAV4MY4.js +220 -0
  307. package/dist/sampleScatter.spec-MBJ4XNTX.js +200 -0
  308. package/dist/sampleView-IUR3ZEN7.js +46 -0
  309. package/dist/samplelst-C2NBFGH6.js +109 -0
  310. package/dist/samplematrix-AOK2HHSB.js +2196 -0
  311. package/dist/sc-XT3Z5XJI.js +84 -0
  312. package/dist/scatter-SAHKZRFL.js +800 -0
  313. package/dist/scatter.integration.spec-6KRDNHHH.js +1194 -0
  314. package/dist/scatter.integration.spec-6KRDNHHH.js.map +7 -0
  315. package/dist/selectGenomeWithTklst-2YVZ4JWV.js +132 -0
  316. package/dist/singleCellCellType-NFN5GQJM.js +36 -0
  317. package/dist/singleCellCellType.unit.spec-CR4IJ4DA.js +158 -0
  318. package/dist/singleCellCellType.unit.spec-CR4IJ4DA.js.map +7 -0
  319. package/dist/singleCellGeneExpression-7AQGLXTR.js +36 -0
  320. package/dist/singleCellGeneExpression.unit.spec-QYNWSV2G.js +151 -0
  321. package/dist/singleCellGeneExpression.unit.spec-QYNWSV2G.js.map +7 -0
  322. package/dist/singleCellPlot-IWFEG44C.js +51 -0
  323. package/dist/singlecell-3QNV4OMZ.js +1570 -0
  324. package/dist/singlecell-EATPLH66.js +84 -0
  325. package/dist/snp-UP7WL7WG.js +36 -0
  326. package/dist/snp.unit.spec-Y5NWQ442.js +174 -0
  327. package/dist/snplocus-WAQK2AZG.js +206 -0
  328. package/dist/spliceevent.a53ss.diagram-FFK27UIB.js +149 -0
  329. package/dist/spliceevent.exonskip.diagram-KWEF2OZJ.js +275 -0
  330. package/dist/spliceevent.noeventdiagram-PU4TI7OM.js +458 -0
  331. package/dist/ssGSEA-N6QOAVLW.js +36 -0
  332. package/dist/ssGSEA.unit.spec-KQBNZNNP.js +86 -0
  333. package/dist/summarizeCnvGeneexp-NWX4M6LZ.js +161 -0
  334. package/dist/summarizeCnvGeneexp-NWX4M6LZ.js.map +7 -0
  335. package/dist/summarizeGeneexpSurvival-N5VTE2G6.js +106 -0
  336. package/dist/summarizeGeneexpSurvival-N5VTE2G6.js.map +7 -0
  337. package/dist/summarizeMutationCnv-VV7CVAA7.js +162 -0
  338. package/dist/summarizeMutationCnv-VV7CVAA7.js.map +7 -0
  339. package/dist/summarizeMutationDiagnosis-5RHSG7L6.js +38 -0
  340. package/dist/summarizeMutationSurvival-22YYXGS5.js +97 -0
  341. package/dist/summary-P3WIKJS7.js +47 -0
  342. package/dist/summary.integration.spec-ULGRPICW.js +412 -0
  343. package/dist/summaryInput-IH4EVNF5.js +218 -0
  344. package/dist/sunburst-VJJ3UVYC.js +282 -0
  345. package/dist/sunburst-VJJ3UVYC.js.map +7 -0
  346. package/dist/survival-2ZE3N62A.js +44 -0
  347. package/dist/survival-ASCLKIII.js +56 -0
  348. package/dist/survival.integration.spec-C5YXOY77.js +787 -0
  349. package/dist/svg2pdf.es.min-CYTPRWNB.js +3157 -0
  350. package/dist/svgraph-AYR2UPNK.js +1385 -0
  351. package/dist/svmr-MOMW5DNY.js +3840 -0
  352. package/dist/table-PQB6KCEY.js +198 -0
  353. package/dist/termCollection-5AY2AWT4.js +36 -0
  354. package/dist/termCollection-OQMUUTW6.js +177 -0
  355. package/dist/termCollection.unit.spec-BUAXYIJK.js +206 -0
  356. package/dist/tk-EJLFFA5H.js +44 -0
  357. package/dist/tp.ui-WUW6A7KP.js +1457 -0
  358. package/dist/tvs.density-HSVPDDGA.js +18 -0
  359. package/dist/tvs.dt-MVJXQMNU.js +37 -0
  360. package/dist/tvs.dtcnv.categorical-FIIDWVK7.js +38 -0
  361. package/dist/tvs.dtcnv.continuous-JPQU3JA2.js +70 -0
  362. package/dist/tvs.dtfusion-BW35GOQM.js +38 -0
  363. package/dist/tvs.dtsnvindel-AEMFZ4EH.js +38 -0
  364. package/dist/tvs.dtsv-JHTU7UFD.js +38 -0
  365. package/dist/tvs.numeric-ICUGA4WY.js +21 -0
  366. package/dist/tvs.samplelst-VD2NFFFS.js +102 -0
  367. package/dist/tvs.termCollection-IKE5Q74D.js +151 -0
  368. package/dist/violin-DPMJLHQG.js +44 -0
  369. package/dist/violin.integration.spec-A4PNR4ES.js +1423 -0
  370. package/dist/violin.integration.spec-A4PNR4ES.js.map +7 -0
  371. package/dist/violin.interactivity-TS4DYUE5.js +36 -0
  372. package/dist/violin.renderer-53L4PXUT.js +38 -0
  373. package/dist/vocabulary-4MPFHKYC.js +39 -0
  374. package/package.json +3 -3
  375. package/dist/2dmaf-SLBAWGPG.js +0 -1371
  376. package/dist/AIProjectAdmin-6SH5X3AF.js +0 -830
  377. package/dist/AIProjectAdmin-6SH5X3AF.js.map +0 -7
  378. package/dist/AppHeader-MVYNRMC7.js +0 -833
  379. package/dist/BoxPlot-HLGWW3IK.js +0 -1295
  380. package/dist/BoxPlot-HLGWW3IK.js.map +0 -7
  381. package/dist/CorrelationVolcano-TZCYC3NI.js +0 -617
  382. package/dist/DE-2J2SK5UT.js +0 -93
  383. package/dist/DEinput-QM3GOQHM.js +0 -297
  384. package/dist/DifferentialAnalysis-DS7CQOT6.js +0 -238
  385. package/dist/Disco-U5I6NJUT.js +0 -3199
  386. package/dist/Disco-U5I6NJUT.js.map +0 -7
  387. package/dist/Disco.UI-J2B7GGEZ.js +0 -242
  388. package/dist/DmrPlot-D5W76QPY.js +0 -640
  389. package/dist/GB-LM5SGUG4.js +0 -1125
  390. package/dist/HicApp-YNBGAGKM.js +0 -2248
  391. package/dist/NumBinaryEditor-4QA5DQJT.js +0 -268
  392. package/dist/NumBinaryEditor.unit.spec-YWSIFTOJ.js +0 -284
  393. package/dist/NumContEditor-ZPLVZFLH.js +0 -105
  394. package/dist/NumContEditor.unit.spec-NBCFOCOX.js +0 -167
  395. package/dist/NumCustomBinEditor-TXEYRVPL.js +0 -36
  396. package/dist/NumCustomBinEditor.unit.spec-SQM63H4B.js +0 -282
  397. package/dist/NumDiscreteEditor-6C4OWX62.js +0 -177
  398. package/dist/NumDiscreteEditor.unit.spec-4HC4AGAM.js +0 -200
  399. package/dist/NumRegularBinEditor-VQAS3OXK.js +0 -36
  400. package/dist/NumRegularBinEditor.unit.spec-RGVEPB3Z.js +0 -225
  401. package/dist/NumSplineEditor-SXOJICHU.js +0 -190
  402. package/dist/NumSplineEditor.unit.spec-HF5E6ANH.js +0 -197
  403. package/dist/NumericDensity-LMLPMOSE.js +0 -36
  404. package/dist/NumericDensity.unit.spec-3ZI5EVON.js +0 -219
  405. package/dist/NumericHandler-Q6F6ANOS.js +0 -37
  406. package/dist/NumericHandler.unit.spec-E6Z5HUNZ.js +0 -217
  407. package/dist/RunChart2-XSNWNAIL.js +0 -756
  408. package/dist/RunChart2-XSNWNAIL.js.map +0 -7
  409. package/dist/SC-RA46YM57.js +0 -733
  410. package/dist/SC-RA46YM57.js.map +0 -7
  411. package/dist/Volcano-75UDYPVB.js +0 -1187
  412. package/dist/Volcano-75UDYPVB.js.map +0 -7
  413. package/dist/WSIViewer-GYUUXCSJ.js +0 -47933
  414. package/dist/WSIViewer-GYUUXCSJ.js.map +0 -7
  415. package/dist/WsiSamplesPlot-KMI5S2EL.js +0 -163
  416. package/dist/adSandbox-JTK5XEQL.js +0 -36
  417. package/dist/alphaGenome-JRAV6WIY.js +0 -173
  418. package/dist/app-JKDZL23V.js +0 -35
  419. package/dist/app-OEARXM6E.js +0 -47
  420. package/dist/bam-CYEPLBK4.js +0 -857
  421. package/dist/barchart-GG5UFDG4.js +0 -45
  422. package/dist/barchart.data-KXA66FAL.js +0 -22
  423. package/dist/barchart.events-P2USOIR7.js +0 -45
  424. package/dist/barchart.integration.spec-5QSPQQLJ.js +0 -1675
  425. package/dist/bars.renderer-T5R3UIBW.js +0 -12
  426. package/dist/block-6DVPQBSH.js +0 -6200
  427. package/dist/block-6DVPQBSH.js.map +0 -7
  428. package/dist/block.init-ZHX6DFWF.js +0 -36
  429. package/dist/block.mds.expressionrank-YMGYXXYT.js +0 -357
  430. package/dist/block.mds.geneboxplot-IAILQYX4.js +0 -826
  431. package/dist/block.mds.junction-BRNFNQMU.js +0 -1543
  432. package/dist/block.mds.svcnv-OHKC7YPO.js +0 -6799
  433. package/dist/block.svg-PNGK45HW.js +0 -162
  434. package/dist/block.tk.aicheck-SCIOJ4WN.js +0 -281
  435. package/dist/block.tk.ase-BABJ73GG.js +0 -363
  436. package/dist/block.tk.bam-LZWJ5BCQ.js +0 -1904
  437. package/dist/block.tk.bedgraphdot-7NQLC3XJ.js +0 -382
  438. package/dist/block.tk.bigwig.ui-VNY4SFD5.js +0 -209
  439. package/dist/block.tk.hicstraw-36A7VDRM.js +0 -821
  440. package/dist/block.tk.junction-D373YEMK.js +0 -2362
  441. package/dist/block.tk.junction.textmatrixui-FFII7J3X.js +0 -197
  442. package/dist/block.tk.ld-XGB6KMDO.js +0 -97
  443. package/dist/block.tk.menu-PEZANZBZ.js +0 -1027
  444. package/dist/block.tk.pgv-MU5BPTT2.js +0 -942
  445. package/dist/brainImaging-LVJON47N.js +0 -421
  446. package/dist/chat-5FDIAQJ4.js +0 -148
  447. package/dist/chunk-22NJUYET.js +0 -281
  448. package/dist/chunk-22NJUYET.js.map +0 -7
  449. package/dist/chunk-2J3566TA.js +0 -215
  450. package/dist/chunk-2OSEZCWZ.js +0 -205
  451. package/dist/chunk-2SRMRC6L.js +0 -421
  452. package/dist/chunk-2SRMRC6L.js.map +0 -7
  453. package/dist/chunk-5OHXYXLD.js +0 -46
  454. package/dist/chunk-5OHXYXLD.js.map +0 -7
  455. package/dist/chunk-6MSCYO7K.js +0 -119
  456. package/dist/chunk-75EBDB7G.js +0 -21
  457. package/dist/chunk-75EBDB7G.js.map +0 -7
  458. package/dist/chunk-7A7NMCQ3.js +0 -534
  459. package/dist/chunk-7FEHI46K.js +0 -20456
  460. package/dist/chunk-7FEHI46K.js.map +0 -7
  461. package/dist/chunk-AETE4F7R.js +0 -252
  462. package/dist/chunk-AZYDW5T7.js +0 -441
  463. package/dist/chunk-B6HCIAM3.js +0 -34
  464. package/dist/chunk-BEWDIM6H.js +0 -42
  465. package/dist/chunk-BEWDIM6H.js.map +0 -7
  466. package/dist/chunk-CCIZJAXB.js +0 -2815
  467. package/dist/chunk-DHZL3FBC.js +0 -107
  468. package/dist/chunk-DONWY7TP.js +0 -39
  469. package/dist/chunk-DVDDXOWT.js +0 -815
  470. package/dist/chunk-E6DRQJJT.js +0 -480
  471. package/dist/chunk-ESKU6LNC.js +0 -36
  472. package/dist/chunk-ESKU6LNC.js.map +0 -7
  473. package/dist/chunk-F6V4AYWP.js +0 -177
  474. package/dist/chunk-FBAJTPBU.js +0 -302
  475. package/dist/chunk-FGMPKWT5.js +0 -371
  476. package/dist/chunk-FK4MYVW2.js +0 -261
  477. package/dist/chunk-FK4MYVW2.js.map +0 -7
  478. package/dist/chunk-FMBJ4SKC.js +0 -98
  479. package/dist/chunk-FMBJ4SKC.js.map +0 -7
  480. package/dist/chunk-FOEZG4VX.js +0 -505
  481. package/dist/chunk-FOEZG4VX.js.map +0 -7
  482. package/dist/chunk-FQRLSKJC.js +0 -226
  483. package/dist/chunk-G6ELKVBG.js +0 -629
  484. package/dist/chunk-GKK3CZ6H.js +0 -4207
  485. package/dist/chunk-GO5SIPFE.js +0 -194
  486. package/dist/chunk-GPOECA3V.js +0 -386
  487. package/dist/chunk-GTOY3JJO.js +0 -288
  488. package/dist/chunk-GTOY3JJO.js.map +0 -7
  489. package/dist/chunk-GW7DHJYH.js +0 -439
  490. package/dist/chunk-GW7DHJYH.js.map +0 -7
  491. package/dist/chunk-H2D7EVUA.js +0 -158
  492. package/dist/chunk-H2K5KZP7.js +0 -95
  493. package/dist/chunk-H5XFH3FV.js +0 -153
  494. package/dist/chunk-H5XFH3FV.js.map +0 -7
  495. package/dist/chunk-HAMDFQIX.js +0 -228
  496. package/dist/chunk-HH4QLSTK.js +0 -4952
  497. package/dist/chunk-HH4QLSTK.js.map +0 -7
  498. package/dist/chunk-IBTPGSYI.js +0 -526
  499. package/dist/chunk-IBTPGSYI.js.map +0 -7
  500. package/dist/chunk-IC7SUXJD.js +0 -82
  501. package/dist/chunk-IC7SUXJD.js.map +0 -7
  502. package/dist/chunk-IGEQI6MR.js +0 -1561
  503. package/dist/chunk-IGEQI6MR.js.map +0 -7
  504. package/dist/chunk-IIRU6VK2.js +0 -2672
  505. package/dist/chunk-ILF2GKBY.js +0 -1205
  506. package/dist/chunk-IP4T477W.js +0 -92
  507. package/dist/chunk-IQIXGTQV.js +0 -84
  508. package/dist/chunk-IQIXGTQV.js.map +0 -7
  509. package/dist/chunk-IXT4U5CE.js +0 -91
  510. package/dist/chunk-IXT4U5CE.js.map +0 -7
  511. package/dist/chunk-JHOGX5VE.js +0 -272
  512. package/dist/chunk-JOXUBWN3.js +0 -381
  513. package/dist/chunk-K57RR3FD.js +0 -142
  514. package/dist/chunk-K6JLCMVL.js +0 -129
  515. package/dist/chunk-KISFQDQE.js +0 -258
  516. package/dist/chunk-KISFQDQE.js.map +0 -7
  517. package/dist/chunk-KSFSM46X.js +0 -100
  518. package/dist/chunk-KVG7FTTK.js +0 -470
  519. package/dist/chunk-LEDPPLQK.js +0 -158
  520. package/dist/chunk-LUTT3MBZ.js +0 -1150
  521. package/dist/chunk-MDL2HG3N.js +0 -257
  522. package/dist/chunk-MDL2HG3N.js.map +0 -7
  523. package/dist/chunk-MNRYCG2S.js +0 -1271
  524. package/dist/chunk-MPJHDHBA.js +0 -2784
  525. package/dist/chunk-MXI3NXRB.js +0 -407
  526. package/dist/chunk-O4PXELXF.js +0 -615
  527. package/dist/chunk-ORPCSG6T.js +0 -14
  528. package/dist/chunk-OUKDZKSZ.js +0 -334
  529. package/dist/chunk-OUKDZKSZ.js.map +0 -7
  530. package/dist/chunk-P5HLYAHP.js +0 -1087
  531. package/dist/chunk-PIACSJPH.js +0 -148
  532. package/dist/chunk-PQABAAEZ.js +0 -31
  533. package/dist/chunk-PSMDCZET.js +0 -46
  534. package/dist/chunk-PSMDCZET.js.map +0 -7
  535. package/dist/chunk-RFIVPTMS.js +0 -217
  536. package/dist/chunk-RSU37SVQ.js +0 -54
  537. package/dist/chunk-RTC4U4PH.js +0 -2327
  538. package/dist/chunk-RTC4U4PH.js.map +0 -7
  539. package/dist/chunk-RZ5JP44H.js +0 -276
  540. package/dist/chunk-RZ5JP44H.js.map +0 -7
  541. package/dist/chunk-SPAIFVM2.js +0 -1155
  542. package/dist/chunk-SPAIFVM2.js.map +0 -7
  543. package/dist/chunk-T2HYA2KL.js +0 -55
  544. package/dist/chunk-TCPU43TU.js +0 -1741
  545. package/dist/chunk-TCPU43TU.js.map +0 -7
  546. package/dist/chunk-TE3DK3A6.js +0 -147
  547. package/dist/chunk-TIQPSXFJ.js +0 -237
  548. package/dist/chunk-TIQPSXFJ.js.map +0 -7
  549. package/dist/chunk-TN5GSG34.js +0 -26
  550. package/dist/chunk-UBGTQMOO.js +0 -52
  551. package/dist/chunk-UBS5UVIY.js +0 -13624
  552. package/dist/chunk-UE5ZYM63.js +0 -48
  553. package/dist/chunk-UE5ZYM63.js.map +0 -7
  554. package/dist/chunk-UQACPOCM.js +0 -102
  555. package/dist/chunk-UR3C4SCH.js +0 -446
  556. package/dist/chunk-UWX7W22M.js +0 -121
  557. package/dist/chunk-VJ37HKM6.js +0 -368
  558. package/dist/chunk-VLTDUJRM.js +0 -293
  559. package/dist/chunk-W6UUEAEP.js +0 -6364
  560. package/dist/chunk-X6UPDFDX.js +0 -229
  561. package/dist/chunk-XD6BFNMR.js +0 -172
  562. package/dist/chunk-XD6BFNMR.js.map +0 -7
  563. package/dist/chunk-XDI4UFCZ.js +0 -467
  564. package/dist/chunk-XDI4UFCZ.js.map +0 -7
  565. package/dist/chunk-XOBD3EAM.js +0 -1425
  566. package/dist/chunk-XOBD3EAM.js.map +0 -7
  567. package/dist/chunk-Y3TDC7NU.js +0 -170
  568. package/dist/chunk-YOTWMCT5.js +0 -824
  569. package/dist/chunk-YUMPQ3CJ.js +0 -203
  570. package/dist/condition-VHP2L4GM.js +0 -330
  571. package/dist/controls-N5Q7U7JR.js +0 -39
  572. package/dist/controls.config-NJMW4SLR.js +0 -37
  573. package/dist/correlation-3LDASF5I.js +0 -96
  574. package/dist/cuminc-UWJ23W6C.js +0 -1147
  575. package/dist/cuminc.integration.spec-OZYYET3W.js +0 -676
  576. package/dist/customdata.inputui-2FVCVSE4.js +0 -285
  577. package/dist/customdata.inputui-2FVCVSE4.js.map +0 -7
  578. package/dist/dataDownload-4S4PE5HX.js +0 -328
  579. package/dist/dataDownload.integration.spec-B57LEKFZ.js +0 -191
  580. package/dist/databrowser.ui-N6GHEQ2P.js +0 -419
  581. package/dist/dictionary-UP46QRYZ.js +0 -98
  582. package/dist/dictionary-UP46QRYZ.js.map +0 -7
  583. package/dist/dnaMethylation-BOGAUAWA.js +0 -36
  584. package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js +0 -179
  585. package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js.map +0 -7
  586. package/dist/e2pca-L5EBQJNP.js +0 -348
  587. package/dist/ep-Z67ORKUX.js +0 -1254
  588. package/dist/expclust.gdc.spec-SP7VOL64.js +0 -305
  589. package/dist/facet-HDB4VDGU.js +0 -519
  590. package/dist/geneExpClustering-6ZPOLTDJ.js +0 -246
  591. package/dist/geneExpression-T6YIG4XQ.js +0 -312
  592. package/dist/geneExpression-T7QUHV5S.js +0 -36
  593. package/dist/geneExpression.unit.spec-DO52L5IB.js +0 -100
  594. package/dist/geneORA-KOUDUWUO.js +0 -276
  595. package/dist/geneVariant-FVR76F6I.js +0 -39
  596. package/dist/geneVariant-I5QUITKG.js +0 -37
  597. package/dist/geneVariant.integration.spec-D4IRM7B5.js +0 -196
  598. package/dist/genefusion.ui-35IYSZD7.js +0 -249
  599. package/dist/geneset-7ZHJ5KWK.js +0 -194
  600. package/dist/genomeBrowser.spec-VXASVLNH.js +0 -279
  601. package/dist/grin2-7NM56COO.js +0 -1554
  602. package/dist/grin2-IY26UUQI.js +0 -1031
  603. package/dist/gsea-TORO46C6.js +0 -45
  604. package/dist/hierCluster-3BKEGW6P.js +0 -58
  605. package/dist/hierCluster-HM3LOM6V.js +0 -62
  606. package/dist/hierCluster.config-LDO5IGQ5.js +0 -38
  607. package/dist/hierCluster.integration.spec-XO5R6CQT.js +0 -374
  608. package/dist/hierCluster.interactivity-NVQ6262K.js +0 -52
  609. package/dist/hierCluster.renderers-SWPPNBLU.js +0 -21
  610. package/dist/imagePlot-V4WLAPV6.js +0 -139
  611. package/dist/importPlot-NZKQEOX4.js +0 -8
  612. package/dist/isoformExpression-TIZBIGNL.js +0 -38
  613. package/dist/isoformExpression.unit.spec-WHH5LPFG.js +0 -124
  614. package/dist/isoformExpression.unit.spec-WHH5LPFG.js.map +0 -7
  615. package/dist/jspdf.es.min-DO4YWL2R.js +0 -40
  616. package/dist/launch.adhoc-JYEN42NM.js +0 -40
  617. package/dist/leftlabel.sample-43DL3J3H.js +0 -257
  618. package/dist/legacyDataset-QRSNRVUA.js +0 -119
  619. package/dist/lollipop-NMWZ4FVF.js +0 -166
  620. package/dist/maf-DS3EOVGV.js +0 -450
  621. package/dist/maftimeline-ZB2753S7.js +0 -591
  622. package/dist/matrix-RCGQWQ3C.js +0 -57
  623. package/dist/matrix-WTTEK4FT.js +0 -62
  624. package/dist/matrix.cells-UO5ASQ35.js +0 -28
  625. package/dist/matrix.config-3UQAT3QR.js +0 -39
  626. package/dist/matrix.controls-PRZ77K5L.js +0 -37
  627. package/dist/matrix.data-4W73RQ3H.js +0 -25
  628. package/dist/matrix.dom-IZFFS4RQ.js +0 -11
  629. package/dist/matrix.groups-5VMPI7SA.js +0 -26
  630. package/dist/matrix.integration.spec-2F5LDLC2.js +0 -3070
  631. package/dist/matrix.interactivity-MIPZ6ELV.js +0 -40
  632. package/dist/matrix.layout-EO5LVYRO.js +0 -42
  633. package/dist/matrix.legend-QBFBFEUG.js +0 -22
  634. package/dist/matrix.renderers-ERJXVCQL.js +0 -36
  635. package/dist/matrix.serieses-E23EPXHA.js +0 -21
  636. package/dist/matrix.sort-I4UGMEXR.js +0 -27
  637. package/dist/matrix.sort.unit.spec-CRGF6CSE.js +0 -470
  638. package/dist/matrix.sorterUi-YLSYTYLE.js +0 -18
  639. package/dist/matrix.sorterUi.unit.spec-ENG3ICOO.js +0 -340
  640. package/dist/mavb-5WR7OJHI.js +0 -730
  641. package/dist/mds.fimo-3ZRH7BBJ.js +0 -516
  642. package/dist/mds.samplescatterplot-RPXR2FVK.js +0 -1548
  643. package/dist/mds.survivalplot-WSSMYUZD.js +0 -481
  644. package/dist/oncomatrix-JKYPUJQR.js +0 -293
  645. package/dist/oncomatrix.spec-OEGU4DYK.js +0 -446
  646. package/dist/plot.2dvaf-ZGARLQNK.js +0 -375
  647. package/dist/plot.app-TKUJH3LK.js +0 -39
  648. package/dist/plot.barplot-FEIPGDZ2.js +0 -100
  649. package/dist/plot.boxplot-6RASUMZB.js +0 -150
  650. package/dist/plot.brainImaging-ZJPFWX2W.js +0 -51
  651. package/dist/plot.disco-2KTKB3XX.js +0 -101
  652. package/dist/plot.disco-2KTKB3XX.js.map +0 -7
  653. package/dist/plot.dzi-PC34YI6Y.js +0 -33
  654. package/dist/plot.ssgq-Z4UNJKWO.js +0 -137
  655. package/dist/plot.vaf2cov-NZ4WULKT.js +0 -257
  656. package/dist/plot.wsi-YYXFAZWY.js +0 -36
  657. package/dist/polar-X2GPIBLB.js +0 -184
  658. package/dist/polar2-TZ553QQH.js +0 -226
  659. package/dist/profile.spec-VB6VMFLY.js +0 -78
  660. package/dist/profileBarchart-SKJSTC7B.js +0 -265
  661. package/dist/profileForms-RLOGSMAQ.js +0 -438
  662. package/dist/profilePlot-267ZS3RG.js +0 -52
  663. package/dist/profileRadar-KGOBHCSF.js +0 -261
  664. package/dist/profileRadarFacility-MCJKSHUM.js +0 -261
  665. package/dist/profileRadarFacility-MCJKSHUM.js.map +0 -7
  666. package/dist/proteomeAbundance-JUYAYO5I.js +0 -63
  667. package/dist/proteomeAbundance-PGHZSVAF.js +0 -19
  668. package/dist/qualitative-3IECKKJM.js +0 -41
  669. package/dist/regression-J6FFRPXN.js +0 -54
  670. package/dist/regression.inputs-T7LWBSYZ.js +0 -46
  671. package/dist/regression.inputs.term-TT7PNX6G.js +0 -46
  672. package/dist/regression.inputs.values.table-SHFUNKCS.js +0 -43
  673. package/dist/regression.integration.spec-QKHMJTHA.js +0 -784
  674. package/dist/regression.integration.spec-QKHMJTHA.js.map +0 -7
  675. package/dist/regression.results-D4WX6VIV.js +0 -38
  676. package/dist/regression.spec-7SW55L7X.js +0 -706
  677. package/dist/report-QYOZ4BRF.js +0 -220
  678. package/dist/sampleScatter.spec-JCHFMGNF.js +0 -200
  679. package/dist/sampleView-7RPKNAZC.js +0 -46
  680. package/dist/samplelst-4WNPHZVG.js +0 -109
  681. package/dist/samplematrix-CG52DSXJ.js +0 -2196
  682. package/dist/sc-OJSWILSA.js +0 -84
  683. package/dist/scatter-LG2RMMEC.js +0 -800
  684. package/dist/scatter.integration.spec-QPANYTKW.js +0 -1194
  685. package/dist/scatter.integration.spec-QPANYTKW.js.map +0 -7
  686. package/dist/selectGenomeWithTklst-QXRVE6N4.js +0 -132
  687. package/dist/singleCellCellType-XBSRL33U.js +0 -36
  688. package/dist/singleCellCellType.unit.spec-YZX4CSXA.js +0 -177
  689. package/dist/singleCellCellType.unit.spec-YZX4CSXA.js.map +0 -7
  690. package/dist/singleCellGeneExpression-64ECP62X.js +0 -36
  691. package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js +0 -163
  692. package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js.map +0 -7
  693. package/dist/singleCellPlot-E5F62JY6.js +0 -51
  694. package/dist/singlecell-FCY5EOUV.js +0 -84
  695. package/dist/singlecell-S7B5V7NK.js +0 -1570
  696. package/dist/snp-ACKX4GRX.js +0 -36
  697. package/dist/snp.unit.spec-QBGHKKUD.js +0 -174
  698. package/dist/snplocus-7EUOW7J7.js +0 -206
  699. package/dist/spliceevent.a53ss.diagram-ALQZA35Z.js +0 -149
  700. package/dist/spliceevent.exonskip.diagram-UF7WJA5R.js +0 -275
  701. package/dist/spliceevent.noeventdiagram-4HPGRNRR.js +0 -458
  702. package/dist/ssGSEA-FDRBBBLJ.js +0 -36
  703. package/dist/ssGSEA.unit.spec-EZEOWJVV.js +0 -86
  704. package/dist/summarizeCnvGeneexp-FTL2MGAJ.js +0 -158
  705. package/dist/summarizeCnvGeneexp-FTL2MGAJ.js.map +0 -7
  706. package/dist/summarizeGeneexpSurvival-DDIF4UW6.js +0 -105
  707. package/dist/summarizeGeneexpSurvival-DDIF4UW6.js.map +0 -7
  708. package/dist/summarizeMutationCnv-L3GL5YDY.js +0 -159
  709. package/dist/summarizeMutationCnv-L3GL5YDY.js.map +0 -7
  710. package/dist/summarizeMutationDiagnosis-LALOJTHV.js +0 -38
  711. package/dist/summarizeMutationSurvival-TSNTSOBZ.js +0 -97
  712. package/dist/summary-YRHVS64T.js +0 -47
  713. package/dist/summary.integration.spec-766YQLQA.js +0 -412
  714. package/dist/summaryInput-VQ2X6GSX.js +0 -218
  715. package/dist/sunburst-XFOONS6K.js +0 -282
  716. package/dist/sunburst-XFOONS6K.js.map +0 -7
  717. package/dist/survival-FQXZH2MM.js +0 -44
  718. package/dist/survival-TVA3ZWVP.js +0 -56
  719. package/dist/survival.integration.spec-WFIOPD6A.js +0 -787
  720. package/dist/svg2pdf.es.min-EZ4UYRSH.js +0 -3157
  721. package/dist/svgraph-4BFBO7EL.js +0 -1385
  722. package/dist/svmr-ML7GAIIA.js +0 -3840
  723. package/dist/table-SMLMUWPP.js +0 -198
  724. package/dist/termCollection-22CPTISZ.js +0 -36
  725. package/dist/termCollection-EE6AOIVA.js +0 -177
  726. package/dist/termCollection.unit.spec-4DIW3CJ3.js +0 -206
  727. package/dist/tk-ITZCKOQ5.js +0 -44
  728. package/dist/tp.ui-R6HVKCBC.js +0 -1457
  729. package/dist/tvs.density-AQ5GD437.js +0 -18
  730. package/dist/tvs.dt-2263TBEJ.js +0 -37
  731. package/dist/tvs.dtcnv.categorical-TRRHL33N.js +0 -38
  732. package/dist/tvs.dtcnv.continuous-GREYNF52.js +0 -70
  733. package/dist/tvs.dtfusion-XOX46L3M.js +0 -38
  734. package/dist/tvs.dtsnvindel-IDMXT53F.js +0 -38
  735. package/dist/tvs.dtsv-ZDWFYH2C.js +0 -38
  736. package/dist/tvs.numeric-ZN2R7BH3.js +0 -21
  737. package/dist/tvs.samplelst-GAP76HRH.js +0 -102
  738. package/dist/tvs.termCollection-GQ65UKSI.js +0 -151
  739. package/dist/violin-JGDL62YA.js +0 -44
  740. package/dist/violin.integration.spec-W4NN7LBY.js +0 -1417
  741. package/dist/violin.integration.spec-W4NN7LBY.js.map +0 -7
  742. package/dist/violin.interactivity-H4RP4K5U.js +0 -36
  743. package/dist/violin.renderer-QPHLACDC.js +0 -38
  744. package/dist/vocabulary-7JACY4J2.js +0 -39
  745. /package/dist/{2dmaf-SLBAWGPG.js.map → 2dmaf-6ZTETSC5.js.map} +0 -0
  746. /package/dist/{AppHeader-MVYNRMC7.js.map → AppHeader-U7SJPIBS.js.map} +0 -0
  747. /package/dist/{CorrelationVolcano-TZCYC3NI.js.map → CorrelationVolcano-7SE4CTBW.js.map} +0 -0
  748. /package/dist/{DE-2J2SK5UT.js.map → DE-PZ7RHPBS.js.map} +0 -0
  749. /package/dist/{DEinput-QM3GOQHM.js.map → DEinput-UZEQIU2V.js.map} +0 -0
  750. /package/dist/{DifferentialAnalysis-DS7CQOT6.js.map → DifferentialAnalysis-L6BOEYVO.js.map} +0 -0
  751. /package/dist/{Disco.UI-J2B7GGEZ.js.map → Disco.UI-HKOUAD4P.js.map} +0 -0
  752. /package/dist/{DmrPlot-D5W76QPY.js.map → DmrPlot-3R24PTXP.js.map} +0 -0
  753. /package/dist/{GB-LM5SGUG4.js.map → GB-SZVYZASR.js.map} +0 -0
  754. /package/dist/{HicApp-YNBGAGKM.js.map → HicApp-SEEJETVE.js.map} +0 -0
  755. /package/dist/{NumBinaryEditor-4QA5DQJT.js.map → NumBinaryEditor-SDQFJ3FW.js.map} +0 -0
  756. /package/dist/{NumBinaryEditor.unit.spec-YWSIFTOJ.js.map → NumBinaryEditor.unit.spec-76ZZXTYC.js.map} +0 -0
  757. /package/dist/{NumContEditor-ZPLVZFLH.js.map → NumContEditor-G75O4YZE.js.map} +0 -0
  758. /package/dist/{NumContEditor.unit.spec-NBCFOCOX.js.map → NumContEditor.unit.spec-BFUZRBPL.js.map} +0 -0
  759. /package/dist/{NumCustomBinEditor-TXEYRVPL.js.map → NumCustomBinEditor-ILTPHCEF.js.map} +0 -0
  760. /package/dist/{NumCustomBinEditor.unit.spec-SQM63H4B.js.map → NumCustomBinEditor.unit.spec-GFIYV55V.js.map} +0 -0
  761. /package/dist/{NumDiscreteEditor-6C4OWX62.js.map → NumDiscreteEditor-5K3OKUOE.js.map} +0 -0
  762. /package/dist/{NumDiscreteEditor.unit.spec-4HC4AGAM.js.map → NumDiscreteEditor.unit.spec-NZ4KWPFK.js.map} +0 -0
  763. /package/dist/{NumRegularBinEditor-VQAS3OXK.js.map → NumRegularBinEditor-7ZJ2MEMY.js.map} +0 -0
  764. /package/dist/{NumRegularBinEditor.unit.spec-RGVEPB3Z.js.map → NumRegularBinEditor.unit.spec-QGVJET65.js.map} +0 -0
  765. /package/dist/{NumSplineEditor-SXOJICHU.js.map → NumSplineEditor-KE4UPODZ.js.map} +0 -0
  766. /package/dist/{NumSplineEditor.unit.spec-HF5E6ANH.js.map → NumSplineEditor.unit.spec-YQOOZA7S.js.map} +0 -0
  767. /package/dist/{NumericDensity-LMLPMOSE.js.map → NumericDensity-RL42P4QC.js.map} +0 -0
  768. /package/dist/{NumericDensity.unit.spec-3ZI5EVON.js.map → NumericDensity.unit.spec-Y6RMTYC7.js.map} +0 -0
  769. /package/dist/{NumericHandler-Q6F6ANOS.js.map → NumericHandler-4QIX324I.js.map} +0 -0
  770. /package/dist/{NumericHandler.unit.spec-E6Z5HUNZ.js.map → NumericHandler.unit.spec-T6F5QYP6.js.map} +0 -0
  771. /package/dist/{WsiSamplesPlot-KMI5S2EL.js.map → WsiSamplesPlot-CXGWPCDL.js.map} +0 -0
  772. /package/dist/{adSandbox-JTK5XEQL.js.map → adSandbox-DE4VRO4Z.js.map} +0 -0
  773. /package/dist/{alphaGenome-JRAV6WIY.js.map → alphaGenome-FSIGC5ZT.js.map} +0 -0
  774. /package/dist/{app-JKDZL23V.js.map → app-KZGKWQMU.js.map} +0 -0
  775. /package/dist/{app-OEARXM6E.js.map → app-MQRJ7FVL.js.map} +0 -0
  776. /package/dist/{bam-CYEPLBK4.js.map → bam-BDWTA4O3.js.map} +0 -0
  777. /package/dist/{barchart-GG5UFDG4.js.map → barchart-4Q6LVJY4.js.map} +0 -0
  778. /package/dist/{barchart.data-KXA66FAL.js.map → barchart.data-EXENRVMU.js.map} +0 -0
  779. /package/dist/{barchart.events-P2USOIR7.js.map → barchart.events-XRGND6I7.js.map} +0 -0
  780. /package/dist/{barchart.integration.spec-5QSPQQLJ.js.map → barchart.integration.spec-VQITP4YH.js.map} +0 -0
  781. /package/dist/{bars.renderer-T5R3UIBW.js.map → bars.renderer-S7A7I6BQ.js.map} +0 -0
  782. /package/dist/{block.init-ZHX6DFWF.js.map → block.init-NCNSE3HD.js.map} +0 -0
  783. /package/dist/{block.mds.expressionrank-YMGYXXYT.js.map → block.mds.expressionrank-JYZARS7T.js.map} +0 -0
  784. /package/dist/{block.mds.geneboxplot-IAILQYX4.js.map → block.mds.geneboxplot-FD2MCIHV.js.map} +0 -0
  785. /package/dist/{block.mds.junction-BRNFNQMU.js.map → block.mds.junction-LOHVQBIU.js.map} +0 -0
  786. /package/dist/{block.mds.svcnv-OHKC7YPO.js.map → block.mds.svcnv-Z7SAYPQL.js.map} +0 -0
  787. /package/dist/{block.svg-PNGK45HW.js.map → block.svg-LNJOKQNN.js.map} +0 -0
  788. /package/dist/{block.tk.aicheck-SCIOJ4WN.js.map → block.tk.aicheck-IXCMMAGV.js.map} +0 -0
  789. /package/dist/{block.tk.ase-BABJ73GG.js.map → block.tk.ase-WYRYFP6N.js.map} +0 -0
  790. /package/dist/{block.tk.bam-LZWJ5BCQ.js.map → block.tk.bam-EIVBNGAL.js.map} +0 -0
  791. /package/dist/{block.tk.bedgraphdot-7NQLC3XJ.js.map → block.tk.bedgraphdot-3FHLNCU7.js.map} +0 -0
  792. /package/dist/{block.tk.bigwig.ui-VNY4SFD5.js.map → block.tk.bigwig.ui-YDQU5PC4.js.map} +0 -0
  793. /package/dist/{block.tk.hicstraw-36A7VDRM.js.map → block.tk.hicstraw-S3ROL3CV.js.map} +0 -0
  794. /package/dist/{block.tk.junction-D373YEMK.js.map → block.tk.junction-DL7RNWX3.js.map} +0 -0
  795. /package/dist/{block.tk.junction.textmatrixui-FFII7J3X.js.map → block.tk.junction.textmatrixui-Z6I7IEDY.js.map} +0 -0
  796. /package/dist/{block.tk.ld-XGB6KMDO.js.map → block.tk.ld-XHVU6L56.js.map} +0 -0
  797. /package/dist/{block.tk.menu-PEZANZBZ.js.map → block.tk.menu-FPLAEEFY.js.map} +0 -0
  798. /package/dist/{block.tk.pgv-MU5BPTT2.js.map → block.tk.pgv-6ZZ2QGNO.js.map} +0 -0
  799. /package/dist/{brainImaging-LVJON47N.js.map → brainImaging-VSOOMITW.js.map} +0 -0
  800. /package/dist/{chat-5FDIAQJ4.js.map → chat-LW23PIG5.js.map} +0 -0
  801. /package/dist/{chunk-PQABAAEZ.js.map → chunk-2LULD7RN.js.map} +0 -0
  802. /package/dist/{chunk-LEDPPLQK.js.map → chunk-3AGB6HL4.js.map} +0 -0
  803. /package/dist/{chunk-T2HYA2KL.js.map → chunk-3AVDNIDN.js.map} +0 -0
  804. /package/dist/{chunk-JOXUBWN3.js.map → chunk-3DCABJHB.js.map} +0 -0
  805. /package/dist/{chunk-UQACPOCM.js.map → chunk-3JMB3OSC.js.map} +0 -0
  806. /package/dist/{chunk-2J3566TA.js.map → chunk-3UEMY45Y.js.map} +0 -0
  807. /package/dist/{chunk-ILF2GKBY.js.map → chunk-4RR4KPRJ.js.map} +0 -0
  808. /package/dist/{chunk-TE3DK3A6.js.map → chunk-5HCB4HNL.js.map} +0 -0
  809. /package/dist/{chunk-IP4T477W.js.map → chunk-5RFB7TYT.js.map} +0 -0
  810. /package/dist/{chunk-7A7NMCQ3.js.map → chunk-5UMPBVA6.js.map} +0 -0
  811. /package/dist/{chunk-MXI3NXRB.js.map → chunk-6C2SBTLR.js.map} +0 -0
  812. /package/dist/{chunk-UBS5UVIY.js.map → chunk-6LAE5AVA.js.map} +0 -0
  813. /package/dist/{chunk-JHOGX5VE.js.map → chunk-7VV43ICF.js.map} +0 -0
  814. /package/dist/{chunk-O4PXELXF.js.map → chunk-A742TQD2.js.map} +0 -0
  815. /package/dist/{chunk-E6DRQJJT.js.map → chunk-AFLFPYJI.js.map} +0 -0
  816. /package/dist/{chunk-DONWY7TP.js.map → chunk-AQ4OP4GR.js.map} +0 -0
  817. /package/dist/{chunk-FQRLSKJC.js.map → chunk-BAY47D5E.js.map} +0 -0
  818. /package/dist/{chunk-TN5GSG34.js.map → chunk-CFHKYLDY.js.map} +0 -0
  819. /package/dist/{chunk-K6JLCMVL.js.map → chunk-CTAKX5CT.js.map} +0 -0
  820. /package/dist/{chunk-Y3TDC7NU.js.map → chunk-D4QFQQWJ.js.map} +0 -0
  821. /package/dist/{chunk-YUMPQ3CJ.js.map → chunk-DGMK7SXX.js.map} +0 -0
  822. /package/dist/{chunk-UR3C4SCH.js.map → chunk-DNCSPTOQ.js.map} +0 -0
  823. /package/dist/{chunk-IIRU6VK2.js.map → chunk-DTDQKGIQ.js.map} +0 -0
  824. /package/dist/{chunk-K57RR3FD.js.map → chunk-E4NVHKWD.js.map} +0 -0
  825. /package/dist/{chunk-GKK3CZ6H.js.map → chunk-E6KEZENR.js.map} +0 -0
  826. /package/dist/{chunk-X6UPDFDX.js.map → chunk-FRBYOOWT.js.map} +0 -0
  827. /package/dist/{chunk-UWX7W22M.js.map → chunk-FVWCYGJL.js.map} +0 -0
  828. /package/dist/{chunk-CCIZJAXB.js.map → chunk-I4IKRKYJ.js.map} +0 -0
  829. /package/dist/{chunk-W6UUEAEP.js.map → chunk-IEQSUAIO.js.map} +0 -0
  830. /package/dist/{chunk-UBGTQMOO.js.map → chunk-JMPSZMDD.js.map} +0 -0
  831. /package/dist/{chunk-MPJHDHBA.js.map → chunk-JXOL73PT.js.map} +0 -0
  832. /package/dist/{chunk-KSFSM46X.js.map → chunk-K62XUHA4.js.map} +0 -0
  833. /package/dist/{chunk-DVDDXOWT.js.map → chunk-KQMEJUWI.js.map} +0 -0
  834. /package/dist/{chunk-FGMPKWT5.js.map → chunk-LI7FE335.js.map} +0 -0
  835. /package/dist/{chunk-AZYDW5T7.js.map → chunk-MV6O4I2B.js.map} +0 -0
  836. /package/dist/{chunk-PIACSJPH.js.map → chunk-MXNSW55L.js.map} +0 -0
  837. /package/dist/{chunk-HAMDFQIX.js.map → chunk-NB7NLFGZ.js.map} +0 -0
  838. /package/dist/{chunk-FBAJTPBU.js.map → chunk-NGGWK6HX.js.map} +0 -0
  839. /package/dist/{chunk-P5HLYAHP.js.map → chunk-OGGFS66K.js.map} +0 -0
  840. /package/dist/{chunk-DHZL3FBC.js.map → chunk-Q7PYFSNU.js.map} +0 -0
  841. /package/dist/{chunk-GPOECA3V.js.map → chunk-QMI222IJ.js.map} +0 -0
  842. /package/dist/{chunk-AETE4F7R.js.map → chunk-QRIRWDIW.js.map} +0 -0
  843. /package/dist/{chunk-ORPCSG6T.js.map → chunk-R6L6NVEC.js.map} +0 -0
  844. /package/dist/{chunk-B6HCIAM3.js.map → chunk-RLTLYKHO.js.map} +0 -0
  845. /package/dist/{chunk-VLTDUJRM.js.map → chunk-S5ZI6N2I.js.map} +0 -0
  846. /package/dist/{chunk-H2D7EVUA.js.map → chunk-S7T7OZC7.js.map} +0 -0
  847. /package/dist/{chunk-F6V4AYWP.js.map → chunk-SEQLC4AD.js.map} +0 -0
  848. /package/dist/{chunk-RSU37SVQ.js.map → chunk-TEZLFSOV.js.map} +0 -0
  849. /package/dist/{chunk-YOTWMCT5.js.map → chunk-UEMTP6ZC.js.map} +0 -0
  850. /package/dist/{chunk-6MSCYO7K.js.map → chunk-UJU3Q7QJ.js.map} +0 -0
  851. /package/dist/{chunk-RFIVPTMS.js.map → chunk-VIPMLSZP.js.map} +0 -0
  852. /package/dist/{chunk-LUTT3MBZ.js.map → chunk-VUUZJANK.js.map} +0 -0
  853. /package/dist/{chunk-2OSEZCWZ.js.map → chunk-WGHO2NCP.js.map} +0 -0
  854. /package/dist/{chunk-GO5SIPFE.js.map → chunk-WPHOEG56.js.map} +0 -0
  855. /package/dist/{chunk-KVG7FTTK.js.map → chunk-WS5XVKPJ.js.map} +0 -0
  856. /package/dist/{chunk-MNRYCG2S.js.map → chunk-X6URQAFD.js.map} +0 -0
  857. /package/dist/{chunk-VJ37HKM6.js.map → chunk-YALAQWX4.js.map} +0 -0
  858. /package/dist/{chunk-H2K5KZP7.js.map → chunk-YY4CKQJ6.js.map} +0 -0
  859. /package/dist/{chunk-G6ELKVBG.js.map → chunk-Z3KV6SC2.js.map} +0 -0
  860. /package/dist/{condition-VHP2L4GM.js.map → condition-JKQIRMMW.js.map} +0 -0
  861. /package/dist/{controls-N5Q7U7JR.js.map → controls-324AGOZG.js.map} +0 -0
  862. /package/dist/{controls.config-NJMW4SLR.js.map → controls.config-TA4NNARU.js.map} +0 -0
  863. /package/dist/{correlation-3LDASF5I.js.map → correlation-3Z36TKC2.js.map} +0 -0
  864. /package/dist/{cuminc-UWJ23W6C.js.map → cuminc-4DY2CSZF.js.map} +0 -0
  865. /package/dist/{cuminc.integration.spec-OZYYET3W.js.map → cuminc.integration.spec-SFQPLMSF.js.map} +0 -0
  866. /package/dist/{dataDownload-4S4PE5HX.js.map → dataDownload-3AE2N7KI.js.map} +0 -0
  867. /package/dist/{dataDownload.integration.spec-B57LEKFZ.js.map → dataDownload.integration.spec-DKOT6BJP.js.map} +0 -0
  868. /package/dist/{databrowser.ui-N6GHEQ2P.js.map → databrowser.ui-ATODRS5P.js.map} +0 -0
  869. /package/dist/{dnaMethylation-BOGAUAWA.js.map → dnaMethylation-TVA5YMOR.js.map} +0 -0
  870. /package/dist/{e2pca-L5EBQJNP.js.map → e2pca-KHVDNFEZ.js.map} +0 -0
  871. /package/dist/{ep-Z67ORKUX.js.map → ep-B5GAAMNM.js.map} +0 -0
  872. /package/dist/{expclust.gdc.spec-SP7VOL64.js.map → expclust.gdc.spec-EDPX7V6K.js.map} +0 -0
  873. /package/dist/{facet-HDB4VDGU.js.map → facet-ZCSXKXIO.js.map} +0 -0
  874. /package/dist/{geneExpClustering-6ZPOLTDJ.js.map → geneExpClustering-ERNCMAED.js.map} +0 -0
  875. /package/dist/{geneExpression-T7QUHV5S.js.map → geneExpression-HUOXWETT.js.map} +0 -0
  876. /package/dist/{geneExpression-T6YIG4XQ.js.map → geneExpression-X2KXJPND.js.map} +0 -0
  877. /package/dist/{geneExpression.unit.spec-DO52L5IB.js.map → geneExpression.unit.spec-5QQB4ISW.js.map} +0 -0
  878. /package/dist/{geneORA-KOUDUWUO.js.map → geneORA-B5UK77KL.js.map} +0 -0
  879. /package/dist/{geneVariant-FVR76F6I.js.map → geneVariant-7MGUAIZ6.js.map} +0 -0
  880. /package/dist/{geneVariant-I5QUITKG.js.map → geneVariant-FK3KZJ2K.js.map} +0 -0
  881. /package/dist/{geneVariant.integration.spec-D4IRM7B5.js.map → geneVariant.integration.spec-C6TYWKIC.js.map} +0 -0
  882. /package/dist/{genefusion.ui-35IYSZD7.js.map → genefusion.ui-VKAINMY7.js.map} +0 -0
  883. /package/dist/{geneset-7ZHJ5KWK.js.map → geneset-673KAZVX.js.map} +0 -0
  884. /package/dist/{genomeBrowser.spec-VXASVLNH.js.map → genomeBrowser.spec-T6TQCJ3O.js.map} +0 -0
  885. /package/dist/{grin2-7NM56COO.js.map → grin2-376BD4XY.js.map} +0 -0
  886. /package/dist/{grin2-IY26UUQI.js.map → grin2-OALS75LC.js.map} +0 -0
  887. /package/dist/{gsea-TORO46C6.js.map → gsea-25LD2LGP.js.map} +0 -0
  888. /package/dist/{hierCluster-3BKEGW6P.js.map → hierCluster-7KU3K52V.js.map} +0 -0
  889. /package/dist/{hierCluster-HM3LOM6V.js.map → hierCluster-M5VVWKQK.js.map} +0 -0
  890. /package/dist/{hierCluster.config-LDO5IGQ5.js.map → hierCluster.config-EDO3SH2P.js.map} +0 -0
  891. /package/dist/{hierCluster.integration.spec-XO5R6CQT.js.map → hierCluster.integration.spec-UOX7J2XD.js.map} +0 -0
  892. /package/dist/{hierCluster.interactivity-NVQ6262K.js.map → hierCluster.interactivity-FEFZDXML.js.map} +0 -0
  893. /package/dist/{hierCluster.renderers-SWPPNBLU.js.map → hierCluster.renderers-A6MEGO2B.js.map} +0 -0
  894. /package/dist/{imagePlot-V4WLAPV6.js.map → imagePlot-FPXZ2H5Z.js.map} +0 -0
  895. /package/dist/{importPlot-NZKQEOX4.js.map → importPlot-VKWPSFEK.js.map} +0 -0
  896. /package/dist/{isoformExpression-TIZBIGNL.js.map → isoformExpression-2R2TOB6P.js.map} +0 -0
  897. /package/dist/{jspdf.es.min-DO4YWL2R.js.map → jspdf.es.min-FC3BCETM.js.map} +0 -0
  898. /package/dist/{launch.adhoc-JYEN42NM.js.map → launch.adhoc-242RS6DW.js.map} +0 -0
  899. /package/dist/{leftlabel.sample-43DL3J3H.js.map → leftlabel.sample-OJW3AE64.js.map} +0 -0
  900. /package/dist/{legacyDataset-QRSNRVUA.js.map → legacyDataset-PBCPC5I7.js.map} +0 -0
  901. /package/dist/{lollipop-NMWZ4FVF.js.map → lollipop-TRQ3LK7Y.js.map} +0 -0
  902. /package/dist/{maf-DS3EOVGV.js.map → maf-ZBOLN2FE.js.map} +0 -0
  903. /package/dist/{maftimeline-ZB2753S7.js.map → maftimeline-GVX7NJP7.js.map} +0 -0
  904. /package/dist/{matrix-RCGQWQ3C.js.map → matrix-73KRNXLM.js.map} +0 -0
  905. /package/dist/{matrix-WTTEK4FT.js.map → matrix-US3OXYRY.js.map} +0 -0
  906. /package/dist/{matrix.cells-UO5ASQ35.js.map → matrix.cells-U7AQNEBP.js.map} +0 -0
  907. /package/dist/{matrix.config-3UQAT3QR.js.map → matrix.config-Q57D7C3F.js.map} +0 -0
  908. /package/dist/{matrix.controls-PRZ77K5L.js.map → matrix.controls-AWXDRSWP.js.map} +0 -0
  909. /package/dist/{matrix.data-4W73RQ3H.js.map → matrix.data-EEIY6AO4.js.map} +0 -0
  910. /package/dist/{matrix.dom-IZFFS4RQ.js.map → matrix.dom-6QL3AJMW.js.map} +0 -0
  911. /package/dist/{matrix.groups-5VMPI7SA.js.map → matrix.groups-CUB6UWC5.js.map} +0 -0
  912. /package/dist/{matrix.integration.spec-2F5LDLC2.js.map → matrix.integration.spec-PQH67KRM.js.map} +0 -0
  913. /package/dist/{matrix.interactivity-MIPZ6ELV.js.map → matrix.interactivity-JW4AXAWO.js.map} +0 -0
  914. /package/dist/{matrix.layout-EO5LVYRO.js.map → matrix.layout-I56KRVCO.js.map} +0 -0
  915. /package/dist/{matrix.legend-QBFBFEUG.js.map → matrix.legend-42LQGAGX.js.map} +0 -0
  916. /package/dist/{matrix.renderers-ERJXVCQL.js.map → matrix.renderers-IX3FCNBK.js.map} +0 -0
  917. /package/dist/{matrix.serieses-E23EPXHA.js.map → matrix.serieses-4B2WB526.js.map} +0 -0
  918. /package/dist/{matrix.sort-I4UGMEXR.js.map → matrix.sort-BJACNR7G.js.map} +0 -0
  919. /package/dist/{matrix.sort.unit.spec-CRGF6CSE.js.map → matrix.sort.unit.spec-3KKDKIPY.js.map} +0 -0
  920. /package/dist/{matrix.sorterUi-YLSYTYLE.js.map → matrix.sorterUi-W6XFYZY2.js.map} +0 -0
  921. /package/dist/{matrix.sorterUi.unit.spec-ENG3ICOO.js.map → matrix.sorterUi.unit.spec-CMJ7EBIW.js.map} +0 -0
  922. /package/dist/{mavb-5WR7OJHI.js.map → mavb-ROAE6WYA.js.map} +0 -0
  923. /package/dist/{mds.fimo-3ZRH7BBJ.js.map → mds.fimo-UGK5OWCF.js.map} +0 -0
  924. /package/dist/{mds.samplescatterplot-RPXR2FVK.js.map → mds.samplescatterplot-5KFUAYSB.js.map} +0 -0
  925. /package/dist/{mds.survivalplot-WSSMYUZD.js.map → mds.survivalplot-2EVNZUX5.js.map} +0 -0
  926. /package/dist/{oncomatrix-JKYPUJQR.js.map → oncomatrix-UGFXSXQJ.js.map} +0 -0
  927. /package/dist/{oncomatrix.spec-OEGU4DYK.js.map → oncomatrix.spec-FEP7BR7L.js.map} +0 -0
  928. /package/dist/{plot.2dvaf-ZGARLQNK.js.map → plot.2dvaf-WXGLWCOC.js.map} +0 -0
  929. /package/dist/{plot.app-TKUJH3LK.js.map → plot.app-IZAFRTBU.js.map} +0 -0
  930. /package/dist/{plot.barplot-FEIPGDZ2.js.map → plot.barplot-Z4VWOPFJ.js.map} +0 -0
  931. /package/dist/{plot.boxplot-6RASUMZB.js.map → plot.boxplot-QU2KZSB7.js.map} +0 -0
  932. /package/dist/{plot.brainImaging-ZJPFWX2W.js.map → plot.brainImaging-U643YIK7.js.map} +0 -0
  933. /package/dist/{plot.dzi-PC34YI6Y.js.map → plot.dzi-DWXPOOQE.js.map} +0 -0
  934. /package/dist/{plot.ssgq-Z4UNJKWO.js.map → plot.ssgq-GXB2GZO3.js.map} +0 -0
  935. /package/dist/{plot.vaf2cov-NZ4WULKT.js.map → plot.vaf2cov-EKRIADPB.js.map} +0 -0
  936. /package/dist/{plot.wsi-YYXFAZWY.js.map → plot.wsi-E2LLE6HI.js.map} +0 -0
  937. /package/dist/{polar-X2GPIBLB.js.map → polar-MZLIUXHO.js.map} +0 -0
  938. /package/dist/{polar2-TZ553QQH.js.map → polar2-IUVHNQM4.js.map} +0 -0
  939. /package/dist/{profile.spec-VB6VMFLY.js.map → profile.spec-JRW6KYUI.js.map} +0 -0
  940. /package/dist/{profileBarchart-SKJSTC7B.js.map → profileBarchart-N7HJMYZ5.js.map} +0 -0
  941. /package/dist/{profileForms-RLOGSMAQ.js.map → profileForms-Q5TPGPQP.js.map} +0 -0
  942. /package/dist/{profilePlot-267ZS3RG.js.map → profilePlot-TXTUYDVE.js.map} +0 -0
  943. /package/dist/{profileRadar-KGOBHCSF.js.map → profileRadar-ICEASI7W.js.map} +0 -0
  944. /package/dist/{proteomeAbundance-PGHZSVAF.js.map → proteomeAbundance-DE4NVBCN.js.map} +0 -0
  945. /package/dist/{proteomeAbundance-JUYAYO5I.js.map → proteomeAbundance-LTB3QR3G.js.map} +0 -0
  946. /package/dist/{qualitative-3IECKKJM.js.map → qualitative-DFGWQURY.js.map} +0 -0
  947. /package/dist/{regression-J6FFRPXN.js.map → regression-TTQTAEGD.js.map} +0 -0
  948. /package/dist/{regression.inputs-T7LWBSYZ.js.map → regression.inputs-2LU2XRGC.js.map} +0 -0
  949. /package/dist/{regression.inputs.term-TT7PNX6G.js.map → regression.inputs.term-G57GL57T.js.map} +0 -0
  950. /package/dist/{regression.inputs.values.table-SHFUNKCS.js.map → regression.inputs.values.table-JSEM3PXL.js.map} +0 -0
  951. /package/dist/{regression.results-D4WX6VIV.js.map → regression.results-3YNM6LLQ.js.map} +0 -0
  952. /package/dist/{regression.spec-7SW55L7X.js.map → regression.spec-S6WFCPSW.js.map} +0 -0
  953. /package/dist/{report-QYOZ4BRF.js.map → report-YRAV4MY4.js.map} +0 -0
  954. /package/dist/{sampleScatter.spec-JCHFMGNF.js.map → sampleScatter.spec-MBJ4XNTX.js.map} +0 -0
  955. /package/dist/{sampleView-7RPKNAZC.js.map → sampleView-IUR3ZEN7.js.map} +0 -0
  956. /package/dist/{samplelst-4WNPHZVG.js.map → samplelst-C2NBFGH6.js.map} +0 -0
  957. /package/dist/{samplematrix-CG52DSXJ.js.map → samplematrix-AOK2HHSB.js.map} +0 -0
  958. /package/dist/{sc-OJSWILSA.js.map → sc-XT3Z5XJI.js.map} +0 -0
  959. /package/dist/{scatter-LG2RMMEC.js.map → scatter-SAHKZRFL.js.map} +0 -0
  960. /package/dist/{selectGenomeWithTklst-QXRVE6N4.js.map → selectGenomeWithTklst-2YVZ4JWV.js.map} +0 -0
  961. /package/dist/{singleCellCellType-XBSRL33U.js.map → singleCellCellType-NFN5GQJM.js.map} +0 -0
  962. /package/dist/{singleCellGeneExpression-64ECP62X.js.map → singleCellGeneExpression-7AQGLXTR.js.map} +0 -0
  963. /package/dist/{singleCellPlot-E5F62JY6.js.map → singleCellPlot-IWFEG44C.js.map} +0 -0
  964. /package/dist/{singlecell-S7B5V7NK.js.map → singlecell-3QNV4OMZ.js.map} +0 -0
  965. /package/dist/{singlecell-FCY5EOUV.js.map → singlecell-EATPLH66.js.map} +0 -0
  966. /package/dist/{snp-ACKX4GRX.js.map → snp-UP7WL7WG.js.map} +0 -0
  967. /package/dist/{snp.unit.spec-QBGHKKUD.js.map → snp.unit.spec-Y5NWQ442.js.map} +0 -0
  968. /package/dist/{snplocus-7EUOW7J7.js.map → snplocus-WAQK2AZG.js.map} +0 -0
  969. /package/dist/{spliceevent.a53ss.diagram-ALQZA35Z.js.map → spliceevent.a53ss.diagram-FFK27UIB.js.map} +0 -0
  970. /package/dist/{spliceevent.exonskip.diagram-UF7WJA5R.js.map → spliceevent.exonskip.diagram-KWEF2OZJ.js.map} +0 -0
  971. /package/dist/{spliceevent.noeventdiagram-4HPGRNRR.js.map → spliceevent.noeventdiagram-PU4TI7OM.js.map} +0 -0
  972. /package/dist/{ssGSEA-FDRBBBLJ.js.map → ssGSEA-N6QOAVLW.js.map} +0 -0
  973. /package/dist/{ssGSEA.unit.spec-EZEOWJVV.js.map → ssGSEA.unit.spec-KQBNZNNP.js.map} +0 -0
  974. /package/dist/{summarizeMutationDiagnosis-LALOJTHV.js.map → summarizeMutationDiagnosis-5RHSG7L6.js.map} +0 -0
  975. /package/dist/{summarizeMutationSurvival-TSNTSOBZ.js.map → summarizeMutationSurvival-22YYXGS5.js.map} +0 -0
  976. /package/dist/{summary-YRHVS64T.js.map → summary-P3WIKJS7.js.map} +0 -0
  977. /package/dist/{summary.integration.spec-766YQLQA.js.map → summary.integration.spec-ULGRPICW.js.map} +0 -0
  978. /package/dist/{summaryInput-VQ2X6GSX.js.map → summaryInput-IH4EVNF5.js.map} +0 -0
  979. /package/dist/{survival-FQXZH2MM.js.map → survival-2ZE3N62A.js.map} +0 -0
  980. /package/dist/{survival-TVA3ZWVP.js.map → survival-ASCLKIII.js.map} +0 -0
  981. /package/dist/{survival.integration.spec-WFIOPD6A.js.map → survival.integration.spec-C5YXOY77.js.map} +0 -0
  982. /package/dist/{svg2pdf.es.min-EZ4UYRSH.js.map → svg2pdf.es.min-CYTPRWNB.js.map} +0 -0
  983. /package/dist/{svgraph-4BFBO7EL.js.map → svgraph-AYR2UPNK.js.map} +0 -0
  984. /package/dist/{svmr-ML7GAIIA.js.map → svmr-MOMW5DNY.js.map} +0 -0
  985. /package/dist/{table-SMLMUWPP.js.map → table-PQB6KCEY.js.map} +0 -0
  986. /package/dist/{termCollection-22CPTISZ.js.map → termCollection-5AY2AWT4.js.map} +0 -0
  987. /package/dist/{termCollection-EE6AOIVA.js.map → termCollection-OQMUUTW6.js.map} +0 -0
  988. /package/dist/{termCollection.unit.spec-4DIW3CJ3.js.map → termCollection.unit.spec-BUAXYIJK.js.map} +0 -0
  989. /package/dist/{tk-ITZCKOQ5.js.map → tk-EJLFFA5H.js.map} +0 -0
  990. /package/dist/{tp.ui-R6HVKCBC.js.map → tp.ui-WUW6A7KP.js.map} +0 -0
  991. /package/dist/{tvs.density-AQ5GD437.js.map → tvs.density-HSVPDDGA.js.map} +0 -0
  992. /package/dist/{tvs.dt-2263TBEJ.js.map → tvs.dt-MVJXQMNU.js.map} +0 -0
  993. /package/dist/{tvs.dtcnv.categorical-TRRHL33N.js.map → tvs.dtcnv.categorical-FIIDWVK7.js.map} +0 -0
  994. /package/dist/{tvs.dtcnv.continuous-GREYNF52.js.map → tvs.dtcnv.continuous-JPQU3JA2.js.map} +0 -0
  995. /package/dist/{tvs.dtfusion-XOX46L3M.js.map → tvs.dtfusion-BW35GOQM.js.map} +0 -0
  996. /package/dist/{tvs.dtsnvindel-IDMXT53F.js.map → tvs.dtsnvindel-AEMFZ4EH.js.map} +0 -0
  997. /package/dist/{tvs.dtsv-ZDWFYH2C.js.map → tvs.dtsv-JHTU7UFD.js.map} +0 -0
  998. /package/dist/{tvs.numeric-ZN2R7BH3.js.map → tvs.numeric-ICUGA4WY.js.map} +0 -0
  999. /package/dist/{tvs.samplelst-GAP76HRH.js.map → tvs.samplelst-VD2NFFFS.js.map} +0 -0
  1000. /package/dist/{tvs.termCollection-GQ65UKSI.js.map → tvs.termCollection-IKE5Q74D.js.map} +0 -0
  1001. /package/dist/{violin-JGDL62YA.js.map → violin-DPMJLHQG.js.map} +0 -0
  1002. /package/dist/{violin.interactivity-H4RP4K5U.js.map → violin.interactivity-TS4DYUE5.js.map} +0 -0
  1003. /package/dist/{violin.renderer-QPHLACDC.js.map → violin.renderer-53L4PXUT.js.map} +0 -0
  1004. /package/dist/{vocabulary-7JACY4J2.js.map → vocabulary-4MPFHKYC.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../shared/utils/src/bulk.js", "../../shared/utils/src/clustering.js", "../../shared/utils/src/fileSize.js", "../../shared/utils/src/mds3tk.js", "../../shared/utils/src/termdb.initbinconfig.js", "../../shared/utils/src/vcf.info.js", "../../shared/utils/src/vcf.csq.js", "../../shared/utils/src/vcf.ann.js", "../../shared/utils/src/vcf.type.js", "../../shared/utils/src/vcf.js", "../../shared/utils/src/compute.percentile.js", "../../shared/utils/src/hash.js", "../../shared/utils/src/urljson.js", "../../shared/utils/src/fetch-helpers.js", "../../shared/utils/src/termdb.usecase.js", "../../shared/utils/src/time.js", "../common/auth.js", "../common/dofetch.js"],
4
+ "sourcesContent": ["////////////////////////////////////\n//\n// shared between client and server\n//\n////////////////////////////////////\n\nimport * as common from \"./common.js\"\n\nexport default {}\n\nexport function init_bulk_flag(genome) {\n\tif (!genome) {\n\t\treturn null\n\t}\n\tconst mclasslabel2key = {}\n\tfor (const n in common.mclass) {\n\t\tmclasslabel2key[common.mclass[n].label.toUpperCase()] = n\n\t}\n\treturn {\n\t\tgenome: genome,\n\t\tmclasslabel2key: mclasslabel2key,\n\t\tdata: {},\n\t\tsample2disease: {}, // (proof) k: sample, v: disease\n\t\t// will only record this when origin is used\n\t\tpatient2st: {},\n\t\t// k: patient, v: { k: sampletype, v: sample }\n\t\t// new sample names always override old\n\t\tgood: 0,\n\t\tgeneToUpper: true, // option to not force uppercase on gene names\n\t\tsnv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\t// jinghui: based on missense/silent ratio of entire dataset to decide whether to include silent when importing...\n\t\t\t// hard-coded class codes\n\t\t\tmissense: 0,\n\t\t\tsilent: 0,\n\t\t},\n\t\tsvjson: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t},\n\t\tfusion: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\toriginal: [],\n\t\t},\n\t\tsv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t\toriginal: [],\n\t\t},\n\t\tcnv: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t},\n\t\titd: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t},\n\t\tdel: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t},\n\t\ttruncation: {\n\t\t\tloaded: false,\n\t\t\theader: null,\n\t\t\tbadlines: [],\n\t\t},\n\t}\n}\n\nexport function parsesample(m, flag, i, lst, badline) {\n\tlet variantorigin = common.moriginsomatic\n\tif (m.sampletype) {\n\t\tconst s = m.sampletype.toLowerCase()\n\t\tswitch (s) {\n\t\t\tcase \"relapse\":\n\t\t\t\tvariantorigin = common.moriginrelapse\n\t\t\t\tbreak\n\t\t\tcase \"germline\":\n\t\t\t\tvariantorigin = common.morigingermline\n\t\t\t\tbreak\n\t\t\tcase \"somatic\":\n\t\t\tcase \"diagnosis\":\n\t\t\t\tbreak\n\t\t}\n\t\tif (m.sample) {\n\t\t\tif (m.patient) {\n\t\t\t\t// good\n\t\t\t} else {\n\t\t\t\tm.patient = m.sample + \" \" + m.sampletype\n\t\t\t}\n\t\t} else {\n\t\t\tif (m.patient) {\n\t\t\t\tm.sample = m.patient + \" \" + m.sampletype\n\t\t\t} else {\n\t\t\t\t// neither sample or patient, will quit later\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (m.patient) {\n\t\t\tif (m.sample) {\n\t\t\t\tm.sampletype = m.sample\n\t\t\t} else {\n\t\t\t\tm.sample = m.sampletype = m.patient\n\t\t\t}\n\t\t} else {\n\t\t\tif (m.sample) {\n\t\t\t\tm.sampletype = m.sample\n\t\t\t} else {\n\t\t\t\t// no patient/sample, will quit later\n\t\t\t}\n\t\t}\n\t}\n\tif (m.origin) {\n\t\t// override existing variantorigin\n\t\tconst s = m.origin.toLowerCase()\n\t\tswitch (s) {\n\t\t\tcase \"r\":\n\t\t\tcase \"relapse\":\n\t\t\t\tvariantorigin = common.moriginrelapse\n\t\t\t\tm.isrim2 = true\n\t\t\t\tbreak\n\t\t\tcase \"g\":\n\t\t\tcase \"germline\":\n\t\t\t\tvariantorigin = common.morigingermline\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase \"gp\":\n\t\t\tcase \"germline pathogenic\":\n\t\t\t\tvariantorigin = common.morigingermlinepathogenic\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase \"gnp\":\n\t\t\tcase \"germline nonpathogenic\":\n\t\t\tcase \"germline non-pathogenic\":\n\t\t\t\tvariantorigin = common.morigingermlinenonpathogenic\n\t\t\t\tm.isrim1 = true\n\t\t\t\tbreak\n\t\t\tcase \"s\":\n\t\t\tcase \"somatic\":\n\t\t\tcase \"diagnosis\":\n\t\t\t\tvariantorigin = common.moriginsomatic\n\t\t\t\tbreak\n\t\t}\n\t}\n\tm.origin = variantorigin\n\n\tif (!m.sample && !m.patient) {\n\t\t// will not go into sample table\n\t\treturn\n\t}\n\n\tconst nopatientname = \"no patient/individual name\"\n\tlet p\n\tif (m.patient) {\n\t\tif (!flag.patient2st[m.patient]) {\n\t\t\tflag.patient2st[m.patient] = {}\n\t\t}\n\t\tflag.patient2st[m.patient][m.sampletype] = m.sample\n\t} else {\n\t\tif (!flag.patient2st[nopatientname]) {\n\t\t\tflag.patient2st[nopatientname] = {}\n\t\t}\n\t\tflag.patient2st[nopatientname][m.sampletype] = m.sample\n\t}\n\n\tif (m.sample) {\n\t\tif (m.disease) {\n\t\t\tif (m.sample in flag.sample2disease) {\n\t\t\t\tif (m.disease != flag.sample2disease[m.sample]) {\n\t\t\t\t\tflag.snv.badlines.push([\n\t\t\t\t\t\ti,\n\t\t\t\t\t\t'conflict of disease types for sample \"' +\n\t\t\t\t\t\t\tm.sample +\n\t\t\t\t\t\t\t'\": ' +\n\t\t\t\t\t\t\tm.disease +\n\t\t\t\t\t\t\t\", \" +\n\t\t\t\t\t\t\tflag.sample2disease[m.sample],\n\t\t\t\t\t\tlst,\n\t\t\t\t\t])\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tflag.sample2disease[m.sample] = m.disease\n\t\t\t}\n\t\t}\n\t}\n\treturn false\n}\n", "export const clusterMethodLst = [\n\t{\n\t\tlabel: \"Average\",\n\t\tvalue: \"average\",\n\t\ttitle: `Cluster by average value`,\n\t},\n\t{\n\t\tlabel: `Complete`,\n\t\tvalue: \"complete\",\n\t\ttitle: `Use the complete clustering method`,\n\t},\n\t{\n\t\tlabel: `Single`,\n\t\tvalue: \"single\",\n\t\ttitle: `Use the single clustering method`,\n\t},\n\t{\n\t\tlabel: `Ward.D`,\n\t\tvalue: \"ward.D\",\n\t\ttitle: `Use the ward.D clustering method`,\n\t},\n\t{\n\t\tlabel: `Ward.D2`,\n\t\tvalue: \"ward.D2\",\n\t\ttitle: `Use the ward.D2 clustering method`,\n\t},\n\t{\n\t\tlabel: `Mcquitty`,\n\t\tvalue: \"mcquitty\",\n\t\ttitle: `Use the Mcquity clustering method`,\n\t},\n\t/* These methods are currently disabled because the dendrogram lines tend to cross one another.\n\t{\n\t\tlabel: `Centroid`,\n\t\tvalue: 'centroid',\n\t\ttitle: `Use the centroid clustering method`\n\t},\n \t{\n\t\tlabel: `Median`,\n\t\tvalue: 'median',\n\t\ttitle: `Use the median clustering method`\n\t}\n */\n]\nexport const distanceMethodLst = [\n\t{\n\t\tlabel: \"Euclidean\",\n\t\tvalue: \"euclidean\",\n\t\ttitle: `Calculate distance using euclidean method`,\n\t},\n\t{\n\t\tlabel: \"Maximum\",\n\t\tvalue: \"maximum\",\n\t\ttitle: `Maximum distance between two components of x and y`,\n\t},\n\t{\n\t\tlabel: \"Manhattan\",\n\t\tvalue: \"manhattan\",\n\t\ttitle: `Calculate distance using the absolute distance between the two vectors`,\n\t},\n\t{\n\t\tlabel: \"Canberra\",\n\t\tvalue: \"canberra\",\n\t\ttitle: `Calculate distance using Canberra method`,\n\t},\n]\n", "export function fileSize(v) {\n\tif (v > 1e9) return (v / 1e9).toFixed(2) + \" GB\"\n\tif (v > 1e6) return (v / 1e6).toFixed(2) + \" MB\"\n\tif (v > 1e3) return (v / 1e3).toFixed(2) + \" KB\"\n\treturn v + \" Bytes\"\n}\n", "import { dtcnv, dtsnvindel, dtsv, dtfusionrna } from \"./common.js\"\n\n// this script should contain mds3 track-related stuff shared between client and backend\n\n/*\nthe separator is used to join essential bits of a variant obj into a string as the \"ssm_id\", aims to uniquely identify a variant irrespective of sample\nthis is to mimic the GDC \"ssm_id\" which is a random id, with below benefits:\n- consistent way to pass request body for both gdc and non-gdc\n- uniform identification of ssm/cnv/sv in non-gdc backend code\n- uniform identification of all variants in client\n\nssm: chr + pos + ref + alt\ncnv: chr + start + stop + class\nsvfusion: dt + chr + pos + strand + pairlstidx + mname\n\nthe separator must avoid conflicting with characters from gene names, and can be changed based on needs\n*/\nexport const ssmIdFieldsSeparator = \"__\"\n\n/*\ninput: array of mixture of ssm, svfusion and cnv\n\noutput: sorted array. each element: [ class/dt, count of m ]\n*/\nexport function summarize_mclass(mlst) {\n\tconst m2c = new Map() // k: mclass, v: {}\n\tconst cnvs = []\n\tfor (const m of mlst) {\n\t\tif (m.dt == dtcnv) {\n\t\t\tcnvs.push(m)\n\t\t\tcontinue // process cnv later\n\t\t}\n\t\t// snvindel has m.class=str, svfusion has only dt=int\n\t\tconst key = m.class || m.dt\n\t\tm2c.set(key, 1 + (m2c.get(key) || 0))\n\t}\n\n\tif (cnvs.length) {\n\t\tif (Number.isFinite(cnvs[0].value)) {\n\t\t\t// first cnv uses numeric value (assumes all the same). record by dt\n\t\t\tm2c.set(dtcnv, cnvs.length)\n\t\t} else {\n\t\t\t// cnv not numeric and uses class; record by each class\n\t\t\tfor (const c of cnvs) {\n\t\t\t\tif (!c.class) continue // should not happen\n\t\t\t\tm2c.set(c.class, 1 + (m2c.get(c.class) || 0))\n\t\t\t}\n\t\t}\n\t}\n\treturn [...m2c].sort((i, j) => j[1] - i[1])\n}\n\n/*\nssmid is not specific for ssm, it covers all alterations\ngdc ssm are identified by a specific uuid, thus the design\n*/\nexport function guessSsmid(ssmid) {\n\tconst l = ssmid.split(ssmIdFieldsSeparator)\n\tif (l.length == 4) {\n\t\tconst [chr, tmp, ref, alt] = l\n\t\tconst pos = Number(tmp)\n\t\tif (Number.isNaN(pos)) throw \"ssmid snvindel pos not integer\"\n\t\treturn { dt: dtsnvindel, l: [chr, pos, ref, alt] }\n\t}\n\tif (l.length == 5) {\n\t\t// cnv. if type=cat, _value is blank string\n\t\tconst [chr, _start, _stop, _class, _value] = l\n\t\tconst start = Number(_start),\n\t\t\tstop = Number(_stop),\n\t\t\tvalue = _value == \"\" ? null : Number(_value)\n\t\tif (Number.isNaN(start) || Number.isNaN(stop))\n\t\t\tthrow \"ssmid cnv start/stop not integer\"\n\t\treturn { dt: dtcnv, l: [chr, start, stop, _class, value] }\n\t}\n\tif (l.length == 6) {\n\t\tif (l[3] == \"+\" || l[3] == \"-\") {\n\t\t\t// sv/fusion\n\t\t\tconst [_dt, chr, _pos, strand, _pi, _mname] = l\n\n\t\t\t// mname is encoded in case it contains comma (and is same as ssmIdFieldsSeparator)\n\t\t\tconst mname = decodeURIComponent(_mname)\n\t\t\tconst dt = Number(_dt)\n\t\t\tif (dt != dtsv && dt != dtfusionrna) throw \"ssmid dt not sv/fusion\"\n\t\t\tconst pos = Number(_pos)\n\t\t\tif (Number.isNaN(pos)) throw \"ssmid svfusion position not integer\"\n\t\t\tconst pairlstIdx = Number(_pi)\n\t\t\tif (Number.isNaN(pairlstIdx)) throw \"ssmid pairlstIdx not integer\"\n\t\t\treturn { dt, l: [dt, chr, pos, strand, pairlstIdx, mname] }\n\t\t}\n\t\t// cnv with sample\n\t\tconst [chr, _start, _stop, _class, _value, sample] = l\n\t\tconst start = Number(_start),\n\t\t\tstop = Number(_stop),\n\t\t\tvalue = _value == \"\" ? null : Number(_value) // if cnv not using value, must avoid `Number('')=0`\n\t\tif (Number.isNaN(start) || Number.isNaN(stop))\n\t\t\tthrow \"ssmid cnv start/stop not integer\"\n\t\treturn { dt: dtcnv, l: [chr, start, stop, _class, value, sample] }\n\t}\n\tthrow \"unknown ssmid\"\n}\n", "/*\nInitialize a bin configuration for a numeric dataset\n<data>: array of numeric data values\n<opts> (optional): object of options\n {}: output bin config as JavaScript object (default)\n {format: 'string'}: output bin config as JSON string\n*/\nexport default function initBinConfig(data, opts = {}) {\n\tif (!data.length)\n\t\treturn {\n\t\t\tmode: \"discrete\",\n\t\t\ttype: \"regular-bin\",\n\t\t\tstartinclusive: true,\n\t\t\tbin_size: null,\n\t\t\tfirst_bin: { stop: null },\n\t\t}\n\tif (data.find((d) => !Number.isFinite(d)))\n\t\tthrow new Error(\"non-numeric values found\")\n\n\tlet binConfig\n\tconst s = new Set(data)\n\tif (s.size === 1) {\n\t\t// single unique value in data array\n\t\t// prepare custom bin config for 3 bins: first bin\n\t\t// for values less than the value, second bin for values\n\t\t// equal to the value, and third bin one for values\n\t\t// greater than the value\n\t\t// all data values will fall into the second bin\n\t\tconst value = [...s][0]\n\t\tbinConfig = {\n\t\t\ttype: \"custom-bin\",\n\t\t\tlst: [\n\t\t\t\t{\n\t\t\t\t\tstop: value,\n\t\t\t\t\tstopinclusive: false,\n\t\t\t\t\tstartunbounded: true,\n\t\t\t\t\tlabel: \"<\" + value,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstart: value,\n\t\t\t\t\tstop: value,\n\t\t\t\t\tstartinclusive: true,\n\t\t\t\t\tstopinclusive: true,\n\t\t\t\t\tlabel: \"=\" + value,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tstart: value,\n\t\t\t\t\tstartinclusive: false,\n\t\t\t\t\tstopunbounded: true,\n\t\t\t\t\tlabel: \">\" + value,\n\t\t\t\t},\n\t\t\t],\n\t\t}\n\t} else {\n\t\t// multiple unique values in data array\n\t\t// prepare regular bin config\n\n\t\t// compute the bin size for a maximum bin number of 8\n\t\tdata.sort((a, b) => a - b)\n\t\tconst l = data.length\n\t\tconst min = data[0]\n\t\tconst max = data[l - 1]\n\t\tconst p5idx = Math.ceil(l * 0.05) - 1\n\t\tconst p98idx = Math.ceil(l * 0.98) - 1\n\t\tconst p5 = data[p5idx]\n\t\tconst p98 = data[p98idx]\n\t\t// use 98th and 5th percentiles to compute bin size to reduce outlier influence\n\t\t// if 98th = 5th, use max and min instead\n\t\tconst binSize = p98 != p5 ? (p98 - p5) / 8 : (max - min) / 8\n\t\t// first bin stop will equal either (minimum + bin size) or (5th percentile), whichever is larger.\n\t\tconst firstBinStop = Math.max(min + binSize, p5)\n\t\t// round the bin values\n\t\tlet [binSize_rnd, firstBinStop_rnd, lastBinStart_rnd, rounding] =\n\t\t\troundBinVals(binSize, firstBinStop, max, min)\n\t\t// generate the bin configuration\n\t\tbinConfig = {\n\t\t\ttype: \"regular-bin\",\n\t\t\tstartinclusive: true,\n\t\t\tbin_size: binSize_rnd,\n\t\t\tfirst_bin: { stop: firstBinStop_rnd },\n\t\t}\n\t\tif (lastBinStart_rnd) binConfig.last_bin = { start: lastBinStart_rnd }\n\t\tif (rounding) binConfig.rounding = rounding\n\t}\n\tif (\"format\" in opts) {\n\t\tif (opts.format === \"string\") {\n\t\t\treturn JSON.stringify(binConfig)\n\t\t} else {\n\t\t\tthrow \"options are not in the correct format\"\n\t\t}\n\t} else {\n\t\treturn binConfig\n\t}\n}\n\nfunction roundBinVals(binSize, firstBinStop, max, min) {\n\tlet binSize_rnd, firstBinStop_rnd, lastBinStart_rnd, rounding\n\tconst log = Math.floor(Math.log10(binSize))\n\tif (binSize >= 0.1 && binSize <= 2) {\n\t\t// Round to the nearest one for small bin sizes\n\t\tbinSize_rnd = Math.round(binSize / (1 * 10 ** log)) * (1 * 10 ** log)\n\t\tfirstBinStop_rnd =\n\t\t\tMath.round(firstBinStop / (1 * 10 ** log)) * (1 * 10 ** log)\n\t} else {\n\t\t// Round to the nearest five for large bin sizes\n\t\tbinSize_rnd = Math.round(binSize / (5 * 10 ** log)) * (5 * 10 ** log)\n\t\tfirstBinStop_rnd =\n\t\t\tMath.round(firstBinStop / (5 * 10 ** log)) * (5 * 10 ** log)\n\t\tif (binSize_rnd === 0) binSize_rnd = 1 * 10 ** log\n\t\tif (firstBinStop_rnd === 0) firstBinStop_rnd = 1 * 10 ** log\n\t\tif (binSize_rnd === 5 * 10 ** log && firstBinStop_rnd === 1 * 10 ** log)\n\t\t\tfirstBinStop_rnd = 5 * 10 ** log\n\t}\n\tif (firstBinStop_rnd < min) firstBinStop_rnd = firstBinStop_rnd * 2\n\t// if the number of bins is above 8 after rounding, then set the last bin start to restrict the number of bins to 8\n\tconst eighthBinStop_rnd = firstBinStop_rnd + binSize_rnd * 7\n\tif (max > eighthBinStop_rnd) {\n\t\tlastBinStart_rnd = firstBinStop_rnd + binSize_rnd * 6\n\t}\n\tif (binSize < 1) {\n\t\tconst digits = Math.abs(log)\n\t\tbinSize_rnd = Number(binSize_rnd.toFixed(digits))\n\t\tfirstBinStop_rnd = Number(firstBinStop_rnd.toFixed(digits))\n\t\tif (lastBinStart_rnd)\n\t\t\tlastBinStart_rnd = Number(lastBinStart_rnd.toFixed(digits))\n\t\trounding = \".\" + digits + \"f\"\n\t}\n\tif (Object.is(firstBinStop_rnd, -0)) firstBinStop_rnd = 0\n\treturn [binSize_rnd, firstBinStop_rnd, lastBinStart_rnd, rounding]\n}\n", "/*\nto parse a variant line, not header\n\ncannot simply slice by /[;=]/, but read char by char\ncase CLNVI=Breast_Cancer_Information_Core__(BRCA2):745-4&base_change=C_to_G;\ncase k1=v1;DB;k2=v2;\n*/\nexport function dissect_INFO(str) {\n\t//let findequal=true\n\tlet findsemicolon = false\n\tlet findequalorsemicolon = true\n\n\tlet i = 0\n\tlet idx = 0\n\n\tconst k2v = {}\n\tlet lastkey\n\n\twhile (i < str.length) {\n\t\tconst c = str[i]\n\t\tif (findequalorsemicolon) {\n\t\t\tif (c == \"=\") {\n\t\t\t\tfindsemicolon = true\n\t\t\t\tfindequalorsemicolon = false\n\t\t\t\tlastkey = str.substring(idx, i)\n\t\t\t\tidx = i + 1\n\t\t\t} else if (c == \";\") {\n\t\t\t\t// should be a flag\n\t\t\t\tk2v[str.substring(idx, i)] = 1\n\t\t\t\tidx = i + 1\n\t\t\t}\n\t\t} else if (findsemicolon && c == \";\") {\n\t\t\tfindequalorsemicolon = true\n\t\t\tfindsemicolon = false\n\t\t\tk2v[lastkey] = str.substring(idx, i)\n\t\t\tlastkey = null\n\t\t\tidx = i + 1\n\t\t}\n\t\ti++\n\t}\n\n\tconst remainstr = str.substr(idx, i)\n\tif (lastkey) {\n\t\tk2v[lastkey] = remainstr\n\t} else {\n\t\tk2v[remainstr] = 1\n\t}\n\n\treturn k2v\n}\n", "import { vepinfo } from \"./common.js\"\n/*\nparse csq field from a variant line, not header\nCSQ header must have already been parsed\n\nstr: the csq value for a vcf line\nheader: [ // something like this\n { name: 'Allele' },\n { name: 'Consequence' },\n { name: 'IMPACT' },\n { name: 'SYMBOL' },\n { name: 'Gene' },\n { name: 'Feature_type' },\n { name: 'Feature' },\n { name: 'BIOTYPE' },\n { name: 'EXON' },\n { name: 'INTRON' },\n { name: 'HGVSc' },\n { name: 'HGVSp' },\n { name: 'cDNA_position' },\n { name: 'CDS_position' },\n { name: 'Protein_position' },\n { name: 'Amino_acids' },\n { name: 'Codons' },\n { name: 'Existing_variation' },\n { name: 'DISTANCE' },\n { name: 'STRAND' },\n { name: 'FLAGS' },\n { name: 'SYMBOL_SOURCE' },\n { name: 'HGNC_ID' },\n { name: 'CANONICAL' },\n { name: 'REFSEQ_MATCH' },\n { name: 'GIVEN_REF' },\n { name: 'USED_REF' },\n { name: 'BAM_EDIT' },\n { name: 'HGVS_OFFSET' },\n { name: 'CLIN_SIG' },\n { name: 'SOMATIC' },\n { name: 'PHENO' }\n]\n\nm: {\n\tmlst[ {} ]\n\t\t.allele_original\n\t\t.csq[ {} ] // parse_CSQ will add this array to this allele\n\t\t\t._class\n\t\t\t._csqrank\n\t\t\t._dt\n\t\t\t._gene\n\t\t\t._isoform\n\t\t\t._mname\n}\n\n*/\n\nexport function parse_CSQ(str, header, m) {\n\tif (!header) {\n\t\treturn null\n\t}\n\tfor (const thisannotation of str.split(\",\")) {\n\t\tconst lst = thisannotation.replace(/&/g, \",\").split(\"|\")\n\n\t\tconst o = {}\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\tif (lst[i]) {\n\t\t\t\to[header[i].name] = lst[i]\n\t\t\t}\n\t\t}\n\t\tif (!o.Allele) {\n\t\t\tcontinue\n\t\t}\n\t\tlet allele = null\n\n\t\t//////////////////////////////////////\n\t\t// NOTE\n\t\t// mds2delete\n\t\t// m.alleles[] is based on old vcf parsing and may delete?\n\t\t// latest spec is m.mlst[]\n\t\t//////////////////////////////////////\n\n\t\tfor (const a of m.mlst || m.alleles) {\n\t\t\tif (a.allele_original == o.Allele) {\n\t\t\t\tallele = a\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!allele) {\n\t\t\tif (o.Allele == \"-\") {\n\t\t\t\t// deletion\n\t\t\t\tif (m.mlst) {\n\t\t\t\t\tif (m.mlst.length == 1) {\n\t\t\t\t\t\tallele = m.mlst[0]\n\t\t\t\t\t}\n\t\t\t\t} else if (m.alleles) {\n\t\t\t\t\tif (m.alleles.length == 1) {\n\t\t\t\t\t\tallele = m.alleles[0]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const a of m.mlst || m.alleles) {\n\t\t\t\t\tif (a.allele_original.substr(1) == o.Allele) {\n\t\t\t\t\t\t// insertion, without first padding base\n\t\t\t\t\t\tallele = a\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!allele) {\n\t\t\t\t// cannot match to allele!!!\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\t\tif (!allele.csq) {\n\t\t\tallele.csq = []\n\t\t}\n\t\tallele.csq.push(o)\n\n\t\t// gene\n\t\to._gene = o.SYMBOL || o.Gene\n\n\t\t// isoform\n\t\tif (o.Feature_type && o.Feature_type == \"Transcript\") {\n\t\t\to._isoform = o.Feature.split(\".\")[0] // remove version\n\t\t} else {\n\t\t\to._isoform = o._gene\n\t\t}\n\n\t\t// class\n\t\tif (o.Consequence) {\n\t\t\tconst [dt, cls, rank] = vepinfo(o.Consequence)\n\t\t\to._dt = dt\n\t\t\to._class = cls\n\t\t\to._csqrank = rank\n\t\t} else {\n\t\t\t// FIXME\n\t\t\to._dt = dtsnvindel\n\t\t\to._class = mclassnonstandard\n\t\t}\n\t\t// mname\n\t\tif (o.HGVSp) {\n\t\t\to._mname = decodeURIComponent(o.HGVSp.substr(o.HGVSp.indexOf(\":\") + 1))\n\t\t} else if (o.Protein_position && o.Amino_acids) {\n\t\t\to._mname = decodeURIComponent(o.Protein_position + o.Amino_acids)\n\t\t} else if (o.HGVSc) {\n\t\t\to._mname = o.HGVSc.substr(o.HGVSc.indexOf(\":\") + 1)\n\t\t} else if (o.Existing_variation) {\n\t\t\to._name = o.Existing_variation\n\t\t} else {\n\t\t}\n\t}\n\treturn true\n}\n", "import { vepinfo } from \"./common.js\"\n\nexport function parse_ANN(str, header, m) {\n\t// snpEff\n\tif (!header) {\n\t\treturn null\n\t}\n\tfor (const thisannotation of str.split(\",\")) {\n\t\tconst lst = thisannotation.replace(/&/g, \",\").split(\"|\")\n\n\t\tconst o = {}\n\n\t\tfor (let i = 0; i < header.length; i++) {\n\t\t\tif (lst[i]) {\n\t\t\t\to[header[i].name] = lst[i]\n\t\t\t}\n\t\t}\n\t\tif (!o.Allele) {\n\t\t\tcontinue\n\t\t}\n\t\tlet allele = null\n\t\tfor (const a of m.alleles) {\n\t\t\tif (a.allele == o.Allele) {\n\t\t\t\tallele = a\n\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\t\tif (!allele) {\n\t\t\t// cannot match to allele!!!\n\t\t\tcontinue\n\t\t}\n\t\tif (!allele.ann) {\n\t\t\tallele.ann = []\n\t\t}\n\t\tallele.ann.push(o)\n\t\to._gene = o.Gene_Name\n\t\t// isoform\n\t\tif (o.Feature_Type && o.Feature_Type == \"transcript\" && o.Feature_ID) {\n\t\t\to._isoform = o.Feature_ID.split(\".\")[0]\n\t\t}\n\t\t// class\n\t\tif (o.Annotation) {\n\t\t\tconst [dt, cls, rank] = vepinfo(o.Annotation)\n\t\t\to._dt = dt\n\t\t\to._class = cls\n\t\t\to._csqrank = rank\n\t\t} else {\n\t\t\t// FIXME\n\t\t\to._dt = dtsnvindel\n\t\t\to._class = mclassnonstandard\n\t\t}\n\t\t// mname\n\t\tif (o[\"HGVS.p\"]) {\n\t\t\t//o._mname=decodeURIComponent(o.HGVSp.substr(o.HGVSp.indexOf(':')+1))\n\t\t\to._mname = o[\"HGVS.p\"]\n\t\t} else if (o[\"HGVS.c\"]) {\n\t\t\to._mname = o[\"HGVS.c\"]\n\t\t} else {\n\t\t}\n\t}\n\treturn true\n}\n", "import {\n\tmclassdeletion,\n\tmclasssnv,\n\tmclassmnv,\n\tmclassinsertion,\n\tmclassnonstandard,\n} from \"./common.js\"\n\nexport function getVariantType(ref, alt) {\n\tif (ref.length == 1 && alt.length == 1) {\n\t\t// both alleles length of 1\n\t\tif (alt == \".\") {\n\t\t\t// alt is missing\n\t\t\treturn mclassdeletion\n\t\t}\n\t\t// snv\n\t\treturn mclasssnv\n\t}\n\tif (ref.length == alt.length) return mclassmnv\n\t// FIXME only when empty length of one allele\n\tif (ref.length < alt.length) return mclassinsertion\n\tif (ref.length > alt.length) return mclassdeletion\n\treturn mclassnonstandard\n}\n", "import { mclass } from \"./common.js\"\nimport { dissect_INFO } from \"./vcf.info.js\"\nimport { parse_CSQ } from \"./vcf.csq.js\"\nimport { parse_ANN } from \"./vcf.ann.js\"\nimport { getVariantType } from \"./vcf.type.js\"\n\n/*\nOnly for parsing vcf files\nis not involved in creating vcf tracks\n\nshared between client-server\n*/\n\n// for telling symbolic alleles e.g. <*:DEL>\nconst getallelename = new RegExp(/<(.+)>/)\n\nconst mclasslabel2key = {}\nfor (const k in mclass) {\n\tmclasslabel2key[mclass[k].label.toUpperCase()] = k\n}\n\nexport function vcfparsemeta(lines) {\n\t/*\n\tinput: array of string, as lines separated by linebreak\n\n\t##INFO for meta lines\n\t#CHROM for header, to get samples\n\n\t*/\n\n\tlet sample = [],\n\t\terrlst = [],\n\t\tinfo = {},\n\t\thasinfo = false,\n\t\tformat = {},\n\t\thasformat = false\n\n\tfor (const line of lines) {\n\t\tif (!line.startsWith(\"#\")) {\n\t\t\tcontinue\n\t\t}\n\n\t\tif (line.startsWith(\"#C\")) {\n\t\t\t// header, get samples\n\t\t\tsample = line.split(\"\\t\").slice(9)\n\t\t\tcontinue\n\t\t}\n\n\t\tif (line.startsWith(\"##INFO\")) {\n\t\t\tconst e = tohash(line.substring(8, line.length - 1), info)\n\t\t\tif (e) {\n\t\t\t\terrlst.push(\"INFO error: \" + e)\n\t\t\t} else {\n\t\t\t\thasinfo = true\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif (line.startsWith(\"##FORMAT\")) {\n\t\t\tconst e = tohash(line.substring(10, line.length - 1), format)\n\t\t\tif (e) {\n\t\t\t\terrlst.push(\"FORMAT error: \" + e)\n\t\t\t} else {\n\t\t\t\thasformat = true\n\t\t\t}\n\t\t}\n\t}\n\n\tconst sampleobjlst = []\n\tfor (const samplename of sample) {\n\t\tconst a = { name: samplename }\n\n\t\t// this enables adding key4annotation to match with .ds.cohort.annotation\n\n\t\tsampleobjlst.push(a)\n\t}\n\n\t// reserved INFO fields\n\tif (info.CSQ) {\n\t\tconst lst = info.CSQ.Description.split(\" Format: \")\n\t\tif (lst[1]) {\n\t\t\tconst lst2 = lst[1].split(\"|\")\n\t\t\tif (lst2.length > 1) {\n\t\t\t\t// fix csq headers so to allow configuring show/hide of csq fields\n\t\t\t\tinfo.CSQ.csqheader = []\n\t\t\t\tfor (const str of lst2) {\n\t\t\t\t\tconst attr = { name: str }\n\t\t\t\t\tinfo.CSQ.csqheader.push(attr)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrlst.push(\"unknown format for CSQ header: \" + info.CSQ.Description)\n\t\t\t}\n\t\t} else {\n\t\t\terrlst.push(\"unknown format for CSQ header: \" + info.CSQ.Description)\n\t\t}\n\t}\n\n\tif (info.ANN) {\n\t\tconst lst = info.ANN.Description.split(\"'\")\n\t\tif (lst[1]) {\n\t\t\tconst lst2 = lst[1].split(\" | \")\n\t\t\tif (lst2.length) {\n\t\t\t\tinfo.ANN.annheader = []\n\t\t\t\tfor (const s of lst2) {\n\t\t\t\t\tconst attr = { name: s }\n\t\t\t\t\tinfo.ANN.annheader.push(attr)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\terrlst.push(\n\t\t\t\t\t'no \" | \" joined annotation fields for ANN (snpEff annotation): ' +\n\t\t\t\t\t\tinfo.ANN.Description\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\terrlst.push(\n\t\t\t\t\"no single-quote enclosed annotation fields for ANN (snpEff annotation): \" +\n\t\t\t\t\tinfo.ANN.Description\n\t\t\t)\n\t\t}\n\t}\n\n\treturn [\n\t\thasinfo ? info : null,\n\t\thasformat ? format : null,\n\t\tsampleobjlst,\n\t\terrlst.length ? errlst : null,\n\t]\n}\n\nexport function vcfparseline(line, vcf) {\n\t/*\n\tvcf, samples/info is generated by vcfparsemeta()\n\t\t.nochr BOOL\n\t\t.samples [ {} ]\n\t\t\t.name\n\t\t.info {}\n\t\t.format {}\n\n\treturn:\n\t\terror message STR\n\t\taltinvalid []\n\t\tmlst [ m ] one m per alt allele\n\t\t\tchr\n\t\t\tpos\n\t\t\tname\n\t\t\ttype\n\t\t\tref\n\t\t\talt\n\t\t\taltstr\n\t\t\tsampledata []\n\t\t\taltinfo\n\t*/\n\n\tconst lst = line.split(\"\\t\")\n\tif (lst.length < 8) {\n\t\t// no good\n\t\treturn [\"line has less than 8 fields\", null, null]\n\t}\n\n\tconst rawpos = Number.parseInt(lst[2 - 1])\n\tif (!Number.isInteger(rawpos)) {\n\t\treturn [\"invalid value for genomic position\", null, null]\n\t}\n\n\tconst refallele = lst[4 - 1]\n\n\tconst m = {\n\t\tvcf_ID: lst[3 - 1],\n\t\tchr: (vcf.nochr ? \"chr\" : \"\") + lst[1 - 1],\n\t\tpos: rawpos - 1,\n\t\tref: refallele,\n\t\t//refstr:refallele, // e.g. GA>GCC, ref:A, refstr:GA, \"refstr\" is required for matching in FORMAT\n\t\taltstr: lst[5 - 1],\n\t\talleles: [\n\t\t\t{\n\t\t\t\t/*\n\t\t\t\tref allele only a placeholder, to be removed, this array only contains alt alleles\n\t\t\t\tthis is a must\n\t\t\t\talso allows GT allele index to work\n\t\t\t\t*/\n\t\t\t\tallele: refallele,\n\t\t\t\tsampledata: [],\n\t\t\t},\n\t\t],\n\n\t\tinfo: {}, // locus info, do not contain allele info\n\n\t\tname: lst[3 - 1] == \".\" ? null : lst[3 - 1],\n\t}\n\n\t// parse alt\n\tconst altinvalid = []\n\tfor (const alt of lst[5 - 1].split(\",\")) {\n\t\tconst a = {\n\t\t\tref: m.ref, // may be corrected just below!\n\t\t\tallele: alt,\n\t\t\t// 5078356.TATCAGAGAA.GGGAGGA keep original allele for matching with csq which hardcodes original allele\n\t\t\tallele_original: alt,\n\t\t\tsampledata: [],\n\t\t\t_m: m,\n\t\t\tinfo: {}, // allele info, do not contain locus info\n\t\t}\n\t\tm.alleles.push(a)\n\t\tif (alt[0] == \"<\") {\n\t\t\t/*\n\t\t\tsymbolic allele, show text within <> as name\n\t\t\tFIXME match INFO\n\t\t\t*/\n\t\t\tconst tmp = alt.match(getallelename)\n\t\t\tif (!tmp) {\n\t\t\t\taltinvalid.push(alt)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\ta.type = tmp[1]\n\n\t\t\ta.allele = tmp[1]\n\t\t\ta.issymbolicallele = true\n\t\t} else {\n\t\t\t// normal nucleotide\n\n\t\t\tconst [p, ref, alt] = correctRefAlt(m.pos, m.ref, a.allele)\n\t\t\ta.pos = p\n\t\t\ta.ref = ref\n\t\t\ta.allele = alt\n\t\t}\n\t}\n\n\tif (lst[9 - 1] && lst[10 - 1]) {\n\t\tparse_FORMAT2(lst, m, vcf)\n\t}\n\n\t/*\n\tremove ref allele so it only contain alternative alleles\n\tso that parse_INFO can safely apply Number=A fields to m.alleles\n\t*/\n\tm.alleles.shift()\n\n\t// info\n\tconst tmp = lst[8 - 1] == \".\" ? [] : dissect_INFO(lst[8 - 1])\n\tlet badinfokeys = []\n\n\tif (vcf.info) {\n\t\tbadinfokeys = parse_INFO(tmp, m, vcf)\n\t} else {\n\t\t// vcf meta lines told nothing about INFO, do not parse\n\t\tm.info = tmp\n\t}\n\n\tconst mlst = []\n\tfor (const a of m.alleles) {\n\t\tconst m2 = {}\n\t\tfor (const k in m) {\n\t\t\tif (k != \"alleles\") {\n\t\t\t\tm2[k] = m[k]\n\t\t\t}\n\t\t}\n\t\tfor (const k in a) {\n\t\t\tif (k == \"allele\") {\n\t\t\t\tm2.alt = a[k]\n\t\t\t} else if (k == \"info\") {\n\t\t\t\tm2.altinfo = a[k]\n\t\t\t} else {\n\t\t\t\tm2[k] = a[k]\n\t\t\t}\n\t\t}\n\t\tif (!m2.issymbolicallele && m2.alt != \"NON_REF\") {\n\t\t\tm2.type = getVariantType(m2.ref, m2.alt)\n\t\t\t/*\n\t\t\t// valid alt allele, apply Dr. J's cool method\n\t\t\tconst [p,ref,alt]=correctRefAlt(m2.pos, m2.ref, m2.alt)\n\t\t\tm2.pos=p\n\t\t\tm2.ref=ref\n\t\t\tm2.alt=alt\n\t\t\t*/\n\t\t}\n\t\tmlst.push(m2)\n\t}\n\treturn [\n\t\tbadinfokeys.length ? \"unknown info keys: \" + badinfokeys.join(\",\") : null,\n\t\tmlst,\n\t\taltinvalid.length > 0 ? altinvalid : null,\n\t]\n}\n\nfunction correctRefAlt(p, ref, alt) {\n\t// for oligos, always trim the last identical base\n\twhile (\n\t\tref.length > 1 &&\n\t\talt.length > 1 &&\n\t\tref[ref.length - 1] == alt[alt.length - 1]\n\t) {\n\t\tref = ref.substr(0, ref.length - 1)\n\t\talt = alt.substr(0, alt.length - 1)\n\t}\n\t// move position up as long as first positions are equal\n\twhile (ref.length > 1 && alt.length > 1 && ref[0] == alt[0]) {\n\t\tref = ref.substr(1)\n\t\talt = alt.substr(1)\n\t\tp++\n\t}\n\treturn [p, ref, alt]\n}\n\nfunction parse_FORMAT2(lst, m, vcf) {\n\t/*\n\tm.alleles[0] is ref allele\n\n\teach allele:\n\t\t.ref\n\t\t.allele\n\t\t.allele_original\n\t\t.sampledata[] blank array\n\t*/\n\tconst formatfields = lst[9 - 1].split(\":\")\n\n\tfor (let _sampleidx = 9; _sampleidx < lst.length; _sampleidx++) {\n\t\t// for each sample\n\n\t\tconst valuelst = lst[_sampleidx].split(\":\")\n\t\t{\n\t\t\t// tell if this sample have any data in this line (variant), if .:., then skip\n\t\t\tlet none = true\n\t\t\tfor (const v of valuelst) {\n\t\t\t\tif (v != \".\") {\n\t\t\t\t\tnone = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (none) {\n\t\t\t\t// this sample has no format value\n\t\t\t\tcontinue\n\t\t\t}\n\t\t}\n\n\t\t/* should create an object of {format:value} of this sample\n\t\twith this object, for each alt allele this sample has,\n\t\tput a copy in m.allele[x].sampledata[]\n\t\t*/\n\n\t\tconst sampleidx = _sampleidx - 9\n\n\t\t/*\n\t\tfor each alt allele, initialize obj of this sample and store in this allele\n\t\tlater, to iterate over format fields and put in appropriate values\n\t\tnote that this sample may not actually have this allele\n\t\t*/\n\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\tconst sobj = {}\n\t\t\tif (vcf.samples && vcf.samples[sampleidx]) {\n\t\t\t\tfor (const k in vcf.samples[sampleidx]) {\n\t\t\t\t\tsobj[k] = vcf.samples[sampleidx][k]\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsobj.name = \"missing_samplename_from_vcf_header\"\n\t\t\t}\n\t\t\tm.alleles[i].sampledata.push({\n\t\t\t\tsampleobj: sobj,\n\t\t\t})\n\t\t}\n\n\t\tfor (let fi = 0; fi < formatfields.length; fi++) {\n\t\t\t// for each field of this sample\n\n\t\t\tconst field = formatfields[fi]\n\t\t\tconst value = valuelst[fi]\n\t\t\tif (value == \".\") {\n\t\t\t\t// no value for this field\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (field == \"GT\") {\n\t\t\t\tconst splitter = value.indexOf(\"/\") != -1 ? \"/\" : \"|\"\n\t\t\t\tlet gtsum = 0 // for calculating gtallref=true, old\n\t\t\t\tlet unknowngt = false // if any is '.', then won't calculate gtallref\n\t\t\t\tconst gtalleles = []\n\t\t\t\tfor (const i of value.split(splitter)) {\n\t\t\t\t\tif (i == \".\") {\n\t\t\t\t\t\tunknowngt = true\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tconst j = Number.parseInt(i)\n\t\t\t\t\tif (Number.isNaN(j)) {\n\t\t\t\t\t\tunknowngt = true\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tgtsum += j\n\t\t\t\t\tconst ale = m.alleles[j]\n\t\t\t\t\tif (ale) {\n\t\t\t\t\t\tgtalleles.push(ale.allele)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlet gtallref = false\n\t\t\t\tif (!unknowngt) {\n\t\t\t\t\tgtallref = gtsum == 0\n\t\t\t\t}\n\n\t\t\t\tconst genotype = gtalleles.join(splitter)\n\t\t\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\t\t\tconst ms = m.alleles[i].sampledata[m.alleles[i].sampledata.length - 1]\n\t\t\t\t\tms.GT = value\n\t\t\t\t\tms.genotype = genotype\n\t\t\t\t\tif (gtallref) {\n\t\t\t\t\t\tms.gtallref = true\n\t\t\t\t\t}\n\n\t\t\t\t\t// for mds vcf to drop out samples that do not have this alt allele\n\t\t\t\t\tms.__gtalleles = gtalleles\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\t// other data fields\n\t\t\tconst formatdesc = vcf.format ? vcf.format[field] : null\n\t\t\tif (!formatdesc) {\n\t\t\t\t// unspecified field, put to all alt alleles\n\t\t\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\t\t\tm.alleles[i].sampledata[m.alleles[i].sampledata.length - 1][field] =\n\t\t\t\t\t\tvalue\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst isinteger = formatdesc.Type == \"Integer\"\n\t\t\tconst isfloat = formatdesc.Type == \"Float\"\n\n\t\t\tif ((formatdesc.Number && formatdesc.Number == \"R\") || field == \"AD\") {\n\t\t\t\t/*\n\t\t\t\tper-allele value, including ref\n\t\t\t\tv4.1 has AD not with \"R\", must process as R\n\t\t\t\t*/\n\t\t\t\tconst fvlst = value.split(\",\").map((i) => {\n\t\t\t\t\tif (isinteger) return Number.parseInt(i)\n\t\t\t\t\tif (isfloat) return Number.parseFloat(i)\n\t\t\t\t\treturn i\n\t\t\t\t})\n\t\t\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\t\t\tif (fvlst[i] != undefined) {\n\t\t\t\t\t\t// this allele has value\n\t\t\t\t\t\tconst m2 = m.alleles[i]\n\t\t\t\t\t\tconst m2s = m2.sampledata[m2.sampledata.length - 1]\n\t\t\t\t\t\t// use this allele's ref/alt (after nt trimming)\n\t\t\t\t\t\tm2s[field] = {}\n\t\t\t\t\t\tm2s[field][m2.ref] = fvlst[0]\n\t\t\t\t\t\tm2s[field][m2.allele] = fvlst[i]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (formatdesc.Number && formatdesc.Number == \"A\") {\n\t\t\t\t// per alt-allele value\n\t\t\t\tconst fvlst = value.split(\",\").map((i) => {\n\t\t\t\t\tif (isinteger) return Number.parseInt(i)\n\t\t\t\t\tif (isfloat) return Number.parseFloat(i)\n\t\t\t\t\treturn i\n\t\t\t\t})\n\t\t\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\t\t\tif (fvlst[i - 1] != undefined) {\n\t\t\t\t\t\t// this allele has value\n\t\t\t\t\t\tconst m2 = m.alleles[i]\n\t\t\t\t\t\tconst m2s = m2.sampledata[m2.sampledata.length - 1]\n\t\t\t\t\t\t// use this allele's ref/alt (after nt trimming)\n\t\t\t\t\t\tm2s[field] = {}\n\t\t\t\t\t\tm2s[field][m2.allele] = fvlst[i - 1]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\t// otherwise, append this field to all alt\n\t\t\tfor (let i = 1; i < m.alleles.length; i++) {\n\t\t\t\tm.alleles[i].sampledata[m.alleles[i].sampledata.length - 1][field] =\n\t\t\t\t\tvalue\n\t\t\t}\n\t\t}\n\t}\n\n\t// compatible with old ds: make allele2readcount from AD\n\tfor (const a of m.alleles) {\n\t\tfor (const s of a.sampledata) {\n\t\t\tif (s.AD) {\n\t\t\t\ts.allele2readcount = {}\n\t\t\t\tfor (const k in s.AD) {\n\t\t\t\t\ts.allele2readcount[k] = s.AD[k]\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction tohash(s, hash) {\n\t/*\n\tparse INFO\n\t*/\n\tconst h = {},\n\t\terr = []\n\tlet prev = 0,\n\t\tprevdoublequote = false,\n\t\tk = null\n\tfor (let i = 0; i < s.length; i++) {\n\t\tif (s[i] == '\"') {\n\t\t\ti++\n\t\t\tconst thisstart = i\n\t\t\twhile (s[i] != '\"') {\n\t\t\t\ti++\n\t\t\t}\n\t\t\tif (k) {\n\t\t\t\th[k] = s.substring(thisstart, i)\n\t\t\t\tk = null\n\t\t\t} else {\n\t\t\t\terr.push(\"k undefined before double quotes\")\n\t\t\t}\n\t\t\tprevdoublequote = true\n\t\t\tcontinue\n\t\t}\n\t\tif (s[i] == \"=\") {\n\t\t\tk = s.substring(prev, i)\n\t\t\tprev = i + 1\n\t\t\tcontinue\n\t\t}\n\t\tif (s[i] == \",\") {\n\t\t\tif (prevdoublequote) {\n\t\t\t\tprevdoublequote = false\n\t\t\t} else {\n\t\t\t\tif (k) {\n\t\t\t\t\th[k] = s.substring(prev, i)\n\t\t\t\t\tk = null\n\t\t\t\t} else {\n\t\t\t\t\terr.push(\"k undefined\")\n\t\t\t\t}\n\t\t\t}\n\t\t\tprev = i + 1\n\t\t\tcontinue\n\t\t}\n\t}\n\tif (k) {\n\t\th[k] = s.substring(prev, i)\n\t}\n\tif (h.ID) {\n\t\thash[h.ID] = h\n\t} else {\n\t\treturn \"no ID\"\n\t}\n\tif (err.length) return err.join(\"\\n\")\n}\n\nfunction parse_INFO(tmp, m, vcf) {\n\t/*\n\tthis function fills in both m.info{} and m.alleles[].info{}\n\n\tthe m.alleles[] will later be converted to [m], each carrying one alt allele\n\teach m will have .info{} for locus info, and .altinfo{} for alt allele info\n\n\t*/\n\n\tconst badinfokeys = []\n\n\tfor (const key in tmp) {\n\t\tif (vcf.info[key] == undefined) {\n\t\t\tbadinfokeys.push(key)\n\t\t\tcontinue\n\t\t}\n\n\t\tconst value = tmp[key]\n\n\t\t////////////////// hard-coded fields\n\n\t\tif (key == \"CSQ\") {\n\t\t\tconst okay = parse_CSQ(value, vcf.info.CSQ.csqheader, m)\n\t\t\tif (!okay) {\n\t\t\t\tm.info[key] = value\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t\tif (key == \"ANN\") {\n\t\t\tconst okay = parse_ANN(value, vcf.info.ANN.annheader, m)\n\t\t\tif (!okay) {\n\t\t\t\tm.info[key] = value\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\t////////////////// end of hardcoded fields\n\n\t\tif (vcf.info[key].Type == \"Flag\") {\n\t\t\t// flag has no value\n\t\t\tm.info[key] = key\n\t\t\tcontinue\n\t\t}\n\n\t\tconst __number = vcf.info[key].Number\n\t\tconst isinteger = vcf.info[key].Type == \"Integer\"\n\t\tconst isfloat = vcf.info[key].Type == \"Float\"\n\n\t\tif (__number == \"0\") {\n\t\t\t/*\n\t\t\tno value, should be a Flag\n\t\t\t*/\n\t\t\tm.info[key] = key\n\t\t\tcontinue\n\t\t}\n\n\t\tif (__number == \"A\") {\n\t\t\t/*\n\t\t\tper alt allele\n\t\t\t*/\n\t\t\tconst tt = value.split(\",\")\n\t\t\tfor (let j = 0; j < tt.length; j++) {\n\t\t\t\tif (m.alleles[j]) {\n\t\t\t\t\tm.alleles[j].info[key] = isinteger\n\t\t\t\t\t\t? Number.parseInt(tt[j])\n\t\t\t\t\t\t: isfloat\n\t\t\t\t\t\t? Number.parseFloat(tt[j])\n\t\t\t\t\t\t: tt[j]\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\n\t\tif (__number == \"R\") {\n\t\t\t/*\n\t\t\tFIXME \"R\" is not considered, m.alleles only contain alt, which .info{} for each\n\t\t\tthe current datastructure does not support info for ref allele!\n\t\t\t*/\n\t\t}\n\n\t\tif (__number == \"1\") {\n\t\t\t/*\n\t\t\tsingle value\n\t\t\t*/\n\t\t\tm.info[key] = isinteger\n\t\t\t\t? Number.parseInt(value)\n\t\t\t\t: isfloat\n\t\t\t\t? Number.parseFloat(value)\n\t\t\t\t: value\n\t\t\tcontinue\n\t\t}\n\n\t\tif (!value.split) {\n\t\t\t// unknown error\n\t\t\tcontinue\n\t\t}\n\n\t\t// number of values unknown, \"commas are permitted only as delimiters for lists of values\"\n\n\t\tconst lst = value.split(\",\") // value is always array!!\n\t\tif (isinteger) {\n\t\t\tm.info[key] = lst.map(Number.parseInt)\n\t\t} else if (isfloat) {\n\t\t\tm.info[key] = lst.map(Number.parseFloat)\n\t\t} else {\n\t\t\tm.info[key] = lst\n\t\t}\n\t}\n\treturn badinfokeys\n}\n", "// compute the percentile value from an array of values\n// sorted parameter allows to skip sorting if array is pre-sorted\n// source: https://www.dummies.com/article/academics-the-arts/math/statistics/how-to-calculate-percentiles-in-statistics-169783/\nexport default function computePercentile(values, percentile, sorted = false) {\n\tif (!sorted) values.sort((a, b) => a - b)\n\tconst index = Math.abs((percentile / 100) * values.length - 1)\n\tconst value = Number.isInteger(index)\n\t\t? (values[index] + values[index + 1]) / 2\n\t\t: values[Math.ceil(index)]\n\treturn value\n}\n", "const encoder = new TextEncoder()\n\nexport async function hash(message) {\n\tconst msgUint8 = encoder.encode(message) // encode as (utf-8) Uint8Array\n\tconst hashBuffer = await crypto.subtle.digest(\"SHA-1\", msgUint8) // hash the message\n\tconst hashArray = Array.from(new Uint8Array(hashBuffer)) // convert buffer to byte array\n\tconst hashHex = hashArray.map((b) => b.toString(16).padStart(2, \"0\")).join(\"\") // convert bytes to hex string\n\treturn hexToBase64(hashHex).replace(\"=\", \"-\") // shorten from 40 to 28 chars\n}\n\nfunction hexToBase64(hexStr) {\n\treturn btoa(\n\t\t[...hexStr].reduce(\n\t\t\t(acc, _, i) =>\n\t\t\t\t(acc += !((i - 1) & 1)\n\t\t\t\t\t? String.fromCharCode(parseInt(hexStr.substring(i - 1, i + 1), 16))\n\t\t\t\t\t: \"\"),\n\t\t\t\"\"\n\t\t)\n\t)\n}\n", "import { isNumeric } from \"./helpers.js\"\nconst reserved = [\"false\", \"true\", \"null\", \"undefined\"]\nconst delimiters = ['\"', \"{\", \"[\"]\nfunction encode(rawObject) {\n\tconst params = []\n\tfor (const [key, value] of Object.entries(rawObject)) {\n\t\tif (\n\t\t\ttypeof value == \"string\" &&\n\t\t\t!isNumeric(value) &&\n\t\t\t!reserved.includes(value) &&\n\t\t\t!delimiters.includes(value[0])\n\t\t) {\n\t\t\tparams.push(`${key}=${encodeURIComponent(value)}`)\n\t\t} else if (value !== void 0) {\n\t\t\tparams.push(`${key}=${encodeURIComponent(JSON.stringify(value))}`)\n\t\t}\n\t}\n\treturn params.join(\"&\")\n}\nfunction decode(query) {\n\tconst encoding = query.encoding\n\tfor (const [key, value] of Object.entries(query)) {\n\t\tif (\n\t\t\tencoding == \"json\" ||\n\t\t\tvalue == \"null\" || // not new, always been\n\t\t\tvalue == \"true\" || // NEED TO FIND-REPLACE CODE THAT USES value == 'true'\n\t\t\tvalue == \"false\" || // NEED TO FIND-REPLACE CODE THAT USES value == 'false'\n\t\t\tisNumeric(value) || // NEED TO check\n\t\t\t(typeof value == \"string\" &&\n\t\t\t\tvalue.startsWith('\"') &&\n\t\t\t\tvalue.endsWith('\"')) ||\n\t\t\t(typeof value == \"string\" &&\n\t\t\t\tvalue.startsWith(\"{\") &&\n\t\t\t\tvalue.endsWith(\"}\")) ||\n\t\t\t(value.startsWith(\"[\") && value.endsWith(\"]\"))\n\t\t)\n\t\t\tquery[key] = JSON.parse(value)\n\t}\n\treturn query\n}\nexport { decode, encode }\n", "import { hash } from \"./hash.js\"\nimport { encode } from \"./urljson.js\"\nimport { deepFreeze } from \"./helpers.js\"\n\n/*\n\tezFetch()\n\tfetch wrapper with automatic response content-type detection and handling\n\n\t- this addresses issues with ky.json() or got.json(), where a HTTP 404 NOT FOUND\n\t\tresponse with text/html can break error handling/logging, making it harder to debug\n\n\t- this also automatically handles multipart responses\n\n - NOTE: for backend, use xfetch() instead, it uses ky() and its built-in retry support\n\n\targuments:\n\turl\n\tinit{headers?, body?}\n\t- first two arguments are same as native fetch\n*/\nexport async function ezFetch(_url, init = {}, opts = {}) {\n\tconst url = opts.autoMethod ? mayAdjustRequest(_url, init) : _url\n\tif (typeof init.body === \"object\") init.body = JSON.stringify(init.body)\n\n\treturn fetch(url, init).then(async (r) => {\n\t\tconst response = await processResponse(r)\n\t\tif (!r.ok) {\n\t\t\tconsole.log(\"ezFetch error \" + r.status)\n\t\t\tconsole.log(response)\n\t\t\tthrow response\n\t\t}\n\t\treturn response\n\t})\n}\n\nfunction mayAdjustRequest(url, init) {\n\tconst method = init.method?.toUpperCase() || \"GET\"\n\tif (method == \"POST\") {\n\t\tif (!init.headers) init.headers = {}\n\t\tif (init.body) {\n\t\t\tif (!init.headers[\"content-type\"])\n\t\t\t\tinit.headers[\"content-type\"] = \"application/json\"\n\t\t\tif (init.headers[\"content-type\"].toLowerCase() == \"application/json\") {\n\t\t\t\t// if consumer code has pre-encoded the body, parse to verify correctness\n\t\t\t\tif (typeof init.body == \"string\") init.body = JSON.parse(init.body)\n\t\t\t\tinit.body = JSON.stringify(init.body)\n\t\t\t}\n\t\t}\n\t\treturn url\n\t}\n\t// default to GET method per native fetch\n\tif (init.body) {\n\t\tif (typeof init.body != \"object\") throw `init.body should be an object`\n\t\t// init.body should be an object, to be converted to GET URL search parameter strings\n\t\tif (!url.includes(\"?\")) url += \"?\"\n\t\treturn `${url}${encode(init.body)}`\n\t}\n}\n\n/* \nr: a native fetch response argument\n\npotentially allow \"application/octet-stream\" as response type\nin such case it will not try to parse it as json\nalso the caller should just call dofetch2() without a serverData{}\nrather than dofetch3\n*/\nexport async function processResponse(r) {\n\t// if (!r.ok) {\n\t// throw new Error(`HTTP error! status: ${r.status}`)\n\t// }\n\tconst ct = r.headers.get(\"content-type\") // content type is always present\n\tif (!ct) throw `missing response.header['content-type']`\n\tif (ct.includes(\"/json\")) {\n\t\tconst payload = await r.json()\n\t\t// server should use a standard HTTP response status 400+, 500+\n\t\t// so that !r.ok will already be caught when wrapping fetch with try-catch\n\t\t// if (payload.error || payload.status == '') throw payload\n\t\t// if (payload.status === 'error') throw payload.message || payload\n\t\treturn payload\n\t}\n\tif (ct.includes(\"/text\") || ct.includes(\"text/\")) {\n\t\treturn r.text()\n\t}\n\tif (ct.includes(\"multipart\")) {\n\t\tif (ct.startsWith(\"multipart/form-data\")) return processFormData(r)\n\t\telse throw `cannot handle response content-type: '${ct}'`\n\t}\n\tif (ct == \"application/x-ndjson-nestedkey\") {\n\t\treturn processNDJSON_nestedKey(r)\n\t}\n\t// call blob() as catch-all\n\t// https://developer.mozilla.org/en-US/docs/Web/API/Response\n\treturn r.blob()\n}\n\n/*\n\texpected response format\n\t--boundary-text-from-HTTP-headers-content-type\n\theader-key1: header-value1\n\theader-key2: header-value2\n\n\t...json, text, blob, value, etc...\n\t--boundary-text-from-HTTP-headers-content-type\n\t... same format as previous chunk ...\n\n\t--boundary-text-from-HTTP-headers-content-type--\n*/\n\nexport async function processFormData(res) {\n\tconst decoder = new TextDecoder()\n\tconst data = {}\n\ttry {\n\t\tconst form = await res.formData()\n\t\t// The key of each form entry is a string, and the value is either a string or a Blob.\n\t\t// see https://developer.mozilla.org/en-US/docs/Web/API/FormData/entries\n\t\tfor (const [key, value] of form.entries()) {\n\t\t\tif (value.type) {\n\t\t\t\t// value is a Blob\n\t\t\t\tdata[key] = { headers: { \"content-type\": value.type }, body: value }\n\t\t\t} else {\n\t\t\t\t// value is a string, assume to be application/x-jsonlines (one json encoded value per line)\n\t\t\t\t// and convert into an array of json-decoded values\n\t\t\t\tconst body = !value ? [] : value.trim().split(\"\\n\").map(JSON.parse)\n\t\t\t\tdata[key] = { headers: { \"content-type\": \"application/json\" }, body }\n\t\t\t}\n\t\t}\n\t\treturn data\n\t} catch (e) {\n\t\tthrow e\n\t}\n}\n\nasync function processNDJSON_nestedKey(r) {\n\t// 1. Pipe through TextDecoder to convert bytes to text\n\tconst stream = r.body.pipeThrough(new TextDecoderStream())\n\tconst reader = stream.getReader()\n\tlet rootObj = {}\n\n\tlet buffer = \"\"\n\n\twhile (true) {\n\t\tconst { value, done } = await reader.read()\n\t\tif (done) break\n\n\t\t// 2. Add new chunk to buffer\n\t\tbuffer += value\n\n\t\t// 3. Split by newline\n\t\tlet parts = buffer.split(\"\\n\")\n\n\t\t// 4. Keep the last partial line in the buffer\n\t\tbuffer = parts.pop()\n\n\t\t// 5. Process complete lines\n\t\tfor (const line of parts) {\n\t\t\tif (line.trim()) {\n\t\t\t\tconst [keys, data] = JSON.parse(line) //; console.log(143, keys, data) // Process JSON data\n\t\t\t\tif (!keys.length) rootObj = data\n\t\t\t\telse {\n\t\t\t\t\tconst lastKey = keys.pop()\n\t\t\t\t\tlet target = rootObj\n\t\t\t\t\tfor (const k of keys) target = target[k]\n\t\t\t\t\ttarget[lastKey] = data\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn rootObj\n}\n\n// key: request object reference or computed string dataName\n// value: {\n// response: fetch promise or response,\n// exp: expiration timestamp\n// }\nconst dataCache = new Map()\n// maximum number of cached dataNames, oldest will be deleted if this is exceeded\nconst maxNumOfDataKeys = 10\nconst cacheLifetime = 1000 * 60 * 5\n/*\n\tmemFetch()\n\t- fetch wrapper that saves cached responses into memory and recovers them for matching subsequent requests\n\t- recommended for caching responses in the backend, with the opts.q argument to cache per expressjs request object\n\t- should call deleteCache(request) at the end of request handling, to free unneeded cache\n\t\n\tSee the usage note for getDataName() to avoid non-unique request/response.\n\t\n\tArguments:\n\turl\n\tinit{headers?, body?}\n\t- first two arguments are same as native fetch\n - when passing opts.client, may include other applicable options inside the init{} object, such as retry\n\n\topts{client}\n\n client: use this http client instead of native fetch\n - since fetch-helpers is shared between server and frontend workspaces, \n cannot directly import non-native modules at the beginning of this code file \n - for server side usage, client may be `xfetch()`, `ky` or other libraries \n*/\nexport async function memFetch(url, init, opts = {}) {\n\tif (typeof init.body === \"object\") init.body = JSON.stringify(init.body)\n\tconst dataKey = opts.q || (await getDataName(url, init))\n\tconst { response, exp } = dataCache.get(dataKey) || {}\n\tconst now = Date.now()\n\tlet result = response // either a Promise or actual data\n\n\tif (result) {\n\t\t// extend the expiration, since exp is more about managing the cache size\n\t\t// and not the validity of the cached response. A response for the current\n\t\t// dataName req.url + body + headers is technically valid until a new data version\n\t\t// gets published.\n\t\tdataCache.set(dataKey, { response, exp: now + cacheLifetime })\n\t\treturn result\n\t} else {\n\t\ttry {\n\t\t\t// IMPORTANT: do not await so that this same promise may be reused\n\t\t\t// by subsequent requests with the same dataKey\n\t\t\tresult = opts.client\n\t\t\t\t? opts\n\t\t\t\t\t\t.client(url, init, Object.assign(opts, { client: undefined }))\n\t\t\t\t\t\t.then((response) => {\n\t\t\t\t\t\t\t// replace the cached promise result with the actual data,\n\t\t\t\t\t\t\t// since persisting a cached promise for a long time is likely not best practice\n\t\t\t\t\t\t\tdataCache.set(dataKey, {\n\t\t\t\t\t\t\t\tresponse,\n\t\t\t\t\t\t\t\texp: Date.now() + cacheLifetime,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\treturn response\n\t\t\t\t\t\t})\n\t\t\t\t: fetch(url, init)\n\t\t\t\t\t\t.then(async (r) => {\n\t\t\t\t\t\t\tconst response = await processResponse(r)\n\t\t\t\t\t\t\tif (!r.ok) {\n\t\t\t\t\t\t\t\tconsole.trace(response)\n\t\t\t\t\t\t\t\tthrow (\n\t\t\t\t\t\t\t\t\t\"memFetch error \" +\n\t\t\t\t\t\t\t\t\tr.status +\n\t\t\t\t\t\t\t\t\t\": \" +\n\t\t\t\t\t\t\t\t\t(typeof response == \"object\"\n\t\t\t\t\t\t\t\t\t\t? response.message || response.error\n\t\t\t\t\t\t\t\t\t\t: response)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// replace the cached promise result with the actual data,\n\t\t\t\t\t\t\t// since persisting a cached promise for a long time is likely not best practice\n\t\t\t\t\t\t\tdataCache.set(dataKey, {\n\t\t\t\t\t\t\t\tresponse: deepFreeze(response),\n\t\t\t\t\t\t\t\texp: Date.now() + cacheLifetime,\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\treturn response\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch((e) => {\n\t\t\t\t\t\t\tif (dataCache.get(dataKey)) dataCache.delete(dataKey)\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\n\t\t\tdataCache.set(dataKey, {\n\t\t\t\tresponse: result,\n\t\t\t\texp: Date.now() + cacheLifetime,\n\t\t\t})\n\t\t\tmanageCacheSize(now)\n\t\t\treturn result\n\t\t} catch (e) {\n\t\t\t// delete this cache only if it is a promise;\n\t\t\t// do not delete a valid resolved data cache\n\t\t\tif (dataCache.get(dataKey) instanceof Promise) dataCache.delete(dataKey)\n\t\t\tthrow e\n\t\t}\n\t}\n}\n\nexport function deleteCache(key) {\n\tdataCache.delete(key)\n}\n\nexport function manageCacheSize(_now) {\n\tconst now = _now || Date.now()\n\tconst keyExp = []\n\tfor (const [key, result] of dataCache.entries()) {\n\t\tif (result.exp < now) dataCache.delete(key)\n\t\telse keyExp.push({ key, exp: result.exp })\n\t}\n\tif (dataCache.size > maxNumOfDataKeys) {\n\t\tconst oldestEntries = keyExp\n\t\t\t.sort((a, b) => a.exp - b.exp)\n\t\t\t.slice(maxNumOfDataKeys)\n\t\tfor (const entry of oldestEntries) dataCache.delete(entry.key)\n\t}\n}\n\n/*\n\tNOTE: When used in client-side code, an HttpOnly cookie for a logged in user will not be\n\ttracked in init.headers below. \n*/\nexport async function getDataName(url, init) {\n\t// IMPORTANT: must ensure dataName is unique to either public or logged-in user\n\tconst dataName =\n\t\turl +\n\t\t\" | \" +\n\t\tinit.method +\n\t\t\" | \" +\n\t\tinit.body +\n\t\t\" | \" +\n\t\tJSON.stringify(init.headers)\n\treturn await hash(dataName)\n}\n\n//\nexport function clearMemFetchDataCache(opts = {}) {\n\tif (!opts.serverData) {\n\t\tdataCache.clear()\n\t\treturn\n\t}\n\tif (typeof opts.serverData != \"object\")\n\t\tthrow `opts.serverData is not an object`\n\tfor (const k of Object.keys(opts.serverData)) {\n\t\tdelete opts.serverData[k]\n\t}\n\tif (optsServerDataNames.has(opts.serverData))\n\t\toptsServerDataNames.delete(opts.serverData)\n}\n", "import {\n\tTermTypes,\n\tisNumericTerm,\n\tSINGLECELL_CELLTYPE,\n\tSINGLECELL_GENE_EXPRESSION,\n\tISOFORM_EXPRESSION,\n} from \"./terms.js\"\n\nexport const graphableTypes = new Set([\n\t\"categorical\",\n\t\"integer\",\n\t\"float\",\n\t\"condition\",\n\t\"survival\",\n\t\"snplst\",\n\t\"snplocus\",\n\t\"geneVariant\",\n\t\"samplelst\",\n\t\"geneExpression\",\n\tISOFORM_EXPRESSION,\n\t\"dtcnv\",\n\t\"dtsnvindel\",\n\t\"dtfusion\",\n\t\"dtsv\",\n\t\"date\",\n\tTermTypes.SSGSEA,\n\tTermTypes.DNA_METHYLATION,\n\tTermTypes.METABOLITE_INTENSITY,\n\tTermTypes.PROTEOME_ABUNDANCE,\n\tSINGLECELL_GENE_EXPRESSION,\n\tSINGLECELL_CELLTYPE,\n\tTermTypes.SNP,\n\tTermTypes.TERM_COLLECTION,\n])\n\n/*\nisUsableTerm() will\n\n\t- centralize the \"allowed term\" logic\n\twhich can be intricate or dataset-specific \n\tfor certain terms or contexts\n\t- make it easy to handle new term types\n\nArguments:\n\n\tterm {}\n\t\t.type: 'categorical', etc.\n\t\t.child_types: []\n\t\n\t_usecase {}\n\t\t.target (REQUIRED): 'barchart', 'regression', etc\n\t\t\t- used as a switch-case \"router\" for additional use-specific logic\n\t\t\t- other parameters, if applicable, are described in the route \"handler\" \n\t\t.detail \n\t\t - a more specific detailed use case\n\t\n\n\ttermdbConfig\n\t\toptional. provides ds overrides on default rules via excludedTermtypeByTarget. for use on client\n\n\tds\n\t\toptional. provides ds overrides when the function runs on backend\n\t\tserver-side dataset object that can supply overrides (in the form of functions) to the use case logic,\n\t\tfor example, to apply role-based allowed term uses or performance-related restrictions\n\t\tto ancestor terms when a use case aggregates too many data points for a given chart type\n\nReturns\n\n\ta Set{} with zero or more of the following strings:\n\t- 'plot' if the term can be used in a plot chartType\n\t- 'branch' if the term can be used only as an expandable tree branch, but not in a plot\n\t- an empty Set means that the term has no valid uses, i.e, it cannot be used either for plotting or as a tree branch\n*/\nexport function isUsableTerm(term, _usecase, termdbConfig, ds) {\n\tconst usecase = _usecase || {}\n\n\t// may apply dataset specific override filter for a use case\n\tif (typeof ds?.usecase?.[usecase.target] == \"function\") {\n\t\treturn ds.usecase[usecase.target](term, usecase)\n\t}\n\n\t// if (term.isprivate && !user.roleCanUse(term)) return false\n\n\tconst uses = new Set()\n\t// note: expects term.child_types to be null if term.isleaf == true\n\tconst child_types = term.child_types || []\n\t// default handling\n\tswitch (usecase.target) {\n\t\tcase \"barchart\":\n\t\tcase \"violin\":\n\t\tcase \"boxplot\":\n\t\tcase \"summary\":\n\t\t\tif (term.type && term.type !== \"survival\") uses.add(\"plot\")\n\t\t\tif (hasAllowedChildTypes(child_types, [\"survival\"])) uses.add(\"branch\")\n\t\t\treturn uses\n\n\t\tcase \"summaryInput\":\n\t\t\tif (usecase.detail === \"term2\" || usecase.detail == \"term0\") {\n\t\t\t\tif (term.type && term.type !== \"survival\") uses.add(\"plot\")\n\t\t\t\tif (hasAllowedChildTypes(child_types, [\"survival\"])) uses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t} else {\n\t\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\n\t\tcase \"matrix\":\n\t\t\tif (term.type) uses.add(\"plot\")\n\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\treturn uses\n\n\t\tcase \"table\":\n\t\t\tif (usecase.detail == \"term\") uses.add(\"plot\")\n\t\t\tif (child_types.length > 1) uses.add(\"branch\")\n\t\t\treturn uses\n\n\t\tcase \"sampleScatter\":\n\t\t\tif (usecase.detail == \"numeric\") {\n\t\t\t\tif (isNumericTerm(term)) {\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t}\n\t\t\t\tif (hasNumericChild(child_types)) uses.add(\"branch\")\n\t\t\t}\n\t\t\t// Commenting out for now. May need later for another single\n\t\t\t// cell term. Revisit logic at that time.\n\t\t\t// else if (usecase?.specialCase?.type == 'singleCell') {\n\t\t\t// \t\tif (term.type && term.type.startsWith('singleCell')) {\n\t\t\t// \t\t\tif (term.plot && term.plot == usecase.specialCase?.config.name) {\n\t\t\t// \t\t\t\tuses.add('plot')\n\t\t\t// \t\t\t}\n\t\t\t// \t\t}\n\t\t\t// }\n\t\t\telse {\n\t\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\t}\n\t\t\treturn uses\n\t\tcase \"runChart2\":\n\t\t\tif (usecase.detail == \"date\" || usecase.detail == \"xtw\") {\n\t\t\t\tif (term.type == \"date\") {\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t}\n\t\t\t\tif (child_types.includes(\"date\")) uses.add(\"branch\")\n\t\t\t} else if (usecase.detail == \"numeric\") {\n\t\t\t\tif (isNumericTerm(term) && term.type != \"date\") {\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t}\n\t\t\t\tif (hasNumericChild(child_types)) uses.add(\"branch\")\n\t\t\t} else {\n\t\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\t}\n\t\t\treturn uses\n\t\tcase \"termCollections\":\n\t\t\tif (usecase.detail?.termIds?.includes(term.id)) uses.add(\"plot\")\n\t\t\tif (usecase.detail?.branchIds?.includes(term.id)) uses.add(\"branch\")\n\t\t\treturn uses\n\n\t\tcase \"profileForms\":\n\t\t\tif (!term.isleaf) {\n\t\t\t\tconst ancestors = term.id.split(\"__\").length //depends on using the __ naming convension!\n\t\t\t\tif (ancestors == 3) {\n\t\t\t\t\t// 3rd level term is a domain, we show the templates associated to this domain\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t} else if (ancestors < 3) uses.add(\"branch\")\n\t\t\t}\n\t\t\treturn uses\n\n\t\t// case 'boxplot':\n\t\t// \tif (term.type == 'float' || term.type == 'integer') uses.add('plot')\n\t\t// \tif (usecase.detail === 'term2' && hasNumericChild(child_types)) uses.add('branch')\n\t\t// \treturn uses\n\n\t\tcase \"cuminc\":\n\t\t\tif (usecase.detail == \"term\") {\n\t\t\t\tif (term.type == \"condition\") uses.add(\"plot\")\n\t\t\t\tif (child_types.includes(\"condition\")) uses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\tif (usecase.detail === \"term2\" || usecase.detail == \"term0\") {\n\t\t\t\tif (term.type && term.type != \"condition\" && term.type != \"survival\")\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\tif (hasAllowedChildTypes(child_types, [\"condition\", \"survival\"]))\n\t\t\t\t\tuses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\treturn uses\n\n\t\tcase \"survival\":\n\t\t\tif (usecase.detail == \"term\") {\n\t\t\t\tif (term.type == \"survival\") uses.add(\"plot\")\n\t\t\t\tif (child_types.includes(\"survival\")) uses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\tif (usecase.detail === \"term2\" || usecase.detail == \"term0\") {\n\t\t\t\tif (term.type && term.type != \"survival\") uses.add(\"plot\")\n\t\t\t\tif (hasAllowedChildTypes(child_types, [\"survival\"])) uses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\treturn uses\n\n\t\tcase \"regression\":\n\t\t\tif (usecase.detail == \"outcome\") {\n\t\t\t\tif (usecase.regressionType == \"linear\") {\n\t\t\t\t\tif (term.type == \"float\" || term.type == \"integer\") uses.add(\"plot\")\n\t\t\t\t\tif (hasNumericChild(child_types)) uses.add(\"branch\")\n\t\t\t\t\treturn uses\n\t\t\t\t}\n\t\t\t\tif (usecase.regressionType == \"logistic\") {\n\t\t\t\t\tif (term.type && term.type != \"survival\") uses.add(\"plot\")\n\t\t\t\t\tif (hasAllowedChildTypes(child_types, [\"survival\"]))\n\t\t\t\t\t\tuses.add(\"branch\")\n\t\t\t\t\treturn uses\n\t\t\t\t} else if (usecase.regressionType == \"cox\") {\n\t\t\t\t\tif (term.type == \"condition\" || term.type == \"survival\")\n\t\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t\tif (\n\t\t\t\t\t\tchild_types.includes(\"condition\") ||\n\t\t\t\t\t\tchild_types.includes(\"survival\")\n\t\t\t\t\t)\n\t\t\t\t\t\tuses.add(\"branch\")\n\t\t\t\t\treturn uses\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (usecase.detail == \"independent\") {\n\t\t\t\tif (\n\t\t\t\t\tterm.type == \"float\" ||\n\t\t\t\t\tterm.type == \"integer\" ||\n\t\t\t\t\tterm.type == \"categorical\" ||\n\t\t\t\t\tterm.type == \"samplelst\"\n\t\t\t\t)\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\tif (hasChildTypes(child_types, [\"categorical\", \"float\", \"integer\"]))\n\t\t\t\t\tuses.add(\"branch\")\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\treturn uses\n\n\t\tcase \"filter\": {\n\t\t\t// apply \"exlst\" to other targets as needed\n\t\t\tconst exlst = termdbConfig?.excludedTermtypeByTarget?.filter\n\t\t\tif (exlst) {\n\t\t\t\tif (graphableTypes.has(term.type) && !exlst.includes(term.type))\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\tif (child_types.find((t) => !exlst.includes(t))) uses.add(\"branch\") // there's a non-excluded child type, allow branch to show\n\t\t\t\treturn uses\n\t\t\t}\n\t\t\t// no specific rule for filter. use default rules\n\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\treturn uses\n\t\t}\n\n\t\tcase \"correlationVolcano\":\n\t\t\tif (usecase.detail == \"numeric\") {\n\t\t\t\tif (isNumericTerm(term)) {\n\t\t\t\t\tuses.add(\"plot\")\n\t\t\t\t}\n\t\t\t\tif (hasNumericChild(child_types)) uses.add(\"branch\")\n\t\t\t} else {\n\t\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\t}\n\t\t\treturn uses\n\n\t\tcase \"proteinView\":\n\t\t\tif (term.type == TermTypes.PROTEOME_ABUNDANCE) uses.add(\"plot\")\n\t\t\tif (child_types.includes(TermTypes.PROTEOME_ABUNDANCE)) uses.add(\"branch\")\n\t\t\treturn uses\n\n\t\tdefault:\n\t\t\tif (graphableTypes.has(term.type)) uses.add(\"plot\")\n\t\t\tif (!term.isleaf) uses.add(\"branch\")\n\t\t\treturn uses\n\t}\n}\n\n// determine if the term has at least one child type that\n// is not excluded\nfunction hasAllowedChildTypes(child_types, excluded_types) {\n\tif (!child_types.length) {\n\t\t// term does not have children\n\t\treturn false\n\t}\n\tif (!excluded_types?.length) {\n\t\t// no excluded types\n\t\treturn true\n\t}\n\tif (child_types.some((type) => !excluded_types.includes(type))) {\n\t\t// at least one child type is not excluded\n\t\treturn true\n\t}\n}\n\nfunction hasNumericChild(child_types) {\n\treturn child_types.includes(\"float\") || child_types.includes(\"integer\")\n}\n\nfunction hasChildTypes(child_types, expected_types) {\n\tfor (const a of expected_types) {\n\t\tif (child_types.includes(a)) return true\n\t}\n}\n", "function formatElapsedTime(ms, precision = 2) {\n\tif (typeof ms !== \"number\" || isNaN(ms)) {\n\t\treturn typeof ms !== \"number\"\n\t\t\t? \"Invalid time: not a number\"\n\t\t\t: \"Invalid time: NaN\"\n\t}\n\tif (!isFinite(ms)) {\n\t\treturn ms > 0 ? \"Infinite time\" : \"-Infinite time\"\n\t}\n\tconst absMs = Math.abs(ms)\n\tconst sign = ms < 0 ? \"-\" : \"\"\n\tif (absMs < 1e3) {\n\t\treturn `${sign}${absMs}ms`\n\t}\n\tif (absMs < 6e4) {\n\t\treturn `${sign}${(absMs / 1e3).toFixed(precision)}s`\n\t}\n\tconst minutes = Math.floor(absMs / 6e4)\n\tconst seconds = ((absMs % 6e4) / 1e3).toFixed(precision)\n\treturn `${sign}${minutes}m ${seconds}s`\n}\nexport { formatElapsedTime }\n", "import { select } from 'd3-selection'\n\nconst jwtByDsRouteStr = localStorage.getItem('jwtByDsRoute') || `{}`\nconst jwtByDsRoute = JSON.parse(jwtByDsRouteStr)\n\n/*\n\tsetTokenByDsRoute() sets this storage item:\n\n\tjwtByDsRoute = {\n\t\t[dslabel]: { // the dataset that is being protected, should match one of the serverconfig.dsCredentials key\n\t\t\t[route]: // the route that is being protected, should match one of the serverconfig.dsCredentials[dslabel] key\n\t\t\t\t\"...jwt...string...\" // ProteinPaint-issued jwt from a `/jwt-status` or `/dslogin` response, \n\t\t\t\t // which also includes dslabel and route to use as nested keys for this jwtByDsRoute\n\t\t}\n\t}\n\t\n\tNote that jwtByDsRoute does not have a nesting level of embedder, unlike serverconfig.dsCredentials, since\n\tthe embedder is detected directly from the winddow.location.hostname.\n\n\tThe stored token will be submitted as part of Vocab.mayGetAuthHeaders() or getSavedToken().\n*/\nexport function setTokenByDsRoute(dslabel, route, jwt) {\n\tif (!jwtByDsRoute[dslabel]) jwtByDsRoute[dslabel] = {}\n\tif (jwt) jwtByDsRoute[dslabel][route] = jwt\n\telse delete jwtByDsRoute[dslabel][route]\n\tlocalStorage.setItem('jwtByDsRoute', JSON.stringify(jwtByDsRoute))\n}\n\n// get jwt string directly from localStorage/jwtByDsRoute tracking object\nexport function getSavedToken(dslabel, route) {\n\treturn jwtByDsRoute[dslabel]?.[route] || jwtByDsRoute[dslabel]?.['/**']\n}\n\nexport function mayAddJwtToRequest(init, body, url) {\n\tif (init.headers.authorization) return\n\tlet dslabel = body?.dslabel // || body.mass?.vocab.dslabel || body.tracks?.find(t => t.dslabel)?.dslabel\n\tif (!dslabel) {\n\t\tconst param = url\n\t\t\t.split('?')[1]\n\t\t\t?.split('&')\n\t\t\t.find(kv => kv.includes('dslabel'))\n\t\tif (!param) return\n\t\tlet value = decodeURIComponent(param.split('=')[1])\n\t\tif (value.startsWith('{') && value.endsWith('}')) {\n\t\t\tvalue = JSON.parse(value)\n\t\t\tdslabel = value.dslabel || value.mass?.vocab.dslabel || value.tracks?.find(t => t.dslabel)?.dslabel\n\t\t} else {\n\t\t\tdslabel = value\n\t\t}\n\t}\n\tif (!dslabel || !jwtByDsRoute[dslabel]) return\n\tconst h = url.split('//')\n\tconst postProtocolStr = h[1] || h[0] // handle a url such as '://something.abc'\n\tconst preQuestionMarkStr = postProtocolStr.split('?')[0]\n\tconst pathSegments = preQuestionMarkStr.split('/')\n\tlet route = pathSegments.find(p => p != '' && !p.includes(':') && !p.includes('.'))\n\t// TODO: should not have to do this hardcoded mapping, ideally routes that are\n\t// protected together will share the same initial path segment\n\n\tconst jwt = jwtByDsRoute[dslabel][route] || jwtByDsRoute[dslabel]['/**']\n\tif (jwt) init.headers.authorization = 'Bearer ' + btoa(jwt)\n}\n\nconst dsAuthOk = new Set()\nlet dsAuth, authUi, authUiHolder\n\nexport let includeEmbedder = false\n\n/*\n\topts{}\n\t.dsAuth: required, array of dataset names that require login\n\t.authUi: optional, a custom login UI function to launch as needed\n\t.holder: optional, a d3-wrapped selection to hold the auth UI\n*/\nexport async function setDsAuthOk(opts, dofetch3) {\n\tdsAuth = opts.dsAuth\n\tauthUi = opts.ui || defaultAuthUi\n\tauthUiHolder = opts.holder || select('body')\n\tfor (const auth of dsAuth) {\n\t\t// fillin all the dslabels that has an active session\n\t\t// so that an unnecessary login form will not be shown\n\t\tif (auth.insession) dsAuthOk.add(auth)\n\t\telse {\n\t\t\t// check if there is a PP-server generated session token that has been saved from a previous login\n\t\t\tconst { dslabel, route } = auth\n\t\t\tconst jwt = getSavedToken(dslabel, route)\n\t\t\tif (jwt) {\n\t\t\t\tconst payload = JSON.parse(atob(jwt.split('.')[1]))\n\t\t\t\tif (payload.exp && Math.ceil(Date.now() / 1000) > payload.exp) continue\n\t\t\t\tconst data = await dofetch3('/jwt-status', {\n\t\t\t\t\tmethod: 'POST',\n\t\t\t\t\theaders: {\n\t\t\t\t\t\t//authorization: `Bearer ${btoa(jwt)}`\n\t\t\t\t\t\t[auth.headerKey]: jwt\n\t\t\t\t\t},\n\t\t\t\t\tbody: {\n\t\t\t\t\t\tdslabel,\n\t\t\t\t\t\troute,\n\t\t\t\t\t\tembedder: location.hostname\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tif (data.ok || data.status == 'ok') {\n\t\t\t\t\tdsAuthOk.add(auth)\n\t\t\t\t\tauth.insession = true\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tincludeEmbedder = opts.dsAuth?.length > 0 || false\n}\n\nexport function getRequiredAuth(dslabel, route) {\n\tif (!dsAuth || !Array.isArray(dsAuth)) return\n\tfor (const a of dsAuth) {\n\t\t// wildcard route '*' is transformed by server auth.js into '/**' to support glob-pattern matching,\n\t\t// since a single character '*' is interpreted by glob as a file, so need to also detect '/**' route\n\t\tif (a.dslabel == dslabel && (a.route == route || a.route == '*' || a.route == '/**')) return a\n\t}\n}\n\n// check if a user is logged in, usually checked together with requiredAuth in termdb/config,\n// so access to unprotected ds/routes should not be affected by this check\nexport function isInSession(dslabel, route) {\n\tif (!dslabel) return false\n\tfor (const a of dsAuthOk) {\n\t\tif (a.dslabel == dslabel && (a.route == route || a.route == '/**')) return true\n\t}\n\t// no matching sessions found for this dslabel and route\n\treturn false\n}\n\n/* \n\tmayShowAuthUi() is the client-side \"gatekeeper\"\n\tmethod to check if a dataset requires credentials\n*/\n\nexport async function mayShowAuthUi(init, path, opts = {}) {\n\tconst ok = { status: 'ok' }\n\tif (!dsAuth || path.endsWith('jwt-status')) return ok\n\n\tconst body = JSON.parse(init.body || `{}`)\n\tconst params = (path.split('?')[1] || '').split('&').reduce((obj, kv) => {\n\t\tconst [key, value] = kv.split('=')\n\t\tobj[key] = value\n\t\treturn obj\n\t}, {})\n\tconst q = Object.assign({}, body, params)\n\tconst route = ((path.split('?')[0] || '').split('//')[1] || '').split('/').slice(1).join('/')\n\n\tfor (const a of dsAuth) {\n\t\tif (q.dslabel == a.dslabel && (a.route == '/**' || route == a.route)) {\n\t\t\tif (dsAuthOk.has(a)) return ok\n\t\t\t// dofetch should show the authUi only when all routes ('/**') are protected\n\t\t\t// otherwise, the authUi should be opened only when requesting data from a protected route,\n\t\t\t// that will be determined within feature code such as for 'termdb', 'burden', etc\n\t\t\telse if (a.route != '/**') return ok\n\t\t\telse if (a.type == 'basic') return await authUi(a.dslabel, a, opts)\n\t\t\telse if (a.type == 'jwt') {\n\t\t\t\t// assume the embedder/portal provides the login UI\n\t\t\t\t// so no need to do anything here\n\t\t\t} else if (a.type == 'forbidden') {\n\t\t\t\talert('Forbidden access')\n\t\t\t\t// don't do anything\n\t\t\t} else throw `unsupported dsAuth type='${a.type}'`\n\t\t}\n\t}\n\treturn ok\n}\n\n/*\n\tthis is the default login UI, may be overriden\n\tby an optional different form, for example if PP \n\tis embedded in another portal\n*/\nasync function defaultAuthUi(dslabel, auth, opts = {}) {\n\tconst mask = authUiHolder\n\t\t.append('div')\n\t\t.style('position', 'fixed')\n\t\t.style('top', 0)\n\t\t.style('left', 0)\n\t\t.style('height', '100%')\n\t\t.style('width', '100%')\n\t\t.style('margin', 0)\n\t\t.style('padding', '20px')\n\t\t.style('background-color', 'rgb(150,150,150)')\n\n\tconst form = mask.append('div').style('opacity', 1)\n\tform.append('div').html(`Restricted dataset '${dslabel}'`)\n\tform.append('span').html('Please enter password ')\n\n\tconst pwd = form.append('input').attr('type', 'password')\n\tpwd.node().focus()\n\n\tconst btn = form.append('button').html('Submit')\n\n\treturn new Promise((resolve, reject) => {\n\t\tfunction login() {\n\t\t\tfetch('/dslogin', {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\tauthorization: `Basic ${btoa(pwd.property('value'))}`\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify({ dslabel, route: auth.route, embedder: window.location.hostname })\n\t\t\t})\n\t\t\t\t.then(res => res.json())\n\t\t\t\t.then(res => {\n\t\t\t\t\tif (res.error) throw res.error\n\n\t\t\t\t\tmask.remove()\n\t\t\t\t\tdsAuthOk.add(auth)\n\t\t\t\t\tif (res.jwt) {\n\t\t\t\t\t\tsetTokenByDsRoute(dslabel, res.route, res.jwt)\n\t\t\t\t\t}\n\t\t\t\t\tif (!opts.setDomRefs) window.location.reload()\n\t\t\t\t\telse resolve(dslabel)\n\t\t\t\t})\n\t\t\t\t.catch(e => {\n\t\t\t\t\talert('login error: ' + e)\n\t\t\t\t\t// allow to reuse the login UI, do not hide or reject\n\t\t\t\t\t// mask.remove()\n\t\t\t\t\t// reject(e)\n\t\t\t\t})\n\t\t}\n\t\tbtn.on('click', login)\n\t\tpwd.on('change', login)\n\n\t\tif (opts.setDomRefs)\n\t\t\topts.setDomRefs({\n\t\t\t\tpwd,\n\t\t\t\tbtn,\n\t\t\t\tmask,\n\t\t\t\tauthUiHolder\n\t\t\t})\n\t})\n}\n", "import { deepFreeze, sleep } from '#rx'\nimport { encode, getDataName, processResponse } from '#shared/index.js'\nimport { mayShowAuthUi, mayAddJwtToRequest, includeEmbedder, setDsAuthOk } from './auth.js'\nexport * from './auth.js'\nexport { processFormData } from '#shared/index.js'\n\n/*\n\tpath: URL\n\targ: HTTP request body\n\topts: see dofetch2() opts argument\n*/\nexport function dofetch(path, arg, opts = null) {\n\tif (opts && typeof opts == 'object') {\n\t\tif (opts.serverData && typeof opts.serverData == 'object') {\n\t\t\tif (!dofetch.serverData) {\n\t\t\t\tdofetch.serverData = opts.serverData\n\t\t\t} else if (!opts.serverData) {\n\t\t\t\topts.serverData = dofetch.serverData\n\t\t\t}\n\t\t}\n\t\treturn dofetch2(\n\t\t\tpath,\n\t\t\t{\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'content-type': 'application/json'\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(arg)\n\t\t\t},\n\t\t\topts\n\t\t)\n\t} else {\n\t\t// path should be \"path\" but not \"/path\"\n\t\tif (path[0] == '/') {\n\t\t\tpath = path.slice(1)\n\t\t}\n\n\t\tconst jwt = sessionStorage.getItem('jwt')\n\t\tif (jwt) {\n\t\t\targ.jwt = jwt\n\t\t}\n\n\t\tlet url = path\n\t\tconst host = sessionStorage.getItem('hostURL') || window.testHost || ''\n\t\tif (host) {\n\t\t\t// hostURL can end with / or not, must use 'host/path'\n\t\t\tif (host.endsWith('/')) {\n\t\t\t\turl = host + path\n\t\t\t} else {\n\t\t\t\turl = host + '/' + path\n\t\t\t}\n\t\t}\n\n\t\treturn fetch(\n\t\t\tnew Request(url, {\n\t\t\t\tmethod: 'POST',\n\t\t\t\theaders: {\n\t\t\t\t\t'content-type': 'application/json'\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(arg)\n\t\t\t})\n\t\t).then(r => r.json())\n\t}\n}\n\nexport function dofetch2(path, init = {}, opts = {}) {\n\t/*\n\tpath\"\" string URL path\n\n\tinit{}\n\t\twill be supplied as the second argument to\n\t\tthe native fetch api, so the method, headers, body\n\t\tmay be optionally supplied in the \"init\" argument\n\t\tsee https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch\n\n\topts{}: all other optional arguments that are not related to the native fetch init argument\n\t\t.serverData{} an object for caching fetch Promise \n\t*/\n\t// path should be \"path\" but not \"/path\"\n\tif (path[0] == '/') {\n\t\tpath = path.slice(1)\n\t}\n\n\tlet url = path\n\tconst host = sessionStorage.getItem('hostURL') || window.testHost || ''\n\tif (host) {\n\t\t// hostURL can end with / or not, must use 'host/path'\n\t\tif (host.endsWith('/')) {\n\t\t\turl = host + path\n\t\t} else {\n\t\t\turl = host + '/' + path\n\t\t}\n\t}\n\n\t// create a reference to be able to detect body params, easier than\n\t// getting params once converted to a URL\n\tconst body = init.body || {}\n\t// this may convert a GET into a POST method, and\n\t// encode the payload either in the URL or request body\n\turl = mayAdjustRequest(url, init)\n\n\tif (!init.headers) {\n\t\tinit.headers = {}\n\t}\n\n\tif (!init.headers['content-type'] && init.body) {\n\t\tinit.headers['content-type'] = 'application/json'\n\t}\n\n\t// this jwt is site-wide for a particular PP host, not dslabel-specific\n\tconst jwt = sessionStorage.getItem('jwt')\n\tif (jwt) {\n\t\tinit.headers.authorization = 'Bearer ' + jwt\n\t}\n\n\t/*\n\t\tthis is client-side \"gatekeeper\", will not proceed\n\t\tto the usual request handling unless no credentials\n\t\tare required or a valid session has already been established\n\t*/\n\treturn mayShowAuthUi(init, url).then(async () => {\n\t\tif (!jwt) mayAddJwtToRequest(init, body, url)\n\t\tif (opts.serverData) {\n\t\t\treturn namedFetch(url, init, opts)\n\t\t} else {\n\t\t\treturn fetch(url, init).then(processResponse)\n\t\t}\n\t})\n}\n\n// key: opts.serverData object\n// value: array of cached dataNames\nconst optsServerDataNames = new WeakMap() // do not prevent garbage collection of unneeded opts.serverData in consumer code\n/*\n\tnamedFetch()\n\t- opts.serverData is expected to cache response by computed data name\n\t- preserves the caching expectations from \n\t\n\topts{}\n\tserverData: optional plain object to store response by dataName (string) keys\n\t\t- if a computed dataName is found as a key in this object, the cached response will be reused to fulfill the fetch\n\t\t- note that the plain object as storage is to support legacy dofetch code\n*/\nexport async function namedFetch(url, init, opts = {}) {\n\tif (!opts.serverData) throw `use ezFetch() from fetch-helpers if a fetched response is not meant to be cached`\n\tif (typeof opts.serverData != 'object') throw `opts.serverData is not an object`\n\n\tlet result\n\tconst dataName = await getDataName(url, init)\n\tif (opts.serverData[dataName]) {\n\t\tif (init.signal) {\n\t\t\t// should not reuse a response if the abortController.signal option has been aborted,\n\t\t\t// sleep() below allows sufficient time for the abort() to be called in rx AppApi.dispatch() or elsewhere,\n\t\t\t// otherwise the cached response copy will be returned too soon and cause race-condition issues;\n\t\t\t// this fix is tested in hierCluster.integration.spec.js 'avoid race condition - reused fetch response cache'\n\t\t\tawait sleep(0)\n\t\t\tif (init.signal.aborted) throw `stale sequenceId`\n\t\t}\n\t\tresult = structuredClone(opts.serverData[dataName])\n\t}\n\n\tif (!result || (typeof result != 'object' && !(result instanceof Promise))) {\n\t\tdelete opts.serverData[dataName]\n\t\tresult = undefined\n\t}\n\n\tif (!result) {\n\t\ttry {\n\t\t\tconst res = await fetch(url, init)\n\t\t\tresult = await processResponse(res)\n\t\t\t// in case this fetch was cancelled with AbortController.signal,\n\t\t\t// then the result may be another Promise instead of a data object,\n\t\t\t// as observed when rapidly changing the gdc cohort filter\n\t\t\tif (typeof result == 'object' && !(result instanceof Promise)) {\n\t\t\t\t// Ignore opts.cacheAs == 'Response':\n\t\t\t\t// - per https://developer.mozilla.org/en-US/docs/Web/API/Response/clone,\n\t\t\t\t// **should not use (.clone) to read very large bodies in parallel** at different speeds,\n\t\t\t\t// may also mean(?) to not persist/store the Response for a long time as is being done here\n\t\t\t\t//\n\t\t\t\t// - Make decoded caching as default, since storing as a\n\t\t\t\t// fetch Response interface can be problematic when a opts.signal is aborted\n\t\t\t\t// after being reused as an option to different fetch requests. Calling signal.abort()\n\t\t\t\t// will cause res.clone() to fail in all requests that reuse the signal.\n\t\t\t\t//\n\t\t\t\tdeepFreeze(result)\n\t\t\t\topts.serverData[dataName] = result // store as a deeply frozen object\n\t\t\t\t// should prefer to store results as a deeply frozen object instead of a Response interface,\n\t\t\t\t// but must not return the same object to be reused by different requests\n\t\t\t\tresult = structuredClone(result)\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tdelete opts.serverData[dataName]\n\t\t\tthrow e\n\t\t}\n\t}\n\n\t// manage opts.serverData cache size\n\tif (!optsServerDataNames.has(opts.serverData)) optsServerDataNames.set(opts.serverData, [])\n\tconst keys = optsServerDataNames.get(opts.serverData)\n\tconst i = keys.indexOf(dataName)\n\tif (i > 0) {\n\t\t// move this cached response as the most recent entry, by object key\n\t\tkeys.splice(i, 1)\n\t}\n\tkeys.unshift(dataName)\n\tconst maxKeys = 360\n\twhile (keys.length > maxKeys) {\n\t\tconst oldestDataKey = keys.pop() // delete the dataName from the tracking array\n\t\tdelete opts.serverData[oldestDataKey]\n\t}\n\treturn result\n}\n\nconst defaultServerDataCache = {}\n/*\n\tThis is a convenience function that sets a default serverData object\n\tand init.signal (AbortSignal) option to dofetch2(), instead of\n\trequiring consumer code to call dofetch2() directly with those options.\n\n\tpath: request url\n\tinit: native fetch init option\n\topts: dofetch2() 3rd argument, options that are not related to native fetch\t\n*/\nexport function dofetch3(path, init = {}, opts = {}) {\n\t// may set a default init.signal if missing;\n\t// The AbortSignal can cancel any request due to an app state change, such as\n\t// when the GDC cohort changes, thus aborting stale data requests that may\n\t// result in misleading rendered plots. This approach is more reliable than\n\t// requiring consumer code that use vocabApi methods to supply an\n\t// init.signal option, or for a vocabApi method to supply a default\n\t// init.signal.\n\t//\n\t// 'this' is a Vocab or TermdbVocab instance, where the Vocab constructor\n\t// sets a this.dofetch3 method that has access to this.app.getAbortSignal.\n\t// In Javascript, a function that's attached to an object and called as\n\t// object.method() will have its `this` context set to the object that it's\n\t// attached to.\n\tif (!init.signal && typeof this?.app?.getAbortSignal == 'function') init.signal = this.app.getAbortSignal()\n\n\topts.serverData = defaultServerDataCache\n\treturn dofetch2(path, init, opts)\n}\n\nexport function clearServerDataCache(opts = {}) {\n\tconst cache = opts?.serverData || defaultServerDataCache\n\tif (!cache) return\n\tfor (const k of Object.keys(cache)) {\n\t\tdelete cache[k]\n\t}\n}\n\nconst urlMaxLength = 2000 // if a GET url is longer than this, will be converted to POST of the same route\n\n/*\t\n\turl: full request url with host/path\n\n\tinit {}\n\t\tsame as the init argument for dofetch2\n\t\twill be supplied as the second argument to\n\t\tthe native fetch api, so the method, headers, body\n\t\tmay be optionally supplied in the \"init\" argument\n\t\tsee https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/fetch\n*/\nfunction mayAdjustRequest(url, init) {\n\tconst hostname = window.location.hostname\n\tconst method = (init.method && init.method.toUpperCase()) || 'GET'\n\tif (method == 'POST') {\n\t\t// assume a minimal URL path + parameters for a POST request\n\t\t// since the payload will be in the request body\n\t\tif (typeof init.body == 'string') init.body = JSON.parse(init.body)\n\t\tif (!init.body.embedder && includeEmbedder) init.body.embedder = hostname\n\t\tinit.body = JSON.stringify(init.body)\n\t\treturn url\n\t}\n\n\tif (method != 'GET' && method != 'DELETE' && method != 'PUT') {\n\t\tthrow `unsupported init.method='${method}': must be undefined or GET or POST or DELETE or PUT`\n\t}\n\n\tif (init.body) {\n\t\t// init.body should be an object, to be converted to either\n\t\t// (a) GET URL search parameter strings, OR\n\t\t// (b) POST body, JSON-encoded\n\t\tif (!init.body.embedder && includeEmbedder) init.body.embedder = hostname\n\n\t\tconst params = encode(init.body)\n\t\tif (!url.includes('?')) url += '?'\n\t\turl += params\n\t}\n\n\tif (!url.includes('embedder=') && includeEmbedder) {\n\t\tconst sep = url.includes('?') ? '&' : '?'\n\t\turl += `${sep}embedder=${hostname}`\n\t}\n\n\tif (url.length < urlMaxLength) {\n\t\t// the request body has been encoded as URL parameters, so can delete it\n\t\tif (init.body) delete init.body\n\t\treturn url\n\t}\n\n\t// convert to a POST request because the URL is too long\n\t// !!! NOTE: the requested server route must support both GET and POST, for example, app.all('/route', handler)\n\tinit.method = 'POST'\n\tconst [hostpath, query] = url.split('?') // must use url but not path\n\n\tif (init.body) {\n\t\t// assumes that all or most of the url string length were from parameters in the init.body argument to dofetch2\n\t\tinit.body = JSON.stringify(init.body)\n\t} else {\n\t\t// the url parameters were provided directly in the path argument to dofetch2()\n\t\tconst params = {}\n\t\t// decode URL search parameters, if available\n\t\tif (query)\n\t\t\t// TODO: !!! use urljson.decode here !!!\n\t\t\tquery.split('&').forEach(p => {\n\t\t\t\tconst [k, v] = p.split('=')\n\t\t\t\tconst decodedVal = decodeURIComponent(v)\n\t\t\t\ttry {\n\t\t\t\t\tparams[k] = JSON.parse(decodedVal)\n\t\t\t\t} catch {\n\t\t\t\t\tparams[k] = decodedVal\n\t\t\t\t}\n\t\t\t})\n\t\tif (!params.embedder && includeEmbedder) params.embedder = hostname\n\t\tinit.body = JSON.stringify(params)\n\t}\n\n\treturn hostpath\n}\n\n// see opts argument to setDsAuthOk\nexport function setAuth(opts) {\n\tsetDsAuthOk(opts, dofetch3)\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["mclasslabel2key", "i", "i", "dtsnvindel", "chr", "i", "i", "i", "mclassnonstandard", "tmp", "alt", "i", "hash", "i", "dofetch3", "optsServerDataNames", "i"]
7
+ }
@@ -0,0 +1,272 @@
1
+ import {
2
+ fillbar,
3
+ make_table_2col
4
+ } from "./chunk-OXJ2TWDO.js";
5
+
6
+ // src/block.mds.expressionstat.js
7
+ var color_noinfo = "#858585";
8
+ function init_config(cfg) {
9
+ if (!cfg.datatype) cfg.datatype = "FPKM";
10
+ if (!cfg.itemcolor) cfg.itemcolor = "green";
11
+ if (!cfg.ase) cfg.ase = {};
12
+ if (cfg.ase.qvalue == void 0) cfg.ase.qvalue = 0.05;
13
+ if (cfg.ase.meandelta_monoallelic == void 0) cfg.ase.meandelta_monoallelic = 0.3;
14
+ if (cfg.ase.asemarkernumber_biallelic == void 0) cfg.ase.asemarkernumber_biallelic = 0;
15
+ if (!cfg.ase.color_noinfo) cfg.ase.color_noinfo = color_noinfo;
16
+ if (!cfg.ase.color_uncertain) cfg.ase.color_uncertain = "#A8E0B5";
17
+ if (!cfg.ase.color_biallelic) cfg.ase.color_biallelic = "#40859C";
18
+ if (!cfg.ase.color_monoallelic) cfg.ase.color_monoallelic = "#d95f02";
19
+ if (!cfg.outlier) cfg.outlier = {};
20
+ if (cfg.outlier.pvalue_cutoff == void 0) cfg.outlier.pvalue_cutoff = 0.05;
21
+ if (cfg.outlier.rank_asehigh_cutoff == void 0) cfg.outlier.rank_asehigh_cutoff = 0.1;
22
+ if (!cfg.outlier.color_outlier) cfg.outlier.color_outlier = "#FF8875";
23
+ if (!cfg.outlier.color_outlier_asehigh) cfg.outlier.color_outlier_asehigh = "blue";
24
+ }
25
+ function measure(v, cfg) {
26
+ if (!cfg) return;
27
+ v.estat = {};
28
+ if (v.ase && cfg.ase) {
29
+ const qvalue = v.ase.qvalue || v.ase.geometricmean;
30
+ if (qvalue == void 0) {
31
+ v.estat.ase_noinfo = true;
32
+ } else if (qvalue <= cfg.ase.qvalue) {
33
+ if (v.ase.mean_delta >= cfg.ase.meandelta_monoallelic) {
34
+ v.estat.ase_monoallelic = true;
35
+ } else {
36
+ v.estat.ase_uncertain = true;
37
+ }
38
+ } else {
39
+ if (v.ase.ase_markers == cfg.ase.asemarkernumber_biallelic) {
40
+ v.estat.ase_biallelic = true;
41
+ } else {
42
+ v.estat.ase_uncertain = true;
43
+ }
44
+ }
45
+ } else {
46
+ v.estat.ase_noinfo = true;
47
+ }
48
+ if (v.outlier && cfg.outlier) {
49
+ if (v.outlier.test_whitelist) {
50
+ if (v.outlier.test_whitelist.pvalue <= cfg.outlier.pvalue_cutoff) {
51
+ v.estat.outlier = true;
52
+ } else {
53
+ if (v.estat.ase_monoallelic) {
54
+ if (Number.isInteger(v.outlier.test_whitelist.rank) && Number.isInteger(v.outlier.test_whitelist.size) && v.outlier.test_whitelist.rank / v.outlier.test_whitelist.size <= cfg.outlier.rank_asehigh_cutoff) {
55
+ v.estat.outlier_asehigh = true;
56
+ v.outlier.test_whitelist.asehigh = true;
57
+ }
58
+ }
59
+ }
60
+ } else if (v.outlier.test_biallelic) {
61
+ if (v.outlier.test_biallelic.pvalue <= cfg.outlier.pvalue_cutoff) {
62
+ v.estat.outlier = true;
63
+ } else {
64
+ if (v.estat.ase_monoallelic) {
65
+ if (Number.isInteger(v.outlier.test_biallelic.rank) && Number.isInteger(v.outlier.test_biallelic.size) && v.outlier.test_biallelic.rank / v.outlier.test_biallelic.size <= cfg.outlier.rank_asehigh_cutoff) {
66
+ v.estat.outlier_asehigh = true;
67
+ v.outlier.test_biallelic.asehigh = true;
68
+ }
69
+ }
70
+ }
71
+ } else if (v.outlier.test_entirecohort) {
72
+ if (v.outlier.test_entirecohort.pvalue <= cfg.outlier.pvalue_cutoff) {
73
+ v.estat.outlier = true;
74
+ } else {
75
+ if (v.estat.ase_monoallelic) {
76
+ if (Number.isInteger(v.outlier.test_entirecohort.rank) && Number.isInteger(v.outlier.test_entirecohort.size) && v.outlier.test_entirecohort.rank / v.outlier.test_entirecohort.size <= cfg.outlier.rank_asehigh_cutoff) {
77
+ v.estat.outlier_asehigh = true;
78
+ v.outlier.test_entirecohort.asehigh = true;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ }
84
+ }
85
+ function showsingleitem_table(v, cfg, table) {
86
+ if (!v.estat) return;
87
+ if (cfg.no_ase) return;
88
+ if (v.ase) {
89
+ const tr = table.append("tr");
90
+ tr.append("td").attr("colspan", 2).style("background", ase_color(v, cfg)).style("color", "white").html(
91
+ (v.estat.ase_monoallelic ? "Mono-allelic" : v.estat.ase_biallelic ? "Bi-allelic" : "ASE uncertain") + "<br>(allele-specific expression)"
92
+ );
93
+ const lst = [
94
+ {
95
+ k: "#SNPs heterozygous in DNA",
96
+ v: v.ase.markers
97
+ },
98
+ {
99
+ k: "#SNPs showing ASE in RNA",
100
+ v: v.ase.ase_markers
101
+ },
102
+ {
103
+ k: "Mean delta of ASE SNPs",
104
+ v: v.ase.mean_delta
105
+ }
106
+ ];
107
+ if (v.ase.qvalue) {
108
+ lst.push({
109
+ k: "Q-value",
110
+ v: v.ase.qvalue
111
+ });
112
+ } else if (v.ase.geometricmean) {
113
+ lst.push({
114
+ k: "Geometric mean of binomial P-values of ASE SNPs",
115
+ v: v.ase.geometricmean
116
+ });
117
+ }
118
+ const td = tr.append("td");
119
+ make_table_2col(td, lst);
120
+ } else {
121
+ const tr = table.append("tr");
122
+ tr.append("td").attr("colspan", 3).style("background", cfg.ase.color_noinfo).style("color", "white").text("No info on allele-specific expression");
123
+ }
124
+ if (v.snps && v.snps.length > 0) {
125
+ const hetsnp = v.snps.filter((i) => i.dnacount && i.dnacount.ishet);
126
+ if (hetsnp.length > 0) {
127
+ const lst = [];
128
+ for (const m of hetsnp) {
129
+ lst.push(
130
+ "<tr><td>" + m.chr + ":" + (m.pos + 1) + " " + m.ref + ">" + m.alt + "</td><td>" + fillbar(null, { f: m.dnacount.f }) + " " + m.dnacount.ref + "/" + m.dnacount.alt + "</td><td>" + (m.rnacount.nocoverage ? '<span style="font-size:.8em;opacity:.5">No coverage</span>' : fillbar(null, { f: m.rnacount.f }) + " " + m.rnacount.ref + "/" + m.rnacount.alt) + "</td><td>" + (m.rnacount.pvalue || "-") + "</td></tr>"
131
+ );
132
+ }
133
+ table.append("tr").append("td").attr("colspan", 3).html(
134
+ '<table style="margin-top:10px;border:solid 1px #ededed;border-spacing:5px;"><tr style="opacity:.5"><td>SNP</td><td>DNA</td><td>RNA</td><td>Binomial test P-value</td></tr>' + lst.join("") + "</table>"
135
+ );
136
+ }
137
+ }
138
+ if (v.outlier) {
139
+ if (v.outlier.test_whitelist) {
140
+ const tr = table.append("tr");
141
+ tr.append("td").attr("colspan", 2).text("Outlier (white list)");
142
+ const lst = [];
143
+ for (const k in v.outlier.test_whitelist) {
144
+ lst.push({ k, v: v.outlier.test_whitelist[k] });
145
+ }
146
+ const td = tr.append("td");
147
+ make_table_2col(td, lst);
148
+ if (v.outlier.test_whitelist.asehigh) {
149
+ td.append("div").style("background", cfg.outlier.color_outlier_asehigh).style("padding", "2px 10px").style("color", "white").text("ASE high");
150
+ }
151
+ }
152
+ if (v.outlier.test_biallelic) {
153
+ const tr = table.append("tr");
154
+ tr.append("td").attr("colspan", 2).text("Outlier (biallelic)");
155
+ const lst = [];
156
+ for (const k in v.outlier.test_biallelic) {
157
+ lst.push({ k, v: v.outlier.test_biallelic[k] });
158
+ }
159
+ const td = tr.append("td");
160
+ make_table_2col(td, lst);
161
+ if (v.outlier.test_biallelic.asehigh) {
162
+ td.append("div").style("background", cfg.outlier.color_outlier_asehigh).style("padding", "2px 10px").style("color", "white").text("ASE high");
163
+ }
164
+ }
165
+ if (v.outlier.test_entirecohort) {
166
+ const tr = table.append("tr");
167
+ tr.append("td").attr("colspan", 2).text("Outlier (all samples)");
168
+ const lst = [];
169
+ for (const k in v.outlier.test_entirecohort) {
170
+ lst.push({ k, v: v.outlier.test_entirecohort[k] });
171
+ }
172
+ const td = tr.append("td");
173
+ make_table_2col(td, lst);
174
+ if (v.outlier.test_entirecohort.asehigh) {
175
+ td.append("div").style("background", cfg.outlier.color_outlier_asehigh).style("padding", "2px 10px").style("color", "white").text("ASE high");
176
+ }
177
+ }
178
+ }
179
+ }
180
+ function ase_color(v, cfg) {
181
+ if (cfg.no_ase) return color_noinfo;
182
+ if (!cfg.ase) return color_noinfo;
183
+ if (!v.estat) return cfg.ase.color_noinfo;
184
+ if (v.estat.ase_monoallelic) return cfg.ase.color_monoallelic;
185
+ if (v.estat.ase_biallelic) return cfg.ase.color_biallelic;
186
+ if (v.estat.ase_uncertain) return cfg.ase.color_uncertain;
187
+ return cfg.ase.color_noinfo;
188
+ }
189
+ function ui_config(holder, cfg, tk, call) {
190
+ const indent = 30;
191
+ {
192
+ const row = holder.append("div").style("margin-bottom", "5px");
193
+ row.append("span").html("If " + (tk.checkrnabam ? "p-value geometric mean" : "Q-VALUE") + " &le;&nbsp;");
194
+ row.append("input").attr("type", "number").style("width", "50px").property("value", cfg.ase.qvalue).on("keyup", (event) => {
195
+ if (event.code != "Enter" && event.code != "NumpadEnter") return;
196
+ let v = Number.parseFloat(event.target.value);
197
+ if (!v || v <= 0) {
198
+ return;
199
+ }
200
+ if (cfg.ase.qvalue == v) {
201
+ return;
202
+ }
203
+ cfg.ase.qvalue = v;
204
+ call();
205
+ });
206
+ row.append("span").html("&nbsp;:");
207
+ }
208
+ {
209
+ const row = holder.append("div").style("margin", "0px 5px 5px " + indent + "px");
210
+ row.append("span").html("If MEAN_DELTA &ge;&nbsp;");
211
+ row.append("input").attr("type", "number").style("width", "50px").property("value", cfg.ase.meandelta_monoallelic).on("keyup", (event) => {
212
+ if (event.code != "Enter" && event.code != "NumpadEnter") return;
213
+ let v = Number.parseFloat(event.target.value);
214
+ if (!v || v <= 0) {
215
+ return;
216
+ }
217
+ if (cfg.ase.meandelta_monoallelic == v) {
218
+ return;
219
+ }
220
+ cfg.ase.meandelta_monoallelic = v;
221
+ call();
222
+ });
223
+ row.append("span").html("&nbsp;:&nbsp;");
224
+ }
225
+ holder.append("div").style("margin", "0px 5px 5px " + indent * 2 + "px").html(
226
+ 'Is <span style="background:' + cfg.ase.color_monoallelic + ';padding:1px 5px;color:white;">mono-allelic expression</span>'
227
+ );
228
+ holder.append("div").style("margin", "0px 5px 5px " + indent + "px").html("Else:");
229
+ holder.append("div").style("margin", "0px 5px 5px " + indent * 2 + "px").html(
230
+ 'Is <span style="background:' + cfg.ase.color_uncertain + ';padding:1px 5px;color:white;">ASE uncertain</span>'
231
+ );
232
+ holder.append("div").style("margin", "0px 5px 5px 0px").html("Else:");
233
+ {
234
+ const row = holder.append("div").style("margin", "0px 5px 5px " + indent + "px");
235
+ row.append("span").html("If number of ASE markers &le;&nbsp;");
236
+ row.append("input").attr("type", "number").style("width", "50px").property("value", cfg.ase.asemarkernumber_biallelic).on("keyup", (event) => {
237
+ if (event.code != "Enter" && event.code != "NumpadEnter") return;
238
+ let v = Number.parseInt(event.target.value);
239
+ if (v < 0) {
240
+ return;
241
+ }
242
+ if (cfg.ase.asemarkernumber_biallelic == v) {
243
+ return;
244
+ }
245
+ cfg.ase.asemarkernumber_biallelic = v;
246
+ call();
247
+ });
248
+ row.append("span").html("&nbsp;:&nbsp;");
249
+ }
250
+ holder.append("div").style("margin", "0px 5px 5px " + indent * 2 + "px").html(
251
+ 'Is <span style="background:' + cfg.ase.color_biallelic + ';padding:1px 5px;color:white;">bi-allelic expression</span>'
252
+ );
253
+ holder.append("div").style("margin", "0px 5px 5px " + indent + "px").html("Else:");
254
+ holder.append("div").style("margin", "0px 5px 5px " + indent * 2 + "px").html(
255
+ 'Is <span style="background:' + cfg.ase.color_uncertain + ';padding:1px 5px;color:white;">ASE uncertain</span>'
256
+ );
257
+ holder.append("div").style("margin", "10px").append("button").text("Default ASE parameters").on("click", () => {
258
+ cfg.ase.qvalue = 0.05;
259
+ cfg.ase.meandelta_monoallelic = 0.3;
260
+ cfg.ase.asemarkernumber_biallelic = 0;
261
+ call();
262
+ });
263
+ }
264
+
265
+ export {
266
+ init_config,
267
+ measure,
268
+ showsingleitem_table,
269
+ ase_color,
270
+ ui_config
271
+ };
272
+ //# sourceMappingURL=chunk-7VV43ICF.js.map