@genome-spy/app 1.2.0 → 1.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.
Files changed (87) hide show
  1. package/dist/{SharedReadCache-Ey5QIiPM.js → SharedReadCache-9sT2aIxW.js} +6 -12
  2. package/dist/__vite-browser-external-Dgu_Ldik.js +7 -0
  3. package/dist/{agentApi-8hMSlqAQ.js → agentApi-BclFF9zB.js} +7130 -7509
  4. package/dist/agentApi.es.js +4344 -4015
  5. package/dist/agentShared.es.js +431 -458
  6. package/dist/arrayUtils-Bm7QnzhN.js +1306 -0
  7. package/dist/{blosc-JROzDOnd.js → blosc-C-W97QwH.js} +3 -3
  8. package/dist/{canvas2d-Bd8H8MMo.js → canvas2d-8MSf70d4.js} +78 -86
  9. package/dist/{canvas2d-D6VYooRf.js → canvas2d-BwGNI_Rx.js} +83 -91
  10. package/dist/clipOptions-SrrxeAEU.js +4316 -0
  11. package/dist/clipOptions-clBEbkjv.js +4326 -0
  12. package/dist/{layoutResult-D50MSHXR.js → color-jETn8xK_.js} +29 -10
  13. package/dist/color-uTRRsy8i.js +116 -0
  14. package/dist/{componentStyles-DGtQXvwc.js → componentStyles-C7FbjS-a.js} +1 -1
  15. package/dist/{containerView-aEVmYmkA.js → containerView-BItRtKqu.js} +5 -1
  16. package/dist/{containerView-CRJSc4bM.js → containerView-CWa6ZIJW.js} +5 -1
  17. package/dist/{debug-CQ0agCrd.js → debug-23s-jja_.js} +3 -2
  18. package/dist/{debug-DkIMiGdW.js → debug-CWRxvAss.js} +2 -3
  19. package/dist/dialog.es.js +1 -1
  20. package/dist/dist-CmY6iewb.js +1501 -0
  21. package/dist/dist-D6xbz5Ks.js +1501 -0
  22. package/dist/{esm-CjkeZi__.js → esm-BFwBAnbO.js} +25 -25
  23. package/dist/esm-BUkWqSr2.js +299 -0
  24. package/dist/{esm-C-6g-SkZ.js → esm-C0xXMLsR.js} +37 -41
  25. package/dist/{esm-CJeszW-t.js → esm-C2xhhXs0.js} +7 -7
  26. package/dist/esm-C6erfjPM.js +252 -0
  27. package/dist/{esm-DFHFX1sH.js → esm-CVjC7qA4.js} +34 -38
  28. package/dist/esm-CqY5ezGz.js +1249 -0
  29. package/dist/esm-DfMIJ_N2.js +1522 -0
  30. package/dist/esm-Dls41IbZ.js +787 -0
  31. package/dist/{esm-Bv7Frz7C.js → esm-DzQDfrsZ.js} +7 -10
  32. package/dist/esm-aGLCvYRP.js +238 -0
  33. package/dist/{esm-VFJeyk9i.js → esm-nzwgJFGz.js} +40 -36
  34. package/dist/figWigMetadataSourceAdapter-8Kf_vZRf.js +36 -0
  35. package/dist/figWigMetadataSourceAdapter-DdDMZpYO.js +36 -0
  36. package/dist/flowNode-BSjy0Wz3.js +1306 -0
  37. package/dist/flowOutput-D5qpxWe0.js +183 -0
  38. package/dist/index.es.js +4756 -5528
  39. package/dist/index.js +707 -547
  40. package/dist/inflate-BdC5KvHn.js +886 -0
  41. package/dist/{lz4-CUYSbVey.js → lz4-BLPgBOlE.js} +1 -1
  42. package/dist/{markUtils-CvLDz744.js → markUtils-RaatLEa-.js} +9 -6
  43. package/dist/metadataUtils-DxEPe0vj.js +879 -0
  44. package/dist/{order-BVvkjDRT.js → order-BnKzKjt4.js} +383 -347
  45. package/dist/{order-DmMoZsi1.js → order-BpJnq_nV.js} +375 -339
  46. package/dist/{parquetRead-0hFIa3Cc.js → parquetRead-D-yY8njE.js} +3 -11
  47. package/dist/{rasterExport-jeRVq6kY.js → rasterExport-B-WrX1pa.js} +5 -5
  48. package/dist/{rasterExport-DxvowWjH.js → rasterExport-C_vx4Jwd.js} +3 -3
  49. package/dist/{rasterization-DFj3Cvx4.js → rasterization-QktH8Sn2.js} +1 -1
  50. package/dist/{rectangle-Dl4Dy0hS.js → rectangle-BAdoDPXu.js} +34 -31
  51. package/dist/{renderCanvas2D-Bfm1NHFu.js → renderCanvas2D-CsRO78Pq.js} +88 -87
  52. package/dist/{renderCanvas2D-DVjhp834.js → renderCanvas2D-Y7pkRzbC.js} +93 -92
  53. package/dist/{rolldown-runtime-DF993M8W.js → rolldown-runtime-DeIk2rA4.js} +1 -1
  54. package/dist/{indexer-DOYMJ-Md.js → scaleNull-CVzag4z8.js} +2 -12
  55. package/dist/{indexer-DDC0YRGn.js → scaleNull-Pbz7QGnl.js} +2 -12
  56. package/dist/{scalePosition-0aeqp_kz.js → scalePosition-CRXa0rCC.js} +1 -1
  57. package/dist/schema.json +3801 -816
  58. package/dist/{svg-Bm2zxBPu.js → svg-BBMtLgtM.js} +369 -285
  59. package/dist/{svg-CkfuhONt.js → svg-JjWL6U-T.js} +371 -287
  60. package/dist/{svgRasterizer-DoRQEqFA.js → svgRasterizer-6OcftuoI.js} +2 -2
  61. package/dist/{svgRasterizer-raDDhBF-.js → svgRasterizer-DkNRaCPs.js} +4 -4
  62. package/dist/tableMetadataSourceAdapter-CUNwLsdi.js +291 -0
  63. package/dist/tableMetadataSourceAdapter-DQrEXCo6.js +1283 -0
  64. package/dist/url-DeOdSRrv.js +183 -0
  65. package/dist/{viewError-BkJeVYXA.js → viewError-B0TMfOpB.js} +1 -1
  66. package/dist/{viewError-IYqyluc7.js → viewError-D9aO90cI.js} +1 -1
  67. package/dist/{viewSelectors-7LyasQN-.js → viewSelectors-DkFvo33d.js} +832 -734
  68. package/dist/{viewSelectors-CbmkSQRT.js → viewSelectors-lM93fHAq.js} +900 -802
  69. package/dist/{viewUtils-DuddMNNw.js → viewUtils-0SJOewM6.js} +1861 -2459
  70. package/dist/webgl-CXIO3OQz.js +5782 -0
  71. package/dist/webgl-Pdvfhio5.js +5783 -0
  72. package/package.json +7 -5
  73. package/src/agentApi/index.d.ts +3 -2
  74. package/src/agentShared/index.d.ts +2 -0
  75. package/src/appTypes.d.ts +1 -6
  76. package/src/embedTypes.d.ts +36 -1
  77. package/src/index.d.ts +6 -0
  78. package/src/spec/sampleView.d.ts +68 -13
  79. package/src/state/paramProvenanceTypes.d.ts +25 -2
  80. package/src/state.d.ts +14 -52
  81. package/dist/clipOptions-DElJ8dTZ.js +0 -3097
  82. package/dist/clipOptions-D_wBNhzs.js +0 -3087
  83. package/dist/esm-Dndm-NaA.js +0 -1193
  84. package/dist/vega-scale-BoGHANI7.js +0 -2446
  85. package/dist/vega-scale-o9TRyzYH.js +0 -2443
  86. package/dist/webgl-CQfvgnxo.js +0 -5633
  87. package/dist/webgl-DVYkXtiZ.js +0 -5632
