sparkforensics-cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/bin/sparkforensics-analyze.mjs +288 -0
  2. package/package.json +29 -0
  3. package/vendor-core/analyzer.js +167 -0
  4. package/vendor-core/assert-never.js +3 -0
  5. package/vendor-core/cli/budgets.js +203 -0
  6. package/vendor-core/cli/collect-run.js +107 -0
  7. package/vendor-core/core-count.js +68 -0
  8. package/vendor-core/core-locality-ratio.js +54 -0
  9. package/vendor-core/core-time-series.js +92 -0
  10. package/vendor-core/core-usage-locality.js +70 -0
  11. package/vendor-core/detectors.js +1989 -0
  12. package/vendor-core/docs-config.js +72 -0
  13. package/vendor-core/docs-site-config.js +23 -0
  14. package/vendor-core/efficiency-model.js +62 -0
  15. package/vendor-core/etl-phases.js +28 -0
  16. package/vendor-core/event-handlers.js +906 -0
  17. package/vendor-core/event-schemas.js +405 -0
  18. package/vendor-core/evidence-availability.js +121 -0
  19. package/vendor-core/evidence-report.js +459 -0
  20. package/vendor-core/finding-action-label.js +97 -0
  21. package/vendor-core/finding-filter-predicate.js +38 -0
  22. package/vendor-core/format-utils.js +167 -0
  23. package/vendor-core/impact-band.js +50 -0
  24. package/vendor-core/impact-estimator.js +428 -0
  25. package/vendor-core/ingest.js +139 -0
  26. package/vendor-core/job-groups.js +30 -0
  27. package/vendor-core/load-vendored.js +24 -0
  28. package/vendor-core/lz4-block.js +135 -0
  29. package/vendor-core/mcp-error.js +3 -0
  30. package/vendor-core/mcp-server-factory.js +115 -0
  31. package/vendor-core/mcp-tools.js +331 -0
  32. package/vendor-core/model-assembler.js +76 -0
  33. package/vendor-core/occupancy.js +202 -0
  34. package/vendor-core/parser-worker.js +249 -0
  35. package/vendor-core/plan-dot.js +25 -0
  36. package/vendor-core/plan-duration-attribution.js +185 -0
  37. package/vendor-core/plan-graph-model.js +171 -0
  38. package/vendor-core/plan-node-detail.js +159 -0
  39. package/vendor-core/plan-summary.js +233 -0
  40. package/vendor-core/plan-tree-walk.js +29 -0
  41. package/vendor-core/proxy.js +157 -0
  42. package/vendor-core/recommendation-rollup.js +197 -0
  43. package/vendor-core/redact.js +175 -0
  44. package/vendor-core/rolling-log-reassembly.js +52 -0
  45. package/vendor-core/run-aggregates.js +44 -0
  46. package/vendor-core/run-comparison.js +458 -0
  47. package/vendor-core/scaling-sim.js +73 -0
  48. package/vendor-core/session-snapshot.js +79 -0
  49. package/vendor-core/shs-fetch.js +196 -0
  50. package/vendor-core/shs-load.js +121 -0
  51. package/vendor-core/shs-request.js +101 -0
  52. package/vendor-core/shs-schemas.js +13 -0
  53. package/vendor-core/snappy-block.js +140 -0
  54. package/vendor-core/stage-quantiles.js +199 -0
  55. package/vendor-core/threshold-summary.js +35 -0
  56. package/vendor-core/types.js +286 -0
  57. package/vendor-core/vendor/fflate.js +2695 -0
  58. package/vendor-core/vendor/fzstd.js +768 -0
  59. package/vendor-core/wall-clock.js +36 -0
  60. package/vendor-core/wasted-core-hours.js +68 -0
