msa-parsers 1.0.3

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 (85) hide show
  1. package/dist/gff/gffToInterPro.d.ts +20 -0
  2. package/dist/gff/gffToInterPro.js +83 -0
  3. package/dist/gff/gffToInterPro.js.map +1 -0
  4. package/dist/gff/gffToInterPro.test.d.ts +1 -0
  5. package/dist/gff/gffToInterPro.test.js +181 -0
  6. package/dist/gff/gffToInterPro.test.js.map +1 -0
  7. package/dist/gff/index.d.ts +3 -0
  8. package/dist/gff/index.js +4 -0
  9. package/dist/gff/index.js.map +1 -0
  10. package/dist/gff/interProToGFF.d.ts +9 -0
  11. package/dist/gff/interProToGFF.js +48 -0
  12. package/dist/gff/interProToGFF.js.map +1 -0
  13. package/dist/gff/interProToGFF.test.d.ts +1 -0
  14. package/dist/gff/interProToGFF.test.js +189 -0
  15. package/dist/gff/interProToGFF.test.js.map +1 -0
  16. package/dist/gff/parseGFF.d.ts +2 -0
  17. package/dist/gff/parseGFF.js +41 -0
  18. package/dist/gff/parseGFF.js.map +1 -0
  19. package/dist/gff/parseGFF.test.d.ts +1 -0
  20. package/dist/gff/parseGFF.test.js +92 -0
  21. package/dist/gff/parseGFF.test.js.map +1 -0
  22. package/dist/index.d.ts +5 -0
  23. package/dist/index.js +9 -0
  24. package/dist/index.js.map +1 -0
  25. package/dist/msa/A3mMSA.d.ts +33 -0
  26. package/dist/msa/A3mMSA.js +280 -0
  27. package/dist/msa/A3mMSA.js.map +1 -0
  28. package/dist/msa/A3mMSA.test.d.ts +1 -0
  29. package/dist/msa/A3mMSA.test.js +155 -0
  30. package/dist/msa/A3mMSA.test.js.map +1 -0
  31. package/dist/msa/ClustalMSA.d.ts +30 -0
  32. package/dist/msa/ClustalMSA.js +53 -0
  33. package/dist/msa/ClustalMSA.js.map +1 -0
  34. package/dist/msa/EmfMSA.d.ts +27 -0
  35. package/dist/msa/EmfMSA.js +53 -0
  36. package/dist/msa/EmfMSA.js.map +1 -0
  37. package/dist/msa/FastaMSA.d.ts +19 -0
  38. package/dist/msa/FastaMSA.js +69 -0
  39. package/dist/msa/FastaMSA.js.map +1 -0
  40. package/dist/msa/StockholmMSA.d.ts +54 -0
  41. package/dist/msa/StockholmMSA.js +113 -0
  42. package/dist/msa/StockholmMSA.js.map +1 -0
  43. package/dist/msa/index.d.ts +18 -0
  44. package/dist/msa/index.js +34 -0
  45. package/dist/msa/index.js.map +1 -0
  46. package/dist/msa/index.test.d.ts +1 -0
  47. package/dist/msa/index.test.js +60 -0
  48. package/dist/msa/index.test.js.map +1 -0
  49. package/dist/msa/parseNewick.d.ts +60 -0
  50. package/dist/msa/parseNewick.js +95 -0
  51. package/dist/msa/parseNewick.js.map +1 -0
  52. package/dist/msa/stockholmParser.d.ts +22 -0
  53. package/dist/msa/stockholmParser.js +141 -0
  54. package/dist/msa/stockholmParser.js.map +1 -0
  55. package/dist/msa/stockholmParser.test.d.ts +1 -0
  56. package/dist/msa/stockholmParser.test.js +111 -0
  57. package/dist/msa/stockholmParser.test.js.map +1 -0
  58. package/dist/types.d.ts +66 -0
  59. package/dist/types.js +2 -0
  60. package/dist/types.js.map +1 -0
  61. package/dist/util.d.ts +2 -0
  62. package/dist/util.js +10 -0
  63. package/dist/util.js.map +1 -0
  64. package/package.json +25 -0
  65. package/src/gff/gffToInterPro.test.ts +202 -0
  66. package/src/gff/gffToInterPro.ts +113 -0
  67. package/src/gff/index.ts +3 -0
  68. package/src/gff/interProToGFF.test.ts +206 -0
  69. package/src/gff/interProToGFF.ts +59 -0
  70. package/src/gff/parseGFF.test.ts +106 -0
  71. package/src/gff/parseGFF.ts +46 -0
  72. package/src/index.ts +29 -0
  73. package/src/msa/A3mMSA.test.ts +192 -0
  74. package/src/msa/A3mMSA.ts +320 -0
  75. package/src/msa/ClustalMSA.ts +67 -0
  76. package/src/msa/EmfMSA.ts +67 -0
  77. package/src/msa/FastaMSA.ts +82 -0
  78. package/src/msa/StockholmMSA.ts +141 -0
  79. package/src/msa/index.test.ts +74 -0
  80. package/src/msa/index.ts +44 -0
  81. package/src/msa/parseNewick.ts +94 -0
  82. package/src/msa/stockholmParser.test.ts +123 -0
  83. package/src/msa/stockholmParser.ts +157 -0
  84. package/src/types.ts +68 -0
  85. package/src/util.ts +19 -0
