@genome-spy/core 0.64.0 → 0.65.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 (104) hide show
  1. package/dist/bundle/{index-CCJIjehY.js → AbortablePromiseCache-CcuMrnn7.js} +22 -91
  2. package/dist/bundle/browser-txUcLy2H.js +123 -0
  3. package/dist/bundle/index-BQpbYrv4.js +1712 -0
  4. package/dist/bundle/index-BhtHKLUo.js +73 -0
  5. package/dist/bundle/index-C0llXMqm.js +280 -0
  6. package/dist/bundle/index-CCe8rnZz.js +716 -0
  7. package/dist/bundle/index-CD7FLu9x.js +269 -0
  8. package/dist/bundle/{index-C08YCM2T.js → index-D-w7Mmt9.js} +246 -126
  9. package/dist/bundle/index-D74H8TTz.js +508 -0
  10. package/dist/bundle/index-DhcU-Gk-.js +1487 -0
  11. package/dist/bundle/index.es.js +4878 -4680
  12. package/dist/bundle/index.js +151 -167
  13. package/dist/bundle/inflate-DRgHi_KK.js +1050 -0
  14. package/dist/schema.json +9 -1
  15. package/dist/src/data/collector.d.ts +7 -2
  16. package/dist/src/data/collector.d.ts.map +1 -1
  17. package/dist/src/data/collector.js +13 -2
  18. package/dist/src/data/dataFlow.d.ts +20 -42
  19. package/dist/src/data/dataFlow.d.ts.map +1 -1
  20. package/dist/src/data/dataFlow.js +57 -80
  21. package/dist/src/data/dataFlow.test.js +35 -2
  22. package/dist/src/data/flowHandle.d.ts +15 -0
  23. package/dist/src/data/flowHandle.d.ts.map +1 -0
  24. package/dist/src/data/flowHandle.js +13 -0
  25. package/dist/src/data/flowInit.d.ts +85 -0
  26. package/dist/src/data/flowInit.d.ts.map +1 -0
  27. package/dist/src/data/flowInit.js +238 -0
  28. package/dist/src/data/flowInit.test.d.ts +2 -0
  29. package/dist/src/data/flowInit.test.d.ts.map +1 -0
  30. package/dist/src/data/flowInit.test.js +413 -0
  31. package/dist/src/data/flowOptimizer.d.ts +6 -4
  32. package/dist/src/data/flowOptimizer.d.ts.map +1 -1
  33. package/dist/src/data/flowOptimizer.js +29 -14
  34. package/dist/src/data/flowOptimizer.test.js +20 -15
  35. package/dist/src/data/sources/lazy/bamSource.js +1 -1
  36. package/dist/src/data/sources/lazy/bigBedSource.js +1 -1
  37. package/dist/src/data/sources/lazy/bigWigSource.js +1 -1
  38. package/dist/src/data/sources/lazy/gff3Source.d.ts +2 -6
  39. package/dist/src/data/sources/lazy/gff3Source.d.ts.map +1 -1
  40. package/dist/src/data/sources/lazy/gff3Source.js +4 -8
  41. package/dist/src/data/sources/lazy/indexedFastaSource.d.ts.map +1 -1
  42. package/dist/src/data/sources/lazy/indexedFastaSource.js +17 -17
  43. package/dist/src/data/sources/lazy/tabixSource.js +1 -1
  44. package/dist/src/genomeSpy.d.ts +1 -1
  45. package/dist/src/genomeSpy.d.ts.map +1 -1
  46. package/dist/src/genomeSpy.js +18 -61
  47. package/dist/src/marks/mark.d.ts +1 -0
  48. package/dist/src/marks/mark.d.ts.map +1 -1
  49. package/dist/src/marks/mark.js +22 -1
  50. package/dist/src/spec/sampleView.d.ts +3 -2
  51. package/dist/src/types/viewContext.d.ts +1 -1
  52. package/dist/src/view/axisResolution.d.ts +5 -0
  53. package/dist/src/view/axisResolution.d.ts.map +1 -1
  54. package/dist/src/view/axisResolution.js +16 -1
  55. package/dist/src/view/facetView.d.ts.map +1 -1
  56. package/dist/src/view/facetView.js +1 -0
  57. package/dist/src/view/flowBuilder.d.ts +2 -2
  58. package/dist/src/view/flowBuilder.d.ts.map +1 -1
  59. package/dist/src/view/flowBuilder.js +21 -4
  60. package/dist/src/view/gridView/gridView.d.ts.map +1 -1
  61. package/dist/src/view/gridView/gridView.js +13 -0
  62. package/dist/src/view/gridView/selectionRect.d.ts +8 -4
  63. package/dist/src/view/gridView/selectionRect.d.ts.map +1 -1
  64. package/dist/src/view/gridView/selectionRect.js +28 -3
  65. package/dist/src/view/gridView/selectionRect.test.d.ts +2 -0
  66. package/dist/src/view/gridView/selectionRect.test.d.ts.map +1 -0
  67. package/dist/src/view/gridView/selectionRect.test.js +87 -0
  68. package/dist/src/view/paramMediator.d.ts +2 -1
  69. package/dist/src/view/paramMediator.d.ts.map +1 -1
  70. package/dist/src/view/paramMediator.js +13 -1
  71. package/dist/src/view/paramMediator.test.js +22 -0
  72. package/dist/src/view/scaleResolution.d.ts +5 -0
  73. package/dist/src/view/scaleResolution.d.ts.map +1 -1
  74. package/dist/src/view/scaleResolution.js +10 -0
  75. package/dist/src/view/testUtils.d.ts.map +1 -1
  76. package/dist/src/view/testUtils.js +16 -4
  77. package/dist/src/view/unitView.d.ts.map +1 -1
  78. package/dist/src/view/unitView.js +58 -8
  79. package/dist/src/view/view.d.ts +17 -1
  80. package/dist/src/view/view.d.ts.map +1 -1
  81. package/dist/src/view/view.js +57 -1
  82. package/dist/src/view/viewDispose.test.d.ts +2 -0
  83. package/dist/src/view/viewDispose.test.d.ts.map +1 -0
  84. package/dist/src/view/viewDispose.test.js +110 -0
  85. package/dist/src/view/viewUtils.d.ts +4 -4
  86. package/dist/src/view/viewUtils.d.ts.map +1 -1
  87. package/dist/src/view/viewUtils.js +19 -15
  88. package/dist/src/view/viewUtils.test.d.ts +2 -0
  89. package/dist/src/view/viewUtils.test.d.ts.map +1 -0
  90. package/dist/src/view/viewUtils.test.js +87 -0
  91. package/package.json +10 -10
  92. package/dist/bundle/__vite-browser-external-C--ziKoh.js +0 -8
  93. package/dist/bundle/_commonjsHelpers-DjF3Plf2.js +0 -26
  94. package/dist/bundle/index-5ajWdKly.js +0 -1319
  95. package/dist/bundle/index-B03-Om4z.js +0 -274
  96. package/dist/bundle/index-BftNdA0O.js +0 -27
  97. package/dist/bundle/index-Bg7C4Xat.js +0 -2750
  98. package/dist/bundle/index-C3QR8Lv6.js +0 -2131
  99. package/dist/bundle/index-DTcHjAHp.js +0 -505
  100. package/dist/bundle/index-DnIkxb0L.js +0 -1025
  101. package/dist/bundle/index-Ww3TAo6_.js +0 -71
  102. package/dist/bundle/index-g8iXgW0W.js +0 -651
  103. package/dist/bundle/long-B-FASCSo.js +0 -2387
  104. package/dist/bundle/remoteFile-BuaqFGWk.js +0 -94