@@ -0,0 +1,768 @@
1
+ // Vendored from fzstd@0.1.1 (esm/index.mjs), MIT license.
2
+ // https://github.com/101arrowz/fzstd — Copyright (c) 2020 Arjun Barrett.
3
+ // esm/index.mjs sha256 1a901fc5a58c349bbdb4f2aa1e688637ef56891ec58243a9f0cd863166b0d2a4
4
+ // Only the streaming Decompress class is used by this project (see
5
+ // src/parser-worker.js) to inflate Spark event logs written with
6
+ // spark.io.compression.codec=zstd, one block at a time.
7
+ // Some numerical data is initialized as -1 even when it doesn't need initialization to help the JIT infer types
8
+ // aliases for shorter compressed code (most minifers don't do this)
9
+ var ab = ArrayBuffer, u8 = Uint8Array, u16 = Uint16Array, i16 = Int16Array, u32 = Uint32Array, i32 = Int32Array;
10
+ var slc = function (v, s, e) {
11
+ if (u8.prototype.slice)
12
+ return u8.prototype.slice.call(v, s, e);
13
+ if (s == null || s < 0)
14
+ s = 0;
15
+ if (e == null || e > v.length)
16
+ e = v.length;
17
+ var n = new u8(e - s);
18
+ n.set(v.subarray(s, e));
19
+ return n;
20
+ };
21
+ var fill = function (v, n, s, e) {
22
+ if (u8.prototype.fill)
23
+ return u8.prototype.fill.call(v, n, s, e);
24
+ if (s == null || s < 0)
25
+ s = 0;
26
+ if (e == null || e > v.length)
27
+ e = v.length;
28
+ for (; s < e; ++s)
29
+ v[s] = n;
30
+ return v;
31
+ };
32
+ var cpw = function (v, t, s, e) {
33
+ if (u8.prototype.copyWithin)
34
+ return u8.prototype.copyWithin.call(v, t, s, e);
35
+ if (s == null || s < 0)
36
+ s = 0;
37
+ if (e == null || e > v.length)
38
+ e = v.length;
39
+ while (s < e) {
40
+ v[t++] = v[s++];
41
+ }
42
+ };
43
+ /**
44
+ * Codes for errors generated within this library
45
+ */
46
+ export var ZstdErrorCode = {
47
+ InvalidData: 0,
48
+ WindowSizeTooLarge: 1,
49
+ InvalidBlockType: 2,
50
+ FSEAccuracyTooHigh: 3,
51
+ DistanceTooFarBack: 4,
52
+ UnexpectedEOF: 5
53
+ };
54
+ // error codes
55
+ var ec = [
56
+ 'invalid zstd data',
57
+ 'window size too large (>2046MB)',
58
+ 'invalid block type',
59
+ 'FSE accuracy too high',
60
+ 'match distance too far back',
61
+ 'unexpected EOF'
62
+ ];
63
+ var err = function (ind, msg, nt) {
64
+ var e = new Error(msg || ec[ind]);
65
+ e.code = ind;
66
+ if (Error.captureStackTrace)
67
+ Error.captureStackTrace(e, err);
68
+ if (!nt)
69
+ throw e;
70
+ return e;
71
+ };
72
+ var rb = function (d, b, n) {
73
+ var i = 0, o = 0;
74
+ for (; i < n; ++i)
75
+ o |= d[b++] << (i << 3);
76
+ return o;
77
+ };
78
+ var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
79
+ // read Zstandard frame header
80
+ var rzfh = function (dat, w) {
81
+ var n3 = dat[0] | (dat[1] << 8) | (dat[2] << 16);
82
+ if (n3 == 0x2FB528 && dat[3] == 253) {
83
+ // Zstandard
84
+ var flg = dat[4];
85
+ // single segment checksum dict flag frame content flag
86
+ var ss = (flg >> 5) & 1, cc = (flg >> 2) & 1, df = flg & 3, fcf = flg >> 6;
87
+ if (flg & 8)
88
+ err(0);
89
+ // byte
90
+ var bt = 6 - ss;
91
+ // dict bytes
92
+ var db = df == 3 ? 4 : df;
93
+ // dictionary id
94
+ var di = rb(dat, bt, db);
95
+ bt += db;
96
+ // frame size bytes
97
+ var fsb = fcf ? (1 << fcf) : ss;
98
+ // frame source size
99
+ var fss = rb(dat, bt, fsb) + ((fcf == 1) && 256);
100
+ // window size
101
+ var ws = fss;
102
+ if (!ss) {
103
+ // window descriptor
104
+ var wb = 1 << (10 + (dat[5] >> 3));
105
+ ws = wb + (wb >> 3) * (dat[5] & 7);
106
+ }
107
+ if (ws > 2145386496)
108
+ err(1);
109
+ var buf = new u8((w == 1 ? (fss || ws) : w ? 0 : ws) + 12);
110
+ buf[0] = 1, buf[4] = 4, buf[8] = 8;
111
+ return {
112
+ b: bt + fsb,
113
+ y: 0,
114
+ l: 0,
115
+ d: di,
116
+ w: (w && w != 1) ? w : buf.subarray(12),
117
+ e: ws,
118
+ o: new i32(buf.buffer, 0, 3),
119
+ u: fss,
120
+ c: cc,
121
+ m: Math.min(131072, ws)
122
+ };
123
+ }
124
+ else if (((n3 >> 4) | (dat[3] << 20)) == 0x184D2A5) {
125
+ // skippable
126
+ return b4(dat, 4) + 8;
127
+ }
128
+ err(0);
129
+ };
130
+ // most significant bit for nonzero
131
+ var msb = function (val) {
132
+ var bits = 0;
133
+ for (; (1 << bits) <= val; ++bits)
134
+ ;
135
+ return bits - 1;
136
+ };
137
+ // read finite state entropy
138
+ var rfse = function (dat, bt, mal) {
139
+ // table pos
140
+ var tpos = (bt << 3) + 4;
141
+ // accuracy log
142
+ var al = (dat[bt] & 15) + 5;
143
+ if (al > mal)
144
+ err(3);
145
+ // size
146
+ var sz = 1 << al;
147
+ // probabilities symbols repeat index high threshold
148
+ var probs = sz, sym = -1, re = -1, i = -1, ht = sz;
149
+ // optimization: single allocation is much faster
150
+ var buf = new ab(512 + (sz << 2));
151
+ var freq = new i16(buf, 0, 256);
152
+ // same view as freq
153
+ var dstate = new u16(buf, 0, 256);
154
+ var nstate = new u16(buf, 512, sz);
155
+ var bb1 = 512 + (sz << 1);
156
+ var syms = new u8(buf, bb1, sz);
157
+ var nbits = new u8(buf, bb1 + sz);
158
+ while (sym < 255 && probs > 0) {
159
+ var bits = msb(probs + 1);
160
+ var cbt = tpos >> 3;
161
+ // mask
162
+ var msk = (1 << (bits + 1)) - 1;
163
+ var val = ((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (tpos & 7)) & msk;
164
+ // mask (1 fewer bit)
165
+ var msk1fb = (1 << bits) - 1;
166
+ // max small value
167
+ var msv = msk - probs - 1;
168
+ // small value
169
+ var sval = val & msk1fb;
170
+ if (sval < msv)
171
+ tpos += bits, val = sval;
172
+ else {
173
+ tpos += bits + 1;
174
+ if (val > msk1fb)
175
+ val -= msv;
176
+ }
177
+ freq[++sym] = --val;
178
+ if (val == -1) {
179
+ probs += val;
180
+ syms[--ht] = sym;
181
+ }
182
+ else
183
+ probs -= val;
184
+ if (!val) {
185
+ do {
186
+ // repeat byte
187
+ var rbt = tpos >> 3;
188
+ re = ((dat[rbt] | (dat[rbt + 1] << 8)) >> (tpos & 7)) & 3;
189
+ tpos += 2;
190
+ sym += re;
191
+ } while (re == 3);
192
+ }
193
+ }
194
+ if (sym > 255 || probs)
195
+ err(0);
196
+ var sympos = 0;
197
+ // sym step (coprime with sz - formula from zstd source)
198
+ var sstep = (sz >> 1) + (sz >> 3) + 3;
199
+ // sym mask
200
+ var smask = sz - 1;
201
+ for (var s = 0; s <= sym; ++s) {
202
+ var sf = freq[s];
203
+ if (sf < 1) {
204
+ dstate[s] = -sf;
205
+ continue;
206
+ }
207
+ // This is split into two loops in zstd to avoid branching, but as JS is higher-level that is unnecessary
208
+ for (i = 0; i < sf; ++i) {
209
+ syms[sympos] = s;
210
+ do {
211
+ sympos = (sympos + sstep) & smask;
212
+ } while (sympos >= ht);
213
+ }
214
+ }
215
+ // After spreading symbols, should be zero again
216
+ if (sympos)
217
+ err(0);
218
+ for (i = 0; i < sz; ++i) {
219
+ // next state
220
+ var ns = dstate[syms[i]]++;
221
+ // num bits
222
+ var nb = nbits[i] = al - msb(ns);
223
+ nstate[i] = (ns << nb) - sz;
224
+ }
225
+ return [(tpos + 7) >> 3, {
226
+ b: al,
227
+ s: syms,
228
+ n: nbits,
229
+ t: nstate
230
+ }];
231
+ };
232
+ // read huffman
233
+ var rhu = function (dat, bt) {
234
+ // index weight count
235
+ var i = 0, wc = -1;
236
+ // buffer header byte
237
+ var buf = new u8(292), hb = dat[bt];
238
+ // huffman weights
239
+ var hw = buf.subarray(0, 256);
240
+ // rank count
241
+ var rc = buf.subarray(256, 268);
242
+ // rank index
243
+ var ri = new u16(buf.buffer, 268);
244
+ // NOTE: at this point bt is 1 less than expected
245
+ if (hb < 128) {
246
+ // end byte, fse decode table
247
+ var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];
248
+ bt += hb;
249
+ var epos = ebt << 3;
250
+ // last byte
251
+ var lb = dat[bt];
252
+ if (!lb)
253
+ err(0);
254
+ // state1 state2 state1 bits state2 bits
255
+ var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;
256
+ // fse pos
257
+ // pre-increment to account for original deficit of 1
258
+ var fpos = (++bt << 3) - 8 + msb(lb);
259
+ for (;;) {
260
+ fpos -= btr1;
261
+ if (fpos < epos)
262
+ break;
263
+ var cbt = fpos >> 3;
264
+ st1 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr1) - 1);
265
+ hw[++wc] = fdt.s[st1];
266
+ fpos -= btr2;
267
+ if (fpos < epos)
268
+ break;
269
+ cbt = fpos >> 3;
270
+ st2 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr2) - 1);
271
+ hw[++wc] = fdt.s[st2];
272
+ btr1 = fdt.n[st1];
273
+ st1 = fdt.t[st1];
274
+ btr2 = fdt.n[st2];
275
+ st2 = fdt.t[st2];
276
+ }
277
+ if (++wc > 255)
278
+ err(0);
279
+ }
280
+ else {
281
+ wc = hb - 127;
282
+ for (; i < wc; i += 2) {
283
+ var byte = dat[++bt];
284
+ hw[i] = byte >> 4;
285
+ hw[i + 1] = byte & 15;
286
+ }
287
+ ++bt;
288
+ }
289
+ // weight exponential sum
290
+ var wes = 0;
291
+ for (i = 0; i < wc; ++i) {
292
+ var wt = hw[i];
293
+ // bits must be at most 11, same as weight
294
+ if (wt > 11)
295
+ err(0);
296
+ wes += wt && (1 << (wt - 1));
297
+ }
298
+ // max bits
299
+ var mb = msb(wes) + 1;
300
+ // table size
301
+ var ts = 1 << mb;
302
+ // remaining sum
303
+ var rem = ts - wes;
304
+ // must be power of 2
305
+ if (rem & (rem - 1))
306
+ err(0);
307
+ hw[wc++] = msb(rem) + 1;
308
+ for (i = 0; i < wc; ++i) {
309
+ var wt = hw[i];
310
+ ++rc[hw[i] = wt && (mb + 1 - wt)];
311
+ }
312
+ // huf buf
313
+ var hbuf = new u8(ts << 1);
314
+ // symbols num bits
315
+ var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);
316
+ ri[mb] = 0;
317
+ for (i = mb; i > 0; --i) {
318
+ var pv = ri[i];
319
+ fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << (mb - i)));
320
+ }
321
+ if (ri[0] != ts)
322
+ err(0);
323
+ for (i = 0; i < wc; ++i) {
324
+ var bits = hw[i];
325
+ if (bits) {
326
+ var code = ri[bits];
327
+ fill(syms, i, code, ri[bits] = code + (1 << (mb - bits)));
328
+ }
329
+ }
330
+ return [bt, {
331
+ n: nb,
332
+ b: mb,
333
+ s: syms
334
+ }];
335
+ };
336
+ // Tables generated using this:
337
+ // https://gist.github.com/101arrowz/a979452d4355992cbf8f257cbffc9edd
338
+ // default literal length table
339
+ var dllt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([
340
+ 81, 16, 99, 140, 49, 198, 24, 99, 12, 33, 196, 24, 99, 102, 102, 134, 70, 146, 4
341
+ ]), 0, 6)[1];
342
+ // default match length table
343
+ var dmlt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([
344
+ 33, 20, 196, 24, 99, 140, 33, 132, 16, 66, 8, 33, 132, 16, 66, 8, 33, 68, 68, 68, 68, 68, 68, 68, 68, 36, 9
345
+ ]), 0, 6)[1];
346
+ // default offset code table
347
+ var doct = /*#__PURE__ */ rfse(/*#__PURE__*/ new u8([
348
+ 32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2
349
+ ]), 0, 5)[1];
350
+ // bits to baseline
351
+ var b2bl = function (b, s) {
352
+ var len = b.length, bl = new i32(len);
353
+ for (var i = 0; i < len; ++i) {
354
+ bl[i] = s;
355
+ s += 1 << b[i];
356
+ }
357
+ return bl;
358
+ };
359
+ // literal length bits
360
+ var llb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([
361
+ 0, 0, 0, 0, 16843009, 50528770, 134678020, 202050057, 269422093
362
+ ])).buffer, 0, 36);
363
+ // literal length baseline
364
+ var llbl = /*#__PURE__ */ b2bl(llb, 0);
365
+ // match length bits
366
+ var mlb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([
367
+ 0, 0, 0, 0, 0, 0, 0, 0, 16843009, 50528770, 117769220, 185207048, 252579084, 16
368
+ ])).buffer, 0, 53);
369
+ // match length baseline
370
+ var mlbl = /*#__PURE__ */ b2bl(mlb, 3);
371
+ // decode huffman stream
372
+ var dhu = function (dat, out, hu) {
373
+ var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;
374
+ if (!lb)
375
+ err(0);
376
+ var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;
377
+ for (; pos > eb && i < ss;) {
378
+ var cbt = pos >> 3;
379
+ var val = (dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (pos & 7);
380
+ st = ((st << btr) | val) & msk;
381
+ out[++i] = hu.s[st];
382
+ pos -= (btr = hu.n[st]);
383
+ }
384
+ if (pos != eb || i + 1 != ss)
385
+ err(0);
386
+ };
387
+ // decode huffman stream 4x
388
+ // TODO: use workers to parallelize
389
+ var dhu4 = function (dat, out, hu) {
390
+ var bt = 6;
391
+ var ss = out.length, sz1 = (ss + 3) >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;
392
+ dhu(dat.subarray(bt, bt += dat[0] | (dat[1] << 8)), out.subarray(0, sz1), hu);
393
+ dhu(dat.subarray(bt, bt += dat[2] | (dat[3] << 8)), out.subarray(sz1, sz2), hu);
394
+ dhu(dat.subarray(bt, bt += dat[4] | (dat[5] << 8)), out.subarray(sz2, sz3), hu);
395
+ dhu(dat.subarray(bt), out.subarray(sz3), hu);
396
+ };
397
+ // read Zstandard block
398
+ var rzb = function (dat, st, out) {
399
+ var _a;
400
+ var bt = st.b;
401
+ // byte 0 block type
402
+ var b0 = dat[bt], btype = (b0 >> 1) & 3;
403
+ st.l = b0 & 1;
404
+ var sz = (b0 >> 3) | (dat[bt + 1] << 5) | (dat[bt + 2] << 13);
405
+ // end byte for block
406
+ var ebt = (bt += 3) + sz;
407
+ if (btype == 1) {
408
+ if (bt >= dat.length)
409
+ return;
410
+ st.b = bt + 1;
411
+ if (out) {
412
+ fill(out, dat[bt], st.y, st.y += sz);
413
+ return out;
414
+ }
415
+ return fill(new u8(sz), dat[bt]);
416
+ }
417
+ if (ebt > dat.length)
418
+ return;
419
+ if (btype == 0) {
420
+ st.b = ebt;
421
+ if (out) {
422
+ out.set(dat.subarray(bt, ebt), st.y);
423
+ st.y += sz;
424
+ return out;
425
+ }
426
+ return slc(dat, bt, ebt);
427
+ }
428
+ if (btype == 2) {
429
+ // byte 3 lit btype size format
430
+ var b3 = dat[bt], lbt = b3 & 3, sf = (b3 >> 2) & 3;
431
+ // lit src size lit cmp sz 4 streams
432
+ var lss = b3 >> 4, lcs = 0, s4 = 0;
433
+ if (lbt < 2) {
434
+ if (sf & 1)
435
+ lss |= (dat[++bt] << 4) | ((sf & 2) && (dat[++bt] << 12));
436
+ else
437
+ lss = b3 >> 3;
438
+ }
439
+ else {
440
+ s4 = sf;
441
+ if (sf < 2)
442
+ lss |= ((dat[++bt] & 63) << 4), lcs = (dat[bt] >> 6) | (dat[++bt] << 2);
443
+ else if (sf == 2)
444
+ lss |= (dat[++bt] << 4) | ((dat[++bt] & 3) << 12), lcs = (dat[bt] >> 2) | (dat[++bt] << 6);
445
+ else
446
+ lss |= (dat[++bt] << 4) | ((dat[++bt] & 63) << 12), lcs = (dat[bt] >> 6) | (dat[++bt] << 2) | (dat[++bt] << 10);
447
+ }
448
+ ++bt;
449
+ // add literals to end - can never overlap with backreferences because unused literals always appended
450
+ var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);
451
+ // starting point for literals
452
+ var spl = buf.length - lss;
453
+ if (lbt == 0)
454
+ buf.set(dat.subarray(bt, bt += lss), spl);
455
+ else if (lbt == 1)
456
+ fill(buf, dat[bt++], spl);
457
+ else {
458
+ // huffman table
459
+ var hu = st.h;
460
+ if (lbt == 2) {
461
+ var hud = rhu(dat, bt);
462
+ // subtract description length
463
+ lcs += bt - (bt = hud[0]);
464
+ st.h = hu = hud[1];
465
+ }
466
+ else if (!hu)
467
+ err(0);
468
+ (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);
469
+ }
470
+ // num sequences
471
+ var ns = dat[bt++];
472
+ if (ns) {
473
+ if (ns == 255)
474
+ ns = (dat[bt++] | (dat[bt++] << 8)) + 0x7F00;
475
+ else if (ns > 127)
476
+ ns = ((ns - 128) << 8) | dat[bt++];
477
+ // symbol compression modes
478
+ var scm = dat[bt++];
479
+ if (scm & 3)
480
+ err(0);
481
+ var dts = [dmlt, doct, dllt];
482
+ for (var i = 2; i > -1; --i) {
483
+ var md = (scm >> ((i << 1) + 2)) & 3;
484
+ if (md == 1) {
485
+ // rle buf
486
+ var rbuf = new u8([0, 0, dat[bt++]]);
487
+ dts[i] = {
488
+ s: rbuf.subarray(2, 3),
489
+ n: rbuf.subarray(0, 1),
490
+ t: new u16(rbuf.buffer, 0, 1),
491
+ b: 0
492
+ };
493
+ }
494
+ else if (md == 2) {
495
+ // accuracy log 8 for offsets, 9 for others
496
+ _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];
497
+ }
498
+ else if (md == 3) {
499
+ if (!st.t)
500
+ err(0);
501
+ dts[i] = st.t[i];
502
+ }
503
+ }
504
+ var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];
505
+ var lb = dat[ebt - 1];
506
+ if (!lb)
507
+ err(0);
508
+ var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;
509
+ var lst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << llt.b) - 1);
510
+ cbt = (spos -= oct.b) >> 3;
511
+ var ost = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << oct.b) - 1);
512
+ cbt = (spos -= mlt.b) >> 3;
513
+ var mst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mlt.b) - 1);
514
+ for (++ns; --ns;) {
515
+ var llc = llt.s[lst];
516
+ var lbtr = llt.n[lst];
517
+ var mlc = mlt.s[mst];
518
+ var mbtr = mlt.n[mst];
519
+ var ofc = oct.s[ost];
520
+ var obtr = oct.n[ost];
521
+ cbt = (spos -= ofc) >> 3;
522
+ var ofp = 1 << ofc;
523
+ var off = ofp + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16) | (dat[cbt + 3] << 24)) >>> (spos & 7)) & (ofp - 1));
524
+ cbt = (spos -= mlb[mlc]) >> 3;
525
+ var ml = mlbl[mlc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << mlb[mlc]) - 1));
526
+ cbt = (spos -= llb[llc]) >> 3;
527
+ var ll = llbl[llc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << llb[llc]) - 1));
528
+ cbt = (spos -= lbtr) >> 3;
529
+ lst = llt.t[lst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << lbtr) - 1));
530
+ cbt = (spos -= mbtr) >> 3;
531
+ mst = mlt.t[mst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mbtr) - 1));
532
+ cbt = (spos -= obtr) >> 3;
533
+ ost = oct.t[ost] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << obtr) - 1));
534
+ if (off > 3) {
535
+ st.o[2] = st.o[1];
536
+ st.o[1] = st.o[0];
537
+ st.o[0] = off -= 3;
538
+ }
539
+ else {
540
+ var idx = off - (ll != 0);
541
+ if (idx) {
542
+ off = idx == 3 ? st.o[0] - 1 : st.o[idx];
543
+ if (idx > 1)
544
+ st.o[2] = st.o[1];
545
+ st.o[1] = st.o[0];
546
+ st.o[0] = off;
547
+ }
548
+ else
549
+ off = st.o[0];
550
+ }
551
+ for (var i = 0; i < ll; ++i) {
552
+ buf[oubt + i] = buf[spl + i];
553
+ }
554
+ oubt += ll, spl += ll;
555
+ var stin = oubt - off;
556
+ if (stin < 0) {
557
+ var len = -stin;
558
+ var bs = st.e + stin;
559
+ if (len > ml)
560
+ len = ml;
561
+ for (var i = 0; i < len; ++i) {
562
+ buf[oubt + i] = st.w[bs + i];
563
+ }
564
+ oubt += len, ml -= len, stin = 0;
565
+ }
566
+ for (var i = 0; i < ml; ++i) {
567
+ buf[oubt + i] = buf[stin + i];
568
+ }
569
+ oubt += ml;
570
+ }
571
+ if (oubt != spl) {
572
+ while (spl < buf.length) {
573
+ buf[oubt++] = buf[spl++];
574
+ }
575
+ }
576
+ else
577
+ oubt = buf.length;
578
+ if (out)
579
+ st.y += oubt;
580
+ else
581
+ buf = slc(buf, 0, oubt);
582
+ }
583
+ else if (out) {
584
+ st.y += lss;
585
+ if (spl) {
586
+ for (var i = 0; i < lss; ++i) {
587
+ buf[i] = buf[spl + i];
588
+ }
589
+ }
590
+ }
591
+ else if (spl)
592
+ buf = slc(buf, spl);
593
+ st.b = ebt;
594
+ return buf;
595
+ }
596
+ err(2);
597
+ };
598
+ // concat
599
+ var cct = function (bufs, ol) {
600
+ if (bufs.length == 1)
601
+ return bufs[0];
602
+ var buf = new u8(ol);
603
+ for (var i = 0, b = 0; i < bufs.length; ++i) {
604
+ var chk = bufs[i];
605
+ buf.set(chk, b);
606
+ b += chk.length;
607
+ }
608
+ return buf;
609
+ };
610
+ /**
611
+ * Decompresses Zstandard data
612
+ * @param dat The input data
613
+ * @param buf The output buffer. If unspecified, the function will allocate
614
+ * exactly enough memory to fit the decompressed data. If your
615
+ * data has multiple frames and you know the output size, specifying
616
+ * it will yield better performance.
617
+ * @returns The decompressed data
618
+ */
619
+ export function decompress(dat, buf) {
620
+ var bufs = [], nb = +!buf;
621
+ var bt = 0, ol = 0;
622
+ for (; dat.length;) {
623
+ var st = rzfh(dat, nb || buf);
624
+ if (typeof st == 'object') {
625
+ if (nb) {
626
+ buf = null;
627
+ if (st.w.length == st.u) {
628
+ bufs.push(buf = st.w);
629
+ ol += st.u;
630
+ }
631
+ }
632
+ else {
633
+ bufs.push(buf);
634
+ st.e = 0;
635
+ }
636
+ for (; !st.l;) {
637
+ var blk = rzb(dat, st, buf);
638
+ if (!blk)
639
+ err(5);
640
+ if (buf)
641
+ st.e = st.y;
642
+ else {
643
+ bufs.push(blk);
644
+ ol += blk.length;
645
+ cpw(st.w, 0, blk.length);
646
+ st.w.set(blk, st.w.length - blk.length);
647
+ }
648
+ }
649
+ bt = st.b + (st.c * 4);
650
+ }
651
+ else
652
+ bt = st;
653
+ dat = dat.subarray(bt);
654
+ }
655
+ return cct(bufs, ol);
656
+ }
657
+ /**
658
+ * Decompressor for Zstandard streamed data
659
+ */
660
+ var Decompress = /*#__PURE__*/ (function () {
661
+ /**
662
+ * Creates a Zstandard decompressor
663
+ * @param ondata The handler for stream data
664
+ */
665
+ function Decompress(ondata) {
666
+ this.ondata = ondata;
667
+ this.c = [];
668
+ this.l = 0;
669
+ this.z = 0;
670
+ }
671
+ /**
672
+ * Pushes data to be decompressed
673
+ * @param chunk The chunk of data to push
674
+ * @param final Whether or not this is the last chunk in the stream
675
+ */
676
+ // Upstream self-recurses once per Zstandard frame boundary found within a
677
+ // chunk (both `return this.push(...)` sites below, originally). Spark's
678
+ // event-log writer flushes its output stream periodically while a job is
679
+ // running, so one entry can be thousands of concatenated zstd frames —
680
+ // enough recursion depth to blow the JS stack (surfaces as postMessage
681
+ // failing, since emit() is called from deep inside this call chain).
682
+ // Patched to a labeled loop so frame-boundary continuation is O(1) stack.
683
+ Decompress.prototype.push = function (chunk, final) {
684
+ outer: for (;;) {
685
+ if (typeof this.s == 'number') {
686
+ var sub = Math.min(chunk.length, this.s);
687
+ chunk = chunk.subarray(sub);
688
+ this.s -= sub;
689
+ }
690
+ var sl = chunk.length;
691
+ var ncs = sl + this.l;
692
+ if (!this.s) {
693
+ if (final) {
694
+ if (!ncs) {
695
+ this.ondata(new u8(0), true);
696
+ return;
697
+ }
698
+ // min for frame + one block
699
+ if (ncs < 5)
700
+ err(5);
701
+ }
702
+ else if (ncs < 18) {
703
+ this.c.push(chunk);
704
+ this.l = ncs;
705
+ return;
706
+ }
707
+ if (this.l) {
708
+ this.c.push(chunk);
709
+ chunk = cct(this.c, ncs);
710
+ this.c = [];
711
+ this.l = 0;
712
+ }
713
+ if (typeof (this.s = rzfh(chunk)) == 'number')
714
+ continue outer;
715
+ }
716
+ if (typeof this.s != 'number') {
717
+ if (ncs < (this.z || 3)) {
718
+ if (final)
719
+ err(5);
720
+ this.c.push(chunk);
721
+ this.l = ncs;
722
+ return;
723
+ }
724
+ if (this.l) {
725
+ this.c.push(chunk);
726
+ chunk = cct(this.c, ncs);
727
+ this.c = [];
728
+ this.l = 0;
729
+ }
730
+ if (!this.z && ncs < (this.z = (chunk[this.s.b] & 2) ? 4 : 3 + ((chunk[this.s.b] >> 3) | (chunk[this.s.b + 1] << 5) | (chunk[this.s.b + 2] << 13)))) {
731
+ if (final)
732
+ err(5);
733
+ this.c.push(chunk);
734
+ this.l = ncs;
735
+ return;
736
+ }
737
+ else
738
+ this.z = 0;
739
+ for (;;) {
740
+ var blk = rzb(chunk, this.s);
741
+ if (!blk) {
742
+ if (final)
743
+ err(5);
744
+ var adc = chunk.subarray(this.s.b);
745
+ this.s.b = 0;
746
+ this.c.push(adc), this.l += adc.length;
747
+ return;
748
+ }
749
+ else {
750
+ this.ondata(blk, false);
751
+ cpw(this.s.w, 0, blk.length);
752
+ this.s.w.set(blk, this.s.w.length - blk.length);
753
+ }
754
+ if (this.s.l) {
755
+ chunk = chunk.subarray(this.s.b);
756
+ this.s = this.s.c * 4;
757
+ continue outer;
758
+ }
759
+ }
760
+ }
761
+ else if (final)
762
+ err(5);
763
+ return;
764
+ }
765
+ };
766
+ return Decompress;
767
+ }());
768
+ export { Decompress };