web-csv-toolbox 0.12.0-next-6e838bd89dfc6fa10aadf1cf5596847051f0fa22 → 0.12.0-next-b221fc714faa4b33d33a3349982a1608d8a19b2f
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 +3 -22
- package/dist/{types/Lexer.d.ts → Lexer.d.ts} +1 -1
- package/dist/Lexer.js.map +1 -0
- package/dist/LexerTransformer.js.map +1 -0
- package/dist/RecordAssembler.js.map +1 -0
- package/dist/RecordAssemblerTransformer.js.map +1 -0
- package/dist/_virtual/web_csv_toolbox_wasm_bg.wasm.js +4 -0
- package/dist/assertCommonOptions.js.map +1 -0
- package/dist/common/constants.js.map +1 -0
- package/dist/common/errors.js.map +1 -0
- package/dist/commonParseErrorHandling.js.map +1 -0
- package/dist/constants.js.map +1 -0
- package/dist/{types/escapeField.d.ts → escapeField.d.ts} +1 -1
- package/dist/getOptionsFromResponse.js.map +1 -0
- package/dist/loadWASM.js.map +1 -0
- package/dist/loadWASM.web.js.map +1 -0
- package/dist/parse.js.map +1 -0
- package/dist/parseBinary.js.map +1 -0
- package/dist/parseBinaryToArraySync.js.map +1 -0
- package/dist/parseBinaryToIterableIterator.js.map +1 -0
- package/dist/parseBinaryToStream.js.map +1 -0
- package/dist/parseResponse.js.map +1 -0
- package/dist/parseResponseToStream.js.map +1 -0
- package/dist/parseString.js.map +1 -0
- package/dist/parseStringStream.js.map +1 -0
- package/dist/parseStringStreamToStream.js.map +1 -0
- package/dist/parseStringToArraySync.js.map +1 -0
- package/dist/parseStringToArraySyncWASM.js.map +1 -0
- package/dist/parseStringToIterableIterator.js.map +1 -0
- package/dist/parseStringToStream.js.map +1 -0
- package/dist/parseUint8ArrayStream.js.map +1 -0
- package/dist/parseUint8ArrayStreamToStream.js.map +1 -0
- package/dist/utils/convertBinaryToString.js.map +1 -0
- package/dist/utils/convertIterableIteratorToAsync.js.map +1 -0
- package/dist/utils/convertStreamToAsyncIterableIterator.js.map +1 -0
- package/dist/utils/convertThisAsyncIterableIteratorToArray.js.map +1 -0
- package/dist/utils/escapeRegExp.js.map +1 -0
- package/dist/utils/parseMime.js.map +1 -0
- package/dist/utils/pipeline.js.map +1 -0
- package/dist/web_csv_toolbox_wasm_bg.wasm +0 -0
- package/package.json +15 -32
- package/dist/cjs/Lexer.cjs +0 -2
- package/dist/cjs/Lexer.cjs.map +0 -1
- package/dist/cjs/LexerTransformer.cjs +0 -2
- package/dist/cjs/LexerTransformer.cjs.map +0 -1
- package/dist/cjs/RecordAssembler.cjs +0 -2
- package/dist/cjs/RecordAssembler.cjs.map +0 -1
- package/dist/cjs/RecordAssemblerTransformer.cjs +0 -2
- package/dist/cjs/RecordAssemblerTransformer.cjs.map +0 -1
- package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs +0 -2
- package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs.map +0 -1
- package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs +0 -2
- package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs.map +0 -1
- package/dist/cjs/assertCommonOptions.cjs +0 -2
- package/dist/cjs/assertCommonOptions.cjs.map +0 -1
- package/dist/cjs/common/constants.cjs +0 -2
- package/dist/cjs/common/constants.cjs.map +0 -1
- package/dist/cjs/common/errors.cjs +0 -2
- package/dist/cjs/common/errors.cjs.map +0 -1
- package/dist/cjs/commonParseErrorHandling.cjs +0 -2
- package/dist/cjs/commonParseErrorHandling.cjs.map +0 -1
- package/dist/cjs/constants.cjs +0 -2
- package/dist/cjs/constants.cjs.map +0 -1
- package/dist/cjs/getOptionsFromResponse.cjs +0 -2
- package/dist/cjs/getOptionsFromResponse.cjs.map +0 -1
- package/dist/cjs/loadWASM.cjs +0 -2
- package/dist/cjs/loadWASM.cjs.map +0 -1
- package/dist/cjs/loadWASM.web.cjs +0 -2
- package/dist/cjs/loadWASM.web.cjs.map +0 -1
- package/dist/cjs/parse.cjs +0 -2
- package/dist/cjs/parse.cjs.map +0 -1
- package/dist/cjs/parseBinary.cjs +0 -2
- package/dist/cjs/parseBinary.cjs.map +0 -1
- package/dist/cjs/parseBinaryToArraySync.cjs +0 -2
- package/dist/cjs/parseBinaryToArraySync.cjs.map +0 -1
- package/dist/cjs/parseBinaryToIterableIterator.cjs +0 -2
- package/dist/cjs/parseBinaryToIterableIterator.cjs.map +0 -1
- package/dist/cjs/parseBinaryToStream.cjs +0 -2
- package/dist/cjs/parseBinaryToStream.cjs.map +0 -1
- package/dist/cjs/parseResponse.cjs +0 -2
- package/dist/cjs/parseResponse.cjs.map +0 -1
- package/dist/cjs/parseResponseToStream.cjs +0 -2
- package/dist/cjs/parseResponseToStream.cjs.map +0 -1
- package/dist/cjs/parseString.cjs +0 -2
- package/dist/cjs/parseString.cjs.map +0 -1
- package/dist/cjs/parseStringStream.cjs +0 -2
- package/dist/cjs/parseStringStream.cjs.map +0 -1
- package/dist/cjs/parseStringStreamToStream.cjs +0 -2
- package/dist/cjs/parseStringStreamToStream.cjs.map +0 -1
- package/dist/cjs/parseStringToArraySync.cjs +0 -2
- package/dist/cjs/parseStringToArraySync.cjs.map +0 -1
- package/dist/cjs/parseStringToArraySyncWASM.cjs +0 -2
- package/dist/cjs/parseStringToArraySyncWASM.cjs.map +0 -1
- package/dist/cjs/parseStringToIterableIterator.cjs +0 -2
- package/dist/cjs/parseStringToIterableIterator.cjs.map +0 -1
- package/dist/cjs/parseStringToStream.cjs +0 -2
- package/dist/cjs/parseStringToStream.cjs.map +0 -1
- package/dist/cjs/parseUint8ArrayStream.cjs +0 -2
- package/dist/cjs/parseUint8ArrayStream.cjs.map +0 -1
- package/dist/cjs/parseUint8ArrayStreamToStream.cjs +0 -2
- package/dist/cjs/parseUint8ArrayStreamToStream.cjs.map +0 -1
- package/dist/cjs/utils/convertBinaryToString.cjs +0 -2
- package/dist/cjs/utils/convertBinaryToString.cjs.map +0 -1
- package/dist/cjs/utils/convertIterableIteratorToAsync.cjs +0 -2
- package/dist/cjs/utils/convertIterableIteratorToAsync.cjs.map +0 -1
- package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs +0 -2
- package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs.map +0 -1
- package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs +0 -2
- package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs.map +0 -1
- package/dist/cjs/utils/escapeRegExp.cjs +0 -2
- package/dist/cjs/utils/escapeRegExp.cjs.map +0 -1
- package/dist/cjs/utils/parseMime.cjs +0 -2
- package/dist/cjs/utils/parseMime.cjs.map +0 -1
- package/dist/cjs/utils/pipeline.cjs +0 -2
- package/dist/cjs/utils/pipeline.cjs.map +0 -1
- package/dist/cjs/web-csv-toolbox.cjs +0 -2
- package/dist/cjs/web-csv-toolbox.cjs.map +0 -1
- package/dist/es/Lexer.js.map +0 -1
- package/dist/es/LexerTransformer.js.map +0 -1
- package/dist/es/RecordAssembler.js.map +0 -1
- package/dist/es/RecordAssemblerTransformer.js.map +0 -1
- package/dist/es/_virtual/web_csv_toolbox_wasm_bg.wasm.js +0 -4
- package/dist/es/assertCommonOptions.js.map +0 -1
- package/dist/es/common/constants.js.map +0 -1
- package/dist/es/common/errors.js.map +0 -1
- package/dist/es/commonParseErrorHandling.js.map +0 -1
- package/dist/es/constants.js.map +0 -1
- package/dist/es/getOptionsFromResponse.js.map +0 -1
- package/dist/es/loadWASM.js.map +0 -1
- package/dist/es/loadWASM.web.js.map +0 -1
- package/dist/es/parse.js.map +0 -1
- package/dist/es/parseBinary.js.map +0 -1
- package/dist/es/parseBinaryToArraySync.js.map +0 -1
- package/dist/es/parseBinaryToIterableIterator.js.map +0 -1
- package/dist/es/parseBinaryToStream.js.map +0 -1
- package/dist/es/parseResponse.js.map +0 -1
- package/dist/es/parseResponseToStream.js.map +0 -1
- package/dist/es/parseString.js.map +0 -1
- package/dist/es/parseStringStream.js.map +0 -1
- package/dist/es/parseStringStreamToStream.js.map +0 -1
- package/dist/es/parseStringToArraySync.js.map +0 -1
- package/dist/es/parseStringToArraySyncWASM.js.map +0 -1
- package/dist/es/parseStringToIterableIterator.js.map +0 -1
- package/dist/es/parseStringToStream.js.map +0 -1
- package/dist/es/parseUint8ArrayStream.js.map +0 -1
- package/dist/es/parseUint8ArrayStreamToStream.js.map +0 -1
- package/dist/es/utils/convertBinaryToString.js.map +0 -1
- package/dist/es/utils/convertIterableIteratorToAsync.js.map +0 -1
- package/dist/es/utils/convertStreamToAsyncIterableIterator.js.map +0 -1
- package/dist/es/utils/convertThisAsyncIterableIteratorToArray.js.map +0 -1
- package/dist/es/utils/escapeRegExp.js.map +0 -1
- package/dist/es/utils/parseMime.js.map +0 -1
- package/dist/es/utils/pipeline.js.map +0 -1
- package/dist/web-csv-toolbox.umd.cjs +0 -2
- package/dist/web-csv-toolbox.umd.cjs.map +0 -1
- /package/dist/{es/Lexer.js → Lexer.js} +0 -0
- /package/dist/{types/LexerTransformer.d.ts → LexerTransformer.d.ts} +0 -0
- /package/dist/{es/LexerTransformer.js → LexerTransformer.js} +0 -0
- /package/dist/{types/RecordAssembler.d.ts → RecordAssembler.d.ts} +0 -0
- /package/dist/{es/RecordAssembler.js → RecordAssembler.js} +0 -0
- /package/dist/{types/RecordAssemblerTransformer.d.ts → RecordAssemblerTransformer.d.ts} +0 -0
- /package/dist/{es/RecordAssemblerTransformer.js → RecordAssemblerTransformer.js} +0 -0
- /package/dist/{es/_virtual → _virtual}/_web-csv-toolbox-wasm.js +0 -0
- /package/dist/{es/_virtual → _virtual}/_web-csv-toolbox-wasm.js.map +0 -0
- /package/dist/{es/_virtual → _virtual}/web_csv_toolbox_wasm_bg.wasm.js.map +0 -0
- /package/dist/{types/assertCommonOptions.d.ts → assertCommonOptions.d.ts} +0 -0
- /package/dist/{es/assertCommonOptions.js → assertCommonOptions.js} +0 -0
- /package/dist/{types/common → common}/constants.d.ts +0 -0
- /package/dist/{es/common → common}/constants.js +0 -0
- /package/dist/{types/common → common}/errors.d.ts +0 -0
- /package/dist/{es/common → common}/errors.js +0 -0
- /package/dist/{types/common → common}/types.d.ts +0 -0
- /package/dist/{types/commonParseErrorHandling.d.ts → commonParseErrorHandling.d.ts} +0 -0
- /package/dist/{es/commonParseErrorHandling.js → commonParseErrorHandling.js} +0 -0
- /package/dist/{types/constants.d.ts → constants.d.ts} +0 -0
- /package/dist/{es/constants.js → constants.js} +0 -0
- /package/dist/{types/getOptionsFromResponse.d.ts → getOptionsFromResponse.d.ts} +0 -0
- /package/dist/{es/getOptionsFromResponse.js → getOptionsFromResponse.js} +0 -0
- /package/dist/{types/loadWASM.d.ts → loadWASM.d.ts} +0 -0
- /package/dist/{es/loadWASM.js → loadWASM.js} +0 -0
- /package/dist/{types/loadWASM.web.d.ts → loadWASM.web.d.ts} +0 -0
- /package/dist/{es/loadWASM.web.js → loadWASM.web.js} +0 -0
- /package/dist/{types/parse.d.ts → parse.d.ts} +0 -0
- /package/dist/{es/parse.js → parse.js} +0 -0
- /package/dist/{types/parseBinary.d.ts → parseBinary.d.ts} +0 -0
- /package/dist/{es/parseBinary.js → parseBinary.js} +0 -0
- /package/dist/{types/parseBinaryToArraySync.d.ts → parseBinaryToArraySync.d.ts} +0 -0
- /package/dist/{es/parseBinaryToArraySync.js → parseBinaryToArraySync.js} +0 -0
- /package/dist/{types/parseBinaryToIterableIterator.d.ts → parseBinaryToIterableIterator.d.ts} +0 -0
- /package/dist/{es/parseBinaryToIterableIterator.js → parseBinaryToIterableIterator.js} +0 -0
- /package/dist/{types/parseBinaryToStream.d.ts → parseBinaryToStream.d.ts} +0 -0
- /package/dist/{es/parseBinaryToStream.js → parseBinaryToStream.js} +0 -0
- /package/dist/{types/parseResponse.d.ts → parseResponse.d.ts} +0 -0
- /package/dist/{es/parseResponse.js → parseResponse.js} +0 -0
- /package/dist/{types/parseResponseToStream.d.ts → parseResponseToStream.d.ts} +0 -0
- /package/dist/{es/parseResponseToStream.js → parseResponseToStream.js} +0 -0
- /package/dist/{types/parseString.d.ts → parseString.d.ts} +0 -0
- /package/dist/{es/parseString.js → parseString.js} +0 -0
- /package/dist/{types/parseStringStream.d.ts → parseStringStream.d.ts} +0 -0
- /package/dist/{es/parseStringStream.js → parseStringStream.js} +0 -0
- /package/dist/{types/parseStringStreamToStream.d.ts → parseStringStreamToStream.d.ts} +0 -0
- /package/dist/{es/parseStringStreamToStream.js → parseStringStreamToStream.js} +0 -0
- /package/dist/{types/parseStringToArraySync.d.ts → parseStringToArraySync.d.ts} +0 -0
- /package/dist/{es/parseStringToArraySync.js → parseStringToArraySync.js} +0 -0
- /package/dist/{types/parseStringToArraySyncWASM.d.ts → parseStringToArraySyncWASM.d.ts} +0 -0
- /package/dist/{es/parseStringToArraySyncWASM.js → parseStringToArraySyncWASM.js} +0 -0
- /package/dist/{types/parseStringToIterableIterator.d.ts → parseStringToIterableIterator.d.ts} +0 -0
- /package/dist/{es/parseStringToIterableIterator.js → parseStringToIterableIterator.js} +0 -0
- /package/dist/{types/parseStringToStream.d.ts → parseStringToStream.d.ts} +0 -0
- /package/dist/{es/parseStringToStream.js → parseStringToStream.js} +0 -0
- /package/dist/{types/parseUint8ArrayStream.d.ts → parseUint8ArrayStream.d.ts} +0 -0
- /package/dist/{es/parseUint8ArrayStream.js → parseUint8ArrayStream.js} +0 -0
- /package/dist/{types/parseUint8ArrayStreamToStream.d.ts → parseUint8ArrayStreamToStream.d.ts} +0 -0
- /package/dist/{es/parseUint8ArrayStreamToStream.js → parseUint8ArrayStreamToStream.js} +0 -0
- /package/dist/{types/utils → utils}/SingleValueReadableStream.d.ts +0 -0
- /package/dist/{types/utils → utils}/convertBinaryToString.d.ts +0 -0
- /package/dist/{es/utils → utils}/convertBinaryToString.js +0 -0
- /package/dist/{types/utils → utils}/convertIterableIteratorToAsync.d.ts +0 -0
- /package/dist/{es/utils → utils}/convertIterableIteratorToAsync.js +0 -0
- /package/dist/{types/utils → utils}/convertStreamToAsyncIterableIterator.d.ts +0 -0
- /package/dist/{es/utils → utils}/convertStreamToAsyncIterableIterator.js +0 -0
- /package/dist/{types/utils → utils}/convertThisAsyncIterableIteratorToArray.d.ts +0 -0
- /package/dist/{es/utils → utils}/convertThisAsyncIterableIteratorToArray.js +0 -0
- /package/dist/{types/utils → utils}/escapeRegExp.d.ts +0 -0
- /package/dist/{es/utils → utils}/escapeRegExp.js +0 -0
- /package/dist/{types/utils → utils}/occurrences.d.ts +0 -0
- /package/dist/{types/utils → utils}/parseMime.d.ts +0 -0
- /package/dist/{es/utils → utils}/parseMime.js +0 -0
- /package/dist/{types/utils → utils}/pipeline.d.ts +0 -0
- /package/dist/{es/utils → utils}/pipeline.js +0 -0
- /package/dist/{types/utils → utils}/types.d.ts +0 -0
- /package/dist/{types/web-csv-toolbox-wasm.d.ts → web-csv-toolbox-wasm.d.ts} +0 -0
- /package/dist/{types/web-csv-toolbox.d.ts → web-csv-toolbox.d.ts} +0 -0
- /package/dist/{es/web-csv-toolbox.js → web-csv-toolbox.js} +0 -0
- /package/dist/{es/web-csv-toolbox.js.map → web-csv-toolbox.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringToArraySyncWASM.js","sources":["../src/parseStringToArraySyncWASM.ts"],"sourcesContent":["import { parseStringToArraySync } from \"web-csv-toolbox-wasm\";\nimport { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport type { CSVRecord, CommonOptions } from \"./common/types.ts\";\nimport {\n DEFAULT_DELIMITER,\n DEFAULT_QUOTATION,\n DOUBLE_QUOTE,\n} from \"./constants.ts\";\nimport type { loadWASM } from \"./loadWASM.ts\";\nimport type { PickCSVHeader } from \"./utils/types.ts\";\n\n/**\n * Parse CSV string to record of arrays.\n *\n * @param csv CSV string\n * @param options Parse options\n * @returns Record of arrays\n *\n * @remarks\n * This function uses WebAssembly to parse CSV string.\n * Before calling this function, you must call {@link loadWASM} function.\n *\n * This function only supports UTF-8 string.\n * If you pass a string that is not UTF-8, like UTF-16, it throws an error.\n * This function only supports double quote as quotation.\n * So, `options.quotation` must be `\"` (double quote). Otherwise, it throws an error.\n *\n * And this function only supports single character as delimiter.\n * So, `options.delimiter` must be a single character. Otherwise, it throws an error.\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 *\n * const result = parseStringToArraySyncWASM(csv);\n * console.log(result);\n * // Prints:\n * // [{ a: \"1\", b: \"2\", c: \"3\" }]\n * ```\n * @beta\n * @throws {RangeError | TypeError} - If provided options are invalid.\n */\nexport function parseStringToArraySyncWASM<\n const CSVSource extends string,\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: CommonOptions<Delimiter, Quotation>,\n): CSVRecord<Header>[];\nexport function parseStringToArraySyncWASM<\n const CSVSource extends string,\n const Delimiter extends string = DEFAULT_DELIMITER,\n const Quotation extends string = DEFAULT_QUOTATION,\n const Header extends ReadonlyArray<string> = PickCSVHeader<CSVSource>,\n>(\n csv: CSVSource,\n options?: CommonOptions<Delimiter, Quotation>,\n): CSVRecord<Header>[];\nexport function parseStringToArraySyncWASM<\n const Header extends ReadonlyArray<string>,\n const Delimiter extends string = DEFAULT_DELIMITER,\n const Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options?: CommonOptions<Delimiter, Quotation>,\n): CSVRecord<Header>[];\nexport function parseStringToArraySyncWASM<\n const Header extends readonly string[],\n const Delimiter extends string = DEFAULT_DELIMITER,\n const Quotation extends string = DEFAULT_QUOTATION,\n>(\n csv: string,\n options: CommonOptions<Delimiter, Quotation> = {},\n): CSVRecord<Header>[] {\n const { delimiter = DEFAULT_DELIMITER, quotation = DEFAULT_QUOTATION } =\n options;\n if (typeof delimiter !== \"string\" || delimiter.length !== 1) {\n throw new RangeError(\n \"Invalid delimiter, must be a single character on WASM.\",\n );\n }\n if (quotation !== DOUBLE_QUOTE) {\n throw new RangeError(\"Invalid quotation, must be double quote on WASM.\");\n }\n assertCommonOptions({ delimiter, quotation });\n const demiliterCode = delimiter.charCodeAt(0);\n return JSON.parse(parseStringToArraySync(csv, demiliterCode));\n}\n"],"names":[],"mappings":";;;;AA6EO,SAAS,0BAKd,CAAA,GAAA,EACA,OAA+C,GAAA,EAC1B,EAAA;AACrB,EAAA,MAAM,EAAE,SAAA,GAAY,iBAAmB,EAAA,SAAA,GAAY,mBACjD,GAAA,OAAA;AACF,EAAA,IAAI,OAAO,SAAA,KAAc,QAAY,IAAA,SAAA,CAAU,WAAW,CAAG,EAAA;AAC3D,IAAA,MAAM,IAAI,UAAA;AAAA,MACR;AAAA,KACF;AAAA;AAEF,EAAA,IAAI,cAAc,YAAc,EAAA;AAC9B,IAAM,MAAA,IAAI,WAAW,kDAAkD,CAAA;AAAA;AAEzE,EAAoB,mBAAA,CAAA,EAAE,SAAW,EAAA,SAAA,EAAW,CAAA;AAC5C,EAAM,MAAA,aAAA,GAAgB,SAAU,CAAA,UAAA,CAAW,CAAC,CAAA;AAC5C,EAAA,OAAO,IAAK,CAAA,KAAA,CAAM,sBAAuB,CAAA,GAAA,EAAK,aAAa,CAAC,CAAA;AAC9D;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringToIterableIterator.js","sources":["../src/parseStringToIterableIterator.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport type { PickCSVHeader } from \"./utils/types.ts\";\n\nexport function parseStringToIterableIterator<\n const CSVSource extends string,\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 stream: CSVSource,\n options: ParseOptions<Header, Delimiter, Quotation>,\n): IterableIterator<CSVRecord<Header>>;\nexport function parseStringToIterableIterator<\n const CSVSource extends string,\n const Header extends ReadonlyArray<string> = PickCSVHeader<CSVSource>,\n>(\n stream: CSVSource,\n options?: ParseOptions<Header>,\n): IterableIterator<CSVRecord<Header>>;\nexport function parseStringToIterableIterator<\n const Header extends ReadonlyArray<string>,\n>(\n stream: string,\n options?: ParseOptions<Header>,\n): IterableIterator<CSVRecord<Header>>;\nexport function parseStringToIterableIterator<\n const Header extends ReadonlyArray<string>,\n>(\n csv: string,\n options?: ParseOptions<Header>,\n): IterableIterator<CSVRecord<Header>> {\n try {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n const tokens = lexer.lex(csv);\n return assembler.assemble(tokens);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AAiCgB,SAAA,6BAAA,CAGd,KACA,OACqC,EAAA;AACrC,EAAI,IAAA;AACF,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAM,MAAA,SAAA,GAAY,IAAI,eAAA,CAAgB,OAAO,CAAA;AAC7C,IAAM,MAAA,MAAA,GAAS,KAAM,CAAA,GAAA,CAAI,GAAG,CAAA;AAC5B,IAAO,OAAA,SAAA,CAAU,SAAS,MAAM,CAAA;AAAA,WACzB,KAAO,EAAA;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA;AAElC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseStringToStream.js","sources":["../src/parseStringToStream.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\nimport type { PickCSVHeader } from \"./utils/types.ts\";\n\nexport function parseStringToStream<\n const CSVSource extends string,\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 stream: CSVSource,\n options: ParseOptions<Header, Delimiter, Quotation>,\n): ReadableStream<CSVRecord<Header>>;\nexport function parseStringToStream<\n const CSVSource extends string,\n const Header extends ReadonlyArray<string> = PickCSVHeader<CSVSource>,\n>(\n stream: CSVSource,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>>;\nexport function parseStringToStream<const Header extends ReadonlyArray<string>>(\n stream: string,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>>;\nexport function parseStringToStream<const Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\n try {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n return new ReadableStream({\n start(controller) {\n const tokens = lexer.lex(csv);\n for (const record of assembler.assemble(tokens)) {\n controller.enqueue(record);\n }\n controller.close();\n },\n });\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":[],"mappings":";;;;AA+BgB,SAAA,mBAAA,CACd,KACA,OACmC,EAAA;AACnC,EAAI,IAAA;AACF,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAM,MAAA,SAAA,GAAY,IAAI,eAAA,CAAgB,OAAO,CAAA;AAC7C,IAAA,OAAO,IAAI,cAAe,CAAA;AAAA,MACxB,MAAM,UAAY,EAAA;AAChB,QAAM,MAAA,MAAA,GAAS,KAAM,CAAA,GAAA,CAAI,GAAG,CAAA;AAC5B,QAAA,KAAA,MAAW,MAAU,IAAA,SAAA,CAAU,QAAS,CAAA,MAAM,CAAG,EAAA;AAC/C,UAAA,UAAA,CAAW,QAAQ,MAAM,CAAA;AAAA;AAE3B,QAAA,UAAA,CAAW,KAAM,EAAA;AAAA;AACnB,KACD,CAAA;AAAA,WACM,KAAO,EAAA;AACd,IAAA,wBAAA,CAAyB,KAAK,CAAA;AAAA;AAElC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseUint8ArrayStream.js","sources":["../src/parseUint8ArrayStream.ts"],"sourcesContent":["import type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStreamToStream } from \"./parseUint8ArrayStreamToStream.ts\";\nimport { convertStreamToAsyncIterableIterator } from \"./utils/convertStreamToAsyncIterableIterator.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV to records.\n * This function is for parsing a binary stream.\n *\n * @category Middle-level API\n * @remarks\n * If you want to parse a string, use {@link parseStringStream}.\n * @param stream CSV string to parse\n * @param options Parsing options.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseUint8ArrayStream.toArray} function.\n *\n * @example Parsing CSV binary\n *\n * ```ts\n * import { parseUint8ArrayStream } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\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 parseUint8ArrayStream(csv)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseUint8ArrayStream<Header extends ReadonlyArray<string>>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const recordStream = parseUint8ArrayStreamToStream(stream, options);\n return convertStreamToAsyncIterableIterator(recordStream);\n}\n\nexport declare namespace parseUint8ArrayStream {\n /**\n * Parse CSV binary to array of records,\n * ideal for smaller data sets.\n *\n * @returns Array of records\n *\n * @example Parsing CSV binary\n * ```ts\n * import { parseUint8ArrayStream } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * },\n * });\n *\n * const records = await parseUint8ArrayStream.toArray(stream);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV binary to array of records.\n *\n * @returns Stream of records\n *\n * @example Parsing CSV binary\n * ```ts\n * import { parseUint8ArrayStream } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * },\n * });\n *\n * await parseUint8ArrayStream.toStream(stream)\n * .pipeTo(new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>[]>;\n}\nObject.defineProperties(parseUint8ArrayStream, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseUint8ArrayStreamToStream,\n },\n});\n"],"names":["internal.convertThisAsyncIterableIteratorToArray"],"mappings":";;;;AAwCgB,SAAA,qBAAA,CACd,QACA,OAC0C,EAAA;AAC1C,EAAM,MAAA,YAAA,GAAe,6BAA8B,CAAA,MAAA,EAAQ,OAAO,CAAA;AAClE,EAAA,OAAO,qCAAqC,YAAY,CAAA;AAC1D;AAkEA,MAAA,CAAO,iBAAiB,qBAAuB,EAAA;AAAA,EAC7C,OAAS,EAAA;AAAA,IACP,UAAY,EAAA,IAAA;AAAA,IACZ,QAAU,EAAA,KAAA;AAAA,IACV,OAAOA;AAAS,GAClB;AAAA,EACA,QAAU,EAAA;AAAA,IACR,UAAY,EAAA,IAAA;AAAA,IACZ,QAAU,EAAA,KAAA;AAAA,IACV,KAAO,EAAA;AAAA;AAEX,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseUint8ArrayStreamToStream.js","sources":["../src/parseUint8ArrayStreamToStream.ts"],"sourcesContent":["import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport type { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { pipeline } from \"./utils/pipeline.ts\";\n\nexport function parseUint8ArrayStreamToStream<Header extends readonly string[]>(\n stream: ReadableStream<Uint8Array>,\n options?: ParseBinaryOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\n const { charset, fatal, ignoreBOM, decomposition } = options ?? {};\n return decomposition\n ? pipeline(\n stream,\n new DecompressionStream(decomposition),\n new TextDecoderStream(charset, { fatal, ignoreBOM }),\n new LexerTransformer(options),\n new RecordAssemblerTransformer(options),\n )\n : pipeline(\n stream,\n new TextDecoderStream(charset, { fatal, ignoreBOM }),\n new LexerTransformer(options),\n new RecordAssemblerTransformer(options),\n );\n}\n"],"names":[],"mappings":";;;;AAKgB,SAAA,6BAAA,CACd,QACA,OACmC,EAAA;AACnC,EAAA,MAAM,EAAE,OAAS,EAAA,KAAA,EAAO,WAAW,aAAc,EAAA,GAAI,WAAW,EAAC;AACjE,EAAA,OAAO,aACH,GAAA,QAAA;AAAA,IACE,MAAA;AAAA,IACA,IAAI,oBAAoB,aAAa,CAAA;AAAA,IACrC,IAAI,iBAAkB,CAAA,OAAA,EAAS,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD,IAAI,iBAAiB,OAAO,CAAA;AAAA,IAC5B,IAAI,2BAA2B,OAAO;AAAA,GAExC,GAAA,QAAA;AAAA,IACE,MAAA;AAAA,IACA,IAAI,iBAAkB,CAAA,OAAA,EAAS,EAAE,KAAA,EAAO,WAAW,CAAA;AAAA,IACnD,IAAI,iBAAiB,OAAO,CAAA;AAAA,IAC5B,IAAI,2BAA2B,OAAO;AAAA,GACxC;AACN;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertBinaryToString.js","sources":["../../src/utils/convertBinaryToString.ts"],"sourcesContent":["import type { BinaryOptions } from \"../common/types.ts\";\n\n/**\n * Converts a binary string to a string.\n *\n * @param binary - The binary string to convert.\n * @param options - The options for parsing the binary string.\n * @returns The converted string.\n * @throws {RangeError} The given charset is not supported.\n * @throws {TypeError} The encoded data was not valid.\n */\nexport function convertBinaryToString(\n binary: Uint8Array | ArrayBuffer,\n options: BinaryOptions,\n): string {\n return new TextDecoder(options?.charset, {\n ignoreBOM: options?.ignoreBOM,\n fatal: options?.fatal,\n }).decode(binary instanceof ArrayBuffer ? new Uint8Array(binary) : binary);\n}\n"],"names":[],"mappings":"AAWgB,SAAA,qBAAA,CACd,QACA,OACQ,EAAA;AACR,EAAO,OAAA,IAAI,WAAY,CAAA,OAAA,EAAS,OAAS,EAAA;AAAA,IACvC,WAAW,OAAS,EAAA,SAAA;AAAA,IACpB,OAAO,OAAS,EAAA;AAAA,GACjB,EAAE,MAAO,CAAA,MAAA,YAAkB,cAAc,IAAI,UAAA,CAAW,MAAM,CAAA,GAAI,MAAM,CAAA;AAC3E;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertIterableIteratorToAsync.js","sources":["../../src/utils/convertIterableIteratorToAsync.ts"],"sourcesContent":["export function convertIterableIteratorToAsync<T>(\n iterator: IterableIterator<T>,\n): AsyncIterableIterator<T> {\n return {\n async next() {\n return iterator.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n"],"names":[],"mappings":"AAAO,SAAS,+BACd,QAC0B,EAAA;AAC1B,EAAO,OAAA;AAAA,IACL,MAAM,IAAO,GAAA;AACX,MAAA,OAAO,SAAS,IAAK,EAAA;AAAA,KACvB;AAAA,IACA,CAAC,MAAO,CAAA,aAAa,CAAI,GAAA;AACvB,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AACF;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertStreamToAsyncIterableIterator.js","sources":["../../src/utils/convertStreamToAsyncIterableIterator.ts"],"sourcesContent":["export async function* convertStreamToAsyncIterableIterator<T>(\n stream: ReadableStream<T>,\n): AsyncIterableIterator<T> {\n const reader = stream.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n yield value;\n }\n}\n"],"names":[],"mappings":"AAAA,gBAAuB,qCACrB,MAC0B,EAAA;AAC1B,EAAM,MAAA,MAAA,GAAS,OAAO,SAAU,EAAA;AAChC,EAAA,OAAO,IAAM,EAAA;AACX,IAAA,MAAM,EAAE,IAAM,EAAA,KAAA,EAAU,GAAA,MAAM,OAAO,IAAK,EAAA;AAC1C,IAAA,IAAI,IAAM,EAAA;AACV,IAAM,MAAA,KAAA;AAAA;AAEV;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convertThisAsyncIterableIteratorToArray.js","sources":["../../src/utils/convertThisAsyncIterableIteratorToArray.ts"],"sourcesContent":["export async function convertThisAsyncIterableIteratorToArray<\n O,\n T extends (...args: any[]) => AsyncGenerator<O>,\n>(this: T, ...args: Parameters<T>): Promise<O[]> {\n const rows: O[] = [];\n for await (const row of this(...args)) {\n rows.push(row);\n }\n return rows;\n}\n"],"names":[],"mappings":"AAAA,eAAsB,2CAGR,IAAmC,EAAA;AAC/C,EAAA,MAAM,OAAY,EAAC;AACnB,EAAA,WAAA,MAAiB,GAAO,IAAA,IAAA,CAAK,GAAG,IAAI,CAAG,EAAA;AACrC,IAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AAEf,EAAO,OAAA,IAAA;AACT;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeRegExp.js","sources":["../../src/utils/escapeRegExp.ts"],"sourcesContent":["/**\n * Escape a string for use in a regular expression.\n *\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_expressions#escaping Regular expressions#Escaping | MDN}\n * @param v string to escape\n * @returns escaped string\n */\nexport function escapeRegExp(v: string) {\n return v.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"],"names":[],"mappings":"AAOO,SAAS,aAAa,CAAW,EAAA;AACtC,EAAO,OAAA,CAAA,CAAE,OAAQ,CAAA,qBAAA,EAAuB,MAAM,CAAA;AAChD;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseMime.js","sources":["../../src/utils/parseMime.ts"],"sourcesContent":["export interface ParseMimeResult {\n type: string;\n parameters: {\n [key: string]: string;\n };\n}\n\nexport function parseMime(contentType: string) {\n const [type, ...parameters] = contentType.split(\";\");\n const result: ParseMimeResult = {\n type: type.trim(),\n parameters: {},\n };\n for (const paramator of parameters) {\n const [key, value] = paramator.split(\"=\");\n result.parameters[key.trim()] = value.trim();\n }\n return result;\n}\n"],"names":[],"mappings":"AAOO,SAAS,UAAU,WAAqB,EAAA;AAC7C,EAAA,MAAM,CAAC,IAAM,EAAA,GAAG,UAAU,CAAI,GAAA,WAAA,CAAY,MAAM,GAAG,CAAA;AACnD,EAAA,MAAM,MAA0B,GAAA;AAAA,IAC9B,IAAA,EAAM,KAAK,IAAK,EAAA;AAAA,IAChB,YAAY;AAAC,GACf;AACA,EAAA,KAAA,MAAW,aAAa,UAAY,EAAA;AAClC,IAAA,MAAM,CAAC,GAAK,EAAA,KAAK,CAAI,GAAA,SAAA,CAAU,MAAM,GAAG,CAAA;AACxC,IAAA,MAAA,CAAO,WAAW,GAAI,CAAA,IAAA,EAAM,CAAA,GAAI,MAAM,IAAK,EAAA;AAAA;AAE7C,EAAO,OAAA,MAAA;AACT;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pipeline.js","sources":["../../src/utils/pipeline.ts"],"sourcesContent":["export function pipeline<I, T, O>(\n stream: ReadableStream<I>,\n transformer1: TransformStream<I, T>,\n transformer2: TransformStream<T, O>,\n): ReadableStream<O>;\nexport function pipeline<I, T1, T2, O>(\n stream: ReadableStream<I>,\n transformer1: TransformStream<I, T1>,\n transformer2: TransformStream<T1, T2>,\n transformer3: TransformStream<T2, O>,\n): ReadableStream<O>;\nexport function pipeline<I, T1, T2, T3, O>(\n stream: ReadableStream<I>,\n transformer1: TransformStream<I, T1>,\n transformer2: TransformStream<T1, T2>,\n transformer3: TransformStream<T2, T3>,\n transformer4: TransformStream<T3, O>,\n): ReadableStream<O>;\nexport function pipeline<I, O>(\n stream: ReadableStream<I>,\n ...transformers: TransformStream[]\n): ReadableStream<O> {\n return new ReadableStream({\n start: (controller) => {\n (() =>\n transformers\n .reduce<ReadableStream>(\n (stream, transformer) => stream.pipeThrough(transformer),\n stream,\n )\n .pipeTo(\n new WritableStream({\n write: (v) => controller.enqueue(v),\n close: () => controller.close(),\n }),\n )\n .catch((error) => controller.error(error)))();\n },\n });\n}\n"],"names":["stream"],"mappings":"AAkBgB,SAAA,QAAA,CACd,WACG,YACgB,EAAA;AACnB,EAAA,OAAO,IAAI,cAAe,CAAA;AAAA,IACxB,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,MAAA,CAAC,MACC,YACG,CAAA,MAAA;AAAA,QACC,CAACA,OAAAA,EAAQ,WAAgBA,KAAAA,OAAAA,CAAO,YAAY,WAAW,CAAA;AAAA,QACvD;AAAA,OAED,CAAA,MAAA;AAAA,QACC,IAAI,cAAe,CAAA;AAAA,UACjB,KAAO,EAAA,CAAC,CAAM,KAAA,UAAA,CAAW,QAAQ,CAAC,CAAA;AAAA,UAClC,KAAA,EAAO,MAAM,UAAA,CAAW,KAAM;AAAA,SAC/B;AAAA,OACH,CACC,MAAM,CAAC,KAAA,KAAU,WAAW,KAAM,CAAA,KAAK,CAAC,CAAG,GAAA;AAAA;AAClD,GACD,CAAA;AACH;;;;"}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,55 +1,39 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "web-csv-toolbox",
|
|
3
|
-
"version": "0.12.0-next-
|
|
3
|
+
"version": "0.12.0-next-b221fc714faa4b33d33a3349982a1608d8a19b2f",
|
|
4
4
|
"description": "A CSV Toolbox utilizing Web Standard APIs.",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"types": "dist/types/web-csv-toolbox.d.ts",
|
|
9
|
-
"unpkg": "dist/web-csv-toolbox.umd.js",
|
|
6
|
+
"module": "dist/web-csv-toolbox.js",
|
|
7
|
+
"types": "dist/web-csv-toolbox.d.ts",
|
|
10
8
|
"engines": {
|
|
11
9
|
"node": ">=20.0.0"
|
|
12
10
|
},
|
|
13
11
|
"sideEffects": false,
|
|
14
12
|
"exports": {
|
|
15
13
|
".": {
|
|
16
|
-
"types": "./dist/
|
|
17
|
-
"
|
|
18
|
-
"require": "./dist/cjs/web-csv-toolbox.cjs",
|
|
19
|
-
"default": "./dist/es/web-csv-toolbox.js"
|
|
14
|
+
"types": "./dist/web-csv-toolbox.d.ts",
|
|
15
|
+
"default": "./dist/web-csv-toolbox.js"
|
|
20
16
|
},
|
|
21
17
|
"./*": {
|
|
22
|
-
"types": "./dist
|
|
23
|
-
"
|
|
24
|
-
"require": "./dist/cjs/*.cjs",
|
|
25
|
-
"default": "./dist/es/*.js"
|
|
18
|
+
"types": "./dist/*.d.ts",
|
|
19
|
+
"default": "./dist/*.js"
|
|
26
20
|
},
|
|
27
21
|
"./common/*": {
|
|
28
|
-
"types": "./dist/
|
|
29
|
-
"
|
|
30
|
-
"require": "./dist/cjs/common/*.cjs",
|
|
31
|
-
"default": "./dist/es/common/*.js"
|
|
22
|
+
"types": "./dist/common/*.d.ts",
|
|
23
|
+
"default": "./dist/common/*.js"
|
|
32
24
|
},
|
|
33
25
|
"./utils/*": {
|
|
34
|
-
"types": "./dist/
|
|
35
|
-
"
|
|
36
|
-
"require": "./dist/cjs/utils/*.cjs",
|
|
37
|
-
"default": "./dist/es/utils/*.js"
|
|
26
|
+
"types": "./dist/utils/*.d.ts",
|
|
27
|
+
"default": "./dist/utils/*.js"
|
|
38
28
|
},
|
|
39
29
|
"./web_csv_toolbox_wasm_bg.wasm": "./dist/web_csv_toolbox_wasm_bg.wasm",
|
|
40
30
|
"./package.json": "./package.json"
|
|
41
31
|
},
|
|
42
32
|
"imports": {
|
|
43
33
|
"./loadWASM.js": {
|
|
44
|
-
"types": "./dist/
|
|
45
|
-
"browser":
|
|
46
|
-
|
|
47
|
-
"require": "./dist/cjs/loadWASM.web.cjs",
|
|
48
|
-
"default": "./dist/es/loadWASM.web.js"
|
|
49
|
-
},
|
|
50
|
-
"import": "./dist/es/loadWASM.js",
|
|
51
|
-
"require": "./dist/cjs/loadWASM.cjs",
|
|
52
|
-
"default": "./dist/es/loadWASM.js"
|
|
34
|
+
"types": "./dist/loadWASM.d.ts",
|
|
35
|
+
"browser": "./dist/loadWASM.web.js",
|
|
36
|
+
"default": "./dist/loadWASM.js"
|
|
53
37
|
}
|
|
54
38
|
},
|
|
55
39
|
"files": [
|
|
@@ -106,10 +90,9 @@
|
|
|
106
90
|
"test:browser": "vitest --browser",
|
|
107
91
|
"test:coverage": "vitest --coverage",
|
|
108
92
|
"test:bench": "pnpm --filter web-csv-toolbox-benchmark start",
|
|
109
|
-
"build": "pnpm build:wasm && pnpm build:js
|
|
93
|
+
"build": "pnpm build:wasm && pnpm build:js",
|
|
110
94
|
"build:wasm": "wasm-pack build web-csv-toolbox-wasm --target web",
|
|
111
95
|
"build:js": "vite build",
|
|
112
|
-
"build:browser": "vite build --config config/vite.config.umd.ts",
|
|
113
96
|
"serve": "vite serve",
|
|
114
97
|
"format": "pnpm format:js && pnpm format:rust",
|
|
115
98
|
"format:js": "biome check --write .",
|
package/dist/cjs/Lexer.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./assertCommonOptions.cjs"),e=require("./common/constants.cjs"),s=require("./common/errors.cjs"),r=require("./constants.cjs"),i=require("./utils/escapeRegExp.cjs");exports.Lexer=class{#t;#e;#s="";#r=!1;#i;#u;#o={line:1,column:1,offset:0};#h=1;#f;constructor(e={}){const{delimiter:s=r.DEFAULT_DELIMITER,quotation:u=r.DEFAULT_QUOTATION,signal:o}=e;t.assertCommonOptions({delimiter:s,quotation:u}),this.#t=s,this.#e=u,this.#u=s.length;const h=i.escapeRegExp(s),f=i.escapeRegExp(u);this.#i=new RegExp(`^(?:(?!${f})(?!${h})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${f}|${h}|\\r|\\n|$)`),o&&(this.#f=o)}lex(t,e=!1){return e||(this.#r=!0),"string"==typeof t&&0!==t.length&&(this.#s+=t),this.#n()}flush(){return this.#r=!0,[...this.#n()]}*#n(){let t;for(this.#r&&(this.#s.endsWith(r.CRLF)?this.#s=this.#s.slice(0,-2):this.#s.endsWith(r.LF)&&(this.#s=this.#s.slice(0,-1)));t=this.#l();)yield t}#l(){if(this.#f?.throwIfAborted(),0===this.#s.length)return null;if(!1===this.#r&&(this.#s===r.CRLF||this.#s===r.LF))return null;if(this.#s.startsWith(r.CRLF)){this.#s=this.#s.slice(2);const t={...this.#o};this.#o.line++,this.#o.column=1,this.#o.offset+=2;return{type:e.RecordDelimiter,value:r.CRLF,location:{start:t,end:{...this.#o},rowNumber:this.#h++}}}if(this.#s.startsWith(r.LF)){this.#s=this.#s.slice(1);const t={...this.#o};this.#o.line++,this.#o.column=1,this.#o.offset+=1;return{type:e.RecordDelimiter,value:r.LF,location:{start:t,end:{...this.#o},rowNumber:this.#h++}}}if(this.#s.startsWith(this.#t)){this.#s=this.#s.slice(1);const t={...this.#o};return this.#o.column+=this.#u,this.#o.offset+=this.#u,{type:e.FieldDelimiter,value:this.#t,location:{start:t,end:{...this.#o},rowNumber:this.#h}}}if(this.#s.startsWith(this.#e)){let t="",i=1,u=2,o=0,h=this.#s[i],f=this.#s[i+1];do{if(h===this.#e){if(f===this.#e){t+=this.#e,i+=2,h=this.#s[i],f=this.#s[i+1],u+=2;continue}if(void 0===f&&!1===this.#r)return null;i++,this.#s=this.#s.slice(i);const s={...this.#o};return this.#o.column+=u,this.#o.offset+=i,this.#o.line+=o,{type:e.Field,value:t,location:{start:s,end:{...this.#o},rowNumber:this.#h}}}t+=h,h===r.LF?(o++,u=1):u++,i++,h=f,f=this.#s[i+1]}while(void 0!==h);if(this.#r)throw new s.ParseError("Unexpected EOF while parsing quoted field.",{position:{...this.#o}});return null}const t=this.#i.exec(this.#s);if(t){if(!1===this.#r&&t[0].length===this.#s.length)return null;const s=t[1];this.#s=this.#s.slice(s.length);const r={...this.#o};return this.#o.column+=s.length,this.#o.offset+=s.length,{type:e.Field,value:s,location:{start:r,end:{...this.#o},rowNumber:this.#h}}}return null}};
|
|
2
|
-
//# sourceMappingURL=Lexer.cjs.map
|
package/dist/cjs/Lexer.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Lexer.cjs","sources":["../../src/Lexer.ts"],"sourcesContent":["import { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport { Field, FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { ParseError } from \"./common/errors.ts\";\nimport type {\n AbortSignalOptions,\n CommonOptions,\n Position,\n RecordDelimiterToken,\n Token,\n} from \"./common/types.ts\";\nimport { CRLF, DEFAULT_DELIMITER, DEFAULT_QUOTATION, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\n/**\n * CSV Lexer.\n *\n * Lexter tokenizes CSV data into fields and records.\n */\nexport class Lexer<\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n> {\n #delimiter: string;\n #quotation: string;\n #buffer = \"\";\n #flush = false;\n #matcher: RegExp;\n #fieldDelimiterLength: number;\n\n #cursor: Position = {\n line: 1,\n column: 1,\n offset: 0,\n };\n #rowNumber = 1;\n\n #signal?: AbortSignal;\n\n /**\n * Constructs a new Lexer instance.\n * @param options - The common options for the lexer.\n */\n constructor(\n options: CommonOptions<Delimiter, Quotation> & AbortSignalOptions = {},\n ) {\n const {\n delimiter = DEFAULT_DELIMITER,\n quotation = DEFAULT_QUOTATION,\n signal,\n } = options;\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#quotation = quotation;\n this.#fieldDelimiterLength = delimiter.length;\n const d = escapeRegExp(delimiter);\n const q = escapeRegExp(quotation);\n this.#matcher = new RegExp(\n `^(?:(?!${q})(?!${d})(?![\\\\r\\\\n]))([\\\\S\\\\s\\\\uFEFF\\\\xA0]+?)(?=${q}|${d}|\\\\r|\\\\n|$)`,\n );\n if (signal) {\n this.#signal = signal;\n }\n }\n\n /**\n * Lexes the given chunk of CSV data.\n * @param chunk - The chunk of CSV data to be lexed.\n * @param buffering - Indicates whether the lexer is buffering or not.\n * @returns An iterable iterator of tokens.\n */\n public lex(chunk: string | null, buffering = false): IterableIterator<Token> {\n if (!buffering) {\n this.#flush = true;\n }\n if (typeof chunk === \"string\" && chunk.length !== 0) {\n this.#buffer += chunk;\n }\n\n return this.#tokens();\n }\n\n /**\n * Flushes the lexer and returns any remaining tokens.\n * @returns An array of tokens.\n */\n public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\n\n /**\n * Generates tokens from the buffered CSV data.\n * @yields Tokens from the buffered CSV data.\n */\n *#tokens(): Generator<Token> {\n if (this.#flush) {\n // Trim the last CRLF or LF\n if (this.#buffer.endsWith(CRLF)) {\n this.#buffer = this.#buffer.slice(0, -2 /* -CRLF.length */);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -1 /* -LF.length */);\n }\n }\n let token: Token | null;\n while ((token = this.#nextToken())) {\n yield token;\n }\n }\n\n /**\n * Retrieves the next token from the buffered CSV data.\n * @returns The next token or null if there are no more tokens.\n */\n #nextToken(): Token | null {\n this.#signal?.throwIfAborted();\n if (this.#buffer.length === 0) {\n return null;\n }\n // Buffer is Record Delimiter, defer to the next iteration.\n if (\n this.#flush === false &&\n (this.#buffer === CRLF || this.#buffer === LF)\n ) {\n return null;\n }\n\n // Check for CRLF\n if (this.#buffer.startsWith(CRLF)) {\n this.#buffer = this.#buffer.slice(2);\n const start: Position = { ...this.#cursor };\n this.#cursor.line++;\n this.#cursor.column = 1;\n this.#cursor.offset += 2; // CRLF.length\n const token: RecordDelimiterToken = {\n type: RecordDelimiter,\n value: CRLF,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber++,\n },\n };\n return token;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n const start: Position = { ...this.#cursor };\n this.#cursor.line++;\n this.#cursor.column = 1;\n this.#cursor.offset += 1; // LF.length\n const token: RecordDelimiterToken = {\n type: RecordDelimiter,\n value: LF,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber++,\n },\n };\n return token;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(1);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += this.#fieldDelimiterLength;\n this.#cursor.offset += this.#fieldDelimiterLength;\n return {\n type: FieldDelimiter,\n value: this.#delimiter,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n /**\n * Extract Quoted field.\n *\n * The following code is equivalent to the following:\n *\n * If the next character is a quote:\n * - If the character after that is a quote, then append a quote to the value and skip two characters.\n * - Otherwise, return the quoted string.\n * Otherwise, append the character to the value and skip one character.\n *\n * ```plaintext\n * | `i` | `i + 1` | `i + 2` |\n * |------------|------------|----------|\n * | cur | next | | => Variable names\n * | #quotation | #quotation | | => Escaped quote\n * | #quotation | (EOF) | | => Closing quote\n * | #quotation | undefined | | => End of buffer\n * | undefined | | | => End of buffer\n * ```\n */\n let value = \"\";\n let offset = 1; // Skip the opening quote\n let column = 2; // Skip the opening quote\n let line = 0;\n\n // Define variables\n let cur: string = this.#buffer[offset];\n let next: string | undefined = this.#buffer[offset + 1];\n do {\n // If the current character is a quote, check the next characters for closing quotes.\n if (cur === this.#quotation) {\n // If the cur character is a quote and the next character is a quote,\n // then append a quote to the value and skip two characters.\n if (next === this.#quotation) {\n // Append a quote to the value and skip two characters.\n value += this.#quotation;\n offset += 2;\n cur = this.#buffer[offset];\n next = this.#buffer[offset + 1];\n\n // Update the diff\n column += 2;\n continue;\n }\n\n // If the cur character is a quote and the next character is undefined,\n // then return null.\n if (next === undefined && this.#flush === false) {\n return null;\n }\n\n // Otherwise, return the quoted string.\n // Update the buffer and return the token\n offset++;\n this.#buffer = this.#buffer.slice(offset);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += column;\n this.#cursor.offset += offset;\n this.#cursor.line += line;\n return {\n type: Field,\n value,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Append the character to the value.\n value += cur;\n\n // Prepare for the next iteration\n if (cur === LF) {\n // If the current character is a LF,\n // then increment the line number and reset the column number.\n line++;\n column = 1;\n } else {\n // Otherwise, increment the column number and offset.\n column++;\n }\n\n offset++;\n cur = next;\n next = this.#buffer[offset + 1];\n } while (cur !== undefined);\n\n if (this.#flush) {\n throw new ParseError(\"Unexpected EOF while parsing quoted field.\", {\n position: { ...this.#cursor },\n });\n }\n return null;\n }\n\n // Check for Unquoted String\n const match = this.#matcher.exec(this.#buffer);\n if (match) {\n // If we're flushing and the match doesn't consume the entire buffer,\n // then return null\n if (this.#flush === false && match[0].length === this.#buffer.length) {\n return null;\n }\n const value = match[1];\n this.#buffer = this.#buffer.slice(value.length);\n const start: Position = { ...this.#cursor };\n this.#cursor.column += value.length;\n this.#cursor.offset += value.length;\n return {\n type: Field,\n value,\n location: {\n start,\n end: { ...this.#cursor },\n rowNumber: this.#rowNumber,\n },\n };\n }\n\n // Otherwise, return null\n return null;\n }\n}\n"],"names":["delimiter","quotation","buffer","flush","matcher","fieldDelimiterLength","cursor","line","column","offset","rowNumber","signal","constructor","options","DEFAULT_DELIMITER","DEFAULT_QUOTATION","assertCommonOptions","this","length","d","escapeRegExp","q","RegExp","lex","chunk","buffering","tokens","token","endsWith","CRLF","slice","LF","nextToken","throwIfAborted","startsWith","start","type","RecordDelimiter","value","location","end","FieldDelimiter","cur","next","Field","ParseError","position","match","exec"],"mappings":"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"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Lexer.cjs");class r extends TransformStream{lexer;constructor(r={}){super({transform:(e,r)=>{if(0!==e.length)try{r.enqueue([...this.lexer.lex(e,!0)])}catch(t){r.error(t)}},flush:e=>{try{e.enqueue(this.lexer.flush())}catch(r){e.error(r)}}}),this.lexer=new e.Lexer(r)}}exports.LexerTransformer=r;
|
|
2
|
-
//# sourceMappingURL=LexerTransformer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"LexerTransformer.cjs","sources":["../../src/LexerTransformer.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport type { CommonOptions, Token } from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeTo(new WritableStream({ write(tokens) {\n * for (const token of tokens) {\n * console.log(token);\n * }\n * }}));\n * // { type: Field, value: \"name\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"age\", location: {...} }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * // { type: Field, value: \"Alice\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"20\" }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * ```\n */\nexport class LexerTransformer<\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n> extends TransformStream<string, Token[]> {\n public readonly lexer: Lexer<Delimiter, Quotation>;\n constructor(options: CommonOptions<Delimiter, Quotation> = {}) {\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n try {\n controller.enqueue([...this.lexer.lex(chunk, true)]);\n } catch (error) {\n controller.error(error);\n }\n }\n },\n flush: (controller) => {\n try {\n controller.enqueue(this.lexer.flush());\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.lexer = new Lexer(options);\n }\n}\n"],"names":["LexerTransformer","TransformStream","lexer","constructor","options","super","transform","chunk","controller","length","enqueue","this","lex","error","flush","Lexer"],"mappings":"+GAkCO,MAAMA,UAGHC,gBACQC,MAChB,WAAAC,CAAYC,EAA+C,IACnDC,MAAA,CACJC,UAAW,CAACC,EAAOC,KACb,GAAiB,IAAjBD,EAAME,OACJ,IACSD,EAAAE,QAAQ,IAAIC,KAAKT,MAAMU,IAAIL,GAAO,WACtCM,GACPL,EAAWK,MAAMA,EAAK,GAI5BC,MAAQN,IACF,IACFA,EAAWE,QAAQC,KAAKT,MAAMY,eACvBD,GACPL,EAAWK,MAAMA,EAAK,KAIvBF,KAAAT,MAAQ,IAAIa,EAAAA,MAAMX,EAAO"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./common/constants.cjs"),t=require("./common/errors.cjs");exports.RecordAssembler=class{#e=0;#t=[];#r;#i=!1;#s;constructor(e={}){void 0!==e.header&&Array.isArray(e.header)&&this.#h(e.header),e.signal&&(this.#s=e.signal)}*assemble(t,r=!0){for(const i of t)switch(this.#s?.throwIfAborted(),i.type){case e.FieldDelimiter:this.#e++,this.#i=!0;break;case e.RecordDelimiter:void 0===this.#r?this.#h(this.#t):this.#i?yield Object.fromEntries(this.#r.map(((e,t)=>[e,this.#t.at(t)]))):yield Object.fromEntries(this.#r.map((e=>[e,""]))),this.#e=0,this.#t=new Array(this.#r?.length).fill(""),this.#i=!1;break;default:this.#i=!0,this.#t[this.#e]=i.value}r&&(yield*this.flush())}*flush(){void 0!==this.#r&&this.#i&&(yield Object.fromEntries(this.#r.filter((e=>e)).map(((e,t)=>[e,this.#t.at(t)]))))}#h(e){if(this.#r=e,0===this.#r.length)throw new t.ParseError("The header must not be empty.");if(new Set(this.#r).size!==this.#r.length)throw new t.ParseError("The header must not contain duplicate fields.")}};
|
|
2
|
-
//# sourceMappingURL=RecordAssembler.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordAssembler.cjs","sources":["../../src/RecordAssembler.ts"],"sourcesContent":["import { FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { ParseError } from \"./common/errors.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\nexport class RecordAssembler<Header extends ReadonlyArray<string>> {\n #fieldIndex = 0;\n #row: string[] = [];\n #header: Header | undefined;\n #dirty = false;\n #signal?: AbortSignal;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n if (options.header !== undefined && Array.isArray(options.header)) {\n this.#setHeader(options.header);\n }\n if (options.signal) {\n this.#signal = options.signal;\n }\n }\n\n public *assemble(\n tokens: Iterable<Token>,\n flush = true,\n ): IterableIterator<CSVRecord<Header>> {\n for (const token of tokens) {\n this.#signal?.throwIfAborted();\n switch (token.type) {\n case FieldDelimiter:\n this.#fieldIndex++;\n this.#dirty = true;\n break;\n case RecordDelimiter:\n if (this.#header === undefined) {\n this.#setHeader(this.#row as unknown as Header);\n } else {\n if (this.#dirty) {\n yield Object.fromEntries(\n this.#header.map((header, index) => [\n header,\n this.#row.at(index),\n ]),\n ) as unknown as CSVRecord<Header>;\n } else {\n yield Object.fromEntries(\n this.#header.map((header) => [header, \"\"]),\n ) as CSVRecord<Header>;\n }\n }\n // Reset the row fields buffer.\n this.#fieldIndex = 0;\n this.#row = new Array(this.#header?.length).fill(\"\");\n this.#dirty = false;\n break;\n default:\n this.#dirty = true;\n this.#row[this.#fieldIndex] = token.value;\n break;\n }\n }\n\n if (flush) {\n yield* this.flush();\n }\n }\n\n public *flush(): Generator<CSVRecord<Header>> {\n if (this.#header !== undefined) {\n if (this.#dirty) {\n yield Object.fromEntries(\n this.#header\n .filter((v) => v)\n .map((header, index) => [header, this.#row.at(index)]),\n ) as unknown as CSVRecord<Header>;\n }\n }\n }\n\n #setHeader(header: Header) {\n this.#header = header;\n if (this.#header.length === 0) {\n throw new ParseError(\"The header must not be empty.\");\n }\n if (new Set(this.#header).size !== this.#header.length) {\n throw new ParseError(\"The header must not contain duplicate fields.\");\n }\n }\n}\n"],"names":["fieldIndex","row","header","dirty","signal","constructor","options","Array","isArray","this","setHeader","assemble","tokens","flush","token","throwIfAborted","type","FieldDelimiter","RecordDelimiter","Object","fromEntries","map","index","at","length","fill","value","filter","v","ParseError","Set","size"],"mappings":"mLAQO,MACLA,GAAc,EACdC,GAAiB,GACjBC,GACAC,IAAS,EACTC,GAEA,WAAAC,CAAYC,EAA0C,SAC7B,IAAnBA,EAAQJ,QAAwBK,MAAMC,QAAQF,EAAQJ,SACnDO,MAAAC,EAAWJ,EAAQJ,QAEtBI,EAAQF,SACVK,MAAKL,EAAUE,EAAQF,OACzB,CAGF,SAAQO,CACNC,EACAC,GAAQ,GAER,IAAA,MAAWC,KAASF,EAElB,OADAH,MAAKL,GAASW,iBACND,EAAME,MACZ,KAAKC,EAAAA,eACER,MAAAT,IACLS,MAAKN,GAAS,EACd,MACF,KAAKe,EAAAA,qBACkB,IAAjBT,MAAKP,EACFO,MAAAC,EAAWD,MAAKR,GAEjBQ,MAAKN,QACDgB,OAAOC,YACXX,MAAKP,EAAQmB,KAAI,CAACnB,EAAQoB,IAAU,CAClCpB,EACAO,MAAKR,EAAKsB,GAAGD,aAIXH,OAAOC,YACXX,MAAKP,EAAQmB,KAAKnB,GAAW,CAACA,EAAQ,OAK5CO,MAAKT,EAAc,EACdS,MAAAR,EAAO,IAAIM,MAAME,MAAKP,GAASsB,QAAQC,KAAK,IACjDhB,MAAKN,GAAS,EACd,MACF,QACEM,MAAKN,GAAS,EACdM,MAAKR,EAAKQ,MAAKT,GAAec,EAAMY,MAKtCb,UACKJ,KAAKI,QACd,CAGF,MAAQA,QACe,IAAjBJ,MAAKP,GACHO,MAAKN,UACDgB,OAAOC,YACXX,MAAKP,EACFyB,QAAQC,GAAMA,IACdP,KAAI,CAACnB,EAAQoB,IAAU,CAACpB,EAAQO,MAAKR,EAAKsB,GAAGD,OAGtD,CAGF,EAAAZ,CAAWR,GAEL,GADJO,MAAKP,EAAUA,EACa,IAAxBO,MAAKP,EAAQsB,OACT,MAAA,IAAIK,aAAW,iCAEnB,GAAA,IAAIC,IAAIrB,MAAKP,GAAS6B,OAAStB,MAAKP,EAAQsB,OACxC,MAAA,IAAIK,aAAW,gDACvB"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./RecordAssembler.cjs");class r extends TransformStream{assembler;constructor(r={}){super({transform:(e,r)=>{try{for(const s of this.assembler.assemble(e,!1))r.enqueue(s)}catch(s){r.error(s)}},flush:e=>{try{for(const r of this.assembler.flush())e.enqueue(r)}catch(r){e.error(r)}}}),this.assembler=new e.RecordAssembler(r)}}exports.RecordAssemblerTransformer=r;
|
|
2
|
-
//# sourceMappingURL=RecordAssemblerTransformer.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"RecordAssemblerTransformer.cjs","sources":["../../src/RecordAssemblerTransformer.ts"],"sourcesContent":["import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n * @template Header The type of the header row.\n * @param options The options for the parser.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer())\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n *\n * @example Parse a CSV with headers by options\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer({ header: [\"name\", \"age\"] }))\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n */\nexport class RecordAssemblerTransformer<\n Header extends ReadonlyArray<string>,\n> extends TransformStream<Token[], CSVRecord<Header>> {\n public readonly assembler: RecordAssembler<Header>;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n super({\n transform: (tokens, controller) => {\n try {\n for (const token of this.assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n flush: (controller) => {\n try {\n for (const token of this.assembler.flush()) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.assembler = new RecordAssembler(options);\n }\n}\n"],"names":["RecordAssemblerTransformer","TransformStream","assembler","constructor","options","super","transform","tokens","controller","token","this","assemble","enqueue","error","flush","RecordAssembler"],"mappings":"yHAkDO,MAAMA,UAEHC,gBACQC,UAEhB,WAAAC,CAAYC,EAA0C,IAC9CC,MAAA,CACJC,UAAW,CAACC,EAAQC,KACd,IACF,IAAA,MAAWC,KAASC,KAAKR,UAAUS,SAASJ,GAAQ,GAClDC,EAAWI,QAAQH,SAEdI,GACPL,EAAWK,MAAMA,EAAK,GAG1BC,MAAQN,IACF,IACF,IAAA,MAAWC,KAASC,KAAKR,UAAUY,QACjCN,EAAWI,QAAQH,SAEdI,GACPL,EAAWK,MAAMA,EAAK,KAIvBH,KAAAR,UAAY,IAAIa,EAAAA,gBAAgBX,EAAO"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e="undefined"!=typeof document?document.currentScript:null;let t;const n="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&n.decode();let o=null;function r(){return null!==o&&0!==o.byteLength||(o=new Uint8Array(t.memory.buffer)),o}let i=0;const a="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},s="function"==typeof a.encodeInto?function(e,t){return a.encodeInto(e,t)}:function(e,t){const n=a.encode(e);return t.set(n),{read:e.length,written:n.length}};function c(){const e={wbg:{}};return e.wbg.__wbindgen_init_externref_table=function(){const e=t.__wbindgen_export_0,n=e.grow(4);e.set(0,void 0),e.set(n+0,void 0),e.set(n+1,null),e.set(n+2,!0),e.set(n+3,!1)},e.wbg.__wbindgen_string_new=function(e,t){var o,i;return o=e,i=t,o>>>=0,n.decode(r().subarray(o,o+i))},e}async function u(n){if(void 0!==t)return t;void 0!==n&&(Object.getPrototypeOf(n)===Object.prototype?({module_or_path:n}=n):console.warn("using deprecated parameters for the initialization function; pass a single object instead")),void 0===n&&(n=new URL("web_csv_toolbox_wasm_bg.wasm","undefined"==typeof document?require("url").pathToFileURL(__filename).href:e&&"SCRIPT"===e.tagName.toUpperCase()&&e.src||new URL("cjs/_virtual/_web-csv-toolbox-wasm.cjs",document.baseURI).href));const r=c();("string"==typeof n||"function"==typeof Request&&n instanceof Request||"function"==typeof URL&&n instanceof URL)&&(n=fetch(n));const{instance:i,module:a}=await async function(e,t){if("function"==typeof Response&&e instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(e,t)}catch(n){if("application/wasm"==e.headers.get("Content-Type"))throw n;console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n",n)}const o=await e.arrayBuffer();return await WebAssembly.instantiate(o,t)}{const n=await WebAssembly.instantiate(e,t);return n instanceof WebAssembly.Instance?{instance:n,module:e}:n}}(await n,r);return function(e,n){return t=e.exports,u.__wbindgen_wasm_module=n,o=null,t.__wbindgen_start(),t}(i,a)}exports.default=u,exports.parseStringToArraySync=function(e,n){const o=function(e,t,n){if(void 0===n){const n=a.encode(e),o=t(n.length,1)>>>0;return r().subarray(o,o+n.length).set(n),i=n.length,o}let o=e.length,c=t(o,1)>>>0;const u=r();let l=0;for(;l<o;l++){const t=e.charCodeAt(l);if(t>127)break;u[c+l]=t}if(l!==o){0!==l&&(e=e.slice(l)),c=n(c,o,o=l+3*e.length,1)>>>0;const t=r().subarray(c+l,c+o);l+=s(e,t).written,c=n(c,o,l,1)>>>0}return i=l,c}(e,t.__wbindgen_malloc,t.__wbindgen_realloc),c=i;return t.parseStringToArraySync(o,c,n)};
|
|
2
|
-
//# sourceMappingURL=_web-csv-toolbox-wasm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"_web-csv-toolbox-wasm.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});exports.default="data:application/wasm;base64,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QCACQcoBRgRAQQQhAyAIDAILIAMgCk0gBSAIS3JFBEBBASEDIAgMAgtBAkEAIAMgCksbQQAgByAMTRshAyAIDAELQQMhA0EACzYCCCABIAk6AKUDDAYLIAdFDQIgAUEIOgClAwwBC0ECDAMLIAEoAgghAkEAIQggAUEANgIIIAYgAjYCAEEBIQxBAyEDDAMLQQAhCEECDAELQQELIQMLIAAgAzoACCABQQE6AK0DIAAgDDYCDCAAIAg2AgQgACAKIBVqNgIADwtB+/fAAEEoQaT4wAAQTwALqCYDCX8HfgF8AkACQAJAAkACQAJAAkACQCAALQAAQQFrDgUBAgMEBQALIAEoAgAiACgCACAAKAIIIgJrQQNNBEAgACACQQRBAUEBEDEgACgCCCECCyAAIAJBBGo2AgggACgCBCACakHu6rHjBjYAAAwFCyABKAIAIQEgAC0AAUUEQCABKAIAIAEoAggiAGtBBE0EQCABIABBBUEBQQEQMSABKAIIIQALIAEgAEEFajYCCCABKAIEIABqIgBBuI/AACgAADYAACAAQQRqQbyPwAAtAAA6AABBAA8LIAEoAgAgASgCCCIAa0EDTQRAIAEgAEEEQQFBARAxIAEoAgghAAsgASAAQQRqNgIIIAEoAgQgAGpB9OTVqwY2AAAMBAsjAEEwayIFJAAgASgCACEDAkACQAJAAkACQAJAIABBCGoiACgCAEEBaw4CAQIAC0EUIQIgACkDCCILQpDOAFQEQCALIQwMBAsDQCAFQQhqIAJqIgBBBGsgCyALQpDOAIAiDEKQzgB+faciAUH//wNxQeQAbiIEQQF0LwCokUA7AAAgAEECayABIARB5ABsa0H//wNxQQF0LwCokUA7AAAgAkEEayECIAtC/8HXL1YgDCELDQALDAMLQRQhAiAAKQMIIg4gDkI/hyILhSALfSILQpDOAFQEQCALIQwMAgsDQCAFQQhqIAJqIgBBBGsgCyALQpDOAIAiDEKQzgB+faciAUH//wNxQeQAbiIEQQF0LwCokUA7AAAgAEECayABIARB5ABsa0H//wNxQQF0LwCokUA7AAAgAkEEayECIAtC/8HXL1YgDCELDQALDAELIAArAwgiEr1C////////////AINCgICAgICAgPj/AFoEQCADKAIAIAMoAggiAGtBA00EfyADIABBBEEBQQEQ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IgNGBEAgASADQQFBAUEBEDEgASgCCCEDCyABIANBAWoiAjYCCCABKAIEIANqQdsAOgAAAkAgBARAIAUgABAFIgENASAEQRhsQRhrIQMgBUEYaiECA0ACQCAAKAIAIQEgA0UNACABKAIIIgQgASgCAEYEQCABIARBAUEBQQEQMSABKAIIIQQLIAEgBEEBajYCCCABKAIEIARqQSw6AAAgA0EYayEDIAIgABAFIQEgAkEYaiECIAFFDQEMAwsLIAEoAgghAgsgAiABKAIARgRAIAEgAkEBQQFBARAxIAEoAgghAgsgASACQQFqNgIIIAEoAgQgAmpB3QA6AABBACEBCyABC4gCAQZ/IAAoAggiBCECAn9BASABQYABSQ0AGkECIAFBgBBJDQAaQQNBBCABQYCABEkbCyIGIAAoAgAgBGtLBH8gACAEIAYQMyAAKAIIBSACCyAAKAIEaiECAkAgAUGAAU8EQCABQT9xQYB/ciEFIAFBBnYhAyABQYAQSQRAIAIgBToAASACIANBwAFyOgAADAILIAFBDHYhByADQT9xQYB/ciEDIAFB//8DTQRAIAIgBToAAiACIAM6AAEgAiAHQeABcjoAAAwCCyACIAU6AAMgAiADOgACIAIgB0E/cUGAf3I6AAEgAiABQRJ2QXByOgAADAELIAIgAToAAAsgACAEIAZqNgIIQQALoAICA38BfiMAQUBqIgIkACABKAIAQYCAgIB4RgRAIAEoAgwhAyACQSRqIgRBADYCACACQoCAgIAQNwIcIAJBMGogAygCACIDQQhqKQIANwMAIAJBOGogA0EQaikCADcDACACIAMpAgA3AyggAkEcakH0gMEAIAJBKGoQFxogAkEYaiAEKAIAIgM2AgAgAiACKQIcIgU3AxAgAUEIaiADNgIAIAEgBTcCAAsgASkCACEFIAFCgICAgBA3AgAgAkEIaiIDIAFBCGoiASgCADYCACABQQA2AgAgAiAFNwMAQQxBBBB7IgFFBEBBBEEMEIEBAAsgASACKQMANwIAIAFBCGogAygCADYCACAAQZiHwQA2AgQgACABNgIAIAJBQGskAAuiAgEEfyMAQSBrIgUkAEEBIQYCQCAAKAIAIgcgASACIAAoAgQiCCgCDCIBEQEADQACQCAALQAKQYABcUUEQCAHQYKXwQBBASABEQEADQIgAyAAIAQo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AjYCwAEgA0EANgK8ASADIAI2ArABIANBADYCrAEgAyAEKAIIIgI2AsQBIAMgAjYCtAFBASEOIAQoAgwLNgLIASADIA42ArgBIAMgDjYCqAEgA0GoAWoQDQsgBCABNgIMIAQgEDYCCCAEIAE2AgQgBEEDOgAAIBJBAUYNAUEBIQ9BACEUA0AgASECAkACQCAAKAIsIgogACgCKCIETQRAIAogD00NASABIAAoAiQgFGpBBGooAgAiAUsgACgCOCIOIAFJcg0NQQAhDiABIAJrIgRBAEgNCyAAKAI0IQogBEUEQEEBIRAMAwtBASEOIARBARB7IhANAiAEIRAMCwtBACAKIARB2IrAABBOAAsgDyAKQcCOwAAQQAALIAQEQCAQIAIgCmogBPwKAAALIAkgD0YNASAMIBRqIgooAgAhAiAKQQRqKAIAIg4gB0sgAiAOS3INCQJAAkACQAJAIAIgBWogDiACayADQZABahAVIgstAAAOBQMDAwECAAsCfyALKAIEIgJFBEBBACEKQQAMAQsgAyACNgLAASADQQA2ArwBIAMgAjYCsAEgA0EANgKsASADIAsoAggiAjYCxAEgAyACNgK0ASALKAIMIQpBAQshAiADIAo2AsgBIAMgAjYCuAEgAyACNgKoASADQagBahANDAILIAsoAgQiAkUNASALKAIIIAJBARB3DAELIAtBBGoQKiALKAIEIgJFDQAgCygCCCACQRhsQQgQdwsgCyAENgIMIAsgEDYCCCALIAQ2AgQgC0EDOgAAIBRBBGohFCASIA9BAWoiD0cNAAsMAQtB+InAABB4AAsgA0G4AWoiCiADQaABaikDADcDACADQbABaiIEIANBmAFqKQMANwMAIAMgAykDkAE3A6gBIAMoAoQBIhIgAygCfEYEQCMAQRBrIhEkACARQQRqIANB/ABqIgsoAgAiASALKAIEQQQgAUEBdCIBIAFBBE0bIgJBCEEYEC4gESgCBEEBRgRAIBEoAgggESgCDBBoAAsgESgCCCEBIAsgAjYCACALIAE2AgQgEUEQaiQACyADKAKAASASQRhsaiIBIAMpA6gBNwMAIAFBCGogBCkDADcDACABQRBqIAopAwA3AwAgAyASQQFqNgKEASAAKAIwIgEEQCAAKAI0IAFBARB3CyAAKAIgIgEEQCAAKAIkIAFBAnRBBBB3CyAA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NWI1NTdmL3NlcmRlX2pzb24tMS4wLjE0MC9zcmMvc2VyLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Nzdi1jb3JlLTAuMS4xMS9zcmMvcmVhZGVyLnJzAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmL2Nzdi0xLjMuMS9zcmMvcmVhZGVyLnJzAC9ydXN0Yy9mNDY0NzU5MTRkZTYyNjc4NTA5MGEwNWFlMDM3NTc4YWFhMTE5ZmM4L2xpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwAvcnVzdGMvZjQ2NDc1OTE0ZGU2MjY3ODUwOTBhMDVhZTAzNzU3OGFhYTExOWZjOC9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwBsaWJyYXJ5L2NvcmUvc3JjL3VuaWNvZGUvcHJpbnRhYmxlLnJzAC9ydXN0Yy9mNDY0NzU5MTRkZTYyNjc4NTA5MGEwNWFlMDM3NTc4YWFhMTE5ZmM4L2xpYnJhcnkvYWxsb2Mvc3JjL2NvbGxlY3Rpb25zL2J0cmVlL25vZGUucnMAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2YvY3N2LTEuMy4xL3NyYy9ieXRlX3JlY29yZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMAbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuMTAvc3JjL2RsbWFsbG9jLnJzAGxpYnJhcnkvc3RkL3NyYy9hbGxvYy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9jc3YtY29yZS0wLjEuMTEvc3JjL2xpYi5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2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KQAAtQsQAAYAAAC7CxAACAAAAMMLEAAKAAAAzQsQAAEAAABFT0Ygd2hpbGUgcGFyc2luZyBhIGxpc3RFT0Ygd2hpbGUgcGFyc2luZyBhbiBvYmplY3RFT0Ygd2hpbGUgcGFyc2luZyBhIHN0cmluZ0VPRiB3aGlsZSBwYXJzaW5nIGEgdmFsdWVleHBlY3RlZCBgOmBleHBlY3RlZCBgLGAgb3IgYF1gZXhwZWN0ZWQgYCxgIG9yIGB9YGV4cGVjdGVkIGlkZW50ZXhwZWN0ZWQgdmFsdWVleHBlY3RlZCBgImBpbnZhbGlkIGVzY2FwZWludmFsaWQgbnVtYmVybnVtYmVyIG91dCBvZiByYW5nZWludmFsaWQgdW5pY29kZSBjb2RlIHBvaW50Y29udHJvbCBjaGFyYWN0ZXIgKFx1MDAwMC1cdTAwMUYpIGZvdW5kIHdoaWxlIHBhcnNpbmcgYSBzdHJpbmdrZXkgbXVzdCBiZSBhIHN0cmluZ2ludmFsaWQgdmFsdWU6IGV4cGVjdGVkIGtleSB0byBiZSBhIG51bWJlciBpbiBxdW90ZXNmbG9hdCBrZXkgbXVzdCBiZSBmaW5pdGUgKGdvdCBOYU4gb3IgKy8taW5mKWxvbmUgbGVhZGluZyBzdXJyb2dhdGUgaW4gaGV4IGVzY2FwZXRyYWlsaW5nIGNvbW1hdHJhaWxpbmcgY2hhcmFjdGVyc3VuZXhwZWN0ZWQgZW5kIG9mIGhleCBlc2NhcGVyZWN1cnNpb24gbGltaXQgZXhjZWVkZWQjAAAADAAAAAQAAAAkAAAAJQAAACEAAAB1dXV1dXV1dWJ0bnVmcnV1dXV1dXV1dXV1dXV1dXV1dQAAIgBBmJ3AAAsBXABBvJ7AAAv4BTAxMjM0NTY3ODlhYmNkZWY7ABAAYAAAAKABAAAuAAAAYXNzZXJ0aW9uIGZhaWxlZDogZWRnZS5oZWlnaHQgPT0gc2VsZi5oZWlnaHQgLSAx8AIQAFsAAAC8AgAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNyYy5sZW4oKSA9PSBkc3QubGVuKCnwAhAAWwAAAFkHAAAFAAAA8AIQAFsAAADWBAAAIwAAAPACEABbAAAAGQUAACQAAABhc3NlcnRpb24gZmFpbGVkOiBlZGdlLmhlaWdodCA9PSBzZWxmLm5v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cnlkaXJlY3Rvcnkgbm90IGVtcHR5cmVhZC1vbmx5IGZpbGVzeXN0ZW0gb3Igc3RvcmFnZSBtZWRpdW1maWxlc3lzdGVtIGxvb3Agb3IgaW5kaXJlY3Rpb24gbGltaXQgKGUuZy4gc3ltbGluayBsb29wKXN0YWxlIG5ldHdvcmsgZmlsZSBoYW5kbGVpbnZhbGlkIGlucHV0IHBhcmFtZXRlcmludmFsaWQgZGF0YXRpbWVkIG91dHdyaXRlIHplcm9ubyBzdG9yYWdlIHNwYWNlc2VlayBvbiB1bnNlZWthYmxlIGZpbGVxdW90YSBleGNlZWRlZGZpbGUgdG9vIGxhcmdlcmVzb3VyY2UgYnVzeWV4ZWN1dGFibGUgZmlsZSBidXN5ZGVhZGxvY2tjcm9zcy1kZXZpY2UgbGluayBvciByZW5hbWV0b28gbWFueSBsaW5rc2ludmFsaWQgZmlsZW5hbWVhcmd1bWVudCBsaXN0IHRvbyBsb25nb3BlcmF0aW9uIGludGVycnVwdGVkdW5zdXBwb3J0ZWR1bmV4cGVjdGVkIGVuZCBvZiBmaWxlb3V0IG9mIG1lbW9yeWluIHByb2dyZXNzb3RoZXIgZXJyb3J1bmNhdGVnb3JpemVkIGVycm9yb3BlcmF0aW9uIHN1Y2Nlc3NmdWxtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAAAwQBAAFQAAAEVAEAANAAAAEwQQABgAAABkAQAACQAAAC4AAAAMAAAABAAAADIAAAAzAAAANAAAAAAAAAAIAAAABAAAADUAAAA2AAAANwAAADgAAAA5AAAAEAAAAAQAAAA6AAAAOwAAADwAAAA9AAAAV291bGRCbG9jayAob3MgZXJyb3IgKQAAAQAAAAAAAADOQBAACwAAANlAEAABAAAATm90Rm91bmRQZXJtaXNzaW9uRGVuaWVkQ29ubmVjdGlvblJlZnVzZWRDb25uZWN0aW9uUmVzZXRIb3N0VW5yZWFjaGFibGVOZXR3b3JrVW5yZWFjaGFibGVDb25uZWN0aW9uQWJvcnRlZE5vdENvbm5lY3RlZEFkZHJJblVzZUFkZHJOb3RBdmFpbGFibGVOZXR3b3JrRG93bkJyb2tlblBpcGVBbHJlYWR5RXhpc3RzTm90QURpcmVjdG9yeUlzQURp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";
|
|
2
|
-
//# sourceMappingURL=web_csv_toolbox_wasm_bg.wasm.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"web_csv_toolbox_wasm_bg.wasm.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./constants.cjs");function t(t,r){if("string"!=typeof t)throw new TypeError(`${r} must be a string`);switch(!0){case 0===t.length:throw new RangeError(`${r} must not be empty`);case t.length>1:throw new RangeError(`${r} must be a single character`);case t===e.LF:case t===e.CR:throw new RangeError(`${r} must not include CR or LF`)}}exports.assertCommonOptions=function(e){for(const r of["delimiter","quotation"])t(e[r],r);if(e.delimiter===e.quotation)throw new RangeError("delimiter must not be the same as quotation, use different characters")};
|
|
2
|
-
//# sourceMappingURL=assertCommonOptions.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"assertCommonOptions.cjs","sources":["../../src/assertCommonOptions.ts"],"sourcesContent":["import type { CommonOptions } from \"./common/types.ts\";\nimport { CR, LF } from \"./constants.ts\";\n\n/**\n * Asserts that the provided value is a string and satisfies certain conditions.\n * @param value - The value to be checked.\n * @param name - The name of the option.\n * @throws {RangeError} If the value is empty, longer than 1 byte, or includes CR or LF.\n * @throws {TypeError} If the value is not a string.\n */\nfunction assertOptionValue(\n value: string,\n name: string,\n): asserts value is string {\n if (typeof value === \"string\") {\n switch (true) {\n case value.length === 0:\n throw new RangeError(`${name} must not be empty`);\n case value.length > 1:\n throw new RangeError(`${name} must be a single character`);\n case value === LF:\n case value === CR:\n throw new RangeError(`${name} must not include CR or LF`);\n default:\n break;\n }\n } else {\n throw new TypeError(`${name} must be a string`);\n }\n}\n\n/**\n * Asserts that the provided options object contains all the required properties.\n * Throws an error if any required property is missing\n * or if the delimiter and quotation length is not 1 byte character,\n * or if the delimiter is the same as the quotation.\n *\n * @example\n *\n * ```ts\n * assertCommonOptions({\n * quotation: '\"',\n * delimiter: ',',\n * });\n * ```\n *\n * @param options - The options object to be validated.\n * @throws {RangeError} If any required property is missing or if the delimiter is the same as the quotation.\n * @throws {TypeError} If any required property is not a string.\n */\nexport function assertCommonOptions<\n Delimiter extends string,\n Quotation extends string,\n>(\n options: Required<CommonOptions<Delimiter, Quotation>>,\n): asserts options is Required<CommonOptions<Delimiter, Quotation>> {\n for (const name of [\"delimiter\", \"quotation\"] as const) {\n assertOptionValue(options[name], name);\n }\n // @ts-ignore: TS doesn't understand that the values are strings\n if (options.delimiter === options.quotation) {\n throw new RangeError(\n \"delimiter must not be the same as quotation, use different characters\",\n );\n }\n}\n"],"names":["assertOptionValue","value","name","TypeError","length","RangeError","LF","CR","options","delimiter","quotation"],"mappings":"mHAUA,SAASA,EACPC,EACAC,GAEI,GAAiB,iBAAVD,EAaT,MAAM,IAAIE,UAAU,GAAGD,sBAZvB,QAAQ,GACN,KAAsB,IAAjBD,EAAMG,OACT,MAAM,IAAIC,WAAW,GAAGH,uBAC1B,KAAKD,EAAMG,OAAS,EAClB,MAAM,IAAIC,WAAW,GAAGH,gCAC1B,KAAKD,IAAUK,EAAAA,GACf,KAAKL,IAAUM,EAAAA,GACb,MAAM,IAAIF,WAAW,GAAGH,+BAOhC,6BAqBO,SAILM,GAEA,IAAA,MAAWN,IAAQ,CAAC,YAAa,aACbF,EAAAQ,EAAQN,GAAOA,GAG/B,GAAAM,EAAQC,YAAcD,EAAQE,UAChC,MAAM,IAAIL,WACR,wEAGN"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=Symbol.for("web-csv-toolbox.FieldDelimiter"),o=Symbol.for("web-csv-toolbox.RecordDelimiter"),t=Symbol.for("web-csv-toolbox.Field");exports.Field=t,exports.FieldDelimiter=e,exports.RecordDelimiter=o;
|
|
2
|
-
//# sourceMappingURL=constants.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"constants.cjs","sources":["../../../src/common/constants.ts"],"sourcesContent":["/**\n * FiledDelimiter is a symbol for field delimiter of CSV.\n * @category Constants\n */\nexport const FieldDelimiter = Symbol.for(\"web-csv-toolbox.FieldDelimiter\");\n/**\n * RecordDelimiter is a symbol for record delimiter of CSV.\n * @category Constants\n */\nexport const RecordDelimiter = Symbol.for(\"web-csv-toolbox.RecordDelimiter\");\n/**\n * Field is a symbol for field of CSV.\n * @category Constants\n */\nexport const Field = Symbol.for(\"web-csv-toolbox.Field\");\n"],"names":["FieldDelimiter","Symbol","for","RecordDelimiter","Field"],"mappings":"gFAIa,MAAAA,EAAiBC,OAAOC,IAAI,kCAK5BC,EAAkBF,OAAOC,IAAI,mCAK7BE,EAAQH,OAAOC,IAAI"}
|