msa-parsers 5.0.7 → 5.0.13

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 (91) hide show
  1. package/dist/gff/gffToInterPro.d.ts +0 -4
  2. package/dist/gff/gffToInterPro.js +0 -7
  3. package/dist/gff/gffToInterPro.js.map +1 -1
  4. package/dist/msa/A3mMSA.d.ts +2 -21
  5. package/dist/msa/A3mMSA.js +3 -67
  6. package/dist/msa/A3mMSA.js.map +1 -1
  7. package/dist/msa/BaseMSA.d.ts +19 -0
  8. package/dist/{src/msa/EmfMSA.js → msa/BaseMSA.js} +15 -32
  9. package/dist/msa/BaseMSA.js.map +1 -0
  10. package/dist/msa/ClustalMSA.d.ts +2 -8
  11. package/dist/msa/ClustalMSA.js +3 -28
  12. package/dist/msa/ClustalMSA.js.map +1 -1
  13. package/dist/msa/EmfMSA.d.ts +2 -9
  14. package/dist/msa/EmfMSA.js +3 -31
  15. package/dist/msa/EmfMSA.js.map +1 -1
  16. package/dist/msa/FastaMSA.d.ts +2 -10
  17. package/dist/msa/FastaMSA.js +3 -34
  18. package/dist/msa/FastaMSA.js.map +1 -1
  19. package/dist/msa/StockholmMSA.d.ts +2 -2
  20. package/dist/msa/StockholmMSA.js +18 -34
  21. package/dist/msa/StockholmMSA.js.map +1 -1
  22. package/package.json +7 -2
  23. package/src/gff/gffToInterPro.ts +0 -11
  24. package/src/msa/A3mMSA.ts +3 -76
  25. package/src/msa/BaseMSA.ts +49 -0
  26. package/src/msa/ClustalMSA.ts +3 -34
  27. package/src/msa/EmfMSA.ts +3 -38
  28. package/src/msa/FastaMSA.ts +3 -42
  29. package/src/msa/StockholmMSA.ts +18 -39
  30. package/dist/src/gff/gffToInterPro.d.ts +0 -20
  31. package/dist/src/gff/gffToInterPro.js +0 -83
  32. package/dist/src/gff/gffToInterPro.js.map +0 -1
  33. package/dist/src/gff/gffToInterPro.test.d.ts +0 -1
  34. package/dist/src/gff/gffToInterPro.test.js +0 -181
  35. package/dist/src/gff/gffToInterPro.test.js.map +0 -1
  36. package/dist/src/gff/index.d.ts +0 -3
  37. package/dist/src/gff/index.js +0 -4
  38. package/dist/src/gff/index.js.map +0 -1
  39. package/dist/src/gff/interProToGFF.d.ts +0 -9
  40. package/dist/src/gff/interProToGFF.js +0 -48
  41. package/dist/src/gff/interProToGFF.js.map +0 -1
  42. package/dist/src/gff/interProToGFF.test.d.ts +0 -1
  43. package/dist/src/gff/interProToGFF.test.js +0 -189
  44. package/dist/src/gff/interProToGFF.test.js.map +0 -1
  45. package/dist/src/gff/parseGFF.d.ts +0 -2
  46. package/dist/src/gff/parseGFF.js +0 -41
  47. package/dist/src/gff/parseGFF.js.map +0 -1
  48. package/dist/src/gff/parseGFF.test.d.ts +0 -1
  49. package/dist/src/gff/parseGFF.test.js +0 -92
  50. package/dist/src/gff/parseGFF.test.js.map +0 -1
  51. package/dist/src/index.d.ts +0 -5
  52. package/dist/src/index.js +0 -9
  53. package/dist/src/index.js.map +0 -1
  54. package/dist/src/msa/A3mMSA.d.ts +0 -33
  55. package/dist/src/msa/A3mMSA.js +0 -282
  56. package/dist/src/msa/A3mMSA.js.map +0 -1
  57. package/dist/src/msa/A3mMSA.test.d.ts +0 -1
  58. package/dist/src/msa/A3mMSA.test.js +0 -261
  59. package/dist/src/msa/A3mMSA.test.js.map +0 -1
  60. package/dist/src/msa/ClustalMSA.d.ts +0 -30
  61. package/dist/src/msa/ClustalMSA.js +0 -53
  62. package/dist/src/msa/ClustalMSA.js.map +0 -1
  63. package/dist/src/msa/EmfMSA.d.ts +0 -27
  64. package/dist/src/msa/EmfMSA.js.map +0 -1
  65. package/dist/src/msa/FastaMSA.d.ts +0 -20
  66. package/dist/src/msa/FastaMSA.js +0 -75
  67. package/dist/src/msa/FastaMSA.js.map +0 -1
  68. package/dist/src/msa/StockholmMSA.d.ts +0 -54
  69. package/dist/src/msa/StockholmMSA.js +0 -113
  70. package/dist/src/msa/StockholmMSA.js.map +0 -1
  71. package/dist/src/msa/index.d.ts +0 -18
  72. package/dist/src/msa/index.js +0 -34
  73. package/dist/src/msa/index.js.map +0 -1
  74. package/dist/src/msa/index.test.d.ts +0 -1
  75. package/dist/src/msa/index.test.js +0 -96
  76. package/dist/src/msa/index.test.js.map +0 -1
  77. package/dist/src/msa/parseNewick.d.ts +0 -60
  78. package/dist/src/msa/parseNewick.js +0 -105
  79. package/dist/src/msa/parseNewick.js.map +0 -1
  80. package/dist/src/msa/stockholmParser.d.ts +0 -22
  81. package/dist/src/msa/stockholmParser.js +0 -141
  82. package/dist/src/msa/stockholmParser.js.map +0 -1
  83. package/dist/src/msa/stockholmParser.test.d.ts +0 -1
  84. package/dist/src/msa/stockholmParser.test.js +0 -111
  85. package/dist/src/msa/stockholmParser.test.js.map +0 -1
  86. package/dist/src/types.d.ts +0 -66
  87. package/dist/src/types.js +0 -2
  88. package/dist/src/types.js.map +0 -1
  89. package/dist/src/util.d.ts +0 -2
  90. package/dist/src/util.js +0 -10
  91. package/dist/src/util.js.map +0 -1
