@molgenis/vip-report-template 3.1.3 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.travis.yml CHANGED
@@ -3,7 +3,7 @@ node_js:
3
3
  - lts/*
4
4
  branches:
5
5
  only:
6
- - master
6
+ - main
7
7
  - /^v\d+\.\d+(\.\d+)?(-\S*)?$/
8
8
  cache:
9
9
  npm: false
@@ -29,7 +29,7 @@ deploy:
29
29
  edge: true
30
30
  - provider: releases
31
31
  token:
32
- secure: kWHX+ZVa4I+CGHKDYbSnuIYY2DoTbWsaxPAhONb2Iv0AIJE7TPN/RLxW1czMozYOS302SEpSKuOI7JR7akoV691ZWJFbSuQXeEWsosRZdruraf3hKQVGCLSexXKjCypkI4DRWPYOP1o+iExF3Et+JToY4IIdpeLOq12LGJctmytycFn3WAaaIcvW7eIbngPPt701r2zgDiW06POx6Tizuc/nPrhVk0ldfSSE8/+tMIFvTG1P6q2+VQ6z0tVIcZh+Q/4oVRI9bDncdep1q6aJYnAOK0ck9SN+EHu9VLwVXLjyKPZiO4bSaC9TDn9JqyrLb70MbPnJex6VnSRtJoE0yQ0qmtQeU32wba34mazatp+ze68oM6/UMOApoYC7I/DI7QlAB4ZzjrCQGrCcXLAjNkDHfZSgRaKxzx9ncSmgn3gQnSY0EnnTgEWJlstG4znreKnnBJOWUc/RoWQXbjgEoH3C7X0lpdnIOPhpnqaLoUhhinYAu69kpIVSJHbc6yrHH9COUA8aHLjQysQXtA3la7cozy2jdpUyQoiF5M8Vm3IbqUHCIYXbB50N0+DS5wrzNZwH2kvdQnTGFBAiuygQajmYatbnSuUDOUyYzpSftKu4PFtacFCWZwKOLNzotHLUjmo6qBu4J/uXbziIm/8p18i6ZzfPp4V+9k2K5tThSrk=
32
+ secure: rQ19Q5xN6T+dJp4nDT+B4QREJNCc9HpOdipE7jcAP/PVD49kd3AI4joZD9nBn53a091rl7VHviqzyRvHyvBI00VWGhQOmbUqd45c5h4Vn0qUZno2Wl2M7iuUyllvovQHS0C34nLDSBkKhJv0ESit/xiyyVy8JxwO1mgFcLgsY0cKiupwbhepUw5V2S458pNLW9e4RxT7RIaQWUagYp+PJYRKAYn5AAxih65mv2+wSGQPzcOKJDRSTlDtLaCrfZCNJm/7f3iSAOm1CCA1HLxNO2ACFL4bhnghWPS7O6VyTv1POexgwbH0OQxHmO/pdm3geLrTWX7PaHaZNUB1CHoNXC5FE/J9sUSrjClfGL9qFo5WEkBAgH3a5lLwUoCWZecUJPnyeIEFieg5OSjnXFrTECWo5Ut4g5RtzOWQtTLEwOXQgDBtE3NLkH/DRayO9vliEs9/6CnZ8AndH17cj/GmB//2DTjOMr3yCQVuI5ZeANBAUoXAg/C6kQDTdP8oyLay7UBJnX1aEWWLf3Gwo0UBFE83YIuzqVzIvU8HYgFiPgjxFwKBmebS4qu1n9ils2X0nWaY9KZY4lIjzkxsgsZ2pqt1Z6a5AQsEqXv06Tjy6tB7/I9TG7vl4eTBBJBPsRKMNnTfkE6Zr3oHC+ihWIMolAqyaTriOh23Gs/xzEuK+T8=
33
33
  file: dist/vip-report-template.html
34
34
  on:
35
35
  tags: true
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- [![Build Status](https://app.travis-ci.com/molgenis/vip-report-template.svg?branch=master)](https://app.travis-ci.com/molgenis/vip-report-template)
1
+ [![Build Status](https://app.travis-ci.com/molgenis/vip-report-template.svg?branch=main)](https://app.travis-ci.com/molgenis/vip-report-template)
2
2
  # vip-report-template
3
3
  The default report template for the [VIP report generator](https://github.com/molgenis/vip-report). This template is a good default for any .vcf file with support for .vcf files annotated with [VIP](https://github.com/molgenis/vip).
4
4
  ## Usage
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@molgenis/vip-report-template",
3
- "version": "3.1.3",
3
+ "version": "4.0.0",
4
4
  "description": "Report Template for Variant Call Format (VCF) Report Generator",
5
5
  "scripts": {
6
6
  "build": "vite build",
@@ -15,32 +15,32 @@
15
15
  },
16
16
  "license": "LGPL-3.0",
17
17
  "devDependencies": {
18
- "@molgenis/vite-plugin-inline": "^1.0.8",
19
- "@typescript-eslint/eslint-plugin": "^5.35.1",
20
- "@typescript-eslint/parser": "^5.35.1",
21
- "@vitest/coverage-c8": "^0.22.1",
18
+ "@molgenis/vite-plugin-inline": "^1.0.9",
19
+ "@typescript-eslint/eslint-plugin": "^5.38.1",
20
+ "@typescript-eslint/parser": "^5.38.1",
21
+ "@vitest/coverage-c8": "^0.23.4",
22
22
  "bulma": "^0.9.4",
23
- "eslint": "^8.22.0",
23
+ "eslint": "^8.24.0",
24
24
  "eslint-config-prettier": "^8.5.0",
25
25
  "eslint-plugin-prettier": "^4.2.1",
26
- "eslint-plugin-solid": "^0.7.1",
26
+ "eslint-plugin-solid": "^0.7.3",
27
27
  "husky": "^8.0.1",
28
28
  "prettier": "^2.7.1",
29
- "sass": "^1.54.5",
30
- "typescript": "^4.7.4",
31
- "vite": "^3.0.9",
32
- "vite-plugin-solid": "^2.3.0",
33
- "vitest": "^0.22.1"
29
+ "sass": "^1.55.0",
30
+ "typescript": "^4.8.4",
31
+ "vite": "^3.1.3",
32
+ "vite-plugin-solid": "^2.3.9",
33
+ "vitest": "^0.23.4"
34
34
  },
35
35
  "dependencies": {
36
- "@fortawesome/fontawesome-svg-core": "^6.1.2",
37
- "@fortawesome/free-solid-svg-icons": "^6.1.2",
38
- "@molgenis/vip-report-api": "^3.5.4",
39
- "@molgenis/vip-report-vcf": "^1.2.3",
36
+ "@fortawesome/fontawesome-svg-core": "^6.2.0",
37
+ "@fortawesome/free-solid-svg-icons": "^6.2.0",
38
+ "@molgenis/vip-report-api": "^4.0.1",
39
+ "@molgenis/vip-report-vcf": "^1.2.7",
40
40
  "base64-js": "^1.5.1",
41
- "igv": "^2.13.1",
41
+ "igv": "^2.13.3",
42
42
  "solid-app-router": "^0.4.2",
43
- "solid-js": "^1.4.8"
43
+ "solid-js": "^1.5.6"
44
44
  },
45
45
  "lint-staged": {
46
46
  "src/**/*.{tsx,ts}": [