@@ -0,0 +1,53 @@
1
+ import { parse } from 'clustal-js';
2
+ export default class ClustalMSA {
3
+ MSA;
4
+ constructor(text) {
5
+ this.MSA = parse(text);
6
+ }
7
+ getMSA() {
8
+ return this.MSA;
9
+ }
10
+ getRow(name) {
11
+ return this.MSA.alns.find(aln => aln.id === name)?.seq || '';
12
+ }
13
+ getWidth() {
14
+ return this.MSA.alns[0].seq.length;
15
+ }
16
+ getRowData() {
17
+ return undefined;
18
+ }
19
+ getHeader() {
20
+ return this.MSA.header;
21
+ }
22
+ getNames() {
23
+ return this.MSA.alns.map(aln => aln.id);
24
+ }
25
+ getStructures() {
26
+ return {};
27
+ }
28
+ get alignmentNames() {
29
+ return [];
30
+ }
31
+ getTree() {
32
+ return {
33
+ id: 'root',
34
+ name: 'root',
35
+ noTree: true,
36
+ children: this.getNames().map(name => ({
37
+ id: name,
38
+ name,
39
+ children: [],
40
+ })),
41
+ };
42
+ }
43
+ get seqConsensus() {
44
+ return this.MSA.consensus;
45
+ }
46
+ get secondaryStructureConsensus() {
47
+ return undefined;
48
+ }
49
+ get tracks() {
50
+ return [];
51
+ }
52
+ }
53
+ //# sourceMappingURL=ClustalMSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ClustalMSA.js","sourceRoot":"","sources":["../../src/msa/ClustalMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIlC,MAAM,CAAC,OAAO,OAAO,UAAU;IACrB,GAAG,CAA0B;IAErC,YAAY,IAAY;QACtB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,MAAM,CAAA;IACrC,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,GAAG,CAAC,MAAM,CAAA;IACxB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACzC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,IAAI;gBACJ,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,GAAG,CAAC,SAAS,CAAA;IAC3B,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -0,0 +1,27 @@
1
+ import type { NodeWithIds } from '../types';
2
+ export default class EmfMSA {
3
+ private MSA;
4
+ constructor(text: string);
5
+ getMSA(): {
6
+ species: string;
7
+ protein: string;
8
+ chr: string;
9
+ start: number;
10
+ end: number;
11
+ strand: number;
12
+ geneId: string;
13
+ unknown: string;
14
+ seq: string;
15
+ }[];
16
+ getRow(name: string): string;
17
+ getWidth(): number;
18
+ getRowData(): undefined;
19
+ getHeader(): string;
20
+ getNames(): string[];
21
+ getStructures(): {};
22
+ get alignmentNames(): never[];
23
+ getTree(): NodeWithIds;
24
+ get seqConsensus(): undefined;
25
+ get secondaryStructureConsensus(): undefined;
26
+ get tracks(): never[];
27
+ }
@@ -0,0 +1,53 @@
1
+ import { parseEmfAln } from 'emf-js';
2
+ export default class EmfMSA {
3
+ MSA;
4
+ constructor(text) {
5
+ this.MSA = parseEmfAln(text);
6
+ }
7
+ getMSA() {
8
+ return this.MSA;
9
+ }
10
+ getRow(name) {
11
+ return this.MSA.find(aln => aln.protein === name)?.seq || '';
12
+ }
13
+ getWidth() {
14
+ return this.MSA[0].seq.length;
15
+ }
16
+ getRowData() {
17
+ return undefined;
18
+ }
19
+ getHeader() {
20
+ return '';
21
+ }
22
+ getNames() {
23
+ return this.MSA.map(aln => aln.protein);
24
+ }
25
+ getStructures() {
26
+ return {};
27
+ }
28
+ get alignmentNames() {
29
+ return [];
30
+ }
31
+ getTree() {
32
+ return {
33
+ id: 'root',
34
+ name: 'root',
35
+ noTree: true,
36
+ children: this.getNames().map(name => ({
37
+ id: name,
38
+ name,
39
+ children: [],
40
+ })),
41
+ };
42
+ }
43
+ get seqConsensus() {
44
+ return undefined;
45
+ }
46
+ get secondaryStructureConsensus() {
47
+ return undefined;
48
+ }
49
+ get tracks() {
50
+ return [];
51
+ }
52
+ }
53
+ //# sourceMappingURL=EmfMSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmfMSA.js","sourceRoot":"","sources":["../../src/msa/EmfMSA.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAIpC,MAAM,CAAC,OAAO,OAAO,MAAM;IACjB,GAAG,CAAgC;IAE3C,YAAY,IAAY;QACtB,IAAI,CAAC,GAAG,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAA;IAC9D,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,GAAG,CAAC,MAAM,CAAA;IAChC,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACzC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,IAAI;gBACJ,QAAQ,EAAE,EAAE;aACb,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -0,0 +1,19 @@
1
+ import type { NodeWithIds } from '../types';
2
+ export default class FastaMSA {
3
+ private MSA;
4
+ constructor(text: string);
5
+ getMSA(): {
6
+ seqdata: Record<string, string>;
7
+ };
8
+ getRowData(): undefined;
9
+ getNames(): string[];
10
+ getRow(name: string): string;
11
+ getWidth(): number;
12
+ getStructures(): {};
13
+ get alignmentNames(): never[];
14
+ getHeader(): {};
15
+ getTree(): NodeWithIds;
16
+ get seqConsensus(): undefined;
17
+ get secondaryStructureConsensus(): undefined;
18
+ get tracks(): never[];
19
+ }
@@ -0,0 +1,69 @@
1
+ export default class FastaMSA {
2
+ MSA;
3
+ constructor(text) {
4
+ const seqdata = {};
5
+ for (const entry of text.split('>')) {
6
+ if (!/\S/.test(entry)) {
7
+ continue;
8
+ }
9
+ const newlineIdx = entry.indexOf('\n');
10
+ if (newlineIdx === -1) {
11
+ continue;
12
+ }
13
+ const defLine = entry.slice(0, newlineIdx);
14
+ const spaceIdx = defLine.indexOf(' ');
15
+ const id = spaceIdx === -1 ? defLine : defLine.slice(0, spaceIdx);
16
+ if (id) {
17
+ seqdata[id] = entry.slice(newlineIdx + 1).replaceAll(/\s/g, '');
18
+ }
19
+ }
20
+ this.MSA = { seqdata };
21
+ }
22
+ getMSA() {
23
+ return this.MSA;
24
+ }
25
+ getRowData() {
26
+ return undefined;
27
+ }
28
+ getNames() {
29
+ return Object.keys(this.MSA.seqdata);
30
+ }
31
+ getRow(name) {
32
+ return this.MSA.seqdata[name] || '';
33
+ }
34
+ getWidth() {
35
+ const name = Object.keys(this.MSA.seqdata)[0];
36
+ return this.getRow(name).length;
37
+ }
38
+ getStructures() {
39
+ return {};
40
+ }
41
+ get alignmentNames() {
42
+ return [];
43
+ }
44
+ getHeader() {
45
+ return {};
46
+ }
47
+ getTree() {
48
+ return {
49
+ id: 'root',
50
+ name: 'root',
51
+ noTree: true,
52
+ children: this.getNames().map(name => ({
53
+ id: name,
54
+ children: [],
55
+ name,
56
+ })),
57
+ };
58
+ }
59
+ get seqConsensus() {
60
+ return undefined;
61
+ }
62
+ get secondaryStructureConsensus() {
63
+ return undefined;
64
+ }
65
+ get tracks() {
66
+ return [];
67
+ }
68
+ }
69
+ //# sourceMappingURL=FastaMSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FastaMSA.js","sourceRoot":"","sources":["../../src/msa/FastaMSA.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,OAAO,QAAQ;IACnB,GAAG,CAAqC;IAEhD,YAAY,IAAY;QACtB,MAAM,OAAO,GAA2B,EAAE,CAAA;QAC1C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACtC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtB,SAAQ;YACV,CAAC;YACD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;YAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACrC,MAAM,EAAE,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;YACjE,IAAI,EAAE,EAAE,CAAC;gBACP,OAAO,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YACjE,CAAC;QACH,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;IACxB,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,GAAG,CAAA;IACjB,CAAC;IAED,UAAU;QACR,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,QAAQ;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAED,MAAM,CAAC,IAAY;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;IACrC,CAAC;IAED,QAAQ;QACN,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,CAAA;QAC9C,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;IACjC,CAAC;IAED,aAAa;QACX,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,cAAc;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IAED,SAAS;QACP,OAAO,EAAE,CAAA;IACX,CAAC;IAED,OAAO;QACL,OAAO;YACL,EAAE,EAAE,MAAM;YACV,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,IAAI;YACZ,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrC,EAAE,EAAE,IAAI;gBACR,QAAQ,EAAE,EAAE;gBACZ,IAAI;aACL,CAAC,CAAC;SACJ,CAAA;IACH,CAAC;IAED,IAAI,YAAY;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,2BAA2B;QAC7B,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,IAAI,MAAM;QACR,OAAO,EAAE,CAAA;IACX,CAAC;CACF"}
@@ -0,0 +1,54 @@
1
+ import type { NodeWithIds } from '../types';
2
+ import type { StockholmData } from './stockholmParser';
3
+ export default class StockholmMSA {
4
+ private data;
5
+ private MSA;
6
+ constructor(text: string, currentAlignment: number);
7
+ getMSA(): StockholmData;
8
+ getRow(name: string): string;
9
+ getWidth(): number;
10
+ get alignmentNames(): string[];
11
+ getHeader(): {
12
+ General: Record<string, string[]>;
13
+ Accessions: {
14
+ [k: string]: string | undefined;
15
+ };
16
+ Dbxref: {
17
+ [k: string]: string;
18
+ };
19
+ };
20
+ getRowData(rowName: string): {
21
+ name: string;
22
+ accession: string | undefined;
23
+ dbxref: string | undefined;
24
+ };
25
+ getNames(): string[];
26
+ getSeqCoords(): void;
27
+ getStructures(): Record<string, {
28
+ pdb: string;
29
+ chain: string;
30
+ startPos: number;
31
+ endPos: number;
32
+ }[]>;
33
+ getTree(): NodeWithIds;
34
+ get seqConsensus(): string | undefined;
35
+ get secondaryStructureConsensus(): string | undefined;
36
+ get tracks(): ({
37
+ id: string;
38
+ name: string;
39
+ data: string | undefined;
40
+ customColorScheme: {
41
+ '>'?: undefined;
42
+ '<'?: undefined;
43
+ };
44
+ } | {
45
+ id: string;
46
+ name: string;
47
+ data: string | undefined;
48
+ customColorScheme: {
49
+ '>': string;
50
+ '<': string;
51
+ };
52
+ })[];
53
+ }
54
+ export { sniff as stockholmSniff } from './stockholmParser';
@@ -0,0 +1,113 @@
1
+ import parseNewick from './parseNewick';
2
+ import { parseAll } from './stockholmParser';
3
+ import { generateNodeIds } from '../util';
4
+ export default class StockholmMSA {
5
+ data;
6
+ MSA;
7
+ constructor(text, currentAlignment) {
8
+ const res = parseAll(text);
9
+ this.data = res;
10
+ this.MSA = res[currentAlignment];
11
+ }
12
+ getMSA() {
13
+ return this.MSA;
14
+ }
15
+ getRow(name) {
16
+ return this.MSA.seqdata[name] || '';
17
+ }
18
+ getWidth() {
19
+ const name = Object.keys(this.MSA.seqdata)[0];
20
+ return this.getRow(name).length;
21
+ }
22
+ get alignmentNames() {
23
+ return this.data.map((aln, idx) => aln.gf.DE?.[0] ?? `Alignment ${idx + 1}`);
24
+ }
25
+ getHeader() {
26
+ const acEntries = this.MSA.gs.AC ?? {};
27
+ const drEntries = this.MSA.gs.DR ?? {};
28
+ return {
29
+ General: this.MSA.gf,
30
+ Accessions: Object.fromEntries(Object.entries(acEntries).map(([k, v]) => [k, v[0]])),
31
+ Dbxref: Object.fromEntries(Object.entries(drEntries).map(([k, v]) => [k, v.join('; ')])),
32
+ };
33
+ }
34
+ getRowData(rowName) {
35
+ return {
36
+ name: rowName,
37
+ accession: this.MSA.gs.AC?.[rowName]?.[0],
38
+ dbxref: this.MSA.gs.DR?.[rowName]?.join('; '),
39
+ };
40
+ }
41
+ getNames() {
42
+ return Object.keys(this.MSA.seqdata);
43
+ }
44
+ getSeqCoords() { }
45
+ getStructures() {
46
+ const pdbRegex = /PDB; +(\S+) +(\S); ([0-9]+)-([0-9]+)/;
47
+ const drEntries = this.MSA.gs.DR ?? {};
48
+ const args = Object.entries(drEntries)
49
+ .flatMap(([id, drList]) => drList.map(dr => {
50
+ const match = pdbRegex.exec(dr);
51
+ return match ? { id, match } : null;
52
+ }))
53
+ .filter((item) => !!item)
54
+ .map(({ id, match }) => ({
55
+ id,
56
+ pdb: match[1].toLowerCase(),
57
+ chain: match[2],
58
+ startPos: +match[3],
59
+ endPos: +match[4],
60
+ }));
61
+ const ret = {};
62
+ for (const entry of args) {
63
+ const { id, ...rest } = entry;
64
+ if (!ret[id]) {
65
+ ret[id] = [];
66
+ }
67
+ ret[id].push(rest);
68
+ }
69
+ return ret;
70
+ }
71
+ getTree() {
72
+ const tree = this.MSA.gf.NH?.[0];
73
+ return tree
74
+ ? generateNodeIds(parseNewick(tree))
75
+ : {
76
+ id: 'root',
77
+ name: 'root',
78
+ noTree: true,
79
+ children: this.getNames().map(name => ({
80
+ id: name,
81
+ children: [],
82
+ name,
83
+ })),
84
+ };
85
+ }
86
+ get seqConsensus() {
87
+ return this.MSA.gc.seq_cons;
88
+ }
89
+ get secondaryStructureConsensus() {
90
+ return this.MSA.gc.SS_cons;
91
+ }
92
+ get tracks() {
93
+ return [
94
+ {
95
+ id: 'seqConsensus',
96
+ name: 'Sequence consensus',
97
+ data: this.seqConsensus,
98
+ customColorScheme: {},
99
+ },
100
+ {
101
+ id: 'secondaryStruct',
102
+ name: 'Secondary-structure',
103
+ data: this.secondaryStructureConsensus,
104
+ customColorScheme: {
105
+ '>': 'pink',
106
+ '<': 'lightblue',
107
+ },
108
+ },
109
+ ];
110
+ }
111
+ }
112
+ export { sniff as stockholmSniff } from './stockholmParser';
113
+ //# sourceMappingURL=StockholmMSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StockholmMSA.js","sourceRoot":"","sources":["../../src/msa/StockholmMSA.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import A3mMSA from './A3mMSA';
2
+ import ClustalMSA from './ClustalMSA';
3
+ import EmfMSA from './EmfMSA';
4
+ import FastaMSA from './FastaMSA';
5
+ import StockholmMSA from './StockholmMSA';
6
+ export { parseEmfTree } from 'emf-js';
7
+ export { default as parseNewick } from './parseNewick';
8
+ export type MSAParserType = StockholmMSA | A3mMSA | FastaMSA | EmfMSA | ClustalMSA;
9
+ export declare function parseMSA(text: string, currentAlignment?: number): MSAParserType;
10
+ /**
11
+ * Get ungapped sequence from an aligned row
12
+ */
13
+ export declare function getUngappedSequence(alignedSeq: string): string;
14
+ export { default as A3mMSA } from './A3mMSA';
15
+ export { default as ClustalMSA } from './ClustalMSA';
16
+ export { default as EmfMSA } from './EmfMSA';
17
+ export { default as FastaMSA } from './FastaMSA';
18
+ export { default as StockholmMSA, stockholmSniff } from './StockholmMSA';
@@ -0,0 +1,34 @@
1
+ import A3mMSA from './A3mMSA';
2
+ import ClustalMSA from './ClustalMSA';
3
+ import EmfMSA from './EmfMSA';
4
+ import FastaMSA from './FastaMSA';
5
+ import StockholmMSA, { stockholmSniff } from './StockholmMSA';
6
+ export { parseEmfTree } from 'emf-js';
7
+ export { default as parseNewick } from './parseNewick';
8
+ export function parseMSA(text, currentAlignment = 0) {
9
+ if (stockholmSniff(text)) {
10
+ return new StockholmMSA(text, currentAlignment);
11
+ }
12
+ if (A3mMSA.sniff(text)) {
13
+ return new A3mMSA(text);
14
+ }
15
+ if (text.startsWith('>')) {
16
+ return new FastaMSA(text);
17
+ }
18
+ if (text.startsWith('SEQ')) {
19
+ return new EmfMSA(text);
20
+ }
21
+ return new ClustalMSA(text);
22
+ }
23
+ /**
24
+ * Get ungapped sequence from an aligned row
25
+ */
26
+ export function getUngappedSequence(alignedSeq) {
27
+ return alignedSeq.replaceAll(/[.-]/g, '');
28
+ }
29
+ export { default as A3mMSA } from './A3mMSA';
30
+ export { default as ClustalMSA } from './ClustalMSA';
31
+ export { default as EmfMSA } from './EmfMSA';
32
+ export { default as FastaMSA } from './FastaMSA';
33
+ export { default as StockholmMSA, stockholmSniff } from './StockholmMSA';
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/msa/index.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,YAAY,EAAE,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE7D,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAA;AACrC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,eAAe,CAAA;AAStD,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,gBAAgB,GAAG,CAAC;IACzD,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAA;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAAkB;IACpD,OAAO,UAAU,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAA;AAC3C,CAAC;AAED,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAA;AAC5C,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,60 @@
1
+ import { describe, expect, test } from 'vitest';
2
+ import A3mMSA from './A3mMSA';
3
+ import ClustalMSA from './ClustalMSA';
4
+ import FastaMSA from './FastaMSA';
5
+ import { getUngappedSequence, parseMSA } from './index';
6
+ describe('parseMSA', () => {
7
+ test('parses FASTA format', () => {
8
+ const fasta = `>seq1
9
+ ACDEF
10
+ >seq2
11
+ GHIKL`;
12
+ const msa = parseMSA(fasta);
13
+ expect(msa).toBeInstanceOf(FastaMSA);
14
+ expect(msa.getNames()).toEqual(['seq1', 'seq2']);
15
+ });
16
+ test('parses A3M format', () => {
17
+ const a3m = `>seq1
18
+ ACDEFghiKLMNPQ
19
+ >seq2
20
+ ACDEF---KLMNPQ`;
21
+ const msa = parseMSA(a3m);
22
+ expect(msa).toBeInstanceOf(A3mMSA);
23
+ });
24
+ test('parses Clustal format', () => {
25
+ const clustal = `CLUSTAL W (1.83) multiple sequence alignment
26
+
27
+ seq1 ACDEFGHIKL
28
+ seq2 ACDEFGHIKL
29
+ **********`;
30
+ const msa = parseMSA(clustal);
31
+ expect(msa).toBeInstanceOf(ClustalMSA);
32
+ });
33
+ test('defaults to Clustal for unknown format', () => {
34
+ const unknown = `some unknown format
35
+ that doesn't match anything`;
36
+ const msa = parseMSA(unknown);
37
+ expect(msa).toBeInstanceOf(ClustalMSA);
38
+ });
39
+ });
40
+ describe('getUngappedSequence', () => {
41
+ test('removes dashes', () => {
42
+ expect(getUngappedSequence('AC--DEF')).toBe('ACDEF');
43
+ });
44
+ test('removes dots', () => {
45
+ expect(getUngappedSequence('AC..DEF')).toBe('ACDEF');
46
+ });
47
+ test('removes mixed gaps', () => {
48
+ expect(getUngappedSequence('A-C.D--E..F')).toBe('ACDEF');
49
+ });
50
+ test('handles empty string', () => {
51
+ expect(getUngappedSequence('')).toBe('');
52
+ });
53
+ test('handles string with only gaps', () => {
54
+ expect(getUngappedSequence('---...')).toBe('');
55
+ });
56
+ test('handles string with no gaps', () => {
57
+ expect(getUngappedSequence('ACDEF')).toBe('ACDEF');
58
+ });
59
+ });
60
+ //# sourceMappingURL=index.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../src/msa/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,MAAM,MAAM,UAAU,CAAA;AAC7B,OAAO,UAAU,MAAM,cAAc,CAAA;AACrC,OAAO,QAAQ,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvD,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;IACxB,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;QAC/B,MAAM,KAAK,GAAG;;;MAGZ,CAAA;QACF,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;QAE3B,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IAClD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC7B,MAAM,GAAG,GAAG;;;eAGD,CAAA;QACX,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAA;QAEzB,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAA;IACpC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,OAAO,GAAG;;;;qBAIC,CAAA;QACjB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,OAAO,GAAG;4BACQ,CAAA;QACxB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;QAE7B,MAAM,CAAC,GAAG,CAAC,CAAC,cAAc,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,IAAI,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC1B,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;QACxB,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,MAAM,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChD,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Newick format parser in JavaScript.
3
+ *
4
+ * Copyright (c) Jason Davies 2010.
5
+ *
6
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
7
+ * of this software and associated documentation files (the "Software"), to deal
8
+ * in the Software without restriction, including without limitation the rights
9
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ * copies of the Software, and to permit persons to whom the Software is
11
+ * furnished to do so, subject to the following conditions:
12
+ *
13
+ * The above copyright notice and this permission notice shall be included in
14
+ * all copies or substantial portions of the Software.
15
+ *
16
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
+ * THE SOFTWARE.
23
+ *
24
+ * Example tree (from http://en.wikipedia.org/wiki/Newick_format):
25
+ *
26
+ * +--0.1--A
27
+ * F-----0.2-----B +-------0.3----C
28
+ * +------------------0.5-----E
29
+ * +---------0.4------D
30
+ *
31
+ * Newick format:
32
+ * (A:0.1,B:0.2,(C:0.3,D:0.4)E:0.5)F;
33
+ *
34
+ * Converted to JSON:
35
+ * {
36
+ * name: "F",
37
+ * children: [
38
+ * {name: "A", length: 0.1},
39
+ * {name: "B", length: 0.2},
40
+ * {
41
+ * name: "E",
42
+ * length: 0.5,
43
+ * children: [
44
+ * {name: "C", length: 0.3},
45
+ * {name: "D", length: 0.4}
46
+ * ]
47
+ * }
48
+ * ]
49
+ * }
50
+ *
51
+ * Converted to JSON, but with no names or lengths:
52
+ * {
53
+ * children: [
54
+ * {}, {}, {
55
+ * children: [{}, {}]
56
+ * }
57
+ * ]
58
+ * }
59
+ */
60
+ export default function parse(s: string): Record<string, any>;