msa-parsers 1.0.5 → 5.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 (59) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +89 -0
  3. package/dist/gff/gffToInterPro.d.ts +1 -1
  4. package/dist/gff/index.d.ts +3 -3
  5. package/dist/gff/index.js +3 -3
  6. package/dist/gff/index.js.map +1 -1
  7. package/dist/gff/interProToGFF.d.ts +1 -1
  8. package/dist/gff/parseGFF.d.ts +1 -1
  9. package/dist/index.d.ts +5 -5
  10. package/dist/index.js +4 -4
  11. package/dist/index.js.map +1 -1
  12. package/dist/msa/A3mMSA.d.ts +1 -1
  13. package/dist/msa/ClustalMSA.d.ts +1 -1
  14. package/dist/msa/EmfMSA.d.ts +1 -1
  15. package/dist/msa/FastaMSA.d.ts +1 -1
  16. package/dist/msa/StockholmMSA.d.ts +3 -3
  17. package/dist/msa/StockholmMSA.js +4 -4
  18. package/dist/msa/StockholmMSA.js.map +1 -1
  19. package/dist/msa/index.d.ts +11 -11
  20. package/dist/msa/index.js +11 -11
  21. package/dist/msa/index.js.map +1 -1
  22. package/dist/util.d.ts +1 -1
  23. package/package.json +19 -10
  24. package/src/gff/gffToInterPro.test.ts +2 -2
  25. package/src/gff/gffToInterPro.ts +1 -1
  26. package/src/gff/index.ts +3 -3
  27. package/src/gff/interProToGFF.test.ts +2 -2
  28. package/src/gff/interProToGFF.ts +1 -1
  29. package/src/gff/parseGFF.test.ts +1 -1
  30. package/src/gff/parseGFF.ts +1 -1
  31. package/src/index.ts +5 -5
  32. package/src/msa/A3mMSA.test.ts +1 -1
  33. package/src/msa/A3mMSA.ts +1 -1
  34. package/src/msa/ClustalMSA.ts +1 -1
  35. package/src/msa/EmfMSA.ts +1 -1
  36. package/src/msa/FastaMSA.ts +1 -1
  37. package/src/msa/StockholmMSA.ts +6 -6
  38. package/src/msa/index.test.ts +4 -4
  39. package/src/msa/index.ts +11 -11
  40. package/src/msa/stockholmParser.test.ts +1 -1
  41. package/src/util.ts +1 -1
  42. package/dist/gff/gffToInterPro.test.d.ts +0 -1
  43. package/dist/gff/gffToInterPro.test.js +0 -181
  44. package/dist/gff/gffToInterPro.test.js.map +0 -1
  45. package/dist/gff/interProToGFF.test.d.ts +0 -1
  46. package/dist/gff/interProToGFF.test.js +0 -189
  47. package/dist/gff/interProToGFF.test.js.map +0 -1
  48. package/dist/gff/parseGFF.test.d.ts +0 -1
  49. package/dist/gff/parseGFF.test.js +0 -92
  50. package/dist/gff/parseGFF.test.js.map +0 -1
  51. package/dist/msa/A3mMSA.test.d.ts +0 -1
  52. package/dist/msa/A3mMSA.test.js +0 -155
  53. package/dist/msa/A3mMSA.test.js.map +0 -1
  54. package/dist/msa/index.test.d.ts +0 -1
  55. package/dist/msa/index.test.js +0 -60
  56. package/dist/msa/index.test.js.map +0 -1
  57. package/dist/msa/stockholmParser.test.d.ts +0 -1
  58. package/dist/msa/stockholmParser.test.js +0 -111
  59. package/dist/msa/stockholmParser.test.js.map +0 -1
