web-csv-toolbox 0.13.0-next-7d51d5285be9cffa5103de58469d8de0c98959d7 → 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 +6 -6
- package/dist/CSVLexer.js.map +1 -1
- package/dist/CSVLexerTransformer.js.map +1 -1
- package/dist/CSVRecordAssembler.js.map +1 -1
- 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
|
@@ -1,10 +1,6 @@
|
|
|
1
|
+
import { SUPPORTED_COMPRESSIONS } from './getOptionsFromResponse.constants.web.js';
|
|
1
2
|
import { parseMime } from './utils/parseMime.js';
|
|
2
3
|
|
|
3
|
-
const SUPPORTED_COMPRESSIONS = /* @__PURE__ */ new Set([
|
|
4
|
-
"gzip",
|
|
5
|
-
"deflate",
|
|
6
|
-
"deflate-raw"
|
|
7
|
-
]);
|
|
8
4
|
function getOptionsFromResponse(response, options = {}) {
|
|
9
5
|
const { headers } = response;
|
|
10
6
|
const contentType = headers.get("content-type") ?? "text/csv";
|
|
@@ -13,7 +9,7 @@ function getOptionsFromResponse(response, options = {}) {
|
|
|
13
9
|
throw new TypeError(`Invalid mime type: "${contentType}"`);
|
|
14
10
|
}
|
|
15
11
|
const contentEncoding = headers.get("content-encoding");
|
|
16
|
-
let
|
|
12
|
+
let decompression;
|
|
17
13
|
if (contentEncoding) {
|
|
18
14
|
const normalizedEncoding = contentEncoding.trim().toLowerCase();
|
|
19
15
|
if (normalizedEncoding.includes(",")) {
|
|
@@ -22,10 +18,10 @@ function getOptionsFromResponse(response, options = {}) {
|
|
|
22
18
|
);
|
|
23
19
|
}
|
|
24
20
|
if (SUPPORTED_COMPRESSIONS.has(normalizedEncoding)) {
|
|
25
|
-
|
|
21
|
+
decompression = normalizedEncoding;
|
|
26
22
|
} else if (normalizedEncoding) {
|
|
27
23
|
if (options.allowExperimentalCompressions) {
|
|
28
|
-
|
|
24
|
+
decompression = normalizedEncoding;
|
|
29
25
|
} else {
|
|
30
26
|
throw new TypeError(
|
|
31
27
|
`Unsupported content-encoding: "${contentEncoding}". Supported formats: ${Array.from(SUPPORTED_COMPRESSIONS).join(", ")}. To use experimental formats, set allowExperimentalCompressions: true`
|
|
@@ -35,7 +31,7 @@ function getOptionsFromResponse(response, options = {}) {
|
|
|
35
31
|
}
|
|
36
32
|
const charset = mime.parameters.charset ?? "utf-8";
|
|
37
33
|
return {
|
|
38
|
-
|
|
34
|
+
decompression,
|
|
39
35
|
charset,
|
|
40
36
|
...options
|
|
41
37
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOptionsFromResponse.js","sources":["../src/getOptionsFromResponse.ts"],"sourcesContent":["import type { ParseBinaryOptions } from \"./common/types.ts\";\nimport {
|
|
1
|
+
{"version":3,"file":"getOptionsFromResponse.js","sources":["../src/getOptionsFromResponse.ts"],"sourcesContent":["import { SUPPORTED_COMPRESSIONS } from \"#getOptionsFromResponse.constants.js\";\nimport type { ParseBinaryOptions } from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseMime } from \"./utils/parseMime.ts\";\n\n/**\n * Extracts the options from the response object.\n *\n * @param response - The response object from which to extract the options.\n * @param options - The options to merge with the extracted options.\n * @returns The options extracted from the response.\n * @throws {TypeError} - The content type is not supported or the content-encoding is invalid.\n */\nexport function getOptionsFromResponse<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = '\"',\n>(\n response: Response,\n options: ParseBinaryOptions<\n Header,\n Delimiter,\n Quotation\n > = {} as ParseBinaryOptions<Header, Delimiter, Quotation>,\n): ParseBinaryOptions<Header, Delimiter, Quotation> {\n const { headers } = response;\n const contentType = headers.get(\"content-type\") ?? \"text/csv\";\n const mime = parseMime(contentType);\n if (mime.type !== \"text/csv\") {\n throw new TypeError(`Invalid mime type: \"${contentType}\"`);\n }\n\n const contentEncoding = headers.get(\"content-encoding\");\n let decompression: CompressionFormat | undefined;\n\n if (contentEncoding) {\n const normalizedEncoding = contentEncoding.trim().toLowerCase();\n\n if (normalizedEncoding.includes(\",\")) {\n throw new TypeError(\n `Multiple content-encodings are not supported: \"${contentEncoding}\"`,\n );\n }\n\n if (SUPPORTED_COMPRESSIONS.has(normalizedEncoding as CompressionFormat)) {\n decompression = normalizedEncoding as CompressionFormat;\n } else if (normalizedEncoding) {\n // Unknown compression format\n if (options.allowExperimentalCompressions) {\n // Allow runtime to handle experimental/future formats\n decompression = normalizedEncoding as CompressionFormat;\n } else {\n throw new TypeError(\n `Unsupported content-encoding: \"${contentEncoding}\". Supported formats: ${Array.from(SUPPORTED_COMPRESSIONS).join(\", \")}. To use experimental formats, set allowExperimentalCompressions: true`,\n );\n }\n }\n }\n\n const charset = mime.parameters.charset ?? \"utf-8\";\n // TODO: Support header=present and header=absent\n // const header = mime.parameters.header ?? \"present\";\n return {\n decompression,\n charset,\n ...options,\n };\n}\n"],"names":[],"mappings":";;;AAaO,SAAS,sBAAA,CAKd,QAAA,EACA,OAAA,GAII,EAAC,EAC6C;AAClD,EAAA,MAAM,EAAE,SAAQ,GAAI,QAAA;AACpB,EAAA,MAAM,WAAA,GAAc,OAAA,CAAQ,GAAA,CAAI,cAAc,CAAA,IAAK,UAAA;AACnD,EAAA,MAAM,IAAA,GAAO,UAAU,WAAW,CAAA;AAClC,EAAA,IAAI,IAAA,CAAK,SAAS,UAAA,EAAY;AAC5B,IAAA,MAAM,IAAI,SAAA,CAAU,CAAA,oBAAA,EAAuB,WAAW,CAAA,CAAA,CAAG,CAAA;AAAA,EAC3D;AAEA,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,GAAA,CAAI,kBAAkB,CAAA;AACtD,EAAA,IAAI,aAAA;AAEJ,EAAA,IAAI,eAAA,EAAiB;AACnB,IAAA,MAAM,kBAAA,GAAqB,eAAA,CAAgB,IAAA,EAAK,CAAE,WAAA,EAAY;AAE9D,IAAA,IAAI,kBAAA,CAAmB,QAAA,CAAS,GAAG,CAAA,EAAG;AACpC,MAAA,MAAM,IAAI,SAAA;AAAA,QACR,kDAAkD,eAAe,CAAA,CAAA;AAAA,OACnE;AAAA,IACF;AAEA,IAAA,IAAI,sBAAA,CAAuB,GAAA,CAAI,kBAAuC,CAAA,EAAG;AACvE,MAAA,aAAA,GAAgB,kBAAA;AAAA,IAClB,WAAW,kBAAA,EAAoB;AAE7B,MAAA,IAAI,QAAQ,6BAAA,EAA+B;AAEzC,QAAA,aAAA,GAAgB,kBAAA;AAAA,MAClB,CAAA,MAAO;AACL,QAAA,MAAM,IAAI,SAAA;AAAA,UACR,CAAA,+BAAA,EAAkC,eAAe,CAAA,sBAAA,EAAyB,KAAA,CAAM,KAAK,sBAAsB,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA,sEAAA;AAAA,SACzH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,OAAA,GAAU,IAAA,CAAK,UAAA,CAAW,OAAA,IAAW,OAAA;AAG3C,EAAA,OAAO;AAAA,IACL,aAAA;AAAA,IACA,OAAA;AAAA,IACA,GAAG;AAAA,GACL;AACF;;;;"}
|
package/dist/loadWASM.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadWASM.js","sources":["../src/loadWASM.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\nimport dataURL from \"web-csv-toolbox-wasm/web_csv_toolbox_wasm_bg.wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input ?? dataURL);\n}\n"],"names":["init"],"mappings":";;;AAoBA,eAAsB,SAAS,
|
|
1
|
+
{"version":3,"file":"loadWASM.js","sources":["../src/loadWASM.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\nimport dataURL from \"web-csv-toolbox-wasm/web_csv_toolbox_wasm_bg.wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input ?? dataURL);\n}\n"],"names":["init"],"mappings":";;;AAoBA,eAAsB,SAAS,KAAA,EAAwC;AACrE,EAAA,MAAMA,UAAA,CAAK,SAAS,OAAO,CAAA;AAC7B;;;;"}
|
package/dist/loadWASM.web.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadWASM.web.js","sources":["../src/loadWASM.web.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input);\n}\n"],"names":["init"],"mappings":";;AAkBA,eAAsB,SAAS,
|
|
1
|
+
{"version":3,"file":"loadWASM.web.js","sources":["../src/loadWASM.web.ts"],"sourcesContent":["import init, { type InitInput } from \"web-csv-toolbox-wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input);\n}\n"],"names":["init"],"mappings":";;AAkBA,eAAsB,SAAS,KAAA,EAAwC;AACrE,EAAA,MAAMA,WAAK,KAAK,CAAA;AAClB;;;;"}
|
package/dist/parse.d.ts
CHANGED
|
@@ -148,7 +148,7 @@ export declare function parse<const CSVSource extends CSVString, const Delimiter
|
|
|
148
148
|
* for await (const record of parse(response, {
|
|
149
149
|
* charset: 'shift-jis',
|
|
150
150
|
* ignoreBOM: true,
|
|
151
|
-
*
|
|
151
|
+
* decompression: 'gzip',
|
|
152
152
|
* })) {
|
|
153
153
|
* // ...
|
|
154
154
|
* }
|
package/dist/parse.js
CHANGED
|
@@ -7,24 +7,48 @@ import { convertThisAsyncIterableIteratorToArray } from './utils/convertThisAsyn
|
|
|
7
7
|
|
|
8
8
|
async function* parse(csv, options) {
|
|
9
9
|
if (typeof csv === "string") {
|
|
10
|
-
|
|
10
|
+
const iterator = parseString(csv, options);
|
|
11
|
+
yield* iterator;
|
|
11
12
|
} else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {
|
|
12
|
-
|
|
13
|
+
const iterator = parseBinary(csv, options);
|
|
14
|
+
if (iterator instanceof Promise) {
|
|
15
|
+
yield* await iterator;
|
|
16
|
+
} else {
|
|
17
|
+
yield* iterator;
|
|
18
|
+
}
|
|
13
19
|
} else if (csv instanceof ReadableStream) {
|
|
14
20
|
const [branch1, branch2] = csv.tee();
|
|
15
21
|
const reader1 = branch1.getReader();
|
|
16
22
|
const { value: firstChunk } = await reader1.read();
|
|
17
23
|
reader1.releaseLock();
|
|
18
24
|
if (typeof firstChunk === "string") {
|
|
19
|
-
|
|
25
|
+
const iterator = parseStringStream(
|
|
26
|
+
branch2,
|
|
27
|
+
options
|
|
28
|
+
);
|
|
29
|
+
if (iterator instanceof Promise) {
|
|
30
|
+
yield* await iterator;
|
|
31
|
+
} else {
|
|
32
|
+
yield* iterator;
|
|
33
|
+
}
|
|
20
34
|
} else if (firstChunk instanceof Uint8Array) {
|
|
21
|
-
|
|
35
|
+
const iterator = parseUint8ArrayStream(
|
|
22
36
|
branch2,
|
|
23
37
|
options
|
|
24
38
|
);
|
|
39
|
+
if (iterator instanceof Promise) {
|
|
40
|
+
yield* await iterator;
|
|
41
|
+
} else {
|
|
42
|
+
yield* iterator;
|
|
43
|
+
}
|
|
25
44
|
}
|
|
26
45
|
} else if (csv instanceof Response) {
|
|
27
|
-
|
|
46
|
+
const iterator = parseResponse(csv, options);
|
|
47
|
+
if (iterator instanceof Promise) {
|
|
48
|
+
yield* await iterator;
|
|
49
|
+
} else {
|
|
50
|
+
yield* iterator;
|
|
51
|
+
}
|
|
28
52
|
}
|
|
29
53
|
}
|
|
30
54
|
Object.defineProperties(parse, {
|
package/dist/parse.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse.js","sources":["../src/parse.ts"],"sourcesContent":["import type {\n CSV,\n CSVBinary,\n CSVRecord,\n CSVString,\n ParseBinaryOptions,\n ParseOptions,\n} from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseBinary } from \"./parseBinary.ts\";\nimport { parseResponse } from \"./parseResponse.ts\";\nimport { parseString } from \"./parseString.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\nimport type { PickCSVHeader } from \"./utils/types.ts\";\n\n/**\n * Parse CSV to records.\n *\n * {@link !String}, {@link !ReadableStream}<string | {@link !Uint8Array}> and {@link !Response} are supported.\n *\n *\n * @typeParam Header Header type like `['name', 'age']`.\n *\n * @param csv CSV string to parse.\n * @param options Parsing options for CSV string parsing.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parse.toArray} function.\n * @category High-level API\n *\n * @remarks\n * {@link parseString}, {@link parseBinary}, {@link parseUint8ArrayStream},\n * {@link parseStringStream} and {@link parseResponse} are used internally.\n *\n * If you known the type of the CSV, it performs better to use them directly.\n *\n * | If you want to parse a... | Use... | Options... |\n * | -------------------------------------------- | ----------------------------- | -------------------------- |\n * | {@link !String} | {@link parseString} | {@link ParseOptions} |\n * | {@link !ReadableStream}<{@link !String}> | {@link parseStringStream} | {@link ParseOptions} |\n * | {@link !Uint8Array} \\| {@link !ArrayBuffer} | {@link parseBinary} | {@link ParseBinaryOptions} |\n * | {@link !ReadableStream}<{@link !Uint8Array}> | {@link parseUint8ArrayStream} | {@link ParseBinaryOptions} |\n * | {@link !Response} | {@link parseResponse} | {@link ParseBinaryOptions} |\n *\n * **Performance Characteristics:**\n * - **Memory usage**: O(1) - constant per record (streaming approach)\n * - **Suitable for**: Files of any size, browser and server environments\n * - **Recommended for**: Large files (> 10MB) or memory-constrained environments\n *\n * This function processes CSV data as an async iterable iterator, yielding one record at a time.\n * Memory footprint remains constant regardless of file size, making it ideal for large datasets.\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files from streams\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * }\n * });\n *\n * for await (const record of parse(stream)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n *\n * @example Parsing CSV files with headers\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV has no header.\n * const csv = `Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv, { header: ['name', 'age'] })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files with different delimiters characters\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name\\tage\n * Alice\\t42\n * Bob\\t69`;\n *\n * for await (const record of parse(csv, { delimiter: '\\t' })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parse<const CSVSource extends CSVString>(\n csv: CSVSource,\n): AsyncIterableIterator<CSVRecord<PickCSVHeader<CSVSource>>>;\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVString,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport function parse<\n const CSVSource extends CSVString,\n const Delimiter extends string = DEFAULT_DELIMITER,\n const Quotation extends string = DEFAULT_QUOTATION,\n const Header extends ReadonlyArray<string> = PickCSVHeader<\n CSVSource,\n Delimiter,\n Quotation\n >,\n>(\n csv: CSVSource,\n options: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>>;\n/**\n * Parse CSV binary to records.\n *\n * @param csv CSV binary to parse.\n * @param options Parsing options for CSV binary parsing.\n *\n * @example Parsing CSV files from responses\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is not gzipped and encoded in utf-8.\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parse(response)) {\n * // ...\n * }\n * ```\n *\n * @example Parsing CSV files with options spcialized for binary\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is gzipped and encoded in shift-jis and has BOM.\n * const response = await fetch('https://example.com/data.csv.gz');\n *\n * for await (const record of parse(response, {\n * charset: 'shift-jis',\n * ignoreBOM: true,\n * decomposition: 'gzip',\n * })) {\n * // ...\n * }\n * ```\n */\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport async function* parse<const Header extends ReadonlyArray<string>>(\n csv: CSV,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n if (typeof csv === \"string\") {\n yield* parseString(csv, options);\n } else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {\n yield* parseBinary(csv, options);\n } else if (csv instanceof ReadableStream) {\n const [branch1, branch2] = csv.tee();\n const reader1 = branch1.getReader();\n const { value: firstChunk } = await reader1.read();\n reader1.releaseLock();\n if (typeof firstChunk === \"string\") {\n yield* parseStringStream(branch2 as ReadableStream<string>, options);\n } else if (firstChunk instanceof Uint8Array) {\n yield* parseUint8ArrayStream(\n branch2 as ReadableStream<Uint8Array>,\n options,\n );\n }\n } else if (csv instanceof Response) {\n yield* parseResponse(csv, options);\n }\n}\n\nexport declare namespace parse {\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @remarks\n * **Performance Characteristics:**\n * - **Memory usage**: O(n) - proportional to file size (loads entire result into memory)\n * - **Suitable for**: Small datasets, quick prototyping\n * - **Recommended max**: ~10MB (browser), ~100MB (Node.js/Deno)\n *\n * This function collects all records into an array before returning.\n * For large files, consider using the streaming {@link parse} function instead.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parse.toArray(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV binary to array of records,\n * ideal for smaller data sets.\n *\n * @remarks\n * **Performance Characteristics:**\n * - **Memory usage**: O(n) - proportional to file size (loads entire result into memory)\n * - **Suitable for**: Small datasets, quick prototyping\n * - **Recommended max**: ~10MB (browser), ~100MB (Node.js/Deno)\n *\n * This function collects all records into an array before returning.\n * For large files, consider using the streaming {@link parse} function instead.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;;AAiMuB,gBAAA,KAAA,CACrB,KACA,OAC0C,EAAA;AAC1C,EAAI,IAAA,OAAO,QAAQ,QAAU,EAAA;AAC3B,IAAO,OAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,GACtB,MAAA,IAAA,GAAA,YAAe,UAAc,IAAA,GAAA,YAAe,WAAa,EAAA;AAClE,IAAO,OAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA,GACjC,MAAA,IAAW,eAAe,cAAgB,EAAA;AACxC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,IAAI,GAAI,EAAA;AACnC,IAAM,MAAA,OAAA,GAAU,QAAQ,SAAU,EAAA;AAClC,IAAA,MAAM,EAAE,KAAO,EAAA,UAAA,EAAe,GAAA,MAAM,QAAQ,IAAK,EAAA;AACjD,IAAA,OAAA,CAAQ,WAAY,EAAA;AACpB,IAAI,IAAA,OAAO,eAAe,QAAU,EAAA;AAClC,MAAO,OAAA,iBAAA,CAAkB,SAAmC,OAAO,CAAA;AAAA,KACrE,MAAA,IAAW,sBAAsB,UAAY,EAAA;AAC3C,MAAO,OAAA,qBAAA;AAAA,QACL,OAAA;AAAA,QACA;AAAA,OACF;AAAA;AACF,GACF,MAAA,IAAW,eAAe,QAAU,EAAA;AAClC,IAAO,OAAA,aAAA,CAAc,KAAK,OAAO,CAAA;AAAA;AAErC;AAiEA,MAAA,CAAO,iBAAiB,KAAO,EAAA;AAAA,EAC7B,OAAS,EAAA;AAAA,IACP,UAAY,EAAA,IAAA;AAAA,IACZ,QAAU,EAAA,KAAA;AAAA,IACV,OAAOA;AAAS;AAEpB,CAAC,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"parse.js","sources":["../src/parse.ts"],"sourcesContent":["import type {\n CSV,\n CSVBinary,\n CSVRecord,\n CSVString,\n ParseBinaryOptions,\n ParseOptions,\n} from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseBinary } from \"./parseBinary.ts\";\nimport { parseResponse } from \"./parseResponse.ts\";\nimport { parseString } from \"./parseString.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\nimport type { PickCSVHeader } from \"./utils/types.ts\";\n\n/**\n * Parse CSV to records.\n *\n * {@link !String}, {@link !ReadableStream}<string | {@link !Uint8Array}> and {@link !Response} are supported.\n *\n *\n * @typeParam Header Header type like `['name', 'age']`.\n *\n * @param csv CSV string to parse.\n * @param options Parsing options for CSV string parsing.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parse.toArray} function.\n * @category High-level API\n *\n * @remarks\n * {@link parseString}, {@link parseBinary}, {@link parseUint8ArrayStream},\n * {@link parseStringStream} and {@link parseResponse} are used internally.\n *\n * If you known the type of the CSV, it performs better to use them directly.\n *\n * | If you want to parse a... | Use... | Options... |\n * | -------------------------------------------- | ----------------------------- | -------------------------- |\n * | {@link !String} | {@link parseString} | {@link ParseOptions} |\n * | {@link !ReadableStream}<{@link !String}> | {@link parseStringStream} | {@link ParseOptions} |\n * | {@link !Uint8Array} \\| {@link !ArrayBuffer} | {@link parseBinary} | {@link ParseBinaryOptions} |\n * | {@link !ReadableStream}<{@link !Uint8Array}> | {@link parseUint8ArrayStream} | {@link ParseBinaryOptions} |\n * | {@link !Response} | {@link parseResponse} | {@link ParseBinaryOptions} |\n *\n * **Performance Characteristics:**\n * - **Memory usage**: O(1) - constant per record (streaming approach)\n * - **Suitable for**: Files of any size, browser and server environments\n * - **Recommended for**: Large files (> 10MB) or memory-constrained environments\n *\n * This function processes CSV data as an async iterable iterator, yielding one record at a time.\n * Memory footprint remains constant regardless of file size, making it ideal for large datasets.\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files from streams\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * }\n * });\n *\n * for await (const record of parse(stream)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n *\n * @example Parsing CSV files with headers\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV has no header.\n * const csv = `Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv, { header: ['name', 'age'] })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files with different delimiters characters\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name\\tage\n * Alice\\t42\n * Bob\\t69`;\n *\n * for await (const record of parse(csv, { delimiter: '\\t' })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parse<const CSVSource extends CSVString>(\n csv: CSVSource,\n): AsyncIterableIterator<CSVRecord<PickCSVHeader<CSVSource>>>;\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVString,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport function parse<\n const CSVSource extends CSVString,\n const Delimiter extends string = DEFAULT_DELIMITER,\n const Quotation extends string = DEFAULT_QUOTATION,\n const Header extends ReadonlyArray<string> = PickCSVHeader<\n CSVSource,\n Delimiter,\n Quotation\n >,\n>(\n csv: CSVSource,\n options: ParseOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>>;\n/**\n * Parse CSV binary to records.\n *\n * @param csv CSV binary to parse.\n * @param options Parsing options for CSV binary parsing.\n *\n * @example Parsing CSV files from responses\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is not gzipped and encoded in utf-8.\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parse(response)) {\n * // ...\n * }\n * ```\n *\n * @example Parsing CSV files with options spcialized for binary\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is gzipped and encoded in shift-jis and has BOM.\n * const response = await fetch('https://example.com/data.csv.gz');\n *\n * for await (const record of parse(response, {\n * charset: 'shift-jis',\n * ignoreBOM: true,\n * decompression: 'gzip',\n * })) {\n * // ...\n * }\n * ```\n */\nexport function parse<const Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport async function* parse<const Header extends ReadonlyArray<string>>(\n csv: CSV,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n if (typeof csv === \"string\") {\n const iterator = parseString(csv, options);\n yield* iterator;\n } else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {\n const iterator = parseBinary(csv, options);\n // Check if it's a Promise\n if (iterator instanceof Promise) {\n yield* await iterator;\n } else {\n yield* iterator;\n }\n } else if (csv instanceof ReadableStream) {\n const [branch1, branch2] = csv.tee();\n const reader1 = branch1.getReader();\n const { value: firstChunk } = await reader1.read();\n reader1.releaseLock();\n if (typeof firstChunk === \"string\") {\n const iterator = parseStringStream(\n branch2 as ReadableStream<string>,\n options,\n );\n // Check if it's a Promise\n if (iterator instanceof Promise) {\n yield* await iterator;\n } else {\n yield* iterator;\n }\n } else if (firstChunk instanceof Uint8Array) {\n const iterator = parseUint8ArrayStream(\n branch2 as ReadableStream<Uint8Array>,\n options,\n );\n // Check if it's a Promise\n if (iterator instanceof Promise) {\n yield* await iterator;\n } else {\n yield* iterator;\n }\n }\n } else if (csv instanceof Response) {\n const iterator = parseResponse(csv, options);\n // Check if it's a Promise\n if (iterator instanceof Promise) {\n yield* await iterator;\n } else {\n yield* iterator;\n }\n }\n}\n\nexport declare namespace parse {\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @remarks\n * **Performance Characteristics:**\n * - **Memory usage**: O(n) - proportional to file size (loads entire result into memory)\n * - **Suitable for**: Small datasets, quick prototyping\n * - **Recommended max**: ~10MB (browser), ~100MB (Node.js/Deno)\n *\n * This function collects all records into an array before returning.\n * For large files, consider using the streaming {@link parse} function instead.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parse.toArray(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV binary to array of records,\n * ideal for smaller data sets.\n *\n * @remarks\n * **Performance Characteristics:**\n * - **Memory usage**: O(n) - proportional to file size (loads entire result into memory)\n * - **Suitable for**: Small datasets, quick prototyping\n * - **Recommended max**: ~10MB (browser), ~100MB (Node.js/Deno)\n *\n * This function collects all records into an array before returning.\n * For large files, consider using the streaming {@link parse} function instead.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;;AAiMA,gBAAuB,KAAA,CACrB,KACA,OAAA,EAC0C;AAC1C,EAAA,IAAI,OAAO,QAAQ,QAAA,EAAU;AAC3B,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAK,OAAO,CAAA;AACzC,IAAA,OAAO,QAAA;AAAA,EACT,CAAA,MAAA,IAAW,GAAA,YAAe,UAAA,IAAc,GAAA,YAAe,WAAA,EAAa;AAClE,IAAA,MAAM,QAAA,GAAW,WAAA,CAAY,GAAA,EAAK,OAAO,CAAA;AAEzC,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,MAAA,OAAO,MAAM,QAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF,CAAA,MAAA,IAAW,eAAe,cAAA,EAAgB;AACxC,IAAA,MAAM,CAAC,OAAA,EAAS,OAAO,CAAA,GAAI,IAAI,GAAA,EAAI;AACnC,IAAA,MAAM,OAAA,GAAU,QAAQ,SAAA,EAAU;AAClC,IAAA,MAAM,EAAE,KAAA,EAAO,UAAA,EAAW,GAAI,MAAM,QAAQ,IAAA,EAAK;AACjD,IAAA,OAAA,CAAQ,WAAA,EAAY;AACpB,IAAA,IAAI,OAAO,eAAe,QAAA,EAAU;AAClC,MAAA,MAAM,QAAA,GAAW,iBAAA;AAAA,QACf,OAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,QAAA,OAAO,MAAM,QAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,IACF,CAAA,MAAA,IAAW,sBAAsB,UAAA,EAAY;AAC3C,MAAA,MAAM,QAAA,GAAW,qBAAA;AAAA,QACf,OAAA;AAAA,QACA;AAAA,OACF;AAEA,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,QAAA,OAAO,MAAM,QAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,OAAO,QAAA;AAAA,MACT;AAAA,IACF;AAAA,EACF,CAAA,MAAA,IAAW,eAAe,QAAA,EAAU;AAClC,IAAA,MAAM,QAAA,GAAW,aAAA,CAAc,GAAA,EAAK,OAAO,CAAA;AAE3C,IAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,MAAA,OAAO,MAAM,QAAA;AAAA,IACf,CAAA,MAAO;AACL,MAAA,OAAO,QAAA;AAAA,IACT;AAAA,EACF;AACF;AAiEA,MAAA,CAAO,iBAAiB,KAAA,EAAO;AAAA,EAC7B,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS;AAEpB,CAAC,CAAA;;;;"}
|
package/dist/parseBinary.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER } from './constants.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Parse a binary from an {@link !Uint8Array}.
|
|
4
5
|
*
|
|
@@ -22,7 +23,7 @@ import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
|
22
23
|
* }
|
|
23
24
|
* ```
|
|
24
25
|
*/
|
|
25
|
-
export declare function parseBinary<Header extends ReadonlyArray<string
|
|
26
|
+
export declare function parseBinary<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = '"'>(bytes: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): AsyncIterableIterator<CSVRecord<Header>>;
|
|
26
27
|
export declare namespace parseBinary {
|
|
27
28
|
/**
|
|
28
29
|
* Parse a binary from an {@link !Uint8Array} to an array of records.
|
package/dist/parseBinary.js
CHANGED
|
@@ -1,12 +1,41 @@
|
|
|
1
|
+
import { InternalEngineConfig } from './execution/InternalEngineConfig.js';
|
|
2
|
+
import { parseBinaryInWASM } from './execution/wasm/parseBinaryInWASM.js';
|
|
3
|
+
import { WorkerSession } from './execution/worker/helpers/WorkerSession.js';
|
|
4
|
+
import { executeWithWorkerStrategy } from './execution/worker/strategies/WorkerStrategySelector.js';
|
|
1
5
|
import { parseBinaryToArraySync } from './parseBinaryToArraySync.js';
|
|
2
6
|
import { parseBinaryToIterableIterator } from './parseBinaryToIterableIterator.js';
|
|
3
7
|
import { parseBinaryToStream } from './parseBinaryToStream.js';
|
|
4
8
|
import { convertIterableIteratorToAsync } from './utils/convertIterableIteratorToAsync.js';
|
|
5
9
|
import { convertThisAsyncIterableIteratorToArray } from './utils/convertThisAsyncIterableIteratorToArray.js';
|
|
6
10
|
|
|
7
|
-
function parseBinary(bytes, options) {
|
|
8
|
-
const
|
|
9
|
-
|
|
11
|
+
async function* parseBinary(bytes, options) {
|
|
12
|
+
const engineConfig = new InternalEngineConfig(options?.engine);
|
|
13
|
+
if (engineConfig.hasWorker()) {
|
|
14
|
+
const session = engineConfig.workerPool ? await WorkerSession.create({
|
|
15
|
+
workerPool: engineConfig.workerPool,
|
|
16
|
+
workerURL: engineConfig.workerURL
|
|
17
|
+
}) : null;
|
|
18
|
+
try {
|
|
19
|
+
yield* executeWithWorkerStrategy(
|
|
20
|
+
bytes,
|
|
21
|
+
options,
|
|
22
|
+
session,
|
|
23
|
+
engineConfig
|
|
24
|
+
);
|
|
25
|
+
} finally {
|
|
26
|
+
session?.[Symbol.dispose]();
|
|
27
|
+
}
|
|
28
|
+
} else {
|
|
29
|
+
if (engineConfig.hasWasm()) {
|
|
30
|
+
yield* parseBinaryInWASM(
|
|
31
|
+
bytes,
|
|
32
|
+
options
|
|
33
|
+
);
|
|
34
|
+
} else {
|
|
35
|
+
const iterator = parseBinaryToIterableIterator(bytes, options);
|
|
36
|
+
yield* convertIterableIteratorToAsync(iterator);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
10
39
|
}
|
|
11
40
|
Object.defineProperties(parseBinary, {
|
|
12
41
|
toArray: {
|
package/dist/parseBinary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinary.js","sources":["../src/parseBinary.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"parseBinary.js","sources":["../src/parseBinary.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 { InternalEngineConfig } from \"./execution/InternalEngineConfig.ts\";\nimport { parseBinaryInWASM } from \"./execution/wasm/parseBinaryInWASM.ts\";\nimport { WorkerSession } from \"./execution/worker/helpers/WorkerSession.ts\";\nimport { executeWithWorkerStrategy } from \"./execution/worker/strategies/WorkerStrategySelector.ts\";\nimport { parseBinaryToArraySync } from \"./parseBinaryToArraySync.ts\";\nimport { parseBinaryToIterableIterator } from \"./parseBinaryToIterableIterator.ts\";\nimport { parseBinaryToStream } from \"./parseBinaryToStream.ts\";\nimport { convertIterableIteratorToAsync } from \"./utils/convertIterableIteratorToAsync.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse a binary from an {@link !Uint8Array}.\n *\n * @category Middle-level API\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n *\n * @example Parsing CSV binary\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for await (const record of parseUint8Array(csv)) {\n * console.log(record);\n * }\n * ```\n */\nexport async function* parseBinary<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = '\"',\n>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header, Delimiter, Quotation>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Parse engine configuration\n const engineConfig = new InternalEngineConfig(options?.engine);\n\n if (engineConfig.hasWorker()) {\n // Worker execution\n const session = engineConfig.workerPool\n ? await WorkerSession.create({\n workerPool: engineConfig.workerPool,\n workerURL: engineConfig.workerURL,\n })\n : null;\n\n try {\n yield* executeWithWorkerStrategy<CSVRecord<Header>>(\n bytes,\n options as\n | ParseOptions<Header>\n | ParseBinaryOptions<Header>\n | undefined,\n session,\n engineConfig,\n );\n } finally {\n session?.[Symbol.dispose]();\n }\n } else {\n // Main thread execution\n if (engineConfig.hasWasm()) {\n yield* parseBinaryInWASM(\n bytes,\n options as ParseBinaryOptions<Header> | undefined,\n );\n } else {\n const iterator = parseBinaryToIterableIterator(bytes, options);\n yield* convertIterableIteratorToAsync(iterator);\n }\n }\n}\n\nexport declare namespace parseBinary {\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n *\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = await parseUint8Array.toArray(csv);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = parseUint8Array.toArraySync(csv);\n * ```\n */\n export function toArraySync<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): CSVRecord<Header>[];\n\n /**\n * Parse a binary from an {@link !Uint8Array} to an iterable iterator of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for (const record of parseUint8Array.toIterableIterator(csv)) {\n * console.log(record);\n * }\n * ```\n */\n export function toIterableIterator<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): IterableIterator<CSVRecord<Header>>;\n\n /**\n * Parse a binary from an {@link !Uint8Array} to a stream of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Stream of records.\n *\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = parseUint8Array.toStream(csv);\n *\n * await stream.pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseBinary, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toArraySync: {\n enumerable: true,\n writable: false,\n value: parseBinaryToArraySync,\n },\n toIterableIterator: {\n enumerable: true,\n writable: false,\n value: parseBinaryToIterableIterator,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseBinaryToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;;;;;AAuCA,gBAAuB,WAAA,CAKrB,OACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,YAAA,GAAe,IAAI,oBAAA,CAAqB,OAAA,EAAS,MAAM,CAAA;AAE7D,EAAA,IAAI,YAAA,CAAa,WAAU,EAAG;AAE5B,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,UAAA,GACzB,MAAM,cAAc,MAAA,CAAO;AAAA,MACzB,YAAY,YAAA,CAAa,UAAA;AAAA,MACzB,WAAW,YAAA,CAAa;AAAA,KACzB,CAAA,GACD,IAAA;AAEJ,IAAA,IAAI;AACF,MAAA,OAAO,yBAAA;AAAA,QACL,KAAA;AAAA,QACA,OAAA;AAAA,QAIA,OAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,SAAE;AACA,MAAA,OAAA,GAAU,MAAA,CAAO,OAAO,CAAA,EAAE;AAAA,IAC5B;AAAA,EACF,CAAA,MAAO;AAEL,IAAA,IAAI,YAAA,CAAa,SAAQ,EAAG;AAC1B,MAAA,OAAO,iBAAA;AAAA,QACL,KAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAA,MAAO;AACL,MAAA,MAAM,QAAA,GAAW,6BAAA,CAA8B,KAAA,EAAO,OAAO,CAAA;AAC7D,MAAA,OAAO,+BAA+B,QAAQ,CAAA;AAAA,IAChD;AAAA,EACF;AACF;AAyGA,MAAA,CAAO,iBAAiB,WAAA,EAAa;AAAA,EACnC,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,WAAA,EAAa;AAAA,IACX,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA,GACT;AAAA,EACA,QAAA,EAAU;AAAA,IACR,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER } from './constants.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Synchronously parses binary CSV data into an array of records.
|
|
4
5
|
*
|
|
@@ -23,4 +24,4 @@ import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
|
23
24
|
* // [{ name: "Alice", age: "30" }]
|
|
24
25
|
* ```
|
|
25
26
|
*/
|
|
26
|
-
export declare function parseBinaryToArraySync<Header extends ReadonlyArray<string
|
|
27
|
+
export declare function parseBinaryToArraySync<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = '"'>(binary: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): CSVRecord<Header>[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToArraySync.js","sources":["../src/parseBinaryToArraySync.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\n/**\n * Synchronously parses binary CSV data into an array of records.\n *\n * @param binary - The binary CSV data to parse (Uint8Array or ArrayBuffer).\n * @param options - Parsing options including charset, maxBinarySize, etc.\n * @returns An array of CSV records.\n * @throws {RangeError} If the binary size exceeds maxBinarySize limit.\n * @throws {ParseError} If the CSV data is malformed.\n *\n * @remarks\n * **WARNING**: This function loads the entire binary data into memory synchronously.\n * For large files (>100MB), consider using streaming alternatives like `parseStream()` or `parseUint8ArrayStream()`\n * to avoid memory exhaustion and blocking the event loop.\n *\n * The default maxBinarySize is 100MB. You can increase it via options, but this may lead to\n * memory issues with very large files.\n *\n * @example\n * ```ts\n * const binary = new TextEncoder().encode(\"name,age\\nAlice,30\");\n * const records = parseBinaryToArraySync(binary);\n * // [{ name: \"Alice\", age: \"30\" }]\n * ```\n */\nexport function parseBinaryToArraySync
|
|
1
|
+
{"version":3,"file":"parseBinaryToArraySync.js","sources":["../src/parseBinaryToArraySync.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\n/**\n * Synchronously parses binary CSV data into an array of records.\n *\n * @param binary - The binary CSV data to parse (Uint8Array or ArrayBuffer).\n * @param options - Parsing options including charset, maxBinarySize, etc.\n * @returns An array of CSV records.\n * @throws {RangeError} If the binary size exceeds maxBinarySize limit.\n * @throws {ParseError} If the CSV data is malformed.\n *\n * @remarks\n * **WARNING**: This function loads the entire binary data into memory synchronously.\n * For large files (>100MB), consider using streaming alternatives like `parseStream()` or `parseUint8ArrayStream()`\n * to avoid memory exhaustion and blocking the event loop.\n *\n * The default maxBinarySize is 100MB. You can increase it via options, but this may lead to\n * memory issues with very large files.\n *\n * @example\n * ```ts\n * const binary = new TextEncoder().encode(\"name,age\\nAlice,30\");\n * const records = parseBinaryToArraySync(binary);\n * // [{ name: \"Alice\", age: \"30\" }]\n * ```\n */\nexport function parseBinaryToArraySync<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = '\"',\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<\n Header,\n Delimiter,\n Quotation\n > = {} as ParseBinaryOptions<Header, Delimiter, Quotation>,\n): CSVRecord<Header>[] {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToArraySync(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AA8BO,SAAS,sBAAA,CAKd,MAAA,EACA,OAAA,GAII,EAAC,EACgB;AACrB,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,MAAA,EAAQ,OAAO,CAAA;AACjD,IAAA,OAAO,sBAAA,CAAuB,KAAK,OAAO,CAAA;AAAA,EAC5C,SAAS,KAAA,EAAO;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC;AACF;;;;"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
2
|
+
import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from './constants.ts';
|
|
2
3
|
/**
|
|
3
4
|
* Parses the given binary data into an iterable iterator of CSV records.
|
|
4
5
|
*
|
|
@@ -16,4 +17,4 @@ import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
|
16
17
|
* The default maxBinarySize is 100MB. While this function returns an iterator, the entire
|
|
17
18
|
* binary is converted to a string in memory before iteration begins.
|
|
18
19
|
*/
|
|
19
|
-
export declare function parseBinaryToIterableIterator<Header extends ReadonlyArray<string
|
|
20
|
+
export declare function parseBinaryToIterableIterator<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION>(binary: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): IterableIterator<CSVRecord<Header>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToIterableIterator.js","sources":["../src/parseBinaryToIterableIterator.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\n/**\n * Parses the given binary data into an iterable iterator of CSV records.\n *\n * @param binary - The binary data to parse.\n * @param options - The parse options.\n * @returns An iterable iterator of CSV records.\n * @throws {RangeError} If the binary size exceeds maxBinarySize limit.\n * @throws {ParseError} When an error occurs while parsing the CSV data.\n *\n * @remarks\n * **WARNING**: This function loads the entire binary data into memory before iteration.\n * For large files (>100MB), consider using streaming alternatives like `parseStream()` or `parseUint8ArrayStream()`\n * to avoid memory exhaustion.\n *\n * The default maxBinarySize is 100MB. While this function returns an iterator, the entire\n * binary is converted to a string in memory before iteration begins.\n */\nexport function parseBinaryToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions
|
|
1
|
+
{"version":3,"file":"parseBinaryToIterableIterator.js","sources":["../src/parseBinaryToIterableIterator.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\n/**\n * Parses the given binary data into an iterable iterator of CSV records.\n *\n * @param binary - The binary data to parse.\n * @param options - The parse options.\n * @returns An iterable iterator of CSV records.\n * @throws {RangeError} If the binary size exceeds maxBinarySize limit.\n * @throws {ParseError} When an error occurs while parsing the CSV data.\n *\n * @remarks\n * **WARNING**: This function loads the entire binary data into memory before iteration.\n * For large files (>100MB), consider using streaming alternatives like `parseStream()` or `parseUint8ArrayStream()`\n * to avoid memory exhaustion.\n *\n * The default maxBinarySize is 100MB. While this function returns an iterator, the entire\n * binary is converted to a string in memory before iteration begins.\n */\nexport function parseBinaryToIterableIterator<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<\n Header,\n Delimiter,\n Quotation\n > = {} as ParseBinaryOptions<Header, Delimiter, Quotation>,\n): IterableIterator<CSVRecord<Header>> {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToIterableIterator(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AAuBO,SAAS,6BAAA,CAKd,MAAA,EACA,OAAA,GAII,EAAC,EACgC;AACrC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,MAAA,EAAQ,OAAO,CAAA;AACjD,IAAA,OAAO,6BAAA,CAA8B,KAAK,OAAO,CAAA;AAAA,EACnD,SAAS,KAAA,EAAO;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC;AACF;;;;"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
2
|
-
|
|
2
|
+
import { DEFAULT_DELIMITER } from './constants.ts';
|
|
3
|
+
export declare function parseBinaryToStream<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = '"'>(binary: Uint8Array | ArrayBuffer, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): ReadableStream<CSVRecord<Header>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseBinaryToStream.js","sources":["../src/parseBinaryToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\nexport function parseBinaryToStream
|
|
1
|
+
{"version":3,"file":"parseBinaryToStream.js","sources":["../src/parseBinaryToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\nimport { convertBinaryToString } from \"./utils/convertBinaryToString.ts\";\n\nexport function parseBinaryToStream<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = '\"',\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<\n Header,\n Delimiter,\n Quotation\n > = {} as ParseBinaryOptions<Header, Delimiter, Quotation>,\n): ReadableStream<CSVRecord<Header>> {\n try {\n const csv = convertBinaryToString(binary, options);\n return parseStringToStream(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AAMO,SAAS,mBAAA,CAKd,MAAA,EACA,OAAA,GAII,EAAC,EAC8B;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,GAAA,GAAM,qBAAA,CAAsB,MAAA,EAAQ,OAAO,CAAA;AACjD,IAAA,OAAO,mBAAA,CAAoB,KAAK,OAAO,CAAA;AAAA,EACzC,SAAS,KAAA,EAAO;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC;AACF;;;;"}
|
package/dist/parseResponse.d.ts
CHANGED
|
@@ -76,5 +76,5 @@ export declare namespace parseResponse {
|
|
|
76
76
|
* // { name: 'Bob', age: '69' }
|
|
77
77
|
* ```
|
|
78
78
|
*/
|
|
79
|
-
function toStream<Header extends ReadonlyArray<string>>(response: Response, options?: ParseOptions<Header>): ReadableStream<CSVRecord<Header
|
|
79
|
+
function toStream<Header extends ReadonlyArray<string>>(response: Response, options?: ParseOptions<Header>): ReadableStream<CSVRecord<Header>>;
|
|
80
80
|
}
|
package/dist/parseResponse.js
CHANGED
|
@@ -5,15 +5,22 @@ import { parseUint8ArrayStream } from './parseUint8ArrayStream.js';
|
|
|
5
5
|
import { convertThisAsyncIterableIteratorToArray } from './utils/convertThisAsyncIterableIteratorToArray.js';
|
|
6
6
|
|
|
7
7
|
function parseResponse(response, options) {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
throw new TypeError("Response body is null");
|
|
12
|
-
}
|
|
13
|
-
return parseUint8ArrayStream(response.body, options_);
|
|
14
|
-
} catch (error) {
|
|
15
|
-
commonParseErrorHandling(error);
|
|
8
|
+
const options_ = getOptionsFromResponse(response, options);
|
|
9
|
+
if (response.body === null) {
|
|
10
|
+
throw new TypeError("Response body is null");
|
|
16
11
|
}
|
|
12
|
+
return (async function* () {
|
|
13
|
+
try {
|
|
14
|
+
const result = parseUint8ArrayStream(response.body, options_);
|
|
15
|
+
if (result instanceof Promise) {
|
|
16
|
+
yield* await result;
|
|
17
|
+
} else {
|
|
18
|
+
yield* result;
|
|
19
|
+
}
|
|
20
|
+
} catch (error) {
|
|
21
|
+
commonParseErrorHandling(error);
|
|
22
|
+
}
|
|
23
|
+
})();
|
|
17
24
|
}
|
|
18
25
|
Object.defineProperties(parseResponse, {
|
|
19
26
|
toArray: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseResponse.js","sources":["../src/parseResponse.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n
|
|
1
|
+
{"version":3,"file":"parseResponse.js","sources":["../src/parseResponse.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n // Validate synchronously before creating async generator\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new TypeError(\"Response body is null\");\n }\n\n // Return wrapper async generator for error handling\n return (async function* () {\n try {\n const result = parseUint8ArrayStream(response.body!, options_);\n if (result instanceof Promise) {\n yield* await result;\n } else {\n yield* result;\n }\n } catch (error) {\n commonParseErrorHandling(error);\n }\n })();\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;;;AAuCO,SAAS,aAAA,CACd,UACA,OAAA,EAC0C;AAE1C,EAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,EAAU,OAAO,CAAA;AACzD,EAAA,IAAI,QAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,IAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,EAC7C;AAGA,EAAA,OAAA,CAAQ,mBAAmB;AACzB,IAAA,IAAI;AACF,MAAA,MAAM,MAAA,GAAS,qBAAA,CAAsB,QAAA,CAAS,IAAA,EAAO,QAAQ,CAAA;AAC7D,MAAA,IAAI,kBAAkB,OAAA,EAAS;AAC7B,QAAA,OAAO,MAAM,MAAA;AAAA,MACf,CAAA,MAAO;AACL,QAAA,OAAO,MAAA;AAAA,MACT;AAAA,IACF,SAAS,KAAA,EAAO;AACd,MAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,IAChC;AAAA,EACF,CAAA,GAAG;AACL;AAuDA,MAAA,CAAO,iBAAiB,aAAA,EAAe;AAAA,EACrC,OAAA,EAAS;AAAA,IACP,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,YAAA,EAAc;AAAA,IACZ,UAAA,EAAY,IAAA;AAAA,IACZ,QAAA,EAAU,KAAA;AAAA,IACV,KAAA,EAAO;AAAA;AAEX,CAAC,CAAA;;;;"}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
import { CSVRecord, ParseBinaryOptions } from './common/types.ts';
|
|
2
|
-
|
|
2
|
+
import { DEFAULT_DELIMITER } from './constants.ts';
|
|
3
|
+
export declare function parseResponseToStream<Header extends ReadonlyArray<string>, Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = '"'>(response: Response, options?: ParseBinaryOptions<Header, Delimiter, Quotation>): ReadableStream<CSVRecord<Header>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parseResponseToStream.js","sources":["../src/parseResponseToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseUint8ArrayStreamToStream } from \"./parseUint8ArrayStreamToStream.ts\";\n\nexport function parseResponseToStream
|
|
1
|
+
{"version":3,"file":"parseResponseToStream.js","sources":["../src/parseResponseToStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseUint8ArrayStreamToStream } from \"./parseUint8ArrayStreamToStream.ts\";\n\nexport function parseResponseToStream<\n Header extends ReadonlyArray<string>,\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = '\"',\n>(\n response: Response,\n options?: ParseBinaryOptions<Header, Delimiter, Quotation>,\n): ReadableStream<CSVRecord<Header>> {\n try {\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new TypeError(\"Response body is null\");\n }\n return parseUint8ArrayStreamToStream(response.body, options_);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AAMO,SAAS,qBAAA,CAKd,UACA,OAAA,EACmC;AACnC,EAAA,IAAI;AACF,IAAA,MAAM,QAAA,GAAW,sBAAA,CAAuB,QAAA,EAAU,OAAO,CAAA;AACzD,IAAA,IAAI,QAAA,CAAS,SAAS,IAAA,EAAM;AAC1B,MAAA,MAAM,IAAI,UAAU,uBAAuB,CAAA;AAAA,IAC7C;AACA,IAAA,OAAO,6BAAA,CAA8B,QAAA,CAAS,IAAA,EAAM,QAAQ,CAAA;AAAA,EAC9D,SAAS,KAAA,EAAO;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA,EAChC;AACF;;;;"}
|
package/dist/parseString.d.ts
CHANGED
|
@@ -17,6 +17,25 @@ import { PickCSVHeader } from './utils/types.ts';
|
|
|
17
17
|
* - **Suitable for**: Files of any size
|
|
18
18
|
* - **Recommended for**: Large CSV strings (> 10MB) or memory-constrained environments
|
|
19
19
|
*
|
|
20
|
+
* **Execution Strategies:**
|
|
21
|
+
* Control how parsing is executed using the `engine` option:
|
|
22
|
+
* - **Main thread** (default): `engine: { worker: false }` - No overhead, good for small files
|
|
23
|
+
* - **Worker thread**: `engine: { worker: true }` - Offloads parsing, good for large files
|
|
24
|
+
* - **WebAssembly**: `engine: { wasm: true }` - Fast parsing, limited to UTF-8 and double-quotes
|
|
25
|
+
* - **Combined**: `engine: { worker: true, wasm: true }` - Worker + WASM for maximum performance
|
|
26
|
+
*
|
|
27
|
+
* Use {@link EnginePresets} for convenient configurations:
|
|
28
|
+
* ```ts
|
|
29
|
+
* import { parseString, EnginePresets } from 'web-csv-toolbox';
|
|
30
|
+
*
|
|
31
|
+
* // Use fastest available execution method
|
|
32
|
+
* for await (const record of parseString(csv, {
|
|
33
|
+
* engine: EnginePresets.fastest()
|
|
34
|
+
* })) {
|
|
35
|
+
* console.log(record);
|
|
36
|
+
* }
|
|
37
|
+
* ```
|
|
38
|
+
*
|
|
20
39
|
* @example Parsing CSV files from strings
|
|
21
40
|
*
|
|
22
41
|
* ```ts
|
|
@@ -33,6 +52,18 @@ import { PickCSVHeader } from './utils/types.ts';
|
|
|
33
52
|
* // { name: 'Alice', age: '42' }
|
|
34
53
|
* // { name: 'Bob', age: '69' }
|
|
35
54
|
* ```
|
|
55
|
+
*
|
|
56
|
+
* @example Using worker execution for better performance
|
|
57
|
+
* ```ts
|
|
58
|
+
* import { parseString } from 'web-csv-toolbox';
|
|
59
|
+
*
|
|
60
|
+
* // Offload parsing to a worker thread
|
|
61
|
+
* for await (const record of parseString(largeCSV, {
|
|
62
|
+
* engine: { worker: true }
|
|
63
|
+
* })) {
|
|
64
|
+
* console.log(record);
|
|
65
|
+
* }
|
|
66
|
+
* ```
|
|
36
67
|
*/
|
|
37
68
|
export declare function parseString<const CSVSource extends string>(csv: CSVSource): AsyncIterableIterator<CSVRecord<PickCSVHeader<CSVSource>>>;
|
|
38
69
|
export declare function parseString<const Header extends ReadonlyArray<string>>(csv: string): AsyncIterableIterator<CSVRecord<Header>>;
|
package/dist/parseString.js
CHANGED
|
@@ -1,12 +1,38 @@
|
|
|
1
1
|
import { commonParseErrorHandling } from './commonParseErrorHandling.js';
|
|
2
|
+
import { InternalEngineConfig } from './execution/InternalEngineConfig.js';
|
|
3
|
+
import { WorkerSession } from './execution/worker/helpers/WorkerSession.js';
|
|
4
|
+
import { executeWithWorkerStrategy } from './execution/worker/strategies/WorkerStrategySelector.js';
|
|
2
5
|
import { parseStringToArraySync } from './parseStringToArraySync.js';
|
|
6
|
+
import { parseStringToArraySyncWASM } from './parseStringToArraySyncWASM.js';
|
|
3
7
|
import { parseStringToIterableIterator } from './parseStringToIterableIterator.js';
|
|
4
8
|
import { parseStringToStream } from './parseStringToStream.js';
|
|
5
9
|
import { convertThisAsyncIterableIteratorToArray } from './utils/convertThisAsyncIterableIteratorToArray.js';
|
|
6
10
|
|
|
7
11
|
async function* parseString(csv, options) {
|
|
8
12
|
try {
|
|
9
|
-
|
|
13
|
+
const engineConfig = new InternalEngineConfig(options?.engine);
|
|
14
|
+
if (engineConfig.hasWorker()) {
|
|
15
|
+
const session = engineConfig.workerPool ? await WorkerSession.create({
|
|
16
|
+
workerPool: engineConfig.workerPool,
|
|
17
|
+
workerURL: engineConfig.workerURL
|
|
18
|
+
}) : null;
|
|
19
|
+
try {
|
|
20
|
+
yield* executeWithWorkerStrategy(
|
|
21
|
+
csv,
|
|
22
|
+
options,
|
|
23
|
+
session,
|
|
24
|
+
engineConfig
|
|
25
|
+
);
|
|
26
|
+
} finally {
|
|
27
|
+
session?.[Symbol.dispose]();
|
|
28
|
+
}
|
|
29
|
+
} else {
|
|
30
|
+
if (engineConfig.hasWasm()) {
|
|
31
|
+
yield* parseStringToArraySyncWASM(csv, options);
|
|
32
|
+
} else {
|
|
33
|
+
yield* parseStringToIterableIterator(csv, options);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
10
36
|
} catch (error) {
|
|
11
37
|
commonParseErrorHandling(error);
|
|
12
38
|
}
|