@gmod/gbz-base 1.0.0 → 2.0.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.
package/dist/query.js CHANGED
@@ -1,37 +1,43 @@
1
- import { GENERIC_SAMPLE } from "./db.js";
1
+ import { pathNameFor } from "./pathName.js";
2
2
  import { Subgraph } from "./subgraph.js";
3
- function pathName(query, fragment) {
4
- return {
5
- sample: query.sample ?? GENERIC_SAMPLE,
6
- contig: query.contig,
7
- haplotype: query.haplotype ?? 0,
8
- fragment,
9
- };
10
- }
11
3
  export async function subgraphAtOffset(db, query, offset, opts = {}) {
12
- const subgraph = new Subgraph(db);
13
- subgraph.limit = opts.limit;
14
- const reference = await subgraph.pathPosition(pathName(query, offset));
4
+ const subgraph = new Subgraph(db, opts);
5
+ const reference = await subgraph.pathPosition(pathNameFor(query, offset));
15
6
  await subgraph.aroundPosition(reference.position.handle, reference.position.nodeOffset, opts.context ?? 100);
7
+ await subgraph.extractSnarls(opts.snarls ?? 'none');
16
8
  subgraph.extractPaths(reference, opts.haplotypes ?? 'all');
17
9
  return subgraph;
18
10
  }
19
11
  export async function subgraphInInterval(db, query, start, end, opts = {}) {
20
- const subgraph = new Subgraph(db);
21
- subgraph.limit = opts.limit;
22
- const reference = await subgraph.pathPosition(pathName(query, start));
12
+ const subgraph = new Subgraph(db, opts);
13
+ const reference = await subgraph.pathPosition(pathNameFor(query, start));
23
14
  await subgraph.aroundInterval(reference.position, end - start, opts.context ?? 100);
15
+ await subgraph.extractSnarls(opts.snarls ?? 'none');
24
16
  subgraph.extractPaths(reference, opts.haplotypes ?? 'all');
25
17
  return subgraph;
26
18
  }
27
19
  export async function subgraphAroundNodes(db, nodes, opts = {}) {
28
20
  const haplotypes = opts.haplotypes ?? 'all';
21
+ const snarls = opts.snarls ?? 'none';
29
22
  if (haplotypes === 'reference-only') {
30
23
  throw new Error('Cannot output a reference path in a node-based query');
31
24
  }
32
- const subgraph = new Subgraph(db);
33
- subgraph.limit = opts.limit;
25
+ if (snarls === 'overlapping' && nodes.length > 1) {
26
+ throw new Error('Overlapping snarls cannot be extracted for a node-based query with multiple nodes');
27
+ }
28
+ const subgraph = new Subgraph(db, opts);
34
29
  await subgraph.aroundNodes(nodes, opts.context ?? 100);
30
+ await subgraph.extractSnarls(snarls);
31
+ subgraph.extractPaths(undefined, haplotypes);
32
+ return subgraph;
33
+ }
34
+ export async function subgraphBetween(db, start, end, opts = {}) {
35
+ const haplotypes = opts.haplotypes ?? 'all';
36
+ if (haplotypes === 'reference-only') {
37
+ throw new Error('Cannot output a reference path in a node-based query');
38
+ }
39
+ const subgraph = new Subgraph(db, opts);
40
+ await subgraph.betweenNodes(start, end);
35
41
  subgraph.extractPaths(undefined, haplotypes);
36
42
  return subgraph;
37
43
  }
