web-csv-toolbox 0.13.0-next-7d51d5285be9cffa5103de58469d8de0c98959d7 → 0.13.0-next-9da8ea20512f2a1e07c4d78092cecedb63cd5455
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 +6 -6
- package/dist/CSVLexer.js.map +1 -1
- package/dist/CSVLexerTransformer.d.ts +12 -14
- package/dist/CSVLexerTransformer.js +10 -14
- package/dist/CSVLexerTransformer.js.map +1 -1
- package/dist/CSVRecordAssembler.d.ts +2 -2
- package/dist/CSVRecordAssembler.js +62 -44
- package/dist/CSVRecordAssembler.js.map +1 -1
- package/dist/CSVRecordAssemblerTransformer.d.ts +10 -10
- package/dist/CSVRecordAssemblerTransformer.js +4 -4
- package/dist/CSVRecordAssemblerTransformer.js.map +1 -1
- package/dist/_virtual/web_csv_toolbox_wasm_bg.wasm.js +1 -1
- package/dist/assertCommonOptions.js.map +1 -1
- package/dist/common/constants.js.map +1 -1
- package/dist/common/errors.js.map +1 -1
- package/dist/common/types.d.ts +311 -14
- package/dist/commonParseErrorHandling.js.map +1 -1
- package/dist/constants.js.map +1 -1
- package/dist/createWorker.node.d.ts +2 -0
- package/dist/createWorker.web.d.ts +2 -0
- package/dist/execution/EnginePresets.d.ts +143 -0
- package/dist/execution/EnginePresets.js +129 -0
- package/dist/execution/EnginePresets.js.map +1 -0
- package/dist/execution/InternalEngineConfig.d.ts +89 -0
- package/dist/execution/InternalEngineConfig.js +175 -0
- package/dist/execution/InternalEngineConfig.js.map +1 -0
- package/dist/execution/main/parseBinaryInMain.d.ts +12 -0
- package/dist/execution/main/parseStreamInMain.d.ts +12 -0
- package/dist/execution/main/parseStringInMain.d.ts +12 -0
- package/dist/execution/main/parseUint8ArrayStreamInMain.d.ts +12 -0
- package/dist/execution/wasm/parseBinaryInWASM.d.ts +18 -0
- package/dist/execution/wasm/parseBinaryInWASM.js +15 -0
- package/dist/execution/wasm/parseBinaryInWASM.js.map +1 -0
- package/dist/execution/wasm/parseStringInWASM.d.ts +16 -0
- package/dist/execution/worker/helpers/ReusableWorkerPool.d.ts +152 -0
- package/dist/execution/worker/helpers/ReusableWorkerPool.js +238 -0
- package/dist/execution/worker/helpers/ReusableWorkerPool.js.map +1 -0
- package/dist/execution/worker/helpers/TransientWorkerPool.d.ts +89 -0
- package/dist/execution/worker/helpers/WorkerManager.d.ts +27 -0
- package/dist/execution/worker/helpers/WorkerPool.d.ts +50 -0
- package/dist/execution/worker/helpers/WorkerSession.d.ts +78 -0
- package/dist/execution/worker/helpers/WorkerSession.js +58 -0
- package/dist/execution/worker/helpers/WorkerSession.js.map +1 -0
- package/dist/execution/worker/helpers/createWorker.node.d.ts +8 -0
- package/dist/execution/worker/helpers/createWorker.node.js +15 -0
- package/dist/execution/worker/helpers/createWorker.node.js.map +1 -0
- package/dist/execution/worker/helpers/createWorker.web.d.ts +8 -0
- package/dist/execution/worker/helpers/createWorker.web.js +11 -0
- package/dist/execution/worker/helpers/createWorker.web.js.map +1 -0
- package/dist/execution/worker/helpers/worker.node.d.ts +1 -0
- package/dist/execution/worker/helpers/worker.node.js +11 -0
- package/dist/execution/worker/helpers/worker.node.js.map +1 -0
- package/dist/execution/worker/helpers/worker.shared.d.ts +90 -0
- package/dist/execution/worker/helpers/worker.shared.js +241 -0
- package/dist/execution/worker/helpers/worker.shared.js.map +1 -0
- package/dist/execution/worker/helpers/worker.web.d.ts +1 -0
- package/dist/execution/worker/helpers/worker.web.js +16 -0
- package/dist/execution/worker/helpers/worker.web.js.map +1 -0
- package/dist/execution/worker/parseBinaryInWorker.node.d.ts +8 -0
- package/dist/execution/worker/parseBinaryInWorker.node.js +24 -0
- package/dist/execution/worker/parseBinaryInWorker.node.js.map +1 -0
- package/dist/execution/worker/parseBinaryInWorker.web.d.ts +8 -0
- package/dist/execution/worker/parseBinaryInWorker.web.js +24 -0
- package/dist/execution/worker/parseBinaryInWorker.web.js.map +1 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.node.d.ts +8 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.node.js +24 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.node.js.map +1 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.web.d.ts +8 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.web.js +24 -0
- package/dist/execution/worker/parseBinaryInWorkerWASM.web.js.map +1 -0
- package/dist/execution/worker/parseStreamInWorker.node.d.ts +15 -0
- package/dist/execution/worker/parseStreamInWorker.node.js +26 -0
- package/dist/execution/worker/parseStreamInWorker.node.js.map +1 -0
- package/dist/execution/worker/parseStreamInWorker.web.d.ts +12 -0
- package/dist/execution/worker/parseStreamInWorker.web.js +25 -0
- package/dist/execution/worker/parseStreamInWorker.web.js.map +1 -0
- package/dist/execution/worker/parseStringInWorker.node.d.ts +11 -0
- package/dist/execution/worker/parseStringInWorker.node.js +24 -0
- package/dist/execution/worker/parseStringInWorker.node.js.map +1 -0
- package/dist/execution/worker/parseStringInWorker.web.d.ts +11 -0
- package/dist/execution/worker/parseStringInWorker.web.js +24 -0
- package/dist/execution/worker/parseStringInWorker.web.js.map +1 -0
- package/dist/execution/worker/parseStringInWorkerWASM.node.d.ts +8 -0
- package/dist/execution/worker/parseStringInWorkerWASM.node.js +24 -0
- package/dist/execution/worker/parseStringInWorkerWASM.node.js.map +1 -0
- package/dist/execution/worker/parseStringInWorkerWASM.web.d.ts +8 -0
- package/dist/execution/worker/parseStringInWorkerWASM.web.js +24 -0
- package/dist/execution/worker/parseStringInWorkerWASM.web.js.map +1 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.node.d.ts +12 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.node.js +26 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.node.js.map +1 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.web.d.ts +9 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.web.js +25 -0
- package/dist/execution/worker/parseUint8ArrayStreamInWorker.web.js.map +1 -0
- package/dist/execution/worker/strategies/MessageStreamingStrategy.d.ts +17 -0
- package/dist/execution/worker/strategies/MessageStreamingStrategy.js +58 -0
- package/dist/execution/worker/strategies/MessageStreamingStrategy.js.map +1 -0
- package/dist/execution/worker/strategies/TransferableStreamStrategy.d.ts +25 -0
- package/dist/execution/worker/strategies/TransferableStreamStrategy.js +159 -0
- package/dist/execution/worker/strategies/TransferableStreamStrategy.js.map +1 -0
- package/dist/execution/worker/strategies/WorkerStrategy.d.ts +27 -0
- package/dist/execution/worker/strategies/WorkerStrategySelector.d.ts +43 -0
- package/dist/execution/worker/strategies/WorkerStrategySelector.js +89 -0
- package/dist/execution/worker/strategies/WorkerStrategySelector.js.map +1 -0
- package/dist/execution/worker/utils/messageHandler.d.ts +21 -0
- package/dist/execution/worker/utils/messageHandler.js +109 -0
- package/dist/execution/worker/utils/messageHandler.js.map +1 -0
- package/dist/execution/worker/utils/serializeOptions.d.ts +9 -0
- package/dist/execution/worker/utils/serializeOptions.js +14 -0
- package/dist/execution/worker/utils/serializeOptions.js.map +1 -0
- package/dist/execution/worker/utils/streamCollector.node.d.ts +14 -0
- package/dist/execution/worker/utils/streamCollector.node.js +78 -0
- package/dist/execution/worker/utils/streamCollector.node.js.map +1 -0
- package/dist/execution/worker/utils/workerUtils.d.ts +14 -0
- package/dist/execution/worker/utils/workerUtils.js +25 -0
- package/dist/execution/worker/utils/workerUtils.js.map +1 -0
- package/dist/getOptionsFromResponse.constants.node.d.ts +10 -0
- package/dist/getOptionsFromResponse.constants.node.js +8 -0
- package/dist/getOptionsFromResponse.constants.node.js.map +1 -0
- package/dist/getOptionsFromResponse.constants.web.d.ts +30 -0
- package/dist/getOptionsFromResponse.constants.web.js +7 -0
- package/dist/getOptionsFromResponse.constants.web.js.map +1 -0
- package/dist/getOptionsFromResponse.d.ts +2 -1
- package/dist/getOptionsFromResponse.js +5 -9
- package/dist/getOptionsFromResponse.js.map +1 -1
- package/dist/loadWASM.js.map +1 -1
- package/dist/loadWASM.web.js.map +1 -1
- package/dist/parse.d.ts +1 -1
- package/dist/parse.js +29 -5
- package/dist/parse.js.map +1 -1
- package/dist/parseBinary.d.ts +2 -1
- package/dist/parseBinary.js +32 -3
- package/dist/parseBinary.js.map +1 -1
- package/dist/parseBinaryInWorker.node.d.ts +2 -0
- package/dist/parseBinaryInWorker.web.d.ts +2 -0
- package/dist/parseBinaryInWorkerWASM.node.d.ts +2 -0
- package/dist/parseBinaryInWorkerWASM.web.d.ts +2 -0
- package/dist/parseBinaryToArraySync.d.ts +2 -1
- package/dist/parseBinaryToArraySync.js.map +1 -1
- package/dist/parseBinaryToIterableIterator.d.ts +2 -1
- package/dist/parseBinaryToIterableIterator.js.map +1 -1
- package/dist/parseBinaryToStream.d.ts +2 -1
- package/dist/parseBinaryToStream.js.map +1 -1
- package/dist/parseResponse.d.ts +1 -1
- package/dist/parseResponse.js +15 -8
- package/dist/parseResponse.js.map +1 -1
- package/dist/parseResponseToStream.d.ts +2 -1
- package/dist/parseResponseToStream.js.map +1 -1
- package/dist/parseStreamInWorker.node.d.ts +2 -0
- package/dist/parseStreamInWorker.web.d.ts +2 -0
- package/dist/parseString.d.ts +31 -0
- package/dist/parseString.js +27 -1
- package/dist/parseString.js.map +1 -1
- package/dist/parseStringInWorker.node.d.ts +2 -0
- package/dist/parseStringInWorker.web.d.ts +2 -0
- package/dist/parseStringInWorkerWASM.node.d.ts +2 -0
- package/dist/parseStringInWorkerWASM.web.d.ts +2 -0
- package/dist/parseStringStream.d.ts +43 -1
- package/dist/parseStringStream.js +24 -3
- package/dist/parseStringStream.js.map +1 -1
- package/dist/parseStringStreamToStream.js.map +1 -1
- package/dist/parseStringToArraySync.js.map +1 -1
- package/dist/parseStringToArraySyncWASM.js.map +1 -1
- package/dist/parseStringToIterableIterator.js.map +1 -1
- package/dist/parseStringToStream.js.map +1 -1
- package/dist/parseUint8ArrayStream.d.ts +4 -3
- package/dist/parseUint8ArrayStream.js +24 -3
- package/dist/parseUint8ArrayStream.js.map +1 -1
- package/dist/parseUint8ArrayStreamInWorker.node.d.ts +2 -0
- package/dist/parseUint8ArrayStreamInWorker.web.d.ts +2 -0
- package/dist/parseUint8ArrayStreamToStream.d.ts +2 -1
- package/dist/parseUint8ArrayStreamToStream.js +11 -5
- package/dist/parseUint8ArrayStreamToStream.js.map +1 -1
- package/dist/utils/convertBinaryToString.js.map +1 -1
- package/dist/utils/convertIterableIteratorToAsync.js.map +1 -1
- package/dist/utils/convertStreamToAsyncIterableIterator.js +2 -2
- package/dist/utils/convertStreamToAsyncIterableIterator.js.map +1 -1
- package/dist/utils/convertThisAsyncIterableIteratorToArray.d.ts +1 -1
- package/dist/utils/convertThisAsyncIterableIteratorToArray.js.map +1 -1
- package/dist/utils/escapeRegExp.js.map +1 -1
- package/dist/utils/parseMime.js.map +1 -1
- package/dist/utils/pipeline.js.map +1 -1
- package/dist/web-csv-toolbox.d.ts +4 -0
- package/dist/web-csv-toolbox.js +3 -0
- package/dist/web-csv-toolbox.js.map +1 -1
- package/dist/web_csv_toolbox_wasm_bg.wasm +0 -0
- package/dist/worker.node.d.ts +1 -0
- package/dist/worker.web.d.ts +1 -0
- package/package.json +53 -10
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV stream in Worker thread (Browser/Deno).
|
|
5
|
+
* Uses Transferable Streams for zero-copy transfer.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
* @param stream CSV string stream to parse
|
|
9
|
+
* @param options Parsing options
|
|
10
|
+
* @returns Async iterable iterator of records
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseStreamInWorker<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(stream: ReadableStream<string>, options?: ParseOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseStreamInWorker(stream, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseStream",
|
|
15
|
+
data: stream,
|
|
16
|
+
options: serializeOptions(options)
|
|
17
|
+
},
|
|
18
|
+
options,
|
|
19
|
+
[stream]
|
|
20
|
+
// Transfer stream
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { parseStreamInWorker };
|
|
25
|
+
//# sourceMappingURL=parseStreamInWorker.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStreamInWorker.web.js","sources":["../../../src/execution/worker/parseStreamInWorker.web.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { convertStreamToAsyncIterableIterator } from \"../../utils/convertStreamToAsyncIterableIterator.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV stream in Worker thread (Browser/Deno).\n * Uses Transferable Streams for zero-copy transfer.\n *\n * @internal\n * @param stream CSV string stream to parse\n * @param options Parsing options\n * @returns Async iterable iterator of records\n */\nexport async function* parseStreamInWorker<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n stream: ReadableStream<string>,\n options?: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseStream\",\n data: stream,\n options: serializeOptions(options),\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n [stream], // Transfer stream\n );\n}\n"],"names":[],"mappings":";;;;AAoBA,gBAAuB,mBAAA,CAKrB,QACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO;AAAA,KACnC;AAAA,IACA,OAAA;AAAA,IACA,CAAC,MAAM;AAAA;AAAA,GACT;AACF;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV string in Worker thread (Node.js).
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
* @param csv CSV string to parse
|
|
8
|
+
* @param options Parsing options
|
|
9
|
+
* @returns Async iterable iterator of records
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseStringInWorker<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(csv: string, options?: ParseOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseStringInWorker(csv, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseString",
|
|
15
|
+
data: csv,
|
|
16
|
+
options: serializeOptions(options),
|
|
17
|
+
useWASM: false
|
|
18
|
+
},
|
|
19
|
+
options
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { parseStringInWorker };
|
|
24
|
+
//# sourceMappingURL=parseStringInWorker.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringInWorker.node.js","sources":["../../../src/execution/worker/parseStringInWorker.node.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV string in Worker thread (Node.js).\n *\n * @internal\n * @param csv CSV string to parse\n * @param options Parsing options\n * @returns Async iterable iterator of records\n */\nexport async function* parseStringInWorker<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options?: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseString\",\n data: csv,\n options: serializeOptions(options),\n useWASM: false,\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n );\n}\n"],"names":[],"mappings":";;;;AAkBA,gBAAuB,mBAAA,CAKrB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV string in Worker thread (Browser/Deno).
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
* @param csv CSV string to parse
|
|
8
|
+
* @param options Parsing options
|
|
9
|
+
* @returns Async iterable iterator of records
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseStringInWorker<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(csv: string, options?: ParseOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseStringInWorker(csv, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseString",
|
|
15
|
+
data: csv,
|
|
16
|
+
options: serializeOptions(options),
|
|
17
|
+
useWASM: false
|
|
18
|
+
},
|
|
19
|
+
options
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { parseStringInWorker };
|
|
24
|
+
//# sourceMappingURL=parseStringInWorker.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringInWorker.web.js","sources":["../../../src/execution/worker/parseStringInWorker.web.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV string in Worker thread (Browser/Deno).\n *\n * @internal\n * @param csv CSV string to parse\n * @param options Parsing options\n * @returns Async iterable iterator of records\n */\nexport async function* parseStringInWorker<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options?: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseString\",\n data: csv,\n options: serializeOptions(options),\n useWASM: false,\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n );\n}\n"],"names":[],"mappings":";;;;AAkBA,gBAAuB,mBAAA,CAKrB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV string in Worker thread using WASM (Node.js).
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseStringInWorkerWASM<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(csv: string, options?: ParseOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseStringInWorkerWASM(csv, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseString",
|
|
15
|
+
data: csv,
|
|
16
|
+
options: serializeOptions(options),
|
|
17
|
+
useWASM: true
|
|
18
|
+
},
|
|
19
|
+
options
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { parseStringInWorkerWASM };
|
|
24
|
+
//# sourceMappingURL=parseStringInWorkerWASM.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringInWorkerWASM.node.js","sources":["../../../src/execution/worker/parseStringInWorkerWASM.node.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV string in Worker thread using WASM (Node.js).\n *\n * @internal\n */\nexport async function* parseStringInWorkerWASM<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options?: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseString\",\n data: csv,\n options: serializeOptions(options),\n useWASM: true,\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n );\n}\n"],"names":[],"mappings":";;;;AAeA,gBAAuB,uBAAA,CAKrB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV string in Worker thread using WASM (Browser/Deno).
|
|
5
|
+
*
|
|
6
|
+
* @internal
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseStringInWorkerWASM<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(csv: string, options?: ParseOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseStringInWorkerWASM(csv, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseString",
|
|
15
|
+
data: csv,
|
|
16
|
+
options: serializeOptions(options),
|
|
17
|
+
useWASM: true
|
|
18
|
+
},
|
|
19
|
+
options
|
|
20
|
+
);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { parseStringInWorkerWASM };
|
|
24
|
+
//# sourceMappingURL=parseStringInWorkerWASM.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringInWorkerWASM.web.js","sources":["../../../src/execution/worker/parseStringInWorkerWASM.web.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV string in Worker thread using WASM (Browser/Deno).\n *\n * @internal\n */\nexport async function* parseStringInWorkerWASM<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options?: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseString\",\n data: csv,\n options: serializeOptions(options),\n useWASM: true,\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n );\n}\n"],"names":[],"mappings":";;;;AAeA,gBAAuB,uBAAA,CAKrB,KACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,GAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { CSVRecord, ParseBinaryOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV Uint8Array stream in Worker thread (Node.js).
|
|
5
|
+
* Collects stream into Uint8Array first, then sends to worker.
|
|
6
|
+
*
|
|
7
|
+
* Note: Node.js Worker Threads do not support ReadableStream transfer,
|
|
8
|
+
* so we collect the stream into an array first.
|
|
9
|
+
*
|
|
10
|
+
* @internal
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseUint8ArrayStreamInWorker<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(stream: ReadableStream<Uint8Array>, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
import { collectUint8ArrayStream } from './utils/streamCollector.node.js';
|
|
5
|
+
|
|
6
|
+
async function* parseUint8ArrayStreamInWorker(stream, options) {
|
|
7
|
+
const combined = await collectUint8ArrayStream(stream, options?.signal);
|
|
8
|
+
using session = await WorkerSession.create({
|
|
9
|
+
workerPool: options?.engine?.workerPool,
|
|
10
|
+
workerURL: options?.engine?.workerURL
|
|
11
|
+
});
|
|
12
|
+
yield* sendWorkerMessage(
|
|
13
|
+
session.getWorker(),
|
|
14
|
+
{
|
|
15
|
+
id: session.getNextRequestId(),
|
|
16
|
+
type: "parseBinary",
|
|
17
|
+
data: combined,
|
|
18
|
+
options: serializeOptions(options),
|
|
19
|
+
useWASM: false
|
|
20
|
+
},
|
|
21
|
+
options
|
|
22
|
+
);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export { parseUint8ArrayStreamInWorker };
|
|
26
|
+
//# sourceMappingURL=parseUint8ArrayStreamInWorker.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseUint8ArrayStreamInWorker.node.js","sources":["../../../src/execution/worker/parseUint8ArrayStreamInWorker.node.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\nimport { collectUint8ArrayStream } from \"./utils/streamCollector.node.ts\";\n\n/**\n * Parse CSV Uint8Array stream in Worker thread (Node.js).\n * Collects stream into Uint8Array first, then sends to worker.\n *\n * Note: Node.js Worker Threads do not support ReadableStream transfer,\n * so we collect the stream into an array first.\n *\n * @internal\n */\nexport async function* parseUint8ArrayStreamInWorker<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Node.js: Collect stream into Uint8Array first\n const combined = await collectUint8ArrayStream(stream, options?.signal);\n\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseBinary\",\n data: combined,\n options: serializeOptions(options),\n useWASM: false,\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n );\n}\n"],"names":[],"mappings":";;;;;AAoBA,gBAAuB,6BAAA,CAKrB,QACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,QAAA,GAAW,MAAM,uBAAA,CAAwB,MAAA,EAAQ,SAAS,MAAM,CAAA;AAEtE,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,IAAA,EAAM,QAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,MACjC,OAAA,EAAS;AAAA,KACX;AAAA,IACA;AAAA,GACF;AACF;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { CSVRecord, ParseBinaryOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV Uint8Array stream in Worker thread (Browser/Deno).
|
|
5
|
+
* Uses Transferable Streams for zero-copy transfer.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export declare function parseUint8ArrayStreamInWorker<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(stream: ReadableStream<Uint8Array>, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { WorkerSession } from './helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from './utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from './utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
async function* parseUint8ArrayStreamInWorker(stream, options) {
|
|
6
|
+
using session = await WorkerSession.create({
|
|
7
|
+
workerPool: options?.engine?.workerPool,
|
|
8
|
+
workerURL: options?.engine?.workerURL
|
|
9
|
+
});
|
|
10
|
+
yield* sendWorkerMessage(
|
|
11
|
+
session.getWorker(),
|
|
12
|
+
{
|
|
13
|
+
id: session.getNextRequestId(),
|
|
14
|
+
type: "parseUint8ArrayStream",
|
|
15
|
+
data: stream,
|
|
16
|
+
options: serializeOptions(options)
|
|
17
|
+
},
|
|
18
|
+
options,
|
|
19
|
+
[stream]
|
|
20
|
+
// Transfer stream
|
|
21
|
+
);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export { parseUint8ArrayStreamInWorker };
|
|
25
|
+
//# sourceMappingURL=parseUint8ArrayStreamInWorker.web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseUint8ArrayStreamInWorker.web.js","sources":["../../../src/execution/worker/parseUint8ArrayStreamInWorker.web.ts"],"sourcesContent":["import type {\n CSVRecord,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"../../constants.ts\";\nimport { convertStreamToAsyncIterableIterator } from \"../../utils/convertStreamToAsyncIterableIterator.ts\";\nimport { WorkerSession } from \"./helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"./utils/messageHandler.ts\";\nimport { serializeOptions } from \"./utils/serializeOptions.ts\";\n\n/**\n * Parse CSV Uint8Array stream in Worker thread (Browser/Deno).\n * Uses Transferable Streams for zero-copy transfer.\n *\n * @internal\n */\nexport async function* parseUint8ArrayStreamInWorker<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n using session = await WorkerSession.create({\n workerPool: options?.engine?.workerPool,\n workerURL: options?.engine?.workerURL,\n });\n\n yield* sendWorkerMessage<CSVRecord<Header>>(\n session.getWorker(),\n {\n id: session.getNextRequestId(),\n type: \"parseUint8ArrayStream\",\n data: stream,\n options: serializeOptions(options),\n },\n options as ParseOptions<Header> | ParseBinaryOptions<Header> | undefined,\n [stream], // Transfer stream\n );\n}\n"],"names":[],"mappings":";;;;AAiBA,gBAAuB,6BAAA,CAKrB,QACA,OAAA,EAC0C;AAC1C,EAAA,MAAM,OAAA,GAAU,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,IACzC,UAAA,EAAY,SAAS,MAAA,EAAQ,UAAA;AAAA,IAC7B,SAAA,EAAW,SAAS,MAAA,EAAQ;AAAA,GAC7B,CAAA;AAED,EAAA,OAAO,iBAAA;AAAA,IACL,QAAQ,SAAA,EAAU;AAAA,IAClB;AAAA,MACE,EAAA,EAAI,QAAQ,gBAAA,EAAiB;AAAA,MAC7B,IAAA,EAAM,uBAAA;AAAA,MACN,IAAA,EAAM,MAAA;AAAA,MACN,OAAA,EAAS,iBAAiB,OAAO;AAAA,KACnC;AAAA,IACA,OAAA;AAAA,IACA,CAAC,MAAM;AAAA;AAAA,GACT;AACF;;;;"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CSVBinary, ParseBinaryOptions, ParseOptions } from '../../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../../constants.ts';
|
|
3
|
+
import { InternalEngineConfig } from '../../InternalEngineConfig.ts';
|
|
4
|
+
import { WorkerSession } from '../helpers/WorkerSession.ts';
|
|
5
|
+
import { WorkerStrategy } from './WorkerStrategy.ts';
|
|
6
|
+
/**
|
|
7
|
+
* Message-based streaming strategy.
|
|
8
|
+
*
|
|
9
|
+
* Records are sent one-by-one via postMessage.
|
|
10
|
+
* This is the current implementation and works on all browsers including Safari.
|
|
11
|
+
*
|
|
12
|
+
* @internal
|
|
13
|
+
*/
|
|
14
|
+
export declare class MessageStreamingStrategy implements WorkerStrategy {
|
|
15
|
+
readonly name = "message-streaming";
|
|
16
|
+
execute<T, Header extends ReadonlyArray<string> = readonly string[], Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(input: string | CSVBinary | ReadableStream<string>, options: ParseOptions<Header, Delimiter, Quotation> | ParseBinaryOptions<Header, Delimiter, Quotation> | undefined, session: WorkerSession | null, engineConfig: InternalEngineConfig): AsyncIterableIterator<T>;
|
|
17
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { WorkerSession } from '../helpers/WorkerSession.js';
|
|
2
|
+
import { sendWorkerMessage } from '../utils/messageHandler.js';
|
|
3
|
+
import { serializeOptions } from '../utils/serializeOptions.js';
|
|
4
|
+
|
|
5
|
+
class MessageStreamingStrategy {
|
|
6
|
+
name = "message-streaming";
|
|
7
|
+
async *execute(input, options, session, engineConfig) {
|
|
8
|
+
const useProvidedSession = session !== null;
|
|
9
|
+
const workerSession = session ?? await WorkerSession.create({
|
|
10
|
+
workerPool: engineConfig.workerPool,
|
|
11
|
+
workerURL: engineConfig.workerURL
|
|
12
|
+
});
|
|
13
|
+
try {
|
|
14
|
+
const worker = workerSession.getWorker();
|
|
15
|
+
const id = workerSession.getNextRequestId();
|
|
16
|
+
let type;
|
|
17
|
+
let data;
|
|
18
|
+
let transfer;
|
|
19
|
+
if (typeof input === "string") {
|
|
20
|
+
type = "parseString";
|
|
21
|
+
data = input;
|
|
22
|
+
} else if (input instanceof ReadableStream) {
|
|
23
|
+
throw new Error(
|
|
24
|
+
"Message-streaming strategy does not support ReadableStream. Use stream-transfer strategy or process in main thread."
|
|
25
|
+
);
|
|
26
|
+
} else if (input instanceof Uint8Array || input instanceof ArrayBuffer) {
|
|
27
|
+
type = "parseBinary";
|
|
28
|
+
data = input;
|
|
29
|
+
if (input instanceof Uint8Array) {
|
|
30
|
+
transfer = [input.buffer];
|
|
31
|
+
} else {
|
|
32
|
+
transfer = [input];
|
|
33
|
+
}
|
|
34
|
+
} else {
|
|
35
|
+
throw new Error(`Unsupported input type: ${typeof input}`);
|
|
36
|
+
}
|
|
37
|
+
yield* sendWorkerMessage(
|
|
38
|
+
worker,
|
|
39
|
+
{
|
|
40
|
+
id,
|
|
41
|
+
type,
|
|
42
|
+
data,
|
|
43
|
+
options: serializeOptions(options),
|
|
44
|
+
useWASM: engineConfig.hasWasm()
|
|
45
|
+
},
|
|
46
|
+
options,
|
|
47
|
+
transfer
|
|
48
|
+
);
|
|
49
|
+
} finally {
|
|
50
|
+
if (!useProvidedSession) {
|
|
51
|
+
workerSession[Symbol.dispose]();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
export { MessageStreamingStrategy };
|
|
58
|
+
//# sourceMappingURL=MessageStreamingStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MessageStreamingStrategy.js","sources":["../../../../src/execution/worker/strategies/MessageStreamingStrategy.ts"],"sourcesContent":["import type {\n CSVBinary,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../../common/types.ts\";\nimport type {\n DEFAULT_DELIMITER,\n DEFAULT_QUOTATION,\n} from \"../../../constants.ts\";\nimport type { InternalEngineConfig } from \"../../InternalEngineConfig.ts\";\nimport { WorkerSession } from \"../helpers/WorkerSession.ts\";\nimport { sendWorkerMessage } from \"../utils/messageHandler.ts\";\nimport { serializeOptions } from \"../utils/serializeOptions.ts\";\nimport type { WorkerStrategy } from \"./WorkerStrategy.ts\";\n\n/**\n * Message-based streaming strategy.\n *\n * Records are sent one-by-one via postMessage.\n * This is the current implementation and works on all browsers including Safari.\n *\n * @internal\n */\nexport class MessageStreamingStrategy implements WorkerStrategy {\n readonly name = \"message-streaming\";\n\n async *execute<\n T,\n Header extends ReadonlyArray<string> = readonly string[],\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n >(\n input: string | CSVBinary | ReadableStream<string>,\n options:\n | ParseOptions<Header, Delimiter, Quotation>\n | ParseBinaryOptions<Header, Delimiter, Quotation>\n | undefined,\n session: WorkerSession | null,\n engineConfig: InternalEngineConfig,\n ): AsyncIterableIterator<T> {\n // Use provided session or create a new one\n const useProvidedSession = session !== null;\n const workerSession =\n session ??\n (await WorkerSession.create({\n workerPool: engineConfig.workerPool,\n workerURL: engineConfig.workerURL,\n }));\n\n try {\n const worker = workerSession.getWorker();\n const id = workerSession.getNextRequestId();\n\n // Determine message type based on input\n let type: string;\n let data: string | CSVBinary;\n let transfer: Transferable[] | undefined;\n\n if (typeof input === \"string\") {\n type = \"parseString\";\n data = input;\n } else if (input instanceof ReadableStream) {\n // Message-streaming strategy does not support ReadableStream\n // ReadableStream cannot be cloned via postMessage without transferring\n // This should fallback to main thread or use stream-transfer strategy\n throw new Error(\n \"Message-streaming strategy does not support ReadableStream. \" +\n \"Use stream-transfer strategy or process in main thread.\",\n );\n } else if (input instanceof Uint8Array || input instanceof ArrayBuffer) {\n type = \"parseBinary\";\n data = input;\n // Transfer binary data for efficiency\n if (input instanceof Uint8Array) {\n transfer = [input.buffer];\n } else {\n transfer = [input];\n }\n } else {\n throw new Error(`Unsupported input type: ${typeof input}`);\n }\n\n // Send message and yield results\n yield* sendWorkerMessage<T>(\n worker,\n {\n id,\n type,\n data,\n options: serializeOptions(options),\n useWASM: engineConfig.hasWasm(),\n },\n options as\n | ParseOptions<Header>\n | ParseBinaryOptions<Header>\n | undefined,\n transfer,\n );\n } finally {\n // Dispose session only if we created it\n if (!useProvidedSession) {\n workerSession[Symbol.dispose]();\n }\n }\n }\n}\n"],"names":[],"mappings":";;;;AAuBO,MAAM,wBAAA,CAAmD;AAAA,EACrD,IAAA,GAAO,mBAAA;AAAA,EAEhB,OAAO,OAAA,CAML,KAAA,EACA,OAAA,EAIA,SACA,YAAA,EAC0B;AAE1B,IAAA,MAAM,qBAAqB,OAAA,KAAY,IAAA;AACvC,IAAA,MAAM,aAAA,GACJ,OAAA,IACC,MAAM,aAAA,CAAc,MAAA,CAAO;AAAA,MAC1B,YAAY,YAAA,CAAa,UAAA;AAAA,MACzB,WAAW,YAAA,CAAa;AAAA,KACzB,CAAA;AAEH,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,cAAc,SAAA,EAAU;AACvC,MAAA,MAAM,EAAA,GAAK,cAAc,gBAAA,EAAiB;AAG1C,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,IAAA;AACJ,MAAA,IAAI,QAAA;AAEJ,MAAA,IAAI,OAAO,UAAU,QAAA,EAAU;AAC7B,QAAA,IAAA,GAAO,aAAA;AACP,QAAA,IAAA,GAAO,KAAA;AAAA,MACT,CAAA,MAAA,IAAW,iBAAiB,cAAA,EAAgB;AAI1C,QAAA,MAAM,IAAI,KAAA;AAAA,UACR;AAAA,SAEF;AAAA,MACF,CAAA,MAAA,IAAW,KAAA,YAAiB,UAAA,IAAc,KAAA,YAAiB,WAAA,EAAa;AACtE,QAAA,IAAA,GAAO,aAAA;AACP,QAAA,IAAA,GAAO,KAAA;AAEP,QAAA,IAAI,iBAAiB,UAAA,EAAY;AAC/B,UAAA,QAAA,GAAW,CAAC,MAAM,MAAM,CAAA;AAAA,QAC1B,CAAA,MAAO;AACL,UAAA,QAAA,GAAW,CAAC,KAAK,CAAA;AAAA,QACnB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,KAAA,CAAM,CAAA,wBAAA,EAA2B,OAAO,KAAK,CAAA,CAAE,CAAA;AAAA,MAC3D;AAGA,MAAA,OAAO,iBAAA;AAAA,QACL,MAAA;AAAA,QACA;AAAA,UACE,EAAA;AAAA,UACA,IAAA;AAAA,UACA,IAAA;AAAA,UACA,OAAA,EAAS,iBAAiB,OAAO,CAAA;AAAA,UACjC,OAAA,EAAS,aAAa,OAAA;AAAQ,SAChC;AAAA,QACA,OAAA;AAAA,QAIA;AAAA,OACF;AAAA,IACF,CAAA,SAAE;AAEA,MAAA,IAAI,CAAC,kBAAA,EAAoB;AACvB,QAAA,aAAA,CAAc,MAAA,CAAO,OAAO,CAAA,EAAE;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACF;;;;"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { CSVBinary, ParseBinaryOptions, ParseOptions } from '../../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../../constants.ts';
|
|
3
|
+
import { InternalEngineConfig } from '../../InternalEngineConfig.ts';
|
|
4
|
+
import { WorkerSession } from '../helpers/WorkerSession.ts';
|
|
5
|
+
import { WorkerStrategy } from './WorkerStrategy.ts';
|
|
6
|
+
/**
|
|
7
|
+
* TransferableStream-based strategy.
|
|
8
|
+
*
|
|
9
|
+
* Streams are transferred directly to the worker using zero-copy transfer.
|
|
10
|
+
* This is more efficient than message-streaming but only supported in
|
|
11
|
+
* Chrome, Firefox, and Edge (not Safari).
|
|
12
|
+
*
|
|
13
|
+
* @internal
|
|
14
|
+
*/
|
|
15
|
+
export declare class TransferableStreamStrategy implements WorkerStrategy {
|
|
16
|
+
readonly name = "stream-transfer";
|
|
17
|
+
execute<T, Header extends ReadonlyArray<string> = readonly string[], Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(input: string | CSVBinary | ReadableStream<string>, options: ParseOptions<Header, Delimiter, Quotation> | ParseBinaryOptions<Header, Delimiter, Quotation> | undefined, session: WorkerSession | null, engineConfig: InternalEngineConfig): AsyncIterableIterator<T>;
|
|
18
|
+
/**
|
|
19
|
+
* Receive parsed records from the worker via MessageChannel.
|
|
20
|
+
*
|
|
21
|
+
* @param port - MessagePort to receive results from
|
|
22
|
+
* @param signal - Optional AbortSignal for cancellation
|
|
23
|
+
*/
|
|
24
|
+
private receiveResults;
|
|
25
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { WorkerSession } from '../helpers/WorkerSession.js';
|
|
2
|
+
import { serializeOptions } from '../utils/serializeOptions.js';
|
|
3
|
+
|
|
4
|
+
class TransferableStreamStrategy {
|
|
5
|
+
name = "stream-transfer";
|
|
6
|
+
async *execute(input, options, session, engineConfig) {
|
|
7
|
+
const useProvidedSession = session !== null;
|
|
8
|
+
const workerSession = session ?? await WorkerSession.create({
|
|
9
|
+
workerPool: engineConfig.workerPool,
|
|
10
|
+
workerURL: engineConfig.workerURL
|
|
11
|
+
});
|
|
12
|
+
try {
|
|
13
|
+
const worker = workerSession.getWorker();
|
|
14
|
+
const id = workerSession.getNextRequestId();
|
|
15
|
+
if (!(input instanceof ReadableStream)) {
|
|
16
|
+
throw new Error(
|
|
17
|
+
`TransferableStreamStrategy requires ReadableStream input, got ${typeof input}`
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
let type;
|
|
21
|
+
let streamToTransfer;
|
|
22
|
+
const reader = input.getReader();
|
|
23
|
+
const firstChunk = await reader.read();
|
|
24
|
+
if (firstChunk.done) {
|
|
25
|
+
reader.releaseLock();
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const reconstructedStream = new ReadableStream({
|
|
29
|
+
start(controller) {
|
|
30
|
+
controller.enqueue(firstChunk.value);
|
|
31
|
+
},
|
|
32
|
+
pull(controller) {
|
|
33
|
+
reader.read().then(({ done, value }) => {
|
|
34
|
+
if (done) {
|
|
35
|
+
controller.close();
|
|
36
|
+
} else {
|
|
37
|
+
controller.enqueue(value);
|
|
38
|
+
}
|
|
39
|
+
}).catch((error) => controller.error(error));
|
|
40
|
+
},
|
|
41
|
+
cancel(reason) {
|
|
42
|
+
reader.cancel(reason);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
if (typeof firstChunk.value === "string") {
|
|
46
|
+
type = "parseStringStream";
|
|
47
|
+
streamToTransfer = reconstructedStream;
|
|
48
|
+
} else if (firstChunk.value instanceof Uint8Array) {
|
|
49
|
+
type = "parseUint8ArrayStream";
|
|
50
|
+
streamToTransfer = reconstructedStream;
|
|
51
|
+
} else {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Unsupported stream chunk type: ${typeof firstChunk.value}`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
56
|
+
const channel = new MessageChannel();
|
|
57
|
+
const resultPort = channel.port1;
|
|
58
|
+
const workerPort = channel.port2;
|
|
59
|
+
worker.postMessage(
|
|
60
|
+
{
|
|
61
|
+
id,
|
|
62
|
+
type,
|
|
63
|
+
stream: streamToTransfer,
|
|
64
|
+
options: serializeOptions(options),
|
|
65
|
+
useWASM: engineConfig.hasWasm(),
|
|
66
|
+
resultPort: workerPort
|
|
67
|
+
},
|
|
68
|
+
[streamToTransfer, workerPort]
|
|
69
|
+
);
|
|
70
|
+
yield* this.receiveResults(resultPort, options?.signal);
|
|
71
|
+
} finally {
|
|
72
|
+
if (!useProvidedSession) {
|
|
73
|
+
workerSession[Symbol.dispose]();
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Receive parsed records from the worker via MessageChannel.
|
|
79
|
+
*
|
|
80
|
+
* @param port - MessagePort to receive results from
|
|
81
|
+
* @param signal - Optional AbortSignal for cancellation
|
|
82
|
+
*/
|
|
83
|
+
async *receiveResults(port, signal) {
|
|
84
|
+
const queue = [];
|
|
85
|
+
let done = false;
|
|
86
|
+
let error = null;
|
|
87
|
+
let resolveNext = null;
|
|
88
|
+
const abortHandler = () => {
|
|
89
|
+
error = new Error("Aborted");
|
|
90
|
+
if (resolveNext) resolveNext();
|
|
91
|
+
port.close();
|
|
92
|
+
};
|
|
93
|
+
if (signal) {
|
|
94
|
+
if (signal.aborted) {
|
|
95
|
+
port.close();
|
|
96
|
+
throw new Error("Aborted");
|
|
97
|
+
}
|
|
98
|
+
signal.addEventListener("abort", abortHandler);
|
|
99
|
+
}
|
|
100
|
+
port.onmessage = (event) => {
|
|
101
|
+
const message = event.data;
|
|
102
|
+
if (message.type === "record") {
|
|
103
|
+
queue.push(message.record);
|
|
104
|
+
if (resolveNext) {
|
|
105
|
+
resolveNext();
|
|
106
|
+
resolveNext = null;
|
|
107
|
+
}
|
|
108
|
+
} else if (message.type === "done") {
|
|
109
|
+
done = true;
|
|
110
|
+
if (resolveNext) {
|
|
111
|
+
resolveNext();
|
|
112
|
+
resolveNext = null;
|
|
113
|
+
}
|
|
114
|
+
port.close();
|
|
115
|
+
} else if (message.type === "error") {
|
|
116
|
+
error = new Error(message.error);
|
|
117
|
+
if (resolveNext) {
|
|
118
|
+
resolveNext();
|
|
119
|
+
resolveNext = null;
|
|
120
|
+
}
|
|
121
|
+
port.close();
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
port.onmessageerror = (event) => {
|
|
125
|
+
error = new Error(`Message deserialization error: ${event.data}`);
|
|
126
|
+
if (resolveNext) {
|
|
127
|
+
resolveNext();
|
|
128
|
+
resolveNext = null;
|
|
129
|
+
}
|
|
130
|
+
port.close();
|
|
131
|
+
};
|
|
132
|
+
port.start();
|
|
133
|
+
try {
|
|
134
|
+
while (!done && !error) {
|
|
135
|
+
if (queue.length > 0) {
|
|
136
|
+
yield queue.shift();
|
|
137
|
+
} else {
|
|
138
|
+
await new Promise((resolve) => {
|
|
139
|
+
resolveNext = resolve;
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
while (queue.length > 0) {
|
|
144
|
+
yield queue.shift();
|
|
145
|
+
}
|
|
146
|
+
if (error) {
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
149
|
+
} finally {
|
|
150
|
+
if (signal) {
|
|
151
|
+
signal.removeEventListener("abort", abortHandler);
|
|
152
|
+
}
|
|
153
|
+
port.close();
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
export { TransferableStreamStrategy };
|
|
159
|
+
//# sourceMappingURL=TransferableStreamStrategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransferableStreamStrategy.js","sources":["../../../../src/execution/worker/strategies/TransferableStreamStrategy.ts"],"sourcesContent":["import type {\n CSVBinary,\n ParseBinaryOptions,\n ParseOptions,\n} from \"../../../common/types.ts\";\nimport type {\n DEFAULT_DELIMITER,\n DEFAULT_QUOTATION,\n} from \"../../../constants.ts\";\nimport type { InternalEngineConfig } from \"../../InternalEngineConfig.ts\";\nimport { WorkerSession } from \"../helpers/WorkerSession.ts\";\nimport { serializeOptions } from \"../utils/serializeOptions.ts\";\nimport type { WorkerStrategy } from \"./WorkerStrategy.ts\";\n\n/**\n * TransferableStream-based strategy.\n *\n * Streams are transferred directly to the worker using zero-copy transfer.\n * This is more efficient than message-streaming but only supported in\n * Chrome, Firefox, and Edge (not Safari).\n *\n * @internal\n */\nexport class TransferableStreamStrategy implements WorkerStrategy {\n readonly name = \"stream-transfer\";\n\n async *execute<\n T,\n Header extends ReadonlyArray<string> = readonly string[],\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n >(\n input: string | CSVBinary | ReadableStream<string>,\n options:\n | ParseOptions<Header, Delimiter, Quotation>\n | ParseBinaryOptions<Header, Delimiter, Quotation>\n | undefined,\n session: WorkerSession | null,\n engineConfig: InternalEngineConfig,\n ): AsyncIterableIterator<T> {\n // Use provided session or create a new one\n const useProvidedSession = session !== null;\n const workerSession =\n session ??\n (await WorkerSession.create({\n workerPool: engineConfig.workerPool,\n workerURL: engineConfig.workerURL,\n }));\n\n try {\n const worker = workerSession.getWorker();\n const id = workerSession.getNextRequestId();\n\n // Ensure input is a ReadableStream\n if (!(input instanceof ReadableStream)) {\n throw new Error(\n `TransferableStreamStrategy requires ReadableStream input, got ${typeof input}`,\n );\n }\n\n // Determine stream type based on the input stream\n let type: string;\n let streamToTransfer: ReadableStream;\n\n // Check if this is a string stream or binary stream\n // We need to inspect the stream to determine type\n // For now, we'll use heuristics based on common stream types\n const reader = input.getReader();\n const firstChunk = await reader.read();\n\n if (firstChunk.done) {\n // Empty stream - release the reader and return\n reader.releaseLock();\n return;\n }\n\n // Put the first chunk back by creating a new stream\n const reconstructedStream = new ReadableStream({\n start(controller) {\n controller.enqueue(firstChunk.value);\n },\n pull(controller) {\n reader\n .read()\n .then(({ done, value }) => {\n if (done) {\n controller.close();\n } else {\n controller.enqueue(value);\n }\n })\n .catch((error) => controller.error(error));\n },\n cancel(reason) {\n reader.cancel(reason);\n },\n });\n\n // Determine type based on first chunk\n if (typeof firstChunk.value === \"string\") {\n type = \"parseStringStream\";\n streamToTransfer = reconstructedStream;\n } else if (firstChunk.value instanceof Uint8Array) {\n type = \"parseUint8ArrayStream\";\n streamToTransfer = reconstructedStream;\n } else {\n throw new Error(\n `Unsupported stream chunk type: ${typeof firstChunk.value}`,\n );\n }\n\n // Create a MessageChannel for receiving results\n const channel = new MessageChannel();\n const resultPort = channel.port1;\n const workerPort = channel.port2;\n\n // Send the stream and worker port to the worker\n worker.postMessage(\n {\n id,\n type,\n stream: streamToTransfer,\n options: serializeOptions(options),\n useWASM: engineConfig.hasWasm(),\n resultPort: workerPort,\n },\n [streamToTransfer as any, workerPort],\n );\n\n // Listen for results from the worker\n yield* this.receiveResults<T>(resultPort, options?.signal);\n } finally {\n // Dispose session only if we created it\n if (!useProvidedSession) {\n workerSession[Symbol.dispose]();\n }\n }\n }\n\n /**\n * Receive parsed records from the worker via MessageChannel.\n *\n * @param port - MessagePort to receive results from\n * @param signal - Optional AbortSignal for cancellation\n */\n private async *receiveResults<T>(\n port: MessagePort,\n signal?: AbortSignal,\n ): AsyncIterableIterator<T> {\n const queue: T[] = [];\n let done = false;\n let error: Error | null = null;\n let resolveNext: (() => void) | null = null;\n\n // Set up abort handling\n const abortHandler = () => {\n error = new Error(\"Aborted\");\n if (resolveNext) resolveNext();\n port.close();\n };\n\n if (signal) {\n if (signal.aborted) {\n port.close();\n throw new Error(\"Aborted\");\n }\n signal.addEventListener(\"abort\", abortHandler);\n }\n\n // Set up message handler\n port.onmessage = (event: MessageEvent) => {\n const message = event.data;\n\n if (message.type === \"record\") {\n queue.push(message.record);\n if (resolveNext) {\n resolveNext();\n resolveNext = null;\n }\n } else if (message.type === \"done\") {\n done = true;\n if (resolveNext) {\n resolveNext();\n resolveNext = null;\n }\n port.close();\n } else if (message.type === \"error\") {\n error = new Error(message.error);\n if (resolveNext) {\n resolveNext();\n resolveNext = null;\n }\n port.close();\n }\n };\n\n port.onmessageerror = (event: MessageEvent) => {\n error = new Error(`Message deserialization error: ${event.data}`);\n if (resolveNext) {\n resolveNext();\n resolveNext = null;\n }\n port.close();\n };\n\n // Start the port\n port.start();\n\n try {\n // Yield records as they arrive\n while (!done && !error) {\n if (queue.length > 0) {\n yield queue.shift()!;\n } else {\n // Wait for next message\n await new Promise<void>((resolve) => {\n resolveNext = resolve;\n });\n }\n }\n\n // Yield any remaining records\n while (queue.length > 0) {\n yield queue.shift()!;\n }\n\n // Throw error if one occurred\n if (error) {\n throw error;\n }\n } finally {\n if (signal) {\n signal.removeEventListener(\"abort\", abortHandler);\n }\n port.close();\n }\n }\n}\n"],"names":[],"mappings":"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"}
|