clustal-js 2.0.10 → 2.0.12

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/dist/index.d.ts CHANGED
@@ -1,31 +1,27 @@
1
1
  export declare function parseClustalIter(arr: Iterator<string>): {
2
2
  consensus: string;
3
3
  alns: {
4
- id: string;
4
+ id: string | undefined;
5
5
  seq: string;
6
6
  }[];
7
7
  header: {
8
8
  info: string;
9
- version: string;
9
+ version: string | undefined;
10
10
  };
11
11
  };
12
12
  export interface Row {
13
13
  id: string;
14
14
  seq: string;
15
15
  }
16
- export declare function parsePairwiseIter(arr: string): {
17
- consensus: string;
18
- alns: [Row, Row];
19
- };
20
16
  export declare function parse(contents: string): {
21
17
  consensus: string;
22
18
  alns: {
23
- id: string;
19
+ id: string | undefined;
24
20
  seq: string;
25
21
  }[];
26
22
  header: {
27
23
  info: string;
28
- version: string;
24
+ version: string | undefined;
29
25
  };
30
26
  };
31
27
  export declare function parsePairwise(contents: string): {
package/dist/index.js CHANGED
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.parseClustalIter = parseClustalIter;
4
- exports.parsePairwiseIter = parsePairwiseIter;
5
4
  exports.parse = parse;
6
5
  exports.parsePairwise = parsePairwise;
7
6
  const pairwise_ts_1 = require("./pairwise.js");
@@ -23,32 +22,34 @@ function parseClustalIter(arr) {
23
22
  }
24
23
  return { consensus, alns, header };
25
24
  }
26
- function parsePairwiseIter(arr) {
27
- const res = (0, pairwise_ts_1.parsePairwiseBlocks)(arr.split('\n')[Symbol.iterator]());
25
+ function parse(contents) {
26
+ const iter = contents.split('\n')[Symbol.iterator]();
27
+ return parseClustalIter(iter);
28
+ }
29
+ function parsePairwise(contents) {
30
+ const filtered = contents
31
+ .split('\n')
32
+ .filter(f => !f.startsWith('#'))
33
+ .join('\n');
34
+ const res = (0, pairwise_ts_1.parsePairwiseBlocks)(filtered.split('\n')[Symbol.iterator]());
28
35
  if (res === undefined) {
29
36
  throw new Error('No blocks parsed');
30
37
  }
31
38
  const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }));
32
39
  const { consensus } = res;
33
- if (consensus.length != alns[0].seq.length) {
34
- throw new Error(`Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`);
40
+ const firstAln = alns[0];
41
+ if (!firstAln) {
42
+ throw new Error('No alignments found');
43
+ }
44
+ if (consensus.length !== firstAln.seq.length) {
45
+ throw new Error(`Consensus length !== sequence length. Con ${consensus.length} seq ${firstAln.seq.length}`);
35
46
  }
36
47
  if (alns.length !== 2) {
37
- throw new Error('More than two sequences in pairwise alignment');
48
+ throw new Error(`Expected exactly 2 sequences in pairwise alignment, got ${alns.length}`);
38
49
  }
39
50
  return {
40
51
  consensus,
41
52
  alns: alns,
42
53
  };
43
54
  }
