web-csv-toolbox 0.13.0-next-bd865d6ddb1cf9691d7b9a83d0790651f074dd47 → 0.13.0-next-b21b6d89a7a3f18dcbf79ec04ffefde0d7ff4c4c
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 +132 -6
- package/dist/CSVLexer.js.map +1 -1
- package/dist/CSVLexerTransformer.d.ts +52 -3
- package/dist/CSVLexerTransformer.js +58 -13
- package/dist/CSVLexerTransformer.js.map +1 -1
- package/dist/CSVRecordAssembler.js.map +1 -1
- package/dist/CSVRecordAssemblerTransformer.d.ts +49 -3
- package/dist/CSVRecordAssemblerTransformer.js +55 -18
- 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 +336 -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 @@
|
|
|
1
|
+
{"version":3,"file":"EnginePresets.js","sources":["../../src/execution/EnginePresets.ts"],"sourcesContent":["import type { EngineConfig, EngineFallbackInfo } from \"../common/types.ts\";\nimport type { WorkerPool } from \"./worker/helpers/WorkerPool.ts\";\n\n/**\n * Options for customizing engine presets.\n */\nexport interface EnginePresetOptions {\n /**\n * Worker pool for managing worker lifecycle.\n * Reuse workers across multiple parse operations.\n */\n workerPool?: WorkerPool;\n\n /**\n * Custom worker URL.\n * Use a custom worker script instead of the bundled worker.\n */\n workerURL?: string | URL;\n\n /**\n * Callback for fallback notifications.\n * Called when the engine falls back to a less optimal strategy.\n */\n onFallback?: (info: EngineFallbackInfo) => void;\n}\n\n/**\n * Predefined engine configuration presets for common use cases.\n *\n * All presets are functions that optionally accept configuration options.\n *\n * @example Basic usage\n * ```ts\n * import { parseString, EnginePresets } from 'web-csv-toolbox';\n *\n * // Use fastest available execution method\n * for await (const record of parseString(csv, {\n * engine: EnginePresets.fastest()\n * })) {\n * console.log(record);\n * }\n * ```\n *\n * @example With WorkerPool\n * ```ts\n * import { parseString, EnginePresets, WorkerPool } from 'web-csv-toolbox';\n *\n * const pool = new WorkerPool({ maxWorkers: 4 });\n *\n * for await (const record of parseString(csv, {\n * engine: EnginePresets.fastest({ workerPool: pool })\n * })) {\n * console.log(record);\n * }\n * ```\n */\nexport const EnginePresets = Object.freeze({\n /**\n * Main thread execution (default).\n * - No worker overhead\n * - Synchronous execution on main thread\n * - Best for small files (< 1MB)\n *\n * @param options - Configuration options (not used for main thread)\n * @returns Engine configuration\n */\n mainThread: (options?: EnginePresetOptions): EngineConfig => ({\n worker: false,\n wasm: false,\n ...options,\n }),\n\n /**\n * Worker execution with message streaming.\n * - Offloads parsing to worker thread\n * - Records sent via postMessage\n * - Works on all browsers including Safari\n * - Best for medium files (1-10MB)\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n worker: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: false,\n workerStrategy: \"message-streaming\",\n ...options,\n }),\n\n /**\n * Worker execution with stream transfer (zero-copy).\n * - Offloads parsing to worker thread\n * - Streams transferred directly (zero-copy)\n * - Only works on Chrome, Firefox, Edge (not Safari)\n * - Best for large streaming files (> 10MB)\n * - Automatically falls back to message-streaming if not supported\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n workerStreamTransfer: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: false,\n workerStrategy: \"stream-transfer\",\n ...options,\n }),\n\n /**\n * WebAssembly execution on main thread.\n * - Fast parsing with WASM\n * - Runs on main thread\n * - Limited to UTF-8 encoding and double-quote (\")\n * - Best for medium-sized UTF-8 files (1-10MB)\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n wasm: (options?: EnginePresetOptions): EngineConfig => ({\n worker: false,\n wasm: true,\n ...options,\n }),\n\n /**\n * Worker + WASM execution.\n * - Combines worker offloading with WASM speed\n * - Best for large UTF-8 files (> 10MB)\n * - Limited to UTF-8 encoding and double-quote (\")\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n workerWasm: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: true,\n workerStrategy: \"message-streaming\",\n ...options,\n }),\n\n /**\n * Fastest available method.\n * Automatically selects the best execution strategy:\n * - For streams: Worker with stream-transfer (falls back to message-streaming)\n * - For strings/binary: Worker + WASM\n * - For all inputs: Offloads to worker for better performance\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n fastest: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: true,\n workerStrategy: \"stream-transfer\",\n ...options,\n }),\n\n /**\n * Balanced configuration for production use.\n * - Worker execution for offloading\n * - No WASM (broader encoding support)\n * - Stream-transfer with automatic fallback\n * - Works with all encodings\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n balanced: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: false,\n workerStrategy: \"stream-transfer\",\n ...options,\n }),\n\n /**\n * Strict mode: no automatic fallbacks.\n * - Throws errors instead of falling back to main thread\n * - Useful for testing or when you need guaranteed execution mode\n *\n * @param options - Configuration options\n * @returns Engine configuration\n */\n strict: (options?: EnginePresetOptions): EngineConfig => ({\n worker: true,\n wasm: false,\n workerStrategy: \"stream-transfer\",\n strict: true,\n ...options,\n }),\n} as const);\n\n/**\n * Type for engine preset names.\n */\nexport type EnginePresetName = keyof typeof EnginePresets;\n"],"names":[],"mappings":"AAwDO,MAAM,aAAA,GAAgB,OAAO,MAAA,CAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUzC,UAAA,EAAY,CAAC,OAAA,MAAiD;AAAA,IAC5D,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,MAAA,EAAQ,CAAC,OAAA,MAAiD;AAAA,IACxD,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,cAAA,EAAgB,mBAAA;AAAA,IAChB,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAaA,oBAAA,EAAsB,CAAC,OAAA,MAAiD;AAAA,IACtE,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,cAAA,EAAgB,iBAAA;AAAA,IAChB,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAA,EAAM,CAAC,OAAA,MAAiD;AAAA,IACtD,MAAA,EAAQ,KAAA;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWA,UAAA,EAAY,CAAC,OAAA,MAAiD;AAAA,IAC5D,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,cAAA,EAAgB,mBAAA;AAAA,IAChB,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,OAAA,EAAS,CAAC,OAAA,MAAiD;AAAA,IACzD,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,IAAA;AAAA,IACN,cAAA,EAAgB,iBAAA;AAAA,IAChB,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,QAAA,EAAU,CAAC,OAAA,MAAiD;AAAA,IAC1D,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,cAAA,EAAgB,iBAAA;AAAA,IAChB,GAAG;AAAA,GACL,CAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAA,EAAQ,CAAC,OAAA,MAAiD;AAAA,IACxD,MAAA,EAAQ,IAAA;AAAA,IACR,IAAA,EAAM,KAAA;AAAA,IACN,cAAA,EAAgB,iBAAA;AAAA,IAChB,MAAA,EAAQ,IAAA;AAAA,IACR,GAAG;AAAA,GACL;AACF,CAAU;;;;"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { EngineConfig, EngineFallbackInfo, WorkerCommunicationStrategy } from '../common/types.ts';
|
|
2
|
+
import { WorkerPool } from './worker/helpers/WorkerPool.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Engine flags bitmask (internal use).
|
|
5
|
+
* @internal
|
|
6
|
+
*/
|
|
7
|
+
export declare enum EngineFlags {
|
|
8
|
+
WORKER = 1,// 0b00001 = 1
|
|
9
|
+
WASM = 2,// 0b00010 = 2
|
|
10
|
+
STREAM_TRANSFER = 4,// 0b00100 = 4
|
|
11
|
+
MESSAGE_STREAMING = 8,// 0b01000 = 8
|
|
12
|
+
STRICT = 16
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Internal engine configuration manager.
|
|
16
|
+
*
|
|
17
|
+
* Manages engine configuration using bitmask for efficient flag operations.
|
|
18
|
+
*
|
|
19
|
+
* @internal
|
|
20
|
+
*/
|
|
21
|
+
export declare class InternalEngineConfig {
|
|
22
|
+
private bitmask;
|
|
23
|
+
readonly workerURL?: string | URL;
|
|
24
|
+
readonly workerPool?: WorkerPool;
|
|
25
|
+
readonly onFallback?: (info: EngineFallbackInfo) => void;
|
|
26
|
+
constructor(config?: EngineConfig);
|
|
27
|
+
/**
|
|
28
|
+
* Private constructor for cloning.
|
|
29
|
+
*/
|
|
30
|
+
private static fromBitmask;
|
|
31
|
+
private parse;
|
|
32
|
+
private applyDefaults;
|
|
33
|
+
private validate;
|
|
34
|
+
/**
|
|
35
|
+
* Check if a flag is set.
|
|
36
|
+
*/
|
|
37
|
+
private hasFlag;
|
|
38
|
+
/**
|
|
39
|
+
* Add a flag.
|
|
40
|
+
*/
|
|
41
|
+
private addFlag;
|
|
42
|
+
/**
|
|
43
|
+
* Remove a flag.
|
|
44
|
+
*/
|
|
45
|
+
private removeFlag;
|
|
46
|
+
/**
|
|
47
|
+
* Check if worker execution is enabled.
|
|
48
|
+
*/
|
|
49
|
+
hasWorker(): boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Check if WASM is enabled.
|
|
52
|
+
*/
|
|
53
|
+
hasWasm(): boolean;
|
|
54
|
+
/**
|
|
55
|
+
* Check if stream transfer is enabled.
|
|
56
|
+
*/
|
|
57
|
+
hasStreamTransfer(): boolean;
|
|
58
|
+
/**
|
|
59
|
+
* Check if message streaming is enabled.
|
|
60
|
+
*/
|
|
61
|
+
hasMessageStreaming(): boolean;
|
|
62
|
+
/**
|
|
63
|
+
* Check if strict mode is enabled.
|
|
64
|
+
*/
|
|
65
|
+
hasStrict(): boolean;
|
|
66
|
+
/**
|
|
67
|
+
* Get worker communication strategy.
|
|
68
|
+
*/
|
|
69
|
+
getWorkerStrategy(): WorkerCommunicationStrategy | undefined;
|
|
70
|
+
/**
|
|
71
|
+
* Create a fallback configuration.
|
|
72
|
+
*
|
|
73
|
+
* Converts stream-transfer to message-streaming and disables strict mode.
|
|
74
|
+
*/
|
|
75
|
+
createFallbackConfig(): InternalEngineConfig;
|
|
76
|
+
/**
|
|
77
|
+
* Convert to EngineConfig.
|
|
78
|
+
*/
|
|
79
|
+
toConfig(): EngineConfig;
|
|
80
|
+
/**
|
|
81
|
+
* Get bitmask for debugging.
|
|
82
|
+
* @internal
|
|
83
|
+
*/
|
|
84
|
+
getBitmask(): number;
|
|
85
|
+
/**
|
|
86
|
+
* String representation for debugging.
|
|
87
|
+
*/
|
|
88
|
+
toString(): string;
|
|
89
|
+
}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
class InternalEngineConfig {
|
|
2
|
+
bitmask = 0;
|
|
3
|
+
workerURL;
|
|
4
|
+
workerPool;
|
|
5
|
+
onFallback;
|
|
6
|
+
constructor(config) {
|
|
7
|
+
if (config) {
|
|
8
|
+
this.workerURL = config.workerURL;
|
|
9
|
+
this.workerPool = config.workerPool;
|
|
10
|
+
this.onFallback = config.onFallback;
|
|
11
|
+
this.parse(config);
|
|
12
|
+
}
|
|
13
|
+
this.applyDefaults();
|
|
14
|
+
this.validate();
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Private constructor for cloning.
|
|
18
|
+
*/
|
|
19
|
+
static fromBitmask(bitmask, workerURL, workerPool, onFallback) {
|
|
20
|
+
const instance = Object.create(InternalEngineConfig.prototype);
|
|
21
|
+
instance.bitmask = bitmask;
|
|
22
|
+
instance.workerURL = workerURL;
|
|
23
|
+
instance.workerPool = workerPool;
|
|
24
|
+
instance.onFallback = onFallback;
|
|
25
|
+
return instance;
|
|
26
|
+
}
|
|
27
|
+
parse(config) {
|
|
28
|
+
if (config.worker) {
|
|
29
|
+
this.bitmask |= 1 /* WORKER */;
|
|
30
|
+
}
|
|
31
|
+
if (config.wasm) {
|
|
32
|
+
this.bitmask |= 2 /* WASM */;
|
|
33
|
+
}
|
|
34
|
+
if (config.workerStrategy === "stream-transfer") {
|
|
35
|
+
this.bitmask |= 4 /* STREAM_TRANSFER */;
|
|
36
|
+
} else if (config.workerStrategy === "message-streaming") {
|
|
37
|
+
this.bitmask |= 8 /* MESSAGE_STREAMING */;
|
|
38
|
+
}
|
|
39
|
+
if (config.strict) {
|
|
40
|
+
this.bitmask |= 16 /* STRICT */;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
applyDefaults() {
|
|
44
|
+
if (this.hasWorker() && !this.hasStreamTransfer() && !this.hasMessageStreaming()) {
|
|
45
|
+
this.bitmask |= 8 /* MESSAGE_STREAMING */;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
validate() {
|
|
49
|
+
if ((this.hasStreamTransfer() || this.hasMessageStreaming()) && !this.hasWorker()) {
|
|
50
|
+
throw new Error("workerStrategy requires worker: true in engine config");
|
|
51
|
+
}
|
|
52
|
+
if (this.hasStrict() && !this.hasStreamTransfer()) {
|
|
53
|
+
throw new Error(
|
|
54
|
+
'strict requires workerStrategy: "stream-transfer" in engine config'
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Check if a flag is set.
|
|
60
|
+
*/
|
|
61
|
+
hasFlag(flag) {
|
|
62
|
+
return (this.bitmask & flag) !== 0;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add a flag.
|
|
66
|
+
*/
|
|
67
|
+
addFlag(flag) {
|
|
68
|
+
this.bitmask |= flag;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Remove a flag.
|
|
72
|
+
*/
|
|
73
|
+
removeFlag(flag) {
|
|
74
|
+
this.bitmask &= ~flag;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Check if worker execution is enabled.
|
|
78
|
+
*/
|
|
79
|
+
hasWorker() {
|
|
80
|
+
return this.hasFlag(1 /* WORKER */);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Check if WASM is enabled.
|
|
84
|
+
*/
|
|
85
|
+
hasWasm() {
|
|
86
|
+
return this.hasFlag(2 /* WASM */);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if stream transfer is enabled.
|
|
90
|
+
*/
|
|
91
|
+
hasStreamTransfer() {
|
|
92
|
+
return this.hasFlag(4 /* STREAM_TRANSFER */);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Check if message streaming is enabled.
|
|
96
|
+
*/
|
|
97
|
+
hasMessageStreaming() {
|
|
98
|
+
return this.hasFlag(8 /* MESSAGE_STREAMING */);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if strict mode is enabled.
|
|
102
|
+
*/
|
|
103
|
+
hasStrict() {
|
|
104
|
+
return this.hasFlag(16 /* STRICT */);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Get worker communication strategy.
|
|
108
|
+
*/
|
|
109
|
+
getWorkerStrategy() {
|
|
110
|
+
if (this.hasStreamTransfer()) {
|
|
111
|
+
return "stream-transfer";
|
|
112
|
+
}
|
|
113
|
+
if (this.hasMessageStreaming()) {
|
|
114
|
+
return "message-streaming";
|
|
115
|
+
}
|
|
116
|
+
return void 0;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Create a fallback configuration.
|
|
120
|
+
*
|
|
121
|
+
* Converts stream-transfer to message-streaming and disables strict mode.
|
|
122
|
+
*/
|
|
123
|
+
createFallbackConfig() {
|
|
124
|
+
let fallbackBitmask = this.bitmask;
|
|
125
|
+
if ((fallbackBitmask & 4 /* STREAM_TRANSFER */) !== 0) {
|
|
126
|
+
fallbackBitmask &= -5 /* STREAM_TRANSFER */;
|
|
127
|
+
fallbackBitmask |= 8 /* MESSAGE_STREAMING */;
|
|
128
|
+
}
|
|
129
|
+
if ((fallbackBitmask & 16 /* STRICT */) !== 0) {
|
|
130
|
+
fallbackBitmask &= -17 /* STRICT */;
|
|
131
|
+
}
|
|
132
|
+
return InternalEngineConfig.fromBitmask(
|
|
133
|
+
fallbackBitmask,
|
|
134
|
+
this.workerURL,
|
|
135
|
+
this.workerPool,
|
|
136
|
+
this.onFallback
|
|
137
|
+
);
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Convert to EngineConfig.
|
|
141
|
+
*/
|
|
142
|
+
toConfig() {
|
|
143
|
+
return {
|
|
144
|
+
worker: this.hasWorker() || void 0,
|
|
145
|
+
workerURL: this.workerURL,
|
|
146
|
+
workerPool: this.workerPool,
|
|
147
|
+
wasm: this.hasWasm() || void 0,
|
|
148
|
+
workerStrategy: this.getWorkerStrategy(),
|
|
149
|
+
strict: this.hasStrict() || void 0,
|
|
150
|
+
onFallback: this.onFallback
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
/**
|
|
154
|
+
* Get bitmask for debugging.
|
|
155
|
+
* @internal
|
|
156
|
+
*/
|
|
157
|
+
getBitmask() {
|
|
158
|
+
return this.bitmask;
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* String representation for debugging.
|
|
162
|
+
*/
|
|
163
|
+
toString() {
|
|
164
|
+
const parts = [];
|
|
165
|
+
if (this.hasWorker()) parts.push("worker");
|
|
166
|
+
if (this.hasWasm()) parts.push("wasm");
|
|
167
|
+
if (this.hasStreamTransfer()) parts.push("stream-transfer");
|
|
168
|
+
if (this.hasMessageStreaming()) parts.push("message-streaming");
|
|
169
|
+
if (this.hasStrict()) parts.push("strict");
|
|
170
|
+
return parts.join(" + ") || "main";
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
export { InternalEngineConfig };
|
|
175
|
+
//# sourceMappingURL=InternalEngineConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InternalEngineConfig.js","sources":["../../src/execution/InternalEngineConfig.ts"],"sourcesContent":["import type {\n EngineConfig,\n EngineFallbackInfo,\n WorkerCommunicationStrategy,\n} from \"../common/types.ts\";\nimport type { WorkerPool } from \"./worker/helpers/WorkerPool.ts\";\n\n/**\n * Engine flags bitmask (internal use).\n * @internal\n */\nexport enum EngineFlags {\n WORKER = 1 << 0, // 0b00001 = 1\n WASM = 1 << 1, // 0b00010 = 2\n STREAM_TRANSFER = 1 << 2, // 0b00100 = 4\n MESSAGE_STREAMING = 1 << 3, // 0b01000 = 8\n STRICT = 1 << 4, // 0b10000 = 16\n}\n\n/**\n * Internal engine configuration manager.\n *\n * Manages engine configuration using bitmask for efficient flag operations.\n *\n * @internal\n */\nexport class InternalEngineConfig {\n private bitmask = 0;\n readonly workerURL?: string | URL;\n readonly workerPool?: WorkerPool;\n readonly onFallback?: (info: EngineFallbackInfo) => void;\n\n constructor(config?: EngineConfig) {\n if (config) {\n this.workerURL = config.workerURL;\n this.workerPool = config.workerPool;\n this.onFallback = config.onFallback;\n this.parse(config);\n }\n\n this.applyDefaults();\n this.validate();\n }\n\n /**\n * Private constructor for cloning.\n */\n private static fromBitmask(\n bitmask: number,\n workerURL?: string | URL,\n workerPool?: WorkerPool,\n onFallback?: (info: EngineFallbackInfo) => void,\n ): InternalEngineConfig {\n const instance = Object.create(InternalEngineConfig.prototype);\n instance.bitmask = bitmask;\n (instance as { workerURL?: string | URL }).workerURL = workerURL;\n (instance as { workerPool?: WorkerPool }).workerPool = workerPool;\n (\n instance as { onFallback?: (info: EngineFallbackInfo) => void }\n ).onFallback = onFallback;\n return instance;\n }\n\n private parse(config: EngineConfig): void {\n if (config.worker) {\n this.bitmask |= EngineFlags.WORKER;\n }\n\n if (config.wasm) {\n this.bitmask |= EngineFlags.WASM;\n }\n\n if (config.workerStrategy === \"stream-transfer\") {\n this.bitmask |= EngineFlags.STREAM_TRANSFER;\n } else if (config.workerStrategy === \"message-streaming\") {\n this.bitmask |= EngineFlags.MESSAGE_STREAMING;\n }\n\n if (config.strict) {\n this.bitmask |= EngineFlags.STRICT;\n }\n }\n\n private applyDefaults(): void {\n // Worker without explicit strategy -> default to message-streaming\n if (\n this.hasWorker() &&\n !this.hasStreamTransfer() &&\n !this.hasMessageStreaming()\n ) {\n this.bitmask |= EngineFlags.MESSAGE_STREAMING;\n }\n }\n\n private validate(): void {\n // workerStrategy requires worker\n if (\n (this.hasStreamTransfer() || this.hasMessageStreaming()) &&\n !this.hasWorker()\n ) {\n throw new Error(\"workerStrategy requires worker: true in engine config\");\n }\n\n // strict requires stream-transfer\n if (this.hasStrict() && !this.hasStreamTransfer()) {\n throw new Error(\n 'strict requires workerStrategy: \"stream-transfer\" in engine config',\n );\n }\n }\n\n /**\n * Check if a flag is set.\n */\n private hasFlag(flag: EngineFlags): boolean {\n return (this.bitmask & flag) !== 0;\n }\n\n /**\n * Add a flag.\n */\n private addFlag(flag: EngineFlags): void {\n this.bitmask |= flag;\n }\n\n /**\n * Remove a flag.\n */\n private removeFlag(flag: EngineFlags): void {\n this.bitmask &= ~flag;\n }\n\n /**\n * Check if worker execution is enabled.\n */\n hasWorker(): boolean {\n return this.hasFlag(EngineFlags.WORKER);\n }\n\n /**\n * Check if WASM is enabled.\n */\n hasWasm(): boolean {\n return this.hasFlag(EngineFlags.WASM);\n }\n\n /**\n * Check if stream transfer is enabled.\n */\n hasStreamTransfer(): boolean {\n return this.hasFlag(EngineFlags.STREAM_TRANSFER);\n }\n\n /**\n * Check if message streaming is enabled.\n */\n hasMessageStreaming(): boolean {\n return this.hasFlag(EngineFlags.MESSAGE_STREAMING);\n }\n\n /**\n * Check if strict mode is enabled.\n */\n hasStrict(): boolean {\n return this.hasFlag(EngineFlags.STRICT);\n }\n\n /**\n * Get worker communication strategy.\n */\n getWorkerStrategy(): WorkerCommunicationStrategy | undefined {\n if (this.hasStreamTransfer()) {\n return \"stream-transfer\";\n }\n if (this.hasMessageStreaming()) {\n return \"message-streaming\";\n }\n return undefined;\n }\n\n /**\n * Create a fallback configuration.\n *\n * Converts stream-transfer to message-streaming and disables strict mode.\n */\n createFallbackConfig(): InternalEngineConfig {\n let fallbackBitmask = this.bitmask;\n\n // Stream transfer -> message streaming\n if ((fallbackBitmask & EngineFlags.STREAM_TRANSFER) !== 0) {\n fallbackBitmask &= ~EngineFlags.STREAM_TRANSFER;\n fallbackBitmask |= EngineFlags.MESSAGE_STREAMING;\n }\n\n // Disable strict mode\n if ((fallbackBitmask & EngineFlags.STRICT) !== 0) {\n fallbackBitmask &= ~EngineFlags.STRICT;\n }\n\n return InternalEngineConfig.fromBitmask(\n fallbackBitmask,\n this.workerURL,\n this.workerPool,\n this.onFallback,\n );\n }\n\n /**\n * Convert to EngineConfig.\n */\n toConfig(): EngineConfig {\n return {\n worker: this.hasWorker() || undefined,\n workerURL: this.workerURL,\n workerPool: this.workerPool,\n wasm: this.hasWasm() || undefined,\n workerStrategy: this.getWorkerStrategy(),\n strict: this.hasStrict() || undefined,\n onFallback: this.onFallback,\n };\n }\n\n /**\n * Get bitmask for debugging.\n * @internal\n */\n getBitmask(): number {\n return this.bitmask;\n }\n\n /**\n * String representation for debugging.\n */\n toString(): string {\n const parts: string[] = [];\n if (this.hasWorker()) parts.push(\"worker\");\n if (this.hasWasm()) parts.push(\"wasm\");\n if (this.hasStreamTransfer()) parts.push(\"stream-transfer\");\n if (this.hasMessageStreaming()) parts.push(\"message-streaming\");\n if (this.hasStrict()) parts.push(\"strict\");\n return parts.join(\" + \") || \"main\";\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -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 binary in main thread.
|
|
5
|
+
* This is the default binary parsing implementation.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
* @param binary CSV binary to parse (Uint8Array or ArrayBuffer)
|
|
9
|
+
* @param options Parsing options
|
|
10
|
+
* @returns Async iterable iterator of records
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseBinaryInMain<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(binary: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -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 main thread.
|
|
5
|
+
* This is the default streaming implementation.
|
|
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 parseStreamInMain<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,12 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from '../../constants.ts';
|
|
3
|
+
/**
|
|
4
|
+
* Parse CSV string in main thread.
|
|
5
|
+
* This is the default implementation.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
* @param csv CSV string to parse
|
|
9
|
+
* @param options Parsing options
|
|
10
|
+
* @returns Async iterable iterator of records
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseStringInMain<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,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 main thread.
|
|
5
|
+
* This is the default streaming implementation.
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
* @param stream CSV Uint8Array stream to parse
|
|
9
|
+
* @param options Parsing options
|
|
10
|
+
* @returns Async iterable iterator of records
|
|
11
|
+
*/
|
|
12
|
+
export declare function parseUint8ArrayStreamInMain<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,18 @@
|
|
|
1
|
+
import { CSVRecord, ParseBinaryOptions } from '../../common/types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Parse CSV binary using WebAssembly in main thread.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
* @param binary CSV binary to parse
|
|
7
|
+
* @param options Parsing options
|
|
8
|
+
* @returns Async iterable iterator of records
|
|
9
|
+
* @throws {RangeError} If the binary size exceeds maxBinarySize limit or charset is not supported.
|
|
10
|
+
* @throws {TypeError} If the encoded data is not valid for the specified charset.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Converts binary to string then uses WASM parser.
|
|
14
|
+
* WASM parser has limitations:
|
|
15
|
+
* - Only supports UTF-8 encoding
|
|
16
|
+
* - Only supports double-quote (") as quotation character
|
|
17
|
+
*/
|
|
18
|
+
export declare function parseBinaryInWASM<Header extends ReadonlyArray<string>>(binary: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { parseStringToArraySyncWASM } from '../../parseStringToArraySyncWASM.js';
|
|
2
|
+
import { convertBinaryToString } from '../../utils/convertBinaryToString.js';
|
|
3
|
+
|
|
4
|
+
function parseBinaryInWASM(binary, options) {
|
|
5
|
+
const csv = convertBinaryToString(binary, options ?? {});
|
|
6
|
+
const records = parseStringToArraySyncWASM(csv, options);
|
|
7
|
+
return (async function* () {
|
|
8
|
+
for (const record of records) {
|
|
9
|
+
yield record;
|
|
10
|
+
}
|
|
11
|
+
})();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export { parseBinaryInWASM };
|
|
15
|
+
//# sourceMappingURL=parseBinaryInWASM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseBinaryInWASM.js","sources":["../../../src/execution/wasm/parseBinaryInWASM.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"../../common/types.ts\";\nimport { parseStringToArraySyncWASM } from \"../../parseStringToArraySyncWASM.ts\";\nimport { convertBinaryToString } from \"../../utils/convertBinaryToString.ts\";\n\n/**\n * Parse CSV binary using WebAssembly in main thread.\n *\n * @internal\n * @param binary CSV binary to parse\n * @param options Parsing options\n * @returns Async iterable iterator of records\n * @throws {RangeError} If the binary size exceeds maxBinarySize limit or charset is not supported.\n * @throws {TypeError} If the encoded data is not valid for the specified charset.\n *\n * @remarks\n * Converts binary to string then uses WASM parser.\n * WASM parser has limitations:\n * - Only supports UTF-8 encoding\n * - Only supports double-quote (\") as quotation character\n */\nexport function parseBinaryInWASM<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Convert binary to string with proper option handling\n const csv = convertBinaryToString(binary, options ?? {});\n\n // Use WASM parser\n const records = parseStringToArraySyncWASM(csv, options);\n\n // Convert array to async iterator\n return (async function* () {\n for (const record of records) {\n yield record;\n }\n })();\n}\n"],"names":[],"mappings":";;;AAoBO,SAAS,iBAAA,CACd,QACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,MAAA,EAAQ,OAAA,IAAW,EAAE,CAAA;AAGvD,EAAA,MAAM,OAAA,GAAU,0BAAA,CAA2B,GAAA,EAAK,OAAO,CAAA;AAGvD,EAAA,OAAA,CAAQ,mBAAmB;AACzB,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,MAAM,MAAA;AAAA,IACR;AAAA,EACF,CAAA,GAAG;AACL;;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CSVRecord, ParseOptions } from '../../common/types.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Parse CSV string using WebAssembly in main thread.
|
|
4
|
+
*
|
|
5
|
+
* @internal
|
|
6
|
+
* @param csv CSV string to parse
|
|
7
|
+
* @param options Parsing options
|
|
8
|
+
* @returns Async iterable iterator of records
|
|
9
|
+
*
|
|
10
|
+
* @remarks
|
|
11
|
+
* WASM parser has limitations:
|
|
12
|
+
* - Only supports UTF-8 encoding
|
|
13
|
+
* - Only supports double-quote (") as quotation character
|
|
14
|
+
* - Synchronous operation (no streaming)
|
|
15
|
+
*/
|
|
16
|
+
export declare function parseStringInWASM<Header extends ReadonlyArray<string>>(csv: string, options?: ParseOptions<Header>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { WorkerPool } from './WorkerPool.ts';
|
|
2
|
+
/**
|
|
3
|
+
* Options for configuring the ReusableWorkerPool.
|
|
4
|
+
*/
|
|
5
|
+
export interface ReusableWorkerPoolOptions {
|
|
6
|
+
/**
|
|
7
|
+
* Maximum number of worker instances in the pool.
|
|
8
|
+
*
|
|
9
|
+
* @default 1
|
|
10
|
+
*
|
|
11
|
+
* @remarks
|
|
12
|
+
* **Security Recommendation:**
|
|
13
|
+
* For production applications that accept user uploads, set this to a reasonable limit (e.g., 2-4)
|
|
14
|
+
* to prevent resource exhaustion attacks. Without limits, malicious users could spawn unlimited
|
|
15
|
+
* workers by uploading multiple large CSV files simultaneously, leading to memory exhaustion and DoS.
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* ```ts
|
|
19
|
+
* // Recommended for production
|
|
20
|
+
* const pool = new ReusableReusableWorkerPool({ maxWorkers: 4 });
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
maxWorkers?: number;
|
|
24
|
+
/**
|
|
25
|
+
* Custom worker URL to use for all workers in the pool.
|
|
26
|
+
*/
|
|
27
|
+
workerURL?: string | URL;
|
|
28
|
+
}
|
|
29
|
+
export declare class ReusableWorkerPool implements WorkerPool, Disposable {
|
|
30
|
+
private workers;
|
|
31
|
+
private requestId;
|
|
32
|
+
private currentWorkerIndex;
|
|
33
|
+
private readonly maxWorkers;
|
|
34
|
+
private readonly customWorkerURL?;
|
|
35
|
+
private pendingWorkerCreations;
|
|
36
|
+
private pendingCreationsByURL;
|
|
37
|
+
private disposed;
|
|
38
|
+
private nextPendingId;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new ReusableWorkerPool.
|
|
41
|
+
*
|
|
42
|
+
* @param options - Configuration options for the pool
|
|
43
|
+
*/
|
|
44
|
+
constructor(options?: ReusableWorkerPoolOptions);
|
|
45
|
+
/**
|
|
46
|
+
* Get a worker instance from the pool using round-robin load balancing.
|
|
47
|
+
*
|
|
48
|
+
* @param workerURL - Optional custom worker URL (overrides pool's workerURL)
|
|
49
|
+
* @returns A worker instance from the pool
|
|
50
|
+
* @internal
|
|
51
|
+
*/
|
|
52
|
+
getWorker(workerURL?: string | URL): Promise<Worker>;
|
|
53
|
+
/**
|
|
54
|
+
* Get the next request ID for this pool.
|
|
55
|
+
*
|
|
56
|
+
* @returns The next request ID
|
|
57
|
+
* @internal
|
|
58
|
+
*/
|
|
59
|
+
getNextRequestId(): number;
|
|
60
|
+
/**
|
|
61
|
+
* Release a worker back to the pool.
|
|
62
|
+
* For ReusableWorkerPool, this does nothing as workers are kept alive and reused.
|
|
63
|
+
*
|
|
64
|
+
* @param _worker - The worker to release
|
|
65
|
+
* @internal
|
|
66
|
+
*/
|
|
67
|
+
releaseWorker(_worker: Worker): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get the current number of workers in the pool.
|
|
70
|
+
*
|
|
71
|
+
* @returns The number of active workers
|
|
72
|
+
*/
|
|
73
|
+
get size(): number;
|
|
74
|
+
/**
|
|
75
|
+
* Check if the pool has reached its maximum capacity.
|
|
76
|
+
*
|
|
77
|
+
* @returns True if the pool is at maximum capacity, false otherwise
|
|
78
|
+
*
|
|
79
|
+
* @remarks
|
|
80
|
+
* This method is useful for implementing early rejection of requests
|
|
81
|
+
* when the worker pool is saturated, preventing resource exhaustion.
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* ```ts
|
|
85
|
+
* import { Hono } from 'hono';
|
|
86
|
+
* import { ReusableWorkerPool } from 'web-csv-toolbox';
|
|
87
|
+
*
|
|
88
|
+
* const pool = new ReusableWorkerPool({ maxWorkers: 4 });
|
|
89
|
+
*
|
|
90
|
+
* app.post('/validate-csv', async (c) => {
|
|
91
|
+
* // Early rejection if pool is saturated
|
|
92
|
+
* if (pool.isFull()) {
|
|
93
|
+
* return c.json({ error: 'Service busy, please try again later' }, 503);
|
|
94
|
+
* }
|
|
95
|
+
*
|
|
96
|
+
* // Process CSV...
|
|
97
|
+
* });
|
|
98
|
+
* ```
|
|
99
|
+
*/
|
|
100
|
+
isFull(): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Terminate all workers in the pool and clean up resources.
|
|
103
|
+
*
|
|
104
|
+
* This method should be called when the pool is no longer needed,
|
|
105
|
+
* typically during application shutdown.
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```ts
|
|
109
|
+
* const pool = new ReusableWorkerPool({ maxWorkers: 4 });
|
|
110
|
+
*
|
|
111
|
+
* // When shutting down
|
|
112
|
+
* pool.terminate();
|
|
113
|
+
* ```
|
|
114
|
+
*
|
|
115
|
+
* @example With Hono
|
|
116
|
+
* ```ts
|
|
117
|
+
* import { Hono } from 'hono';
|
|
118
|
+
* import { ReusableWorkerPool } from 'web-csv-toolbox';
|
|
119
|
+
*
|
|
120
|
+
* const app = new Hono();
|
|
121
|
+
* const pool = new ReusableWorkerPool({ maxWorkers: 4 });
|
|
122
|
+
*
|
|
123
|
+
* app.onShutdown(() => {
|
|
124
|
+
* pool.terminate();
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
terminate(): void;
|
|
129
|
+
/**
|
|
130
|
+
* Dispose of the worker pool, terminating all workers.
|
|
131
|
+
*
|
|
132
|
+
* This method is called automatically when using the `using` syntax.
|
|
133
|
+
* For manual cleanup, use {@link terminate} instead.
|
|
134
|
+
*
|
|
135
|
+
* @example With `using` syntax (automatic cleanup)
|
|
136
|
+
* ```ts
|
|
137
|
+
* using pool = new ReusableWorkerPool({ maxWorkers: 4 });
|
|
138
|
+
* // Workers are automatically terminated when leaving scope
|
|
139
|
+
* ```
|
|
140
|
+
*
|
|
141
|
+
* @example Manual cleanup
|
|
142
|
+
* ```ts
|
|
143
|
+
* const pool = new ReusableWorkerPool({ maxWorkers: 4 });
|
|
144
|
+
* try {
|
|
145
|
+
* // Use pool
|
|
146
|
+
* } finally {
|
|
147
|
+
* pool.terminate(); // Preferred over pool[Symbol.dispose]()
|
|
148
|
+
* }
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
[Symbol.dispose](): void;
|
|
152
|
+
}
|