web-csv-toolbox 0.10.3-next-10321180d04c1d67f731d55f6c6190691c0d7ba6 → 0.10.3-pr317-874058b020bd8e180674e73a11c0abbd258327a5

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.
Files changed (199) hide show
  1. package/package.json +1 -1
  2. package/dist/cjs/Lexer.cjs +0 -2
  3. package/dist/cjs/Lexer.cjs.map +0 -1
  4. package/dist/cjs/LexerTransformer.cjs +0 -2
  5. package/dist/cjs/LexerTransformer.cjs.map +0 -1
  6. package/dist/cjs/RecordAssembler.cjs +0 -2
  7. package/dist/cjs/RecordAssembler.cjs.map +0 -1
  8. package/dist/cjs/RecordAssemblerTransformer.cjs +0 -2
  9. package/dist/cjs/RecordAssemblerTransformer.cjs.map +0 -1
  10. package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs +0 -2
  11. package/dist/cjs/_virtual/_web-csv-toolbox-wasm.cjs.map +0 -1
  12. package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs +0 -2
  13. package/dist/cjs/_virtual/web_csv_toolbox_wasm_bg.wasm.cjs.map +0 -1
  14. package/dist/cjs/assertCommonOptions.cjs +0 -2
  15. package/dist/cjs/assertCommonOptions.cjs.map +0 -1
  16. package/dist/cjs/common/constants.cjs +0 -2
  17. package/dist/cjs/common/constants.cjs.map +0 -1
  18. package/dist/cjs/common/errors.cjs +0 -2
  19. package/dist/cjs/common/errors.cjs.map +0 -1
  20. package/dist/cjs/commonParseErrorHandling.cjs +0 -2
  21. package/dist/cjs/commonParseErrorHandling.cjs.map +0 -1
  22. package/dist/cjs/constants.cjs +0 -2
  23. package/dist/cjs/constants.cjs.map +0 -1
  24. package/dist/cjs/getOptionsFromResponse.cjs +0 -2
  25. package/dist/cjs/getOptionsFromResponse.cjs.map +0 -1
  26. package/dist/cjs/loadWASM.cjs +0 -2
  27. package/dist/cjs/loadWASM.cjs.map +0 -1
  28. package/dist/cjs/loadWASM.web.cjs +0 -2
  29. package/dist/cjs/loadWASM.web.cjs.map +0 -1
  30. package/dist/cjs/parse.cjs +0 -2
  31. package/dist/cjs/parse.cjs.map +0 -1
  32. package/dist/cjs/parseBinary.cjs +0 -2
  33. package/dist/cjs/parseBinary.cjs.map +0 -1
  34. package/dist/cjs/parseBinaryToArraySync.cjs +0 -2
  35. package/dist/cjs/parseBinaryToArraySync.cjs.map +0 -1
  36. package/dist/cjs/parseBinaryToIterableIterator.cjs +0 -2
  37. package/dist/cjs/parseBinaryToIterableIterator.cjs.map +0 -1
  38. package/dist/cjs/parseBinaryToStream.cjs +0 -2
  39. package/dist/cjs/parseBinaryToStream.cjs.map +0 -1
  40. package/dist/cjs/parseResponse.cjs +0 -2
  41. package/dist/cjs/parseResponse.cjs.map +0 -1
  42. package/dist/cjs/parseResponseToStream.cjs +0 -2
  43. package/dist/cjs/parseResponseToStream.cjs.map +0 -1
  44. package/dist/cjs/parseString.cjs +0 -2
  45. package/dist/cjs/parseString.cjs.map +0 -1
  46. package/dist/cjs/parseStringStream.cjs +0 -2
  47. package/dist/cjs/parseStringStream.cjs.map +0 -1
  48. package/dist/cjs/parseStringStreamToStream.cjs +0 -2
  49. package/dist/cjs/parseStringStreamToStream.cjs.map +0 -1
  50. package/dist/cjs/parseStringToArraySync.cjs +0 -2
  51. package/dist/cjs/parseStringToArraySync.cjs.map +0 -1
  52. package/dist/cjs/parseStringToArraySyncWASM.cjs +0 -2
  53. package/dist/cjs/parseStringToArraySyncWASM.cjs.map +0 -1
  54. package/dist/cjs/parseStringToIterableIterator.cjs +0 -2
  55. package/dist/cjs/parseStringToIterableIterator.cjs.map +0 -1
  56. package/dist/cjs/parseStringToStream.cjs +0 -2
  57. package/dist/cjs/parseStringToStream.cjs.map +0 -1
  58. package/dist/cjs/parseUint8ArrayStream.cjs +0 -2
  59. package/dist/cjs/parseUint8ArrayStream.cjs.map +0 -1
  60. package/dist/cjs/parseUint8ArrayStreamToStream.cjs +0 -2
  61. package/dist/cjs/parseUint8ArrayStreamToStream.cjs.map +0 -1
  62. package/dist/cjs/utils/convertBinaryToString.cjs +0 -2
  63. package/dist/cjs/utils/convertBinaryToString.cjs.map +0 -1
  64. package/dist/cjs/utils/convertIterableIteratorToAsync.cjs +0 -2
  65. package/dist/cjs/utils/convertIterableIteratorToAsync.cjs.map +0 -1
  66. package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs +0 -2
  67. package/dist/cjs/utils/convertStreamToAsyncIterableIterator.cjs.map +0 -1
  68. package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs +0 -2
  69. package/dist/cjs/utils/convertThisAsyncIterableIteratorToArray.cjs.map +0 -1
  70. package/dist/cjs/utils/escapeRegExp.cjs +0 -2
  71. package/dist/cjs/utils/escapeRegExp.cjs.map +0 -1
  72. package/dist/cjs/utils/parseMime.cjs +0 -2
  73. package/dist/cjs/utils/parseMime.cjs.map +0 -1
  74. package/dist/cjs/utils/pipeline.cjs +0 -2
  75. package/dist/cjs/utils/pipeline.cjs.map +0 -1
  76. package/dist/cjs/web-csv-toolbox.cjs +0 -2
  77. package/dist/cjs/web-csv-toolbox.cjs.map +0 -1
  78. package/dist/es/Lexer.js +0 -225
  79. package/dist/es/Lexer.js.map +0 -1
  80. package/dist/es/LexerTransformer.js +0 -29
  81. package/dist/es/LexerTransformer.js.map +0 -1
  82. package/dist/es/RecordAssembler.js +0 -73
  83. package/dist/es/RecordAssembler.js.map +0 -1
  84. package/dist/es/RecordAssemblerTransformer.js +0 -31
  85. package/dist/es/RecordAssemblerTransformer.js.map +0 -1
  86. package/dist/es/_virtual/_web-csv-toolbox-wasm.js +0 -185
  87. package/dist/es/_virtual/_web-csv-toolbox-wasm.js.map +0 -1
  88. package/dist/es/_virtual/web_csv_toolbox_wasm_bg.wasm.js +0 -4
  89. package/dist/es/_virtual/web_csv_toolbox_wasm_bg.wasm.js.map +0 -1
  90. package/dist/es/assertCommonOptions.js +0 -31
  91. package/dist/es/assertCommonOptions.js.map +0 -1
  92. package/dist/es/common/constants.js +0 -6
  93. package/dist/es/common/constants.js.map +0 -1
  94. package/dist/es/common/errors.js +0 -20
  95. package/dist/es/common/errors.js.map +0 -1
  96. package/dist/es/commonParseErrorHandling.js +0 -13
  97. package/dist/es/commonParseErrorHandling.js.map +0 -1
  98. package/dist/es/constants.js +0 -8
  99. package/dist/es/constants.js.map +0 -1
  100. package/dist/es/getOptionsFromResponse.js +0 -20
  101. package/dist/es/getOptionsFromResponse.js.map +0 -1
  102. package/dist/es/loadWASM.js +0 -9
  103. package/dist/es/loadWASM.js.map +0 -1
  104. package/dist/es/loadWASM.web.js +0 -8
  105. package/dist/es/loadWASM.web.js.map +0 -1
  106. package/dist/es/parse.js +0 -39
  107. package/dist/es/parse.js.map +0 -1
  108. package/dist/es/parseBinary.js +0 -35
  109. package/dist/es/parseBinary.js.map +0 -1
  110. package/dist/es/parseBinaryToArraySync.js +0 -15
  111. package/dist/es/parseBinaryToArraySync.js.map +0 -1
  112. package/dist/es/parseBinaryToIterableIterator.js +0 -15
  113. package/dist/es/parseBinaryToIterableIterator.js.map +0 -1
  114. package/dist/es/parseBinaryToStream.js +0 -15
  115. package/dist/es/parseBinaryToStream.js.map +0 -1
  116. package/dist/es/parseResponse.js +0 -32
  117. package/dist/es/parseResponse.js.map +0 -1
  118. package/dist/es/parseResponseToStream.js +0 -18
  119. package/dist/es/parseResponseToStream.js.map +0 -1
  120. package/dist/es/parseString.js +0 -38
  121. package/dist/es/parseString.js.map +0 -1
  122. package/dist/es/parseStringStream.js +0 -23
  123. package/dist/es/parseStringStream.js.map +0 -1
  124. package/dist/es/parseStringStreamToStream.js +0 -14
  125. package/dist/es/parseStringStreamToStream.js.map +0 -1
  126. package/dist/es/parseStringToArraySync.js +0 -17
  127. package/dist/es/parseStringToArraySync.js.map +0 -1
  128. package/dist/es/parseStringToArraySyncWASM.js +0 -24
  129. package/dist/es/parseStringToArraySyncWASM.js.map +0 -1
  130. package/dist/es/parseStringToIterableIterator.js +0 -17
  131. package/dist/es/parseStringToIterableIterator.js.map +0 -1
  132. package/dist/es/parseStringToStream.js +0 -24
  133. package/dist/es/parseStringToStream.js.map +0 -1
  134. package/dist/es/parseUint8ArrayStream.js +0 -23
  135. package/dist/es/parseUint8ArrayStream.js.map +0 -1
  136. package/dist/es/parseUint8ArrayStreamToStream.js +0 -22
  137. package/dist/es/parseUint8ArrayStreamToStream.js.map +0 -1
  138. package/dist/es/utils/convertBinaryToString.js +0 -9
  139. package/dist/es/utils/convertBinaryToString.js.map +0 -1
  140. package/dist/es/utils/convertIterableIteratorToAsync.js +0 -14
  141. package/dist/es/utils/convertIterableIteratorToAsync.js.map +0 -1
  142. package/dist/es/utils/convertStreamToAsyncIterableIterator.js +0 -11
  143. package/dist/es/utils/convertStreamToAsyncIterableIterator.js.map +0 -1
  144. package/dist/es/utils/convertThisAsyncIterableIteratorToArray.js +0 -10
  145. package/dist/es/utils/convertThisAsyncIterableIteratorToArray.js.map +0 -1
  146. package/dist/es/utils/escapeRegExp.js +0 -6
  147. package/dist/es/utils/escapeRegExp.js.map +0 -1
  148. package/dist/es/utils/parseMime.js +0 -15
  149. package/dist/es/utils/parseMime.js.map +0 -1
  150. package/dist/es/utils/pipeline.js +0 -18
  151. package/dist/es/utils/pipeline.js.map +0 -1
  152. package/dist/es/web-csv-toolbox.js +0 -13
  153. package/dist/es/web-csv-toolbox.js.map +0 -1
  154. package/dist/types/Lexer.d.ts +0 -27
  155. package/dist/types/Lexer.test.d.ts +0 -1
  156. package/dist/types/LexerTransformer.d.ts +0 -37
  157. package/dist/types/LexerTransformer.test.d.ts +0 -1
  158. package/dist/types/RecordAssembler.d.ts +0 -8
  159. package/dist/types/RecordAssemblerTransformer.d.ts +0 -50
  160. package/dist/types/assertCommonOptions.d.ts +0 -22
  161. package/dist/types/common/constants.d.ts +0 -15
  162. package/dist/types/common/errors.d.ts +0 -34
  163. package/dist/types/common/types.d.ts +0 -228
  164. package/dist/types/commonParseErrorHandling.d.ts +0 -8
  165. package/dist/types/constants.d.ts +0 -11
  166. package/dist/types/escapeField.d.ts +0 -14
  167. package/dist/types/getOptionsFromResponse.d.ts +0 -11
  168. package/dist/types/loadWASM.d.ts +0 -19
  169. package/dist/types/loadWASM.web.d.ts +0 -19
  170. package/dist/types/parse.d.ts +0 -183
  171. package/dist/types/parseBinary.d.ts +0 -114
  172. package/dist/types/parseBinaryToArraySync.d.ts +0 -3
  173. package/dist/types/parseBinaryToArraySync.test.d.ts +0 -1
  174. package/dist/types/parseBinaryToIterableIterator.d.ts +0 -11
  175. package/dist/types/parseBinaryToStream.d.ts +0 -3
  176. package/dist/types/parseResponse.d.ts +0 -81
  177. package/dist/types/parseResponseToStream.d.ts +0 -3
  178. package/dist/types/parseString.d.ts +0 -121
  179. package/dist/types/parseStringStream.d.ts +0 -99
  180. package/dist/types/parseStringStreamToStream.d.ts +0 -3
  181. package/dist/types/parseStringToArraySync.d.ts +0 -3
  182. package/dist/types/parseStringToArraySyncWASM.d.ts +0 -38
  183. package/dist/types/parseStringToIterableIterator.d.ts +0 -3
  184. package/dist/types/parseStringToStream.d.ts +0 -3
  185. package/dist/types/parseUint8ArrayStream.d.ts +0 -95
  186. package/dist/types/parseUint8ArrayStreamToStream.d.ts +0 -3
  187. package/dist/types/utils/SingleValueReadableStream.d.ts +0 -3
  188. package/dist/types/utils/convertBinaryToString.d.ts +0 -12
  189. package/dist/types/utils/convertIterableIteratorToAsync.d.ts +0 -1
  190. package/dist/types/utils/convertStreamToAsyncIterableIterator.d.ts +0 -1
  191. package/dist/types/utils/convertThisAsyncIterableIteratorToArray.d.ts +0 -1
  192. package/dist/types/utils/escapeRegExp.d.ts +0 -8
  193. package/dist/types/utils/occurrences.d.ts +0 -7
  194. package/dist/types/utils/parseMime.d.ts +0 -7
  195. package/dist/types/utils/pipeline.d.ts +0 -3
  196. package/dist/types/web-csv-toolbox.d.ts +0 -13
  197. package/dist/web-csv-toolbox.umd.cjs +0 -2
  198. package/dist/web-csv-toolbox.umd.cjs.map +0 -1
  199. package/dist/web_csv_toolbox_wasm_bg.wasm +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseResponseToStream.cjs","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<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseBinaryOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\n try {\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new RangeError(\"Response body is null\");\n }\n return parseUint8ArrayStreamToStream(response.body, options_);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\n"],"names":["response","options","options_","getOptionsFromResponse","body","RangeError","parseUint8ArrayStreamToStream","error","commonParseErrorHandling"],"mappings":"2PAKgB,SACdA,EACAC,GAEI,IACI,MAAAC,EAAWC,EAAAA,uBAAuBH,EAAUC,GAC9C,GAAkB,OAAlBD,EAASI,KACL,MAAA,IAAIC,WAAW,yBAEhB,OAAAC,gCAA8BN,EAASI,KAAMF,SAC7CK,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./commonParseErrorHandling.cjs"),e=require("./parseStringToArraySync.cjs"),t=require("./parseStringToIterableIterator.cjs"),a=require("./parseStringToStream.cjs"),o=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");async function*n(e,a){try{yield*t.parseStringToIterableIterator(e,a)}catch(o){r.commonParseErrorHandling(o)}}Object.defineProperties(n,{toArray:{enumerable:!0,writable:!1,value:o.convertThisAsyncIterableIteratorToArray},toArraySync:{enumerable:!0,writable:!1,value:e.parseStringToArraySync},toIterableIterator:{enumerable:!0,writable:!1,value:t.parseStringToIterableIterator},toStream:{enumerable:!0,writable:!1,value:a.parseStringToStream}}),exports.parseString=n;