@@ -0,0 +1,787 @@
1
+ import { n as e, r as t } from "./esm-nzwgJFGz.js";
2
+ import { t as n } from "./SharedReadCache-9sT2aIxW.js";
3
+ import { n as r, r as i } from "./esm-BUkWqSr2.js";
4
+ //#region ../../node_modules/@gmod/tabix/esm/chunk.js
5
+ var a = class {
6
+ minv;
7
+ maxv;
8
+ bin;
9
+ endPosition;
10
+ constructor(e, t, n, r = t.blockPosition + 65536) {
11
+ this.minv = e, this.maxv = t, this.bin = n, this.endPosition = r;
12
+ }
13
+ toString() {
14
+ return `${this.minv.toString()}..${this.maxv.toString()} (bin ${this.bin}, fetchedSize ${this.fetchedSize()})`;
15
+ }
16
+ fetchedSize() {
17
+ return this.endPosition - this.minv.blockPosition;
18
+ }
19
+ };
20
+ //#endregion
21
+ //#region ../../node_modules/@gmod/tabix/node_modules/@jbrowse/quick-lru/esm/index.js
22
+ function o(e, t) {
23
+ if (!(t > 0)) throw TypeError(`\`${e}\` must be a number greater than 0`);
24
+ }
25
+ var s = class {
26
+ #e = /* @__PURE__ */ new Map();
27
+ #t = /* @__PURE__ */ new Map();
28
+ #n;
29
+ #r;
30
+ #i;
31
+ constructor(e) {
32
+ let t = e.maxAge ?? Infinity;
33
+ o("maxSize", e.maxSize), o("maxAge", t), this.#n = e.maxSize, this.#r = t, this.#i = e.onEviction;
34
+ }
35
+ #a(e) {
36
+ let t = this.#i;
37
+ if (t) for (let [n, r] of e) t(n, r.value);
38
+ }
39
+ #o(e, t) {
40
+ return t.expiry !== void 0 && t.expiry <= Date.now() && (this.#i?.(e, t.value), this.delete(e), !0);
41
+ }
42
+ #s(e, t) {
43
+ return this.#o(e, t) ? void 0 : t.value;
44
+ }
45
+ #c(e, t) {
46
+ if (this.#t.delete(e), this.#e.set(e, t), this.#e.size >= this.#n) {
47
+ let e = this.#t;
48
+ this.#t = this.#e, this.#e = /* @__PURE__ */ new Map(), this.#a(e);
49
+ }
50
+ }
51
+ #l(e) {
52
+ this.#t = new Map(e), this.#e = /* @__PURE__ */ new Map();
53
+ }
54
+ *#u() {
55
+ for (let e of [this.#t, this.#e]) for (let t of e) this.#o(...t) || (yield t);
56
+ }
57
+ get(e) {
58
+ let t = this.#e.get(e);
59
+ if (t) return this.#s(e, t);
60
+ let n = this.#t.get(e);
61
+ if (n && !this.#o(e, n)) return this.#c(e, n), n.value;
62
+ }
63
+ set(e, t, { maxAge: n = this.#r } = {}) {
64
+ let r = {
65
+ value: t,
66
+ expiry: n === Infinity ? void 0 : Date.now() + n
67
+ };
68
+ return this.#e.has(e) ? this.#e.set(e, r) : this.#c(e, r), this;
69
+ }
70
+ has(e) {
71
+ let t = this.#e.get(e) ?? this.#t.get(e);
72
+ return t !== void 0 && !this.#o(e, t);
73
+ }
74
+ peek(e) {
75
+ let t = this.#e.get(e) ?? this.#t.get(e);
76
+ return t ? this.#s(e, t) : void 0;
77
+ }
78
+ expiresIn(e) {
79
+ let t = this.#e.get(e) ?? this.#t.get(e);
80
+ if (t) return t.expiry === void 0 ? Infinity : t.expiry - Date.now();
81
+ }
82
+ delete(e) {
83
+ return this.#e.delete(e) || this.#t.delete(e);
84
+ }
85
+ clear() {
86
+ this.#e.clear(), this.#t.clear();
87
+ }
88
+ resize(e) {
89
+ o("maxSize", e);
90
+ let t = [...this.#u()], n = t.length - e;
91
+ n < 0 ? (this.#e = new Map(t), this.#t = /* @__PURE__ */ new Map()) : (this.#a(t.slice(0, n)), this.#l(t.slice(n))), this.#n = e;
92
+ }
93
+ evict(e = 1) {
94
+ if (!(e > 0)) return;
95
+ let t = [...this.#u()], n = Math.trunc(Math.min(e, t.length - 1));
96
+ n > 0 && (this.#a(t.slice(0, n)), this.#l(t.slice(n)));
97
+ }
98
+ get size() {
99
+ return Math.min(this.#e.size + this.#t.size, this.#n);
100
+ }
101
+ get maxSize() {
102
+ return this.#n;
103
+ }
104
+ get maxAge() {
105
+ return this.#r;
106
+ }
107
+ *entriesAscending() {
108
+ for (let [e, t] of this.#u()) yield [e, t.value];
109
+ }
110
+ *entriesDescending() {
111
+ for (let e of [this.#e, this.#t]) for (let [t, n] of [...e].reverse()) this.#o(t, n) || (yield [t, n.value]);
112
+ }
113
+ entries() {
114
+ return this.entriesAscending();
115
+ }
116
+ [Symbol.iterator]() {
117
+ return this.entriesAscending();
118
+ }
119
+ *keys() {
120
+ for (let [e] of this) yield e;
121
+ }
122
+ *values() {
123
+ for (let [, e] of this) yield e;
124
+ }
125
+ forEach(e, t = this) {
126
+ for (let [n, r] of this) e.call(t, r, n, this);
127
+ }
128
+ get [Symbol.toStringTag]() {
129
+ return "QuickLRU";
130
+ }
131
+ toString() {
132
+ return `QuickLRU(${this.size}/${this.maxSize})`;
133
+ }
134
+ [Symbol.for("nodejs.util.inspect.custom")]() {
135
+ return this.toString();
136
+ }
137
+ }, c = 2 ** 32;
138
+ function l(e, t = 0) {
139
+ let n = e[t] | e[t + 1] << 8 | e[t + 2] << 16 | e[t + 3] << 24;
140
+ return ((e[t + 4] | e[t + 5] << 8 | e[t + 6] << 16 | e[t + 7] << 24) >>> 0) * c + (n >>> 0);
141
+ }
142
+ //#endregion
143
+ //#region ../../node_modules/@gmod/tabix/esm/virtualOffset.js
144
+ var u = class {
145
+ blockPosition;
146
+ dataPosition;
147
+ constructor(e, t) {
148
+ this.blockPosition = e, this.dataPosition = t;
149
+ }
150
+ toString() {
151
+ return `${this.blockPosition}:${this.dataPosition}`;
152
+ }
153
+ compareTo(e) {
154
+ return this.blockPosition - e.blockPosition || this.dataPosition - e.dataPosition;
155
+ }
156
+ };
157
+ function d(e, t = 0) {
158
+ return new u(e[t + 7] * 1099511627776 + e[t + 6] * 4294967296 + e[t + 5] * 16777216 + e[t + 4] * 65536 + e[t + 3] * 256 + e[t + 2], e[t + 1] << 8 | e[t]);
159
+ }
160
+ //#endregion
161
+ //#region ../../node_modules/@gmod/tabix/esm/util.js
162
+ function f(e, t) {
163
+ let n = e.length;
164
+ if (n === 0) return e;
165
+ let r;
166
+ if (t) {
167
+ let i = t.blockPosition, a = t.dataPosition;
168
+ r = [];
169
+ for (let t = 0; t < n; t++) {
170
+ let n = e[t];
171
+ (n.maxv.blockPosition - i || n.maxv.dataPosition - a) > 0 && r.push(n);
172
+ }
173
+ if (r.length === 0) return r;
174
+ } else r = e;
175
+ r.sort((e, t) => {
176
+ let n = e.minv.blockPosition - t.minv.blockPosition;
177
+ return n === 0 ? e.minv.dataPosition - t.minv.dataPosition : n;
178
+ });
179
+ let i = [r[0]], o = r[0].minv.blockPosition, s = r[0].maxv.blockPosition;
180
+ for (let e = 1; e < r.length; e++) {
181
+ let t = r[e], n = t.minv.blockPosition, c = t.maxv.blockPosition;
182
+ if (n - s < 65e3 && c - o < 5e6) {
183
+ let e = i.at(-1);
184
+ (c - s || t.maxv.dataPosition - e.maxv.dataPosition) > 0 && (i[i.length - 1] = new a(e.minv, t.maxv, e.bin, t.endPosition), s = c);
185
+ } else i.push(t), o = n, s = c;
186
+ }
187
+ return p(i);
188
+ }
189
+ function p(e) {
190
+ let t = [e[0]];
191
+ for (let n = 1; n < e.length; n++) {
192
+ let r = e[n], i = t.at(-1).maxv;
193
+ (r.minv.blockPosition - i.blockPosition || r.minv.dataPosition - i.dataPosition) >= 0 ? t.push(r) : (r.maxv.blockPosition - i.blockPosition || r.maxv.dataPosition - i.dataPosition) > 0 && t.push(new a(i, r.maxv, r.bin, r.endPosition));
194
+ }
195
+ return t;
196
+ }
197
+ function m(e, t = []) {
198
+ let n = [...t];
199
+ for (let t of e) n.push(t.minv.blockPosition, t.maxv.blockPosition);
200
+ n.sort((e, t) => e - t);
201
+ for (let t of e) {
202
+ let e = t.maxv.blockPosition, r = 0, i = n.length;
203
+ for (; r < i;) {
204
+ let t = r + i >>> 1;
205
+ n[t] > e ? i = t : r = t + 1;
206
+ }
207
+ r < n.length && (t.endPosition = Math.min(t.endPosition, n[r]));
208
+ }
209
+ }
210
+ function h(e, t, n, r) {
211
+ let i = r ? r.blockPosition : Infinity, a = r ? r.dataPosition : 0, o = !1;
212
+ for (let r = 0; r < n; r++) {
213
+ let n = t + r * 8, s = e[n + 7] * 1099511627776 + e[n + 6] * 4294967296 + e[n + 5] * 16777216 + e[n + 4] * 65536 + e[n + 3] * 256 + e[n + 2], c = e[n + 1] << 8 | e[n];
214
+ (s < i || s === i && c < a) && (i = s, a = c, o = !0);
215
+ }
216
+ return o ? new u(i, a) : r;
217
+ }
218
+ function g(e) {
219
+ let t = new TextDecoder("utf-8"), n = [], r = {}, i = 0, a = 0;
220
+ for (; a < e.length;) {
221
+ let o = e.indexOf(0, a);
222
+ if (o === -1) break;
223
+ if (o > a) {
224
+ let s = t.decode(e.subarray(a, o));
225
+ n[i] = s, r[s] = i;
226
+ }
227
+ a = o + 1, i++;
228
+ }
229
+ return {
230
+ refNameToId: r,
231
+ refIdToName: n
232
+ };
233
+ }
234
+ var _ = {
235
+ 0: "generic",
236
+ 1: "SAM",
237
+ 2: "VCF",
238
+ 3: "GAF"
239
+ };
240
+ function v(e, t) {
241
+ let n = new DataView(e.buffer, e.byteOffset, e.byteLength), r = n.getInt32(t, !0), i = r & 65536 ? "zero-based-half-open" : "1-based-closed", a = _[r & 15];
242
+ if (!a) throw Error(`invalid Tabix preset format flags ${r}`);
243
+ let o = {
244
+ ref: n.getInt32(t + 4, !0),
245
+ start: n.getInt32(t + 8, !0),
246
+ end: n.getInt32(t + 12, !0)
247
+ }, s = n.getInt32(t + 16, !0), c = s ? String.fromCharCode(s) : void 0, l = n.getInt32(t + 20, !0), u = n.getInt32(t + 24, !0), { refIdToName: d, refNameToId: f } = g(e.subarray(t + 28, t + 28 + u));
248
+ return {
249
+ refIdToName: d,
250
+ refNameToId: f,
251
+ skipLines: l,
252
+ metaChar: c,
253
+ columnNumbers: o,
254
+ format: a,
255
+ coordinateType: i
256
+ };
257
+ }
258
+ function y(e, t) {
259
+ return { lineCount: l(e, t) };
260
+ }
261
+ function b(e, t = 5) {
262
+ let n = new s({ maxSize: t });
263
+ return (t) => {
264
+ let r = n.get(t);
265
+ if (r !== void 0) return r;
266
+ let i = e(t);
267
+ return i !== void 0 && n.set(t, i), i;
268
+ };
269
+ }
270
+ //#endregion
271
+ //#region ../../node_modules/@gmod/tabix/esm/indexFile.js
272
+ function x(e, t, n, r) {
273
+ if (t > 2 ** (n + r * 3)) return;
274
+ let i = (8 ** (r + 1) - 1) / 7, a = (8 ** r - 1) / 7 + Math.floor((t - 1) / 2 ** n) + 1;
275
+ for (a >= i && (a = 0);;) {
276
+ for (; a % 8 == 1;) a = (a - 1) / 8;
277
+ if (a === 0) return;
278
+ let t = e[a];
279
+ if (t?.length) {
280
+ let e = t[0].minv;
281
+ for (let n = 1; n < t.length; n++) {
282
+ let r = t[n].minv;
283
+ r.compareTo(e) < 0 && (e = r);
284
+ }
285
+ return e;
286
+ }
287
+ a++;
288
+ }
289
+ }
290
+ function S(e, t) {
291
+ return e.format === "GAF" ? 0 : e.refNameToId[t];
292
+ }
293
+ var C = class {
294
+ filehandle;
295
+ parseCache = new n({});
296
+ constructor({ filehandle: e }) {
297
+ this.filehandle = e;
298
+ }
299
+ async readIndexBytes(e) {
300
+ let t = await this.filehandle.readFile({
301
+ signal: e.signal,
302
+ onProgress: e.onProgress
303
+ }), n = await r(t);
304
+ return {
305
+ bytes: n,
306
+ dataView: new DataView(n.buffer, n.byteOffset, n.byteLength)
307
+ };
308
+ }
309
+ async lineCount(e, t = {}) {
310
+ let n = await this.parse(t), r = S(n, e);
311
+ return r === void 0 ? -1 : n.indices(r)?.stats?.lineCount ?? -1;
312
+ }
313
+ async getMetadata(e = {}) {
314
+ let { indices: t, ...n } = await this.parse(e);
315
+ return n;
316
+ }
317
+ async blocksForRange(e, t, n, r = {}) {
318
+ let i = await this.parse(r), a = S(i, e);
319
+ if (a === void 0) return [];
320
+ let o = i.indices(a);
321
+ if (!o) return [];
322
+ i.format === "GAF" && (t = Math.max(t - 1, 0));
323
+ let s = [];
324
+ for (let [e, r] of this.reg2bins(t, n, i)) for (let t = e; t <= r; t++) {
325
+ let e = o.binIndex[t];
326
+ if (e) for (let t of e) s.push(t);
327
+ }
328
+ let c = f(s, this.lowestOffset(o, t, i)), l = x(o.binIndex, n, i.minShift, i.depth);
329
+ if (l) {
330
+ let e = c.length;
331
+ for (; e > 0 && c[e - 1].minv.compareTo(l) >= 0;) e--;
332
+ c.length = e;
333
+ }
334
+ return c;
335
+ }
336
+ parse(e = {}) {
337
+ return this.parseCache.get("index", e.signal, (t) => this._parse({
338
+ ...e,
339
+ signal: t
340
+ }));
341
+ }
342
+ async hasRefSeq(e, t = {}) {
343
+ return !!(await this.parse(t)).indices(e)?.binIndex;
344
+ }
345
+ }, w = 21582659, T = 38359875;
346
+ function E(e, t) {
347
+ return e * 2 ** t;
348
+ }
349
+ function D(e, t) {
350
+ return Math.floor(e / 2 ** t);
351
+ }
352
+ var O = class extends C {
353
+ async _parse(e = {}) {
354
+ let { bytes: t, dataView: n } = await this.readIndexBytes(e), r = n.getUint32(0, !0), i;
355
+ if (r === w) i = 1;
356
+ else if (r === T) i = 2;
357
+ else throw Error(`Not a CSI file (magic=${r})`);
358
+ let o = n.getInt32(4, !0), s = n.getInt32(8, !0), c = (8 ** (s + 1) - 1) / 7, l = 2 ** (o + s * 3), u = n.getInt32(12, !0), f = u >= 28 && (n.getInt32(16, !0) & 15) == 3, p = u >= 30 || f ? v(t, 16) : {
359
+ refIdToName: [],
360
+ refNameToId: {},
361
+ metaChar: void 0,
362
+ columnNumbers: {
363
+ ref: 0,
364
+ start: 1,
365
+ end: 2
366
+ },
367
+ coordinateType: "zero-based-half-open",
368
+ format: "generic"
369
+ }, g = n.getInt32(16 + u, !0), _ = 16 + u + 4, x, S = [];
370
+ for (let e = 0; e < g; e++) {
371
+ S.push(_);
372
+ let e = n.getInt32(_, !0);
373
+ _ += 4;
374
+ for (let r = 0; r < e; r++) {
375
+ let e = n.getUint32(_, !0);
376
+ if (_ += 4, e > c) _ += 44;
377
+ else {
378
+ x = h(t, _, 1, x), _ += 8;
379
+ let e = n.getInt32(_, !0);
380
+ _ += 4 + 16 * e;
381
+ }
382
+ }
383
+ }
384
+ function C(e) {
385
+ let r = S[e];
386
+ if (r === void 0) return;
387
+ let i = r, o = n.getInt32(i, !0);
388
+ i += 4;
389
+ let s = {}, l = {}, u;
390
+ for (let e = 0; e < o; e++) {
391
+ let e = n.getUint32(i, !0);
392
+ if (i += 4, e > c) u = y(t, i + 28), i += 44;
393
+ else {
394
+ l[e] = d(t, i), i += 8;
395
+ let r = n.getInt32(i, !0);
396
+ i += 4;
397
+ let o = Array.from({ length: r });
398
+ for (let n = 0; n < r; n++) o[n] = new a(d(t, i), d(t, i + 8), e), i += 16;
399
+ s[e] = o;
400
+ }
401
+ }
402
+ return m(Object.values(s).flat()), {
403
+ binIndex: s,
404
+ loffsets: l,
405
+ stats: u
406
+ };
407
+ }
408
+ return {
409
+ ...p,
410
+ csi: !0,
411
+ refCount: g,
412
+ maxBlockSize: 65536,
413
+ firstDataLine: x,
414
+ csiVersion: i,
415
+ indices: b(C),
416
+ minShift: o,
417
+ depth: s,
418
+ maxBinNumber: c,
419
+ maxRefLength: l
420
+ };
421
+ }
422
+ lowestOffset(e, t, { minShift: n, depth: r }) {
423
+ let { loffsets: i } = e, a;
424
+ if (i) {
425
+ let e = (E(1, 3 * r) - 1) / 7 + D(Math.max(t, 0), n);
426
+ for (; a === void 0 && e > 0;) if (a = i[e], a === void 0) {
427
+ let t = Math.floor((e - 1) / 8), n = t * 8 + 1;
428
+ e = e > n ? e - 1 : t;
429
+ }
430
+ a ??= i[0];
431
+ }
432
+ return a;
433
+ }
434
+ reg2bins(e, t, { minShift: n, depth: r, maxBinNumber: i }) {
435
+ e = Math.max(e, 0);
436
+ let a = 2 ** (n + r * 3);
437
+ t > a && (t = a), --t;
438
+ let o = 0, s = 0, c = n + r * 3, l = [];
439
+ for (; o <= r; c -= 3, s += E(1, o * 3), o += 1) {
440
+ let a = s + D(e, c), o = s + D(t, c);
441
+ if (o - a + l.length > i) throw Error(`query ${e}-${t} is too large for current binning scheme (shift ${n}, depth ${r}), try a smaller query or a coarser index binning scheme`);
442
+ l.push([a, o]);
443
+ }
444
+ return l;
445
+ }
446
+ }, k = 21578324, A = 5, j = 14, M = 2 ** 29;
447
+ function N(e) {
448
+ return Math.min(Math.max(e, 0), M);
449
+ }
450
+ var P = class extends C {
451
+ reg2bins(e, t) {
452
+ e > M && console.warn("querying outside of possible tabix range");
453
+ let n = N(e), r = Math.min(t, M) - 1, i = [];
454
+ return n <= r && i.push([0, 0], [1 + (n >> 26), 1 + (r >> 26)], [9 + (n >> 23), 9 + (r >> 23)], [73 + (n >> 20), 73 + (r >> 20)], [585 + (n >> 17), 585 + (r >> 17)], [4681 + (n >> 14), 4681 + (r >> 14)]), i;
455
+ }
456
+ lowestOffset(e, t) {
457
+ let n = e.linearIndex;
458
+ return n?.[Math.min(N(t) >> j, n.length - 1)];
459
+ }
460
+ async _parse(e = {}) {
461
+ let { bytes: t, dataView: n } = await this.readIndexBytes(e);
462
+ if (n.getUint32(0, !0) !== k) throw Error("Not a TBI file");
463
+ let r = n.getUint32(4, !0), { refNameToId: i, refIdToName: o, coordinateType: s, format: c, columnNumbers: l, metaChar: u, skipLines: f } = v(t, 8), p = 36 + n.getInt32(32, !0), g, _ = [];
464
+ for (let e = 0; e < r; e++) {
465
+ _.push(p);
466
+ let e = n.getInt32(p, !0);
467
+ p += 4;
468
+ for (let t = 0; t < e; t++) {
469
+ let e = n.getUint32(p, !0);
470
+ p += 4;
471
+ let t = n.getInt32(p, !0);
472
+ if (p += 4, e > 37450) throw Error("tabix index contains too many bins, please use a CSI index");
473
+ p += 16 * t;
474
+ }
475
+ let r = n.getInt32(p, !0);
476
+ p += 4, g = h(t, p, r, g), p += 8 * r;
477
+ }
478
+ function x(e) {
479
+ let r = _[e];
480
+ if (r === void 0) return;
481
+ let i = r, o = n.getInt32(i, !0);
482
+ i += 4;
483
+ let s = {}, c;
484
+ for (let e = 0; e < o; e++) {
485
+ let e = n.getUint32(i, !0);
486
+ if (i += 4, e > 37450) throw Error("tabix index contains too many bins, please use a CSI index");
487
+ if (e === 37450) {
488
+ let e = n.getInt32(i, !0);
489
+ i += 4, e === 2 && (c = y(t, i + 16)), i += 16 * e;
490
+ } else {
491
+ let r = n.getInt32(i, !0);
492
+ i += 4;
493
+ let o = Array.from({ length: r });
494
+ for (let n = 0; n < r; n++) o[n] = new a(d(t, i), d(t, i + 8), e), i += 16;
495
+ s[e] = o;
496
+ }
497
+ }
498
+ let l = n.getInt32(i, !0);
499
+ i += 4;
500
+ let u = Array.from({ length: l });
501
+ for (let e = 0; e < l; e++) u[e] = d(t, i), i += 8;
502
+ return m(Object.values(s).flat(), u.map((e) => e.blockPosition)), {
503
+ binIndex: s,
504
+ linearIndex: u,
505
+ stats: c
506
+ };
507
+ }
508
+ return {
509
+ indices: b(x),
510
+ metaChar: u,
511
+ minShift: j,
512
+ depth: A,
513
+ maxBinNumber: 37449,
514
+ maxRefLength: M,
515
+ skipLines: f,
516
+ firstDataLine: g,
517
+ columnNumbers: l,
518
+ coordinateType: s,
519
+ format: c,
520
+ refIdToName: o,
521
+ refNameToId: i,
522
+ maxBlockSize: 65536
523
+ };
524
+ }
525
+ }, F = 9, I = 10, L = 13, R = 59, z = 60, B = 62, V = 6, H = 1024 * 2 ** 20, U = 18e4;
526
+ function W(n, r, i) {
527
+ if (n) return n;
528
+ if (r) return new e(r);
529
+ if (i) return new t(i);
530
+ throw TypeError("must provide either filehandle, path, or url");
531
+ }
532
+ function G({ tbiFilehandle: n, csiFilehandle: r, tbiPath: i, csiPath: a, tbiUrl: o, csiUrl: s, path: c, url: l }) {
533
+ if (n) return new P({ filehandle: n });
534
+ if (r) return new O({ filehandle: r });
535
+ if (i) return new P({ filehandle: new e(i) });
536
+ if (a) return new O({ filehandle: new e(a) });
537
+ if (s) return new O({ filehandle: new t(s) });
538
+ if (o) return new P({ filehandle: new t(o) });
539
+ if (c) return new P({ filehandle: new e(`${c}.tbi`) });
540
+ if (l) return new P({ filehandle: new t(`${l}.tbi`) });
541
+ throw TypeError("must provide one of tbiFilehandle, tbiPath, csiFilehandle, csiPath, tbiUrl, csiUrl");
542
+ }
543
+ function K(e, t, n, r, i) {
544
+ return e[n] * 256 + (r - t[n]) + i + 1;
545
+ }
546
+ function q(e, t, n, r, i, a) {
547
+ let o = t + (r - n);
548
+ if (e[i] === 46) return o;
549
+ let s = i;
550
+ for (let n = i; n <= a; n++) if (n === a || e[n] === R) {
551
+ let r = n - s;
552
+ if (r >= 10 && e[s] === 83 && e[s + 1] === 86 && e[s + 2] === 84 && e[s + 3] === 89 && e[s + 4] === 80 && e[s + 5] === 69 && e[s + 6] === 61 && e[s + 7] === 84 && e[s + 8] === 82 && e[s + 9] === 65) return t + 1;
553
+ r >= 4 && e[s] === 69 && e[s + 1] === 78 && e[s + 2] === 68 && e[s + 3] === 61 && (o = Z(e, s + 4, n)), s = n + 1;
554
+ }
555
+ return o;
556
+ }
557
+ var J = new TextDecoder();
558
+ function Y(e, t) {
559
+ let n = -1, r = t.charCodeAt(0);
560
+ for (let t = 0, i = e.length; t < i; t++) {
561
+ let i = e[t];
562
+ if (t === n + 1 && i !== r) break;
563
+ i === I && (n = t);
564
+ }
565
+ return e.subarray(0, n + 1);
566
+ }
567
+ function X(e, t) {
568
+ let n = 0;
569
+ for (let r = 0; r < t; r++) {
570
+ let t = e.indexOf(I, n);
571
+ if (t === -1) {
572
+ n = e.length;
573
+ break;
574
+ }
575
+ n = t + 1;
576
+ }
577
+ return J.decode(e.subarray(0, n)).split(/\r?\n/).slice(0, t);
578
+ }
579
+ function Z(e, t, n) {
580
+ let r = 0;
581
+ for (let i = t; i < n; i++) {
582
+ let t = e[i];
583
+ if (t >= 48 && t <= 57) r = r * 10 + (t - 48);
584
+ else break;
585
+ }
586
+ return r;
587
+ }
588
+ function Q(e, t, n, r, { start: i, end: a, pathCol: o, metaCharCode: s, decoder: c, callback: l }) {
589
+ let u = 0, d = 0;
590
+ for (; u < e.length;) {
591
+ let f = e.indexOf(I, u);
592
+ if (f === -1) break;
593
+ let p = u;
594
+ u = f + 1;
595
+ let m = p + r;
596
+ for (; d < n.length && m >= n[d];) d++;
597
+ if (e[p] === s) continue;
598
+ let h = p;
599
+ for (let t = 1; t < o; t++) {
600
+ let t = e.indexOf(F, h);
601
+ if (t === -1 || t >= f) {
602
+ h = f;
603
+ break;
604
+ }
605
+ h = t + 1;
606
+ }
607
+ let g = e[h];
608
+ if (g !== B && g !== z) continue;
609
+ let _ = e.indexOf(F, h);
610
+ (_ === -1 || _ > f) && (_ = f);
611
+ let v = Infinity, y = -1, b = h;
612
+ for (; b < _;) {
613
+ let t = 0, n = b + 1;
614
+ for (; n < _; n++) {
615
+ let r = e[n] - 48;
616
+ if (r < 0 || r > 9) break;
617
+ t = t * 10 + r;
618
+ }
619
+ t < v && (v = t), t > y && (y = t), b = n;
620
+ }
621
+ if (v >= a) return !0;
622
+ if (y >= i) {
623
+ let i = e[f - 1] === L ? f - 1 : f;
624
+ l(c.decode(e.subarray(p, i)), K(t, n, d, p, r), v, y + 1);
625
+ }
626
+ }
627
+ return !1;
628
+ }
629
+ var $ = class {
630
+ filehandle;
631
+ index;
632
+ chunkCache;
633
+ headerCache = new n({});
634
+ bgzfWorkerPool;
635
+ constructor({ path: e, filehandle: t, url: r, tbiPath: i, tbiUrl: a, tbiFilehandle: o, csiPath: s, csiUrl: c, csiFilehandle: l, chunkCacheSize: u = H, chunkCacheIdleTimeoutMs: d = U, chunkCacheBudget: f, bgzfWorkerPool: p }) {
636
+ this.bgzfWorkerPool = p, this.filehandle = W(t, e, r), this.index = G({
637
+ tbiFilehandle: o,
638
+ csiFilehandle: l,
639
+ tbiPath: i,
640
+ csiPath: s,
641
+ tbiUrl: a,
642
+ csiUrl: c,
643
+ path: e,
644
+ url: r
645
+ }), this.chunkCache = new n({
646
+ maxSize: u,
647
+ sizeOf: (e) => e.buffer.byteLength,
648
+ cacheKey: (e) => e.toString(),
649
+ idleTimeoutMs: d,
650
+ budget: f,
651
+ fill: (e, t) => this.readChunk(e, { signal: t })
652
+ });
653
+ }
654
+ clearChunkCache() {
655
+ this.chunkCache.clear();
656
+ }
657
+ async bytesForRegions(e, t = {}) {
658
+ let n = [];
659
+ for (let { refName: r, start: i, end: a } of e) {
660
+ let e = await this.index.blocksForRange(r, i, a, t);
661
+ for (let t of e) n.push(t);
662
+ }
663
+ let r = 0;
664
+ for (let e of f(n)) r += e.fetchedSize();
665
+ return r;
666
+ }
667
+ async getLines(e, t, n, r) {
668
+ let i, a = {}, o, s;
669
+ typeof r == "function" ? o = r : (a = r, o = r.lineCallback, i = r.signal, s = r.onProgress);
670
+ let c = await this.index.getMetadata(a), l = t ?? 0, u = n ?? c.maxRefLength;
671
+ if (l > u) throw TypeError("invalid start and end coordinates. start must be less than or equal to end");
672
+ if (l === u) return;
673
+ let d = await this.index.blocksForRange(e, l, u, a), f = c.format === "VCF", p = c.columnNumbers.ref || 0, m = c.columnNumbers.start || 0, h = f ? 8 : c.columnNumbers.end || 0, g = Math.max(p, m, h), _ = c.metaChar?.charCodeAt(0), v = c.coordinateType === "1-based-closed" ? -1 : 0, y = new TextEncoder(), b = new TextDecoder(), x = y.encode(e), S = new Int32Array(g + 1), C = c.format === "GAF" ? {
674
+ start: l,
675
+ end: u,
676
+ pathCol: m,
677
+ metaCharCode: _,
678
+ decoder: b,
679
+ callback: o
680
+ } : void 0, w = 0;
681
+ for (let e of d) w += e.fetchedSize();
682
+ let T = 0;
683
+ s?.(0, w);
684
+ let E = 1, D = [], O = (e) => {
685
+ for (; D.length < Math.min(e, d.length);) {
686
+ let e = d[D.length], t = this.chunkCache.get(e, i);
687
+ t.catch(() => {}), D.push(t);
688
+ }
689
+ };
690
+ O(1);
691
+ for (let e = 0, t = d.length; e < t; e++) {
692
+ let t = d[e], { buffer: n, cpositions: r, dpositions: i } = await D[e];
693
+ T += t.fetchedSize(), s?.(T, w);
694
+ let a = t.minv.dataPosition;
695
+ if (C) {
696
+ if (Q(n, r, i, a, C)) return;
697
+ } else {
698
+ let e = 0, t = 0;
699
+ for (; e < n.length;) {
700
+ let s = n.indexOf(I, e);
701
+ if (s === -1) break;
702
+ let c = e + a;
703
+ for (; t < i.length && c >= i[t];) t++;
704
+ if (_ !== void 0 && n[e] === _) {
705
+ e = s + 1;
706
+ continue;
707
+ }
708
+ S[0] = e - 1;
709
+ for (let e = 0; e < g; e++) {
710
+ let t = S[e], r = t < s ? n.indexOf(F, t + 1) : -1;
711
+ S[e + 1] = r === -1 || r >= s ? s : r;
712
+ }
713
+ let d = S[p - 1] + 1, y = S[p] - d;
714
+ if (y !== x.length) {
715
+ e = s + 1;
716
+ continue;
717
+ }
718
+ let C = !0;
719
+ for (let e = 0; e < y; e++) if (n[d + e] !== x[e]) {
720
+ C = !1;
721
+ break;
722
+ }
723
+ if (!C) {
724
+ e = s + 1;
725
+ continue;
726
+ }
727
+ let w = Z(n, S[m - 1] + 1, S[m]) + v;
728
+ if (w >= u) return;
729
+ let T;
730
+ if (T = h === 0 || h === m ? w + 1 : f ? q(n, w, S[3] + 1, S[4], S[h - 1] + 1, S[h]) : Z(n, S[h - 1] + 1, S[h]), T > l) {
731
+ let c = n[s - 1] === L ? s - 1 : s, l = b.decode(n.subarray(e, c));
732
+ o(l, K(r, i, t, e, a), w, T);
733
+ }
734
+ e = s + 1;
735
+ }
736
+ }
737
+ E = Math.min(E * 2, V), O(e + 1 + E);
738
+ }
739
+ }
740
+ async getMetadata(e = {}) {
741
+ return this.index.getMetadata(e);
742
+ }
743
+ async readHeaderBytes(e) {
744
+ let { firstDataLine: t, maxBlockSize: n } = await this.getMetadata(e), i = (t?.blockPosition ?? 0) + n, a = await this.filehandle.read(i, 0, e);
745
+ return r(a);
746
+ }
747
+ async parseHeader(e) {
748
+ let { metaChar: t, skipLines: n = 0 } = await this.getMetadata(e), r = await this.readHeaderBytes(e);
749
+ return {
750
+ header: J.decode(t ? Y(r, t) : r),
751
+ skippedLines: n > 0 ? X(r, n) : []
752
+ };
753
+ }
754
+ getParsedHeader(e = {}) {
755
+ return this.headerCache.get("header", e.signal, (t) => this.parseHeader({
756
+ ...e,
757
+ signal: t
758
+ }));
759
+ }
760
+ async getHeaderBuffer(e = {}) {
761
+ let { metaChar: t } = await this.getMetadata(e), n = await this.readHeaderBytes(e);
762
+ return t ? Y(n, t) : n;
763
+ }
764
+ async getSkippedLines(e = {}) {
765
+ let { skipLines: t = 0 } = await this.getMetadata(e);
766
+ return t <= 0 ? [] : (await this.getParsedHeader(e)).skippedLines;
767
+ }
768
+ async getHeader(e = {}) {
769
+ return (await this.getParsedHeader(e)).header;
770
+ }
771
+ async getHeaderLines(e = {}) {
772
+ let { header: t, skippedLines: n } = await this.getParsedHeader(e);
773
+ return (t ? t.split(/\r?\n/) : n).filter(Boolean);
774
+ }
775
+ async getReferenceSequenceNames(e = {}) {
776
+ return (await this.getMetadata(e)).refIdToName;
777
+ }
778
+ async lineCount(e, t = {}) {
779
+ return this.index.lineCount(e, t);
780
+ }
781
+ async readChunk(e, t = {}) {
782
+ let n = await this.filehandle.read(e.fetchedSize(), e.minv.blockPosition, t), r = await this.bgzfWorkerPool;
783
+ return i(n, e, r);
784
+ }
785
+ };
786
+ //#endregion
787
+ export { O as CSI, P as TBI, $ as TabixIndexedFile, u as VirtualOffset };