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.
- package/LICENSE +21 -0
- package/README.md +89 -0
- package/dist/gff/gffToInterPro.d.ts +1 -1
- package/dist/gff/index.d.ts +3 -3
- package/dist/gff/index.js +3 -3
- package/dist/gff/index.js.map +1 -1
- package/dist/gff/interProToGFF.d.ts +1 -1
- package/dist/gff/parseGFF.d.ts +1 -1
- package/dist/index.d.ts +5 -5
- package/dist/index.js +4 -4
- package/dist/index.js.map +1 -1
- package/dist/msa/A3mMSA.d.ts +1 -1
- package/dist/msa/ClustalMSA.d.ts +1 -1
- package/dist/msa/EmfMSA.d.ts +1 -1
- package/dist/msa/FastaMSA.d.ts +1 -1
- package/dist/msa/StockholmMSA.d.ts +3 -3
- package/dist/msa/StockholmMSA.js +4 -4
- package/dist/msa/StockholmMSA.js.map +1 -1
- package/dist/msa/index.d.ts +11 -11
- package/dist/msa/index.js +11 -11
- package/dist/msa/index.js.map +1 -1
- package/dist/util.d.ts +1 -1
- package/package.json +19 -10
- package/src/gff/gffToInterPro.test.ts +2 -2
- package/src/gff/gffToInterPro.ts +1 -1
- package/src/gff/index.ts +3 -3
- package/src/gff/interProToGFF.test.ts +2 -2
- package/src/gff/interProToGFF.ts +1 -1
- package/src/gff/parseGFF.test.ts +1 -1
- package/src/gff/parseGFF.ts +1 -1
- package/src/index.ts +5 -5
- package/src/msa/A3mMSA.test.ts +1 -1
- package/src/msa/A3mMSA.ts +1 -1
- package/src/msa/ClustalMSA.ts +1 -1
- package/src/msa/EmfMSA.ts +1 -1
- package/src/msa/FastaMSA.ts +1 -1
- package/src/msa/StockholmMSA.ts +6 -6
- package/src/msa/index.test.ts +4 -4
- package/src/msa/index.ts +11 -11
- package/src/msa/stockholmParser.test.ts +1 -1
- package/src/util.ts +1 -1
- package/dist/gff/gffToInterPro.test.d.ts +0 -1
- package/dist/gff/gffToInterPro.test.js +0 -181
- package/dist/gff/gffToInterPro.test.js.map +0 -1
- package/dist/gff/interProToGFF.test.d.ts +0 -1
- package/dist/gff/interProToGFF.test.js +0 -189
- package/dist/gff/interProToGFF.test.js.map +0 -1
- package/dist/gff/parseGFF.test.d.ts +0 -1
- package/dist/gff/parseGFF.test.js +0 -92
- package/dist/gff/parseGFF.test.js.map +0 -1
- package/dist/msa/A3mMSA.test.d.ts +0 -1
- package/dist/msa/A3mMSA.test.js +0 -155
- package/dist/msa/A3mMSA.test.js.map +0 -1
- package/dist/msa/index.test.d.ts +0 -1
- package/dist/msa/index.test.js +0 -60
- package/dist/msa/index.test.js.map +0 -1
- package/dist/msa/stockholmParser.test.d.ts +0 -1
- package/dist/msa/stockholmParser.test.js +0 -111
- package/dist/msa/stockholmParser.test.js.map +0 -1
package/dist/msa/index.test.js
DELETED
|
@@ -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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"}
|