@@ -1,60 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,111 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { parse, parseAll, sniff } from './stockholmParser';
3
- describe('stockholmParser', () => {
4
- describe('sniff', () => {
5
- test('returns true for Stockholm format', () => {
6
- expect(sniff('# STOCKHOLM 1.0\n')).toBe(true);
7
- });
8
- test('returns false for non-Stockholm format', () => {
9
- expect(sniff('>seq1\nACDEF')).toBe(false);
10
- expect(sniff('CLUSTAL W')).toBe(false);
11
- });
12
- });
13
- describe('parseAll', () => {
14
- test('parses simple Stockholm file', () => {
15
- const stockholm = `# STOCKHOLM 1.0
16
- seq1 ACDEFGHIKL
17
- seq2 ACDEFGHIKL
18
- //`;
19
- const result = parseAll(stockholm);
20
- expect(result).toHaveLength(1);
21
- expect(result[0]?.seqdata).toEqual({
22
- seq1: 'ACDEFGHIKL',
23
- seq2: 'ACDEFGHIKL',
24
- });
25
- expect(result[0]?.seqname).toEqual(['seq1', 'seq2']);
26
- });
27
- test('parses GF lines', () => {
28
- const stockholm = `# STOCKHOLM 1.0
29
- #=GF DE Description of the alignment
30
- #=GF NH (A:0.1,B:0.2);
31
- seq1 ACDEF
32
- //`;
33
- const result = parseAll(stockholm);
34
- expect(result[0]?.gf.DE).toEqual(['Description of the alignment']);
35
- expect(result[0]?.gf.NH).toEqual(['(A:0.1,B:0.2);']);
36
- });
37
- test('parses GC lines', () => {
38
- const stockholm = `# STOCKHOLM 1.0
39
- seq1 ACDEF
40
- #=GC seq_cons *****
41
- #=GC SS_cons <<>>>
42
- //`;
43
- const result = parseAll(stockholm);
44
- expect(result[0]?.gc.seq_cons).toBe('*****');
45
- expect(result[0]?.gc.SS_cons).toBe('<<>>>');
46
- });
47
- test('parses GS lines', () => {
48
- const stockholm = `# STOCKHOLM 1.0
49
- #=GS seq1 AC P12345
50
- #=GS seq1 DR PDB; 1ABC A; 1-100
51
- seq1 ACDEF
52
- //`;
53
- const result = parseAll(stockholm);
54
- expect(result[0]?.gs.AC?.seq1).toEqual(['P12345']);
55
- expect(result[0]?.gs.DR?.seq1).toEqual(['PDB; 1ABC A; 1-100']);
56
- });
57
- test('parses multiple alignments', () => {
58
- const stockholm = `# STOCKHOLM 1.0
59
- seq1 ACDEF
60
- //
61
- # STOCKHOLM 1.0
62
- seq2 GHIKL
63
- //`;
64
- const result = parseAll(stockholm);
65
- expect(result).toHaveLength(2);
66
- expect(result[0]?.seqdata.seq1).toBe('ACDEF');
67
- expect(result[1]?.seqdata.seq2).toBe('GHIKL');
68
- });
69
- test('concatenates interleaved sequence blocks', () => {
70
- const stockholm = `# STOCKHOLM 1.0
71
- seq1 ACDEF
72
- seq2 GHIKL
73
-
74
- seq1 MNOPQ
75
- seq2 RSTUV
76
- //`;
77
- const result = parseAll(stockholm);
78
- expect(result[0]?.seqdata.seq1).toBe('ACDEFMNOPQ');
79
- expect(result[0]?.seqdata.seq2).toBe('GHIKLRSTUV');
80
- });
81
- test('handles file without trailing //', () => {
82
- const stockholm = `# STOCKHOLM 1.0
83
- seq1 ACDEF`;
84
- const result = parseAll(stockholm);
85
- expect(result).toHaveLength(1);
86
- expect(result[0]?.seqdata.seq1).toBe('ACDEF');
87
- });
88
- });
89
- describe('parse', () => {
90
- test('returns single alignment', () => {
91
- const stockholm = `# STOCKHOLM 1.0
92
- seq1 ACDEF
93
- //`;
94
- const result = parse(stockholm);
95
- expect(result.seqdata.seq1).toBe('ACDEF');
96
- });
97
- test('throws on empty input', () => {
98
- expect(() => parse('')).toThrow('No alignments found');
99
- });
100
- test('throws on multiple alignments', () => {
101
- const stockholm = `# STOCKHOLM 1.0
102
- seq1 ACDEF
103
- //
104
- # STOCKHOLM 1.0
105
- seq2 GHIKL
106
- //`;
107
- expect(() => parse(stockholm)).toThrow('More than one alignment found');
108
- });
109
- });
110
- });
111
- //# sourceMappingURL=stockholmParser.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stockholmParser.test.js","sourceRoot":"","sources":["../../src/msa/stockholmParser.test.ts"],"names":[],"mappings":"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"}