clustal-js 2.0.6 → 2.0.8
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.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/package.json +1 -0
- package/dist/pairwise.d.ts +1 -1
- package/dist/pairwise.js +26 -16
- package/dist/pairwise.js.map +1 -1
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/esm/pairwise.d.ts +1 -1
- package/esm/pairwise.js +25 -15
- package/esm/pairwise.js.map +1 -1
- package/package.json +22 -13
- package/src/index.ts +2 -2
- package/src/pairwise.ts +31 -17
package/dist/index.js
CHANGED
|
@@ -4,15 +4,15 @@ exports.parseClustalIter = parseClustalIter;
|
|
|
4
4
|
exports.parsePairwiseIter = parsePairwiseIter;
|
|
5
5
|
exports.parse = parse;
|
|
6
6
|
exports.parsePairwise = parsePairwise;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const pairwise_ts_1 = require("./pairwise.js");
|
|
8
|
+
const util_ts_1 = require("./util.js");
|
|
9
9
|
function parseClustalIter(arr) {
|
|
10
|
-
const line = (0,
|
|
10
|
+
const line = (0, util_ts_1.getFirstNonEmptyLine)(arr);
|
|
11
11
|
if (!line) {
|
|
12
12
|
throw new Error('Empty file received');
|
|
13
13
|
}
|
|
14
|
-
const header = (0,
|
|
15
|
-
const res = (0,
|
|
14
|
+
const header = (0, util_ts_1.parseHeader)(line);
|
|
15
|
+
const res = (0, util_ts_1.parseBlocks)(arr);
|
|
16
16
|
if (res === undefined) {
|
|
17
17
|
throw new Error('No blocks parsed');
|
|
18
18
|
}
|
|
@@ -24,7 +24,7 @@ function parseClustalIter(arr) {
|
|
|
24
24
|
return { consensus, alns, header };
|
|
25
25
|
}
|
|
26
26
|
function parsePairwiseIter(arr) {
|
|
27
|
-
const res = (0,
|
|
27
|
+
const res = (0, pairwise_ts_1.parsePairwiseBlocks)(arr.split('\n')[Symbol.iterator]());
|
|
28
28
|
if (res === undefined) {
|
|
29
29
|
throw new Error('No blocks parsed');
|
|
30
30
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;AAGA,4CAqBC;AAMD,8CAoBC;AAED,sBAGC;AAED,sCAOC;AAhED
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"type": "commonjs"}
|
package/dist/pairwise.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function getSeqBounds(line: string): readonly [number, number];
|
|
1
|
+
export declare function getSeqBounds(line: string, seqIndex: number): readonly [number, number];
|
|
2
2
|
export declare function parsePairwiseBlock(arr: Iterator<string>): {
|
|
3
3
|
ids: string[];
|
|
4
4
|
seqs: string[];
|
package/dist/pairwise.js
CHANGED
|
@@ -3,40 +3,50 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getSeqBounds = getSeqBounds;
|
|
4
4
|
exports.parsePairwiseBlock = parsePairwiseBlock;
|
|
5
5
|
exports.parsePairwiseBlocks = parsePairwiseBlocks;
|
|
6
|
-
const
|
|
7
|
-
function
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
6
|
+
const util_ts_1 = require("./util.js");
|
|
7
|
+
function isSequenceLine(line) {
|
|
8
|
+
const trimmed = line.trim();
|
|
9
|
+
return /^\w+\s+/.test(trimmed);
|
|
10
|
+
}
|
|
11
|
+
function hasPositionNumbers(fields) {
|
|
12
|
+
return fields.length >= 3 && /^\d+$/.test(fields[1]);
|
|
13
|
+
}
|
|
14
|
+
function getSeqBounds(line, seqIndex) {
|
|
15
|
+
const trimmed = line.trim();
|
|
16
|
+
const fields = trimmed.split(/\s+/);
|
|
17
|
+
const seq = fields[seqIndex];
|
|
18
|
+
const seqStart = line.indexOf(seq, line.indexOf(fields[0]) + fields[0].length);
|
|
19
|
+
return [seqStart, seqStart + seq.length];
|
|
14
20
|
}
|
|
15
21
|
// Use the first block to get the sequence identifiers
|
|
16
22
|
function parsePairwiseBlock(arr) {
|
|
17
|
-
let line = (0,
|
|
23
|
+
let line = (0, util_ts_1.getFirstNonEmptyLine)(arr);
|
|
18
24
|
const block = [];
|
|
19
25
|
let consensusLine = '';
|
|
20
26
|
if (!line) {
|
|
21
27
|
return undefined;
|
|
22
28
|
}
|
|
23
29
|
while (line) {
|
|
24
|
-
if (line
|
|
25
|
-
|
|
30
|
+
if (isSequenceLine(line)) {
|
|
31
|
+
block.push(line);
|
|
26
32
|
}
|
|
27
33
|
else {
|
|
28
|
-
|
|
34
|
+
consensusLine = line;
|
|
29
35
|
}
|
|
30
36
|
line = arr.next().value;
|
|
31
37
|
}
|
|
32
|
-
|
|
33
|
-
|
|
38
|
+
if (block.length === 0) {
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
const fields = block.map(s => s.trim().split(/\s+/));
|
|
42
|
+
const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1;
|
|
43
|
+
const [start, end] = getSeqBounds(block[0], seqIndex);
|
|
34
44
|
const ids = fields.map(s => s[0]);
|
|
35
|
-
const seqs = fields.map(s => s[
|
|
45
|
+
const seqs = fields.map(s => s[seqIndex]);
|
|
36
46
|
let consensus = consensusLine.slice(start, end);
|
|
37
47
|
// handle if the consensus trailing whitespace got trimmed
|
|
38
48
|
const remainder = seqs[0].length - consensus.length;
|
|
39
|
-
if (remainder) {
|
|
49
|
+
if (remainder > 0) {
|
|
40
50
|
consensus += ' '.repeat(remainder);
|
|
41
51
|
}
|
|
42
52
|
return { ids, seqs, consensus };
|
package/dist/pairwise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parsePairwiseBlocks } from
|
|
2
|
-
import { parseBlocks, parseHeader, getFirstNonEmptyLine } from
|
|
1
|
+
import { parsePairwiseBlocks } from "./pairwise.js";
|
|
2
|
+
import { parseBlocks, parseHeader, getFirstNonEmptyLine } from "./util.js";
|
|
3
3
|
export function parseClustalIter(arr) {
|
|
4
4
|
const line = getFirstNonEmptyLine(arr);
|
|
5
5
|
if (!line) {
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
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,4 @@
|
|
|
1
|
-
export declare function getSeqBounds(line: string): readonly [number, number];
|
|
1
|
+
export declare function getSeqBounds(line: string, seqIndex: number): readonly [number, number];
|
|
2
2
|
export declare function parsePairwiseBlock(arr: Iterator<string>): {
|
|
3
3
|
ids: string[];
|
|
4
4
|
seqs: string[];
|
package/esm/pairwise.js
CHANGED
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import { getFirstNonEmptyLine } from
|
|
2
|
-
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { getFirstNonEmptyLine } from "./util.js";
|
|
2
|
+
function isSequenceLine(line) {
|
|
3
|
+
const trimmed = line.trim();
|
|
4
|
+
return /^\w+\s+/.test(trimmed);
|
|
5
|
+
}
|
|
6
|
+
function hasPositionNumbers(fields) {
|
|
7
|
+
return fields.length >= 3 && /^\d+$/.test(fields[1]);
|
|
8
|
+
}
|
|
9
|
+
export function getSeqBounds(line, seqIndex) {
|
|
10
|
+
const trimmed = line.trim();
|
|
11
|
+
const fields = trimmed.split(/\s+/);
|
|
12
|
+
const seq = fields[seqIndex];
|
|
13
|
+
const seqStart = line.indexOf(seq, line.indexOf(fields[0]) + fields[0].length);
|
|
14
|
+
return [seqStart, seqStart + seq.length];
|
|
9
15
|
}
|
|
10
16
|
// Use the first block to get the sequence identifiers
|
|
11
17
|
export function parsePairwiseBlock(arr) {
|
|
@@ -16,22 +22,26 @@ export function parsePairwiseBlock(arr) {
|
|
|
16
22
|
return undefined;
|
|
17
23
|
}
|
|
18
24
|
while (line) {
|
|
19
|
-
if (line
|
|
20
|
-
|
|
25
|
+
if (isSequenceLine(line)) {
|
|
26
|
+
block.push(line);
|
|
21
27
|
}
|
|
22
28
|
else {
|
|
23
|
-
|
|
29
|
+
consensusLine = line;
|
|
24
30
|
}
|
|
25
31
|
line = arr.next().value;
|
|
26
32
|
}
|
|
27
|
-
|
|
28
|
-
|
|
33
|
+
if (block.length === 0) {
|
|
34
|
+
return undefined;
|
|
35
|
+
}
|
|
36
|
+
const fields = block.map(s => s.trim().split(/\s+/));
|
|
37
|
+
const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1;
|
|
38
|
+
const [start, end] = getSeqBounds(block[0], seqIndex);
|
|
29
39
|
const ids = fields.map(s => s[0]);
|
|
30
|
-
const seqs = fields.map(s => s[
|
|
40
|
+
const seqs = fields.map(s => s[seqIndex]);
|
|
31
41
|
let consensus = consensusLine.slice(start, end);
|
|
32
42
|
// handle if the consensus trailing whitespace got trimmed
|
|
33
43
|
const remainder = seqs[0].length - consensus.length;
|
|
34
|
-
if (remainder) {
|
|
44
|
+
if (remainder > 0) {
|
|
35
45
|
consensus += ' '.repeat(remainder);
|
|
36
46
|
}
|
|
37
47
|
return { ids, seqs, consensus };
|
package/esm/pairwise.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pairwise.js","sourceRoot":"","sources":["../src/pairwise.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAA;AAEhD,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,OAAO,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAgB;IAC1C,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;AACtD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY,EAAE,QAAgB;IACzD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IACnC,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;IAC9E,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAU,CAAA;AACnD,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,kBAAkB,CAAC,GAAqB;IACtD,IAAI,IAAI,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,aAAa,GAAG,EAAE,CAAA;IACtB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,OAAO,IAAI,EAAE,CAAC;QACZ,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAClB,CAAC;aAAM,CAAC;YACN,aAAa,GAAG,IAAI,CAAA;QACtB,CAAC;QACD,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;IACzB,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAA;IACpD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACtD,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAA;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAA;IACzC,IAAI,SAAS,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAE/C,0DAA0D;IAC1D,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAA;IACnD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QAClB,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACpC,CAAC;IACD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAqB;IACvD,IAAI,KAAK,CAAA;IACT,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACnC,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC3C,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;YAC9B,CAAC;YACD,GAAG,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAA;QAClC,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAA;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "clustal-js",
|
|
3
|
-
"version": "2.0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "2.0.8",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"types": "./dist/index.d.ts",
|
|
6
|
+
"exports": {
|
|
7
|
+
"import": {
|
|
8
|
+
"import": "./esm/index.js"
|
|
9
|
+
},
|
|
10
|
+
"require": {
|
|
11
|
+
"require": "./dist/index.js"
|
|
12
|
+
}
|
|
13
|
+
},
|
|
6
14
|
"repository": "cmdcolin/clustal-js",
|
|
7
15
|
"files": [
|
|
8
16
|
"dist",
|
|
@@ -12,25 +20,26 @@
|
|
|
12
20
|
"license": "MIT",
|
|
13
21
|
"devDependencies": {
|
|
14
22
|
"@types/node": "^22.0.0",
|
|
15
|
-
"@typescript-eslint/eslint-plugin": "^8.1.0",
|
|
16
|
-
"@typescript-eslint/parser": "^8.1.0",
|
|
17
23
|
"eslint": "^9.9.0",
|
|
18
|
-
"eslint-plugin-
|
|
24
|
+
"eslint-plugin-import": "^2.32.0",
|
|
25
|
+
"eslint-plugin-unicorn": "^62.0.0",
|
|
19
26
|
"prettier": "^3.2.5",
|
|
20
27
|
"rimraf": "^6.0.1",
|
|
21
28
|
"typescript": "^5.3.3",
|
|
22
29
|
"typescript-eslint": "^8.1.0",
|
|
23
|
-
"vitest": "^
|
|
30
|
+
"vitest": "^4.0.16"
|
|
24
31
|
},
|
|
25
32
|
"scripts": {
|
|
26
33
|
"clean": "rimraf dist esm",
|
|
27
|
-
"test": "vitest
|
|
34
|
+
"test": "vitest",
|
|
28
35
|
"lint": "eslint --report-unused-disable-directives --max-warnings 0",
|
|
29
|
-
"
|
|
30
|
-
"build:esm": "tsc --
|
|
31
|
-
"build:es5": "tsc --
|
|
32
|
-
"
|
|
33
|
-
"
|
|
36
|
+
"format": "prettier --write .",
|
|
37
|
+
"build:esm": "tsc --outDir esm",
|
|
38
|
+
"build:es5": "tsc --module commonjs --outDir dist",
|
|
39
|
+
"build": "yarn build:esm && yarn build:es5",
|
|
40
|
+
"prebuild": "yarn clean",
|
|
41
|
+
"postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
|
|
42
|
+
"preversion": "yarn lint && yarn test --run && yarn build",
|
|
34
43
|
"postversion": "git push --follow-tags"
|
|
35
44
|
}
|
|
36
45
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { parsePairwiseBlocks } from './pairwise'
|
|
2
|
-
import { parseBlocks, parseHeader, getFirstNonEmptyLine } from './util'
|
|
1
|
+
import { parsePairwiseBlocks } from './pairwise.ts'
|
|
2
|
+
import { parseBlocks, parseHeader, getFirstNonEmptyLine } from './util.ts'
|
|
3
3
|
|
|
4
4
|
export function parseClustalIter(arr: Iterator<string>) {
|
|
5
5
|
const line = getFirstNonEmptyLine(arr)
|
package/src/pairwise.ts
CHANGED
|
@@ -1,40 +1,54 @@
|
|
|
1
|
-
import { getFirstNonEmptyLine } from './util'
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return
|
|
1
|
+
import { getFirstNonEmptyLine } from './util.ts'
|
|
2
|
+
|
|
3
|
+
function isSequenceLine(line: string) {
|
|
4
|
+
const trimmed = line.trim()
|
|
5
|
+
return /^\w+\s+/.test(trimmed)
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function hasPositionNumbers(fields: string[]) {
|
|
9
|
+
return fields.length >= 3 && /^\d+$/.test(fields[1])
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export function getSeqBounds(line: string, seqIndex: number) {
|
|
13
|
+
const trimmed = line.trim()
|
|
14
|
+
const fields = trimmed.split(/\s+/)
|
|
15
|
+
const seq = fields[seqIndex]
|
|
16
|
+
const seqStart = line.indexOf(seq, line.indexOf(fields[0]) + fields[0].length)
|
|
17
|
+
return [seqStart, seqStart + seq.length] as const
|
|
10
18
|
}
|
|
11
19
|
|
|
12
20
|
// Use the first block to get the sequence identifiers
|
|
13
21
|
export function parsePairwiseBlock(arr: Iterator<string>) {
|
|
14
22
|
let line = getFirstNonEmptyLine(arr)
|
|
15
|
-
const block = []
|
|
23
|
+
const block: string[] = []
|
|
16
24
|
let consensusLine = ''
|
|
17
25
|
if (!line) {
|
|
18
26
|
return undefined
|
|
19
27
|
}
|
|
20
28
|
|
|
21
29
|
while (line) {
|
|
22
|
-
if (line
|
|
23
|
-
consensusLine = line
|
|
24
|
-
} else {
|
|
30
|
+
if (isSequenceLine(line)) {
|
|
25
31
|
block.push(line)
|
|
32
|
+
} else {
|
|
33
|
+
consensusLine = line
|
|
26
34
|
}
|
|
27
35
|
line = arr.next().value
|
|
28
36
|
}
|
|
29
|
-
|
|
30
|
-
|
|
37
|
+
|
|
38
|
+
if (block.length === 0) {
|
|
39
|
+
return undefined
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const fields = block.map(s => s.trim().split(/\s+/))
|
|
43
|
+
const seqIndex = hasPositionNumbers(fields[0]) ? 2 : 1
|
|
44
|
+
const [start, end] = getSeqBounds(block[0], seqIndex)
|
|
31
45
|
const ids = fields.map(s => s[0])
|
|
32
|
-
const seqs = fields.map(s => s[
|
|
46
|
+
const seqs = fields.map(s => s[seqIndex])
|
|
33
47
|
let consensus = consensusLine.slice(start, end)
|
|
34
48
|
|
|
35
49
|
// handle if the consensus trailing whitespace got trimmed
|
|
36
50
|
const remainder = seqs[0].length - consensus.length
|
|
37
|
-
if (remainder) {
|
|
51
|
+
if (remainder > 0) {
|
|
38
52
|
consensus += ' '.repeat(remainder)
|
|
39
53
|
}
|
|
40
54
|
return { ids, seqs, consensus }
|