package/dist/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAiBxC,SAAS,QAAQ,CAAC,KAAgB,EAAE,QAAgB;IAClD,OAAO;QACL,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,cAAc;QACtC,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,CAAC;QAC/B,QAAQ;KACT,CAAA;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAW,EACX,KAAgB,EAChB,MAAc,EACd,OAAqB,EAAE;IAEvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;IACjC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC3B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACtE,MAAM,QAAQ,CAAC,cAAc,CAC3B,SAAS,CAAC,QAAQ,CAAC,MAAM,EACzB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAC7B,IAAI,CAAC,OAAO,IAAI,GAAG,CACpB,CAAA;IACD,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAA;IAC1D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAW,EACX,KAAgB,EAChB,KAAa,EACb,GAAW,EACX,OAAqB,EAAE;IAEvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;IACjC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC3B,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACrE,MAAM,QAAQ,CAAC,cAAc,CAC3B,SAAS,CAAC,QAAQ,EAClB,GAAG,GAAG,KAAK,EACX,IAAI,CAAC,OAAO,IAAI,GAAG,CACpB,CAAA;IACD,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAA;IAC1D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAW,EACX,KAAe,EACf,OAAqB,EAAE;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAA;IAC3C,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAA;IACjC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAA;IAC3B,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;IACtD,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC5C,OAAO,QAAQ,CAAA;AACjB,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAgBxC,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,EAAW,EACX,KAAgB,EAChB,MAAc,EACd,OAAqB,EAAE;IAEvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAA;IACzE,MAAM,QAAQ,CAAC,cAAc,CAC3B,SAAS,CAAC,QAAQ,CAAC,MAAM,EACzB,SAAS,CAAC,QAAQ,CAAC,UAAU,EAC7B,IAAI,CAAC,OAAO,IAAI,GAAG,CACpB,CAAA;IACD,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAA;IAC1D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,EAAW,EACX,KAAgB,EAChB,KAAa,EACb,GAAW,EACX,OAAqB,EAAE;IAEvB,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;IACxE,MAAM,QAAQ,CAAC,cAAc,CAC3B,SAAS,CAAC,QAAQ,EAClB,GAAG,GAAG,KAAK,EACX,IAAI,CAAC,OAAO,IAAI,GAAG,CACpB,CAAA;IACD,MAAM,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,CAAA;IAC1D,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,EAAW,EACX,KAAe,EACf,OAAqB,EAAE;IAEvB,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAA;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,CAAA;IACpC,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,IAAI,MAAM,KAAK,aAAa,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,KAAK,CACb,mFAAmF,CACpF,CAAA;IACH,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,QAAQ,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,IAAI,GAAG,CAAC,CAAA;IACtD,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IACpC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC5C,OAAO,QAAQ,CAAA;AACjB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,EAAW,EACX,KAAa,EACb,GAAW,EACX,OAA8D,EAAE;IAEhE,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,KAAK,CAAA;IAC3C,IAAI,UAAU,KAAK,gBAAgB,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAA;IACzE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACvC,MAAM,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IACvC,QAAQ,CAAC,YAAY,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;IAC5C,OAAO,QAAQ,CAAA;AACjB,CAAC"}
@@ -3,6 +3,7 @@ import type { SqlValue } from './record.ts';
3
3
  export declare class BTree {
4
4
  private readonly usable;
5
5
  private pager;
6
+ private decodedIndexPages;
6
7
  constructor(pager: Pager, reservedBytes: number);
7
8
  private localPayloadSize;
8
9
  private payload;
@@ -12,6 +13,7 @@ export declare class BTree {
12
13
  rowid: number;
13
14
  values: SqlValue[];
14
15
  }>;
16
+ private decodedCells;
15
17
  private indexCell;
16
18
  indexScanFrom(root: number, low: number[]): AsyncGenerator<SqlValue[]>;
17
19
  indexSeekLE(root: number, key: number[]): Promise<SqlValue[] | undefined>;
@@ -3,8 +3,16 @@ const INTERIOR_INDEX = 0x02;
3
3
  const INTERIOR_TABLE = 0x05;
4
4
  const LEAF_INDEX = 0x0a;
5
5
  const LEAF_TABLE = 0x0d;
6
+ function readUint16(page, offset) {
7
+ return page[offset] * 256 + page[offset + 1];
8
+ }
9
+ function readUint32(page, offset) {
10
+ return (page[offset] * 16777216 +
11
+ page[offset + 1] * 65536 +
12
+ page[offset + 2] * 256 +
13
+ page[offset + 3]);
14
+ }
6
15
  function readHeader(page, start) {
7
- const view = new DataView(page.buffer, page.byteOffset, page.byteLength);
8
16
  const type = page[start];
9
17
  if (type !== INTERIOR_INDEX &&
10
18
  type !== INTERIOR_TABLE &&
@@ -15,22 +23,19 @@ function readHeader(page, start) {
15
23
  const interior = type === INTERIOR_INDEX || type === INTERIOR_TABLE;
16
24
  return {
17
25
  type,
18
- cellCount: view.getUint16(start + 3),
19
- rightChild: interior ? view.getUint32(start + 8) : 0,
26
+ cellCount: readUint16(page, start + 3),
27
+ rightChild: interior ? readUint32(page, start + 8) : 0,
20
28
  cellPointers: start + (interior ? 12 : 8),
21
29
  };
22
30
  }
23
31
  function cellOffset(page, header, index) {
24
- const view = new DataView(page.buffer, page.byteOffset, page.byteLength);
25
- return view.getUint16(header.cellPointers + 2 * index);
26
- }
27
- function readUint32(page, offset) {
28
- const view = new DataView(page.buffer, page.byteOffset, page.byteLength);
29
- return view.getUint32(offset);
32
+ return readUint16(page, header.cellPointers + 2 * index);
30
33
  }
34
+ const MAX_DECODED_INDEX_PAGES = 4096;
31
35
  export class BTree {
32
36
  usable;
33
37
  pager;
38
+ decodedIndexPages = new Map();
34
39
  constructor(pager, reservedBytes) {
35
40
  this.pager = pager;
36
41
  this.usable = pager.pageSize - reservedBytes;
@@ -132,18 +137,48 @@ export class BTree {
132
137
  }
133
138
  }
134
139
  else {
140
+ const children = [];
135
141
  for (let i = 0; i < header.cellCount; i++) {
136
- yield* this.tableScan(readUint32(page, cellOffset(page, header, i)));
142
+ children.push(readUint32(page, cellOffset(page, header, i)));
143
+ }
144
+ children.push(header.rightChild);
145
+ this.pager.prefetch(children);
146
+ for (const child of children) {
147
+ yield* this.tableScan(child);
137
148
  }
138
- yield* this.tableScan(header.rightChild);
139
149
  }
140
150
  }
141
- async indexCell(page, header, index) {
142
- const offset = cellOffset(page, header, index);
143
- const interior = header.type === INTERIOR_INDEX;
144
- const [size, afterSize] = readVarint(page, interior ? offset + 4 : offset);
145
- const values = decodeRecord(await this.payload(page, afterSize, size, true));
146
- return { values, leftChild: interior ? readUint32(page, offset) : 0 };
151
+ decodedCells(pageNumber, header) {
152
+ let cells = this.decodedIndexPages.get(pageNumber);
153
+ if (cells) {
154
+ this.decodedIndexPages.delete(pageNumber);
155
+ }
156
+ else {
157
+ cells = new Array(header.cellCount);
158
+ if (this.decodedIndexPages.size >= MAX_DECODED_INDEX_PAGES) {
159
+ const oldest = this.decodedIndexPages.keys().next().value;
160
+ if (oldest !== undefined) {
161
+ this.decodedIndexPages.delete(oldest);
162
+ }
163
+ }
164
+ }
165
+ this.decodedIndexPages.set(pageNumber, cells);
166
+ return cells;
167
+ }
168
+ async indexCell(pageNumber, page, header, index) {
169
+ const cells = this.decodedCells(pageNumber, header);
170
+ let cell = cells[index];
171
+ if (!cell) {
172
+ const offset = cellOffset(page, header, index);
173
+ const interior = header.type === INTERIOR_INDEX;
174
+ const [size, afterSize] = readVarint(page, interior ? offset + 4 : offset);
175
+ cell = {
176
+ values: decodeRecord(await this.payload(page, afterSize, size, true)),
177
+ leftChild: interior ? readUint32(page, offset) : 0,
178
+ };
179
+ cells[index] = cell;
180
+ }
181
+ return cell;
147
182
  }
148
183
  async *indexScanFrom(root, low) {
149
184
  const { page, header } = await this.pageAt(root);
@@ -151,7 +186,7 @@ export class BTree {
151
186
  let high = header.cellCount;
152
187
  while (first < high) {
153
188
  const mid = (first + high) >> 1;
154
- const cell = await this.indexCell(page, header, mid);
189
+ const cell = await this.indexCell(root, page, header, mid);
155
190
  if (compareKey(cell.values, low) < 0) {
156
191
  first = mid + 1;
157
192
  }
@@ -160,7 +195,7 @@ export class BTree {
160
195
  }
161
196
  }
162
197
  for (let i = first; i < header.cellCount; i++) {
163
- const cell = await this.indexCell(page, header, i);
198
+ const cell = await this.indexCell(root, page, header, i);
164
199
  if (header.type === INTERIOR_INDEX) {
165
200
  yield* this.indexScanFrom(cell.leftChild, low);
166
201
  }
@@ -180,7 +215,7 @@ export class BTree {
180
215
  let child = 0;
181
216
  while (low < high) {
182
217
  const mid = (low + high) >> 1;
183
- const cell = await this.indexCell(page, header, mid);
218
+ const cell = await this.indexCell(pageNumber, page, header, mid);
184
219
  if (compareKey(cell.values, key) <= 0) {
185
220
  best = cell.values;
186
221
  low = mid + 1;
@@ -1 +1 @@
1
- {"version":3,"file":"btree.js","sourceRoot":"","sources":["../../src/sqlite/btree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"btree.js","sourceRoot":"","sources":["../../src/sqlite/btree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAKtD,MAAM,cAAc,GAAG,IAAI,CAAA;AAC3B,MAAM,cAAc,GAAG,IAAI,CAAA;AAC3B,MAAM,UAAU,GAAG,IAAI,CAAA;AACvB,MAAM,UAAU,GAAG,IAAI,CAAA;AASvB,SAAS,UAAU,CAAC,IAAgB,EAAE,MAAc;IAClD,OAAO,IAAI,CAAC,MAAM,CAAE,GAAG,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAA;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,IAAgB,EAAE,MAAc;IAClD,OAAO,CACL,IAAI,CAAC,MAAM,CAAE,GAAG,QAAQ;QACxB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,KAAK;QACzB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,GAAG,GAAG;QACvB,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAClB,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAgB,EAAE,KAAa;IACjD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IACxB,IACE,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,cAAc;QACvB,IAAI,KAAK,UAAU;QACnB,IAAI,KAAK,UAAU,EACnB,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,IAAI,EAAE,CAAC,CAAA;IAChE,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,KAAK,cAAc,IAAI,IAAI,KAAK,cAAc,CAAA;IACnE,OAAO;QACL,IAAI;QACJ,SAAS,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC;QACtC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACtD,YAAY,EAAE,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;KAC1C,CAAA;AACH,CAAC;AAED,SAAS,UAAU,CAAC,IAAgB,EAAE,MAAkB,EAAE,KAAa;IACrE,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,YAAY,GAAG,CAAC,GAAG,KAAK,CAAC,CAAA;AAC1D,CAAC;AAOD,MAAM,uBAAuB,GAAG,IAAI,CAAA;AAEpC,MAAM,OAAO,KAAK;IACC,MAAM,CAAQ;IACvB,KAAK,CAAO;IACZ,iBAAiB,GAAG,IAAI,GAAG,EAAqC,CAAA;IAExE,YAAY,KAAY,EAAE,aAAqB;QAC7C,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;QAClB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,GAAG,aAAa,CAAA;IAC9C,CAAC;IAEO,gBAAgB,CAAC,KAAa,EAAE,OAAgB;QACtD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAA;QAC1B,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE;YAC7C,CAAC,CAAC,MAAM,GAAG,EAAE,CAAA;QACf,IAAI,KAAK,IAAI,QAAQ,EAAE,CAAC;YACtB,OAAO,KAAK,CAAA;QACd,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,EAAE,CAAA;QAC5D,MAAM,KAAK,GAAG,QAAQ,GAAG,CAAC,CAAC,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAA;QAC5D,OAAO,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;IAC7C,CAAC;IAEO,KAAK,CAAC,OAAO,CACnB,IAAgB,EAChB,MAAc,EACd,KAAa,EACb,OAAgB;QAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACnD,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;QAC9C,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;QACpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAA;QACpD,IAAI,MAAM,GAAG,KAAK,CAAA;QAClB,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC,CAAA;QAC3C,OAAO,IAAI,KAAK,CAAC,IAAI,MAAM,GAAG,KAAK,EAAE,CAAC;YACpC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAC5C,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,CAC7B,CAAC,EACD,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,CAC9C,CAAA;YACD,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;YACzB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAA;YACtB,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;QAChC,CAAC;QACD,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAA;QACH,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAEO,KAAK,CAAC,MAAM,CAAC,UAAkB;QACrC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC9C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,IAAI,EAAE,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;IACvE,CAAC;IAED,KAAK,CAAC,UAAU,CACd,IAAY,EACZ,KAAa;QAEb,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,SAAS,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACtD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,IAAI,GAAG,GAAG,CAAC,CAAA;gBACX,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;gBAC3B,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;oBAClB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;oBAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;oBAC5C,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;oBAClD,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;oBACnD,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;wBAClB,OAAO,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;oBACtE,CAAC;oBACD,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;wBAChB,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;oBACf,CAAC;yBAAM,CAAC;wBACN,IAAI,GAAG,GAAG,CAAA;oBACZ,CAAC;gBACH,CAAC;gBACD,OAAO,SAAS,CAAA;YAClB,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;YAC/D,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;YAC3B,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC7B,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAC5C,MAAM,CAAC,GAAG,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;gBAC1C,IAAI,GAAG,GAAG,KAAK,EAAE,CAAC;oBAChB,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;gBACf,CAAC;qBAAM,CAAC;oBACN,IAAI,GAAG,GAAG,CAAA;gBACZ,CAAC;YACH,CAAC;YACD,UAAU;gBACR,GAAG,KAAK,MAAM,CAAC,SAAS;oBACtB,CAAC,CAAC,MAAM,CAAC,UAAU;oBACnB,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,CAAC,SAAS,CACd,IAAY;QAEZ,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;gBAC1C,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;gBAClD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAA;gBACrD,MAAM;oBACJ,KAAK;oBACL,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;iBACtE,CAAA;YACH,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAa,EAAE,CAAA;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;YAC9D,CAAC;YACD,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;YAC7B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;gBAC7B,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YAC9B,CAAC;QACH,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,UAAkB,EAAE,MAAkB;QACzD,IAAI,KAAK,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;QAClD,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAC3C,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,IAAI,KAAK,CAAwB,MAAM,CAAC,SAAS,CAAC,CAAA;YAC1D,IAAI,IAAI,CAAC,iBAAiB,CAAC,IAAI,IAAI,uBAAuB,EAAE,CAAC;gBAC3D,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAA;gBACzD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;oBACzB,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAA;QAC7C,OAAO,KAAK,CAAA;IACd,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,UAAkB,EAClB,IAAgB,EAChB,MAAkB,EAClB,KAAa;QAEb,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAA;QACnD,IAAI,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAA;YAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,KAAK,cAAc,CAAA;YAC/C,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAA;YAC1E,IAAI,GAAG;gBACL,MAAM,EAAE,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACrE,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;aACnD,CAAA;YACD,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QACrB,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,CAAC,aAAa,CAClB,IAAY,EACZ,GAAa;QAEb,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,KAAK,GAAG,CAAC,CAAA;QACb,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;QAC3B,OAAO,KAAK,GAAG,IAAI,EAAE,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;YAC/B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YAC1D,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,KAAK,GAAG,GAAG,GAAG,CAAC,CAAA;YACjB,CAAC;iBAAM,CAAC;gBACN,IAAI,GAAG,GAAG,CAAA;YACZ,CAAC;QACH,CAAC;QACD,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;YACxD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;gBACnC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAA;YAChD,CAAC;YACD,MAAM,IAAI,CAAC,MAAM,CAAA;QACnB,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;YACnC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACnD,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CACf,IAAY,EACZ,GAAa;QAEb,IAAI,IAA4B,CAAA;QAChC,IAAI,UAAU,GAAG,IAAI,CAAA;QACrB,SAAS,CAAC;YACR,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACtD,IAAI,GAAG,GAAG,CAAC,CAAA;YACX,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAA;YAC3B,IAAI,KAAK,GAAG,CAAC,CAAA;YACb,OAAO,GAAG,GAAG,IAAI,EAAE,CAAC;gBAClB,MAAM,GAAG,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;gBAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;gBAChE,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBACtC,IAAI,GAAG,IAAI,CAAC,MAAM,CAAA;oBAClB,GAAG,GAAG,GAAG,GAAG,CAAC,CAAA;gBACf,CAAC;qBAAM,CAAC;oBACN,KAAK,GAAG,IAAI,CAAC,SAAS,CAAA;oBACtB,IAAI,GAAG,GAAG,CAAA;gBACZ,CAAC;YACH,CAAC;YACD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC/B,OAAO,IAAI,CAAA;YACb,CAAC;YACD,UAAU,GAAG,GAAG,KAAK,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAA;QACnE,CAAC;IACH,CAAC;CACF;AAED,SAAS,UAAU,CAAC,MAAkB,EAAE,GAAa;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;QACnB,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAChB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAA;QACpD,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACZ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACvB,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAA;AACV,CAAC"}
@@ -13,7 +13,12 @@ export declare class Pager {
13
13
  readonly pageSize: number;
14
14
  private fileSize;
15
15
  constructor(source: ByteSource, pageSize: number, fileSize: number, opts?: PagerOptions);
16
+ private read;
16
17
  seed(index: number, bytes: Uint8Array): void;
17
18
  private block;
19
+ prefetch(pageNumbers: number[]): void;
20
+ private fetchRun;
21
+ private forgetOnFailure;
22
+ private evict;
18
23
  page(pageNumber: number): Promise<Uint8Array<ArrayBufferLike>>;
19
24
  }
@@ -15,6 +15,23 @@ export class Pager {
15
15
  this.blockSize = Math.max(pageSize, Math.ceil(requested / pageSize) * pageSize);
16
16
  this.maxBlocks = opts.maxBlocks ?? 256;
17
17
  }
18
+ async read(length, start) {
19
+ let attempt = 0;
20
+ for (;;) {
21
+ try {
22
+ const bytes = await this.source.read(length, start);
23
+ this.bytesFetched += bytes.length;
24
+ return bytes;
25
+ }
26
+ catch (error) {
27
+ attempt += 1;
28
+ if (attempt >= 3) {
29
+ throw error;
30
+ }
31
+ await new Promise(resolve => setTimeout(resolve, 200 * attempt));
32
+ }
33
+ }
34
+ }
18
35
  seed(index, bytes) {
19
36
  if (bytes.length ===
20
37
  Math.min(this.blockSize, this.fileSize - index * this.blockSize)) {
@@ -30,19 +47,59 @@ export class Pager {
30
47
  }
31
48
  const start = index * this.blockSize;
32
49
  const length = Math.min(this.blockSize, this.fileSize - start);
33
- const pending = this.source.read(length, start).then(bytes => {
34
- this.bytesFetched += bytes.length;
35
- return bytes;
36
- });
50
+ const pending = this.read(length, start);
37
51
  this.fetches += 1;
38
52
  this.blocks.set(index, pending);
39
- if (this.blocks.size > this.maxBlocks) {
53
+ this.forgetOnFailure(pending, [index]);
54
+ this.evict();
55
+ return pending;
56
+ }
57
+ prefetch(pageNumbers) {
58
+ const wanted = [
59
+ ...new Set(pageNumbers.map(pageNumber => Math.floor(((pageNumber - 1) * this.pageSize) / this.blockSize))),
60
+ ]
61
+ .filter(index => !this.blocks.has(index))
62
+ .sort((a, b) => a - b);
63
+ let runStart = 0;
64
+ while (runStart < wanted.length) {
65
+ let runEnd = runStart + 1;
66
+ while (runEnd < wanted.length &&
67
+ wanted[runEnd] === wanted[runEnd - 1] + 1) {
68
+ runEnd += 1;
69
+ }
70
+ this.fetchRun(wanted[runStart], runEnd - runStart);
71
+ runStart = runEnd;
72
+ }
73
+ }
74
+ fetchRun(firstIndex, count) {
75
+ const start = firstIndex * this.blockSize;
76
+ const length = Math.min(count * this.blockSize, this.fileSize - start);
77
+ const pending = this.read(length, start);
78
+ this.fetches += 1;
79
+ const indexes = [];
80
+ for (let i = 0; i < count; i++) {
81
+ const within = i * this.blockSize;
82
+ indexes.push(firstIndex + i);
83
+ this.blocks.set(firstIndex + i, pending.then(bytes => bytes.subarray(within, within + this.blockSize)));
84
+ }
85
+ this.forgetOnFailure(pending, indexes);
86
+ this.evict();
87
+ }
88
+ forgetOnFailure(pending, indexes) {
89
+ pending.catch(() => {
90
+ for (const index of indexes) {
91
+ this.blocks.delete(index);
92
+ }
93
+ });
94
+ }
95
+ evict() {
96
+ while (this.blocks.size > this.maxBlocks) {
40
97
  const oldest = this.blocks.keys().next().value;
41
- if (oldest !== undefined) {
42
- this.blocks.delete(oldest);
98
+ if (oldest === undefined) {
99
+ break;
43
100
  }
101
+ this.blocks.delete(oldest);
44
102
  }
45
- return pending;
46
103
  }
47
104
  async page(pageNumber) {
48
105
  const offset = (pageNumber - 1) * this.pageSize;
@@ -1 +1 @@
1
- {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/sqlite/pager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pager.js","sourceRoot":"","sources":["../../src/sqlite/pager.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
- import type { GBZBase, PathName } from './db.ts';
1
+ import type { GBZBase } from './db.ts';
2
2
  import type { Orientation } from './gbwt/node.ts';
3
3
  import type { Pos } from './gbwt/record.ts';
4
+ import type { PathName } from './pathName.ts';
4
5
  export type HaplotypeOutput = 'all' | 'distinct' | 'reference-only' | 'none';
6
+ export type SnarlOutput = 'none' | 'contained' | 'overlapping';
5
7
  export interface PathPosition {
6
8
  seqOffset: number;
7
9
  handle: number;
@@ -42,12 +44,8 @@ export interface SubgraphJson {
42
44
  }[];
43
45
  paths: SubgraphPath[];
44
46
  }
45
- export interface HaplotypeAlignment {
46
- pathHandle: number | undefined;
47
- name: PathName | undefined;
47
+ export interface AlignmentSpan {
48
48
  strand: '+' | '-';
49
- hapStart: number | undefined;
50
- hapEnd: number | undefined;
51
49
  refStart: number;
52
50
  refEnd: number;
53
51
  cigar: string;
@@ -55,8 +53,23 @@ export interface HaplotypeAlignment {
55
53
  path: number[];
56
54
  start: Pos;
57
55
  }
58
- export interface ToJsonOptions {
59
- names?: 'anonymous' | 'resolved';
56
+ export type HaplotypeAlignment = AlignmentSpan & ({
57
+ resolved: true;
58
+ name: PathName;
59
+ label: string;
60
+ pathHandle: number;
61
+ hapStart: number;
62
+ hapEnd: number;
63
+ } | {
64
+ resolved: false;
65
+ });
66
+ export interface SubgraphOutputOptions {
67
+ cigar?: boolean | undefined;
68
+ names?: 'anonymous' | 'resolved' | undefined;
69
+ }
70
+ export interface SubgraphOptions {
71
+ limit?: number | undefined;
72
+ signal?: AbortSignal | undefined;
60
73
  }
61
74
  export declare class Subgraph {
62
75
  private records;
@@ -67,7 +80,6 @@ export declare class Subgraph {
67
80
  private refInterval;
68
81
  private refIndexCache;
69
82
  private refPrefixCache;
70
- limit: number | undefined;
71
83
  readonly stats: {
72
84
  orderedAlignments: number;
73
85
  lcsAlignments: number;
@@ -75,7 +87,9 @@ export declare class Subgraph {
75
87
  identificationFetches: number;
76
88
  };
77
89
  private db;
78
- constructor(db: GBZBase);
90
+ private readonly limit;
91
+ private readonly signal;
92
+ constructor(db: GBZBase, opts?: SubgraphOptions);
79
93
  get nodeCount(): number;
80
94
  get pathCount(): number;
81
95
  get referenceInterval(): {
@@ -105,6 +119,12 @@ export declare class Subgraph {
105
119
  removed: number;
106
120
  }>;
107
121
  private insertContext;
122
+ betweenNodes(start: number, end: number): Promise<number>;
123
+ extractSnarls(snarls: SnarlOutput): Promise<number>;
124
+ private overlappingSnarls;
125
+ private isSnarlEntryInSubgraph;
126
+ private recordReader;
127
+ private findCoveringSnarl;
108
128
  extractPaths(reference: ReferencePath | undefined, output: HaplotypeOutput): void;
109
129
  private distinctPaths;
110
130
  identifyPaths(): Promise<void>;
@@ -118,5 +138,8 @@ export declare class Subgraph {
118
138
  private edits;
119
139
  alignToRef(pathIndex: number): string | undefined;
120
140
  alignments(): HaplotypeAlignment[];
121
- toJSON(cigar: boolean, opts?: ToJsonOptions): SubgraphJson;
141
+ private canonicalEdges;
142
+ stableName(): Promise<string>;
143
+ toGFA(opts?: SubgraphOutputOptions): Promise<string>;
144
+ toSubgraphJson(opts?: SubgraphOutputOptions): SubgraphJson;
122
145
  }