@gmod/gbz-base 0.0.1 → 1.1.0

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 (62) hide show
  1. package/README.md +45 -4
  2. package/bin/query.js +3 -1
  3. package/dist/cli.js +85 -19
  4. package/dist/cli.js.map +1 -0
  5. package/dist/db.d.ts +14 -6
  6. package/dist/db.js +92 -28
  7. package/dist/db.js.map +1 -0
  8. package/dist/filehandle.js +1 -0
  9. package/dist/filehandle.js.map +1 -0
  10. package/dist/gbwt/bytecode.d.ts +1 -1
  11. package/dist/gbwt/bytecode.js +7 -3
  12. package/dist/gbwt/bytecode.js.map +1 -0
  13. package/dist/gbwt/node.js +7 -2
  14. package/dist/gbwt/node.js.map +1 -0
  15. package/dist/gbwt/record.d.ts +4 -0
  16. package/dist/gbwt/record.js +30 -2
  17. package/dist/gbwt/record.js.map +1 -0
  18. package/dist/gbwt/sequence.js +8 -1
  19. package/dist/gbwt/sequence.js.map +1 -0
  20. package/dist/graphName.d.ts +9 -0
  21. package/dist/graphName.js +83 -0
  22. package/dist/graphName.js.map +1 -0
  23. package/dist/index.d.ts +5 -4
  24. package/dist/index.js +3 -2
  25. package/dist/index.js.map +1 -0
  26. package/dist/lcs.js +32 -10
  27. package/dist/lcs.js.map +1 -0
  28. package/dist/query.d.ts +4 -2
  29. package/dist/query.js +19 -0
  30. package/dist/query.js.map +1 -0
  31. package/dist/sqlite/btree.d.ts +1 -1
  32. package/dist/sqlite/btree.js +24 -7
  33. package/dist/sqlite/btree.js.map +1 -0
  34. package/dist/sqlite/database.d.ts +1 -1
  35. package/dist/sqlite/database.js +12 -2
  36. package/dist/sqlite/database.js.map +1 -0
  37. package/dist/sqlite/pager.d.ts +8 -3
  38. package/dist/sqlite/pager.js +71 -12
  39. package/dist/sqlite/pager.js.map +1 -0
  40. package/dist/sqlite/record.js +3 -1
  41. package/dist/sqlite/record.js.map +1 -0
  42. package/dist/subgraph.d.ts +12 -2
  43. package/dist/subgraph.js +413 -84
  44. package/dist/subgraph.js.map +1 -0
  45. package/package.json +36 -11
  46. package/src/cli.ts +258 -0
  47. package/src/db.ts +374 -0
  48. package/src/filehandle.ts +4 -0
  49. package/src/gbwt/bytecode.ts +87 -0
  50. package/src/gbwt/node.ts +64 -0
  51. package/src/gbwt/record.ts +177 -0
  52. package/src/gbwt/sequence.ts +50 -0
  53. package/src/graphName.ts +94 -0
  54. package/src/index.ts +34 -0
  55. package/src/lcs.ts +282 -0
  56. package/src/query.ts +106 -0
  57. package/src/sqlite/btree.ts +260 -0
  58. package/src/sqlite/database.ts +117 -0
  59. package/src/sqlite/pager.ts +148 -0
  60. package/src/sqlite/record.ts +100 -0
  61. package/src/subgraph.ts +1353 -0
  62. package/tools/haplotype-index/src/main.rs +197 -163
package/README.md CHANGED
@@ -50,6 +50,27 @@ gbz-base-query https://host/graph.gbz.db --contig chrM --offset 1000 --context 5
50
50
  `--stats` reports how many range requests a query made and how many bytes they
51
51
  carried.
52
52
 