@@ -1,4 +1,78 @@
1
- const h = {
1
+ function R(d, t, e) {
2
+ const r = /* @__PURE__ */ Object.create(null), i = e.length, a = t.length, l = 9, s = 58;
3
+ let n = 0;
4
+ if (d === "GT") {
5
+ for (let o = 0; o < i; o++) {
6
+ const p = n;
7
+ for (; n < a && t.charCodeAt(n) !== l; )
8
+ n++;
9
+ r[e[o]] = t.slice(p, n), n++;
10
+ }
11
+ return r;
12
+ }
13
+ const c = d.indexOf("GT");
14
+ if (c === -1)
15
+ return r;
16
+ if (c === 0) {
17
+ for (let o = 0; o < i; o++) {
18
+ const p = n;
19
+ for (; n < a && t.charCodeAt(n) !== s && t.charCodeAt(n) !== l; )
20
+ n++;
21
+ for (r[e[o]] = t.slice(p, n); n < a && t.charCodeAt(n) !== l; )
22
+ n++;
23
+ n++;
24
+ }
25
+ return r;
26
+ }
27
+ let b = 0;
28
+ for (let o = 0; o < c; o++)
29
+ d.charCodeAt(o) === s && b++;
30
+ for (let o = 0; o < i; o++) {
31
+ const p = n;
32
+ let u = n;
33
+ for (; u < a && t.charCodeAt(u) !== l; )
34
+ u++;
35
+ let g = 0, N = p;
36
+ for (let h = p; h <= u; h++)
37
+ if (h === u || t.charCodeAt(h) === s) {
38
+ if (g === b) {
39
+ r[e[o]] = t.slice(N, h);
40
+ break;
41
+ }
42
+ g++, N = h + 1;
43
+ }
44
+ n = u + 1;
45
+ }
46
+ return r;
47
+ }
48
+ function E(d) {
49
+ const t = [], e = [];
50
+ let r = !1, i = !1;
51
+ const a = d.length;
52
+ for (let l = 0; l < a; l++) {
53
+ const s = d[l];
54
+ s === '"' ? (r = !r, e.push(s)) : s === "[" ? (i = !0, e.push(s)) : s === "]" ? (i = !1, e.push(s)) : s === "," && !r && !i ? (t.push(e.join("").trim()), e.length = 0) : e.push(s);
55
+ }
56
+ return e.length > 0 && t.push(e.join("").trim()), t;
57
+ }
58
+ function F(d, t) {
59
+ const e = d.indexOf(t);
60
+ return [d.slice(0, e), d.slice(e + 1)];
61
+ }
62
+ function C(d) {
63
+ const t = d.slice(1, -1), e = E(t), r = [];
64
+ for (let i = 0; i < e.length; i++) {
65
+ const a = e[i], [l, s] = F(a, "=");
66
+ if (s && s.startsWith("[") && s.endsWith("]")) {
67
+ const n = s.slice(1, -1).split(",");
68
+ for (let c = 0; c < n.length; c++)
69
+ n[c] = n[c].trim();
70
+ r.push([l, n]);
71
+ } else s && s.startsWith('"') && s.endsWith('"') ? r.push([l, s.slice(1, -1)]) : r.push([l, s]);
72
+ }
73
+ return Object.fromEntries(r);
74
+ }
75
+ const S = {
2
76
  // INFO fields
3
77
  InfoFields: {
4
78
  // from the VCF4.3 spec, https://samtools.github.io/hts-specs/VCFv4.3.pdf
@@ -343,35 +417,37 @@ const h = {
343
417
  }
344
418
  }
345
419
  };
346
- function v(b) {
420
+ function L(d) {
347
421
  try {
348
- return decodeURIComponent(b);
422
+ return decodeURIComponent(d);
349
423
  } catch {
350
- return b;
424
+ return d;
351
425
  }
352
426
  }
353
427
  class M {
354
- constructor({ header: a = "", strict: r = !0 }) {
355
- if (!a.length)
428
+ constructor({ header: t = "", strict: e = !0 }) {
429
+ if (!t.length)
356
430
  throw new Error("empty header received");
357
- const n = a.split(/[\r\n]+/).filter((o) => o);
358
- if (!n.length)
431
+ const r = t.split(/[\r\n]+/).filter(Boolean);
432
+ if (!r.length)
359
433
  throw new Error("no non-empty header lines specified");
360
- this.strict = r, this.metadata = JSON.parse(JSON.stringify({
361
- INFO: h.InfoFields,
362
- FORMAT: h.GenotypeFields,
363
- ALT: h.AltTypes,
364
- FILTER: h.FilterTypes
365
- }));
366
- let e;
367
- if (n.forEach((o) => {
368
- if (o.startsWith("#"))
369
- o.startsWith("##") ? this.parseMetadata(o) : e = o;
434
+ this.strict = e, this.metadata = {
435
+ INFO: { ...S.InfoFields },
436
+ FORMAT: { ...S.GenotypeFields },
437
+ ALT: { ...S.AltTypes },
438
+ FILTER: { ...S.FilterTypes }
439
+ };
440
+ let i;
441
+ for (let n = 0; n < r.length; n++) {
442
+ const c = r[n];
443
+ if (c.startsWith("#"))
444
+ c.startsWith("##") ? this.parseMetadata(c) : i = c;
370
445
  else throw new Error(`Bad line in header:
371
- ${o}`);
372
- }), !e)
446
+ ${c}`);
447
+ }
448
+ if (!i)
373
449
  throw new Error("No format line found in header");
374
- const t = e.trim().split(" "), s = t.slice(0, 8), i = [
450
+ const a = i.trim().split(" "), l = a.slice(0, 8), s = [
375
451
  "#CHROM",
376
452
  "POS",
377
453
  "ID",
@@ -381,54 +457,88 @@ ${o}`);
381
457
  "FILTER",
382
458
  "INFO"
383
459
  ];
384
- if (t.length < 8)
460
+ if (a.length < 8)
385
461
  throw new Error(`VCF header missing columns:
386
- ${e}`);
387
- if (s.length !== i.length || !s.every((o, p) => o === i[p]))
462
+ ${i}`);
463
+ if (l.length !== s.length || !l.every((n, c) => n === s[c]))
388
464
  throw new Error(`VCF column headers not correct:
389
- ${e}`);
390
- this.samples = t.slice(9);
465
+ ${i}`);
466
+ this.samples = a.slice(9);
391
467
  }
392
- parseSamples(a, r) {
393
- const n = {};
394
- if (a) {
395
- const e = r.split(" "), t = a.split(":"), s = t.map((i) => {
396
- const o = this.getMetadata("FORMAT", i, "Type");
397
- return o === "Integer" || o === "Float";
398
- });
399
- for (let i = 0; i < this.samples.length; i++) {
400
- const o = this.samples[i];
401
- n[o] = {};
402
- const p = e[i].split(":");
403
- for (let c = 0; c < p.length; c++) {
404
- const m = p[c];
405
- n[o][t[c]] = m === "" || m === "." ? void 0 : m.split(",").map((u) => u === "." ? void 0 : s[c] ? +u : u);
468
+ parseInfo(t) {
469
+ var s;
470
+ const e = {}, r = t.includes("%"), i = t.split(";"), a = this.metadata.INFO, l = i.length;
471
+ for (let n = 0; n < l; n++) {
472
+ const c = i[n], b = c.indexOf("="), o = b === -1 ? c : c.slice(0, b), p = b === -1 ? void 0 : c.slice(b + 1), u = (s = a[o]) == null ? void 0 : s.Type;
473
+ if (u === "Flag")
474
+ e[o] = !0;
475
+ else if (!p)
476
+ e[o] = !0;
477
+ else {
478
+ const g = u === "Integer" || u === "Float", N = p.split(","), h = N.length;
479
+ if (r) {
480
+ const f = [];
481
+ for (let m = 0; m < h; m++) {
482
+ const y = N[m];
483
+ if (y === ".")
484
+ f.push(void 0);
485
+ else {
486
+ const D = L(y);
487
+ f.push(g ? Number(D) : D);
488
+ }
489
+ }
490
+ e[o] = f;
491
+ } else {
492
+ const f = [];
493
+ for (let m = 0; m < h; m++) {
494
+ const y = N[m];
495
+ y === "." ? f.push(void 0) : f.push(g ? Number(y) : y);
496
+ }
497
+ e[o] = f;
406
498
  }
407
499
  }
408
500
  }
409
- return n;
501
+ return e;
410
502
  }
411
- parseGenotypesOnly(a, r) {
412
- const n = r.split(" "), e = {};
413
- let t = 0;
414
- const s = a.split(":");
415
- if (s.length === 1)
416
- for (const i of this.samples)
417
- e[i] = n[t++];
418
- else {
419
- const i = s.findIndex((o) => o === "GT");
420
- if (i === 0)
421
- for (const o of this.samples) {
422
- const p = n[t++], c = p.indexOf(":");
423
- c !== -1 ? e[o] = p.slice(0, c) : console.warn("unknown");
424
- }
425
- else
426
- for (const o of this.samples) {
427
- const p = n[t++].split(":");
428
- e[o] = p[i];
429
- }
503
+ parseSamples(t, e) {
504
+ var i;
505
+ const r = {};
506
+ if (t) {
507
+ const a = e.split(" "), l = t.split(":"), s = this.metadata.FORMAT, n = [];
508
+ for (let o = 0; o < l.length; o++) {
509
+ const p = (i = s[l[o]]) == null ? void 0 : i.Type;
510
+ n.push(p === "Integer" || p === "Float");
511
+ }
512
+ const c = l.length, b = this.samples.length;
513
+ for (let o = 0; o < b; o++) {
514
+ const p = this.samples[o], u = {}, g = a[o], N = g.length;
515
+ let h = 0, f = 0;
516
+ for (let m = 0; m <= N; m++)
517
+ if (m === N || g[m] === ":") {
518
+ const y = g.slice(h, m);
519
+ if (y === "" || y === ".")
520
+ u[l[f]] = void 0;
521
+ else {
522
+ const D = y.split(","), I = [];
523
+ if (n[f])
524
+ for (let T = 0; T < D.length; T++) {
525
+ const A = D[T];
526
+ I.push(A === "." ? void 0 : +A);
527
+ }
528
+ else
529
+ for (let T = 0; T < D.length; T++) {
530
+ const A = D[T];
531
+ I.push(A === "." ? void 0 : A);
532
+ }
533
+ u[l[f]] = I;
534
+ }
535
+ if (h = m + 1, f += 1, f >= c)
536
+ break;
537
+ }
538
+ r[p] = u;
539
+ }
430
540
  }
431
- return e;
541
+ return r;
432
542
  }
433
543
  /**
434
544
  * Parse a VCF metadata line (i.e. a line that starts with "##") and add its
@@ -437,17 +547,17 @@ ${e}`);
437
547
  * @param {string} line - A line from the VCF. Supports both LF and CRLF
438
548
  * newlines.
439
549
  */
440
- parseMetadata(a) {
441
- const r = /^##(.+?)=(.*)/.exec(a.trim());
442
- if (!r)
443
- throw new Error(`Line is not a valid metadata line: ${a}`);
444
- const [n, e] = r.slice(1, 3), t = n;
445
- if (e != null && e.startsWith("<")) {
446
- t in this.metadata || (this.metadata[t] = {});
447
- const [s, i] = this.parseStructuredMetaVal(e);
448
- this.metadata[t][s] = i;
550
+ parseMetadata(t) {
551
+ const e = /^##(.+?)=(.*)/.exec(t.trim());
552
+ if (!e)
553
+ throw new Error(`Line is not a valid metadata line: ${t}`);
554
+ const [r, i] = e.slice(1, 3), a = r;
555
+ if (i != null && i.startsWith("<")) {
556
+ a in this.metadata || (this.metadata[a] = {});
557
+ const [l, s] = this.parseStructuredMetaVal(i);
558
+ l ? this.metadata[a][l] = s : this.metadata[a] = s;
449
559
  } else
450
- this.metadata[t] = e;
560
+ this.metadata[a] = i;
451
561
  }
452
562
  /**
453
563
  * Parse a VCF header structured meta string (i.e. a meta value that starts
@@ -458,9 +568,9 @@ ${e}`);
458
568
  * @returns {Array} - Array with two entries, 1) a string of the metadata ID
459
569
  * and 2) an object with the other key-value pairs in the metadata
460
570
  */
461
- parseStructuredMetaVal(a) {
462
- const r = this.parseKeyValue(a.replace(/^<|>$/g, ""), ","), n = r.ID;
463
- return delete r.ID, "Number" in r && (Number.isNaN(Number(r.Number)) || (r.Number = Number(r.Number))), [n, r];
571
+ parseStructuredMetaVal(t) {
572
+ const e = C(t), r = e.ID;
573
+ return delete e.ID, "Number" in e && (Number.isNaN(Number(e.Number)) || (e.Number = Number(e.Number))), [r, e];
464
574
  }
465
575
  /**
466
576
  * Get metadata filtered by the elements in args. For example, can pass
@@ -471,66 +581,76 @@ ${e}`);
471
581
  *
472
582
  * @returns {any} An object, string, or number, depending on the filtering
473
583
  */
474
- getMetadata(...a) {
475
- let r = this.metadata;
476
- for (const n of a)
477
- if (r = r[n], !r)
478
- return r;
479
- return r;
584
+ getMetadata(...t) {
585
+ let e = this.metadata;
586
+ const r = t.length;
587
+ for (let i = 0; i < r; i++)
588
+ if (e = e[t[i]], !e)
589
+ return e;
590
+ return e;
480
591
  }
481
592
  /**
482
- * Sometimes VCFs have key-value strings that allow the separator within the
483
- * value if it's in quotes, like:
484
- * 'ID=DB,Number=0,Type=Flag,Description="dbSNP membership, build 129"'
593
+ * Parse a VCF line into an object like
485
594
  *
486
- * Parse this at a low level since we can't just split at "," (or whatever
487
- * separator). Above line would be parsed to: {ID: 'DB', Number: '0', Type:
488
- * 'Flag', Description: 'dbSNP membership, build 129'}
489
- */
490
- parseKeyValue(a, r = ";") {
491
- const n = {};
492
- let e = "", t = "", s = 1;
493
- for (const i of a)
494
- s === 1 ? i === "=" ? s = 2 : i !== r ? e += i : t === "" && (n[e] = void 0, e = "") : s === 2 ? i === r ? (n[e] = t, e = "", t = "", s = 1) : i === '"' ? s = 3 : t += i : s === 3 && (i !== '"' ? t += i : s = 2);
495
- return s === 2 || s === 3 ? n[e] = t : s === 1 && (n[e] = void 0), n;
496
- }
497
- /**
498
- * Parse a VCF line into an object like { CHROM POS ID REF ALT QUAL FILTER
499
- * INFO } with SAMPLES optionally included if present in the VCF
595
+ * ```typescript
596
+ * {
597
+ * CHROM: 'contigA',
598
+ * POS: 3000,
599
+ * ID: ['rs17883296'],
600
+ * REF: 'G',
601
+ * ALT: ['T', 'A'],
602
+ * QUAL: 100,
603
+ * FILTER: 'PASS',
604
+ * INFO: {
605
+ * NS: [3],
606
+ * DP: [14],
607
+ * AF: [0.5],
608
+ * DB: true,
609
+ * XYZ: ['5'],
610
+ * },
611
+ * SAMPLES: () => ({
612
+ * HG00096: {
613
+ * GT: ['0|0'],
614
+ * AP: ['0.000', '0.000'],
615
+ * }
616
+ * }),
617
+ * GENOTYPES: () => ({
618
+ * HG00096: '0|0'
619
+ * })
620
+ * }
621
+ * ```
622
+ *
623
+ * SAMPLES and GENOTYPES methods are functions instead of static data fields
624
+ * because it avoids parsing the potentially long list of samples from e.g.
625
+ * 1000 genotypes data unless requested.
500
626
  *
501
- * @param {string} line - A string of a line from a VCF. Supports both LF and
502
- * CRLF newlines.
627
+ * The SAMPLES function gives all info about the samples
628
+ *
629
+ * The GENOTYPES function only extracts the raw GT string if it exists, for
630
+ * potentially optimized parsing by programs that need it
631
+ *
632
+ * @param {string} line - A string of a line from a VCF
503
633
  */
504
- parseLine(a) {
505
- var r, n;
506
- let e = 0;
507
- for (let l = 0; e < a.length && (a[e] === " " && (l += 1), l !== 9); e += 1)
508
- ;
509
- const t = a.slice(0, e).split(" "), s = a.slice(e + 1), [i, o, p, c, m, u, T] = t, g = i, I = +o, A = p === "." ? void 0 : p.split(";"), S = c, R = m === "." ? void 0 : m.split(","), E = u === "." ? void 0 : +u, y = T === "." ? void 0 : T.split(";");
510
- if (this.strict && !t[7])
634
+ parseLine(t) {
635
+ let e = 0, r = 0;
636
+ for (; e < t.length && r < 9; )
637
+ t[e] === " " && (r += 1), e += 1;
638
+ const i = r === 9 ? e - 1 : e, a = t.slice(0, i).split(" "), l = t.slice(i + 1), [s, n, c, b, o, p, u] = a, g = s, N = +n, h = c === "." ? void 0 : c.split(";"), f = b, m = o === "." ? void 0 : o.split(","), y = p === "." ? void 0 : +p, D = u === "." ? void 0 : u.split(";"), I = a[8];
639
+ if (this.strict && !a[7])
511
640
  throw new Error("no INFO field specified, must contain at least a '.' (turn off strict mode to allow)");
512
- const F = (r = t[7]) === null || r === void 0 ? void 0 : r.includes("%"), f = t[7] === void 0 || t[7] === "." ? {} : this.parseKeyValue(t[7]);
513
- for (const l of Object.keys(f)) {
514
- const D = (n = f[l]) === null || n === void 0 ? void 0 : n.split(",").map((d) => d === "." ? void 0 : d).map((d) => d && F ? v(d) : d), N = this.getMetadata("INFO", l, "Type");
515
- N === "Integer" || N === "Float" ? f[l] = D == null ? void 0 : D.map((d) => d === void 0 ? void 0 : Number(d)) : N === "Flag" ? f[l] = !0 : f[l] = D;
516
- }
641
+ const T = a[7] === void 0 || a[7] === "." ? {} : this.parseInfo(a[7]);
517
642
  return {
518
643
  CHROM: g,
519
- POS: I,
520
- ALT: R,
521
- INFO: f,
522
- REF: S,
523
- FILTER: y && y.length === 1 && y[0] === "PASS" ? "PASS" : y,
524
- ID: A,
525
- QUAL: E,
526
- SAMPLES: () => {
527
- var l;
528
- return this.parseSamples((l = t[8]) !== null && l !== void 0 ? l : "", s);
529
- },
530
- GENOTYPES: () => {
531
- var l;
532
- return this.parseGenotypesOnly((l = t[8]) !== null && l !== void 0 ? l : "", s);
533
- }
644
+ POS: N,
645
+ ALT: m,
646
+ INFO: T,
647
+ REF: f,
648
+ FILTER: (D == null ? void 0 : D.length) === 1 && D[0] === "PASS" ? "PASS" : D,
649
+ ID: h,
650
+ QUAL: y,
651
+ FORMAT: I,
652
+ SAMPLES: () => this.parseSamples(a[8] ?? "", l),
653
+ GENOTYPES: () => R(a[8] ?? "", l, this.samples)
534
654
  };
535
655
  }
536
656
  }