44
- function parse(contents) {
45
- const iter = contents.split('\n')[Symbol.iterator]();
46
- return parseClustalIter(iter);
47
- }
48
- function parsePairwise(contents) {
49
- return parsePairwiseIter(contents
50
- .split('\n')
51
- .filter(f => !f.startsWith('#'))
52
- .join('\n'));
53
- }
54
55
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,3 @@
1
- export declare function getSeqBounds(line: string, seqIndex: number): readonly [number, number];
2
1
  export declare function parsePairwiseBlock(arr: Iterator<string>): {
3
2
  ids: string[];
4
3
  seqs: string[];
package/dist/pairwise.js CHANGED
@@ -1,6 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSeqBounds = getSeqBounds;
4
3
  exports.parsePairwiseBlock = parsePairwiseBlock;
5
4
  exports.parsePairwiseBlocks = parsePairwiseBlocks;
6
5
  const util_ts_1 = require("./util.js");
@@ -50,17 +49,28 @@ function parsePairwiseBlock(arr) {
50
49
  return undefined;
51
50
  }
52
51
  const fields = block.map(s => s.trim().split(/\s+/));
53
- const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1;
52
+ const firstField = fields[0];
53
+ if (!firstField) {
54
+ return undefined;
55
+ }
56
+ const seqIndex = hasPositionNumbers(firstField) ? 2 : 1;
54
57
  const [start, end] = getSeqBounds(block[0], seqIndex);
55
58
  const ids = fields.map(s => s[0]);
56
59
  const seqs = fields.map(s => s[seqIndex]);
57
60
  let consensus = consensusLine.slice(start, end);
58
61
  // handle if the consensus trailing whitespace got trimmed
59
- const remainder = seqs[0].length - consensus.length;
60
- if (remainder > 0) {
61
- consensus += ' '.repeat(remainder);
62
+ const firstSeq = seqs[0];
63
+ if (firstSeq) {
64
+ const remainder = firstSeq.length - consensus.length;
65
+ if (remainder > 0) {
66
+ consensus += ' '.repeat(remainder);
67
+ }
62
68
  }
63
- return { ids, seqs, consensus };
69
+ return {
70
+ ids,
71
+ seqs,
72
+ consensus,
73
+ };
64
74
  }
65
75
  function parsePairwiseBlocks(arr) {
66
76
  let block;
@@ -1 +1 @@
1
- {"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"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"}
package/dist/util.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export declare function parseVersion(line: string): string;
1
+ export declare function parseVersion(line: string): string | undefined;
2
2
  export declare function parseHeader(info: string): {
3
3
  info: string;
4
- version: string;
4
+ version: string | undefined;
5
5
  };
6
6
  export declare function getFirstNonEmptyLine(arr: Iterator<string>): string;
7
7
  export declare function getSeqBounds(line: string): readonly [number, number];
package/dist/util.js CHANGED
@@ -42,7 +42,7 @@ function parseBlock(arr) {
42
42
  return undefined;
43
43
  }
44
44
  while (line) {
45
- if (line[0].startsWith(' ')) {
45
+ if (line.startsWith(' ')) {
46
46
  consensusLine = line;
47
47
  }
48
48
  else {
@@ -60,7 +60,11 @@ function parseBlock(arr) {
60
60
  if (remainder) {
61
61
  consensus += ' '.repeat(remainder);
62
62
  }
63
- return { ids, seqs, consensus };
63
+ return {
64
+ ids,
65
+ seqs,
66
+ consensus,
67
+ };
64
68
  }
65
69
  function parseBlocks(arr) {
66
70
  let block;
package/dist/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/esm/index.d.ts CHANGED
@@ -1,31 +1,27 @@
1
1
  export declare function parseClustalIter(arr: Iterator<string>): {
2
2
  consensus: string;
3
3
  alns: {
4
- id: string;
4
+ id: string | undefined;
5
5
  seq: string;
6
6
  }[];
7
7
  header: {
8
8
  info: string;
9
- version: string;
9
+ version: string | undefined;
10
10
  };
11
11
  };
12
12
  export interface Row {
13
13
  id: string;
14
14
  seq: string;
15
15
  }
16
- export declare function parsePairwiseIter(arr: string): {
17
- consensus: string;
18
- alns: [Row, Row];
19
- };
20
16
  export declare function parse(contents: string): {
21
17
  consensus: string;
22
18
  alns: {
23
- id: string;
19
+ id: string | undefined;
24
20
  seq: string;
25
21
  }[];
26
22
  header: {
27
23
  info: string;
28
- version: string;
24
+ version: string | undefined;
29
25
  };
30
26
  };
31
27
  export declare function parsePairwise(contents: string): {
package/esm/index.js CHANGED
@@ -17,32 +17,34 @@ export function parseClustalIter(arr) {
17
17
  }
18
18
  return { consensus, alns, header };
19
19
  }
20
- export function parsePairwiseIter(arr) {
21
- const res = parsePairwiseBlocks(arr.split('\n')[Symbol.iterator]());
20
+ export function parse(contents) {
21
+ const iter = contents.split('\n')[Symbol.iterator]();
22
+ return parseClustalIter(iter);
23
+ }
24
+ export function parsePairwise(contents) {
25
+ const filtered = contents
26
+ .split('\n')
27
+ .filter(f => !f.startsWith('#'))
28
+ .join('\n');
29
+ const res = parsePairwiseBlocks(filtered.split('\n')[Symbol.iterator]());
22
30
  if (res === undefined) {
23
31
  throw new Error('No blocks parsed');
24
32
  }
25
33
  const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }));
26
34
  const { consensus } = res;
27
- if (consensus.length != alns[0].seq.length) {
28
- throw new Error(`Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`);
35
+ const firstAln = alns[0];
36
+ if (!firstAln) {
37
+ throw new Error('No alignments found');
38
+ }
39
+ if (consensus.length !== firstAln.seq.length) {
40
+ throw new Error(`Consensus length !== sequence length. Con ${consensus.length} seq ${firstAln.seq.length}`);
29
41
  }
30
42
  if (alns.length !== 2) {
31
- throw new Error('More than two sequences in pairwise alignment');
43
+ throw new Error(`Expected exactly 2 sequences in pairwise alignment, got ${alns.length}`);
32
44
  }
33
45
  return {
34
46
  consensus,
35
47
  alns: alns,
36
48
  };
37
49
  }
38
- export function parse(contents) {
39
- const iter = contents.split('\n')[Symbol.iterator]();
40
- return parseClustalIter(iter);
41
- }
42
- export function parsePairwise(contents) {
43
- return parsePairwiseIter(contents
44
- .split('\n')
45
- .filter(f => !f.startsWith('#'))
46
- .join('\n'));
47
- }
48
50
  //# sourceMappingURL=index.js.map
package/esm/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/esm/pairwise.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- export declare function getSeqBounds(line: string, seqIndex: number): readonly [number, number];
2
1
  export declare function parsePairwiseBlock(arr: Iterator<string>): {
3
2
  ids: string[];
4
3
  seqs: string[];
package/esm/pairwise.js CHANGED
@@ -14,7 +14,7 @@ function isSequenceLine(line) {
14
14
  function hasPositionNumbers(fields) {
15
15
  return fields.length >= 3 && /^\d+$/.test(fields[1]);
16
16
  }
17
- export function getSeqBounds(line, seqIndex) {
17
+ function getSeqBounds(line, seqIndex) {
18
18
  const trimmed = line.trim();
19
19
  const fields = trimmed.split(/\s+/);
20
20
  const seq = fields[seqIndex];
@@ -45,17 +45,28 @@ export function parsePairwiseBlock(arr) {
45
45
  return undefined;
46
46
  }
47
47
  const fields = block.map(s => s.trim().split(/\s+/));
48
- const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1;
48
+ const firstField = fields[0];
49
+ if (!firstField) {
50
+ return undefined;
51
+ }
52
+ const seqIndex = hasPositionNumbers(firstField) ? 2 : 1;
49
53
  const [start, end] = getSeqBounds(block[0], seqIndex);
50
54
  const ids = fields.map(s => s[0]);
51
55
  const seqs = fields.map(s => s[seqIndex]);
52
56
  let consensus = consensusLine.slice(start, end);
53
57
  // handle if the consensus trailing whitespace got trimmed
54
- const remainder = seqs[0].length - consensus.length;
55
- if (remainder > 0) {
56
- consensus += ' '.repeat(remainder);
58
+ const firstSeq = seqs[0];
59
+ if (firstSeq) {
60
+ const remainder = firstSeq.length - consensus.length;
61
+ if (remainder > 0) {
62
+ consensus += ' '.repeat(remainder);
63
+ }
57
64
  }
58
- return { ids, seqs, consensus };
65
+ return {
66
+ ids,
67
+ seqs,
68
+ consensus,
69
+ };
59
70
  }
60
71
  export function parsePairwiseBlocks(arr) {
61
72
  let block;
@@ -1 +1 @@
1
- {"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"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"}
package/esm/util.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- export declare function parseVersion(line: string): string;
1
+ export declare function parseVersion(line: string): string | undefined;
2
2
  export declare function parseHeader(info: string): {
3
3
  info: string;
4
- version: string;
4
+ version: string | undefined;
5
5
  };
6
6
  export declare function getFirstNonEmptyLine(arr: Iterator<string>): string;
7
7
  export declare function getSeqBounds(line: string): readonly [number, number];
package/esm/util.js CHANGED
@@ -34,7 +34,7 @@ export function parseBlock(arr) {
34
34
  return undefined;
35
35
  }
36
36
  while (line) {
37
- if (line[0].startsWith(' ')) {
37
+ if (line.startsWith(' ')) {
38
38
  consensusLine = line;
39
39
  }
40
40
  else {
@@ -52,7 +52,11 @@ export function parseBlock(arr) {
52
52
  if (remainder) {
53
53
  consensus += ' '.repeat(remainder);
54
54
  }
55
- return { ids, seqs, consensus };
55
+ return {
56
+ ids,
57
+ seqs,
58
+ consensus,
59
+ };
56
60
  }
57
61
  export function parseBlocks(arr) {
58
62
  let block;
package/esm/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "clustal-js",
3
- "version": "2.0.10",
3
+ "version": "2.0.12",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "exports": {
package/src/index.ts CHANGED
@@ -15,9 +15,9 @@ export function parseClustalIter(arr: Iterator<string>) {
15
15
 
16
16
  const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }))
17
17
  const { consensus } = res
18
- if (consensus.length != alns[0].seq.length) {
18
+ if (consensus.length != alns[0]!.seq.length) {
19
19
  throw new Error(
20
- `Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`,
20
+ `Consensus length != sequence length. Con ${consensus.length} seq ${alns[0]!.seq.length}`,
21
21
  )
22
22
  }
23
23
 
@@ -28,38 +28,41 @@ export interface Row {
28
28
  id: string
29
29
  seq: string
30
30
  }
31
- export function parsePairwiseIter(arr: string) {
32
- const res = parsePairwiseBlocks(arr.split('\n')[Symbol.iterator]())
31
+
32
+ export function parse(contents: string) {
33
+ const iter = contents.split('\n')[Symbol.iterator]()
34
+ return parseClustalIter(iter)
35
+ }
36
+
37
+ export function parsePairwise(contents: string) {
38
+ const filtered = contents
39
+ .split('\n')
40
+ .filter(f => !f.startsWith('#'))
41
+ .join('\n')
42
+
43
+ const res = parsePairwiseBlocks(filtered.split('\n')[Symbol.iterator]())
33
44
  if (res === undefined) {
34
45
  throw new Error('No blocks parsed')
35
46
  }
36
47
 
37
48
  const alns = res.seqs.map((n, index) => ({ id: res.ids[index], seq: n }))
38
49
  const { consensus } = res
39
- if (consensus.length != alns[0].seq.length) {
50
+ const firstAln = alns[0]
51
+ if (!firstAln) {
52
+ throw new Error('No alignments found')
53
+ }
54
+ if (consensus.length !== firstAln.seq.length) {
40
55
  throw new Error(
41
- `Consensus length != sequence length. Con ${consensus.length} seq ${alns[0].seq.length}`,
56
+ `Consensus length !== sequence length. Con ${consensus.length} seq ${firstAln.seq.length}`,
42
57
  )
43
58
  }
44
59
  if (alns.length !== 2) {
45
- throw new Error('More than two sequences in pairwise alignment')
60
+ throw new Error(
61
+ `Expected exactly 2 sequences in pairwise alignment, got ${alns.length}`,
62
+ )
46
63
  }
47
64
  return {
48
65
  consensus,
49
66
  alns: alns as [Row, Row],
50
67
  }
51
68
  }
52
-
53
- export function parse(contents: string) {
54
- const iter = contents.split('\n')[Symbol.iterator]()
55
- return parseClustalIter(iter)
56
- }
57
-
58
- export function parsePairwise(contents: string) {
59
- return parsePairwiseIter(
60
- contents
61
- .split('\n')
62
- .filter(f => !f.startsWith('#'))
63
- .join('\n'),
64
- )
65
- }
package/src/pairwise.ts CHANGED
@@ -15,14 +15,17 @@ function isSequenceLine(line: string) {
15
15
  }
16
16
 
17
17
  function hasPositionNumbers(fields: string[]) {
18
- return fields.length >= 3 && /^\d+$/.test(fields[1])
18
+ return fields.length >= 3 && /^\d+$/.test(fields[1]!)
19
19
  }
20
20
 
21
- export function getSeqBounds(line: string, seqIndex: number) {
21
+ function getSeqBounds(line: string, seqIndex: number) {
22
22
  const trimmed = line.trim()
23
23
  const fields = trimmed.split(/\s+/)
24
- const seq = fields[seqIndex]
25
- const seqStart = line.indexOf(seq, line.indexOf(fields[0]) + fields[0].length)
24
+ const seq = fields[seqIndex]!
25
+ const seqStart = line.indexOf(
26
+ seq,
27
+ line.indexOf(fields[0]!) + fields[0]!.length,
28
+ )
26
29
  return [seqStart, seqStart + seq.length] as const
27
30
  }
28
31
 
@@ -51,18 +54,29 @@ export function parsePairwiseBlock(arr: Iterator<string>) {
51
54
  }
52
55
 
53
56
  const fields = block.map(s => s.trim().split(/\s+/))
54
- const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1
55
- const [start, end] = getSeqBounds(block[0], seqIndex)
56
- const ids = fields.map(s => s[0])
57
- const seqs = fields.map(s => s[seqIndex])
57
+ const firstField = fields[0]
58
+ if (!firstField) {
59
+ return undefined
60
+ }
61
+ const seqIndex = hasPositionNumbers(firstField) ? 2 : 1
62
+ const [start, end] = getSeqBounds(block[0]!, seqIndex)
63
+ const ids = fields.map(s => s[0]!)
64
+ const seqs = fields.map(s => s[seqIndex]!)
58
65
  let consensus = consensusLine.slice(start, end)
59
66
 
60
67
  // handle if the consensus trailing whitespace got trimmed
61
- const remainder = seqs[0].length - consensus.length
62
- if (remainder > 0) {
63
- consensus += ' '.repeat(remainder)
68
+ const firstSeq = seqs[0]
69
+ if (firstSeq) {
70
+ const remainder = firstSeq.length - consensus.length
71
+ if (remainder > 0) {
72
+ consensus += ' '.repeat(remainder)
73
+ }
74
+ }
75
+ return {
76
+ ids,
77
+ seqs,
78
+ consensus,
64
79
  }
65
- return { ids, seqs, consensus }
66
80
  }
67
81
 
68
82
  export function parsePairwiseBlocks(arr: Iterator<string>) {
@@ -71,7 +85,7 @@ export function parsePairwiseBlocks(arr: Iterator<string>) {
71
85
  if (res !== undefined) {
72
86
  while ((block = parsePairwiseBlock(arr))) {
73
87
  for (let i = 0; i < block.seqs.length; i++) {
74
- res.seqs[i] += block.seqs[i]
88
+ res.seqs[i]! += block.seqs[i]!
75
89
  }
76
90
  res.consensus += block.consensus
77
91
  }
package/src/util.ts CHANGED
@@ -27,9 +27,9 @@ export function getFirstNonEmptyLine(arr: Iterator<string>): string {
27
27
 
28
28
  export function getSeqBounds(line: string) {
29
29
  const fields = line.split(/\s+/)
30
- const temp = line.slice(fields[0].length)
31
- const s = fields[0].length + temp.indexOf(fields[1])
32
- const e = s + fields[1].length
30
+ const temp = line.slice(fields[0]!.length)
31
+ const s = fields[0]!.length + temp.indexOf(fields[1]!)
32
+ const e = s + fields[1]!.length
33
33
  return [s, e] as const
34
34
  }
35
35
 
@@ -43,25 +43,29 @@ export function parseBlock(arr: Iterator<string>) {
43
43
  }
44
44
 
45
45
  while (line) {
46
- if (line[0].startsWith(' ')) {
46
+ if (line.startsWith(' ')) {
47
47
  consensusLine = line
48
48
  } else {
49
49
  block.push(line)
50
50
  }
51
51
  line = arr.next().value
52
52
  }
53
- const [start, end] = getSeqBounds(block[0])
53
+ const [start, end] = getSeqBounds(block[0]!)
54
54
  const fields = block.map(s => s.split(/\s+/))
55
- const ids = fields.map(s => s[0])
55
+ const ids = fields.map(s => s[0]!)
56
56
  const seqs = block.map(s => s.slice(start, end))
57
57
  let consensus = consensusLine.slice(start, end)
58
58
 
59
59
  // handle if the consensus trailing whitespace got trimmed
60
- const remainder = seqs[0].length - consensus.length
60
+ const remainder = seqs[0]!.length - consensus.length
61
61
  if (remainder) {
62
62
  consensus += ' '.repeat(remainder)
63
63
  }
64
- return { ids, seqs, consensus }
64
+ return {
65
+ ids,
66
+ seqs,
67
+ consensus,
68
+ }
65
69
  }
66
70
 
67
71
  export function parseBlocks(arr: Iterator<string>) {
@@ -70,7 +74,7 @@ export function parseBlocks(arr: Iterator<string>) {
70
74
  if (res !== undefined) {
71
75
  while ((block = parseBlock(arr))) {
72
76
  for (let i = 0; i < block.seqs.length; i++) {
73
- res.seqs[i] += block.seqs[i]
77
+ res.seqs[i]! += block.seqs[i]!
74
78
  }
75
79
  res.consensus += block.consensus
76
80
  }