53
+ ## Snarls
54
+
55
+ A `.gbz.db` built by upstream `gbz-base construct` stores the top-level chains
56
+ of the snarl decomposition as `next` links on the boundary node records (the
57
+ `chains` and `chain_links` tags say how many). The query functions take a
58
+ `snarls` option that uses them the way upstream's `--snarls` and
59
+ `--extend-snarls` do:
60
+
61
+ - `contained` adds every top-level snarl whose two boundary nodes are both in
62
+ the subgraph. With `context: 0` an interval query returns only the reference
63
+ walk, and this is what brings the variation back without a bp radius.
64
+ - `overlapping` also follows a boundary node whose partner lies outside the
65
+ subgraph, and, when the subgraph holds no chain link at all, walks out to the
66
+ snarl containing it. The subgraph must be connected, so a node query may give
67
+ only one node. A snarl can be far larger than the window (a large deletion, a
68
+ centromere), so set `limit` when using this mode.
69
+
70
+ `subgraphBetween(db, start, end)` is upstream's `--between`: everything between
71
+ two oriented boundary handles of one chain, with no context. On the command line
72
+ these are `--snarls`, `--extend-snarls` and `--between 129+:160+`.
73
+
53
74
  ## Naming haplotypes
54
75
 
55
76
  Upstream gbz-base cannot say which haplotype a subgraph path belongs to, so it
@@ -62,9 +83,29 @@ cd tools/haplotype-index && cargo build --release
62
83
  ./target/release/gbz-haplotype-index --interval 4096 --from-db graph.gbz.db
63
84
  ```
64
85
 
65
- The second form walks the paths through the database's own node records, so
66
- a database whose GBZ is no longer at hand can still be augmented; the two
67
- forms write identical tables.
86
+ The second form walks the paths through the database's own node records, so a
87
+ database whose GBZ is no longer at hand can still be augmented; the two forms
88
+ write identical tables. Walking a GBZ uses every core (`--threads`).
89
+
90
+ With `--output index.db` the tool writes the same tables into a standalone
91
+ companion database instead, and the reader opens the two side by side:
92
+
93
+ ```
94
+ ./target/release/gbz-haplotype-index --interval 16384 --output graph.haplotype-index.db graph.gbz
95
+ gbz-base-query https://host/graph.gbz.db --haplotype-index https://host/graph.haplotype-index.db ...
96
+ ```
97
+
98
+ ```ts
99
+ const db = await GBZBase.open(new RemoteFile(graphUrl), {
100
+ haplotypeIndex: new RemoteFile(indexUrl),
101
+ })
102
+ ```
103
+
104
+ This is how a database someone else publishes gets haplotype names without
105
+ anyone rehosting it: HPRC publishes `hprc-v2.1-mc-grch38.gbz.db` (10 GB) beside
106
+ its graphs, and the companion for it is built from the 5 GB GBZ. The companion
107
+ records the graph's path count and the reader refuses one built for a different
108
+ graph.
68
109
 
69
110
  `HaplotypeSamples` holds one GBWT position every `--interval` bp along every
70
111
  path in both orientations, with the path handle and the forward coordinate of
@@ -92,7 +133,7 @@ The test suite requires this library's output to be deep equal to every one of
92
133
  them, CIGAR strings included. `generate.sh` regenerates the oracle with an
93
134
  upstream binary.
94
135
 
95
- Not ported: snarl extension (`--snarls`, `--between`), GFA output, GAF-base.
136
+ Not ported: GAF-base.
96
137
 
97
138
  CIGARs are computed by matching each shared node to its earliest usable
98
139
  occurrence on the reference walk, which is weight-optimal whenever every shared
package/bin/query.js CHANGED
@@ -2,6 +2,8 @@
2
2
  import { main } from '../dist/cli.js'
3
3
 
4
4
  main(process.argv.slice(2)).catch(error => {
5
- process.stderr.write(`${error instanceof Error ? error.message : String(error)}\n`)
5
+ process.stderr.write(
6
+ `${error instanceof Error ? error.message : String(error)}\n`,
7
+ )
6
8
  process.exit(1)
7
9
  })
package/dist/cli.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { LocalFile, RemoteFile } from 'generic-filehandle2';
2
2
  import { GBZBase, formatPathName } from "./db.js";
3
- import { subgraphAroundNodes, subgraphAtOffset, subgraphInInterval } from "./query.js";
3
+ import { encodeNode } from "./gbwt/node.js";
4
+ import { subgraphAroundNodes, subgraphAtOffset, subgraphBetween, subgraphInInterval, } from "./query.js";
4
5
  const USAGE = `Usage: gbz-base-query [options] graph.gbz.db
5
6
 
6
7
  --sample STR sample name (default: generic path)
