spliterator 2.2.3 → 3.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 +42 -0
- package/out/index.d.ts +2 -1
- package/out/index.d.ts.map +1 -1
- package/out/index.js +2 -1
- package/out/index.js.map +1 -1
- package/out/lib/AsyncSpliterator.d.ts +35 -34
- package/out/lib/AsyncSpliterator.d.ts.map +1 -1
- package/out/lib/AsyncSpliterator.js +93 -84
- package/out/lib/AsyncSpliterator.js.map +1 -1
- package/out/lib/BufferController.d.ts +10 -12
- package/out/lib/BufferController.d.ts.map +1 -1
- package/out/lib/BufferController.js +10 -12
- package/out/lib/BufferController.js.map +1 -1
- package/out/lib/CSVSpliterator.d.ts +6 -5
- package/out/lib/CSVSpliterator.d.ts.map +1 -1
- package/out/lib/CSVSpliterator.js +8 -5
- package/out/lib/CSVSpliterator.js.map +1 -1
- package/out/lib/CharacterSequence.d.ts +15 -64
- package/out/lib/CharacterSequence.d.ts.map +1 -1
- package/out/lib/CharacterSequence.js +194 -88
- package/out/lib/CharacterSequence.js.map +1 -1
- package/out/lib/CompositeDataView.d.ts +4 -5
- package/out/lib/CompositeDataView.d.ts.map +1 -1
- package/out/lib/CompositeDataView.js +2 -3
- package/out/lib/CompositeDataView.js.map +1 -1
- package/out/lib/IndexQueue.d.ts +1 -1
- package/out/lib/IndexQueue.d.ts.map +1 -1
- package/out/lib/IndexQueue.js +40 -11
- package/out/lib/IndexQueue.js.map +1 -1
- package/out/lib/JSONSpliterator.d.ts +1 -1
- package/out/lib/JSONSpliterator.js +1 -1
- package/out/lib/PSVSpliterator.d.ts +1 -1
- package/out/lib/PSVSpliterator.js +1 -1
- package/out/lib/SlidingWindow.d.ts +1 -1
- package/out/lib/SlidingWindow.d.ts.map +1 -1
- package/out/lib/SlidingWindow.js +11 -10
- package/out/lib/SlidingWindow.js.map +1 -1
- package/out/lib/Spliterator.d.ts +2 -3
- package/out/lib/Spliterator.d.ts.map +1 -1
- package/out/lib/Spliterator.js +102 -114
- package/out/lib/Spliterator.js.map +1 -1
- package/out/lib/TSVSpliterator.d.ts +1 -1
- package/out/lib/TSVSpliterator.js +1 -1
- package/out/lib/TextSpliterator.d.ts +4 -3
- package/out/lib/TextSpliterator.d.ts.map +1 -1
- package/out/lib/TextSpliterator.js +3 -1
- package/out/lib/TextSpliterator.js.map +1 -1
- package/out/lib/casing.d.ts +2 -3
- package/out/lib/casing.d.ts.map +1 -1
- package/out/lib/casing.js +2 -3
- package/out/lib/casing.js.map +1 -1
- package/out/lib/segment-runtime.d.ts +27 -0
- package/out/lib/segment-runtime.d.ts.map +1 -0
- package/out/lib/segment-runtime.js +38 -0
- package/out/lib/segment-runtime.js.map +1 -0
- package/out/lib/segment-worker-entry.d.ts +10 -0
- package/out/lib/segment-worker-entry.d.ts.map +1 -0
- package/out/lib/segment-worker-entry.js +56 -0
- package/out/lib/segment-worker-entry.js.map +1 -0
- package/out/lib/segment-workers.d.ts +41 -0
- package/out/lib/segment-workers.d.ts.map +1 -0
- package/out/lib/segment-workers.js +105 -0
- package/out/lib/segment-workers.js.map +1 -0
- package/out/lib/segments.d.ts +25 -0
- package/out/lib/segments.d.ts.map +1 -0
- package/out/lib/segments.js +50 -0
- package/out/lib/segments.js.map +1 -0
- package/out/lib/shared.d.ts +6 -5
- package/out/lib/shared.d.ts.map +1 -1
- package/out/lib/shared.js +3 -1
- package/out/lib/shared.js.map +1 -1
- package/out/lib/take.d.ts +3 -3
- package/out/lib/take.d.ts.map +1 -1
- package/out/lib/take.js +3 -3
- package/out/lib/take.js.map +1 -1
- package/out/lib/wasm_base64.d.ts +16 -0
- package/out/lib/wasm_base64.d.ts.map +1 -0
- package/out/lib/wasm_base64.js +16 -0
- package/out/lib/wasm_base64.js.map +1 -0
- package/out/lib/wasm_module.d.ts +36 -0
- package/out/lib/wasm_module.d.ts.map +1 -0
- package/out/lib/wasm_module.js +33 -0
- package/out/lib/wasm_module.js.map +1 -0
- 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/node/cli/commands/csv.d.ts +1 -1
- package/out/node/cli/commands/csv.d.ts.map +1 -1
- package/out/node/cli/commands/csv.js +1 -1
- package/out/node/cli/commands/csv.js.map +1 -1
- package/out/node/cli/commands/iterate.d.ts +1 -1
- package/out/node/cli/commands/iterate.d.ts.map +1 -1
- package/out/node/cli/commands/iterate.js +1 -1
- package/out/node/cli/commands/iterate.js.map +1 -1
- package/out/node/cli/index.d.ts +1 -1
- package/out/node/cli/index.js +1 -1
- package/out/node/cli/utils.d.ts +1 -1
- package/out/node/cli/utils.js +1 -1
- package/out/node/fs/index.d.ts +16 -4
- package/out/node/fs/index.d.ts.map +1 -1
- package/out/node/fs/index.js +28 -4
- package/out/node/fs/index.js.map +1 -1
- package/package.json +4 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-worker-entry.js","sourceRoot":"","sources":["../../lib/segment-worker-entry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAE5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAuB,MAAM,sBAAsB,CAAA;AActE,KAAK,UAAU,IAAI;IAClB,MAAM,IAAI,GAAG,UAAwB,CAAA;IACrC,MAAM,IAAI,GAAG,UAAW,CAAA;IAExB,+FAA+F;IAC/F,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,OAAiC,CAAA;IAErC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;QACnC,IAAI,GAAG,KAAK,KAAK,EAAE,CAAC;YACnB,KAAK,EAAE,CAAA;YACP,OAAO,EAAE,EAAE,CAAA;YACX,OAAO,GAAG,SAAS,CAAA;QACpB,CAAC;IACF,CAAC,CAAC,CAAA;IAEF,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAgE,CAAA;IAC1G,MAAM,YAAY,GAAG,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAA;IAEpD,IAAI,OAAO,YAAY,KAAK,UAAU,EAAE,CAAC;QACxC,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,IAAI,CAAC,UAAU,8BAA8B,EAAE,CAAC,CAAA;QAE5G,OAAM;IACP,CAAC;IAED,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IACnE,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAA;IACtG,MAAM,OAAO,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,SAAkB,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAE9G,IAAI,CAAC;QACJ,MAAM,UAAU,CAAC;YAChB,OAAO;YACP,YAAY;YACZ,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,IAAI,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE;gBACzB,MAAM,EAAE,CAAA;gBACR,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,QAAQ,CAAC,CAAA;YAC9D,CAAC;YACD,UAAU,EAAE,GAAG,EAAE,CAAC,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;YACrE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,GAAG,KAAK;SAC9B,CAAC,CAAA;QAEF,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrG,CAAC;AACF,CAAC;AAED,KAAK,IAAI,EAAE,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import type { CharacterSequenceInput } from "./CharacterSequence.js";
|
|
7
|
+
import type { AsyncDataResource } from "./shared.js";
|
|
8
|
+
export interface MinimalWorker {
|
|
9
|
+
on(event: "message", cb: (msg: unknown) => void): void;
|
|
10
|
+
on(event: "error", cb: (err: Error) => void): void;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Drain a worker's batched messages into an async iterator. Listeners attach **eagerly** (messages posted before
|
|
14
|
+
* iteration starts are buffered, not lost) and draining uses a `batches[] + head` pointer (no `Array.shift()`).
|
|
15
|
+
* `onBatchConsumed` fires once per batch after its records are yielded — the ack hook for backpressure. An `error`
|
|
16
|
+
* message or worker `error` rejects the iterator.
|
|
17
|
+
*/
|
|
18
|
+
export declare function workerToIterable<R>(worker: MinimalWorker, onBatchConsumed: () => void): AsyncIterableIterator<R>;
|
|
19
|
+
export interface AsManyWorkersOptions {
|
|
20
|
+
/** Module path or URL exporting `handleRecord(bytes, ctx)`. Runs once per worker at import. */
|
|
21
|
+
worker: string | URL;
|
|
22
|
+
/** The record delimiter. @default LineFeed */
|
|
23
|
+
delimiter?: CharacterSequenceInput;
|
|
24
|
+
/** Desired number of segments/workers. Clamped to ≥ 1; fewer may run. */
|
|
25
|
+
concurrency: number;
|
|
26
|
+
/** Bytes read at each ideal boundary to find the next delimiter. @default 65536 */
|
|
27
|
+
probeSize?: number;
|
|
28
|
+
/** Results per message. @default 256 */
|
|
29
|
+
batchSize?: number;
|
|
30
|
+
/** Unacked batches per worker before it pauses. @default 4 */
|
|
31
|
+
maxInFlight?: number;
|
|
32
|
+
/** Forwarded to every worker via `workerData.userData`. */
|
|
33
|
+
workerData?: unknown;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Spawn one worker per delimiter-aligned segment, each running the `worker` handler module over its own handle, and
|
|
37
|
+
* merge their results into a single async iterator. Results interleave across segments. Sends an `ack` per consumed
|
|
38
|
+
* batch (backpressure); terminates all workers on completion, error, or early return.
|
|
39
|
+
*/
|
|
40
|
+
export declare function runSegmentWorkers<R>(source: AsyncDataResource, options: AsManyWorkersOptions): AsyncIterableIterator<R>;
|
|
41
|
+
//# sourceMappingURL=segment-workers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-workers.d.ts","sourceRoot":"","sources":["../../lib/segment-workers.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEpE,OAAO,KAAK,EAAE,iBAAiB,EAAa,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAA;IACtD,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI,CAAA;CAClD;AAID;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,IAAI,GAAG,qBAAqB,CAAC,CAAC,CAAC,CAmDhH;AAED,MAAM,WAAW,oBAAoB;IACpC,+FAA+F;IAC/F,MAAM,EAAE,MAAM,GAAG,GAAG,CAAA;IACpB,8CAA8C;IAC9C,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAClC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,2DAA2D;IAC3D,UAAU,CAAC,EAAE,OAAO,CAAA;CACpB;AAED;;;;GAIG;AACH,wBAAuB,iBAAiB,CAAC,CAAC,EACzC,MAAM,EAAE,iBAAiB,EACzB,OAAO,EAAE,oBAAoB,GAC3B,qBAAqB,CAAC,CAAC,CAAC,CA8C1B"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import { Worker } from "node:worker_threads";
|
|
7
|
+
import { computeSegments } from "./segments.js";
|
|
8
|
+
/**
|
|
9
|
+
* Drain a worker's batched messages into an async iterator. Listeners attach **eagerly** (messages posted before
|
|
10
|
+
* iteration starts are buffered, not lost) and draining uses a `batches[] + head` pointer (no `Array.shift()`).
|
|
11
|
+
* `onBatchConsumed` fires once per batch after its records are yielded — the ack hook for backpressure. An `error`
|
|
12
|
+
* message or worker `error` rejects the iterator.
|
|
13
|
+
*/
|
|
14
|
+
export function workerToIterable(worker, onBatchConsumed) {
|
|
15
|
+
const batches = [];
|
|
16
|
+
let head = 0;
|
|
17
|
+
let done = false;
|
|
18
|
+
let error;
|
|
19
|
+
let wake;
|
|
20
|
+
const signal = () => {
|
|
21
|
+
wake?.();
|
|
22
|
+
wake = undefined;
|
|
23
|
+
};
|
|
24
|
+
worker.on("message", (msg) => {
|
|
25
|
+
const m = msg;
|
|
26
|
+
if (m.type === "batch")
|
|
27
|
+
batches.push(m.records);
|
|
28
|
+
else if (m.type === "done")
|
|
29
|
+
done = true;
|
|
30
|
+
else if (m.type === "error") {
|
|
31
|
+
error = new Error(m.message);
|
|
32
|
+
done = true;
|
|
33
|
+
}
|
|
34
|
+
signal();
|
|
35
|
+
});
|
|
36
|
+
worker.on("error", (err) => {
|
|
37
|
+
error = err;
|
|
38
|
+
done = true;
|
|
39
|
+
signal();
|
|
40
|
+
});
|
|
41
|
+
async function* drain() {
|
|
42
|
+
for (;;) {
|
|
43
|
+
if (head < batches.length) {
|
|
44
|
+
const batch = batches[head++];
|
|
45
|
+
for (const record of batch)
|
|
46
|
+
yield record;
|
|
47
|
+
onBatchConsumed();
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
if (error)
|
|
51
|
+
throw error;
|
|
52
|
+
if (done)
|
|
53
|
+
return;
|
|
54
|
+
await new Promise((resolve) => (wake = resolve));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return drain();
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Spawn one worker per delimiter-aligned segment, each running the `worker` handler module over its own handle, and
|
|
61
|
+
* merge their results into a single async iterator. Results interleave across segments. Sends an `ack` per consumed
|
|
62
|
+
* batch (backpressure); terminates all workers on completion, error, or early return.
|
|
63
|
+
*/
|
|
64
|
+
export async function* runSegmentWorkers(source, options) {
|
|
65
|
+
if (typeof source !== "string" && !(source instanceof URL)) {
|
|
66
|
+
throw new TypeError("asManyWorkers requires a file path or URL — file handles cannot cross threads.");
|
|
67
|
+
}
|
|
68
|
+
const handlerUrl = options.worker instanceof URL ? options.worker.href : new URL(options.worker, `file://${process.cwd()}/`).href;
|
|
69
|
+
const sourcePath = source instanceof URL ? source.href : source;
|
|
70
|
+
const segments = await computeSegments(source, {
|
|
71
|
+
delimiter: options.delimiter,
|
|
72
|
+
concurrency: options.concurrency,
|
|
73
|
+
probeSize: options.probeSize,
|
|
74
|
+
});
|
|
75
|
+
const workers = [];
|
|
76
|
+
const entryUrl = new URL("./segment-worker-entry.js", import.meta.url);
|
|
77
|
+
try {
|
|
78
|
+
const iterables = segments.map(([start, end], segmentIndex) => {
|
|
79
|
+
const worker = new Worker(entryUrl, {
|
|
80
|
+
workerData: {
|
|
81
|
+
source: sourcePath,
|
|
82
|
+
handlerUrl,
|
|
83
|
+
start,
|
|
84
|
+
end,
|
|
85
|
+
delimiter: options.delimiter ?? null,
|
|
86
|
+
segmentIndex,
|
|
87
|
+
batchSize: options.batchSize ?? 256,
|
|
88
|
+
maxInFlight: options.maxInFlight ?? 4,
|
|
89
|
+
userData: options.workerData,
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
workers.push(worker);
|
|
93
|
+
return workerToIterable(worker, () => worker.postMessage("ack"));
|
|
94
|
+
});
|
|
95
|
+
// Each worker runs concurrently and fills ahead (bounded by maxInFlight); draining their
|
|
96
|
+
// iterators in turn still interleaves wall-clock work. Order across segments is not guaranteed.
|
|
97
|
+
for (const iterable of iterables) {
|
|
98
|
+
yield* iterable;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
await Promise.all(workers.map((w) => w.terminate()));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=segment-workers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segment-workers.js","sourceRoot":"","sources":["../../lib/segment-workers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import { type CharacterSequenceInput } from "./CharacterSequence.js";
|
|
7
|
+
import type { AsyncDataResource, ByteRange } from "./shared.js";
|
|
8
|
+
export interface SegmentOptions {
|
|
9
|
+
/** The record delimiter. @default LineFeed */
|
|
10
|
+
delimiter?: CharacterSequenceInput;
|
|
11
|
+
/** Desired number of segments. Clamped to ≥ 1; the result may be fewer. */
|
|
12
|
+
concurrency: number;
|
|
13
|
+
/** Bytes read at each ideal boundary to find the next delimiter. @default 65536 */
|
|
14
|
+
probeSize?: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Divide `source` into up to `concurrency` delimiter-aligned byte ranges. Each internal boundary is placed immediately
|
|
18
|
+
* after the first delimiter at or past the ideal cut, so concatenating each segment's records reproduces the file
|
|
19
|
+
* exactly — no record is split or duplicated.
|
|
20
|
+
*
|
|
21
|
+
* A probe window with no delimiter (a record longer than `probeSize`) collapses that boundary, so the result may have
|
|
22
|
+
* fewer than `concurrency` segments. An empty file yields no segments.
|
|
23
|
+
*/
|
|
24
|
+
export declare function computeSegments(source: AsyncDataResource, options: SegmentOptions): Promise<ByteRange[]>;
|
|
25
|
+
//# sourceMappingURL=segments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segments.d.ts","sourceRoot":"","sources":["../../lib/segments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,KAAK,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAE/D,MAAM,WAAW,cAAc;IAC9B,8CAA8C;IAC9C,SAAS,CAAC,EAAE,sBAAsB,CAAA;IAClC,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAA;IACnB,mFAAmF;IACnF,SAAS,CAAC,EAAE,MAAM,CAAA;CAClB;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CA4C9G"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import { CharacterSequence } from "./CharacterSequence.js";
|
|
7
|
+
/**
|
|
8
|
+
* Divide `source` into up to `concurrency` delimiter-aligned byte ranges. Each internal boundary is placed immediately
|
|
9
|
+
* after the first delimiter at or past the ideal cut, so concatenating each segment's records reproduces the file
|
|
10
|
+
* exactly — no record is split or duplicated.
|
|
11
|
+
*
|
|
12
|
+
* A probe window with no delimiter (a record longer than `probeSize`) collapses that boundary, so the result may have
|
|
13
|
+
* fewer than `concurrency` segments. An empty file yields no segments.
|
|
14
|
+
*/
|
|
15
|
+
export async function computeSegments(source, options) {
|
|
16
|
+
const { readFileSize, readBytes } = await import("spliterator/node/fs");
|
|
17
|
+
const needle = new CharacterSequence(options.delimiter);
|
|
18
|
+
const probeSize = options.probeSize ?? 65536;
|
|
19
|
+
const concurrency = Math.max(1, Math.floor(options.concurrency));
|
|
20
|
+
const fileSize = await readFileSize(source);
|
|
21
|
+
if (fileSize === 0)
|
|
22
|
+
return [];
|
|
23
|
+
if (concurrency === 1)
|
|
24
|
+
return [[0, fileSize]];
|
|
25
|
+
const idealCuts = Array.from({ length: concurrency - 1 }, (_, i) => Math.round(((i + 1) * fileSize) / concurrency));
|
|
26
|
+
const alignedCuts = await Promise.all(idealCuts.map(async (cut) => {
|
|
27
|
+
if (cut <= 0 || cut >= fileSize)
|
|
28
|
+
return null;
|
|
29
|
+
const window = await readBytes(source, cut, probeSize);
|
|
30
|
+
const index = needle.search(window, 0, window.length);
|
|
31
|
+
if (index === -1)
|
|
32
|
+
return null;
|
|
33
|
+
return cut + index + needle.length;
|
|
34
|
+
}));
|
|
35
|
+
const boundaries = new Set([0, fileSize]);
|
|
36
|
+
for (const cut of alignedCuts) {
|
|
37
|
+
if (cut !== null && cut > 0 && cut < fileSize)
|
|
38
|
+
boundaries.add(cut);
|
|
39
|
+
}
|
|
40
|
+
const sorted = Array.from(boundaries).sort((a, b) => a - b);
|
|
41
|
+
const segments = [];
|
|
42
|
+
for (let i = 1; i < sorted.length; i++) {
|
|
43
|
+
const start = sorted[i - 1];
|
|
44
|
+
const end = sorted[i];
|
|
45
|
+
if (end > start)
|
|
46
|
+
segments.push([start, end]);
|
|
47
|
+
}
|
|
48
|
+
return segments;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=segments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"segments.js","sourceRoot":"","sources":["../../lib/segments.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAA+B,MAAM,wBAAwB,CAAA;AAYvF;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,MAAyB,EAAE,OAAuB;IACvF,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAA;IACvE,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;IACvD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAA;IAC5C,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;IAEhE,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC,CAAA;IAE3C,IAAI,QAAQ,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE7B,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IAE7C,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,WAAW,CAAC,CAAC,CAAA;IAEnH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,QAAQ;YAAE,OAAO,IAAI,CAAA;QAE5C,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC,CAAA;QACtD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;QAErD,IAAI,KAAK,KAAK,CAAC,CAAC;YAAE,OAAO,IAAI,CAAA;QAE7B,OAAO,GAAG,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAA;IACnC,CAAC,CAAC,CACF,CAAA;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IAEjD,KAAK,MAAM,GAAG,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,QAAQ;YAAE,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnE,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;IAC3D,MAAM,QAAQ,GAAgB,EAAE,CAAA;IAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAE,CAAA;QAC5B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAE,CAAA;QAEtB,IAAI,GAAG,GAAG,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,QAAQ,CAAA;AAChB,CAAC"}
|
package/out/lib/shared.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @copyright Sister Software
|
|
3
|
-
* @license
|
|
3
|
+
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
6
|
import { type Stats } from "node:fs";
|
|
@@ -41,8 +41,7 @@ export declare function isFileHandleLike(input: unknown): input is FileHandleLik
|
|
|
41
41
|
/**
|
|
42
42
|
* Type-helper to determine the destination type for a typed array.
|
|
43
43
|
*
|
|
44
|
-
* This is useful to infer the ultimate return type of a function which optionally accepts a typed
|
|
45
|
-
* array destination.
|
|
44
|
+
* This is useful to infer the ultimate return type of a function which optionally accepts a typed array destination.
|
|
46
45
|
*/
|
|
47
46
|
export type TypedArrayFallback<T> = T extends TypedArray ? T : Uint8Array;
|
|
48
47
|
/**
|
|
@@ -71,8 +70,8 @@ export interface ReadBytesOptions {
|
|
|
71
70
|
/**
|
|
72
71
|
* A trait for reading a range of bytes from a source.
|
|
73
72
|
*
|
|
74
|
-
* While possible with a variety of platform-specific APIs, this trait provides a common interface
|
|
75
|
-
*
|
|
73
|
+
* While possible with a variety of platform-specific APIs, this trait provides a common interface for reading byte
|
|
74
|
+
* ranges.
|
|
76
75
|
*/
|
|
77
76
|
export interface ByteRangeReader extends AsyncIterator<Uint8Array> {
|
|
78
77
|
/**
|
|
@@ -157,6 +156,7 @@ export declare function zippedEntries<T, U>(zipped: Zipped<T, U>): ZippedEntries
|
|
|
157
156
|
*
|
|
158
157
|
* @param a The first iterable to zip.
|
|
159
158
|
* @param b The second iterable to zip.
|
|
159
|
+
*
|
|
160
160
|
* @yields Pairs of elements from the two iterables.
|
|
161
161
|
* @see {@linkcode zipAsync} for the asynchronous version.
|
|
162
162
|
*/
|
|
@@ -168,6 +168,7 @@ export declare function zipSync<T, U>(a: Iterable<T>, b: Iterable<U>): Generator
|
|
|
168
168
|
*
|
|
169
169
|
* @param a The first iterable to zip.
|
|
170
170
|
* @param b The second iterable to zip.
|
|
171
|
+
*
|
|
171
172
|
* @yields Pairs of elements from the two iterables.
|
|
172
173
|
* @see {@linkcode zipSync} for the synchronous version.
|
|
173
174
|
*/
|
package/out/lib/shared.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../lib/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,SAAS,CAAA;AAEpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAElD;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC,CAAA;AAEnE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,IAAI,CAChC,UAAU,EACV,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,mBAAmB,GAAG,kBAAkB,CAC3E,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACvB;;OAEG;IACH,KAAK,EAAE,MAAM;IACb;;OAEG;IACH,GAAG,EAAE,MAAM;CACX,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GACnB,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,cAAc,GACd,aAAa,GACb,YAAY,GACZ,YAAY,CAAA;AAEf;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG,UAAU,CAAA;AAExD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAED
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../lib/shared.ts"],"names":[],"mappings":"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"}
|
package/out/lib/shared.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @copyright Sister Software
|
|
3
|
-
* @license
|
|
3
|
+
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
6
|
// eslint-disable-next-line no-restricted-imports
|
|
@@ -50,6 +50,7 @@ export function zippedEntries(zipped) {
|
|
|
50
50
|
*
|
|
51
51
|
* @param a The first iterable to zip.
|
|
52
52
|
* @param b The second iterable to zip.
|
|
53
|
+
*
|
|
53
54
|
* @yields Pairs of elements from the two iterables.
|
|
54
55
|
* @see {@linkcode zipAsync} for the asynchronous version.
|
|
55
56
|
*/
|
|
@@ -74,6 +75,7 @@ export function* zipSync(a, b) {
|
|
|
74
75
|
*
|
|
75
76
|
* @param a The first iterable to zip.
|
|
76
77
|
* @param b The second iterable to zip.
|
|
78
|
+
*
|
|
77
79
|
* @yields Pairs of elements from the two iterables.
|
|
78
80
|
* @see {@linkcode zipSync} for the synchronous version.
|
|
79
81
|
*/
|
package/out/lib/shared.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../lib/shared.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iDAAiD;AACjD,OAAO,EAAc,MAAM,SAAS,CAAA;AAoDpC;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC9C,OAAO,OAAO,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAI,IAAI,KAAK,CAAC,CAAA;AACpE,CAAC;
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../lib/shared.ts"],"names":[],"mappings":"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"}
|
package/out/lib/take.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @copyright Sister Software
|
|
3
|
-
* @license
|
|
3
|
+
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
@@ -11,14 +11,14 @@
|
|
|
11
11
|
* @param collection The collection to batch.
|
|
12
12
|
* @param batchSize The size of each batch.
|
|
13
13
|
* @param callback The async callback to execute on each batch.
|
|
14
|
+
*
|
|
14
15
|
* @yields The result of each callback execution
|
|
15
16
|
*/
|
|
16
17
|
export declare function asyncParallelIterator<T, C extends (entry: T) => Promise<unknown>>(collection: Iterable<T> | AsyncIterable<T>, batchSize: number, callback: C, abortSignal?: AbortSignal): AsyncIterable<Awaited<ReturnType<C>>>;
|
|
17
18
|
/**
|
|
18
19
|
* Given an async iterable collection, returns an async iterable, yielding batches of items.
|
|
19
20
|
*
|
|
20
|
-
* This is useful for emitting asynchronous items in batches, such as when processing a stream of
|
|
21
|
-
* data.
|
|
21
|
+
* This is useful for emitting asynchronous items in batches, such as when processing a stream of data.
|
|
22
22
|
*
|
|
23
23
|
* @yields Each batch of items.
|
|
24
24
|
*/
|
package/out/lib/take.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take.d.ts","sourceRoot":"","sources":["../../lib/take.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"take.d.ts","sourceRoot":"","sources":["../../lib/take.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,wBAAuB,qBAAqB,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,EACvF,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,EAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,EACX,WAAW,CAAC,EAAE,WAAW,GACvB,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAiDvC;AAED;;;;;;GAMG;AACH,wBAAuB,SAAS,CAAC,CAAC,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,CAAC,CAAC,EAAE,CAAC,CAgBvG"}
|
package/out/lib/take.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @copyright Sister Software
|
|
3
|
-
* @license
|
|
3
|
+
* @license MIT
|
|
4
4
|
* @author Teffen Ellis, et al.
|
|
5
5
|
*/
|
|
6
6
|
/**
|
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
* @param collection The collection to batch.
|
|
12
12
|
* @param batchSize The size of each batch.
|
|
13
13
|
* @param callback The async callback to execute on each batch.
|
|
14
|
+
*
|
|
14
15
|
* @yields The result of each callback execution
|
|
15
16
|
*/
|
|
16
17
|
export async function* asyncParallelIterator(collection, batchSize, callback, abortSignal) {
|
|
@@ -50,8 +51,7 @@ export async function* asyncParallelIterator(collection, batchSize, callback, ab
|
|
|
50
51
|
/**
|
|
51
52
|
* Given an async iterable collection, returns an async iterable, yielding batches of items.
|
|
52
53
|
*
|
|
53
|
-
* This is useful for emitting asynchronous items in batches, such as when processing a stream of
|
|
54
|
-
* data.
|
|
54
|
+
* This is useful for emitting asynchronous items in batches, such as when processing a stream of data.
|
|
55
55
|
*
|
|
56
56
|
* @yields Each batch of items.
|
|
57
57
|
*/
|
package/out/lib/take.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../lib/take.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH
|
|
1
|
+
{"version":3,"file":"take.js","sourceRoot":"","sources":["../../lib/take.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,qBAAqB,CAC3C,UAA0C,EAC1C,SAAiB,EACjB,QAAW,EACX,WAAyB;IAEzB,MAAM,QAAQ,GACb,MAAM,CAAC,aAAa,IAAI,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAA;IAExG,MAAM,YAAY,GAAG,IAAI,GAAG,EAAuB,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAA;IAE3C,IAAI,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IAE3C,OAAO,CAAC,CAAC,eAAe,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;QACzE,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACrC,MAAM,MAAM,CAAA;YAEZ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;QAED,IAAI,YAAY,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YACpC,MAAM,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;YACzC,SAAQ;QACT,CAAC;QAED,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;YAExC,MAAK;QACN,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,KAAK,CAAA;QAEnC,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACpD,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;YAE1B,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAuB,CAAC,CAAA;QAC5C,CAAC,CAAC,CAAA;QAEF,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;QAErC,eAAe,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;QAC1C,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAA;QAExC,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACrC,MAAM,MAAM,CAAA;YAEZ,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACpB,CAAC;IACF,CAAC;AACF,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,SAAS,CAAC,CAAC,SAAS,CAAI,UAA4B,EAAE,SAAiB;IAClF,IAAI,MAAM,GAAQ,EAAE,CAAA;IAEpB,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QACrC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEjB,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,MAAM,CAAA;YAEZ,MAAM,GAAG,EAAE,CAAA;QACZ,CAAC;IACF,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,MAAM,CAAA;IACb,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* Base64-encoded WASM module for SIMD-accelerated delimiter scanning.
|
|
6
|
+
* Generated by wasm/build.sh — do not edit by hand.
|
|
7
|
+
* The module exports:
|
|
8
|
+
* - memory: WebAssembly.Memory (1 page = 64KB initial, grows on demand, no fixed maximum)
|
|
9
|
+
* - find_delimiter(haystack_offset, haystack_len, pattern_offset, pattern_len) → i32
|
|
10
|
+
* Returns the byte offset of the first match, or -1.
|
|
11
|
+
* - find_all_delimiters(haystack_offset, haystack_len, pattern_offset, pattern_len,
|
|
12
|
+
* results_offset, max_results) → usize
|
|
13
|
+
* Writes (start, end) i32 pairs to results_offset, returns count.
|
|
14
|
+
*/
|
|
15
|
+
export declare const WASM_BASE64 = "AGFzbQEAAAABHgNgBH9/f38Bf2AGf39/f39/AX9gB39/f39/f38BfwMFBAABAgAFAwEAAQYPAn8AQYCAAQt/AEGAgAELB18GBm1lbW9yeQIAE2ZpbmRfYWxsX2RlbGltaXRlcnMAARBmaW5kX2FsbF9tYXRjaGVzAAIOZmluZF9kZWxpbWl0ZXIAAwpfX2RhdGFfZW5kAwALX19oZWFwX2Jhc2UDAQr1CwTEAgINfwF7IAItAAAhCyABIANBAWsiDWsiBEEAIAEgBE8bIglBEE8EQCAL/Q8hESAAIQpBECEEA0AgBSEMIAQhBSAAIAxq/QAAACAR/SP9ZCIGBEADQCABIAZoIgQgDGoiDiADak8EQCAEIApqIQcgAyEEIAIhCANAIARFBEAgDg8LIARBAWshBCAILQAAIActAAAgCEEBaiEIIAdBAWohB0YNAAsLIAZBAWsgBnEiBg0ACwsgCkEQaiEKIAVBEGoiBCAJTQ0ACwsgBSAJSQRAIAJBAWohASAAIAVqQQFqIQYDQCANIQQgASEHIAYhCAJAIAAgBWotAAAgC0cNAANAIAQEQCAEQQFrIQQgBy0AACAILQAAIAdBAWohByAIQQFqIQhGDQEMAgsLIAUPCyAGQQFqIQYgBUEBaiIFIAlJDQALC0F/C5MCAgl/AXsCQCAFRSABRSADRXJyRQRAIAEgA0kNASADQQFHIQ0DQCAAIAlqIQogASAJayELAn8gDUUEQCACLQAAIg79DyEPQQAhBgJAA0AgBkEQaiIHIAtLDQEgBiAKaiAHIQb9AAAAIA/9I/1kIgdFDQALIAdoIAZBEGtqDAILA0AgBiALTw0FIAYgCmogBkEBaiEGLQAAIA5HDQALIAZBAWsMAQsgCiALIAIgAxAACyIGQQBIDQIgBCAIQQN0aiIMIAYgCWoiBzYCBCAMIAk2AgAgASADIAdqIgkgA2pPIAhBAWoiCCAFSSIHcQ0ACyAHDQELIAgPCyAEIAhBA3RqIgAgATYCBCAAIAk2AgAgCEEBaguDBgILfwN7AkAgBkUgAyAEckUgAUVycg0AIAIgA2ohDiADQQFGIhAgBEEBRnFFBEADQCABIAxrIQsCfwJAAkAgEEUEQCADDQFB/////wcMAwsgACAMaiEKIAItAAAiDf0PIRJBACEHAkADQCAHQRBqIgkgC0sNASAHIApqIAkhB/0AAAAgEv0j/WQiCUUNAAsgCWggB0EQa2oMAwsDQCAHIAtJBEAgByAKaiEJIAdBAWohByANIAktAABHDQEMAwsLQX8MAgsgACAMaiALIAIgAxAADAELIAdBAWsLIgkCfwJAAkAgBEEBRgRAIAAgDGohDSAOLQAAIg/9DyESQQAhBwJAA0AgB0EQaiIKIAtLDQEgByANaiAKIQf9AAAAIBL9I/1kIgpFDQALIApoIAdBEGtqDAQLA0AgByALSQRAIAcgDWohCiAHQQFqIQcgDyAKLQAARw0BDAMLC0F/DAMLIAQNAUH/////BwwCCyAHQQFrDAELIAAgDGogCyAOIAQQAAsiB3FBAEgNAiAFIAhBA3RqIgsgByAJSCAHQQBOcSAJQQBIciIKNgIEIAsgByAJIAobIAxqIgc2AgAgCEEBaiEIIAcgBCADIAobaiIMIAFPDQIgBiAISw0ACwwBCyAOLQAAIQogAi0AACEDAkAgAUEQSQ0AIAr9DyESIAP9DyETQRAhB0EAIQIDQCAHIQkCQCAAIAJq/QAAACIUIBP9I/1kIgQgFCAS/SP9ZHIiB0UNACAEQX9zIQwgBSAIQQN0aiEEA0AgBCAHaCILIAJqNgIAIARBBGogDCALdkEBcTYCACAIQQFqIQggB0EBayAHcSIHRQ0BIARBCGohBCAGIAhLDQALCyAJQRBqIgcgAUsNASAJIQIgBiAISw0ACwsgASAJTSAGIAhNcg0AA0ACQCADIAAgCWotAAAiAkYEf0EABSACIApHDQFBAQshByAFIAhBA3RqIgIgBzYCBCACIAk2AgAgCEEBaiEICyAJQQFqIgkgAU8NASAGIAhLDQALCyAIC5IBAgN/AXtBfyEFAkAgA0EBayABTw0AIANBAUYEQCACLQAAIgL9DyEHQQAhAwNAIAEgA0EQaiIESQRAA0AgASADTQ0EIAAgA2ogA0EBaiEDLQAAIAJHDQALIANBAWsPCyAAIANqIAQhA/0AAAAgB/0j/WQiBEUNAAsgBGggA0EQa2oPCyAAIAEgAiADEAAhBQsgBQs=";
|
|
16
|
+
//# sourceMappingURL=wasm_base64.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm_base64.d.ts","sourceRoot":"","sources":["../../lib/wasm_base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,WAAW,ytEAC+rE,CAAA"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
* Base64-encoded WASM module for SIMD-accelerated delimiter scanning.
|
|
6
|
+
* Generated by wasm/build.sh — do not edit by hand.
|
|
7
|
+
* The module exports:
|
|
8
|
+
* - memory: WebAssembly.Memory (1 page = 64KB initial, grows on demand, no fixed maximum)
|
|
9
|
+
* - find_delimiter(haystack_offset, haystack_len, pattern_offset, pattern_len) → i32
|
|
10
|
+
* Returns the byte offset of the first match, or -1.
|
|
11
|
+
* - find_all_delimiters(haystack_offset, haystack_len, pattern_offset, pattern_len,
|
|
12
|
+
* results_offset, max_results) → usize
|
|
13
|
+
* Writes (start, end) i32 pairs to results_offset, returns count.
|
|
14
|
+
*/
|
|
15
|
+
export const WASM_BASE64 = "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";
|
|
16
|
+
//# sourceMappingURL=wasm_base64.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm_base64.js","sourceRoot":"","sources":["../../lib/wasm_base64.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,WAAW,GACvB,stEAAstE,CAAA"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
export declare function loadWasmModule(): Promise<WasmDelimiterScanner | null>;
|
|
7
|
+
type WasmFindDelimiter = (ho: number, hl: number, po: number, pl: number) => number;
|
|
8
|
+
type WasmFindAllDelimiters = (ho: number, hl: number, po: number, pl: number, ro: number, mr: number) => number;
|
|
9
|
+
type WasmFindAllMatches = (ho: number, hl: number, p1o: number, p1l: number, p2l: number, ro: number, mr: number) => number;
|
|
10
|
+
export interface WasmMemory {
|
|
11
|
+
readonly buffer: ArrayBuffer;
|
|
12
|
+
grow(pages: number): number;
|
|
13
|
+
}
|
|
14
|
+
export interface WasmDelimiterScanner {
|
|
15
|
+
memory: WasmMemory;
|
|
16
|
+
findDelimiter: WasmFindDelimiter;
|
|
17
|
+
findAllDelimiters: WasmFindAllDelimiters;
|
|
18
|
+
findAllMatches: WasmFindAllMatches;
|
|
19
|
+
}
|
|
20
|
+
/** Match result from find_all_matches: [offset, pattern_id]. */
|
|
21
|
+
export interface MatchResult {
|
|
22
|
+
/** Byte offset of the match within the haystack. */
|
|
23
|
+
offset: number;
|
|
24
|
+
/** 0 = pattern 1 (delimiter), 1 = pattern 2 (quote). */
|
|
25
|
+
patternId: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Minimum haystack size (bytes) at which the WASM SIMD scanner is used instead of the JS scan, once the module has
|
|
29
|
+
* loaded. Empirically WASM wins well below this — ~8x for single-byte `searchAll` and ~3x for multi-byte `search` at
|
|
30
|
+
* 512 bytes, with sub-µs fixed overhead — so 512 captures typical delimited rows while skipping only the tiny-buffer
|
|
31
|
+
* regime where it doesn't matter.
|
|
32
|
+
*/
|
|
33
|
+
export declare const WASM_THRESHOLD = 512;
|
|
34
|
+
export declare const WASM_MAX_RESULTS = 4096;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=wasm_module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm_module.d.ts","sourceRoot":"","sources":["../../lib/wasm_module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,wBAAsB,cAAc,IAAI,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAkB3E;AAED,KAAK,iBAAiB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;AAEnF,KAAK,qBAAqB,GAAG,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;AAE/G,KAAK,kBAAkB,GAAG,CACzB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,KACN,MAAM,CAAA;AAEX,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,UAAU,CAAA;IAClB,aAAa,EAAE,iBAAiB,CAAA;IAChC,iBAAiB,EAAE,qBAAqB,CAAA;IACxC,cAAc,EAAE,kBAAkB,CAAA;CAClC;AAED,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC3B,oDAAoD;IACpD,MAAM,EAAE,MAAM,CAAA;IACd,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAA;CACjB;AAED;;;;;GAKG;AACH,eAAO,MAAM,cAAc,MAAM,CAAA;AACjC,eAAO,MAAM,gBAAgB,OAAO,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @copyright Sister Software
|
|
3
|
+
* @license MIT
|
|
4
|
+
* @author Teffen Ellis, et al.
|
|
5
|
+
*/
|
|
6
|
+
import { WASM_BASE64 } from "./wasm_base64.js";
|
|
7
|
+
export async function loadWasmModule() {
|
|
8
|
+
if (!WASM_BASE64)
|
|
9
|
+
return null;
|
|
10
|
+
try {
|
|
11
|
+
const bytes = Uint8Array.from(atob(WASM_BASE64), (c) => c.charCodeAt(0));
|
|
12
|
+
const module = await WebAssembly.compile(bytes);
|
|
13
|
+
const instance = await WebAssembly.instantiate(module, {});
|
|
14
|
+
const e = instance.exports;
|
|
15
|
+
const memory = e.memory;
|
|
16
|
+
const findDelimiter = e.find_delimiter;
|
|
17
|
+
const findAllDelimiters = e.find_all_delimiters;
|
|
18
|
+
const findAllMatches = e.find_all_matches;
|
|
19
|
+
return { memory, findDelimiter, findAllDelimiters, findAllMatches };
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Minimum haystack size (bytes) at which the WASM SIMD scanner is used instead of the JS scan, once the module has
|
|
27
|
+
* loaded. Empirically WASM wins well below this — ~8x for single-byte `searchAll` and ~3x for multi-byte `search` at
|
|
28
|
+
* 512 bytes, with sub-µs fixed overhead — so 512 captures typical delimited rows while skipping only the tiny-buffer
|
|
29
|
+
* regime where it doesn't matter.
|
|
30
|
+
*/
|
|
31
|
+
export const WASM_THRESHOLD = 512;
|
|
32
|
+
export const WASM_MAX_RESULTS = 4096;
|
|
33
|
+
//# sourceMappingURL=wasm_module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wasm_module.js","sourceRoot":"","sources":["../../lib/wasm_module.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAe9C,MAAM,CAAC,KAAK,UAAU,cAAc;IACnC,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAA;IAE7B,IAAI,CAAC;QACJ,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAA;QACxE,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC/C,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;QAC1D,MAAM,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAA;QAE1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAoB,CAAA;QACrC,MAAM,aAAa,GAAG,CAAC,CAAC,cAAmC,CAAA;QAC3D,MAAM,iBAAiB,GAAG,CAAC,CAAC,mBAA4C,CAAA;QACxE,MAAM,cAAc,GAAG,CAAC,CAAC,gBAAsC,CAAA;QAE/D,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAA;IACpE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,IAAI,CAAA;IACZ,CAAC;AACF,CAAC;AAoCD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAA"}
|
package/out/lib/writer.d.ts
CHANGED
package/out/lib/writer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../lib/writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,KAAK,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC;;OAEG;IACH,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD;;;;OAIG;IACH,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,EAAE,WAAW,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../lib/writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAqB,KAAK,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEvE;;GAEG;AACH,MAAM,WAAW,iBAAiB;IACjC;;OAEG;IACH,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAChC;;OAEG;IACH,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACrD;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD;;;;OAIG;IACH,KAAK,EAAE,iBAAiB,CAAA;IACxB,OAAO,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IAC5B,MAAM,EAAE,WAAW,CAAA;CACnB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,GAAG,aAAa,CAqCrE"}
|
package/out/lib/writer.js
CHANGED
package/out/lib/writer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../lib/writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiB,WAAW,EAAE,MAAM,SAAS,CAAA;AA2BvE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE1C,MAAM,KAAK,GAAsB,CAAC,OAAO,EAAE,EAAE;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvC,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../lib/writer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAiB,WAAW,EAAE,MAAM,SAAS,CAAA;AA2BvE;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAkB;IACrD,MAAM,MAAM,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAE1C,MAAM,KAAK,GAAsB,CAAC,OAAO,EAAE,EAAE;QAC5C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACtC,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;gBACvC,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAA;oBAEb,OAAM;gBACP,CAAC;gBAED,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;IAED,MAAM,OAAO,GAAG,GAAG,EAAE;QACpB,OAAO,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC5C,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;gBACtB,IAAI,KAAK,EAAE,CAAC;oBACX,MAAM,CAAC,KAAK,CAAC,CAAA;oBAEb,OAAM;gBACP,CAAC;gBAED,OAAO,EAAE,CAAA;YACV,CAAC,CAAC,CAAA;QACH,CAAC,CAAC,CAAA;IACH,CAAC,CAAA;IAED,OAAO;QACN,KAAK;QACL,MAAM;QACN,OAAO;QACP,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,OAAO;KAC9B,CAAA;AACF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../../node/cli/commands/csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;
|
|
1
|
+
{"version":3,"file":"csv.d.ts","sourceRoot":"","sources":["../../../../node/cli/commands/csv.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAaH,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,IAAI,EAAE,MAAM,OAAO,CAAA;AAE1D,OAAO,EAAyB,KAAK,SAAS,EAA0B,MAAM,aAAa,CAAA;AAE3F,eAAO,MAAM,OAAO,+BAA+B,CAAA;AACnD,eAAO,MAAM,QAAQ,QAAQ,CAAA;AAE7B,eAAO,MAAM,OAAO,GAAI,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BjC,CAAA;AAED,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,OAAO,OAAO,CAAC,CAAA;AAEtD,eAAO,MAAM,OAAO,GAAU,MAAM,kBAAkB,CAAC,cAAc,CAAC,kBA8CrE,CAAA"}
|