spliterator 4.0.0 → 6.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/README.md +56 -0
- package/out/index.d.ts +7 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +7 -1
- package/out/index.js.map +1 -1
- package/out/lib/AsyncSequence.d.ts +180 -0
- package/out/lib/AsyncSequence.d.ts.map +1 -0
- package/out/lib/AsyncSequence.js +432 -0
- package/out/lib/AsyncSequence.js.map +1 -0
- package/out/lib/AsyncSpliterator.d.ts.map +1 -1
- package/out/lib/AsyncSpliterator.js +6 -4
- package/out/lib/AsyncSpliterator.js.map +1 -1
- package/out/lib/BufferController.d.ts.map +1 -1
- package/out/lib/BufferController.js.map +1 -1
- package/out/lib/CSVSpliterator.d.ts +14 -11
- package/out/lib/CSVSpliterator.d.ts.map +1 -1
- package/out/lib/CSVSpliterator.js +53 -37
- package/out/lib/CSVSpliterator.js.map +1 -1
- package/out/lib/CharacterSequence.d.ts +10 -1
- package/out/lib/CharacterSequence.d.ts.map +1 -1
- package/out/lib/CharacterSequence.js +76 -26
- package/out/lib/CharacterSequence.js.map +1 -1
- package/out/lib/CompositeDataView.d.ts.map +1 -1
- package/out/lib/CompositeDataView.js.map +1 -1
- package/out/lib/IndexQueue.d.ts.map +1 -1
- package/out/lib/IndexQueue.js +3 -1
- package/out/lib/IndexQueue.js.map +1 -1
- package/out/lib/JSONSpliterator.d.ts +20 -9
- package/out/lib/JSONSpliterator.d.ts.map +1 -1
- package/out/lib/JSONSpliterator.js +27 -19
- package/out/lib/JSONSpliterator.js.map +1 -1
- package/out/lib/PSVSpliterator.js.map +1 -1
- package/out/lib/SlidingWindow.d.ts.map +1 -1
- package/out/lib/SlidingWindow.js.map +1 -1
- package/out/lib/Spliterator.d.ts.map +1 -1
- package/out/lib/Spliterator.js +6 -4
- package/out/lib/Spliterator.js.map +1 -1
- package/out/lib/TSVSpliterator.js.map +1 -1
- package/out/lib/TextSpliterator.d.ts +6 -4
- package/out/lib/TextSpliterator.d.ts.map +1 -1
- package/out/lib/TextSpliterator.js +10 -13
- package/out/lib/TextSpliterator.js.map +1 -1
- package/out/lib/adaptive-source.d.ts +39 -0
- package/out/lib/adaptive-source.d.ts.map +1 -0
- package/out/lib/adaptive-source.js +95 -0
- package/out/lib/adaptive-source.js.map +1 -0
- package/out/lib/casing.js +3 -3
- package/out/lib/casing.js.map +1 -1
- package/out/lib/chunks.d.ts +20 -0
- package/out/lib/chunks.d.ts.map +1 -0
- package/out/lib/chunks.js +36 -0
- package/out/lib/chunks.js.map +1 -0
- package/out/lib/merge-async-iterators.d.ts.map +1 -1
- package/out/lib/merge-async-iterators.js +3 -2
- package/out/lib/merge-async-iterators.js.map +1 -1
- package/out/lib/parallel-map-runtime.d.ts +3 -1
- package/out/lib/parallel-map-runtime.d.ts.map +1 -1
- package/out/lib/parallel-map-runtime.js +1 -1
- package/out/lib/parallel-map-runtime.js.map +1 -1
- package/out/lib/parallel-map-worker-entry.js +3 -2
- package/out/lib/parallel-map-worker-entry.js.map +1 -1
- package/out/lib/parallel-map-workers.d.ts +57 -0
- package/out/lib/parallel-map-workers.d.ts.map +1 -0
- package/out/lib/parallel-map-workers.js +82 -0
- package/out/lib/parallel-map-workers.js.map +1 -0
- package/out/lib/parallel-map.d.ts +17 -34
- package/out/lib/parallel-map.d.ts.map +1 -1
- package/out/lib/parallel-map.js +18 -62
- package/out/lib/parallel-map.js.map +1 -1
- package/out/lib/pivot.d.ts +30 -0
- package/out/lib/pivot.d.ts.map +1 -0
- package/out/lib/pivot.js +47 -0
- package/out/lib/pivot.js.map +1 -0
- package/out/lib/segment-runtime.d.ts.map +1 -1
- package/out/lib/segment-runtime.js +7 -4
- package/out/lib/segment-runtime.js.map +1 -1
- package/out/lib/segment-worker-entry.js +20 -17
- package/out/lib/segment-worker-entry.js.map +1 -1
- package/out/lib/segment-workers.d.ts +22 -9
- package/out/lib/segment-workers.d.ts.map +1 -1
- package/out/lib/segment-workers.js +8 -4
- package/out/lib/segment-workers.js.map +1 -1
- package/out/lib/segments.d.ts +9 -3
- package/out/lib/segments.d.ts.map +1 -1
- package/out/lib/segments.js +6 -4
- package/out/lib/segments.js.map +1 -1
- package/out/lib/shared.d.ts +3 -29
- package/out/lib/shared.d.ts.map +1 -1
- package/out/lib/shared.js +0 -55
- package/out/lib/shared.js.map +1 -1
- package/out/lib/take.d.ts +16 -0
- package/out/lib/take.d.ts.map +1 -1
- package/out/lib/take.js +31 -1
- package/out/lib/take.js.map +1 -1
- package/out/lib/utils.d.ts +37 -0
- package/out/lib/utils.d.ts.map +1 -0
- package/out/lib/utils.js +39 -0
- package/out/lib/utils.js.map +1 -0
- package/out/lib/wasm_module.d.ts +9 -3
- package/out/lib/wasm_module.d.ts.map +1 -1
- package/out/lib/wasm_module.js.map +1 -1
- package/out/lib/writer.d.ts +1 -1
- package/out/lib/writer.d.ts.map +1 -1
- package/out/lib/writer.js +1 -1
- package/out/lib/writer.js.map +1 -1
- package/out/lib/zip.d.ts +33 -0
- package/out/lib/zip.d.ts.map +1 -0
- package/out/lib/zip.js +59 -0
- package/out/lib/zip.js.map +1 -0
- package/out/node/cli/commands/csv.d.ts +3 -38
- package/out/node/cli/commands/csv.d.ts.map +1 -1
- package/out/node/cli/commands/csv.js +55 -47
- package/out/node/cli/commands/csv.js.map +1 -1
- package/out/node/cli/commands/iterate.d.ts +3 -31
- package/out/node/cli/commands/iterate.d.ts.map +1 -1
- package/out/node/cli/commands/iterate.js +45 -24
- package/out/node/cli/commands/iterate.js.map +1 -1
- package/out/node/cli/index.js +36 -22
- package/out/node/cli/index.js.map +1 -1
- package/out/node/cli/parse-args.d.ts +120 -0
- package/out/node/cli/parse-args.d.ts.map +1 -0
- package/out/node/cli/parse-args.js +118 -0
- package/out/node/cli/parse-args.js.map +1 -0
- package/out/node/cli/utils.d.ts +79 -28
- package/out/node/cli/utils.d.ts.map +1 -1
- package/out/node/cli/utils.js +63 -63
- package/out/node/cli/utils.js.map +1 -1
- package/out/node/fs/index.d.ts.map +1 -1
- package/out/node/fs/index.js +7 -3
- package/out/node/fs/index.js.map +1 -1
- package/package.json +13 -17
|
@@ -3,18 +3,29 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
+
import { openDelimitedRows } from "./adaptive-source.js";
|
|
7
|
+
import { AsyncSequence } from "./AsyncSequence.js";
|
|
6
8
|
import { Spliterator } from "./Spliterator.js";
|
|
7
9
|
/**
|
|
8
10
|
* Stream a delimited byte source and `JSON.parse` each row — one parsed value per line, for JSONL / NDJSON. Set the row
|
|
9
11
|
* delimiter via `options.delimiter` (there is no implicit default); `skipEmpty` drops blank rows.
|
|
10
12
|
*
|
|
11
|
-
* **Performance caveat — this path is `JSON.parse`-bound, not scan-bound.**
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
13
|
+
* **Performance caveat — this path is `JSON.parse`-bound, not scan-bound.** Measured over 500k rows (88MB, ~177B per
|
|
14
|
+
* row, Node 26): the delimiter scan is ~140ms and decoding ~46ms, while `JSON.parse` and the per-row async machinery
|
|
15
|
+
* account for the rest of ~1280ms. Against Node's `readline` + `JSON.parse` at ~630ms, this runs **roughly half the
|
|
16
|
+
* speed — a net loss.** Use it for API convenience, or when streaming to bound memory; do NOT swap a working `readline`
|
|
17
|
+
* loop to it expecting a speedup on parse-heavy JSONL.
|
|
18
|
+
*
|
|
19
|
+
* The scan advantage only shows when you _don't_ fully parse every row. Filtering on the raw text and parsing only what
|
|
20
|
+
* survives is the shape that wins — parsing 20% of rows measured ~2.5× faster than parsing all of them:
|
|
21
|
+
*
|
|
22
|
+
* ```ts
|
|
23
|
+
* TextSpliterator.fromAsync(path, { delimiter: "\n" })
|
|
24
|
+
* .filter((line) => line.includes('"category":"Novelty"'))
|
|
25
|
+
* .map((line) => JSON.parse(line))
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* For segmentation or counting, use {@link Spliterator} (raw byte ranges) or {@link TextSpliterator}. When unsure,
|
|
18
29
|
* benchmark.
|
|
19
30
|
*/
|
|
20
31
|
export class JSONSpliterator {
|
|
@@ -32,7 +43,7 @@ export class JSONSpliterator {
|
|
|
32
43
|
parsed = JSON.parse(content);
|
|
33
44
|
}
|
|
34
45
|
catch (parsedError) {
|
|
35
|
-
const error = SyntaxError(`Failed to parse JSON at row ${rowCursor}`);
|
|
46
|
+
const error = new SyntaxError(`Failed to parse JSON at row ${rowCursor}`);
|
|
36
47
|
error.cause = parsedError;
|
|
37
48
|
throw error;
|
|
38
49
|
}
|
|
@@ -45,24 +56,21 @@ export class JSONSpliterator {
|
|
|
45
56
|
*
|
|
46
57
|
* @yields Each row as an array of columns.
|
|
47
58
|
*/
|
|
48
|
-
static
|
|
59
|
+
static fromAsync(source, options = {}) {
|
|
49
60
|
const decoder = new TextDecoder();
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
61
|
+
// Parsing is an op on the sequence, not a generator wrapped inside one. An allocating row body makes the extra
|
|
62
|
+
// async frame a wrapping generator adds disproportionately expensive: 1460ms against 1278ms over 500k rows, where
|
|
63
|
+
// the same layer costs a third as much when the body only decodes.
|
|
64
|
+
return AsyncSequence.from(() => openDelimitedRows(source, options)).map((row, rowCursor) => {
|
|
54
65
|
try {
|
|
55
|
-
|
|
56
|
-
parsed = JSON.parse(content);
|
|
66
|
+
return JSON.parse(decoder.decode(row));
|
|
57
67
|
}
|
|
58
68
|
catch (parsedError) {
|
|
59
|
-
const error = SyntaxError(`Failed to parse JSON at row ${rowCursor}`);
|
|
69
|
+
const error = new SyntaxError(`Failed to parse JSON at row ${rowCursor}`);
|
|
60
70
|
error.cause = parsedError;
|
|
61
71
|
throw error;
|
|
62
72
|
}
|
|
63
|
-
|
|
64
|
-
rowCursor++;
|
|
65
|
-
}
|
|
73
|
+
});
|
|
66
74
|
}
|
|
67
75
|
}
|
|
68
76
|
//# sourceMappingURL=JSONSpliterator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JSONSpliterator.js","sourceRoot":"","sources":["../../lib/JSONSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"JSONSpliterator.js","sourceRoot":"","sources":["../../lib/JSONSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA2B,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAA6B,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AAE/F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,OAAgB,eAAe;IACpC;QACC,MAAM,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAAA;IACjG,CAAC;IAED,MAAM,CAAC,CAAC,IAAI,CAAc,MAA8B,EAAE,OAAO,GAAoB,EAAE;QACtF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QACjC,IAAI,SAAS,GAAG,CAAC,CAAA;QAEjB,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAEzD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,MAAS,CAAA;YAEb,IAAI,CAAC;gBACJ,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEnC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAA;YAClC,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAA;gBACzE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;gBAEzB,MAAM,KAAK,CAAA;YACZ,CAAC;YAED,MAAM,MAAM,CAAA;YAEZ,SAAS,EAAE,CAAA;QACZ,CAAC;IACF,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,SAAS,CAAc,MAAyB,EAAE,OAAO,GAAuB,EAAE;QACxF,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;QAEjC,+GAA+G;QAC/G,kHAAkH;QAClH,mEAAmE;QACnE,OAAO,aAAa,CAAC,IAAI,CAAa,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;YACtG,IAAI,CAAC;gBACJ,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAM,CAAA;YAC5C,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,+BAA+B,SAAS,EAAE,CAAC,CAAA;gBACzE,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;gBAEzB,MAAM,KAAK,CAAA;YACZ,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PSVSpliterator.js","sourceRoot":"","sources":["../../lib/PSVSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,OAAgB,cAAe,SAAQ,cAAc;IAC1D;;;;OAIG;IACI,MAAM,CAAU,eAAe,GAAW,UAAU,CAAC,IAAI,CAAA"}
|
|
1
|
+
{"version":3,"file":"PSVSpliterator.js","sourceRoot":"","sources":["../../lib/PSVSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,OAAgB,cAAe,SAAQ,cAAc;IAC1D;;;;OAIG;IACI,MAAM,CAAU,eAAe,GAAW,UAAU,CAAC,IAAI,CAAA;CAChE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlidingWindow.d.ts","sourceRoot":"","sources":["../../lib/SlidingWindow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,gBAAgB,CAAC,SAAS,CAAC;;IACtF,MAAM,EAAE,CAAC,CAAA;IAKT;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;;OAIG;;
|
|
1
|
+
{"version":3,"file":"SlidingWindow.d.ts","sourceRoot":"","sources":["../../lib/SlidingWindow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAElC;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;;;GAIG;AACH,qBAAa,aAAa,CAAC,CAAC,SAAS,UAAU,CAAE,YAAW,gBAAgB,CAAC,SAAS,CAAC;;IACtF,MAAM,EAAE,CAAC,CAAA;IAKT;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;;;OAIG;IACH;IACC;;OAEG;IACH,MAAM,EAAE,CAAC,EACT,IAAI,GAAE,iBAAsB,EAM5B;IAEM,IAAI,IAAI,cAAc,CAAC,SAAS,CAAC,CA6BvC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,SAAS,CAAC,CAEtD;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlidingWindow.js","sourceRoot":"","sources":["../../lib/SlidingWindow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAA;AAoBvF;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACzB,MAAM,CAAG;IACT,UAAU,CAAmB;IAC7B,WAAW,CAAQ;IACnB,KAAK,GAAG,KAAK,CAAA;IAEb;;OAEG;IACH,MAAM,CAAQ;IAEd;;;;OAIG;IACH;IACC;;OAEG;IACH,MAAS,EACT,
|
|
1
|
+
{"version":3,"file":"SlidingWindow.js","sourceRoot":"","sources":["../../lib/SlidingWindow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAA;AAoBvF;;;;GAIG;AACH,MAAM,OAAO,aAAa;IACzB,MAAM,CAAG;IACT,UAAU,CAAmB;IAC7B,WAAW,CAAQ;IACnB,KAAK,GAAG,KAAK,CAAA;IAEb;;OAEG;IACH,MAAM,CAAQ;IAEd;;;;OAIG;IACH;IACC;;OAEG;IACH,MAAS,EACT,IAAI,GAAsB,EAAE;QAE5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,UAAU,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA;QAChC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC,CAAA;IACrF,CAAC;IAEM,IAAI;QACV,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACpC,+EAA+E;YAC/E,8EAA8E;YAC9E,gDAAgD;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,MAA+B,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAElH,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;gBAC3B,MAAM,KAAK,GAAc,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAA;gBAEtD,IAAI,CAAC,MAAM,GAAG,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAA;gBAErD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;YACrC,CAAC;QACF,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACpD,MAAM,KAAK,GAAc,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YAExD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAA;YAC9B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAA;YAEjB,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAA;QACrC,CAAC;QAED,OAAO;YACN,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,IAAI;SACV,CAAA;IACF,CAAC;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvB,OAAO,IAAI,CAAA;IACZ,CAAC;CACD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spliterator.d.ts","sourceRoot":"","sources":["../../lib/Spliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"Spliterator.d.ts","sourceRoot":"","sources":["../../lib/Spliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,gBAAgB,EAAE,KAAK,oBAAoB,EAAE,KAAK,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACzG,OAAO,EAIN,KAAK,sBAAsB,EAC3B,MAAM,wBAAwB,CAAA;AAE/B,OAAO,EAAoB,KAAK,kBAAkB,EAAE,KAAK,iBAAiB,EAAkB,MAAM,aAAa,CAAA;AAE/G,OAAO,EAAE,gBAAgB,EAAE,CAAA;AAE3B,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,CAAA;AAErD;;GAEG;AACH,qBAAa,WAAW,CAAC,CAAC,SAAS,UAAU,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAClF,YAAW,gBAAgB,CAAC,CAAC,CAAC,EAAE,UAAU;;IAI1C;;;;;;;;OAQG;IACH,MAAM,CAAC,SAAS,+BAAwB;IAExC;;;;;OAKG;IACH,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,sBAAsB,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,GAAE,eAAoB,GAAG,WAAW,CAEpG;IAED;;;;;;OAMG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,WAAW,CAAA;IAC5G;;;;;;;OAOG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,gBAAgB,CAAA;IACtF;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAC9F;;;;;;;;OAQG;IACH,MAAM,CAAC,IAAI,CACV,MAAM,EAAE,sBAAsB,GAAG,iBAAiB,GAAG,kBAAkB,EACvE,IAAI,CAAC,EAAE,eAAe,GAAG,oBAAoB,GAC3C,WAAW,GAAG,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAA;IAsC7D;;OAEG;IACH,OAAc,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAQhG;IAED;;OAEG;IACI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,CAE9B;IAED,YAAY,MAAM,EAAE,UAAU,EAAE,IAAI,GAAE,eAAoB,EAmBzD;IAuOD;;OAEG;IACI,IAAI,IAAI,cAAc,CAAC,CAAC,CAAC,CA4C/B;IAED;;;;;OAKG;IACI,OAAO,IAAI,CAAC,EAAE,CAEpB;IAED;;OAEG;IACI,cAAc,CAAC,OAAO,kCAAoB,GAAG,MAAM,EAAE,CAE3D;IAEM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,CAAC,CAAC,CAE9C;CACD"}
|
package/out/lib/Spliterator.js
CHANGED
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
+
// oxlint-disable-next-line unicorn/prefer-export-from
|
|
6
7
|
import { AsyncSpliterator } from "./AsyncSpliterator.js";
|
|
7
|
-
import { CharacterSequence,
|
|
8
|
+
import { CharacterSequence, Delimiters, normalizeCharacterInput, } from "./CharacterSequence.js";
|
|
8
9
|
import { IndexQueue } from "./IndexQueue.js";
|
|
9
10
|
import { isFileHandleLike } from "./shared.js";
|
|
10
11
|
export { AsyncSpliterator };
|
|
@@ -246,7 +247,7 @@ export class Spliterator {
|
|
|
246
247
|
// to `#drain`, same as the plain path.
|
|
247
248
|
while (this.#readPosition < sourceByteLength && this.#indices.byteLength < this.#highWaterMark) {
|
|
248
249
|
const matches = this.#needle.searchMatches(this.#source, this.#doubleQuoteSequence, this.#readPosition, sourceByteLength);
|
|
249
|
-
if (matches.length
|
|
250
|
+
if (!matches.length)
|
|
250
251
|
return;
|
|
251
252
|
let sliceStart = this.#readPosition;
|
|
252
253
|
let insideQuotes = false;
|
|
@@ -279,8 +280,9 @@ export class Spliterator {
|
|
|
279
280
|
while (true) {
|
|
280
281
|
if (this.#done || this.#yieldCount >= this.#yieldStopCount)
|
|
281
282
|
return this.#finalize();
|
|
282
|
-
if (!this.#indices.size)
|
|
283
|
+
if (!this.#indices.size) {
|
|
283
284
|
this.#fill();
|
|
285
|
+
}
|
|
284
286
|
if (!this.#indices.size) {
|
|
285
287
|
this.#drain();
|
|
286
288
|
}
|
|
@@ -292,7 +294,7 @@ export class Spliterator {
|
|
|
292
294
|
}
|
|
293
295
|
const [start, end] = currentByteRange;
|
|
294
296
|
const slice = this.#source.subarray(start, end);
|
|
295
|
-
if (slice.length
|
|
297
|
+
if (!slice.length && this.#skipEmpty) {
|
|
296
298
|
continue;
|
|
297
299
|
}
|
|
298
300
|
this.#yieldCount++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spliterator.js","sourceRoot":"","sources":["../../lib/Spliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,gBAAgB,EAAmD,MAAM,uBAAuB,CAAA;AACzG,OAAO,EACN,iBAAiB,EACjB,
|
|
1
|
+
{"version":3,"file":"Spliterator.js","sourceRoot":"","sources":["../../lib/Spliterator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TSVSpliterator.js","sourceRoot":"","sources":["../../lib/TSVSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,OAAgB,cAAe,SAAQ,cAAc;IAC1D;;;;OAIG;IACI,MAAM,CAAU,eAAe,GAAW,UAAU,CAAC,GAAG,CAAA"}
|
|
1
|
+
{"version":3,"file":"TSVSpliterator.js","sourceRoot":"","sources":["../../lib/TSVSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEpD;;;;;GAKG;AACH,MAAM,OAAgB,cAAe,SAAQ,cAAc;IAC1D;;;;OAIG;IACI,MAAM,CAAU,eAAe,GAAW,UAAU,CAAC,GAAG,CAAA;CAC/D"}
|
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
import { type
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
6
|
+
import { type AdaptiveSourceInit } from "./adaptive-source.js";
|
|
7
|
+
import { AsyncSequence } from "./AsyncSequence.js";
|
|
8
|
+
import type { CharacterSequenceInput } from "./CharacterSequence.js";
|
|
9
|
+
import type { AsyncDataResource } from "./shared.js";
|
|
10
|
+
import { type SpliteratorInit } from "./Spliterator.js";
|
|
9
11
|
export interface TextSpliteratorInit {
|
|
10
12
|
/**
|
|
11
13
|
* The encoding to use when decoding the data.
|
|
@@ -46,6 +48,6 @@ export declare abstract class TextSpliterator {
|
|
|
46
48
|
* @see {@linkcode TextSpliterator.from} for synchronous iteration with decoding.
|
|
47
49
|
* @see {@linkcode Spliterator.fromAsync} for asynchronous iteration without decoding.
|
|
48
50
|
*/
|
|
49
|
-
static fromAsync(source: AsyncDataResource, { encoding, fatal, ignoreBOM, ...options }?: TextSpliteratorInit &
|
|
51
|
+
static fromAsync(source: AsyncDataResource, { encoding, fatal, ignoreBOM, ...options }?: TextSpliteratorInit & AdaptiveSourceInit): AsyncSequence<string>;
|
|
50
52
|
}
|
|
51
53
|
//# sourceMappingURL=TextSpliterator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextSpliterator.d.ts","sourceRoot":"","sources":["../../lib/TextSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"TextSpliterator.d.ts","sourceRoot":"","sources":["../../lib/TextSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,kBAAkB,EAAqB,MAAM,sBAAsB,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAClD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACpE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,EAA0C,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE/F,MAAM,WAAW,mBAAmB;IACnC;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;IAEjB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAA;IAEf;;OAEG;IACH,SAAS,CAAC,EAAE,OAAO,CAAA;CACnB;AAED,8BAAsB,eAAe;IACpC,cAEC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAE,IAAI,CACX,MAAM,EAAE,sBAAsB,EAC9B,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAE,mBAAmB,GAAG,eAAoB,GACpF,SAAS,CAAC,MAAM,CAAC,CAsBnB;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CACf,MAAM,EAAE,iBAAiB,EACzB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAAE,mBAAmB,GAAG,kBAAuB,GACvF,aAAa,CAAC,MAAM,CAAC,CAevB;CACD"}
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
|
-
import {} from "./
|
|
7
|
-
import {} from "./
|
|
6
|
+
import { openDelimitedRows } from "./adaptive-source.js";
|
|
7
|
+
import { AsyncSequence } from "./AsyncSequence.js";
|
|
8
8
|
import { Spliterator } from "./Spliterator.js";
|
|
9
9
|
export class TextSpliterator {
|
|
10
10
|
constructor() {
|
|
@@ -30,7 +30,7 @@ export class TextSpliterator {
|
|
|
30
30
|
decoded = decoder.decode(row);
|
|
31
31
|
}
|
|
32
32
|
catch (parsedError) {
|
|
33
|
-
const error = SyntaxError(`Failed to decode data at row ${rowCursor}`);
|
|
33
|
+
const error = new SyntaxError(`Failed to decode data at row ${rowCursor}`);
|
|
34
34
|
error.cause = parsedError;
|
|
35
35
|
throw error;
|
|
36
36
|
}
|
|
@@ -48,23 +48,20 @@ export class TextSpliterator {
|
|
|
48
48
|
* @see {@linkcode TextSpliterator.from} for synchronous iteration with decoding.
|
|
49
49
|
* @see {@linkcode Spliterator.fromAsync} for asynchronous iteration without decoding.
|
|
50
50
|
*/
|
|
51
|
-
static
|
|
51
|
+
static fromAsync(source, { encoding, fatal, ignoreBOM, ...options } = {}) {
|
|
52
52
|
const decoder = new TextDecoder(encoding, { fatal, ignoreBOM });
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
let decoded;
|
|
53
|
+
// Decoding is an op on the sequence, not a generator wrapped inside one. A wrapping generator adds an async frame
|
|
54
|
+
// per row on top of the sequence's own, which measured 297ms against 279ms over 500k rows.
|
|
55
|
+
return AsyncSequence.from(() => openDelimitedRows(source, options)).map((row, rowCursor) => {
|
|
57
56
|
try {
|
|
58
|
-
|
|
57
|
+
return decoder.decode(row);
|
|
59
58
|
}
|
|
60
59
|
catch (parsedError) {
|
|
61
|
-
const error = SyntaxError(`Failed to decode data at row ${rowCursor}`);
|
|
60
|
+
const error = new SyntaxError(`Failed to decode data at row ${rowCursor}`);
|
|
62
61
|
error.cause = parsedError;
|
|
63
62
|
throw error;
|
|
64
63
|
}
|
|
65
|
-
|
|
66
|
-
rowCursor++;
|
|
67
|
-
}
|
|
64
|
+
});
|
|
68
65
|
}
|
|
69
66
|
}
|
|
70
67
|
//# sourceMappingURL=TextSpliterator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextSpliterator.js","sourceRoot":"","sources":["../../lib/TextSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"TextSpliterator.js","sourceRoot":"","sources":["../../lib/TextSpliterator.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAA2B,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACjF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAGlD,OAAO,EAA6B,WAAW,EAAwB,MAAM,kBAAkB,CAAA;AAsB/F,MAAM,OAAgB,eAAe;IACpC;QACC,MAAM,IAAI,SAAS,CAAC,2EAA2E,CAAC,CAAA;IACjG,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,CAAC,IAAI,CACX,MAA8B,EAC9B,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAA0C,EAAE;QAEtF,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAC/D,IAAI,SAAS,GAAG,CAAC,CAAA;QAEjB,MAAM,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAEzD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,OAAe,CAAA;YAEnB,IAAI,CAAC;gBACJ,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC9B,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAA;gBAC1E,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;gBAEzB,MAAM,KAAK,CAAA;YACZ,CAAC;YAED,MAAM,OAAO,CAAA;YAEb,SAAS,EAAE,CAAA;QACZ,CAAC;IACF,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,SAAS,CACf,MAAyB,EACzB,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,EAAE,GAA6C,EAAE;QAEzF,MAAM,OAAO,GAAG,IAAI,WAAW,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAA;QAE/D,kHAAkH;QAClH,2FAA2F;QAC3F,OAAO,aAAa,CAAC,IAAI,CAAa,GAAG,EAAE,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE;YACtG,IAAI,CAAC;gBACJ,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC3B,CAAC;YAAC,OAAO,WAAW,EAAE,CAAC;gBACtB,MAAM,KAAK,GAAG,IAAI,WAAW,CAAC,gCAAgC,SAAS,EAAE,CAAC,CAAA;gBAC1E,KAAK,CAAC,KAAK,GAAG,WAAW,CAAA;gBAEzB,MAAM,KAAK,CAAA;YACZ,CAAC;QACF,CAAC,CAAC,CAAA;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import type { AsyncChunkIterator, AsyncDataResource } from "./shared.js";
|
|
7
|
+
import { type AsyncSpliteratorInit } from "./Spliterator.js";
|
|
8
|
+
/**
|
|
9
|
+
* Byte length at or below which a source is read whole and parsed synchronously.
|
|
10
|
+
*
|
|
11
|
+
* What this buys is **fixed setup cost** — opening a handle and standing up a read stream, ~100µs — not throughput, so
|
|
12
|
+
* the win decays as the source grows and the threshold marks where it stops being measurable. End-to-end against the
|
|
13
|
+
* streaming path (Node 26, min of 200 runs, two independent sweeps): ~1.85× at 635B, ~1.45× at 6.5KB, ~1.4× at 125KiB.
|
|
14
|
+
* At 253KiB and above the two runs disagreed on which was faster, so there is nothing reliable left to win.
|
|
15
|
+
*
|
|
16
|
+
* Raising this does not recover the much larger gap a raw synchronous parse shows (~1.6× even at 1GiB); that gap is
|
|
17
|
+
* eaten by the per-row cost of the sequence itself, which both paths pay. It only trades resident memory — a 1GiB
|
|
18
|
+
* source costs ~105MB streamed against ~1121MB read whole — for a difference that no longer measures.
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_BULK_THRESHOLD: number;
|
|
21
|
+
export interface AdaptiveSourceInit extends AsyncSpliteratorInit {
|
|
22
|
+
/**
|
|
23
|
+
* Byte length at or below which the whole source is read into memory and parsed synchronously, trading resident
|
|
24
|
+
* memory for speed.
|
|
25
|
+
*
|
|
26
|
+
* Raising it buys nothing measurable and costs memory linearly — the advantage is gone by ~256KiB. Set `0` to always
|
|
27
|
+
* stream, which is what you want when a bounded footprint is the reason you reached for this library.
|
|
28
|
+
*
|
|
29
|
+
* @default 128 KiB ({@linkcode DEFAULT_BULK_THRESHOLD})
|
|
30
|
+
*/
|
|
31
|
+
bulkThreshold?: number;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Take the delimited rows of `source`, reading it whole when it is small enough to be worth the memory and streaming it
|
|
35
|
+
* otherwise. Returns a sync iterable in the first case and an async one in the second; both satisfy
|
|
36
|
+
* {@linkcode AsyncSequence}.
|
|
37
|
+
*/
|
|
38
|
+
export declare function openDelimitedRows(source: AsyncDataResource | AsyncChunkIterator, init?: AdaptiveSourceInit): Promise<AsyncIterable<Uint8Array> | Iterable<Uint8Array>>;
|
|
39
|
+
//# sourceMappingURL=adaptive-source.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-source.d.ts","sourceRoot":"","sources":["../../lib/adaptive-source.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACxE,OAAO,EAAE,KAAK,oBAAoB,EAAe,MAAM,kBAAkB,CAAA;AAEzE;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,sBAAsB,QAAa,CAAA;AAEhD,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC/D;;;;;;;;OAQG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;CACtB;AAuBD;;;;GAIG;AACH,wBAAsB,iBAAiB,CACtC,MAAM,EAAE,iBAAiB,GAAG,kBAAkB,EAC9C,IAAI,GAAE,kBAAuB,GAC3B,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAuB3D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import { CharacterSequence } from "./CharacterSequence.js";
|
|
7
|
+
import { Spliterator } from "./Spliterator.js";
|
|
8
|
+
/**
|
|
9
|
+
* Byte length at or below which a source is read whole and parsed synchronously.
|
|
10
|
+
*
|
|
11
|
+
* What this buys is **fixed setup cost** — opening a handle and standing up a read stream, ~100µs — not throughput, so
|
|
12
|
+
* the win decays as the source grows and the threshold marks where it stops being measurable. End-to-end against the
|
|
13
|
+
* streaming path (Node 26, min of 200 runs, two independent sweeps): ~1.85× at 635B, ~1.45× at 6.5KB, ~1.4× at 125KiB.
|
|
14
|
+
* At 253KiB and above the two runs disagreed on which was faster, so there is nothing reliable left to win.
|
|
15
|
+
*
|
|
16
|
+
* Raising this does not recover the much larger gap a raw synchronous parse shows (~1.6× even at 1GiB); that gap is
|
|
17
|
+
* eaten by the per-row cost of the sequence itself, which both paths pay. It only trades resident memory — a 1GiB
|
|
18
|
+
* source costs ~105MB streamed against ~1121MB read whole — for a difference that no longer measures.
|
|
19
|
+
*/
|
|
20
|
+
export const DEFAULT_BULK_THRESHOLD = 128 * 1024;
|
|
21
|
+
function isChunkIterator(source) {
|
|
22
|
+
return typeof source === "object" && source !== null && Symbol.asyncIterator in source;
|
|
23
|
+
}
|
|
24
|
+
function toBytes(chunk) {
|
|
25
|
+
return typeof chunk === "string" ? new TextEncoder().encode(chunk) : chunk;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse in-memory bytes with the synchronous engine.
|
|
29
|
+
*
|
|
30
|
+
* Awaiting {@linkcode CharacterSequence.whenReady} first is the point: the WASM scanner loads asynchronously, so a
|
|
31
|
+
* synchronous caller normally completes before it is available and silently uses the JS scanner. Reaching the sync
|
|
32
|
+
* engine through an async path is the one place that can be avoided — worth ~26% on a large source.
|
|
33
|
+
*/
|
|
34
|
+
async function bulk(bytes, init) {
|
|
35
|
+
await CharacterSequence.whenReady();
|
|
36
|
+
return Spliterator.fromSync(bytes, init);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Take the delimited rows of `source`, reading it whole when it is small enough to be worth the memory and streaming it
|
|
40
|
+
* otherwise. Returns a sync iterable in the first case and an async one in the second; both satisfy
|
|
41
|
+
* {@linkcode AsyncSequence}.
|
|
42
|
+
*/
|
|
43
|
+
export async function openDelimitedRows(source, init = {}) {
|
|
44
|
+
const threshold = init.bulkThreshold ?? DEFAULT_BULK_THRESHOLD;
|
|
45
|
+
if (threshold <= 0)
|
|
46
|
+
return Spliterator.fromAsync(source, init);
|
|
47
|
+
if (isChunkIterator(source))
|
|
48
|
+
return openChunkIterator(source, threshold, init);
|
|
49
|
+
let size;
|
|
50
|
+
try {
|
|
51
|
+
const { readFileSize } = await import("spliterator/node/fs");
|
|
52
|
+
size = await readFileSize(source);
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
// Unsized or unreachable by the Node adapter — the streaming path owns reporting why.
|
|
56
|
+
return Spliterator.fromAsync(source, init);
|
|
57
|
+
}
|
|
58
|
+
if (size > threshold)
|
|
59
|
+
return Spliterator.fromAsync(source, init);
|
|
60
|
+
const { readBytes } = await import("spliterator/node/fs");
|
|
61
|
+
return bulk(await readBytes(source, 0, size), init);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* A stream cannot be measured before it is read, so the size test becomes an end-of-input test: pull one chunk, and if
|
|
65
|
+
* the stream is already exhausted the whole input is in hand and no threshold policy is needed.
|
|
66
|
+
*
|
|
67
|
+
* When it is not exhausted the pulled chunks cannot be discarded, so the stream is re-headed with them in front.
|
|
68
|
+
*/
|
|
69
|
+
async function openChunkIterator(source, threshold, init) {
|
|
70
|
+
const iterator = source[Symbol.asyncIterator]();
|
|
71
|
+
const first = await iterator.next();
|
|
72
|
+
if (first.done)
|
|
73
|
+
return bulk(new Uint8Array(0), init);
|
|
74
|
+
const second = await iterator.next();
|
|
75
|
+
const head = toBytes(first.value);
|
|
76
|
+
if (second.done && head.byteLength <= threshold)
|
|
77
|
+
return bulk(head, init);
|
|
78
|
+
const pulled = second.done ? [first.value] : [first.value, second.value];
|
|
79
|
+
const reheaded = {
|
|
80
|
+
async *[Symbol.asyncIterator]() {
|
|
81
|
+
yield* pulled;
|
|
82
|
+
for (;;) {
|
|
83
|
+
const next = await iterator.next();
|
|
84
|
+
if (next.done)
|
|
85
|
+
return;
|
|
86
|
+
yield next.value;
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
if (Symbol.asyncDispose in source) {
|
|
91
|
+
reheaded[Symbol.asyncDispose] = () => source[Symbol.asyncDispose]();
|
|
92
|
+
}
|
|
93
|
+
return Spliterator.fromAsync(reheaded, init);
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=adaptive-source.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adaptive-source.js","sourceRoot":"","sources":["../../lib/adaptive-source.ts"],"names":[],"mappings":"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"}
|
package/out/lib/casing.js
CHANGED
|
@@ -10,14 +10,14 @@ import { camelCase, capitalCase, snakeCase } from "change-case";
|
|
|
10
10
|
export function smartSnakeCase(name) {
|
|
11
11
|
const normalizedName = name
|
|
12
12
|
// Remove periods after capital letters, e.g. "U.S.A." -> "USA"
|
|
13
|
-
.
|
|
13
|
+
.replaceAll(/([A-Z])(\.+)/g, "$1")
|
|
14
14
|
.trim();
|
|
15
15
|
if (normalizedName.toUpperCase() === normalizedName) {
|
|
16
16
|
return name
|
|
17
17
|
// Replace all non-word characters with underscores...
|
|
18
|
-
.
|
|
18
|
+
.replaceAll(/\W{1,}/g, "_")
|
|
19
19
|
// ...and then replace all sequences of underscores with a single underscore.
|
|
20
|
-
.
|
|
20
|
+
.replaceAll(/_{2,}/g, "_");
|
|
21
21
|
}
|
|
22
22
|
return snakeCase(normalizedName);
|
|
23
23
|
}
|
package/out/lib/casing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"casing.js","sourceRoot":"","sources":["../../lib/casing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG/D;;GAEG;AACH,MAAM,UAAU,cAAc,CAAmB,IAAO;IACvD,MAAM,cAAc,GAAG,IAAI;QAC1B,+DAA+D;SAC9D,
|
|
1
|
+
{"version":3,"file":"casing.js","sourceRoot":"","sources":["../../lib/casing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG/D;;GAEG;AACH,MAAM,UAAU,cAAc,CAAmB,IAAO;IACvD,MAAM,cAAc,GAAG,IAAI;QAC1B,+DAA+D;SAC9D,UAAU,CAAC,eAAe,EAAE,IAAI,CAAC;SACjC,IAAI,EAAE,CAAA;IAER,IAAI,cAAc,CAAC,WAAW,EAAE,KAAK,cAAc,EAAE,CAAC;QACrD,OACC,IAAI;YACH,sDAAsD;aACrD,UAAU,CAAC,SAAS,EAAE,GAAG,CAAC;YAC3B,6EAA6E;aAC5E,UAAU,CAAC,QAAQ,EAAE,GAAG,CAC1B,CAAA;IACF,CAAC;IAED,OAAO,SAAS,CAAC,cAAc,CAAQ,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAmB,IAAO;IACvD,IAAI,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI;QAAE,OAAO,IAAW,CAAA;IAEnD,OAAO,SAAS,CAAC,IAAI,CAAQ,CAAA;AAC9B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACpD,OAAO,OAAO,CAAC,KAAK,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA;AAC1F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC7C,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,KAAK,CAAA;IAErC,IAAI,gBAAgB,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IAEzC,OAAO,WAAW,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,aAA+B;IACnE,MAAM,mBAAmB,GAAG,IAAI,GAAG,EAAkB,CAAA;IACrD,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IACzC,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IAE3E,KAAK,MAAM,YAAY,IAAI,kBAAkB,EAAE,CAAC;QAC/C,IAAI,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACvC,MAAM,WAAW,GAAG,CAAC,mBAAmB,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;YACpE,mBAAmB,CAAC,GAAG,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;YAElD,MAAM,gBAAgB,GAAG,GAAG,YAAY,IAAI,WAAW,EAAE,CAAA;YACzD,eAAe,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;QACtC,CAAC;aAAM,CAAC;YACP,eAAe,CAAC,GAAG,CAAC,YAAY,CAAC,CAAA;QAClC,CAAC;IACF,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Group an iterable's values into arrays of `size`, with a shorter final batch if the collection does not divide
|
|
8
|
+
* evenly.
|
|
9
|
+
*
|
|
10
|
+
* Distinct from `Iterator.prototype.take`, which yields the first `size` _values_. Named for the [iterator chunking
|
|
11
|
+
* proposal](https://github.com/tc39/proposal-iterator-chunking).
|
|
12
|
+
*
|
|
13
|
+
* @param collection The collection to batch.
|
|
14
|
+
* @param size The size of each batch.
|
|
15
|
+
*
|
|
16
|
+
* @yields Each batch of values.
|
|
17
|
+
* @see {@linkcode AsyncSequence.chunks} for the asynchronous form.
|
|
18
|
+
*/
|
|
19
|
+
export declare function chunks<T>(collection: Iterable<T>, size: number): Generator<T[]>;
|
|
20
|
+
//# sourceMappingURL=chunks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks.d.ts","sourceRoot":"","sources":["../../lib/chunks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AACH,wBAAiB,MAAM,CAAC,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAsBhF"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Group an iterable's values into arrays of `size`, with a shorter final batch if the collection does not divide
|
|
8
|
+
* evenly.
|
|
9
|
+
*
|
|
10
|
+
* Distinct from `Iterator.prototype.take`, which yields the first `size` _values_. Named for the [iterator chunking
|
|
11
|
+
* proposal](https://github.com/tc39/proposal-iterator-chunking).
|
|
12
|
+
*
|
|
13
|
+
* @param collection The collection to batch.
|
|
14
|
+
* @param size The size of each batch.
|
|
15
|
+
*
|
|
16
|
+
* @yields Each batch of values.
|
|
17
|
+
* @see {@linkcode AsyncSequence.chunks} for the asynchronous form.
|
|
18
|
+
*/
|
|
19
|
+
export function* chunks(collection, size) {
|
|
20
|
+
const normalized = Math.trunc(size);
|
|
21
|
+
if (!Number.isFinite(normalized) || normalized < 1) {
|
|
22
|
+
throw new RangeError(`chunks(${size}): size must be a positive finite number`);
|
|
23
|
+
}
|
|
24
|
+
let batch = [];
|
|
25
|
+
for (const item of collection) {
|
|
26
|
+
batch.push(item);
|
|
27
|
+
if (batch.length === normalized) {
|
|
28
|
+
yield batch;
|
|
29
|
+
batch = [];
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (batch.length) {
|
|
33
|
+
yield batch;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=chunks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chunks.js","sourceRoot":"","sources":["../../lib/chunks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,SAAS,CAAC,CAAC,MAAM,CAAI,UAAuB,EAAE,IAAY;IAC/D,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEnC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACpD,MAAM,IAAI,UAAU,CAAC,UAAU,IAAI,0CAA0C,CAAC,CAAA;IAC/E,CAAC;IAED,IAAI,KAAK,GAAQ,EAAE,CAAA;IAEnB,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhB,IAAI,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,KAAK,CAAA;YAEX,KAAK,GAAG,EAAE,CAAA;QACX,CAAC;IACF,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAClB,MAAM,KAAK,CAAA;IACZ,CAAC;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-async-iterators.d.ts","sourceRoot":"","sources":["../../lib/merge-async-iterators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAuB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"merge-async-iterators.d.ts","sourceRoot":"","sources":["../../lib/merge-async-iterators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,wBAAuB,mBAAmB,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,CA6BxG"}
|
|
@@ -16,7 +16,7 @@ export async function* mergeAsyncIterators(sources) {
|
|
|
16
16
|
pending.set(it, advance(it));
|
|
17
17
|
}
|
|
18
18
|
try {
|
|
19
|
-
while (pending.size
|
|
19
|
+
while (pending.size) {
|
|
20
20
|
const { it, result } = await Promise.race(pending.values());
|
|
21
21
|
if (result.done) {
|
|
22
22
|
pending.delete(it);
|
|
@@ -30,8 +30,9 @@ export async function* mergeAsyncIterators(sources) {
|
|
|
30
30
|
finally {
|
|
31
31
|
// Stop any iterators we didn't drain (early break / error). Swallow rejections from their
|
|
32
32
|
// in-flight `next()` so they don't surface as unhandled.
|
|
33
|
-
for (const promise of pending.values())
|
|
33
|
+
for (const promise of pending.values()) {
|
|
34
34
|
void promise.catch(() => { });
|
|
35
|
+
}
|
|
35
36
|
await Promise.allSettled(Array.from(pending.keys(), (it) => it.return?.()));
|
|
36
37
|
}
|
|
37
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge-async-iterators.js","sourceRoot":"","sources":["../../lib/merge-async-iterators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,mBAAmB,CAAI,OAAgC;IAC7E,MAAM,OAAO,GAAG,CAAC,EAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkF,CAAA;IAEzG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,OAAO,CAAC,IAAI,
|
|
1
|
+
{"version":3,"file":"merge-async-iterators.js","sourceRoot":"","sources":["../../lib/merge-async-iterators.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;GAIG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,mBAAmB,CAAI,OAAgC;IAC7E,MAAM,OAAO,GAAG,CAAC,EAAoB,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,CAAA;IACtF,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkF,CAAA;IAEzG,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAA;QACzC,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;IAC7B,CAAC;IAED,IAAI,CAAC;QACJ,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;YAE3D,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACjB,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YACnB,CAAC;iBAAM,CAAC;gBACP,MAAM,MAAM,CAAC,KAAK,CAAA;gBAClB,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC,CAAA;YAC7B,CAAC;QACF,CAAC;IACF,CAAC;YAAS,CAAC;QACV,0FAA0F;QAC1F,yDAAyD;QACzD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YACxC,KAAK,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC7B,CAAC;QAED,MAAM,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;IAC5E,CAAC;AACF,CAAC"}
|
|
@@ -7,7 +7,9 @@
|
|
|
7
7
|
* worker busy mapping batches pulled from one shared source, with no `worker_threads` dependency so it
|
|
8
8
|
* unit-tests against fake workers.
|
|
9
9
|
*/
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* One pool slot. `process` ships a batch to its worker and resolves with that batch's results.
|
|
12
|
+
*/
|
|
11
13
|
export interface PoolWorker<T, R> {
|
|
12
14
|
process(batch: T[]): Promise<R[]>;
|
|
13
15
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parallel-map-runtime.d.ts","sourceRoot":"","sources":["../../lib/parallel-map-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH
|
|
1
|
+
{"version":3,"file":"parallel-map-runtime.d.ts","sourceRoot":"","sources":["../../lib/parallel-map-runtime.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH;;GAEG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC,EAAE,CAAC;IAC/B,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAA;CACjC;AA+CD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,EAC3B,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAChC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EACtC,SAAS,EAAE,MAAM,GACf,qBAAqB,CAAC,CAAC,CAAC,CAgB1B"}
|