@@ -9,23 +10,38 @@ const USAGE = `Usage: gbz-base-query [options] graph.gbz.db
9
10
  -o, --offset INT sequence offset
10
11
  -i, --interval A..B half-open sequence interval
11
12
  -n, --node INT node identifier (may repeat)
13
+ -b, --between A:B subgraph between two chain boundary handles, each INT[+-]
12
14
  --context INT context length in bp (default: 100)
15
+ --snarls extend the subgraph with contained top-level snarls
16
+ --extend-snarls extend the subgraph with overlapping top-level snarls
13
17
  --limit INT safety limit for the number of nodes
14
18
  --haplotypes SEL all, distinct, reference-only or none (default: all)
15
19
  --cigar output CIGAR strings for the haplotypes
20
+ --format FMT json (default) or gfa
16
21
  --resolve name haplotypes from the HaplotypeSamples table
17
22
  --alignments print one alignment record per haplotype fragment instead of the subgraph
23
+ --haplotype-index F companion database written by gbz-haplotype-index --output
18
24
  --block-size INT bytes fetched per range request (default: 65536)
19
25
  --stats print fetch statistics to stderr
20
26
  `;
27
+ function parseHandle(text) {
28
+ const orientation = text.endsWith('-') ? 'reverse' : 'forward';
29
+ const digits = /[+-]$/.test(text) ? text.slice(0, -1) : text;
30
+ if (!/^\d+$/.test(digits)) {
31
+ throw new Error(`Failed to parse oriented node ${text}`);
32
+ }
33
+ return encodeNode(Number(digits), orientation);
34
+ }
21
35
  function parseArgs(argv) {
22
36
  const args = {
23
37
  file: '',
24
38
  haplotype: 0,
25
39
  nodes: [],
26
40
  context: 100,
41
+ snarls: 'none',
27
42
  haplotypes: 'all',
28
43
  cigar: false,
44
+ format: 'json',
29
45
  resolve: false,
30
46
  alignments: false,
31
47
  blockSize: 65536,
@@ -64,9 +80,25 @@ function parseArgs(argv) {
64
80
  case '--node':
65
81
  args.nodes.push(Number(next(i++)));
66
82
  break;
83
+ case '-b':
84
+ case '--between': {
85
+ const [a, b, extra] = next(i++).split(':');
86
+ if (a === undefined || b === undefined || extra !== undefined) {
87
+ throw new Error(`--between needs two oriented nodes, like 14+:17-`);
88
+ }
89
+ args.between = [parseHandle(a), parseHandle(b)];
90
+ break;
91
+ }
67
92
  case '--context':
68
93
  args.context = Number(next(i++));
69
94
  break;
95
+ case '--snarls':
96
+ args.snarls =
97
+ args.snarls === 'overlapping' ? 'overlapping' : 'contained';
98
+ break;
99
+ case '--extend-snarls':
100
+ args.snarls = 'overlapping';
101
+ break;
70
102
  case '--limit':
71
103
  args.limit = Number(next(i++));
72
104
  break;
@@ -86,12 +118,20 @@ function parseArgs(argv) {
86
118
  case '--block-size':
87
119
  args.blockSize = Number(next(i++));
88
120
  break;
121
+ case '--haplotype-index':
122
+ args.haplotypeIndex = next(i++);
123
+ break;
89
124
  case '--stats':
90
125
  args.stats = true;
91
126
  break;
92
- case '--format':
93
- next(i++);
127
+ case '--format': {
128
+ const format = next(i++);
129
+ if (format !== 'json' && format !== 'gfa') {
130
+ throw new Error(`Unknown output format ${format}`);
131
+ }
132
+ args.format = format;
94
133
  break;
134
+ }
95
135
  case '-h':
96
136
  case '--help':
97
137
  process.stdout.write(USAGE);
@@ -111,30 +151,56 @@ function parseArgs(argv) {
111
151
  }
112
152
  export async function main(argv) {
113
153
  const args = parseArgs(argv);
114
- const source = /^https?:\/\//.test(args.file) ? new RemoteFile(args.file) : new LocalFile(args.file);
115
- const db = await GBZBase.open(source, { blockSize: args.blockSize });
116
- const opts = { context: args.context, haplotypes: args.haplotypes, ...(args.limit === undefined ? {} : { limit: args.limit }) };
117
- const query = { contig: args.contig ?? '', haplotype: args.haplotype, ...(args.sample === undefined ? {} : { sample: args.sample }) };
118
- const subgraph = args.nodes.length > 0
119
- ? await subgraphAroundNodes(db, args.nodes, opts)
120
- : args.interval
121
- ? await subgraphInInterval(db, query, args.interval[0], args.interval[1], opts)
122
- : args.offset !== undefined
123
- ? await subgraphAtOffset(db, query, args.offset, opts)
124
- : undefined;
154
+ const open = (file) => /^https?:\/\//.test(file) ? new RemoteFile(file) : new LocalFile(file);
155
+ const db = await GBZBase.open(open(args.file), {
156
+ blockSize: args.blockSize,
157
+ ...(args.haplotypeIndex === undefined
158
+ ? {}
159
+ : { haplotypeIndex: open(args.haplotypeIndex) }),
160
+ });
161
+ const opts = {
162
+ context: args.context,
163
+ haplotypes: args.haplotypes,
164
+ snarls: args.snarls,
165
+ ...(args.limit === undefined ? {} : { limit: args.limit }),
166
+ };
167
+ const query = {
168
+ contig: args.contig ?? '',
169
+ haplotype: args.haplotype,
170
+ ...(args.sample === undefined ? {} : { sample: args.sample }),
171
+ };
172
+ const subgraph = args.between
173
+ ? await subgraphBetween(db, args.between[0], args.between[1], opts)
174
+ : args.nodes.length > 0
175
+ ? await subgraphAroundNodes(db, args.nodes, opts)
176
+ : args.interval
177
+ ? await subgraphInInterval(db, query, args.interval[0], args.interval[1], opts)
178
+ : args.offset !== undefined
179
+ ? await subgraphAtOffset(db, query, args.offset, opts)
180
+ : undefined;
125
181
  if (!subgraph) {
126
- throw new Error('Query type must be specified using --offset, --interval or --node');
182
+ throw new Error('Query type must be specified using --offset, --interval, --node or --between');
127
183
  }
128
184
  if (args.resolve) {
129
185
  await subgraph.identifyPaths();
130
186
  }
187
+ const names = args.resolve ? 'resolved' : 'anonymous';
131
188
  const output = args.alignments
132
- ? subgraph.alignments().map(a => ({ ...a, name: a.name ? formatPathName(a.name, a.name.fragment) : undefined, start: undefined }))
133
- : subgraph.toJSON(args.cigar, { names: args.resolve ? 'resolved' : 'anonymous' });
134
- process.stdout.write(`${JSON.stringify(output)}\n`);
189
+ ? subgraph.alignments().map(a => ({
190
+ ...a,
191
+ name: a.name && a.hapStart !== undefined && a.hapEnd !== undefined
192
+ ? formatPathName({ ...a.name, fragment: a.hapStart }, a.hapEnd)
193
+ : undefined,
194
+ start: undefined,
195
+ }))
196
+ : subgraph.toJSON(args.cigar, { names });
197
+ process.stdout.write(args.format === 'gfa' && !args.alignments
198
+ ? await subgraph.toGFA(args.cigar, { names })
199
+ : `${JSON.stringify(output)}\n`);
135
200
  if (args.stats) {
136
201
  const { fetches, bytesFetched } = db.sqlite.pager;
137
- const { orderedAlignments, lcsAlignments, identificationSteps, identificationFetches } = subgraph.stats;
202
+ const { orderedAlignments, lcsAlignments, identificationSteps, identificationFetches, } = subgraph.stats;
138
203
  process.stderr.write(`Subgraph contains ${subgraph.nodeCount} nodes and ${subgraph.pathCount} paths; ${fetches} fetches, ${bytesFetched} bytes; ${orderedAlignments} ordered + ${lcsAlignments} lcs alignments; identification ${identificationSteps} steps, ${identificationFetches} lookups\n`);
139
204
  }
140
205
  }
206
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/db.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import type { ByteSource } from './filehandle.ts';
2
1
  import { GbwtRecord } from './gbwt/record.ts';
3
- import type { Pos } from './gbwt/record.ts';
4
2
  import { SqliteDatabase } from './sqlite/database.ts';
3
+ import type { ByteSource } from './filehandle.ts';
4
+ import type { Pos } from './gbwt/record.ts';
5
+ import type { GraphName } from './graphName.ts';
5
6
  import type { PagerOptions } from './sqlite/pager.ts';
6
7
  export interface PathName {
7
8
  sample: string;
@@ -12,8 +13,8 @@ export interface PathName {
12
13
  export declare const GENERIC_SAMPLE = "_gbwt_ref";
13
14
  export declare const SCHEMA_VERSION = "GBZ-base version 4";
14
15
  export declare class SchemaVersionError extends Error {
15
- readonly found: string | undefined;
16
16
  name: string;
17
+ readonly found: string | undefined;
17
18
  constructor(found: string | undefined);
18
19
  }
19
20
  export declare function formatPathName(name: PathName, end: number): string;
@@ -32,12 +33,12 @@ export interface GbzPath {
32
33
  isIndexed: boolean;
33
34
  }
34
35
  export declare class GbzRecord {
36
+ readonly sequenceLen: number;
35
37
  readonly handle: number;
36
38
  readonly edges: Pos[];
37
39
  readonly bwt: Uint8Array;
38
40
  readonly encodedSequence: Uint8Array;
39
41
  readonly next: number | undefined;
40
- readonly sequenceLen: number;
41
42
  private decoded;
42
43
  constructor(handle: number, edges: Pos[], bwt: Uint8Array, encodedSequence: Uint8Array, next: number | undefined);
43
44
  get id(): number;
@@ -46,12 +47,17 @@ export declare class GbzRecord {
46
47
  successors(): number[];
47
48
  gbwt(): GbwtRecord;
48
49
  }
50
+ export interface OpenOptions extends PagerOptions {
51
+ haplotypeIndex?: ByteSource;
52
+ }
49
53
  export declare class GBZBase {
50
- readonly sqlite: SqliteDatabase;
51
54
  private tagCache;
52
55
  private pathCache;
56
+ private indexTags;
57
+ readonly sqlite: SqliteDatabase;
58
+ private readonly index;
53
59
  private constructor();
54
- static open(source: ByteSource, opts?: PagerOptions): Promise<GBZBase>;
60
+ static open(source: ByteSource, opts?: OpenOptions): Promise<GBZBase>;
55
61
  tags(): Promise<Map<string, string>>;
56
62
  tag(key: string): Promise<string | undefined>;
57
63
  getRecord(handle: number): Promise<GbzRecord | undefined>;
@@ -59,6 +65,8 @@ export declare class GBZBase {
59
65
  getPath(handle: number): Promise<GbzPath | undefined>;
60
66
  findPath(name: PathName): Promise<GbzPath | undefined>;
61
67
  pathsForSample(sample: string): Promise<GbzPath[]>;
68
+ graphName(): Promise<GraphName>;
69
+ hasChainLinks(): Promise<boolean>;
62
70
  get hasHaplotypeIndex(): boolean;
63
71
  haplotypeSampleInterval(): Promise<number | undefined>;
64
72
  private sampleFromRow;
package/dist/db.js CHANGED
@@ -1,12 +1,13 @@
1
- import { GbwtRecord, decompressEdges } from "./gbwt/record.js";
2
1
  import { ENDMARKER, nodeId, nodeOrientation } from "./gbwt/node.js";
2
+ import { GbwtRecord, decompressEdges } from "./gbwt/record.js";
3
3
  import { decodeSequence, encodedSequenceLength } from "./gbwt/sequence.js";
4
+ import { graphNameFromTags } from "./graphName.js";
4
5
  import { SqliteDatabase } from "./sqlite/database.js";
5
6
  export const GENERIC_SAMPLE = '_gbwt_ref';
6
7
  export const SCHEMA_VERSION = 'GBZ-base version 4';
7
8
  export class SchemaVersionError extends Error {
8
- found;
9
9
  name = 'SchemaVersionError';
10
+ found;
10
11
  constructor(found) {
11
12
  super(found === undefined
12
13
  ? `not a gbz-base database: its Tags table has no version`
@@ -18,12 +19,12 @@ export function formatPathName(name, end) {
18
19
  return `${name.sample}#${name.haplotype}#${name.contig}[${name.fragment}-${end}]`;
19
20
  }
20
21
  export class GbzRecord {
22
+ sequenceLen;
21
23
  handle;
22
24
  edges;
23
25
  bwt;
24
26
  encodedSequence;
25
27
  next;
26
- sequenceLen;
27
28
  decoded;
28
29
  constructor(handle, edges, bwt, encodedSequence, next) {
29
30
  this.handle = handle;
@@ -74,8 +75,14 @@ function blob(value, what) {
74
75
  function rowToPath(rowid, values) {
75
76
  return {
76
77
  handle: rowid,
77
- fwStart: { node: num(values[1], 'Paths.fw_node'), offset: num(values[2], 'Paths.fw_offset') },
78
- revStart: { node: num(values[3], 'Paths.rev_node'), offset: num(values[4], 'Paths.rev_offset') },
78
+ fwStart: {
79
+ node: num(values[1], 'Paths.fw_node'),
80
+ offset: num(values[2], 'Paths.fw_offset'),
81
+ },
82
+ revStart: {
83
+ node: num(values[3], 'Paths.rev_node'),
84
+ offset: num(values[4], 'Paths.rev_offset'),
85
+ },
79
86
  name: {
80
87
  sample: str(values[5], 'Paths.sample'),
81
88
  contig: str(values[6], 'Paths.contig'),
@@ -85,33 +92,52 @@ function rowToPath(rowid, values) {
85
92
  isIndexed: num(values[9], 'Paths.is_indexed') !== 0,
86
93
  };
87
94
  }
95
+ async function readTags(sqlite) {
96
+ const tags = new Map();
97
+ for await (const { values } of sqlite.scan('Tags')) {
98
+ tags.set(str(values[0], 'Tags.key'), str(values[1], 'Tags.value'));
99
+ }
100
+ return tags;
101
+ }
88
102
  export class GBZBase {
89
- sqlite;
90
103
  tagCache;
91
104
  pathCache;
92
- constructor(sqlite) {
105
+ indexTags;
106
+ sqlite;
107
+ index;
108
+ constructor(sqlite, index) {
93
109
  this.sqlite = sqlite;
110
+ this.index = index;
94
111
  }
95
112
  static async open(source, opts = {}) {
96
- const sqlite = await SqliteDatabase.open(source, opts);
113
+ const { haplotypeIndex, ...pagerOptions } = opts;
114
+ const sqlite = await SqliteDatabase.open(source, pagerOptions);
97
115
  for (const table of ['Tags', 'Nodes', 'Paths', 'ReferenceIndex']) {
98
116
  sqlite.rootPage(table);
99
117
  }
100
- const db = new GBZBase(sqlite);
118
+ const index = haplotypeIndex
119
+ ? await SqliteDatabase.open(haplotypeIndex, pagerOptions)
120
+ : sqlite;
121
+ const db = new GBZBase(sqlite, index);
101
122
  const version = await db.tag('version');
102
123
  if (version !== SCHEMA_VERSION) {
103
124
  throw new SchemaVersionError(version);
104
125
  }
126
+ if (haplotypeIndex) {
127
+ for (const table of ['Tags', 'HaplotypeSamples', 'HaplotypeLengths']) {
128
+ index.rootPage(table);
129
+ }
130
+ db.indexTags = await readTags(index);
131
+ const indexed = db.indexTags.get('haplotype_index_paths');
132
+ const paths = await db.tag('paths');
133
+ if (indexed !== paths) {
134
+ throw new Error(`haplotype index was built for ${indexed ?? 'an unknown number of'} paths but the graph has ${paths}`);
135
+ }
136
+ }
105
137
  return db;
106
138
  }
107
139
  tags() {
108
- this.tagCache ??= (async () => {
109
- const tags = new Map();
110
- for await (const { values } of this.sqlite.scan('Tags')) {
111
- tags.set(str(values[0], 'Tags.key'), str(values[1], 'Tags.value'));
112
- }
113
- return tags;
114
- })();
140
+ this.tagCache ??= readTags(this.sqlite);
115
141
  return this.tagCache;
116
142
  }
117
143
  async tag(key) {
@@ -149,11 +175,37 @@ export class GBZBase {
149
175
  async pathsForSample(sample) {
150
176
  return (await this.paths()).filter(p => p.name.sample === sample);
151
177
  }
178
+ async graphName() {
179
+ const gbzTags = new Map();
180
+ for (const [key, value] of await this.tags()) {
181
+ if (key.startsWith('gbz_')) {
182
+ gbzTags.set(key.slice('gbz_'.length), value);
183
+ }
184
+ }
185
+ let name = {
186
+ name: undefined,
187
+ subgraph: new Map(),
188
+ translation: new Map(),
189
+ };
190
+ try {
191
+ name = graphNameFromTags(gbzTags);
192
+ }
193
+ catch {
194
+ // upstream falls back to an empty name when the tags do not parse
195
+ }
196
+ return name;
197
+ }
198
+ async hasChainLinks() {
199
+ const links = await this.tag('chain_links');
200
+ return links !== undefined && Number(links) > 0;
201
+ }
152
202
  get hasHaplotypeIndex() {
153
- return this.sqlite.has('HaplotypeSamples') && this.sqlite.has('HaplotypeLengths');
203
+ return (this.index.has('HaplotypeSamples') && this.index.has('HaplotypeLengths'));
154
204
  }
155
205
  async haplotypeSampleInterval() {
156
- const value = await this.tag('haplotype_index_interval');
206
+ const value = this.indexTags
207
+ ? this.indexTags.get('haplotype_index_interval')
208
+ : await this.tag('haplotype_index_interval');
157
209
  return value === undefined ? undefined : Number(value);
158
210
  }
159
211
  sampleFromRow(values) {
@@ -161,18 +213,23 @@ export class GBZBase {
161
213
  node: num(values[0], 'HaplotypeSamples.node_handle'),
162
214
  offset: num(values[1], 'HaplotypeSamples.node_offset'),
163
215
  pathHandle: num(values[2], 'HaplotypeSamples.path_handle'),
164
- orientation: num(values[3], 'HaplotypeSamples.orientation') === 0 ? 'forward' : 'reverse',
216
+ orientation: num(values[3], 'HaplotypeSamples.orientation') === 0
217
+ ? 'forward'
218
+ : 'reverse',
165
219
  pathOffset: num(values[4], 'HaplotypeSamples.path_offset'),
166
220
  };
167
221
  }
168
222
  async haplotypeSamplesInRange(minHandle, maxHandle) {
169
223
  const samples = [];
170
- for await (const key of this.sqlite.indexScanFrom('HaplotypeSamples', [minHandle, 0])) {
224
+ for await (const key of this.index.indexScanFrom('HaplotypeSamples', [
225
+ minHandle,
226
+ 0,
227
+ ])) {
171
228
  const node = num(key[0], 'HaplotypeSamples.node_handle');
172
229
  if (node > maxHandle) {
173
230
  break;
174
231
  }
175
- const row = await this.sqlite.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
232
+ const row = await this.index.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
176
233
  if (row) {
177
234
  samples.push(this.sampleFromRow(row));
178
235
  }
@@ -180,20 +237,23 @@ export class GBZBase {
180
237
  return samples;
181
238
  }
182
239
  async haplotypeSampleAt(node, offset) {
183
- const key = await this.sqlite.indexSeekLE('HaplotypeSamples', [node, offset]);
184
- if (!key || key[0] !== node || key[1] !== offset) {
240
+ const key = await this.index.indexSeekLE('HaplotypeSamples', [node, offset]);
241
+ if (key?.[0] !== node || key[1] !== offset) {
185
242
  return undefined;
186
243
  }
187
- const row = await this.sqlite.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
244
+ const row = await this.index.byRowid('HaplotypeSamples', num(key[2], 'HaplotypeSamples rowid'));
188
245
  return row ? this.sampleFromRow(row) : undefined;
189
246
  }
190
247
  async haplotypeLength(pathHandle) {
191
- const row = await this.sqlite.byRowid('HaplotypeLengths', pathHandle);
248
+ const row = await this.index.byRowid('HaplotypeLengths', pathHandle);
192
249
  return row ? num(row[1], 'HaplotypeLengths.length') : undefined;
193
250
  }
194
251
  async indexedPosition(pathHandle, pathOffset) {
195
- const key = await this.sqlite.indexSeekLE('ReferenceIndex', [pathHandle, pathOffset]);
196
- if (!key || key[0] !== pathHandle) {
252
+ const key = await this.sqlite.indexSeekLE('ReferenceIndex', [
253
+ pathHandle,
254
+ pathOffset,
255
+ ]);
256
+ if (key?.[0] !== pathHandle) {
197
257
  return undefined;
198
258
  }
199
259
  const row = await this.sqlite.byRowid('ReferenceIndex', num(key[2], 'ReferenceIndex rowid'));
@@ -202,7 +262,11 @@ export class GBZBase {
202
262
  }
203
263
  return {
204
264
  pathOffset: num(row[1], 'ReferenceIndex.path_offset'),
205
- pos: { node: num(row[2], 'ReferenceIndex.node_handle'), offset: num(row[3], 'ReferenceIndex.node_offset') },
265
+ pos: {
266
+ node: num(row[2], 'ReferenceIndex.node_handle'),
267
+ offset: num(row[3], 'ReferenceIndex.node_offset'),
268
+ },
206
269
  };
207
270
  }
208
271
  }
272
+ //# sourceMappingURL=db.js.map
package/dist/db.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../src/db.ts"],"names":[],"mappings":"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"}
@@ -1 +1,2 @@
1
1
  export {};
2
+ //# sourceMappingURL=filehandle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filehandle.js","sourceRoot":"","sources":["../src/filehandle.ts"],"names":[],"mappings":""}
@@ -1,6 +1,6 @@
1
1
  export declare class ByteCodeReader {
2
- private bytes;
3
2
  offset: number;
3
+ private bytes;
4
4
  constructor(bytes: Uint8Array);
5
5
  get done(): boolean;
6
6
  byte(): number | undefined;
@@ -1,6 +1,6 @@
1
1
  export class ByteCodeReader {
2
- bytes;
3
2
  offset = 0;
3
+ bytes;
4
4
  constructor(bytes) {
5
5
  this.bytes = bytes;
6
6
  }
@@ -39,13 +39,16 @@ export class RunReader {
39
39
  constructor(bytes, sigma) {
40
40
  this.source = new ByteCodeReader(bytes);
41
41
  this.sigma = sigma === 0 ? Number.MAX_SAFE_INTEGER : sigma;
42
- this.threshold = this.sigma < RLE_THRESHOLD ? Math.floor(RLE_UNIVERSE / this.sigma) : 0;
42
+ this.threshold =
43
+ this.sigma < RLE_THRESHOLD ? Math.floor(RLE_UNIVERSE / this.sigma) : 0;
43
44
  }
44
45
  next() {
45
46
  if (this.sigma >= RLE_THRESHOLD) {
46
47
  const value = this.source.int();
47
48
  const len = this.source.int();
48
- return value === undefined || len === undefined ? undefined : { value, len: len + 1 };
49
+ return value === undefined || len === undefined
50
+ ? undefined
51
+ : { value, len: len + 1 };
49
52
  }
50
53
  const byte = this.source.byte();
51
54
  if (byte === undefined) {
@@ -68,3 +71,4 @@ export class RunReader {
68
71
  }
69
72
  }
70
73
  }
74
+ //# sourceMappingURL=bytecode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bytecode.js","sourceRoot":"","sources":["../../src/gbwt/bytecode.ts"],"names":[],"mappings":"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"}
package/dist/gbwt/node.js CHANGED
@@ -32,7 +32,9 @@ export function exitOrientation(side) {
32
32
  export function edgeIsCanonical(from, to) {
33
33
  const fromId = nodeId(from);
34
34
  const toId = nodeId(to);
35
- return isReverse(from) ? toId > fromId || (toId === fromId && !isReverse(to)) : toId >= fromId;
35
+ return isReverse(from)
36
+ ? toId > fromId || (toId === fromId && !isReverse(to))
37
+ : toId >= fromId;
36
38
  }
37
39
  export function pathIsCanonical(path) {
38
40
  const first = path[0];
@@ -40,5 +42,8 @@ export function pathIsCanonical(path) {
40
42
  if (first === undefined || last === undefined) {
41
43
  return true;
42
44
  }
43
- return isReverse(first) === isReverse(last) ? !isReverse(first) : edgeIsCanonical(first, last);
45
+ return isReverse(first) === isReverse(last)
46
+ ? !isReverse(first)
47
+ : edgeIsCanonical(first, last);
44
48
  }
49
+ //# sourceMappingURL=node.js.map