@@ -1,92 +0,0 @@
1
- import { describe, expect, test } from 'vitest';
2
- import { parseGFF } from "./parseGFF.js";
3
- describe('parseGFF', () => {
4
- test('parses empty string', () => {
5
- expect(parseGFF('')).toEqual([]);
6
- expect(parseGFF(undefined)).toEqual([]);
7
- });
8
- test('parses basic GFF3 line', () => {
9
- const gff = 'seq1\tInterProScan\tprotein_match\t10\t50\t.\t+\t.\tName=PF00001';
10
- const result = parseGFF(gff);
11
- expect(result).toHaveLength(1);
12
- expect(result[0]).toEqual({
13
- seq_id: 'seq1',
14
- source: 'InterProScan',
15
- type: 'protein_match',
16
- start: 10,
17
- end: 50,
18
- score: 0,
19
- strand: '+',
20
- phase: '.',
21
- Name: 'PF00001',
22
- });
23
- });
24
- test('parses multiple attributes', () => {
25
- const gff = 'seq1\tPfam\tprotein_match\t10\t50\t1.5\t.\t.\tName=PF00001;signature_desc=7tm_1;description=GPCR';
26
- const result = parseGFF(gff);
27
- expect(result[0]).toMatchObject({
28
- Name: 'PF00001',
29
- signature_desc: '7tm_1',
30
- description: 'GPCR',
31
- });
32
- });
33
- test('handles URL-encoded attribute values', () => {
34
- const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.\tNote=Hello%20World%3B%3D';
35
- const result = parseGFF(gff);
36
- expect(result[0]?.Note).toBe('Hello World;=');
37
- });
38
- test('skips comment lines', () => {
39
- const gff = `##gff-version 3
40
- # This is a comment
41
- seq1\tSource\ttype\t1\t10\t.\t.\t.\tName=test`;
42
- const result = parseGFF(gff);
43
- expect(result).toHaveLength(1);
44
- expect(result[0]?.seq_id).toBe('seq1');
45
- });
46
- test('skips empty lines', () => {
47
- const gff = `seq1\tSource\ttype\t1\t10\t.\t.\t.\tName=test1
48
-
49
- seq2\tSource\ttype\t20\t30\t.\t.\t.\tName=test2`;
50
- const result = parseGFF(gff);
51
- expect(result).toHaveLength(2);
52
- });
53
- test('handles missing attributes column', () => {
54
- const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.';
55
- const result = parseGFF(gff);
56
- expect(result).toHaveLength(1);
57
- expect(result[0]?.seq_id).toBe('seq1');
58
- });
59
- test('handles partial GFF lines gracefully', () => {
60
- const gff = 'seq1\tSource\ttype';
61
- const result = parseGFF(gff);
62
- expect(result).toHaveLength(1);
63
- expect(result[0]).toMatchObject({
64
- seq_id: 'seq1',
65
- source: 'Source',
66
- type: 'type',
67
- start: 0,
68
- end: 0,
69
- });
70
- });
71
- test('parses numeric score', () => {
72
- const gff = 'seq1\tSource\ttype\t1\t10\t45.6\t.\t.\tName=test';
73
- const result = parseGFF(gff);
74
- expect(result[0]?.score).toBe(45.6);
75
- });
76
- test('handles comma-separated values in attributes', () => {
77
- const gff = 'seq1\tSource\ttype\t1\t10\t.\t.\t.\tOntology_term=GO:0001,GO:0002';
78
- const result = parseGFF(gff);
79
- expect(result[0]?.Ontology_term).toBe('GO:0001 GO:0002');
80
- });
81
- test('parses multiple lines', () => {
82
- const gff = `seq1\tPfam\tprotein_match\t10\t50\t.\t.\t.\tName=PF00001
83
- seq1\tSMART\tprotein_match\t60\t100\t.\t.\t.\tName=SM00001
84
- seq2\tPfam\tprotein_match\t5\t40\t.\t.\t.\tName=PF00002`;
85
- const result = parseGFF(gff);
86
- expect(result).toHaveLength(3);
87
- expect(result[0]?.seq_id).toBe('seq1');
88
- expect(result[1]?.seq_id).toBe('seq1');
89
- expect(result[2]?.seq_id).toBe('seq2');
90
- });
91
- });
92
- //# sourceMappingURL=parseGFF.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseGFF.test.js","sourceRoot":"","sources":["../../../src/gff/parseGFF.test.ts"],"names":[],"mappings":"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"}
@@ -1,5 +0,0 @@
1
- export * from './types.ts';
2
- export { generateNodeIds } from './util.ts';
3
- export { A3mMSA, ClustalMSA, EmfMSA, FastaMSA, StockholmMSA, getUngappedSequence, parseEmfTree, parseMSA, parseNewick, stockholmSniff, } from './msa/index.ts';
4
- export type { MSAParserType } from './msa/index.ts';
5
- export { gffToInterProResponse, gffToInterProResults, interProResponseToGFF, interProToGFF, parseGFF, } from './gff/index.ts';
package/dist/src/index.js DELETED
@@ -1,9 +0,0 @@
1
- // Types
2
- export * from "./types.js";
3
- // Utilities
4
- export { generateNodeIds } from "./util.js";
5
- // MSA parsers
6
- export { A3mMSA, ClustalMSA, EmfMSA, FastaMSA, StockholmMSA, getUngappedSequence, parseEmfTree, parseMSA, parseNewick, stockholmSniff, } from "./msa/index.js";
7
- // GFF parsing
8
- export { gffToInterProResponse, gffToInterProResults, interProResponseToGFF, interProToGFF, parseGFF, } from "./gff/index.js";
9
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAA;AAE1B,YAAY;AACZ,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAA;AAE3C,cAAc;AACd,OAAO,EACL,MAAM,EACN,UAAU,EACV,MAAM,EACN,QAAQ,EACR,YAAY,EACZ,mBAAmB,EACnB,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,cAAc,GACf,MAAM,gBAAgB,CAAA;AAGvB,cAAc;AACd,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,aAAa,EACb,QAAQ,GACT,MAAM,gBAAgB,CAAA"}
@@ -1,33 +0,0 @@
1
- import type { NodeWithIds } from '../types.ts';
2
- export default class A3mMSA {
3
- private MSA;
4
- private orderedNames;
5
- constructor(text: string);
6
- /**
7
- * Detect if text is likely A3M format
8
- */
9
- static sniff(text: string): boolean;
10
- /**
11
- * Expand A3M format to standard aligned format.
12
- *
13
- * In A3M, lowercase characters are insertions that implicitly introduce
14
- * gaps in sequences that don't have an insert at that position.
15
- * Gaps (-) following match columns in sequences without inserts align
16
- * with lowercase inserts in other sequences.
17
- */
18
- private expandA3M;
19
- getMSA(): {
20
- seqdata: Record<string, string>;
21
- };
22
- getRowData(): undefined;
23
- getNames(): string[];
24
- getRow(name: string): string;
25
- getWidth(): number;
26
- getStructures(): {};
27
- get alignmentNames(): never[];
28
- getHeader(): {};
29
- getTree(): NodeWithIds;
30
- get seqConsensus(): undefined;
31
- get secondaryStructureConsensus(): undefined;
32
- get tracks(): never[];
33
- }
@@ -1,282 +0,0 @@
1
- /**
2
- * A3M Format Parser
3
- *
4
- * The A3M format consists of aligned FASTA, in which alignments are shown with:
5
- * - Inserts as lowercase characters
6
- * - Matches as uppercase characters
7
- * - Deletions as '-'
8
- * - Gaps aligned to inserts as '.'
9
- *
10
- * Note that gaps aligned to inserts can be omitted in the A3M format.
11
- *
12
- * Example:
13
- * >query
14
- * ETESMKTVRIREKIKKFLGDRPRNTAEILEHINSTMRHGTTSQQLGNVLSKDKDIVKVGYIKRSGILSGGYDICEWATRNWVAEHCPEWTE
15
- * >seq1
16
- * ----MRTTRLRQKIKKFLNERGeANTTEILEHVNSTMRHGTTPQQLGNVLSKDKDILKVATTKRGGALSGRYEICVWTLRP-----------
17
- *
18
- * In the above, 'e' after 'G' in seq1 is a lowercase insert.
19
- *
20
- * @see https://yanglab.qd.sdu.edu.cn/trRosetta/msa_format.html
21
- */
22
- // Char code helpers for fast character classification
23
- const CODE_A = 65; // 'A'
24
- const CODE_Z = 90; // 'Z'
25
- const CODE_a = 97; // 'a'
26
- const CODE_z = 122; // 'z'
27
- const CODE_DASH = 45; // '-'
28
- const CODE_DOT = 46; // '.'
29
- function isLower(code) {
30
- return code >= CODE_a && code <= CODE_z;
31
- }
32
- export default class A3mMSA {
33
- MSA;
34
- orderedNames;
35
- constructor(text) {
36
- const rawSeqs = [];
37
- const names = [];
38
- // First pass: parse sequences (like FASTA), preserving order
39
- for (const entry of text.split('>')) {
40
- if (!/\S/.test(entry)) {
41
- continue;
42
- }
43
- const newlineIdx = entry.indexOf('\n');
44
- if (newlineIdx === -1) {
45
- continue;
46
- }
47
- const defLine = entry.slice(0, newlineIdx);
48
- const spaceIdx = defLine.indexOf(' ');
49
- const id = spaceIdx === -1 ? defLine : defLine.slice(0, spaceIdx);
50
- if (id) {
51
- rawSeqs.push(entry.slice(newlineIdx + 1).replaceAll(/\s/g, ''));
52
- names.push(id);
53
- }
54
- }
55
- this.orderedNames = names;
56
- this.MSA = { seqdata: this.expandA3M(rawSeqs, names) };
57
- }
58
- /**
59
- * Detect if text is likely A3M format
60
- */
61
- static sniff(text) {
62
- if (!text.startsWith('>')) {
63
- return false;
64
- }
65
- const seqs = [];
66
- for (const entry of text.split('>')) {
67
- if (!/\S/.test(entry)) {
68
- continue;
69
- }
70
- const newlineIdx = entry.indexOf('\n');
71
- if (newlineIdx === -1) {
72
- continue;
73
- }
74
- const seq = entry.slice(newlineIdx + 1).replaceAll(/\s/g, '');
75
- if (seq) {
76
- seqs.push(seq);
77
- }
78
- }
79
- if (seqs.length < 2) {
80
- return false;
81
- }
82
- // Check for lowercase and compute match column lengths in single pass per sequence
83
- // In A3M, match columns = uppercase letters + dashes (deletions)
84
- let hasLowercase = false;
85
- let firstMatchLen = -1;
86
- let sameMatchLength = true;
87
- for (const seq of seqs) {
88
- let matchLen = 0;
89
- for (let i = 0; i < seq.length; i++) {
90
- const code = seq.charCodeAt(i);
91
- if (isLower(code)) {
92
- hasLowercase = true;
93
- }
94
- else if (code >= CODE_A && code <= CODE_Z || code === CODE_DASH) {
95
- // Uppercase letters and dashes are match columns
96
- matchLen++;
97
- }
98
- }
99
- if (firstMatchLen === -1) {
100
- firstMatchLen = matchLen;
101
- }
102
- else {
103
- if (matchLen !== firstMatchLen) {
104
- sameMatchLength = false;
105
- }
106
- }
107
- }
108
- return hasLowercase && sameMatchLength;
109
- }
110
- /**
111
- * Expand A3M format to standard aligned format.
112
- *
113
- * In A3M, lowercase characters are insertions that implicitly introduce
114
- * gaps in sequences that don't have an insert at that position.
115
- * Gaps (-) following match columns in sequences without inserts align
116
- * with lowercase inserts in other sequences.
117
- */
118
- expandA3M(rawSeqs, names) {
119
- const numSeqs = names.length;
120
- if (numSeqs === 0) {
121
- return {};
122
- }
123
- // Parse sequences: extract match chars (uppercase only) and insert content
124
- // For each sequence, track: matchChars, insertContent (after each match)
125
- const matchChars = [];
126
- const insertContent = [];
127
- for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
128
- const seq = rawSeqs[seqIdx];
129
- const matches = [];
130
- const inserts = [];
131
- let i = 0;
132
- while (i < seq.length) {
133
- const code = seq.charCodeAt(i);
134
- if (code >= CODE_A && code <= CODE_Z || code === CODE_DASH) {
135
- // Uppercase letter or dash - match column (dash = deletion)
136
- matches.push(seq[i]);
137
- // Collect following lowercase/dot characters as insert content
138
- // Note: dash is NOT insert content, it's a match column
139
- let ins = '';
140
- let j = i + 1;
141
- while (j < seq.length) {
142
- const c = seq.charCodeAt(j);
143
- if (isLower(c) || c === CODE_DOT) {
144
- ins += seq[j];
145
- j++;
146
- }
147
- else {
148
- break;
149
- }
150
- }
151
- inserts.push(ins);
152
- i = j;
153
- }
154
- else if (code === CODE_DOT) {
155
- // Leading dot (gap aligned to insert) - skip
156
- i++;
157
- }
158
- else if (isLower(code)) {
159
- // Leading insert before first match
160
- let ins = '';
161
- while (i < seq.length && isLower(seq.charCodeAt(i))) {
162
- ins += seq[i];
163
- i++;
164
- }
165
- // Add empty match with this insert
166
- matches.push('');
167
- inserts.push(ins);
168
- }
169
- else {
170
- i++;
171
- }
172
- }
173
- matchChars.push(matches);
174
- insertContent.push(inserts);
175
- }
176
- // Find number of match positions (should be same for all valid A3M)
177
- const numPositions = Math.max(...matchChars.map(m => m.length), 0);
178
- // Find max insert length at each position (only count lowercase, not gaps)
179
- const maxInserts = new Array(numPositions).fill(0);
180
- for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
181
- const inserts = insertContent[seqIdx];
182
- for (let pos = 0; pos < inserts.length; pos++) {
183
- // Count only lowercase characters as actual inserts
184
- let lcCount = 0;
185
- for (const c of inserts[pos]) {
186
- if (isLower(c.charCodeAt(0))) {
187
- lcCount++;
188
- }
189
- }
190
- if (lcCount > maxInserts[pos]) {
191
- maxInserts[pos] = lcCount;
192
- }
193
- }
194
- }
195
- // Build expanded sequences
196
- const expanded = {};
197
- for (let seqIdx = 0; seqIdx < numSeqs; seqIdx++) {
198
- const matches = matchChars[seqIdx];
199
- const inserts = insertContent[seqIdx];
200
- const result = [];
201
- for (let pos = 0; pos < numPositions; pos++) {
202
- const maxIns = maxInserts[pos];
203
- if (pos < matches.length) {
204
- const matchChar = matches[pos];
205
- const insContent = inserts[pos] || '';
206
- // Add match character (or gap if empty)
207
- result.push(matchChar || '-');
208
- // Process insert content
209
- let lcContent = '';
210
- for (const c of insContent) {
211
- if (isLower(c.charCodeAt(0))) {
212
- lcContent += c.toUpperCase();
213
- }
214
- }
215
- // Add the insert content (uppercased)
216
- result.push(lcContent);
217
- // Pad with gaps to match max insert length
218
- const padding = maxIns - lcContent.length;
219
- if (padding > 0) {
220
- result.push('.'.repeat(padding));
221
- }
222
- }
223
- else {
224
- // This sequence is shorter - add gaps
225
- result.push('-');
226
- if (maxIns > 0) {
227
- result.push('.'.repeat(maxIns));
228
- }
229
- }
230
- }
231
- expanded[names[seqIdx]] = result.join('');
232
- }
233
- return expanded;
234
- }
235
- getMSA() {
236
- return this.MSA;
237
- }
238
- getRowData() {
239
- return undefined;
240
- }
241
- getNames() {
242
- return this.orderedNames;
243
- }
244
- getRow(name) {
245
- return this.MSA.seqdata[name] || '';
246
- }
247
- getWidth() {
248
- const name = Object.keys(this.MSA.seqdata)[0];
249
- return name ? this.getRow(name).length : 0;
250
- }
251
- getStructures() {
252
- return {};
253
- }
254
- get alignmentNames() {
255
- return [];
256
- }
257
- getHeader() {
258
- return {};
259
- }
260
- getTree() {
261
- return {
262
- id: 'root',
263
- name: 'root',
264
- noTree: true,
265
- children: this.getNames().map(name => ({
266
- id: name,
267
- children: [],
268
- name,
269
- })),
270
- };
271
- }
272
- get seqConsensus() {
273
- return undefined;
274
- }
275
- get secondaryStructureConsensus() {
276
- return undefined;
277
- }
278
- get tracks() {
279
- return [];
280
- }
281
- }
282
- //# sourceMappingURL=A3mMSA.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"A3mMSA.js","sourceRoot":"","sources":["../../../src/msa/A3mMSA.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};