@@ -111,3 +111,9 @@ table.is-borderless td,
111
111
  .table.is-borderless th {
112
112
  border: 0;
113
113
  }
114
+
115
+ .igv-center-line {
116
+ transform: translateX(-50%) translateX(-1px) !important;
117
+ border-left-width: 2px !important;
118
+ border-right-width: 2px !important;
119
+ }
@@ -4,7 +4,7 @@ export const Anchor: ParentComponent<{
4
4
  href: string | null | undefined;
5
5
  }> = (props) => {
6
6
  return (
7
- <Show when={props.href} fallback={props.children}>
7
+ <Show when={props.href} fallback={props.children} keyed>
8
8
  {(href) => (
9
9
  <a href={href} target="_blank" rel="noopener noreferrer nofollow">
10
10
  {props.children}
@@ -1,9 +1,9 @@
1
1
  import { Component, onCleanup, onMount } from "solid-js";
2
- import igv from "igv";
2
+ import igv, { Browser } from "igv";
3
3
  import api from "../Api";
4
4
  import { fromByteArray } from "base64-js";
5
5
  import { writeVcf } from "@molgenis/vip-report-vcf/src/VcfWriter";
6
- import { ComposedQuery, Sample } from "@molgenis/vip-report-api/src/Api";
6
+ import { ComposedQuery, Cram, Sample } from "@molgenis/vip-report-api/src/Api";
7
7
 
8
8
  async function createVcf(contig: string, position: number, samples: Sample[]): Promise<Uint8Array> {
9
9
  const query: ComposedQuery = {
@@ -34,12 +34,10 @@ const createBrowserConfig = async (contig: string, position: number, samples: Sa
34
34
  api.getFastaGz(contig, position),
35
35
  createVcf(contig, position, samples),
36
36
  api.getGenesGz(),
37
- ...samples.map((sample) => api.getBam(sample.person.individualId)),
38
37
  ]);
39
38
  const fastaGz = data[0];
40
39
  const vcf = data[1];
41
40
  const genesGz = data[2];
42
- const bams = data.slice(3);
43
41
 
44
42
  if (fastaGz === null) {
45
43
  return null;
@@ -63,21 +61,6 @@ const createBrowserConfig = async (contig: string, position: number, samples: Sa
63
61
  url: "data:application/octet-stream;base64," + fromByteArray(vcf),
64
62
  });
65
63
 
66
- for (let i = 0; i < samples.length; ++i) {
67
- const bam = bams[i];
68
-
69
- if (bam !== null) {
70
- const sampleId = samples[i].person.individualId;
71
- tracks.push({
72
- order: order++,
73
- type: "alignment",
74
- format: "bam",
75
- name: `Alignment (${sampleId})`,
76
- url: "data:application/gzip;base64," + fromByteArray(bam),
77
- });
78
- }
79
- }
80
-
81
64
  const htsFileMetadata = await api.getHtsFileMetadata();
82
65
 
83
66
  return {
@@ -94,14 +77,37 @@ const createBrowserConfig = async (contig: string, position: number, samples: Sa
94
77
  };
95
78
  };
96
79
 
80
+ const updateBrowser = async (browser: Browser, samples: Sample[]): Promise<void> => {
81
+ const data = await Promise.all([...samples.map((sample) => api.getCram(sample.person.individualId))]);
82
+ const crams = data.slice(0);
83
+
84
+ for (let i = 0; i < samples.length; ++i) {
85
+ const cram = crams[i];
86
+
87
+ if (cram !== null) {
88
+ const sampleId = samples[i].person.individualId;
89
+ await browser.loadTrack({
90
+ type: "alignment",
91
+ format: "cram",
92
+ name: `Alignment (${sampleId})`,
93
+ url: "data:application/octet-stream;base64," + fromByteArray(cram.cram),
94
+ indexURL: "data:application/octet-stream;base64," + fromByteArray(cram.crai),
95
+ checkSequenceMD5: false, // disable verifying the MD5 checksum of the reference sequence underlying a slice
96
+ colorBy: "strand",
97
+ });
98
+ }
99
+ }
100
+ };
101
+
97
102
  export const GenomeBrowser: Component<{ contig: string; position: number; samples: Sample[] }> = (props) => {
98
103
  let divRef: HTMLDivElement;
99
- let browser: unknown;
104
+ let browser: Browser;
100
105
  onMount(() => {
101
106
  (async () => {
102
107
  const config = await createBrowserConfig(props.contig, props.position, props.samples);
103
108
  if (config !== null) {
104
109
  browser = await igv.createBrowser(divRef, config);
110
+ await updateBrowser(browser, props.samples);
105
111
  }
106
112
  })().catch((err) => console.error(err));
107
113
  });
@@ -76,7 +76,7 @@ export const SampleTable: Component<{
76
76
  <For each={props.samples}>
77
77
  {(sample) => (
78
78
  <tr>
79
- <td>{sample.id}</td>
79
+ <td>{sample.data.person.familyId}</td>
80
80
  <td>
81
81
  <Link href={`/samples/${sample.id}`}>{sample.data.person.individualId}</Link>
82
82
  </td>
@@ -40,7 +40,7 @@ export const Sort: Component<{
40
40
  <div class="field">
41
41
  <div class="select">
42
42
  <select onChange={onSortChange}>
43
- <option value="-1" />
43
+ <option value="-1">Position</option>
44
44
  <For each={sortableOptions()}>
45
45
  {(option, i) => (
46
46
  <option value={i()} selected={option.selected === true}>
@@ -54,7 +54,7 @@ export const FilterCategorical: Component<
54
54
  <Checkbox
55
55
  value={category}
56
56
  label={props.labels ? props.labels[category] : category}
57
- checked={props.query && (props.query.args as string[]).includes(category)}
57
+ checked={props.query && (props.query.args as (string | null)[]).includes(category)}
58
58
  onChange={onChange}
59
59
  />
60
60
  </div>
@@ -64,7 +64,7 @@ export const FilterCategorical: Component<
64
64
  <Checkbox
65
65
  value={nullValue}
66
66
  label="No value"
67
- checked={props.query && (props.query.args as string[]).includes(nullValue)}
67
+ checked={props.query && (props.query.args as (string | null)[]).includes(null)}
68
68
  onChange={onChange}
69
69
  />
70
70
  )}
@@ -8,6 +8,7 @@ import { Hgvs } from "./info/Hgvs";
8
8
  import { ClinVar } from "./info/ClinVar";
9
9
  import { GnomAD } from "./info/GnomAD";
10
10
  import { isAnyCsqInfo, isCsqInfo } from "../../utils/csqUtils";
11
+ import { Vkgl } from "./info/Vkgl";
11
12
 
12
13
  export const Info: Component<{
13
14
  info: FieldValue;
@@ -34,6 +35,9 @@ export const Info: Component<{
34
35
  <Match when={isCsqInfo(props.infoMeta, "clinVar_CLNSIG")}>
35
36
  <ClinVar {...props} />
36
37
  </Match>
38
+ <Match when={isCsqInfo(props.infoMeta, "VKGL_CL")}>
39
+ <Vkgl {...props} />
40
+ </Match>
37
41
  </Switch>
38
42
  );
39
43
  };
@@ -70,7 +70,7 @@ export const ClinVar: Component<FieldProps> = (props) => {
70
70
  };
71
71
 
72
72
  return (
73
- <Show when={label()}>
73
+ <Show when={label()} keyed>
74
74
  {(label) => (
75
75
  <Anchor href={href()}>
76
76
  {description() ? <Abbr title={description()!} value={label} /> : <span>{label}</span>}
@@ -38,7 +38,7 @@ export const Gene: Component<FieldProps> = (props) => {
38
38
  };
39
39
 
40
40
  return (
41
- <Show when={symbol()}>
41
+ <Show when={symbol()} keyed>
42
42
  {(symbol) => (
43
43
  <>
44
44
  <Anchor href={href()}>
@@ -34,9 +34,9 @@ export const GnomAD: Component<FieldProps> = (props) => {
34
34
  };
35
35
 
36
36
  return (
37
- <Show when={af()}>
37
+ <Show when={af()} keyed>
38
38
  {(af) => (
39
- <Show when={href()} fallback={<FieldValueFloat value={af} />}>
39
+ <Show when={href()} fallback={<FieldValueFloat value={af} />} keyed>
40
40
  {(href) => (
41
41
  <Anchor href={href}>
42
42
  <FieldValueFloat value={af} />
@@ -16,5 +16,9 @@ function abbreviate(notation: string): string {
16
16
 
17
17
  export const Hgvs: Component<FieldProps> = (props) => {
18
18
  const value = () => props.info.value as ValueString;
19
- return <Show when={value()}>{(value) => <Abbr title={value} value={abbreviate(value)} />}</Show>;
19
+ return (
20
+ <Show when={value()} keyed>
21
+ {(value) => <Abbr title={value} value={abbreviate(value)} />}
22
+ </Show>
23
+ );
20
24
  };
@@ -0,0 +1,42 @@
1
+ import { Component, Show } from "solid-js";
2
+ import { Abbr } from "../../Abbr";
3
+ import { FieldProps } from "../field/Field";
4
+ import { ValueString } from "@molgenis/vip-report-vcf/src/ValueParser";
5
+ import { getCsqInfo, getCsqInfoIndex } from "../../../utils/csqUtils";
6
+
7
+ export const Vkgl: Component<FieldProps> = (props) => {
8
+ const value = () => props.info.value as ValueString;
9
+ const title = () => {
10
+ if (value() === null) return undefined;
11
+
12
+ const labs: { [key: string]: string } = {
13
+ VKGL_AMC: "AMC",
14
+ VKGL_ERASMUS: "Erasmus",
15
+ VKGL_LUMC: "LUMC",
16
+ VKGL_NKI: "NKI",
17
+ VKGL_RADBOUD_MUMC: "Radboud/MUMC",
18
+ VKGL_UMCG: "UMCG",
19
+ VKGL_UMCU: "UMCU",
20
+ VKGL_VUMC: "VUMC",
21
+ };
22
+
23
+ const descriptions = [];
24
+ for (const key in labs) {
25
+ const fieldIndex = getCsqInfoIndex(props.infoMeta, key);
26
+ if (fieldIndex !== -1) {
27
+ const value = getCsqInfo(props.info, fieldIndex) as ValueString;
28
+ if (value !== null) descriptions.push(`${labs[key]}:${value}`);
29
+ }
30
+ }
31
+ return descriptions.length > 0 ? descriptions.join(", ") : null;
32
+ };
33
+ return (
34
+ <Show when={value()} keyed>
35
+ {(value) => (
36
+ <Show when={title()} fallback={<span>{value}</span>} keyed>
37
+ {(title) => <Abbr title={title} value={value} />}
38
+ </Show>
39
+ )}
40
+ </Show>
41
+ );
42
+ };
package/src/igv.d.ts CHANGED
@@ -1,4 +1,8 @@
1
1
  declare module "igv" {
2
- export function createBrowser(div: HTMLDivElement, config: unknown): unknown;
3
- export function removeBrowser(browser: unknown): void;
2
+ export class Browser {
3
+ loadTrack(config: unknown): Promise<unknown>;
4
+ }
5
+
6
+ export function createBrowser(div: HTMLDivElement, config: unknown): Promise<Browser>;
7
+ export function removeBrowser(browser: Browser): void;
4
8
  }
@@ -1,4 +1,5 @@
1
- import bamUrl from "./alignment.bam.blob";
1
+ import cramUrl from "./alignment.cram.blob";
2
+ import craiUrl from "./alignment.cram.crai.blob";
2
3
  import decisionTreeJson from "./decisionTree.json";
3
4
  import fastaUrl1_10042288_10042788 from "./fasta/1-10042288-10042788.fasta.gz.blob";
4
5
  import fastaUrl1_16375333_16375833 from "./fasta/1-16375333-16375833.fasta.gz.blob";
@@ -47,7 +48,8 @@ import vcfUrlSamples100 from "./vcf/samples_100.vcf.blob";
47
48
  import { fetchAsBytes } from "../utils";
48
49
  import { DecisionTree } from "@molgenis/vip-report-api/src/Api";
49
50
 
50
- export const bam = await fetchAsBytes(bamUrl as string);
51
+ export const cram = await fetchAsBytes(cramUrl as string);
52
+ export const crai = await fetchAsBytes(craiUrl as string);
51
53
 
52
54
  export const decisionTree: DecisionTree = decisionTreeJson as DecisionTree;
53
55
 
@@ -29,6 +29,9 @@
29
29
  ##INFO=<ID=gnomAD,Number=.,Type=String,Description="/groups/solve-rd/tmp10/projects/vip/git/vip/resources/GRCh37/gnomad.total.r2.1.1.sites.stripped.vcf.gz (exact)">
30
30
  ##INFO=<ID=gnomAD_AF,Number=.,Type=String,Description="AF field from /groups/solve-rd/tmp10/projects/vip/git/vip/resources/GRCh37/gnomad.total.r2.1.1.sites.stripped.vcf.gz">
31
31
  ##INFO=<ID=gnomAD_HN,Number=.,Type=String,Description="HN field from /groups/solve-rd/tmp10/projects/vip/git/vip/resources/GRCh37/gnomad.total.r2.1.1.sites.stripped.vcf.gz">
32
+ ##INFO=<ID=DP,Number=1,Type=Integer,Description="Approximate read depth; some reads may have been filtered">
33
+ ##INFO=<ID=END,Number=1,Type=Integer,Description="End position of the variant described in this record">
34
+ ##INFO=<ID=VIPC_S,Number=.,Type=String,Description="VIP decision tree classification (samples).">
32
35
  ##IncompletePenetrance=Boolean indicating if the gene is known for incomplete penetrance.
33
36
  ##InheritanceModesGene=List of inheritance modes for the gene
34
37
  ##SpliceAI_pred_DP_AG=SpliceAI predicted effect on splicing. Delta position for acceptor gain
@@ -44,7 +47,7 @@
44
47
  ##VIPC=VIP decision tree classification
45
48
  ##VIPL=VIP decision tree labels (ampersand separated)
46
49
  ##VIPP=VIP decision tree path (ampersand separated)
47
- ##VIP_Command=nextflow run ./main.nf --input /groups/solve-rd/tmp10/bcharbon/testdata/testdata_b37.vcf --output /groups/solve-rd/tmp10/projects/vip/testdata_out --keep --pedigree /groups/solve-rd/tmp10/bcharbon/example.ped --probands Patient --phenotypes 'HP:0000951;HP:0003124' --assembly GRCh37
50
+ ##VIP_Command=nextflow run ./main.nf --input /groups/solve-rd/tmp10/bcharbon/testdata/testdata_b37.vcf --output /groups/solve-rd/tmp10/projects/vip/testdata_out --keep --pedigree /groups/solve-rd/tmp10/bcharbon/example.ped --probands Patient --phenotypes 'HP:0000951;HP:0003124' --assembly GRCh37 --param_with_equals_sign x=y
48
51
  ##VIP_Version=4.3.0
49
52
  ##VIP_treeCommand=--input testdata_b37_chunk0_annotated.vcf.gz --config /groups/solve-rd/tmp10/projects/vip/git/vip/resources/decision_tree.json --labels 0 --path 0 --output testdata_b37_chunk0_classified.vcf.gz
50
53
  ##VIP_treeVersion=3.0.0
@@ -76,6 +79,7 @@
76
79
  ##contig=<ID=MT,length=16569,assembly=b37>
77
80
  ##fileDate=20200320
78
81
  #CHROM POS ID REF ALT QUAL FILTER INFO FORMAT Patient Father Mother Sister Nephew Unrelated
82
+ 1 1701 . T C . PASS CSQ=C|intergenic_variant|MODIFIER||||||||||||||||1||||1||||||||||||||||||||||||||||||||||||||||||||P|exip_p;DP=131 GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
79
83
  1 10042538 . C T . PASS CSQ=T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_001297778.1|protein_coding|5/5||NM_001297778.1:c.619C>Tblablablablablabla|NP_001284707.1:p.Arg207Trp|778/3796|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1||1|EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.16572298|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|downstream_gene_variant|MODIFIER|NMNAT1|64802|Transcript|NM_001297779.2|protein_coding||||||||||rs142968179&CM127756|1|714|1|||EntrezGene||||||||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.033541594|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp|,T|missense_variant|MODERATE|NMNAT1|64802|Transcript|NM_022787.4|protein_coding|5/5||NM_022787.4:c.619C>T|NP_073624.2:p.Arg207Trp|716/3734|619/840|207/279|R/W|Cgg/Tgg|rs142968179&CM127756|1||1|||EntrezGene|||||0.04|0.08||pathogenic||1&1|26103963&22842229&22842230|||||||0|-36|-16|17|0.00|0.00|0.00|0.00|NMNAT1|VUS|0.14321531|||AR|LP||||1:10042538-10042538|3.88948e-05|0|37133|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
80
84
  1 16375583 . GA G . PASS CSQ=-|intron_variant|MODIFIER|CLCNKB|1188|Transcript|NM_000085.5|protein_coding||7/19|NM_000085.5:c.656-31del|||||||rs751608665|1||1||1|EntrezGene||||||||uncertain_significance&pathogenic||1||||||||20|45|-14|-45|0.05|0.00|0.00|0.00|CLCNKB|VUS|0.032507|HP:0000951||AR|LP||||1:16375584-16375585|0.000548455|0|638508|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp|,-|frameshift_variant|HIGH|CLCNKB|1188|Transcript|NM_001165945.2|protein_coding|1/13||NM_001165945.2:c.118del|NP_001159417.2:p.Arg40GlyfsTer4|328/2174|118/1554|40/517|R/X|Agg/gg|rs751608665|1||1|||EntrezGene||||||||uncertain_significance&pathogenic||1||||||||20|45|-14|-45|0.05|0.00|0.00|0.00|CLCNKB|VUS|0.9770811|HP:0000951||AR|LP||||1:16375584-16375585|0.000548455|0|638508|Conflicting_interpretations_of_pathogenicity||criteria_provided&_conflicting_interpretations|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:25,25:50:AR:1_16376412_G_A,1_16376412_G_N:0:1188:1:AR_C 1|0:25,25:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
81
85
  1 16376412 n_alt G N . PASS CSQ=N|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_000085.5|protein_coding||10/19||||||||CS1211892&CS971662|1||1||1|EntrezGene||||||||||1&1|||||||||||||||||VUS|0.373989|HP:0000951||AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,N|splice_donor_variant|HIGH|CLCNKB|1188|Transcript|NM_001165945.2|protein_coding||3/12||||||||CS1211892&CS971662|1||1|||EntrezGene||||||||||1&1|||||||||||||||||VUS|0.373989|HP:0000951||AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM:VIS 1|0:5,45:50:AR,AD:1_16376412_G_A,1_16375583_GA_G:1:1188:1:AR_C 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.:.
@@ -83,6 +87,8 @@
83
87
  1 17349219 g_ref G A . PASS CSQ=A|missense_variant|MODERATE|SDHB|6390|Transcript|NM_003000.3|protein_coding|7/8||NM_003000.3:c.649C>T|NP_002991.2:p.Arg217Cys|662/1015|649/843|217/280|R/C|Cgc/Tgc|rs200245469&CM094752&CM1210440&COSV64965760|1||-1||1|EntrezGene|||||0|1||likely_pathogenic|0&0&0&1|1&1&1&1||||||||28|6|6|5|0.00|0.00|0.00|0.00|SDHB|VUS|0.89070946|HP:0000951&HP:0003124||AD&AR|LP|||||||183735|Pathogenic/Likely_pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:6390:1 1|0:45,5:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
84
88
  1 17355094 . C T . PASS CSQ=T|splice_donor_variant|HIGH|SDHB|6390|Transcript|NM_003000.3|protein_coding||4/7|NM_003000.3:c.423+1G>A|||||||rs398122805&CS056774&CS062098&COSV64965540|1||-1||1|EntrezGene||||||||pathogenic|0&0&0&1|1&1&1&1|21348866&17667967&17804857&16405730&21565294&15383933|||||||-49|12|26|1|0.00|0.00|0.14|0.97|SDHB|VUS|0.9641474|HP:0003124||AD&AR|LP||||1:17355094-17355094|1.19344e-05|0|29896|Pathogenic||criteria_provided&_multiple_submitters&_no_conflicts|LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|0:5,45:50:AD:.:1:6390:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
85
89
  1 152520788 symbolic1 A <DEL> . PASS CSQ=deletion|transcript_ablation|HIGH|LCE3D|84648|Transcript|NM_032563.2|protein_coding|||||||||||1||-1||1|EntrezGene|||||||||||||||||||||||||||||||||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,deletion|transcript_ablation|HIGH|LCE3E|353145|Transcript|NM_178435.4|protein_coding|||||||||||1||-1|||EntrezGene|||||||||||||||||||||||||||||||||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00701519957||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00905971885||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00522719201||||||||||||1||||||||||||||||||||||||||||||||||||||||||||||||VUS|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_vus|;SVLEN=-49314;SVTYPE=DEL GT:AD:DP:VI:VIC:VID:VIM 1|1:0,50:50:AR:.:1:0 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 0|0:50,0:50:.:.:.:. 1|0:25,25:50:.:.:.:.
90
+ 2 321682 . T <DEL> . PASS CSQ=deletion|non_coding_transcript_exon_variant&intron_variant&feature_truncation|MODIFIER|LINC01865|105373350|Transcript|NR_146953.1|lncRNA|4/3|3/3|||685-?/2100||||||1||1||1|EntrezGene|||||||||||||||||||||||||||||||||3|1A_(+0.00)%3B3A_(1_gene%2C_+0.00)%3B5F_(+0.00)|0||||||||P|exip_p;END=321887;SVLEN=-205;SVTYPE=DEL GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
91
+ 2 6693415 . T <DEL> . PASS CSQ=deletion|regulatory_region_ablation&regulatory_region_variant|MODIFIER|||RegulatoryFeature|ENSR00001914803||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524064657||||||||||||1||||1||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524052275||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524121752||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524688093||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00525576244||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524108762||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524259723||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524175972||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524198224||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524134566||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00769910345||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524344258||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524278495||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524312437||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524083163||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524770333||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00829572188||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524396085||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00909212078||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524214908||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524150456||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524239498||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00524095954||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|TFBS_ablation&TF_binding_site_variant|MODERATE|||MotifFeature|ENSM00530094654||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p,deletion|intergenic_variant|MODIFIER||||||||||||||||1||||||||||||||||||||||||||||||||||||||3|1B_(-0.60)%3B3A_(0_gene%2C_+0.00)%3B5F_(+0.00)|-0.6||||||||P|exip_p|;END=6707844;SVLEN=-14429;SVTYPE=DEL GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:64802:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
86
92
  4 106320294 . G A . PASS CSQ=A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_006903.4|protein_coding|7/11||NM_006903.4:c.596C>T|NP_008834.3:p.Pro199Leu|616/1586|596/918|199/305|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.985||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.8097311|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176866.2|protein_coding|4/8||NM_176866.2:c.377C>T|NP_789842.2:p.Pro126Leu|397/1367|377/699|126/232|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.992||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.7550335|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176867.3|protein_coding|2/6||NM_176867.3:c.185C>T|NP_789843.2:p.Pro62Leu|205/1175|185/507|62/168|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1|||EntrezGene|||||0|0.995||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.8145551|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|missense_variant|MODERATE|PPA2|27068|Transcript|NM_176869.3|protein_coding|8/12||NM_176869.3:c.683C>T|NP_789845.1:p.Pro228Leu|695/1665|683/1005|228/334|P/L|cCg/cTg|rs138215926&CM1610192&COSV58994362|1||-1||1|EntrezGene|||||0|0.993||pathogenic|0&0&1|1&1&1|27523597|||||||-34|27|-2|-43|0.00|0.00|0.00|0.00|PPA2|VUS|0.76490384|||AR|LP||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&exit_lp|,A|regulatory_region_variant|MODIFIER|||RegulatoryFeature|ENSR00001994744|promoter_flanking_region||||||||||rs138215926&CM1610192&COSV58994362|1|||||||||||||pathogenic|0&0&1|1&1&1|27523597|||||||||||||||||||||||||4:106320294-106320294|0.000211803|0|372226|Likely_pathogenic||criteria_provided&_single_submitter|LP|filter&vkgl&clinVar&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,50:50:AR:.:1:27068:1 1|0:25,25:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 1|1:0,50:50:.:.:.:.:.
87
93
  9 107546633 . AAAGAT A . PASS CSQ=-|frameshift_variant|HIGH|ABCA1|19|Transcript|NM_005502.4|protein_coding|50/50||NM_005502.4:c.6744_6748del|NP_005493.2:p.Phe2250ThrfsTer3|7057-7061/10408|6744-6748/6786|2248-2250/2261|TSF/TX|acATCTTtt/actt||1||-1||1|EntrezGene|||||||||||||||||||||||||||VUS|0.9823047|HP:0000951||AD&AR||||||||||||LP|filter&vkgl&clinVar&gnomad&effect&spliceAI&annotSV&impact&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|1:0,10:10:AR:.:0:19:1 0|1:1,49:50:.:.:.:.:. 1|0:0,50:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
88
94
  9 107584864 . AC A . PASS CSQ=-|frameshift_variant|HIGH|ABCA1|19|Transcript|NM_005502.4|protein_coding|19/50||NM_005502.4:c.2740del|NP_005493.2:p.Val914TrpfsTer8|3053/10408|2740/6786|914/2261|V/X|Gtg/tg||1||-1||1|EntrezGene||||||||||||||||||33|-42|28|1|0.00|0.00|0.10|0.00|ABCA1|VUS|0.98804027|HP:0000951||AD&AR|LP|||||||||||LP|filter&vkgl&exit_lp| GT:AD:DP:VI:VIC:VID:VIG:VIM 1|0:25,25:50:AD:.:1:19:1 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:. 0|0:50,0:50:.:.:.:.:.
@@ -1,4 +1,5 @@
1
- import bamUrl from "./alignment.bam.blob";
1
+ import cramUrl from "./alignment.cram.blob";
2
+ import craiUrl from "./alignment.cram.crai.blob";
2
3
  import fastaUrl_chr1_9982230_9982730 from "./fasta/chr1-9982230-9982730.fasta.gz.blob";
3
4
  import fastaUrl_chr1_16049667_16050167 from "./fasta/chr1-16049667-16050167.fasta.gz.blob";
4
5
  import fastaUrl_chr1_17022474_17022974 from "./fasta/chr1-17022474-17022974.fasta.gz.blob";
@@ -36,7 +37,8 @@ import { fetchAsBytes } from "../utils";
36
37
  import decisionTreeJson from "./decisionTree.json";
37
38
  import { DecisionTree } from "@molgenis/vip-report-api/src/Api";
38
39
 
39
- export const bam = await fetchAsBytes(bamUrl as string);
40
+ export const cram = await fetchAsBytes(cramUrl as string);
41
+ export const crai = await fetchAsBytes(craiUrl as string);
40
42
 
41
43
  export const decisionTree: DecisionTree = decisionTreeJson as DecisionTree;
42
44
 
@@ -3,6 +3,7 @@ import { parseVcf } from "@molgenis/vip-report-vcf/src/VcfParser";
3
3
  import {
4
4
  Api,
5
5
  AppMetadata,
6
+ Cram,
6
7
  DecisionTree,
7
8
  HtsFileMetadata,
8
9
  Item,
@@ -14,7 +15,8 @@ import {
14
15
  } from "@molgenis/vip-report-api/src/Api";
15
16
  import { samples1, samples100 } from "./static";
16
17
  import {
17
- bam as bamGRCh37,
18
+ cram as cramGRCh37,
19
+ crai as craiGRCh37,
18
20
  decisionTree as decisionTreeGRCh37,
19
21
  fastaGz as fastaGzGRCh37,
20
22
  genesGz as genesGzGRCh37,
@@ -26,7 +28,8 @@ import {
26
28
  vcfSamples100 as vcfSamples100GRCh37,
27
29
  } from "./GRCh37/static";
28
30
  import {
29
- bam as bamGRCh38,
31
+ cram as cramGRCh38,
32
+ crai as craiGRCh38,
30
33
  decisionTree as decisionTreeGRCh38,
31
34
  fastaGz as fastaGzGRCh38,
32
35
  genesGz as genesGzGRCh38,
@@ -59,8 +62,8 @@ export class MockApiClient implements Api {
59
62
  return this.apiClient.getGenesGz();
60
63
  }
61
64
 
62
- getBam(sampleId: string): Promise<Uint8Array | null> {
63
- return this.apiClient.getBam(sampleId);
65
+ getCram(sampleId: string): Promise<Cram | null> {
66
+ return this.apiClient.getCram(sampleId);
64
67
  }
65
68
 
66
69
  getDecisionTree(): Promise<DecisionTree | null> {
@@ -130,8 +133,11 @@ export class MockApiClient implements Api {
130
133
  vcf: vcfFamilyGRCh37,
131
134
  fastaGz: fastaGzGRCh37,
132
135
  genesGz: genesGzGRCh37,
133
- bam: {
134
- Patient: bamGRCh37,
136
+ cram: {
137
+ Patient: {
138
+ cram: cramGRCh37,
139
+ crai: craiGRCh37,
140
+ },
135
141
  },
136
142
  },
137
143
  decisionTree: decisionTreeGRCh37,
@@ -155,8 +161,11 @@ export class MockApiClient implements Api {
155
161
  vcf: vcfNoVepGRCh37,
156
162
  fastaGz: fastaGzGRCh37,
157
163
  genesGz: genesGzGRCh37,
158
- bam: {
159
- Patient: bamGRCh37,
164
+ cram: {
165
+ Patient: {
166
+ cram: cramGRCh37,
167
+ crai: craiGRCh37,
168
+ },
160
169
  },
161
170
  },
162
171
  decisionTree: decisionTreeGRCh37,
@@ -180,8 +189,11 @@ export class MockApiClient implements Api {
180
189
  vcf: vcfSamples1GRCh37,
181
190
  fastaGz: fastaGzGRCh37,
182
191
  genesGz: genesGzGRCh37,
183
- bam: {
184
- SAMPLE1: bamGRCh37,
192
+ cram: {
193
+ SAMPLE1: {
194
+ cram: cramGRCh37,
195
+ crai: craiGRCh37,
196
+ },
185
197
  },
186
198
  },
187
199
  decisionTree: decisionTreeGRCh37,
@@ -249,8 +261,11 @@ export class MockApiClient implements Api {
249
261
  vcf: vcfFamilyGRCh38,
250
262
  fastaGz: fastaGzGRCh38,
251
263
  genesGz: genesGzGRCh38,
252
- bam: {
253
- Patient: bamGRCh38,
264
+ cram: {
265
+ Patient: {
266
+ cram: cramGRCh38,
267
+ crai: craiGRCh38,
268
+ },
254
269
  },
255
270
  },
256
271
  decisionTree: decisionTreeGRCh38,
@@ -274,8 +289,11 @@ export class MockApiClient implements Api {
274
289
  vcf: vcfNoVepGRCh38,
275
290
  fastaGz: fastaGzGRCh38,
276
291
  genesGz: genesGzGRCh38,
277
- bam: {
278
- Patient: bamGRCh38,
292
+ cram: {
293
+ Patient: {
294
+ cram: cramGRCh38,
295
+ crai: craiGRCh38,
296
+ },
279
297
  },
280
298
  },
281
299
  decisionTree: decisionTreeGRCh38,
@@ -299,8 +317,11 @@ export class MockApiClient implements Api {
299
317
  vcf: vcfSamples1GRCh38,
300
318
  fastaGz: fastaGzGRCh38,
301
319
  genesGz: genesGzGRCh38,
302
- bam: {
303
- SAMPLE1: bamGRCh38,
320
+ cram: {
321
+ SAMPLE1: {
322
+ cram: cramGRCh38,
323
+ crai: craiGRCh38,
324
+ },
304
325
  },
305
326
  },
306
327
  decisionTree: decisionTreeGRCh38,
@@ -21,18 +21,12 @@ export function getRecordSamples(record: Record, sample: Sample, pedigreeSamples
21
21
  return [record.s[sample.index], ...pedigreeSamples.map((pedigreeSample) => record.s[pedigreeSample.index])];
22
22
  }
23
23
 
24
- export function getHeaderValue(key: string, lines: string[]) {
25
- let value = null;
26
- lines.forEach((line: string) => {
27
- if (line.startsWith(`##${key}`)) {
28
- const splitted: string[] = line.split("=");
29
- if (splitted.length === 2) {
30
- value = splitted[1];
31
- return;
32
- } else {
33
- throw new Error("Invalid header format for key");
34
- }
24
+ export function getHeaderValue(key: string, lines: string[]): string | null {
25
+ const token = `##${key}=`;
26
+ for (const line of lines) {
27
+ if (line.startsWith(token)) {
28
+ return line.substring(token.length);
35
29
  }
36
- });
37
- return value;
30
+ }
31
+ return null;
38
32
  }
@@ -210,14 +210,14 @@ export const SampleVariants: Component<{
210
210
  {infoFields().length > 0 && <Sort options={sortOptions()} onChange={onSortChange} onClear={onSortClear} />}
211
211
  </div>
212
212
  <div class="column is-4">
213
- <Show when={records()} fallback={<Loader />}>
213
+ <Show when={records()} fallback={<Loader />} keyed>
214
214
  {(records) => <Pager page={records.page} onPageChange={onPageChange} />}
215
215
  </Show>
216
216
  </div>
217
217
  <div class="column">
218
218
  <div class="columns">
219
219
  <div class="column is-10">
220
- <Show when={records()} fallback={<Loader />}>
220
+ <Show when={records()} fallback={<Loader />} keyed>
221
221
  {(records) => (
222
222
  <span class="is-pulled-right" style={{ margin: "auto" }}>
223
223
  {records.page.totalElements} records
@@ -238,7 +238,7 @@ export const SampleVariants: Component<{
238
238
  </div>
239
239
  </div>
240
240
  <div class="columns">
241
- <Show when={records()} fallback={<Loader />}>
241
+ <Show when={records()} fallback={<Loader />} keyed>
242
242
  {(records) => (
243
243
  <VariantsSampleTable
244
244
  item={props.sample}
@@ -75,7 +75,7 @@ export const Samples: Component = () => {
75
75
  return (
76
76
  <>
77
77
  <Breadcrumb items={[{ text: "Samples" }]} />
78
- <Show when={samples()} fallback={<Loader />}>
78
+ <Show when={samples()} fallback={<Loader />} keyed>
79
79
  {(samples) => (
80
80
  <>
81
81
  <div class="columns">
@@ -45,7 +45,7 @@ export const VariantConsequence: Component = () => {
45
45
  <ConsequenceTable csqMetadata={csqFields()} csqValues={csqValues()} record={variant()} />
46
46
  </div>
47
47
  {hasDecisionTreePathMeta() && (
48
- <Show when={!recordsMetadata.loading && !decisionTree.loading && (decisionTree() as DecisionTree)}>
48
+ <Show when={!recordsMetadata.loading && !decisionTree.loading && (decisionTree() as DecisionTree)} keyed>
49
49
  {(decisionTree) => (
50
50
  <div class="column">
51
51
  <h1 class="title is-5">Classification tree path</h1>
Binary file
Binary file