gff-nostream 1.3.9 → 2.0.1
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/api.d.ts +33 -2
- package/dist/api.js +91 -3
- package/dist/api.js.map +1 -1
- package/dist/index.d.ts +3 -3
- package/dist/index.js +6 -3
- package/dist/index.js.map +1 -1
- package/dist/parse.d.ts +3 -16
- package/dist/parse.js +80 -124
- package/dist/parse.js.map +1 -1
- package/dist/util.d.ts +17 -0
- package/dist/util.js +160 -59
- package/dist/util.js.map +1 -1
- package/esm/api.d.ts +33 -2
- package/esm/api.js +87 -2
- package/esm/api.js.map +1 -1
- package/esm/index.d.ts +3 -3
- package/esm/index.js +2 -2
- package/esm/index.js.map +1 -1
- package/esm/parse.d.ts +3 -16
- package/esm/parse.js +103 -142
- package/esm/parse.js.map +1 -1
- package/esm/util.d.ts +17 -0
- package/esm/util.js +148 -58
- package/esm/util.js.map +1 -1
- package/package.json +27 -16
- package/src/api.ts +113 -12
- package/src/index.ts +6 -5
- package/src/parse.ts +80 -146
- package/src/util.ts +165 -62
package/esm/util.js
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
// Fast, low-level functions for parsing and formatting GFF3.
|
|
2
2
|
// JavaScript port of Robert Buels's Bio::GFF3::LowLevel Perl module.
|
|
3
|
+
const escapeRegex = /%([0-9A-Fa-f]{2})/g;
|
|
4
|
+
const directiveRegex = /^\s*##\s*(\S+)\s*(.*)/;
|
|
5
|
+
const lineEndRegex = /\r?\n$/;
|
|
6
|
+
const whitespaceRegex = /\s+/;
|
|
7
|
+
const nonDigitRegex = /\D/g;
|
|
8
|
+
// eslint-disable-next-line no-control-regex
|
|
9
|
+
const attrEscapeRegex = /[\n;\r\t=%&,\u0000-\u001f\u007f-\u00ff]/g;
|
|
10
|
+
// eslint-disable-next-line no-control-regex
|
|
11
|
+
const columnEscapeRegex = /[\n\r\t%\u0000-\u001f\u007f-\u00ff]/g;
|
|
3
12
|
/**
|
|
4
13
|
* Unescape a string value used in a GFF3 attribute.
|
|
5
14
|
*
|
|
@@ -7,7 +16,10 @@
|
|
|
7
16
|
* @returns An unescaped string value
|
|
8
17
|
*/
|
|
9
18
|
export function unescape(stringVal) {
|
|
10
|
-
|
|
19
|
+
if (!stringVal.includes('%')) {
|
|
20
|
+
return stringVal;
|
|
21
|
+
}
|
|
22
|
+
return stringVal.replaceAll(escapeRegex, (_match, seq) => String.fromCharCode(parseInt(seq, 16)));
|
|
11
23
|
}
|
|
12
24
|
function _escape(regex, s) {
|
|
13
25
|
return String(s).replace(regex, ch => {
|
|
@@ -22,7 +34,7 @@ function _escape(regex, s) {
|
|
|
22
34
|
* @returns An escaped string value
|
|
23
35
|
*/
|
|
24
36
|
export function escape(rawVal) {
|
|
25
|
-
return _escape(
|
|
37
|
+
return _escape(attrEscapeRegex, rawVal);
|
|
26
38
|
}
|
|
27
39
|
/**
|
|
28
40
|
* Escape a value for use in a GFF3 column value.
|
|
@@ -31,7 +43,7 @@ export function escape(rawVal) {
|
|
|
31
43
|
* @returns An escaped column value
|
|
32
44
|
*/
|
|
33
45
|
export function escapeColumn(rawVal) {
|
|
34
|
-
return _escape(
|
|
46
|
+
return _escape(columnEscapeRegex, rawVal);
|
|
35
47
|
}
|
|
36
48
|
/**
|
|
37
49
|
* Parse the 9th column (attributes) of a GFF3 feature line.
|
|
@@ -44,26 +56,66 @@ export function parseAttributes(attrString) {
|
|
|
44
56
|
return {};
|
|
45
57
|
}
|
|
46
58
|
const attrs = {};
|
|
47
|
-
attrString
|
|
48
|
-
|
|
49
|
-
.
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
if (
|
|
54
|
-
|
|
59
|
+
let str = attrString;
|
|
60
|
+
if (str.endsWith('\n')) {
|
|
61
|
+
str = str.slice(0, str.endsWith('\r\n') ? -2 : -1);
|
|
62
|
+
}
|
|
63
|
+
for (const a of str.split(';')) {
|
|
64
|
+
const eqIdx = a.indexOf('=');
|
|
65
|
+
if (eqIdx === -1) {
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
const value = a.slice(eqIdx + 1);
|
|
69
|
+
if (!value.length) {
|
|
70
|
+
continue;
|
|
55
71
|
}
|
|
56
|
-
|
|
57
|
-
let arec = attrs[
|
|
72
|
+
const tag = a.slice(0, eqIdx).trim();
|
|
73
|
+
let arec = attrs[tag];
|
|
58
74
|
if (!arec) {
|
|
59
75
|
arec = [];
|
|
60
|
-
attrs[
|
|
76
|
+
attrs[tag] = arec;
|
|
61
77
|
}
|
|
62
|
-
|
|
63
|
-
.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
78
|
+
for (const s of value.split(',')) {
|
|
79
|
+
arec.push(unescape(s.trim()));
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return attrs;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Parse the 9th column (attributes) of a GFF3 feature line without unescaping.
|
|
86
|
+
* Fast path for data known to contain no escaped characters.
|
|
87
|
+
*
|
|
88
|
+
* @param attrString - String of GFF3 9th column
|
|
89
|
+
* @returns Parsed attributes
|
|
90
|
+
*/
|
|
91
|
+
export function parseAttributesNoUnescape(attrString) {
|
|
92
|
+
if (!attrString.length || attrString === '.') {
|
|
93
|
+
return {};
|
|
94
|
+
}
|
|
95
|
+
const attrs = {};
|
|
96
|
+
let str = attrString;
|
|
97
|
+
if (str.endsWith('\n')) {
|
|
98
|
+
str = str.slice(0, str.endsWith('\r\n') ? -2 : -1);
|
|
99
|
+
}
|
|
100
|
+
for (const a of str.split(';')) {
|
|
101
|
+
const eqIdx = a.indexOf('=');
|
|
102
|
+
if (eqIdx === -1) {
|
|
103
|
+
continue;
|
|
104
|
+
}
|
|
105
|
+
const value = a.slice(eqIdx + 1);
|
|
106
|
+
if (!value.length) {
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const tag = a.slice(0, eqIdx).trim();
|
|
110
|
+
let arec = attrs[tag];
|
|
111
|
+
if (!arec) {
|
|
112
|
+
arec = [];
|
|
113
|
+
attrs[tag] = arec;
|
|
114
|
+
}
|
|
115
|
+
for (const s of value.split(',')) {
|
|
116
|
+
arec.push(s.trim());
|
|
117
|
+
}
|
|
118
|
+
}
|
|
67
119
|
return attrs;
|
|
68
120
|
}
|
|
69
121
|
/**
|
|
@@ -73,21 +125,67 @@ export function parseAttributes(attrString) {
|
|
|
73
125
|
* @returns The parsed feature
|
|
74
126
|
*/
|
|
75
127
|
export function parseFeature(line) {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
128
|
+
return parseFieldsArray(line.split('\t'));
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Parse a GFF3 feature from a pre-split fields array
|
|
132
|
+
*
|
|
133
|
+
* @param f - Array of 9 GFF3 column values (use null or '.' for empty values)
|
|
134
|
+
* @returns The parsed feature
|
|
135
|
+
*/
|
|
136
|
+
function norm(a) {
|
|
137
|
+
return a === '.' || a === '' || a === undefined ? null : a;
|
|
138
|
+
}
|
|
139
|
+
export function parseFieldsArray(f) {
|
|
140
|
+
const seq_id = norm(f[0]);
|
|
141
|
+
const source = norm(f[1]);
|
|
142
|
+
const type = norm(f[2]);
|
|
143
|
+
const start = norm(f[3]);
|
|
144
|
+
const end = norm(f[4]);
|
|
145
|
+
const score = norm(f[5]);
|
|
146
|
+
const strand = norm(f[6]);
|
|
147
|
+
const phase = norm(f[7]);
|
|
148
|
+
const attrString = norm(f[8]);
|
|
149
|
+
return {
|
|
150
|
+
seq_id: seq_id ? unescape(seq_id) : null,
|
|
151
|
+
source: source ? unescape(source) : null,
|
|
152
|
+
type: type ? unescape(type) : null,
|
|
153
|
+
start: start === null ? null : parseInt(start, 10),
|
|
154
|
+
end: end === null ? null : parseInt(end, 10),
|
|
155
|
+
score: score === null ? null : parseFloat(score),
|
|
156
|
+
strand,
|
|
157
|
+
phase,
|
|
158
|
+
attributes: attrString === null ? null : parseAttributes(attrString),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Parse a GFF3 feature from a pre-split fields array without unescaping.
|
|
163
|
+
* Fast path for data known to contain no escaped characters.
|
|
164
|
+
*
|
|
165
|
+
* @param f - Array of 9 GFF3 column values (use null or '.' for empty values)
|
|
166
|
+
* @returns The parsed feature
|
|
167
|
+
*/
|
|
168
|
+
export function parseFieldsArrayNoUnescape(f) {
|
|
169
|
+
const seq_id = norm(f[0]);
|
|
170
|
+
const source = norm(f[1]);
|
|
171
|
+
const type = norm(f[2]);
|
|
172
|
+
const start = norm(f[3]);
|
|
173
|
+
const end = norm(f[4]);
|
|
174
|
+
const score = norm(f[5]);
|
|
175
|
+
const strand = norm(f[6]);
|
|
176
|
+
const phase = norm(f[7]);
|
|
177
|
+
const attrString = norm(f[8]);
|
|
178
|
+
return {
|
|
179
|
+
seq_id,
|
|
180
|
+
source,
|
|
181
|
+
type,
|
|
182
|
+
start: start === null ? null : parseInt(start, 10),
|
|
183
|
+
end: end === null ? null : parseInt(end, 10),
|
|
184
|
+
score: score === null ? null : parseFloat(score),
|
|
185
|
+
strand,
|
|
186
|
+
phase,
|
|
187
|
+
attributes: attrString === null ? null : parseAttributesNoUnescape(attrString),
|
|
89
188
|
};
|
|
90
|
-
return parsed;
|
|
91
189
|
}
|
|
92
190
|
/**
|
|
93
191
|
* Parse a GFF3 directive line.
|
|
@@ -96,8 +194,7 @@ export function parseFeature(line) {
|
|
|
96
194
|
* @returns The parsed directive
|
|
97
195
|
*/
|
|
98
196
|
export function parseDirective(line) {
|
|
99
|
-
|
|
100
|
-
const match = /^\s*##\s*(\S+)\s*(.*)/.exec(line);
|
|
197
|
+
const match = directiveRegex.exec(line);
|
|
101
198
|
if (!match) {
|
|
102
199
|
return null;
|
|
103
200
|
}
|
|
@@ -105,21 +202,21 @@ export function parseDirective(line) {
|
|
|
105
202
|
let [, , contents] = match;
|
|
106
203
|
const parsed = { directive: name };
|
|
107
204
|
if (contents.length) {
|
|
108
|
-
contents = contents.replace(
|
|
205
|
+
contents = contents.replace(lineEndRegex, '');
|
|
109
206
|
parsed.value = contents;
|
|
110
207
|
}
|
|
111
208
|
// do a little additional parsing for sequence-region and genome-build directives
|
|
112
209
|
if (name === 'sequence-region') {
|
|
113
|
-
const c = contents.split(
|
|
210
|
+
const c = contents.split(whitespaceRegex, 3);
|
|
114
211
|
return {
|
|
115
212
|
...parsed,
|
|
116
213
|
seq_id: c[0],
|
|
117
|
-
start:
|
|
118
|
-
end:
|
|
214
|
+
start: c[1]?.replaceAll(nonDigitRegex, ''),
|
|
215
|
+
end: c[2]?.replaceAll(nonDigitRegex, ''),
|
|
119
216
|
};
|
|
120
217
|
}
|
|
121
218
|
else if (name === 'genome-build') {
|
|
122
|
-
const [source, buildName] = contents.split(
|
|
219
|
+
const [source, buildName] = contents.split(whitespaceRegex, 2);
|
|
123
220
|
return {
|
|
124
221
|
...parsed,
|
|
125
222
|
source,
|
|
@@ -136,28 +233,18 @@ export function parseDirective(line) {
|
|
|
136
233
|
*/
|
|
137
234
|
export function formatAttributes(attrs) {
|
|
138
235
|
const attrOrder = [];
|
|
139
|
-
|
|
236
|
+
for (const [tag, val] of Object.entries(attrs)) {
|
|
140
237
|
if (!val) {
|
|
141
|
-
|
|
238
|
+
continue;
|
|
142
239
|
}
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
valstring = escape(val.toString());
|
|
146
|
-
// } else if (Array.isArray(val.values)) {
|
|
147
|
-
// valstring = val.values.map(escape).join(',')
|
|
148
|
-
}
|
|
149
|
-
else if (Array.isArray(val)) {
|
|
150
|
-
valstring = val.map(escape).join(',');
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
valstring = escape(val);
|
|
154
|
-
}
|
|
155
|
-
attrOrder.push(`${escape(tag)}=${valstring}`);
|
|
156
|
-
});
|
|
240
|
+
attrOrder.push(`${escape(tag)}=${val.map(escape).join(',')}`);
|
|
241
|
+
}
|
|
157
242
|
return attrOrder.length ? attrOrder.join(';') : '.';
|
|
158
243
|
}
|
|
159
244
|
function _formatSingleFeature(f, seenFeature) {
|
|
160
|
-
const attrString =
|
|
245
|
+
const attrString =
|
|
246
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
247
|
+
f.attributes === null || f.attributes === undefined
|
|
161
248
|
? '.'
|
|
162
249
|
: formatAttributes(f.attributes);
|
|
163
250
|
const fields = [
|
|
@@ -262,7 +349,10 @@ export function formatItem(itemOrItems) {
|
|
|
262
349
|
return formatSingleItem(itemOrItems);
|
|
263
350
|
}
|
|
264
351
|
function _isFeatureLineWithRefs(featureLine) {
|
|
265
|
-
return (
|
|
352
|
+
return (
|
|
353
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
354
|
+
featureLine.child_features !== undefined &&
|
|
355
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
266
356
|
featureLine.derived_features !== undefined);
|
|
267
357
|
}
|
|
268
358
|
//# sourceMappingURL=util.js.map
|
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,11 +1,19 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gff-nostream",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.1",
|
|
4
4
|
"description": "utilities to read GFF3 data",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": "cmdcolin/gff-nostream",
|
|
7
|
-
"
|
|
8
|
-
"
|
|
7
|
+
"type": "module",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
"import": {
|
|
11
|
+
"import": "./esm/index.js"
|
|
12
|
+
},
|
|
13
|
+
"require": {
|
|
14
|
+
"require": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
9
17
|
"author": {
|
|
10
18
|
"name": "Colin Diesh",
|
|
11
19
|
"email": "colin.diesh@gmail.com",
|
|
@@ -18,13 +26,15 @@
|
|
|
18
26
|
],
|
|
19
27
|
"scripts": {
|
|
20
28
|
"test": "vitest",
|
|
29
|
+
"benchonly": "vitest bench",
|
|
30
|
+
"bench": "./scripts/build-both-branches.sh \"$BRANCH1\" \"$BRANCH2\" && vitest bench",
|
|
21
31
|
"clean": "rimraf dist esm",
|
|
22
|
-
"lint": "eslint
|
|
32
|
+
"lint": "eslint --report-unused-disable-directives --max-warnings 0",
|
|
23
33
|
"docs": "documentation readme src/api.ts --section=API --shallow && yarn format",
|
|
24
34
|
"format": "prettier --write .",
|
|
25
35
|
"prebuild": "yarn clean",
|
|
26
|
-
"build:esm": "tsc --target
|
|
27
|
-
"build:es5": "tsc --target
|
|
36
|
+
"build:esm": "tsc --target esnext --outDir esm",
|
|
37
|
+
"build:es5": "tsc --target es2020 --module commonjs --outDir dist",
|
|
28
38
|
"postbuild:es5": "echo '{\"type\": \"commonjs\"}' > dist/package.json",
|
|
29
39
|
"build": "yarn build:es5 && yarn build:esm",
|
|
30
40
|
"prepublishOnly": "yarn test --run && yarn build",
|
|
@@ -38,16 +48,17 @@
|
|
|
38
48
|
"genomics"
|
|
39
49
|
],
|
|
40
50
|
"devDependencies": {
|
|
41
|
-
"@types/node": "^
|
|
42
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
43
|
-
"@typescript-eslint/parser": "^8.
|
|
44
|
-
"@vitest/coverage-v8": "^
|
|
51
|
+
"@types/node": "^24.10.1",
|
|
52
|
+
"@typescript-eslint/eslint-plugin": "^8.48.0",
|
|
53
|
+
"@typescript-eslint/parser": "^8.48.0",
|
|
54
|
+
"@vitest/coverage-v8": "^4.0.14",
|
|
45
55
|
"documentation": "^14.0.1",
|
|
46
|
-
"eslint": "^9.
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"typescript
|
|
51
|
-
"
|
|
56
|
+
"eslint": "^9.39.1",
|
|
57
|
+
"eslint-plugin-import": "^2.32.0",
|
|
58
|
+
"prettier": "^3.6.2",
|
|
59
|
+
"rimraf": "^6.1.2",
|
|
60
|
+
"typescript": "^5.9.3",
|
|
61
|
+
"typescript-eslint": "^8.48.0",
|
|
62
|
+
"vitest": "^4.0.14"
|
|
52
63
|
}
|
|
53
64
|
}
|
package/src/api.ts
CHANGED
|
@@ -1,5 +1,12 @@
|
|
|
1
|
-
import Parser from './parse'
|
|
2
|
-
import {
|
|
1
|
+
import Parser from './parse.ts'
|
|
2
|
+
import { parseFieldsArray, parseFieldsArrayNoUnescape } from './util.ts'
|
|
3
|
+
|
|
4
|
+
import type { GFF3Feature, GFF3FeatureLine } from './util.ts'
|
|
5
|
+
|
|
6
|
+
export interface LineRecord {
|
|
7
|
+
fields: string[]
|
|
8
|
+
lineHash?: string | number
|
|
9
|
+
}
|
|
3
10
|
|
|
4
11
|
/**
|
|
5
12
|
* Synchronously parse a string containing GFF3 and return an array of the
|
|
@@ -15,7 +22,7 @@ export function parseStringSync(str: string): GFF3Feature[] {
|
|
|
15
22
|
featureCallback: arg => items.push(arg),
|
|
16
23
|
disableDerivesFromReferences: true,
|
|
17
24
|
errorCallback: err => {
|
|
18
|
-
throw err
|
|
25
|
+
throw new Error(err)
|
|
19
26
|
},
|
|
20
27
|
})
|
|
21
28
|
|
|
@@ -27,12 +34,106 @@ export function parseStringSync(str: string): GFF3Feature[] {
|
|
|
27
34
|
return items
|
|
28
35
|
}
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
/**
|
|
38
|
+
* Synchronously parse an array of strings containing GFF3 and return an array of the
|
|
39
|
+
* parsed items.
|
|
40
|
+
*
|
|
41
|
+
* @param arr - GFF3 array of strings
|
|
42
|
+
* @param inputOptions - Parsing options
|
|
43
|
+
* @returns array of parsed features, directives, comments and/or sequences
|
|
44
|
+
*/
|
|
45
|
+
export function parseArraySync(arr: string[]): GFF3Feature[] {
|
|
46
|
+
const items: GFF3Feature[] = []
|
|
47
|
+
const parser = new Parser({
|
|
48
|
+
featureCallback: arg => items.push(arg),
|
|
49
|
+
disableDerivesFromReferences: true,
|
|
50
|
+
errorCallback: err => {
|
|
51
|
+
throw new Error(err)
|
|
52
|
+
},
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
for (const line of arr) {
|
|
56
|
+
parser.addLine(line)
|
|
57
|
+
}
|
|
58
|
+
parser.finish()
|
|
59
|
+
|
|
60
|
+
return items
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Synchronously parse an array of LineRecord objects containing pre-split GFF3
|
|
65
|
+
* fields and return an array of the parsed items.
|
|
66
|
+
*
|
|
67
|
+
* @param records - Array of LineRecord objects with fields array and optional lineHash
|
|
68
|
+
* @returns array of parsed features
|
|
69
|
+
*/
|
|
70
|
+
export function parseRecordsSync(records: LineRecord[]): GFF3Feature[] {
|
|
71
|
+
const items: GFF3Feature[] = []
|
|
72
|
+
const parser = new Parser({
|
|
73
|
+
featureCallback: arg => items.push(arg),
|
|
74
|
+
disableDerivesFromReferences: true,
|
|
75
|
+
errorCallback: err => {
|
|
76
|
+
throw new Error(err)
|
|
77
|
+
},
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
for (const record of records) {
|
|
81
|
+
const featureLine: GFF3FeatureLine = parseFieldsArray(record.fields)
|
|
82
|
+
if (record.lineHash !== undefined) {
|
|
83
|
+
if (!featureLine.attributes) {
|
|
84
|
+
featureLine.attributes = {}
|
|
85
|
+
}
|
|
86
|
+
featureLine.attributes._lineHash = [String(record.lineHash)]
|
|
87
|
+
}
|
|
88
|
+
parser.addParsedFeatureLine(featureLine)
|
|
89
|
+
}
|
|
90
|
+
parser.finish()
|
|
91
|
+
|
|
92
|
+
return items
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* Synchronously parse an array of LineRecord objects containing pre-split GFF3
|
|
97
|
+
* fields and return an array of the parsed items. Uses a fast path that skips
|
|
98
|
+
* unescaping when hasEscapes is false.
|
|
99
|
+
*
|
|
100
|
+
* @param records - Array of LineRecord objects with fields array and optional lineHash
|
|
101
|
+
* @param hasEscapes - Whether the records contain percent-encoded characters
|
|
102
|
+
* @returns array of parsed features
|
|
103
|
+
*/
|
|
104
|
+
export function parseRecordsSyncFast(records: LineRecord[], hasEscapes: boolean): GFF3Feature[] {
|
|
105
|
+
const items: GFF3Feature[] = []
|
|
106
|
+
const parser = new Parser({
|
|
107
|
+
featureCallback: arg => items.push(arg),
|
|
108
|
+
disableDerivesFromReferences: true,
|
|
109
|
+
errorCallback: err => {
|
|
110
|
+
throw new Error(err)
|
|
111
|
+
},
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
const parseFunc = hasEscapes ? parseFieldsArray : parseFieldsArrayNoUnescape
|
|
115
|
+
|
|
116
|
+
for (const record of records) {
|
|
117
|
+
const featureLine: GFF3FeatureLine = parseFunc(record.fields)
|
|
118
|
+
if (record.lineHash !== undefined) {
|
|
119
|
+
if (!featureLine.attributes) {
|
|
120
|
+
featureLine.attributes = {}
|
|
121
|
+
}
|
|
122
|
+
featureLine.attributes._lineHash = [String(record.lineHash)]
|
|
123
|
+
}
|
|
124
|
+
parser.addParsedFeatureLine(featureLine)
|
|
125
|
+
}
|
|
126
|
+
parser.finish()
|
|
127
|
+
|
|
128
|
+
return items
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
export type {
|
|
132
|
+
GFF3Comment,
|
|
133
|
+
GFF3Directive,
|
|
134
|
+
GFF3Feature,
|
|
135
|
+
GFF3FeatureLine,
|
|
136
|
+
GFF3FeatureLineWithRefs,
|
|
137
|
+
GFF3Item,
|
|
138
|
+
GFF3Sequence,
|
|
139
|
+
} from './util.ts'
|
package/src/index.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import { parseStringSync } from './api'
|
|
2
|
-
export { parseStringSync }
|
|
1
|
+
import { parseArraySync, parseRecordsSync, parseRecordsSyncFast, parseStringSync } from './api.ts'
|
|
2
|
+
export { parseArraySync, parseRecordsSync, parseRecordsSyncFast, parseStringSync }
|
|
3
3
|
|
|
4
4
|
export type {
|
|
5
5
|
GFF3Comment,
|
|
6
|
-
GFF3Feature,
|
|
7
6
|
GFF3Directive,
|
|
8
|
-
|
|
7
|
+
GFF3Feature,
|
|
9
8
|
GFF3FeatureLine,
|
|
9
|
+
GFF3FeatureLineWithRefs,
|
|
10
10
|
GFF3Item,
|
|
11
11
|
GFF3Sequence,
|
|
12
|
-
|
|
12
|
+
LineRecord,
|
|
13
|
+
} from './api.ts'
|