@gmod/bam 7.2.3 → 7.3.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/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [![NPM version](https://img.shields.io/npm/v/@gmod/bam.svg?style=flat-square)](https://npmjs.org/package/@gmod/bam)
2
- [![Build Status](https://img.shields.io/github/actions/workflow/status/GMOD/bam-js/push.yml?branch=main)](https://github.com/GMOD/bam-js/actions?query=branch%3Amain+workflow%3APush+)
2
+ ![Build Status](https://img.shields.io/github/actions/workflow/status/GMOD/bam-js/publish.yml?branch=main)
3
3
 
4
4
  ## Install
5
5
 
@@ -93,6 +93,8 @@ Note: requires calling `getHeader` first.
93
93
  chromosomes. default: false
94
94
  - `opts.maxInsertSize` - control the viewAsPairs option behavior to limit
95
95
  distance within a chromosome to fetch. default: 200kb
96
+ - `opts.filterBy` - a `FilterBy` object to filter records by flag bits or a tag
97
+ value (see `FilterBy` below)
96
98
 
97
99
  ### async getHeader(opts?)
98
100
 
@@ -171,6 +173,31 @@ record.seqAt(idx) // get single base at position
171
173
  record.toJSON() // serialize record
172
174
  ```
173
175
 
176
+ ### FilterBy
177
+
178
+ ```typescript
179
+ interface FilterBy {
180
+ flagInclude?: number // only include reads where all these flag bits are set
181
+ flagExclude?: number // exclude reads where any of these flag bits are set
182
+ tagFilter?: {
183
+ tag: string // aux tag name, e.g. 'RG'
184
+ value?: string // omit to filter by tag presence only
185
+ }
186
+ }
187
+ ```
188
+
189
+ Example — fetch only properly-paired primary alignments from read-group `rg1`:
190
+
191
+ ```typescript
192
+ const records = await bam.getRecordsForRange('chr1', 0, 100000, {
193
+ filterBy: {
194
+ flagInclude: 0x2, // properly paired
195
+ flagExclude: 0x900, // not secondary or supplementary
196
+ tagFilter: { tag: 'RG', value: 'rg1' },
197
+ },
198
+ })
199
+ ```
200
+
174
201
  ### Custom BamRecord class
175
202
 
176
203
  You can provide your own BamRecord class to add custom properties or methods:
package/dist/bamFile.d.ts CHANGED
@@ -71,14 +71,15 @@ export default class BamFile<T extends BamRecordLike = BAMFeature> {
71
71
  }[];
72
72
  }[] | undefined>;
73
73
  getHeaderText(opts?: BaseOpts): Promise<string | undefined>;
74
+ private getSeqId;
74
75
  getRecordsForRange(chr: string, min: number, max: number, opts?: BamOpts): Promise<T[]>;
75
76
  private evictOverlappingChunks;
76
77
  private _fetchChunkFeaturesDirect;
77
78
  fetchPairs(chrId: number, records: T[], opts: BamOpts): Promise<T[]>;
78
79
  _readChunkFeatures(chunk: Chunk, opts: BaseOpts): Promise<T[]>;
79
80
  readBamFeatures(ba: Uint8Array, cpositions: number[], dpositions: number[], chunk: Chunk): Promise<T[]>;
80
- hasRefSeq(seqName: string): Promise<boolean>;
81
- lineCount(seqName: string): Promise<number>;
81
+ hasRefSeq(seqName: string, opts?: BaseOpts): Promise<boolean>;
82
+ lineCount(seqName: string, opts?: BaseOpts): Promise<number>;
82
83
  indexCov(seqName: string, start?: number, end?: number): Promise<never[] | import("./bai.ts").IndexCovEntry[]>;
83
84
  blocksForRange(seqName: string, start: number, end: number, opts?: BaseOpts): Promise<Chunk[] | never[]>;
84
85
  clearFeatureCache(): void;
package/dist/bamFile.js CHANGED
@@ -117,9 +117,14 @@ class BamFile {
117
117
  await this.getHeader(opts);
118
118
  return this.header;
119
119
  }
120
- async getRecordsForRange(chr, min, max, opts) {
120
+ // Resolve a reference name to its numeric id, ensuring the header (which
121
+ // populates chrToIndex) has been parsed first.
122
+ async getSeqId(seqName, opts) {
121
123
  await this.getHeader(opts);
122
- const chrId = this.chrToIndex?.[chr];
124
+ return this.chrToIndex?.[seqName];
125
+ }
126
+ async getRecordsForRange(chr, min, max, opts) {
127
+ const chrId = await this.getSeqId(chr, opts);
123
128
  if (chrId === undefined || !this.index) {
124
129
  return [];
125
130
  }
@@ -135,8 +140,14 @@ class BamFile {
135
140
  }
136
141
  }
137
142
  async _fetchChunkFeaturesDirect(chunks, chrId, min, max, opts = {}) {
138
- const { viewAsPairs, filterBy } = opts;
143
+ const { viewAsPairs, filterBy, onProgress } = opts;
139
144
  const result = [];
145
+ let totalBytes = 0;
146
+ for (let ci = 0, cl = chunks.length; ci < cl; ci++) {
147
+ totalBytes += chunks[ci].fetchedSize();
148
+ }
149
+ let downloadedBytes = 0;
150
+ onProgress?.(0, totalBytes);
140
151
  for (let ci = 0, cl = chunks.length; ci < cl; ci++) {
141
152
  const chunk = chunks[ci];
142
153
  const cacheKey = chunkCacheKey(chunk, filterBy);
@@ -157,6 +168,8 @@ class BamFile {
157
168
  features: records,
158
169
  });
159
170
  }
171
+ downloadedBytes += chunk.fetchedSize();
172
+ onProgress?.(downloadedBytes, totalBytes);
160
173
  (0, util_ts_1.appendInRange)(records, chrId, min, max, result);
161
174
  }
162
175
  if (viewAsPairs) {
@@ -254,24 +267,24 @@ class BamFile {
254
267
  }
255
268
  return sink;
256
269
  }
257
- async hasRefSeq(seqName) {
258
- const seqId = this.chrToIndex?.[seqName];
270
+ async hasRefSeq(seqName, opts) {
271
+ const seqId = await this.getSeqId(seqName, opts);
259
272
  return !this.index || seqId === undefined
260
273
  ? false
261
274
  : this.index.hasRefSeq(seqId);
262
275
  }
263
- async lineCount(seqName) {
264
- const seqId = this.chrToIndex?.[seqName];
276
+ async lineCount(seqName, opts) {
277
+ const seqId = await this.getSeqId(seqName, opts);
265
278
  return !this.index || seqId === undefined ? 0 : this.index.lineCount(seqId);
266
279
  }
267
280
  async indexCov(seqName, start, end) {
268
- const seqId = this.chrToIndex?.[seqName];
281
+ const seqId = await this.getSeqId(seqName);
269
282
  return !this.index || seqId === undefined
270
283
  ? []
271
284
  : this.index.indexCov(seqId, start, end);
272
285
  }
273
286
  async blocksForRange(seqName, start, end, opts) {
274
- const seqId = this.chrToIndex?.[seqName];
287
+ const seqId = await this.getSeqId(seqName, opts);
275
288
  return !this.index || seqId === undefined
276
289
  ? []
277
290
  : this.index.blocksForRange(seqId, start, end, opts);
@@ -284,16 +297,9 @@ class BamFile {
284
297
  return 0;
285
298
  }
286
299
  await this.getHeader(opts);
287
- const chrToIndex = this.chrToIndex;
288
- if (!chrToIndex) {
289
- throw new Error('Header not yet parsed');
290
- }
291
300
  const mapped = regions.flatMap(r => {
292
- const refId = chrToIndex[r.refName];
293
- if (refId === undefined) {
294
- return [];
295
- }
296
- return [{ refId, start: r.start, end: r.end }];
301
+ const refId = this.chrToIndex?.[r.refName];
302
+ return refId === undefined ? [] : [{ refId, start: r.start, end: r.end }];
297
303
  });
298
304
  return this.index.estimatedBytesForRegions(mapped, opts);
299
305
  }
@@ -1 +1 @@
1
- {"version":3,"file":"bamFile.js","sourceRoot":"","sources":["../src/bamFile.ts"],"names":[],"mappings":";;;;;;AAAA,2DAA8D;AAC9D,mEAAyC;AACzC,kEAAyC;AACzC,6DAA2D;AAE3D,sDAA0B;AAC1B,sDAA0B;AAC1B,4EAAgD;AAChD,4DAAoC;AACpC,qCAA0C;AAC1C,uCAKkB;AAyBL,QAAA,SAAS,GAAG,QAAQ,CAAA;AAEjC,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAA;AAExB,SAAS,iBAAiB,CACxB,UAA8B,EAC9B,IAAa,EACb,GAAY;IAEZ,OAAO,CACL,UAAU;QACV,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,+BAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,gCAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CACrE,CAAA;AACH,CAAC;AAQD,SAAS,aAAa,CAAC,KAAY,EAAE,QAAmB;IACtD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,KAAK,CAAA;IAC5B,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,YAAY,GAAG,IAAA,wBAAc,EAAC,QAAQ,CAAC,EAAE,CAAA;AAC3H,CAAC;AAED,MAAqB,OAAO;IACnB,YAAY,CAAuB;IACnC,GAAG,CAAmB;IACtB,MAAM,CAAS;IACf,UAAU,CAAyB;IACnC,UAAU,CAAwC;IAClD,KAAK,CAAY;IACjB,MAAM,GAAG,KAAK,CAAA;IACd,OAAO,CAAyC;IAEvD,qCAAqC;IACrC,oEAAoE;IAC7D,iBAAiB,GAAG,IAAI,mBAAQ,CAAwB;QAC7D,OAAO,EAAE,GAAG;KACb,CAAC,CAAA;IAEM,WAAW,CAAmB;IAEtC,YAAY,EACV,aAAa,EACb,OAAO,EACP,MAAM,EACN,OAAO,EACP,aAAa,EACb,MAAM,EACN,OAAO,EACP,aAAa,EACb,MAAM,EACN,MAAM,EACN,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACtB,WAAW,GAcZ;QACC,IAAI,CAAC,YAAY,GAAG,aAAa,CAAA;QACjC,IAAI,CAAC,WAAW,GAAG,CAAC,WAAW,IAAI,mBAAU,CAAsB,CAAA;QAEnE,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC/D,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,GAAG,GAAG,KAAK,CAAA;QAClB,CAAC;aAAM,IAAI,MAAM,EAAE,CAAC;YAClB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,GAAG,GAAG,IAAI,2BAAc,EAAE,CAAA;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAA;QACH,CAAC;QAED,MAAM,KAAK,GAAG,iBAAiB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;QAC/D,MAAM,KAAK,GACT,iBAAiB,CAAC,aAAa,EAAE,OAAO,EAAE,MAAM,CAAC;YACjD,iBAAiB,CACf,SAAS,EACT,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,MAAM,CAAC,CAAC,CAAC,SAAS,EACtC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,CAAC,SAAS,CACrC,CAAA;QACH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,GAAG,IAAI,gBAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QAC7C,CAAC;aAAM,IAAI,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,iGAAiG,CAClG,CAAA;QACH,CAAC;QACD,8CAA8C;IAChD,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,OAAiB,EAAE;QACpC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAE9C,2EAA2E;QAC3E,qCAAqC;QACrC,MAAM,OAAO,GACX,SAAS,CAAC,aAAa,KAAK,SAAS;YACnC,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,aAAa,GAAG,QAAQ,CAAA;QAEtD,MAAM,MAAM,GACV,OAAO,KAAK,SAAS;YACnB,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;YAC3B,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;QACrC,IAAI,KAAK,GAAG,MAAM,IAAA,uBAAK,EAAC,MAAM,CAAC,CAAA;QAC/B,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;QAE3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,iBAAS,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAA;QACnC,CAAC;QACD,MAAM,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAA;QAE5E,sEAAsE;QACtE,yEAAyE;QACzE,+DAA+D;QAC/D,sEAAsE;QACtE,MAAM,WAAW,GAAG,OAAO,GAAG,CAAC,CAAA;QAC/B,IAAI,MAAM,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAChE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,KAAK,GAAG,MAAM,IAAA,uBAAK,EAAC,MAAM,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAA;YAC9C,MAAM,GAAG,IAAA,sBAAY,EAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAA;QAC9D,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,UAAU,CAAA;QACnC,OAAO,IAAA,wBAAe,EAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACrC,CAAC;IAED,SAAS,CAAC,IAAe;QACvB,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;YAClB,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;gBAC1D,IAAI,CAAC,OAAO,GAAG,SAAS,CAAA;gBACxB,MAAM,CAAC,CAAA;YACT,CAAC,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAiB,EAAE;QACrC,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC1B,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;IAED,KAAK,CAAC,kBAAkB,CACtB,GAAW,EACX,GAAW,EACX,GAAW,EACX,IAAc;QAEd,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACvC,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;QACzE,OAAO,IAAI,CAAC,yBAAyB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACtE,CAAC;IAED,0EAA0E;IAClE,sBAAsB,CAAC,QAAgB,EAAE,QAAgB;QAC/D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAClD,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,IAAI,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;gBAC7D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,yBAAyB,CACrC,MAAe,EACf,KAAa,EACb,GAAW,EACX,GAAW,EACX,OAAgB,EAAE;QAElB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QACtC,MAAM,MAAM,GAAQ,EAAE,CAAA;QAEtB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;YACnD,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAE,CAAA;YACzB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;YAC/C,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAA;YACzC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,aAAa,CAAA;YAEzC,IAAI,OAAY,CAAA;YAChB,MAAM,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;YACnD,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC3B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAA;gBAC/C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;gBAC7D,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAA,sBAAY,EAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;gBACpE,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,QAAQ,EAAE;oBACnC,QAAQ;oBACR,QAAQ;oBACR,QAAQ,EAAE,OAAO;iBAClB,CAAC,CAAA;YACJ,CAAC;YAED,IAAA,uBAAa,EAAC,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QACjD,CAAC;QAED,IAAI,WAAW,EAAE,CAAC;YAChB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,CAAA;YACxD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAE,CAAC,CAAA;YACxB,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAA;IACf,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa,EAAE,OAAY,EAAE,IAAa;QACzD,MAAM,EAAE,aAAa,EAAE,aAAa,GAAG,MAAM,EAAE,GAAG,IAAI,CAAA;QACtD,MAAM,cAAc,GAA2B,EAAE,CAAA;QACjD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAA;QAEjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;YACrB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;YACnB,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YACtD,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAC3B,CAAC;QAED,MAAM,YAAY,GAAuB,EAAE,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC/C,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;YACrB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAA;YACnB,IACE,IAAI,CAAC,KAAK;gBACV,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC1B,CAAC,aAAa;oBACZ,CAAC,CAAC,CAAC,UAAU,KAAK,KAAK;wBACrB,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,CAAC,EACpD,CAAC;gBACD,YAAY,CAAC,IAAI,CACf,IAAI,CAAC,KAAK,CAAC,cAAc,CACvB,CAAC,CAAC,UAAU,EACZ,CAAC,CAAC,QAAQ,EACV,CAAC,CAAC,QAAQ,GAAG,CAAC,EACd,IAAI,CACL,CACF,CAAA;YACH,CAAC;QACH,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,GAAG,EAAiB,CAAA;QACpC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,MAAM,GAAG,GAAG,CAAC,CAAC,CAAE,CAAA;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;gBACpB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAA;YAC1B,CAAC;QACH,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CACrC,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE;YAC9B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAA;YACvD,MAAM,QAAQ,GAAG,EAAS,CAAA;YAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBAChD,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;gBAC5B,IACE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;oBAClC,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,EAChC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;gBACxB,CAAC;YACH,CAAC;YACD,OAAO,QAAQ,CAAA;QACjB,CAAC,CAAC,CACH,CAAA;QACD,OAAO,aAAa,CAAC,IAAI,EAAE,CAAA;IAC7B,CAAC;IAED,KAAK,CAAC,kBAAkB,CAAC,KAAY,EAAE,IAAc;QACnD,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,IAAI,CAC7B,KAAK,CAAC,WAAW,EAAE,EACnB,KAAK,CAAC,IAAI,CAAC,aAAa,EACxB,IAAI,CACL,CAAA;QACD,MAAM,EACJ,MAAM,EAAE,IAAI,EACZ,UAAU,EACV,UAAU,GACX,GAAG,MAAM,IAAA,iCAAe,EAAC,GAAG,EAAE,KAAK,CAAC,CAAA;QACrC,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,KAAK,CAAC,CAAA;IAClE,CAAC;IAED,KAAK,CAAC,eAAe,CACnB,EAAc,EACd,UAAoB,EACpB,UAAoB,EACpB,KAAY;QAEZ,IAAI,UAAU,GAAG,CAAC,CAAA;QAClB,MAAM,IAAI,GAAG,EAAS,CAAA;QACtB,IAAI,GAAG,GAAG,CAAC,CAAA;QAEX,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAA;QACxC,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAC3C,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,CAAA;QAE3C,OAAO,UAAU,GAAG,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;YACrD,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,CAAA;YAE/C,IAAI,aAAa,EAAE,CAAC;gBAClB,MAAM,MAAM,GAAG,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,YAAY,CAAA;gBACnD,OAAO,GAAG,GAAG,UAAU,CAAC,MAAM,IAAI,MAAM,IAAI,UAAU,CAAC,GAAG,CAAE,EAAE,CAAC;oBAC7D,GAAG,EAAE,CAAA;gBACP,CAAC;YACH,CAAC;YAED,IAAI,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC;oBACnC,KAAK,EAAE;wBACL,SAAS,EAAE,EAAE;wBACb,KAAK,EAAE,UAAU;wBACjB,GAAG,EAAE,QAAQ;qBACd;oBACD,UAAU,EAAE,aAAa;wBACvB,CAAC,CAAC,UAAU,CAAC,GAAG,CAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;4BAC3B,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,CAAE,CAAC;4BAC/B,KAAK,CAAC,IAAI,CAAC,YAAY;4BACvB,CAAC;wBACH,CAAC,CAAC,IAAA,eAAK,EAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC;oBAClD,QAAQ;iBACT,CAAC,CAAA;gBAEF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACpB,CAAC;YAED,UAAU,GAAG,QAAQ,GAAG,CAAC,CAAA;QAC3B,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS;YACvC,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAAe;QAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC7E,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,OAAe,EAAE,KAAc,EAAE,GAAY;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAA;IAC5C,CAAC;IAED,KAAK,CAAC,cAAc,CAClB,OAAe,EACf,KAAa,EACb,GAAW,EACX,IAAe;QAEf,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,OAAO,CAAC,CAAA;QACxC,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,SAAS;YACvC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;IACxD,CAAC;IAED,iBAAiB;QACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,wBAAwB,CAC5B,OAA0D,EAC1D,IAAe;QAEf,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,CAAC,CAAA;QACV,CAAC;QACD,MAAM,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;QAC1B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAA;QAClC,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAA;QAC1C,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;YACjC,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,OAAO,EAAE,CAAA;YACX,CAAC;YACD,OAAO,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,wBAAwB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAC1D,CAAC;CACF;AArYD,0BAqYC"}
1
+ {"version":3,"file":"bamFile.js","sourceRoot":"","sources":["../src/bamFile.ts"],"names":[],"mappings":"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"}
package/dist/htsget.js CHANGED
@@ -72,6 +72,7 @@ class HtsgetFile extends bamFile_ts_1.default {
72
72
  this.trackId = args.trackId;
73
73
  }
74
74
  async getRecordsForRange(chr, min, max, opts) {
75
+ await this.getHeader(opts);
75
76
  const base = `${this.baseUrl}/${this.trackId}`;
76
77
  const url = `${base}?referenceName=${chr}&start=${min}&end=${max}&format=BAM`;
77
78
  const chrId = this.chrToIndex?.[chr];
@@ -1 +1 @@
1
- {"version":3,"file":"htsget.js","sourceRoot":"","sources":["../src/htsget.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"htsget.js","sourceRoot":"","sources":["../src/htsget.ts"],"names":[],"mappings":"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"}
package/dist/record.d.ts CHANGED
@@ -36,7 +36,7 @@ export default class BamRecord {
36
36
  get NUMERIC_MD(): Uint8Array<ArrayBufferLike> | undefined;
37
37
  get tags(): Record<string, unknown>;
38
38
  getTag(tagName: string): unknown;
39
- getTagRaw(tagName: string): string | number | Uint8Array<ArrayBufferLike> | number[] | Uint32Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Uint16Array<ArrayBufferLike> | Int8Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | undefined;
39
+ getTagRaw(tagName: string): string | number | Uint8Array<ArrayBufferLike> | number[] | Int8Array<ArrayBufferLike> | Int16Array<ArrayBufferLike> | Uint16Array<ArrayBufferLike> | Int32Array<ArrayBufferLike> | Uint32Array<ArrayBufferLike> | Float32Array<ArrayBufferLike> | undefined;
40
40
  private _findTag;
41
41
  private _computeTags;
42
42
  isPaired(): boolean;
@@ -71,19 +71,5 @@ export default class BamRecord {
71
71
  get next_pos(): number;
72
72
  get template_length(): number;
73
73
  seqAt(idx: number): string | undefined;
74
- toJSON(): {
75
- fileOffset: number;
76
- ref_id: number;
77
- start: number;
78
- end: number;
79
- name: string;
80
- flags: number;
81
- mq: number | undefined;
82
- CIGAR: string;
83
- seq: string;
84
- next_refid: number;
85
- next_pos: number;
86
- template_length: number;
87
- tags: Record<string, unknown>;
88
- };
74
+ toJSON(): Record<string, unknown>;
89
75
  }
package/dist/record.js CHANGED
@@ -23,6 +23,88 @@ const textDecoder = new TextDecoder();
23
23
  // Bitmask for ops that consume ref: M=0, D=2, N=3, P=6, ==7, X=8
24
24
  // Binary: 0b111001101 = 0x1CD
25
25
  const CIGAR_CONSUMES_REF_MASK = 0x1cd;
26
+ // Decode a 'B' (array) tag value starting at `p` (the byte after type+subtype+
27
+ // count). When the data is naturally aligned we return a typed-array view over
28
+ // the underlying buffer (zero-copy); otherwise we copy element-by-element since
29
+ // typed-array views require alignment. Shared by getTag and the full-tag parse.
30
+ function decodeBArrayTag(ba, dataView, p, Btype, limit) {
31
+ const absOffset = ba.byteOffset + p;
32
+ switch (Btype) {
33
+ case 0x69: {
34
+ // 'i'
35
+ if (absOffset % 4 === 0) {
36
+ return new Int32Array(ba.buffer, absOffset, limit);
37
+ }
38
+ const arr = new Array(limit);
39
+ for (let i = 0; i < limit; i++) {
40
+ arr[i] = dataView.getInt32(p + i * 4, true);
41
+ }
42
+ return arr;
43
+ }
44
+ case 0x49: {
45
+ // 'I'
46
+ if (absOffset % 4 === 0) {
47
+ return new Uint32Array(ba.buffer, absOffset, limit);
48
+ }
49
+ const arr = new Array(limit);
50
+ for (let i = 0; i < limit; i++) {
51
+ arr[i] = dataView.getUint32(p + i * 4, true);
52
+ }
53
+ return arr;
54
+ }
55
+ case 0x73: {
56
+ // 's'
57
+ if (absOffset % 2 === 0) {
58
+ return new Int16Array(ba.buffer, absOffset, limit);
59
+ }
60
+ const arr = new Array(limit);
61
+ for (let i = 0; i < limit; i++) {
62
+ arr[i] = dataView.getInt16(p + i * 2, true);
63
+ }
64
+ return arr;
65
+ }
66
+ case 0x53: {
67
+ // 'S'
68
+ if (absOffset % 2 === 0) {
69
+ return new Uint16Array(ba.buffer, absOffset, limit);
70
+ }
71
+ const arr = new Array(limit);
72
+ for (let i = 0; i < limit; i++) {
73
+ arr[i] = dataView.getUint16(p + i * 2, true);
74
+ }
75
+ return arr;
76
+ }
77
+ case 0x63: // 'c'
78
+ return new Int8Array(ba.buffer, absOffset, limit);
79
+ case 0x43: // 'C'
80
+ return new Uint8Array(ba.buffer, absOffset, limit);
81
+ case 0x66: {
82
+ // 'f'
83
+ if (absOffset % 4 === 0) {
84
+ return new Float32Array(ba.buffer, absOffset, limit);
85
+ }
86
+ const arr = new Array(limit);
87
+ for (let i = 0; i < limit; i++) {
88
+ arr[i] = dataView.getFloat32(p + i * 4, true);
89
+ }
90
+ return arr;
91
+ }
92
+ default:
93
+ return undefined;
94
+ }
95
+ }
96
+ // Byte span of a 'B' tag's element payload, for advancing the cursor past it.
97
+ function bArrayByteLength(Btype, limit) {
98
+ if (Btype === 0x69 || Btype === 0x49 || Btype === 0x66) {
99
+ return limit << 2;
100
+ }
101
+ else if (Btype === 0x73 || Btype === 0x53) {
102
+ return limit << 1;
103
+ }
104
+ else {
105
+ return limit;
106
+ }
107
+ }
26
108
  class BamRecord {
27
109
  fileOffset;
28
110
  _byteArray;
@@ -46,7 +128,10 @@ class BamRecord {
46
128
  return this._byteArray;
47
129
  }
48
130
  get flags() {
49
- return (this._dataView.getInt32(this._start + 16, true) & 0xffff0000) >> 16;
131
+ // FLAG is the high 16 bits of flag_nc (byte offset 18). Read it directly as
132
+ // a uint16 — masking flag_nc and arithmetic-shifting would sign-extend any
133
+ // value >= 0x8000.
134
+ return this._dataView.getUint16(this._start + 18, true);
50
135
  }
51
136
  get ref_id() {
52
137
  return this._dataView.getInt32(this._start + 4, true);
@@ -67,12 +152,15 @@ class BamRecord {
67
152
  get score() {
68
153
  return this.mq;
69
154
  }
155
+ // QUAL is present whenever the record has bases — independent of the unmapped
156
+ // flag (unmapped reads routinely carry SEQ/QUAL). A zero-length SEQ means
157
+ // there is no quality to return.
70
158
  get qual() {
71
- if (this.isSegmentUnmapped()) {
159
+ const seqLen = this.seq_length;
160
+ if (seqLen === 0) {
72
161
  return null;
73
162
  }
74
163
  else {
75
- const seqLen = this.seq_length;
76
164
  const p = this.seqStart + ((seqLen + 1) >> 1);
77
165
  return this._byteArray.subarray(p, p + seqLen);
78
166
  }
@@ -210,83 +298,17 @@ class BamRecord {
210
298
  const Btype = ba[p++];
211
299
  const limit = this._dataView.getInt32(p, true);
212
300
  p += 4;
213
- const absOffset = ba.byteOffset + p;
214
301
  if (isMatch) {
215
- if (Btype === 0x69) {
216
- // 'i'
217
- if (absOffset % 4 === 0) {
218
- return new Int32Array(ba.buffer, absOffset, limit);
219
- }
220
- const arr = new Array(limit);
221
- for (let i = 0; i < limit; i++) {
222
- arr[i] = this._dataView.getInt32(p + i * 4, true);
223
- }
224
- return arr;
225
- }
226
- else if (Btype === 0x49) {
227
- // 'I'
228
- if (absOffset % 4 === 0) {
229
- return new Uint32Array(ba.buffer, absOffset, limit);
230
- }
231
- const arr = new Array(limit);
232
- for (let i = 0; i < limit; i++) {
233
- arr[i] = this._dataView.getUint32(p + i * 4, true);
234
- }
235
- return arr;
236
- }
237
- else if (Btype === 0x73) {
238
- // 's'
239
- if (absOffset % 2 === 0) {
240
- return new Int16Array(ba.buffer, absOffset, limit);
241
- }
242
- const arr = new Array(limit);
243
- for (let i = 0; i < limit; i++) {
244
- arr[i] = this._dataView.getInt16(p + i * 2, true);
245
- }
246
- return arr;
247
- }
248
- else if (Btype === 0x53) {
249
- // 'S'
250
- if (absOffset % 2 === 0) {
251
- return new Uint16Array(ba.buffer, absOffset, limit);
252
- }
253
- const arr = new Array(limit);
254
- for (let i = 0; i < limit; i++) {
255
- arr[i] = this._dataView.getUint16(p + i * 2, true);
256
- }
257
- return arr;
258
- }
259
- else if (Btype === 0x63) {
260
- // 'c'
261
- return new Int8Array(ba.buffer, absOffset, limit);
262
- }
263
- else if (Btype === 0x43) {
264
- // 'C'
265
- return new Uint8Array(ba.buffer, absOffset, limit);
266
- }
267
- else if (Btype === 0x66) {
268
- // 'f'
269
- if (absOffset % 4 === 0) {
270
- return new Float32Array(ba.buffer, absOffset, limit);
271
- }
272
- const arr = new Array(limit);
273
- for (let i = 0; i < limit; i++) {
274
- arr[i] = this._dataView.getFloat32(p + i * 4, true);
275
- }
276
- return arr;
277
- }
278
- }
279
- if (Btype === 0x69 || Btype === 0x49 || Btype === 0x66) {
280
- p += limit << 2;
281
- }
282
- else if (Btype === 0x73 || Btype === 0x53) {
283
- p += limit << 1;
284
- }
285
- else if (Btype === 0x63 || Btype === 0x43) {
286
- p += limit;
302
+ return decodeBArrayTag(ba, this._dataView, p, Btype, limit);
287
303
  }
304
+ p += bArrayByteLength(Btype, limit);
288
305
  break;
289
306
  }
307
+ default:
308
+ if (type !== undefined) {
309
+ console.error('Unknown BAM tag type', type);
310
+ }
311
+ break;
290
312
  }
291
313
  }
292
314
  return undefined;
@@ -349,87 +371,8 @@ class BamRecord {
349
371
  const Btype = ba[p++];
350
372
  const limit = this._dataView.getInt32(p, true);
351
373
  p += 4;
352
- const absOffset = ba.byteOffset + p;
353
- if (Btype === 0x69) {
354
- // 'i'
355
- if (absOffset % 4 === 0) {
356
- tags[tag] = new Int32Array(ba.buffer, absOffset, limit);
357
- }
358
- else {
359
- const arr = new Array(limit);
360
- for (let i = 0; i < limit; i++) {
361
- arr[i] = this._dataView.getInt32(p + i * 4, true);
362
- }
363
- tags[tag] = arr;
364
- }
365
- p += limit << 2;
366
- }
367
- else if (Btype === 0x49) {
368
- // 'I'
369
- if (absOffset % 4 === 0) {
370
- tags[tag] = new Uint32Array(ba.buffer, absOffset, limit);
371
- }
372
- else {
373
- const arr = new Array(limit);
374
- for (let i = 0; i < limit; i++) {
375
- arr[i] = this._dataView.getUint32(p + i * 4, true);
376
- }
377
- tags[tag] = arr;
378
- }
379
- p += limit << 2;
380
- }
381
- else if (Btype === 0x73) {
382
- // 's'
383
- if (absOffset % 2 === 0) {
384
- tags[tag] = new Int16Array(ba.buffer, absOffset, limit);
385
- }
386
- else {
387
- const arr = new Array(limit);
388
- for (let i = 0; i < limit; i++) {
389
- arr[i] = this._dataView.getInt16(p + i * 2, true);
390
- }
391
- tags[tag] = arr;
392
- }
393
- p += limit << 1;
394
- }
395
- else if (Btype === 0x53) {
396
- // 'S'
397
- if (absOffset % 2 === 0) {
398
- tags[tag] = new Uint16Array(ba.buffer, absOffset, limit);
399
- }
400
- else {
401
- const arr = new Array(limit);
402
- for (let i = 0; i < limit; i++) {
403
- arr[i] = this._dataView.getUint16(p + i * 2, true);
404
- }
405
- tags[tag] = arr;
406
- }
407
- p += limit << 1;
408
- }
409
- else if (Btype === 0x63) {
410
- // 'c'
411
- tags[tag] = new Int8Array(ba.buffer, absOffset, limit);
412
- p += limit;
413
- }
414
- else if (Btype === 0x43) {
415
- // 'C'
416
- tags[tag] = new Uint8Array(ba.buffer, absOffset, limit);
417
- p += limit;
418
- }
419
- else if (Btype === 0x66) {
420
- // 'f'
421
- if (absOffset % 4 === 0) {
422
- tags[tag] = new Float32Array(ba.buffer, absOffset, limit);
423
- }
424
- else {
425
- const arr = new Array(limit);
426
- for (let i = 0; i < limit; i++) {
427
- arr[i] = this._dataView.getFloat32(p + i * 4, true);
428
- }
429
- tags[tag] = arr;
430
- }
431
- p += limit << 2;
432
- }
374
+ tags[tag] = decodeBArrayTag(ba, this._dataView, p, Btype, limit);
375
+ p += bArrayByteLength(Btype, limit);
433
376
  break;
434
377
  }
435
378
  default:
@@ -494,9 +437,15 @@ class BamRecord {
494
437
  // Strategy: use plain array with |0 for small aligned (≤50 ops) and all unaligned,
495
438
  // Uint32Array view only for large aligned CIGARs.
496
439
  // CG tag pattern: first op is soft-clip consuming entire sequence, second op is N encoding length-on-ref
497
- _isCGTagPattern(p) {
498
- const cigop = this._dataView.getInt32(p, true);
499
- return (cigop & 0xf) === cigar_ts_1.CIGAR_SOFT_CLIP && cigop >> 4 === this.seq_length;
440
+ _isCGTagPattern(p, numCigarOps) {
441
+ // htslib stores the placeholder as exactly two ops: <seqlen>S<reflen>N.
442
+ if (numCigarOps === 2) {
443
+ const cigop = this._dataView.getInt32(p, true);
444
+ return (cigop & 0xf) === cigar_ts_1.CIGAR_SOFT_CLIP && cigop >> 4 === this.seq_length;
445
+ }
446
+ else {
447
+ return false;
448
+ }
500
449
  }
501
450
  _computeLengthOnRef() {
502
451
  const flag_nc = this._dataView.getInt32(this._start + 16, true);
@@ -505,7 +454,7 @@ class BamRecord {
505
454
  }
506
455
  const numCigarOps = flag_nc & 0xffff;
507
456
  const p = this.b0 + this.read_name_length;
508
- if (this._isCGTagPattern(p)) {
457
+ if (this._isCGTagPattern(p, numCigarOps)) {
509
458
  const cigop2 = this._dataView.getInt32(p + 4, true);
510
459
  if ((cigop2 & 0xf) !== cigar_ts_1.CIGAR_REF_SKIP) {
511
460
  console.warn('CG tag with no N tag');
@@ -537,7 +486,7 @@ class BamRecord {
537
486
  }
538
487
  const numCigarOps = flag_nc & 0xffff;
539
488
  const p = this.b0 + this.read_name_length;
540
- if (this._isCGTagPattern(p)) {
489
+ if (this._isCGTagPattern(p, numCigarOps)) {
541
490
  return (this.tags.CG ??
542
491
  new Uint32Array(0));
543
492
  }
@@ -653,7 +602,8 @@ class BamRecord {
653
602
  }
654
603
  // Most public BamRecord fields are getters on the prototype, so
655
604
  // Object.keys(this) wouldn't include them — JSON.stringify needs an explicit
656
- // list. Returns the meaningful BAM-spec fields.
605
+ // list. Returns the meaningful BAM-spec fields. Return type is widened so
606
+ // subclasses can override with their own serialized shape.
657
607
  toJSON() {
658
608
  return {
659
609
  fileOffset: this.fileOffset,