2
- //# sourceMappingURL=parseString.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseString.cjs","sources":["../../src/parseString.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { commonParseErrorHandling } from \"./commonParseErrorHandling.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV string to records.\n *\n * @category Middle-level API\n * @param csv CSV string to parse\n * @param options Parsing options. See {@link ParseOptions}.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseString.toArray} function.\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parseString } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parseString(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport async function* parseString<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n try {\n yield* parseStringToIterableIterator(csv, options);\n } catch (error) {\n commonParseErrorHandling(error);\n }\n}\nexport declare namespace parseString {\n /**\n * Parse CSV string to records.\n *\n * @returns Array of records\n *\n * @example\n * ```ts\n * import { parseString } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parseString.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: string,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV string to records.\n *\n * @returns Array of records\n *\n * @example\n *\n * ```ts\n * import { parseString } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = parseString.toArraySync(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArraySync<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n ): CSVRecord<Header>[];\n /**\n * Parse CSV string to records.\n *\n * @returns Async iterable iterator of records\n *\n * @example\n * ```ts\n * import { parseString } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for (const record of parseString.toIterableIterator(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toIterableIterator<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n ): IterableIterator<CSVRecord<Header>>;\n /**\n * Parse CSV string to records.\n *\n * @returns Readable stream of records\n *\n * @example\n * ```ts\n * import { parseString } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * await parseString.toStream(csv)\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 csv: string,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\nObject.defineProperties(parseString, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toArraySync: {\n enumerable: true,\n writable: false,\n value: parseStringToArraySync,\n },\n toIterableIterator: {\n enumerable: true,\n writable: false,\n value: parseStringToIterableIterator,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseStringToStream,\n },\n});\n"],"names":["async","parseString","csv","options","parseStringToIterableIterator","error","commonParseErrorHandling","Object","defineProperties","toArray","enumerable","writable","value","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray","toArraySync","parseStringToArraySync","toIterableIterator","toStream","parseStringToStream"],"mappings":"qUAiCuBA,eAAAC,EACrBC,EACAC,GAEI,UACKC,EAAAA,8BAA8BF,EAAKC,SACnCE,GACPC,EAAAA,yBAAyBD,EAC3B,CACF,CAyGAE,OAAOC,iBAAiBP,EAAa,CACnCQ,QAAS,CACPC,YAAY,EACZC,UAAU,EACVC,MAAOC,EAASC,yCAElBC,YAAa,CACXL,YAAY,EACZC,UAAU,EACVC,MAAOI,EAAAA,wBAETC,mBAAoB,CAClBP,YAAY,EACZC,UAAU,EACVC,MAAOR,EAAAA,+BAETc,SAAU,CACRR,YAAY,EACZC,UAAU,EACVC,MAAOO,EAAAA"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./parseStringStreamToStream.cjs"),r=require("./utils/convertStreamToAsyncIterableIterator.cjs"),t=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");function a(t,a){const o=e.parseStringStreamToStream(t,a);return r.convertStreamToAsyncIterableIterator(o)}Object.defineProperties(a,{toArray:{enumerable:!0,writable:!1,value:t.convertThisAsyncIterableIteratorToArray},toStream:{enumerable:!0,writable:!1,value:e.parseStringStreamToStream}}),exports.parseStringStream=a;
2
- //# sourceMappingURL=parseStringStream.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringStream.cjs","sources":["../../src/parseStringStream.ts"],"sourcesContent":["import type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { parseStringStreamToStream } from \"./parseStringStreamToStream.ts\";\nimport { convertStreamToAsyncIterableIterator } from \"./utils/convertStreamToAsyncIterableIterator.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV string stream to records.\n *\n * @category Middle-level API\n * @param stream CSV string stream to parse\n * @param options Parsing options.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseStringStream.toArray} function.\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parseStringStream } 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 parseStringStream(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parseStringStream<Header extends ReadonlyArray<string>>(\n stream: ReadableStream<string>,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const recordStream = parseStringStreamToStream(stream, options);\n return convertStreamToAsyncIterableIterator(recordStream);\n}\n\nexport declare namespace parseStringStream {\n /**\n * Parse CSV string stream to records.\n *\n * @returns Array of records\n *\n * @example\n *\n * ```ts\n * import { parseStringStream } 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 * const records = await parseStringStream.toArray(stream);\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 stream: ReadableStream<string>,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV string stream to records.\n *\n * @returns Array of records\n *\n * @example\n *\n * ```ts\n * import { parseStringStream } 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 * await parseStringStream.toStream(stream)\n * .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 stream: ReadableStream<string>,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseStringStream, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseStringStreamToStream,\n },\n});\n"],"names":["parseStringStream","stream","options","recordStream","parseStringStreamToStream","convertStreamToAsyncIterableIterator","Object","defineProperties","toArray","enumerable","writable","value","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray","toStream"],"mappings":"kQAuCgB,SAAAA,EACdC,EACAC,GAEM,MAAAC,EAAeC,EAAAA,0BAA0BH,EAAQC,GACvD,OAAOG,EAAAA,qCAAqCF,EAC9C,CAuEAG,OAAOC,iBAAiBP,EAAmB,CACzCQ,QAAS,CACPC,YAAY,EACZC,UAAU,EACVC,MAAOC,EAASC,yCAElBC,SAAU,CACRL,YAAY,EACZC,UAAU,EACVC,MAAOP,EAAAA"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./LexerTransformer.cjs"),r=require("./RecordAssemblerTransformer.cjs"),s=require("./utils/pipeline.cjs");exports.parseStringStreamToStream=function(n,o){return s.pipeline(n,new e.LexerTransformer(o),new r.RecordAssemblerTransformer(o))};
2
- //# sourceMappingURL=parseStringStreamToStream.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringStreamToStream.cjs","sources":["../../src/parseStringStreamToStream.ts"],"sourcesContent":["import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport type { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { pipeline } from \"./utils/pipeline.ts\";\n\nexport function parseStringStreamToStream<Header extends ReadonlyArray<string>>(\n stream: ReadableStream<string>,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\n return pipeline(\n stream,\n new LexerTransformer(options),\n new RecordAssemblerTransformer(options),\n );\n}\n"],"names":["stream","options","pipeline","LexerTransformer","RecordAssemblerTransformer"],"mappings":"4OAKgB,SACdA,EACAC,GAEO,OAAAC,EAAAA,SACLF,EACA,IAAIG,EAAAA,iBAAiBF,GACrB,IAAIG,EAAAA,2BAA2BH,GAEnC"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Lexer.cjs"),r=require("./RecordAssembler.cjs"),o=require("./commonParseErrorHandling.cjs");exports.parseStringToArraySync=function(s,n){try{const o=new e.Lexer(n),c=new r.RecordAssembler(n),t=o.lex(s);return[...c.assemble(t)]}catch(c){o.commonParseErrorHandling(c)}};
2
- //# sourceMappingURL=parseStringToArraySync.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringToArraySync.cjs","sources":["../../src/parseStringToArraySync.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\";\n\nexport function parseStringToArraySync<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): 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":["csv","options","lexer","Lexer","assembler","RecordAssembler","tokens","lex","assemble","error","commonParseErrorHandling"],"mappings":"6NAKgB,SACdA,EACAC,GAEI,IACI,MAAAC,EAAQ,IAAIC,QAAMF,GAClBG,EAAY,IAAIC,kBAAgBJ,GAChCK,EAASJ,EAAMK,IAAIP,GACzB,MAAO,IAAII,EAAUI,SAASF,UACvBG,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./_virtual/_web-csv-toolbox-wasm.cjs"),t=require("./assertCommonOptions.cjs"),o=require("./common/errors.cjs"),e=require("./constants.cjs");exports.parseStringToArraySyncWASM=function(n,i={}){const{delimiter:s=e.COMMA,quotation:a=e.DOUBLE_QUOTE}=i;if("string"!=typeof s||1!==s.length)throw new o.InvalidOptionError("Invalid delimiter, must be a single character on WASM.");if(a!==e.DOUBLE_QUOTE)throw new o.InvalidOptionError("Invalid quotation, must be double quote on WASM.");t.assertCommonOptions({delimiter:s,quotation:a});const c=s.charCodeAt(0);return JSON.parse(r.parseStringToArraySync(n,c))};
2
- //# sourceMappingURL=parseStringToArraySyncWASM.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringToArraySyncWASM.cjs","sources":["../../src/parseStringToArraySyncWASM.ts"],"sourcesContent":["import { parseStringToArraySync } from \"web-csv-toolbox-wasm\";\nimport { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport { InvalidOptionError } from \"./common/errors.ts\";\nimport type { CSVRecord, CommonOptions } from \"./common/types.ts\";\nimport { COMMA, DOUBLE_QUOTE } from \"./constants.ts\";\nimport type { loadWASM } from \"./loadWASM.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 */\nexport function parseStringToArraySyncWASM<Header extends readonly string[]>(\n csv: string,\n options: CommonOptions = {},\n): CSVRecord<Header>[] {\n const { delimiter = COMMA, quotation = DOUBLE_QUOTE } = options;\n if (typeof delimiter !== \"string\" || delimiter.length !== 1) {\n throw new InvalidOptionError(\n \"Invalid delimiter, must be a single character on WASM.\",\n );\n }\n if (quotation !== DOUBLE_QUOTE) {\n throw new InvalidOptionError(\n \"Invalid quotation, must be double quote on WASM.\",\n );\n }\n assertCommonOptions({ delimiter, quotation });\n const demiliterCode = delimiter.charCodeAt(0);\n return JSON.parse(parseStringToArraySync(csv, demiliterCode));\n}\n"],"names":["csv","options","delimiter","COMMA","quotation","DOUBLE_QUOTE","length","InvalidOptionError","assertCommonOptions","demiliterCode","charCodeAt","JSON","parse","parseStringToArraySync"],"mappings":"gRA0CO,SACLA,EACAC,EAAyB,IAEzB,MAAMC,UAAEA,EAAYC,EAAOA,MAAAC,UAAAA,EAAYC,gBAAiBJ,EACxD,GAAyB,iBAAdC,GAA+C,IAArBA,EAAUI,OAC7C,MAAM,IAAIC,EAAAA,mBACR,0DAGJ,GAAIH,IAAcC,EAAAA,aAChB,MAAM,IAAIE,EAAAA,mBACR,oDAGgBC,EAAAA,oBAAA,CAAEN,YAAWE,cAC3B,MAAAK,EAAgBP,EAAUQ,WAAW,GAC3C,OAAOC,KAAKC,MAAMC,EAAAA,uBAAuBb,EAAKS,GAChD"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Lexer.cjs"),r=require("./RecordAssembler.cjs"),o=require("./commonParseErrorHandling.cjs");exports.parseStringToIterableIterator=function(s,t){try{const o=new e.Lexer(t),n=new r.RecordAssembler(t),c=o.lex(s);return n.assemble(c)}catch(n){o.commonParseErrorHandling(n)}};
2
- //# sourceMappingURL=parseStringToIterableIterator.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringToIterableIterator.cjs","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\";\n\nexport function parseStringToIterableIterator<\n 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":["csv","options","lexer","Lexer","assembler","RecordAssembler","tokens","lex","assemble","error","commonParseErrorHandling"],"mappings":"oOAKgB,SAGdA,EACAC,GAEI,IACI,MAAAC,EAAQ,IAAIC,QAAMF,GAClBG,EAAY,IAAIC,kBAAgBJ,GAChCK,EAASJ,EAAMK,IAAIP,GAClB,OAAAI,EAAUI,SAASF,SACnBG,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./Lexer.cjs"),r=require("./RecordAssembler.cjs"),o=require("./commonParseErrorHandling.cjs");exports.parseStringToStream=function(s,t){try{const o=new e.Lexer(t),n=new r.RecordAssembler(t);return new ReadableStream({start(e){const r=o.lex(s);for(const o of n.assemble(r))e.enqueue(o);e.close()}})}catch(n){o.commonParseErrorHandling(n)}};
2
- //# sourceMappingURL=parseStringToStream.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseStringToStream.cjs","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\";\n\nexport function parseStringToStream<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":["csv","options","lexer","Lexer","assembler","RecordAssembler","ReadableStream","start","controller","tokens","lex","record","assemble","enqueue","close","error","commonParseErrorHandling"],"mappings":"0NAKgB,SACdA,EACAC,GAEI,IACI,MAAAC,EAAQ,IAAIC,QAAMF,GAClBG,EAAY,IAAIC,kBAAgBJ,GACtC,OAAO,IAAIK,eAAe,CACxB,KAAAC,CAAMC,GACE,MAAAC,EAASP,EAAMQ,IAAIV,GACzB,IAAA,MAAWW,KAAUP,EAAUQ,SAASH,GACtCD,EAAWK,QAAQF,GAErBH,EAAWM,OACb,UAEKC,GACPC,EAAAA,yBAAyBD,EAC3B,CACF"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./parseUint8ArrayStreamToStream.cjs"),e=require("./utils/convertStreamToAsyncIterableIterator.cjs"),t=require("./utils/convertThisAsyncIterableIteratorToArray.cjs");function a(t,a){const o=r.parseUint8ArrayStreamToStream(t,a);return e.convertStreamToAsyncIterableIterator(o)}Object.defineProperties(a,{toArray:{enumerable:!0,writable:!1,value:t.convertThisAsyncIterableIteratorToArray},toStream:{enumerable:!0,writable:!1,value:r.parseUint8ArrayStreamToStream}}),exports.parseUint8ArrayStream=a;
2
- //# sourceMappingURL=parseUint8ArrayStream.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseUint8ArrayStream.cjs","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":["parseUint8ArrayStream","stream","options","recordStream","parseUint8ArrayStreamToStream","convertStreamToAsyncIterableIterator","Object","defineProperties","toArray","enumerable","writable","value","internal.convertThisAsyncIterableIteratorToArray","convertThisAsyncIterableIteratorToArray","toStream"],"mappings":"sQAwCgB,SAAAA,EACdC,EACAC,GAEM,MAAAC,EAAeC,EAAAA,8BAA8BH,EAAQC,GAC3D,OAAOG,EAAAA,qCAAqCF,EAC9C,CAkEAG,OAAOC,iBAAiBP,EAAuB,CAC7CQ,QAAS,CACPC,YAAY,EACZC,UAAU,EACVC,MAAOC,EAASC,yCAElBC,SAAU,CACRL,YAAY,EACZC,UAAU,EACVC,MAAOP,EAAAA"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("./LexerTransformer.cjs"),r=require("./RecordAssemblerTransformer.cjs"),n=require("./utils/pipeline.cjs");exports.parseUint8ArrayStreamToStream=function(o,s){const{charset:t,fatal:a,ignoreBOM:i,decomposition:m}=s??{};return m?n.pipeline(o,new DecompressionStream(m),new TextDecoderStream(t,{fatal:a,ignoreBOM:i}),new e.LexerTransformer(s),new r.RecordAssemblerTransformer(s)):n.pipeline(o,new TextDecoderStream(t,{fatal:a,ignoreBOM:i}),new e.LexerTransformer(s),new r.RecordAssemblerTransformer(s))};
2
- //# sourceMappingURL=parseUint8ArrayStreamToStream.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseUint8ArrayStreamToStream.cjs","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":["stream","options","charset","fatal","ignoreBOM","decomposition","pipeline","DecompressionStream","TextDecoderStream","LexerTransformer","RecordAssemblerTransformer"],"mappings":"gPAKgB,SACdA,EACAC,GAEA,MAAMC,QAAEA,EAASC,MAAAA,EAAAC,UAAOA,gBAAWC,GAAkBJ,GAAW,GAChE,OAAOI,EACHC,EAAAA,SACEN,EACA,IAAIO,oBAAoBF,GACxB,IAAIG,kBAAkBN,EAAS,CAAEC,QAAOC,cACxC,IAAIK,EAAAA,iBAAiBR,GACrB,IAAIS,EAAAA,2BAA2BT,IAEjCK,EAAAA,SACEN,EACA,IAAIQ,kBAAkBN,EAAS,CAAEC,QAAOC,cACxC,IAAIK,EAAAA,iBAAiBR,GACrB,IAAIS,EAAAA,2BAA2BT,GAEvC"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.convertBinaryToString=function(e,r){return new TextDecoder(r?.charset,{ignoreBOM:r?.ignoreBOM,fatal:r?.fatal}).decode(e instanceof ArrayBuffer?new Uint8Array(e):e)};
2
- //# sourceMappingURL=convertBinaryToString.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertBinaryToString.cjs","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":["binary","options","TextDecoder","charset","ignoreBOM","fatal","decode","ArrayBuffer","Uint8Array"],"mappings":"8GAWgB,SACdA,EACAC,GAEO,OAAA,IAAIC,YAAYD,GAASE,QAAS,CACvCC,UAAWH,GAASG,UACpBC,MAAOJ,GAASI,QACfC,OAAON,aAAkBO,YAAc,IAAIC,WAAWR,GAAUA,EACrE"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.convertIterableIteratorToAsync=function(e){return{async next(){const t=e.next();return Promise.resolve(t)},[Symbol.asyncIterator](){return this}}};
2
- //# sourceMappingURL=convertIterableIteratorToAsync.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertIterableIteratorToAsync.cjs","sources":["../../../src/utils/convertIterableIteratorToAsync.ts"],"sourcesContent":["export function convertIterableIteratorToAsync<T>(\n iterator: IterableIterator<T>,\n): AsyncIterableIterator<T> {\n return {\n async next() {\n const result = iterator.next();\n return Promise.resolve(result);\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n"],"names":["iterator","next","result","Promise","resolve","Symbol","asyncIterator","this"],"mappings":"uHAAO,SACLA,GAEO,MAAA,CACL,UAAMC,GACE,MAAAC,EAASF,EAASC,OACjB,OAAAE,QAAQC,QAAQF,EACzB,EACA,CAACG,OAAOC,iBACC,OAAAC,IACT,EAEJ"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.convertStreamToAsyncIterableIterator=async function*(e){const t=e.getReader();for(;;){const{done:e,value:r}=await t.read();if(e)break;yield r}};
2
- //# sourceMappingURL=convertStreamToAsyncIterableIterator.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertStreamToAsyncIterableIterator.cjs","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":["async","stream","reader","getReader","done","value","read"],"mappings":"6HAAAA,gBACEC,GAEM,MAAAC,EAASD,EAAOE,YACtB,OAAa,CACX,MAAMC,KAAEA,EAAMC,MAAAA,SAAgBH,EAAOI,OACrC,GAAIF,EAAM,YACJC,CACR,CACF"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.convertThisAsyncIterableIteratorToArray=async function(...t){const r=[];for await(const e of this(...t))r.push(e);return r};
2
- //# sourceMappingURL=convertThisAsyncIterableIteratorToArray.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"convertThisAsyncIterableIteratorToArray.cjs","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":["async","args","rows","row","this","push"],"mappings":"gIAAAA,kBAGcC,GACZ,MAAMC,EAAY,GAClB,UAAA,MAAiBC,KAAOC,QAAQH,GAC9BC,EAAKG,KAAKF,GAEL,OAAAD,CACT"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.escapeRegExp=function(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")};
2
- //# sourceMappingURL=escapeRegExp.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"escapeRegExp.cjs","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":["v","replace"],"mappings":"qGAOO,SAAsBA,GACpB,OAAAA,EAAEC,QAAQ,sBAAuB,OAC1C"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.parseMime=function(t){const[e,...r]=t.split(";"),o={type:e.trim(),parameters:{}};for(const s of r){const[t,e]=s.split("=");o.parameters[t.trim()]=e.trim()}return o};
2
- //# sourceMappingURL=parseMime.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"parseMime.cjs","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":["contentType","type","parameters","split","result","trim","paramator","key","value"],"mappings":"kGAOO,SAAmBA,GACxB,MAAOC,KAASC,GAAcF,EAAYG,MAAM,KAC1CC,EAA0B,CAC9BH,KAAMA,EAAKI,OACXH,WAAY,CAAC,GAEf,IAAA,MAAWI,KAAaJ,EAAY,CAClC,MAAOK,EAAKC,GAASF,EAAUH,MAAM,KACrCC,EAAOF,WAAWK,EAAIF,QAAUG,EAAMH,MACxC,CACO,OAAAD,CACT"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"}),exports.pipeline=function(e,...r){return new ReadableStream({start:t=>{r.reduce(((e,r)=>e.pipeThrough(r)),e).pipeTo(new WritableStream({write:e=>t.enqueue(e),close:()=>t.close()})).catch((e=>t.error(e)))}})};
2
- //# sourceMappingURL=pipeline.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"pipeline.cjs","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","transformers","ReadableStream","start","controller","reduce","transformer","pipeThrough","pipeTo","WritableStream","write","v","enqueue","close","catch","error"],"mappings":"iGAkBgB,SACdA,KACGC,GAEH,OAAO,IAAIC,eAAe,CACxBC,MAAQC,IAEJH,EACGI,QACC,CAACL,EAAQM,IAAgBN,EAAOO,YAAYD,IAC5CN,GAEDQ,OACC,IAAIC,eAAe,CACjBC,MAAQC,GAAMP,EAAWQ,QAAQD,GACjCE,MAAO,IAAMT,EAAWS,WAG3BC,OAAOC,GAAUX,EAAWW,MAAMA,IAAS,GAGtD"}
@@ -1,2 +0,0 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("./common/constants.cjs"),e=require("./common/errors.cjs"),s=require("./LexerTransformer.cjs"),o=require("./loadWASM.cjs"),a=require("./parse.cjs"),t=require("./parseBinary.cjs"),i=require("./parseResponse.cjs"),p=require("./parseString.cjs"),n=require("./parseStringStream.cjs"),c=require("./parseStringToArraySyncWASM.cjs"),S=require("./parseUint8ArrayStream.cjs"),m=require("./RecordAssemblerTransformer.cjs");exports.Field=r.Field,exports.FieldDelimiter=r.FieldDelimiter,exports.RecordDelimiter=r.RecordDelimiter,exports.InvalidOptionError=e.InvalidOptionError,exports.ParseError=e.ParseError,exports.LexerTransformer=s.LexerTransformer,exports.loadWASM=o.loadWASM,exports.parse=a.parse,exports.parseBinary=t.parseBinary,exports.parseResponse=i.parseResponse,exports.parseString=p.parseString,exports.parseStringStream=n.parseStringStream,exports.parseStringToArraySyncWASM=c.parseStringToArraySyncWASM,exports.parseUint8ArrayStream=S.parseUint8ArrayStream,exports.RecordAssemblerTransformer=m.RecordAssemblerTransformer;
2
- //# sourceMappingURL=web-csv-toolbox.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"web-csv-toolbox.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
package/dist/es/Lexer.js DELETED
@@ -1,225 +0,0 @@
1
- import { assertCommonOptions } from './assertCommonOptions.js';
2
- import { RecordDelimiter, FieldDelimiter, Field } from './common/constants.js';
3
- import { ParseError } from './common/errors.js';
4
- import { COMMA, DOUBLE_QUOTE, CRLF, LF } from './constants.js';
5
- import { escapeRegExp } from './utils/escapeRegExp.js';
6
-
7
- class Lexer {
8
- #delimiter;
9
- #quotation;
10
- #buffer = "";
11
- #flush = false;
12
- #matcher;
13
- #fieldDelimiterLength;
14
- #cursor = {
15
- line: 1,
16
- column: 1,
17
- offset: 0
18
- };
19
- #rowNumber = 1;
20
- /**
21
- * Constructs a new Lexer instance.
22
- * @param options - The common options for the lexer.
23
- */
24
- constructor({
25
- delimiter = COMMA,
26
- quotation = DOUBLE_QUOTE
27
- } = {}) {
28
- assertCommonOptions({ delimiter, quotation });
29
- this.#delimiter = delimiter;
30
- this.#quotation = quotation;
31
- this.#fieldDelimiterLength = delimiter.length;
32
- const d = escapeRegExp(delimiter);
33
- const q = escapeRegExp(quotation);
34
- this.#matcher = new RegExp(
35
- `^(?:(?!${q})(?!${d})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${q}|${d}|\\r|\\n|$)`
36
- );
37
- }
38
- /**
39
- * Lexes the given chunk of CSV data.
40
- * @param chunk - The chunk of CSV data to be lexed.
41
- * @param buffering - Indicates whether the lexer is buffering or not.
42
- * @returns An iterable iterator of tokens.
43
- */
44
- lex(chunk, buffering = false) {
45
- if (!buffering) {
46
- this.#flush = true;
47
- }
48
- if (typeof chunk === "string" && chunk.length !== 0) {
49
- this.#buffer += chunk;
50
- }
51
- return this.#tokens();
52
- }
53
- /**
54
- * Flushes the lexer and returns any remaining tokens.
55
- * @returns An array of tokens.
56
- */
57
- flush() {
58
- this.#flush = true;
59
- return [...this.#tokens()];
60
- }
61
- /**
62
- * Generates tokens from the buffered CSV data.
63
- * @yields Tokens from the buffered CSV data.
64
- */
65
- *#tokens() {
66
- if (this.#flush) {
67
- if (this.#buffer.endsWith(CRLF)) {
68
- this.#buffer = this.#buffer.slice(
69
- 0,
70
- -2
71
- /* -CRLF.length */
72
- );
73
- } else if (this.#buffer.endsWith(LF)) {
74
- this.#buffer = this.#buffer.slice(
75
- 0,
76
- -1
77
- /* -LF.length */
78
- );
79
- }
80
- }
81
- let token;
82
- while (token = this.#nextToken()) {
83
- yield token;
84
- }
85
- }
86
- /**
87
- * Retrieves the next token from the buffered CSV data.
88
- * @returns The next token or null if there are no more tokens.
89
- */
90
- #nextToken() {
91
- if (this.#buffer.length === 0) {
92
- return null;
93
- }
94
- if (this.#flush === false && (this.#buffer === CRLF || this.#buffer === LF)) {
95
- return null;
96
- }
97
- if (this.#buffer.startsWith(CRLF)) {
98
- this.#buffer = this.#buffer.slice(2);
99
- const start = { ...this.#cursor };
100
- this.#cursor.line++;
101
- this.#cursor.column = 1;
102
- this.#cursor.offset += 2;
103
- const token = {
104
- type: RecordDelimiter,
105
- value: CRLF,
106
- location: {
107
- start,
108
- end: { ...this.#cursor },
109
- rowNumber: this.#rowNumber++
110
- }
111
- };
112
- return token;
113
- }
114
- if (this.#buffer.startsWith(LF)) {
115
- this.#buffer = this.#buffer.slice(1);
116
- const start = { ...this.#cursor };
117
- this.#cursor.line++;
118
- this.#cursor.column = 1;
119
- this.#cursor.offset += 1;
120
- const token = {
121
- type: RecordDelimiter,
122
- value: LF,
123
- location: {
124
- start,
125
- end: { ...this.#cursor },
126
- rowNumber: this.#rowNumber++
127
- }
128
- };
129
- return token;
130
- }
131
- if (this.#buffer.startsWith(this.#delimiter)) {
132
- this.#buffer = this.#buffer.slice(1);
133
- const start = { ...this.#cursor };
134
- this.#cursor.column += this.#fieldDelimiterLength;
135
- this.#cursor.offset += this.#fieldDelimiterLength;
136
- return {
137
- type: FieldDelimiter,
138
- value: this.#delimiter,
139
- location: {
140
- start,
141
- end: { ...this.#cursor },
142
- rowNumber: this.#rowNumber
143
- }
144
- };
145
- }
146
- if (this.#buffer.startsWith(this.#quotation)) {
147
- let value = "";
148
- let offset = 1;
149
- let column = 2;
150
- let line = 0;
151
- let cur = this.#buffer[offset];
152
- let next = this.#buffer[offset + 1];
153
- do {
154
- if (cur === this.#quotation) {
155
- if (next === this.#quotation) {
156
- value += this.#quotation;
157
- offset += 2;
158
- cur = this.#buffer[offset];
159
- next = this.#buffer[offset + 1];
160
- column += 2;
161
- continue;
162
- }
163
- if (next === void 0 && this.#flush === false) {
164
- return null;
165
- }
166
- offset++;
167
- this.#buffer = this.#buffer.slice(offset);
168
- const start = { ...this.#cursor };
169
- this.#cursor.column += column;
170
- this.#cursor.offset += offset;
171
- this.#cursor.line += line;
172
- return {
173
- type: Field,
174
- value,
175
- location: {
176
- start,
177
- end: { ...this.#cursor },
178
- rowNumber: this.#rowNumber
179
- }
180
- };
181
- }
182
- value += cur;
183
- if (cur === LF) {
184
- line++;
185
- column = 1;
186
- } else {
187
- column++;
188
- }
189
- offset++;
190
- cur = next;
191
- next = this.#buffer[offset + 1];
192
- } while (cur !== void 0);
193
- if (this.#flush) {
194
- throw new ParseError("Unexpected EOF while parsing quoted field.", {
195
- position: { ...this.#cursor }
196
- });
197
- }
198
- return null;
199
- }
200
- const match = this.#matcher.exec(this.#buffer);
201
- if (match) {
202
- if (this.#flush === false && match[0].length === this.#buffer.length) {
203
- return null;
204
- }
205
- const value = match[1];
206
- this.#buffer = this.#buffer.slice(value.length);
207
- const start = { ...this.#cursor };
208
- this.#cursor.column += value.length;
209
- this.#cursor.offset += value.length;
210
- return {
211
- type: Field,
212
- value,
213
- location: {
214
- start,
215
- end: { ...this.#cursor },
216
- rowNumber: this.#rowNumber
217
- }
218
- };
219
- }
220
- return null;
221
- }
222
- }
223
-
224
- export { Lexer };
225
- //# sourceMappingURL=Lexer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Lexer.js","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 CommonOptions,\n Position,\n RecordDelimiterToken,\n Token,\n} from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, 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: 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 /**\n * Constructs a new Lexer instance.\n * @param options - The common options for the lexer.\n */\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\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 }\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 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":[],"mappings":"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"}
@@ -1,29 +0,0 @@
1
- import { Lexer } from './Lexer.js';
2
-
3
- class LexerTransformer extends TransformStream {
4
- lexer;
5
- constructor(options = {}) {
6
- super({
7
- transform: (chunk, controller) => {
8
- if (chunk.length !== 0) {
9
- try {
10
- controller.enqueue([...this.lexer.lex(chunk, true)]);
11
- } catch (error) {
12
- controller.error(error);
13
- }
14
- }
15
- },
16
- flush: (controller) => {
17
- try {
18
- controller.enqueue(this.lexer.flush());
19
- } catch (error) {
20
- controller.error(error);
21
- }
22
- }
23
- });
24
- this.lexer = new Lexer(options);
25
- }
26
- }
27
-
28
- export { LexerTransformer };
29
- //# sourceMappingURL=LexerTransformer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LexerTransformer.js","sources":["../../src/LexerTransformer.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport type { CommonOptions, Token } from \"./common/types.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 extends TransformStream<string, Token[]> {\n public readonly lexer: Lexer;\n constructor(options: CommonOptions = {}) {\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":[],"mappings":";;AAiCO,MAAM,yBAAyB,eAAiC,CAAA;AAAA,EACrD,KAAA,CAAA;AAAA,EAChB,WAAA,CAAY,OAAyB,GAAA,EAAI,EAAA;AACvC,IAAM,KAAA,CAAA;AAAA,MACJ,SAAA,EAAW,CAAC,KAAA,EAAO,UAAe,KAAA;AAChC,QAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,UAAI,IAAA;AACF,YAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,GAAI,CAAA,KAAA,EAAO,IAAI,CAAC,CAAC,CAAA,CAAA;AAAA,mBAC5C,KAAO,EAAA;AACd,YAAA,UAAA,CAAW,MAAM,KAAK,CAAA,CAAA;AAAA,WACxB;AAAA,SACF;AAAA,OACF;AAAA,MACA,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,QAAI,IAAA;AACF,UAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA,EAAO,CAAA,CAAA;AAAA,iBAC9B,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA,CAAA;AAAA,SACxB;AAAA,OACF;AAAA,KACD,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA,CAAA;AAAA,GAChC;AACF;;;;"}
@@ -1,73 +0,0 @@
1
- import { RecordDelimiter, FieldDelimiter } from './common/constants.js';
2
- import { ParseError } from './common/errors.js';
3
-
4
- class RecordAssembler {
5
- #fieldIndex = 0;
6
- #row = [];
7
- #header;
8
- #dirty = false;
9
- constructor(options = {}) {
10
- if (options.header !== void 0 && Array.isArray(options.header)) {
11
- this.#setHeader(options.header);
12
- }
13
- }
14
- *assemble(tokens, flush = true) {
15
- for (const token of tokens) {
16
- switch (token.type) {
17
- case FieldDelimiter:
18
- this.#fieldIndex++;
19
- this.#dirty = true;
20
- break;
21
- case RecordDelimiter:
22
- if (this.#header === void 0) {
23
- this.#setHeader(this.#row);
24
- } else {
25
- if (this.#dirty) {
26
- yield Object.fromEntries(
27
- this.#header.map((header, index) => [
28
- header,
29
- this.#row.at(index)
30
- ])
31
- );
32
- } else {
33
- yield Object.fromEntries(
34
- this.#header.map((header) => [header, ""])
35
- );
36
- }
37
- }
38
- this.#fieldIndex = 0;
39
- this.#row = new Array(this.#header?.length).fill("");
40
- this.#dirty = false;
41
- break;
42
- default:
43
- this.#dirty = true;
44
- this.#row[this.#fieldIndex] = token.value;
45
- break;
46
- }
47
- }
48
- if (flush) {
49
- yield* this.flush();
50
- }
51
- }
52
- *flush() {
53
- if (this.#header !== void 0) {
54
- if (this.#dirty) {
55
- yield Object.fromEntries(
56
- this.#header.filter((v) => v).map((header, index) => [header, this.#row.at(index)])
57
- );
58
- }
59
- }
60
- }
61
- #setHeader(header) {
62
- this.#header = header;
63
- if (this.#header.length === 0) {
64
- throw new ParseError("The header must not be empty.");
65
- }
66
- if (new Set(this.#header).size !== this.#header.length) {
67
- throw new ParseError("The header must not contain duplicate fields.");
68
- }
69
- }
70
- }
71
-
72
- export { RecordAssembler };
73
- //# sourceMappingURL=RecordAssembler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RecordAssembler.js","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\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n if (options.header !== undefined && Array.isArray(options.header)) {\n this.#setHeader(options.header);\n }\n }\n\n public *assemble(\n tokens: Iterable<Token>,\n flush = true,\n ): IterableIterator<CSVRecord<Header>> {\n for (const token of tokens) {\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":[],"mappings":"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"}